bynana-ui 1.0.0 → 1.3.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 (269) hide show
  1. package/dist/accordion/index.js +2 -0
  2. package/dist/accordion/index.js.map +1 -0
  3. package/dist/accordion/index.mjs +2 -0
  4. package/dist/accordion/index.mjs.map +1 -0
  5. package/dist/alert/index.js +2 -0
  6. package/dist/alert/index.js.map +1 -0
  7. package/dist/alert/index.mjs +2 -0
  8. package/dist/alert/index.mjs.map +1 -0
  9. package/dist/attract-button/index.js +2 -0
  10. package/dist/attract-button/index.js.map +1 -0
  11. package/dist/attract-button/index.mjs +2 -0
  12. package/dist/attract-button/index.mjs.map +1 -0
  13. package/dist/avatar/index.js +2 -0
  14. package/dist/avatar/index.js.map +1 -0
  15. package/dist/avatar/index.mjs +2 -0
  16. package/dist/avatar/index.mjs.map +1 -0
  17. package/dist/badge/index.js +2 -0
  18. package/dist/badge/index.js.map +1 -0
  19. package/dist/badge/index.mjs +2 -0
  20. package/dist/badge/index.mjs.map +1 -0
  21. package/dist/card/index.js +2 -0
  22. package/dist/card/index.js.map +1 -0
  23. package/dist/card/index.mjs +2 -0
  24. package/dist/card/index.mjs.map +1 -0
  25. package/dist/checkbox/index.js +2 -0
  26. package/dist/checkbox/index.js.map +1 -0
  27. package/dist/checkbox/index.mjs +2 -0
  28. package/dist/checkbox/index.mjs.map +1 -0
  29. package/dist/circular-text/index.js +2 -0
  30. package/dist/circular-text/index.js.map +1 -0
  31. package/dist/circular-text/index.mjs +2 -0
  32. package/dist/circular-text/index.mjs.map +1 -0
  33. package/dist/command-button/index.js +2 -0
  34. package/dist/command-button/index.js.map +1 -0
  35. package/dist/command-button/index.mjs +2 -0
  36. package/dist/command-button/index.mjs.map +1 -0
  37. package/dist/copy-button/index.js +2 -0
  38. package/dist/copy-button/index.js.map +1 -0
  39. package/dist/copy-button/index.mjs +2 -0
  40. package/dist/copy-button/index.mjs.map +1 -0
  41. package/dist/count-up/index.js +2 -0
  42. package/dist/count-up/index.js.map +1 -0
  43. package/dist/count-up/index.mjs +2 -0
  44. package/dist/count-up/index.mjs.map +1 -0
  45. package/dist/counter/index.js +2 -0
  46. package/dist/counter/index.js.map +1 -0
  47. package/dist/counter/index.mjs +2 -0
  48. package/dist/counter/index.mjs.map +1 -0
  49. package/dist/decrypted-text/index.js +2 -0
  50. package/dist/decrypted-text/index.js.map +1 -0
  51. package/dist/decrypted-text/index.mjs +2 -0
  52. package/dist/decrypted-text/index.mjs.map +1 -0
  53. package/dist/dock/index.js +2 -0
  54. package/dist/dock/index.js.map +1 -0
  55. package/dist/dock/index.mjs +2 -0
  56. package/dist/dock/index.mjs.map +1 -0
  57. package/dist/drawer/index.js +2 -0
  58. package/dist/drawer/index.js.map +1 -0
  59. package/dist/drawer/index.mjs +2 -0
  60. package/dist/drawer/index.mjs.map +1 -0
  61. package/dist/dynamic-text/index.js +2 -0
  62. package/dist/dynamic-text/index.js.map +1 -0
  63. package/dist/dynamic-text/index.mjs +2 -0
  64. package/dist/dynamic-text/index.mjs.map +1 -0
  65. package/dist/elastic-text/index.js +2 -0
  66. package/dist/elastic-text/index.js.map +1 -0
  67. package/dist/elastic-text/index.mjs +2 -0
  68. package/dist/elastic-text/index.mjs.map +1 -0
  69. package/dist/file-tree/index.js +2 -0
  70. package/dist/file-tree/index.js.map +1 -0
  71. package/dist/file-tree/index.mjs +2 -0
  72. package/dist/file-tree/index.mjs.map +1 -0
  73. package/dist/fuzzy-text/index.js +2 -0
  74. package/dist/fuzzy-text/index.js.map +1 -0
  75. package/dist/fuzzy-text/index.mjs +2 -0
  76. package/dist/fuzzy-text/index.mjs.map +1 -0
  77. package/dist/glowing-text/index.js +2 -0
  78. package/dist/glowing-text/index.js.map +1 -0
  79. package/dist/glowing-text/index.mjs +2 -0
  80. package/dist/glowing-text/index.mjs.map +1 -0
  81. package/dist/gradient-button/index.js +2 -0
  82. package/dist/gradient-button/index.js.map +1 -0
  83. package/dist/gradient-button/index.mjs +2 -0
  84. package/dist/gradient-button/index.mjs.map +1 -0
  85. package/dist/hold-button/index.js +2 -0
  86. package/dist/hold-button/index.js.map +1 -0
  87. package/dist/hold-button/index.mjs +2 -0
  88. package/dist/hold-button/index.mjs.map +1 -0
  89. package/dist/index.js +32 -1
  90. package/dist/index.js.map +1 -1
  91. package/dist/index.mjs +32 -1
  92. package/dist/index.mjs.map +1 -1
  93. package/dist/input/index.js +2 -0
  94. package/dist/input/index.js.map +1 -0
  95. package/dist/input/index.mjs +2 -0
  96. package/dist/input/index.mjs.map +1 -0
  97. package/dist/liquid-button/index.js +2 -0
  98. package/dist/liquid-button/index.js.map +1 -0
  99. package/dist/liquid-button/index.mjs +2 -0
  100. package/dist/liquid-button/index.mjs.map +1 -0
  101. package/dist/liquid-text/index.js +2 -0
  102. package/dist/liquid-text/index.js.map +1 -0
  103. package/dist/liquid-text/index.mjs +2 -0
  104. package/dist/liquid-text/index.mjs.map +1 -0
  105. package/dist/loading-bar/index.js +2 -0
  106. package/dist/loading-bar/index.js.map +1 -0
  107. package/dist/loading-bar/index.mjs +2 -0
  108. package/dist/loading-bar/index.mjs.map +1 -0
  109. package/dist/loading-bounce/index.js +2 -0
  110. package/dist/loading-bounce/index.js.map +1 -0
  111. package/dist/loading-bounce/index.mjs +2 -0
  112. package/dist/loading-bounce/index.mjs.map +1 -0
  113. package/dist/loading-flower/index.js +7 -0
  114. package/dist/loading-flower/index.js.map +1 -0
  115. package/dist/loading-flower/index.mjs +7 -0
  116. package/dist/loading-flower/index.mjs.map +1 -0
  117. package/dist/loading-geometric/index.js +7 -0
  118. package/dist/loading-geometric/index.js.map +1 -0
  119. package/dist/loading-geometric/index.mjs +7 -0
  120. package/dist/loading-geometric/index.mjs.map +1 -0
  121. package/dist/loading-morph/index.js +5 -0
  122. package/dist/loading-morph/index.js.map +1 -0
  123. package/dist/loading-morph/index.mjs +5 -0
  124. package/dist/loading-morph/index.mjs.map +1 -0
  125. package/dist/loading-pulse/index.js +2 -0
  126. package/dist/loading-pulse/index.js.map +1 -0
  127. package/dist/loading-pulse/index.mjs +2 -0
  128. package/dist/loading-pulse/index.mjs.map +1 -0
  129. package/dist/loading-rings/index.js +4 -0
  130. package/dist/loading-rings/index.js.map +1 -0
  131. package/dist/loading-rings/index.mjs +4 -0
  132. package/dist/loading-rings/index.mjs.map +1 -0
  133. package/dist/loading-text/index.js +6 -0
  134. package/dist/loading-text/index.js.map +1 -0
  135. package/dist/loading-text/index.mjs +6 -0
  136. package/dist/loading-text/index.mjs.map +1 -0
  137. package/dist/loading-words/index.js +4 -0
  138. package/dist/loading-words/index.js.map +1 -0
  139. package/dist/loading-words/index.mjs +4 -0
  140. package/dist/loading-words/index.mjs.map +1 -0
  141. package/dist/magnetic-text/index.js +2 -0
  142. package/dist/magnetic-text/index.js.map +1 -0
  143. package/dist/magnetic-text/index.mjs +2 -0
  144. package/dist/magnetic-text/index.mjs.map +1 -0
  145. package/dist/matrix-text/index.js +2 -0
  146. package/dist/matrix-text/index.js.map +1 -0
  147. package/dist/matrix-text/index.mjs +2 -0
  148. package/dist/matrix-text/index.mjs.map +1 -0
  149. package/dist/modal/index.js +2 -0
  150. package/dist/modal/index.js.map +1 -0
  151. package/dist/modal/index.mjs +2 -0
  152. package/dist/modal/index.mjs.map +1 -0
  153. package/dist/morph-text/index.js +2 -0
  154. package/dist/morph-text/index.js.map +1 -0
  155. package/dist/morph-text/index.mjs +2 -0
  156. package/dist/morph-text/index.mjs.map +1 -0
  157. package/dist/neon-button/index.js +2 -0
  158. package/dist/neon-button/index.js.map +1 -0
  159. package/dist/neon-button/index.mjs +2 -0
  160. package/dist/neon-button/index.mjs.map +1 -0
  161. package/dist/particle-button/index.js +2 -0
  162. package/dist/particle-button/index.js.map +1 -0
  163. package/dist/particle-button/index.mjs +2 -0
  164. package/dist/particle-button/index.mjs.map +1 -0
  165. package/dist/perspective-text/index.js +2 -0
  166. package/dist/perspective-text/index.js.map +1 -0
  167. package/dist/perspective-text/index.mjs +2 -0
  168. package/dist/perspective-text/index.mjs.map +1 -0
  169. package/dist/progress/index.js +2 -0
  170. package/dist/progress/index.js.map +1 -0
  171. package/dist/progress/index.mjs +2 -0
  172. package/dist/progress/index.mjs.map +1 -0
  173. package/dist/radio/index.js +2 -0
  174. package/dist/radio/index.js.map +1 -0
  175. package/dist/radio/index.mjs +2 -0
  176. package/dist/radio/index.mjs.map +1 -0
  177. package/dist/rainbow-text/index.js +7 -0
  178. package/dist/rainbow-text/index.js.map +1 -0
  179. package/dist/rainbow-text/index.mjs +7 -0
  180. package/dist/rainbow-text/index.mjs.map +1 -0
  181. package/dist/reveal-text/index.js +2 -0
  182. package/dist/reveal-text/index.js.map +1 -0
  183. package/dist/reveal-text/index.mjs +2 -0
  184. package/dist/reveal-text/index.mjs.map +1 -0
  185. package/dist/rotating-text/index.js +2 -0
  186. package/dist/rotating-text/index.js.map +1 -0
  187. package/dist/rotating-text/index.mjs +2 -0
  188. package/dist/rotating-text/index.mjs.map +1 -0
  189. package/dist/scrambled-text/index.js +2 -0
  190. package/dist/scrambled-text/index.js.map +1 -0
  191. package/dist/scrambled-text/index.mjs +2 -0
  192. package/dist/scrambled-text/index.mjs.map +1 -0
  193. package/dist/select/index.js +2 -0
  194. package/dist/select/index.js.map +1 -0
  195. package/dist/select/index.mjs +2 -0
  196. package/dist/select/index.mjs.map +1 -0
  197. package/dist/shiny-text/index.js +7 -0
  198. package/dist/shiny-text/index.js.map +1 -0
  199. package/dist/shiny-text/index.mjs +7 -0
  200. package/dist/shiny-text/index.mjs.map +1 -0
  201. package/dist/skeleton/index.js +2 -0
  202. package/dist/skeleton/index.js.map +1 -0
  203. package/dist/skeleton/index.mjs +2 -0
  204. package/dist/skeleton/index.mjs.map +1 -0
  205. package/dist/sliced-text/index.js +2 -0
  206. package/dist/sliced-text/index.js.map +1 -0
  207. package/dist/sliced-text/index.mjs +2 -0
  208. package/dist/sliced-text/index.mjs.map +1 -0
  209. package/dist/slide-button/index.js +2 -0
  210. package/dist/slide-button/index.js.map +1 -0
  211. package/dist/slide-button/index.mjs +2 -0
  212. package/dist/slide-button/index.mjs.map +1 -0
  213. package/dist/split-text/index.js +2 -0
  214. package/dist/split-text/index.js.map +1 -0
  215. package/dist/split-text/index.mjs +2 -0
  216. package/dist/split-text/index.mjs.map +1 -0
  217. package/dist/stagger-text/index.js +2 -0
  218. package/dist/stagger-text/index.js.map +1 -0
  219. package/dist/stagger-text/index.mjs +2 -0
  220. package/dist/stagger-text/index.mjs.map +1 -0
  221. package/dist/stepper/index.js +2 -0
  222. package/dist/stepper/index.js.map +1 -0
  223. package/dist/stepper/index.mjs +2 -0
  224. package/dist/stepper/index.mjs.map +1 -0
  225. package/dist/switch/index.js +2 -0
  226. package/dist/switch/index.js.map +1 -0
  227. package/dist/switch/index.mjs +2 -0
  228. package/dist/switch/index.mjs.map +1 -0
  229. package/dist/swoosh-text/index.js +2 -0
  230. package/dist/swoosh-text/index.js.map +1 -0
  231. package/dist/swoosh-text/index.mjs +2 -0
  232. package/dist/swoosh-text/index.mjs.map +1 -0
  233. package/dist/tabs/index.js +2 -0
  234. package/dist/tabs/index.js.map +1 -0
  235. package/dist/tabs/index.mjs +2 -0
  236. package/dist/tabs/index.mjs.map +1 -0
  237. package/dist/terminal/index.js +2 -0
  238. package/dist/terminal/index.js.map +1 -0
  239. package/dist/terminal/index.mjs +2 -0
  240. package/dist/terminal/index.mjs.map +1 -0
  241. package/dist/textarea/index.js +2 -0
  242. package/dist/textarea/index.js.map +1 -0
  243. package/dist/textarea/index.mjs +2 -0
  244. package/dist/textarea/index.mjs.map +1 -0
  245. package/dist/threed-button/index.js +2 -0
  246. package/dist/threed-button/index.js.map +1 -0
  247. package/dist/threed-button/index.mjs +2 -0
  248. package/dist/threed-button/index.mjs.map +1 -0
  249. package/dist/toolbar/index.js +2 -0
  250. package/dist/toolbar/index.js.map +1 -0
  251. package/dist/toolbar/index.mjs +2 -0
  252. package/dist/toolbar/index.mjs.map +1 -0
  253. package/dist/tooltip/index.js +2 -0
  254. package/dist/tooltip/index.js.map +1 -0
  255. package/dist/tooltip/index.mjs +2 -0
  256. package/dist/tooltip/index.mjs.map +1 -0
  257. package/dist/tooltip-animated/index.js +2 -0
  258. package/dist/tooltip-animated/index.js.map +1 -0
  259. package/dist/tooltip-animated/index.mjs +2 -0
  260. package/dist/tooltip-animated/index.mjs.map +1 -0
  261. package/dist/tooltip-minimal/index.js +2 -0
  262. package/dist/tooltip-minimal/index.js.map +1 -0
  263. package/dist/tooltip-minimal/index.mjs +2 -0
  264. package/dist/tooltip-minimal/index.mjs.map +1 -0
  265. package/dist/true-focus/index.js +2 -0
  266. package/dist/true-focus/index.js.map +1 -0
  267. package/dist/true-focus/index.mjs +2 -0
  268. package/dist/true-focus/index.mjs.map +1 -0
  269. package/package.json +94 -140
@@ -0,0 +1,2 @@
1
+ import {useState}from'react';import {motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function i(...o){return twMerge(clsx(o))}function y({children:o,className:l,variant:e="primary",size:d="md",slideText:c="Go!",onClick:m,...u}){let[t,a]=useState(false),p={sm:"px-4 py-2 text-sm",md:"px-6 py-3 text-base",lg:"px-8 py-4 text-lg"},x={primary:"bg-zinc-900 text-white dark:bg-white dark:text-zinc-900",secondary:"bg-zinc-100 text-zinc-900 dark:bg-zinc-800 dark:text-white",outline:"bg-transparent text-zinc-900 border-2 border-zinc-300 dark:text-white dark:border-zinc-600"};return jsxs("button",{className:i("relative overflow-hidden rounded-lg font-medium transition-all",p[d],x[e],l),onMouseEnter:()=>a(true),onMouseLeave:()=>a(false),onClick:m,...u,children:[jsx(motion.div,{className:i("absolute inset-0",e==="primary"?"bg-blue-600 dark:bg-blue-500":"bg-zinc-900 dark:bg-white"),initial:{x:"-100%"},animate:{x:t?"0%":"-100%"},transition:{duration:.3,ease:"easeInOut"}}),jsx(motion.span,{className:"relative flex items-center justify-center gap-2 z-10",animate:{x:t?20:0,opacity:t?0:1},transition:{duration:.2},children:o}),jsxs(motion.span,{className:i("absolute inset-0 flex items-center justify-center gap-2 z-10",e==="outline"||e==="secondary"?"text-white dark:text-zinc-900":"text-white"),initial:{x:-20,opacity:0},animate:{x:t?0:-20,opacity:t?1:0},transition:{duration:.2},children:[c,jsx("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M14 5l7 7m0 0l-7 7m7-7H3"})})]})]})}var C=y;export{y as SlideButton,C as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/slide-button/index.tsx"],"names":["cn","inputs","twMerge","clsx","SlideButton","children","className","variant","size","slideText","onClick","props","isHovered","setIsHovered","useState","sizeClasses","variantClasses","jsxs","jsx","motion","slide_button_default"],"mappings":"sKAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCOO,SAASG,CAAAA,CAAY,CAC1B,SAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CAAU,SAAA,CACV,KAAAC,CAAAA,CAAO,IAAA,CACP,SAAA,CAAAC,CAAAA,CAAY,KAAA,CACZ,OAAA,CAAAC,CAAAA,CACA,GAAGC,CACL,CAAA,CAAqB,CACnB,GAAM,CAACC,CAAAA,CAAWC,CAAY,CAAA,CAAIC,QAAAA,CAAS,KAAK,CAAA,CAE1CC,CAAAA,CAAc,CAClB,GAAI,mBAAA,CACJ,EAAA,CAAI,qBAAA,CACJ,EAAA,CAAI,mBACN,CAAA,CAEMC,EAAiB,CACrB,OAAA,CAAS,yDAAA,CACT,SAAA,CAAW,4DAAA,CACX,OAAA,CAAS,4FACX,CAAA,CAEA,OACEC,IAAAA,CAAC,QAAA,CAAA,CACC,SAAA,CAAWjB,CAAAA,CACT,gEAAA,CACAe,EAAYP,CAAI,CAAA,CAChBQ,CAAAA,CAAeT,CAAO,CAAA,CACtBD,CACF,CAAA,CACA,YAAA,CAAc,IAAMO,CAAAA,CAAa,IAAI,CAAA,CACrC,YAAA,CAAc,IAAMA,EAAa,KAAK,CAAA,CACtC,OAAA,CAASH,CAAAA,CACR,GAAGC,CAAAA,CAEJ,QAAA,CAAA,CAAAO,GAAAA,CAACC,MAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAWnB,CAAAA,CACT,kBAAA,CACAO,IAAY,SAAA,CAAY,8BAAA,CAAiC,2BAC3D,CAAA,CACA,OAAA,CAAS,CAAE,EAAG,OAAQ,CAAA,CACtB,OAAA,CAAS,CAAE,CAAA,CAAGK,CAAAA,CAAY,KAAO,OAAQ,CAAA,CACzC,UAAA,CAAY,CAAE,QAAA,CAAU,EAAA,CAAK,IAAA,CAAM,WAAY,CAAA,CACjD,CAAA,CAEAM,GAAAA,CAACC,MAAAA,CAAO,IAAA,CAAP,CACC,UAAU,sDAAA,CACV,OAAA,CAAS,CAAE,CAAA,CAAGP,CAAAA,CAAY,EAAA,CAAK,CAAA,CAAG,OAAA,CAASA,CAAAA,CAAY,CAAA,CAAI,CAAE,CAAA,CAC7D,UAAA,CAAY,CAAE,SAAU,EAAI,CAAA,CAE3B,QAAA,CAAAP,CAAAA,CACH,CAAA,CAEAY,IAAAA,CAACE,MAAAA,CAAO,IAAA,CAAP,CACC,SAAA,CAAWnB,CAAAA,CACT,8DAAA,CACAO,CAAAA,GAAY,SAAA,EAAaA,IAAY,WAAA,CAAc,+BAAA,CAAkC,YACvF,CAAA,CACA,OAAA,CAAS,CAAE,EAAG,GAAA,CAAK,OAAA,CAAS,CAAE,CAAA,CAC9B,OAAA,CAAS,CAAE,EAAGK,CAAAA,CAAY,CAAA,CAAI,GAAA,CAAK,OAAA,CAASA,CAAAA,CAAY,CAAA,CAAI,CAAE,CAAA,CAC9D,UAAA,CAAY,CAAE,QAAA,CAAU,EAAI,CAAA,CAE3B,QAAA,CAAA,CAAAH,EACDS,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACjE,QAAA,CAAAA,GAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,QAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,0BAAA,CAA2B,CAAA,CAClG,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CAEA,IAAOE,CAAAA,CAAQhB","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface SlideButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n variant?: \"primary\" | \"secondary\" | \"outline\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n slideText?: string;\r\n}\r\n\r\nexport function SlideButton({\r\n children,\r\n className,\r\n variant = \"primary\",\r\n size = \"md\",\r\n slideText = \"Go!\",\r\n onClick,\r\n ...props\r\n}: SlideButtonProps) {\r\n const [isHovered, setIsHovered] = useState(false);\r\n\r\n const sizeClasses = {\r\n sm: \"px-4 py-2 text-sm\",\r\n md: \"px-6 py-3 text-base\",\r\n lg: \"px-8 py-4 text-lg\"\r\n };\r\n\r\n const variantClasses = {\r\n primary: \"bg-zinc-900 text-white dark:bg-white dark:text-zinc-900\",\r\n secondary: \"bg-zinc-100 text-zinc-900 dark:bg-zinc-800 dark:text-white\",\r\n outline: \"bg-transparent text-zinc-900 border-2 border-zinc-300 dark:text-white dark:border-zinc-600\"\r\n };\r\n\r\n return (\r\n <button\r\n className={cn(\r\n \"relative overflow-hidden rounded-lg font-medium transition-all\",\r\n sizeClasses[size],\r\n variantClasses[variant],\r\n className\r\n )}\r\n onMouseEnter={() => setIsHovered(true)}\r\n onMouseLeave={() => setIsHovered(false)}\r\n onClick={onClick}\r\n {...props}\r\n >\r\n <motion.div\r\n className={cn(\r\n \"absolute inset-0\",\r\n variant === \"primary\" ? \"bg-blue-600 dark:bg-blue-500\" : \"bg-zinc-900 dark:bg-white\"\r\n )}\r\n initial={{ x: \"-100%\" }}\r\n animate={{ x: isHovered ? \"0%\" : \"-100%\" }}\r\n transition={{ duration: 0.3, ease: \"easeInOut\" }}\r\n />\r\n \r\n <motion.span\r\n className=\"relative flex items-center justify-center gap-2 z-10\"\r\n animate={{ x: isHovered ? 20 : 0, opacity: isHovered ? 0 : 1 }}\r\n transition={{ duration: 0.2 }}\r\n >\r\n {children}\r\n </motion.span>\r\n \r\n <motion.span\r\n className={cn(\r\n \"absolute inset-0 flex items-center justify-center gap-2 z-10\",\r\n variant === \"outline\" || variant === \"secondary\" ? \"text-white dark:text-zinc-900\" : \"text-white\"\r\n )}\r\n initial={{ x: -20, opacity: 0 }}\r\n animate={{ x: isHovered ? 0 : -20, opacity: isHovered ? 1 : 0 }}\r\n transition={{ duration: 0.2 }}\r\n >\r\n {slideText}\r\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M14 5l7 7m0 0l-7 7m7-7H3\" />\r\n </svg>\r\n </motion.span>\r\n </button>\r\n );\r\n}\r\n\r\nexport default SlideButton;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var framerMotion=require('framer-motion'),react=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function i(...t){return tailwindMerge.twMerge(clsx.clsx(t))}function h({text:t,className:a="",delay:l=100,duration:c=.6,splitType:s="chars",textAlign:p="center"}){let[u,m]=react.useState(false),r=react.useRef(null);react.useEffect(()=>{if(!r.current)return;let e=new IntersectionObserver(([n])=>{n.isIntersecting&&(m(true),e.unobserve(r.current));},{threshold:.1,rootMargin:"-100px"});return e.observe(r.current),()=>e.disconnect()},[]);let f=s==="words"?t.split(" "):t.split("");return jsxRuntime.jsx("div",{ref:r,className:i("overflow-hidden",a),style:{textAlign:p},children:f.map((e,n)=>jsxRuntime.jsx(framerMotion.motion.span,{initial:{opacity:0,y:40},animate:u?{opacity:1,y:0}:{opacity:0,y:40},transition:{duration:c,delay:n*l/1e3,ease:"easeOut"},className:"inline-block",style:{marginRight:s==="words"?"0.25em":"0"},children:e===" "?"\xA0":e},n))})}var M=h;exports.SplitText=h;exports.default=M;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/split-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","SplitText","text","className","delay","duration","splitType","textAlign","inView","setInView","useState","ref","useRef","useEffect","observer","entry","elements","jsx","element","index","motion","split_text_default"],"mappings":"4OAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,sBAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCUO,SAASG,CAAAA,CAAU,CACxB,IAAA,CAAAC,EACA,SAAA,CAAAC,CAAAA,CAAY,GACZ,KAAA,CAAAC,CAAAA,CAAQ,IACR,QAAA,CAAAC,CAAAA,CAAW,EAAA,CACX,SAAA,CAAAC,CAAAA,CAAY,OAAA,CACZ,UAAAC,CAAAA,CAAY,QACd,EAAmB,CACjB,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIC,cAAAA,CAAS,KAAK,CAAA,CACpCC,EAAMC,YAAAA,CAAuB,IAAI,EAEvCC,eAAAA,CAAU,IAAM,CACd,GAAI,CAACF,CAAAA,CAAI,OAAA,CAAS,OAElB,IAAMG,EAAW,IAAI,oBAAA,CACnB,CAAC,CAACC,CAAK,IAAM,CACPA,CAAAA,CAAM,cAAA,GACRN,CAAAA,CAAU,IAAI,CAAA,CACdK,EAAS,SAAA,CAAUH,CAAAA,CAAI,OAAkB,CAAA,EAE7C,CAAA,CACA,CAAE,UAAW,EAAA,CAAK,UAAA,CAAY,QAAS,CACzC,CAAA,CAEA,OAAAG,EAAS,OAAA,CAAQH,CAAAA,CAAI,OAAO,CAAA,CACrB,IAAMG,EAAS,UAAA,EACxB,CAAA,CAAG,EAAE,CAAA,CAEL,IAAME,CAAAA,CAAWV,CAAAA,GAAc,QAAUJ,CAAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAIA,CAAAA,CAAK,KAAA,CAAM,EAAE,CAAA,CAExE,OACEe,eAAC,KAAA,CAAA,CAAI,GAAA,CAAKN,EAAK,SAAA,CAAWd,CAAAA,CAAG,kBAAmBM,CAAS,CAAA,CAAG,KAAA,CAAO,CAAE,SAAA,CAAAI,CAAU,EAC5E,QAAA,CAAAS,CAAAA,CAAS,IAAI,CAACE,CAAAA,CAASC,IACtBF,cAAAA,CAACG,mBAAAA,CAAO,IAAA,CAAP,CAEC,OAAA,CAAS,CAAE,QAAS,CAAA,CAAG,CAAA,CAAG,EAAG,CAAA,CAC7B,OAAA,CAASZ,EAAS,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,CAAE,CAAA,CAAI,CAAE,OAAA,CAAS,CAAA,CAAG,EAAG,EAAG,CAAA,CAC7D,WAAY,CAAE,QAAA,CAAAH,CAAAA,CAAU,KAAA,CAAQc,CAAAA,CAAQf,CAAAA,CAAS,IAAM,IAAA,CAAM,SAAU,EACvE,SAAA,CAAU,cAAA,CACV,MAAO,CAAE,WAAA,CAAaE,CAAAA,GAAc,OAAA,CAAU,QAAA,CAAW,GAAI,EAE5D,QAAA,CAAAY,CAAAA,GAAY,GAAA,CAAM,MAAA,CAAWA,CAAAA,CAAAA,CAPzBC,CAQP,CACD,CAAA,CACH,CAEJ,CAEA,IAAOE,CAAAA,CAAQpB","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface SplitTextProps {\r\n text: string;\r\n className?: string;\r\n delay?: number;\r\n duration?: number;\r\n splitType?: \"chars\" | \"words\";\r\n textAlign?: \"left\" | \"center\" | \"right\";\r\n}\r\n\r\nexport function SplitText({\r\n text,\r\n className = \"\",\r\n delay = 100,\r\n duration = 0.6,\r\n splitType = \"chars\",\r\n textAlign = \"center\",\r\n}: SplitTextProps) {\r\n const [inView, setInView] = useState(false);\r\n const ref = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n if (!ref.current) return;\r\n\r\n const observer = new IntersectionObserver(\r\n ([entry]) => {\r\n if (entry.isIntersecting) {\r\n setInView(true);\r\n observer.unobserve(ref.current as Element);\r\n }\r\n },\r\n { threshold: 0.1, rootMargin: \"-100px\" }\r\n );\r\n\r\n observer.observe(ref.current);\r\n return () => observer.disconnect();\r\n }, []);\r\n\r\n const elements = splitType === \"words\" ? text.split(\" \") : text.split(\"\");\r\n\r\n return (\r\n <div ref={ref} className={cn(\"overflow-hidden\", className)} style={{ textAlign }}>\r\n {elements.map((element, index) => (\r\n <motion.span\r\n key={index}\r\n initial={{ opacity: 0, y: 40 }}\r\n animate={inView ? { opacity: 1, y: 0 } : { opacity: 0, y: 40 }}\r\n transition={{ duration, delay: (index * delay) / 1000, ease: \"easeOut\" }}\r\n className=\"inline-block\"\r\n style={{ marginRight: splitType === \"words\" ? \"0.25em\" : \"0\" }}\r\n >\r\n {element === \" \" ? \"\\u00A0\" : element}\r\n </motion.span>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default SplitText;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {motion}from'framer-motion';import {useState,useRef,useEffect}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function i(...t){return twMerge(clsx(t))}function h({text:t,className:a="",delay:l=100,duration:c=.6,splitType:s="chars",textAlign:p="center"}){let[u,m]=useState(false),r=useRef(null);useEffect(()=>{if(!r.current)return;let e=new IntersectionObserver(([n])=>{n.isIntersecting&&(m(true),e.unobserve(r.current));},{threshold:.1,rootMargin:"-100px"});return e.observe(r.current),()=>e.disconnect()},[]);let f=s==="words"?t.split(" "):t.split("");return jsx("div",{ref:r,className:i("overflow-hidden",a),style:{textAlign:p},children:f.map((e,n)=>jsx(motion.span,{initial:{opacity:0,y:40},animate:u?{opacity:1,y:0}:{opacity:0,y:40},transition:{duration:c,delay:n*l/1e3,ease:"easeOut"},className:"inline-block",style:{marginRight:s==="words"?"0.25em":"0"},children:e===" "?"\xA0":e},n))})}var M=h;export{h as SplitText,M as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/split-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","SplitText","text","className","delay","duration","splitType","textAlign","inView","setInView","useState","ref","useRef","useEffect","observer","entry","elements","jsx","element","index","motion","split_text_default"],"mappings":"kLAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,QAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCUO,SAASG,CAAAA,CAAU,CACxB,IAAA,CAAAC,EACA,SAAA,CAAAC,CAAAA,CAAY,GACZ,KAAA,CAAAC,CAAAA,CAAQ,IACR,QAAA,CAAAC,CAAAA,CAAW,EAAA,CACX,SAAA,CAAAC,CAAAA,CAAY,OAAA,CACZ,UAAAC,CAAAA,CAAY,QACd,EAAmB,CACjB,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIC,QAAAA,CAAS,KAAK,CAAA,CACpCC,EAAMC,MAAAA,CAAuB,IAAI,EAEvCC,SAAAA,CAAU,IAAM,CACd,GAAI,CAACF,CAAAA,CAAI,OAAA,CAAS,OAElB,IAAMG,EAAW,IAAI,oBAAA,CACnB,CAAC,CAACC,CAAK,IAAM,CACPA,CAAAA,CAAM,cAAA,GACRN,CAAAA,CAAU,IAAI,CAAA,CACdK,EAAS,SAAA,CAAUH,CAAAA,CAAI,OAAkB,CAAA,EAE7C,CAAA,CACA,CAAE,UAAW,EAAA,CAAK,UAAA,CAAY,QAAS,CACzC,CAAA,CAEA,OAAAG,EAAS,OAAA,CAAQH,CAAAA,CAAI,OAAO,CAAA,CACrB,IAAMG,EAAS,UAAA,EACxB,CAAA,CAAG,EAAE,CAAA,CAEL,IAAME,CAAAA,CAAWV,CAAAA,GAAc,QAAUJ,CAAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAIA,CAAAA,CAAK,KAAA,CAAM,EAAE,CAAA,CAExE,OACEe,IAAC,KAAA,CAAA,CAAI,GAAA,CAAKN,EAAK,SAAA,CAAWd,CAAAA,CAAG,kBAAmBM,CAAS,CAAA,CAAG,KAAA,CAAO,CAAE,SAAA,CAAAI,CAAU,EAC5E,QAAA,CAAAS,CAAAA,CAAS,IAAI,CAACE,CAAAA,CAASC,IACtBF,GAAAA,CAACG,MAAAA,CAAO,IAAA,CAAP,CAEC,OAAA,CAAS,CAAE,QAAS,CAAA,CAAG,CAAA,CAAG,EAAG,CAAA,CAC7B,OAAA,CAASZ,EAAS,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,CAAE,CAAA,CAAI,CAAE,OAAA,CAAS,CAAA,CAAG,EAAG,EAAG,CAAA,CAC7D,WAAY,CAAE,QAAA,CAAAH,CAAAA,CAAU,KAAA,CAAQc,CAAAA,CAAQf,CAAAA,CAAS,IAAM,IAAA,CAAM,SAAU,EACvE,SAAA,CAAU,cAAA,CACV,MAAO,CAAE,WAAA,CAAaE,CAAAA,GAAc,OAAA,CAAU,QAAA,CAAW,GAAI,EAE5D,QAAA,CAAAY,CAAAA,GAAY,GAAA,CAAM,MAAA,CAAWA,CAAAA,CAAAA,CAPzBC,CAQP,CACD,CAAA,CACH,CAEJ,CAEA,IAAOE,CAAAA,CAAQpB","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface SplitTextProps {\r\n text: string;\r\n className?: string;\r\n delay?: number;\r\n duration?: number;\r\n splitType?: \"chars\" | \"words\";\r\n textAlign?: \"left\" | \"center\" | \"right\";\r\n}\r\n\r\nexport function SplitText({\r\n text,\r\n className = \"\",\r\n delay = 100,\r\n duration = 0.6,\r\n splitType = \"chars\",\r\n textAlign = \"center\",\r\n}: SplitTextProps) {\r\n const [inView, setInView] = useState(false);\r\n const ref = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n if (!ref.current) return;\r\n\r\n const observer = new IntersectionObserver(\r\n ([entry]) => {\r\n if (entry.isIntersecting) {\r\n setInView(true);\r\n observer.unobserve(ref.current as Element);\r\n }\r\n },\r\n { threshold: 0.1, rootMargin: \"-100px\" }\r\n );\r\n\r\n observer.observe(ref.current);\r\n return () => observer.disconnect();\r\n }, []);\r\n\r\n const elements = splitType === \"words\" ? text.split(\" \") : text.split(\"\");\r\n\r\n return (\r\n <div ref={ref} className={cn(\"overflow-hidden\", className)} style={{ textAlign }}>\r\n {elements.map((element, index) => (\r\n <motion.span\r\n key={index}\r\n initial={{ opacity: 0, y: 40 }}\r\n animate={inView ? { opacity: 1, y: 0 } : { opacity: 0, y: 40 }}\r\n transition={{ duration, delay: (index * delay) / 1000, ease: \"easeOut\" }}\r\n className=\"inline-block\"\r\n style={{ marginRight: splitType === \"words\" ? \"0.25em\" : \"0\" }}\r\n >\r\n {element === \" \" ? \"\\u00A0\" : element}\r\n </motion.span>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default SplitText;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function t(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function y({text:e,className:s,delay:r=0,staggerDelay:o=.05}){let l=e.split(""),p={hidden:{opacity:0},visible:{opacity:1,transition:{staggerChildren:o,delayChildren:r}}},c={hidden:{opacity:0,y:20},visible:{opacity:1,y:0,transition:{type:"spring",damping:12,stiffness:200}}};return jsxRuntime.jsx(framerMotion.motion.span,{className:t("inline-flex",s),variants:p,initial:"hidden",animate:"visible",children:l.map((i,m)=>jsxRuntime.jsx(framerMotion.motion.span,{variants:c,className:"inline-block",style:{whiteSpace:i===" "?"pre":"normal"},children:i===" "?"\xA0":i},m))})}var v=y;exports.StaggerText=y;exports.default=v;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/stagger-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","StaggerText","text","className","delay","staggerDelay","letters","container","child","jsx","motion","letter","index","stagger_text_default"],"mappings":"qNAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCOO,SAASG,CAAAA,CAAY,CAC1B,IAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,EACA,KAAA,CAAAC,CAAAA,CAAQ,CAAA,CACR,YAAA,CAAAC,CAAAA,CAAe,GACjB,CAAA,CAAqB,CACnB,IAAMC,CAAAA,CAAUJ,CAAAA,CAAK,KAAA,CAAM,EAAE,CAAA,CAEvBK,CAAAA,CAAY,CAChB,MAAA,CAAQ,CAAE,OAAA,CAAS,CAAE,CAAA,CACrB,OAAA,CAAS,CACP,OAAA,CAAS,CAAA,CACT,UAAA,CAAY,CACV,eAAA,CAAiBF,CAAAA,CACjB,aAAA,CAAeD,CACjB,CACF,CACF,CAAA,CAEMI,CAAAA,CAAQ,CACZ,MAAA,CAAQ,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,EAAG,CAAA,CAC5B,OAAA,CAAS,CACP,OAAA,CAAS,CAAA,CACT,CAAA,CAAG,CAAA,CACH,UAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,QAAS,EAAA,CAAI,SAAA,CAAW,GAAI,CAC5D,CACF,CAAA,CAEA,OACEC,cAAAA,CAACC,oBAAO,IAAA,CAAP,CACC,SAAA,CAAWb,CAAAA,CAAG,aAAA,CAAeM,CAAS,CAAA,CACtC,QAAA,CAAUI,EACV,OAAA,CAAQ,QAAA,CACR,OAAA,CAAQ,SAAA,CAEP,QAAA,CAAAD,CAAAA,CAAQ,GAAA,CAAI,CAACK,EAAQC,CAAAA,GACpBH,cAAAA,CAACC,mBAAAA,CAAO,IAAA,CAAP,CAEC,QAAA,CAAUF,CAAAA,CACV,SAAA,CAAU,eACV,KAAA,CAAO,CAAE,UAAA,CAAYG,CAAAA,GAAW,GAAA,CAAM,KAAA,CAAQ,QAAS,CAAA,CAEtD,SAAAA,CAAAA,GAAW,GAAA,CAAM,MAAA,CAAWA,CAAAA,CAAAA,CALxBC,CAMP,CACD,CAAA,CACH,CAEJ,KAEOC,CAAAA,CAAQZ","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface StaggerTextProps {\r\n text: string;\r\n className?: string;\r\n delay?: number;\r\n staggerDelay?: number;\r\n}\r\n\r\nexport function StaggerText({ \r\n text, \r\n className, \r\n delay = 0,\r\n staggerDelay = 0.05 \r\n}: StaggerTextProps) {\r\n const letters = text.split(\"\");\r\n\r\n const container = {\r\n hidden: { opacity: 0 },\r\n visible: {\r\n opacity: 1,\r\n transition: {\r\n staggerChildren: staggerDelay,\r\n delayChildren: delay,\r\n },\r\n },\r\n };\r\n\r\n const child = {\r\n hidden: { opacity: 0, y: 20 },\r\n visible: {\r\n opacity: 1,\r\n y: 0,\r\n transition: { type: \"spring\", damping: 12, stiffness: 200 },\r\n },\r\n };\r\n\r\n return (\r\n <motion.span\r\n className={cn(\"inline-flex\", className)}\r\n variants={container}\r\n initial=\"hidden\"\r\n animate=\"visible\"\r\n >\r\n {letters.map((letter, index) => (\r\n <motion.span\r\n key={index}\r\n variants={child}\r\n className=\"inline-block\"\r\n style={{ whiteSpace: letter === \" \" ? \"pre\" : \"normal\" }}\r\n >\r\n {letter === \" \" ? \"\\u00A0\" : letter}\r\n </motion.span>\r\n ))}\r\n </motion.span>\r\n );\r\n}\r\n\r\nexport default StaggerText;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function t(...e){return twMerge(clsx(e))}function y({text:e,className:s,delay:r=0,staggerDelay:o=.05}){let l=e.split(""),p={hidden:{opacity:0},visible:{opacity:1,transition:{staggerChildren:o,delayChildren:r}}},c={hidden:{opacity:0,y:20},visible:{opacity:1,y:0,transition:{type:"spring",damping:12,stiffness:200}}};return jsx(motion.span,{className:t("inline-flex",s),variants:p,initial:"hidden",animate:"visible",children:l.map((i,m)=>jsx(motion.span,{variants:c,className:"inline-block",style:{whiteSpace:i===" "?"pre":"normal"},children:i===" "?"\xA0":i},m))})}var v=y;export{y as StaggerText,v as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/stagger-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","StaggerText","text","className","delay","staggerDelay","letters","container","child","jsx","motion","letter","index","stagger_text_default"],"mappings":"oIAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCOO,SAASG,CAAAA,CAAY,CAC1B,IAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,EACA,KAAA,CAAAC,CAAAA,CAAQ,CAAA,CACR,YAAA,CAAAC,CAAAA,CAAe,GACjB,CAAA,CAAqB,CACnB,IAAMC,CAAAA,CAAUJ,CAAAA,CAAK,KAAA,CAAM,EAAE,CAAA,CAEvBK,CAAAA,CAAY,CAChB,MAAA,CAAQ,CAAE,OAAA,CAAS,CAAE,CAAA,CACrB,OAAA,CAAS,CACP,OAAA,CAAS,CAAA,CACT,UAAA,CAAY,CACV,eAAA,CAAiBF,CAAAA,CACjB,aAAA,CAAeD,CACjB,CACF,CACF,CAAA,CAEMI,CAAAA,CAAQ,CACZ,MAAA,CAAQ,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,EAAG,CAAA,CAC5B,OAAA,CAAS,CACP,OAAA,CAAS,CAAA,CACT,CAAA,CAAG,CAAA,CACH,UAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,QAAS,EAAA,CAAI,SAAA,CAAW,GAAI,CAC5D,CACF,CAAA,CAEA,OACEC,GAAAA,CAACC,OAAO,IAAA,CAAP,CACC,SAAA,CAAWb,CAAAA,CAAG,aAAA,CAAeM,CAAS,CAAA,CACtC,QAAA,CAAUI,EACV,OAAA,CAAQ,QAAA,CACR,OAAA,CAAQ,SAAA,CAEP,QAAA,CAAAD,CAAAA,CAAQ,GAAA,CAAI,CAACK,EAAQC,CAAAA,GACpBH,GAAAA,CAACC,MAAAA,CAAO,IAAA,CAAP,CAEC,QAAA,CAAUF,CAAAA,CACV,SAAA,CAAU,eACV,KAAA,CAAO,CAAE,UAAA,CAAYG,CAAAA,GAAW,GAAA,CAAM,KAAA,CAAQ,QAAS,CAAA,CAEtD,SAAAA,CAAAA,GAAW,GAAA,CAAM,MAAA,CAAWA,CAAAA,CAAAA,CALxBC,CAMP,CACD,CAAA,CACH,CAEJ,KAEOC,CAAAA,CAAQZ","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface StaggerTextProps {\r\n text: string;\r\n className?: string;\r\n delay?: number;\r\n staggerDelay?: number;\r\n}\r\n\r\nexport function StaggerText({ \r\n text, \r\n className, \r\n delay = 0,\r\n staggerDelay = 0.05 \r\n}: StaggerTextProps) {\r\n const letters = text.split(\"\");\r\n\r\n const container = {\r\n hidden: { opacity: 0 },\r\n visible: {\r\n opacity: 1,\r\n transition: {\r\n staggerChildren: staggerDelay,\r\n delayChildren: delay,\r\n },\r\n },\r\n };\r\n\r\n const child = {\r\n hidden: { opacity: 0, y: 20 },\r\n visible: {\r\n opacity: 1,\r\n y: 0,\r\n transition: { type: \"spring\", damping: 12, stiffness: 200 },\r\n },\r\n };\r\n\r\n return (\r\n <motion.span\r\n className={cn(\"inline-flex\", className)}\r\n variants={container}\r\n initial=\"hidden\"\r\n animate=\"visible\"\r\n >\r\n {letters.map((letter, index) => (\r\n <motion.span\r\n key={index}\r\n variants={child}\r\n className=\"inline-block\"\r\n style={{ whiteSpace: letter === \" \" ? \"pre\" : \"normal\" }}\r\n >\r\n {letter === \" \" ? \"\\u00A0\" : letter}\r\n </motion.span>\r\n ))}\r\n </motion.span>\r\n );\r\n}\r\n\r\nexport default StaggerText;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var M=require('react'),framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var M__default=/*#__PURE__*/_interopDefault(M);function u(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function Y({children:e,initialStep:r=1,onStepChange:a=()=>{},onFinalStepCompleted:i=()=>{},backButtonText:o="Back",nextButtonText:s="Continue",disableStepIndicators:b=false,className:y,...k}){let[n,w]=M.useState(r),[P,l]=M.useState(0),f=M.Children.toArray(e),c=f.length,g=n>c,h=n===c,p=d=>{w(d),d>c?i():a(d);},R=()=>{n>1&&(l(-1),p(n-1));},L=()=>{h||(l(1),p(n+1));},T=()=>{l(1),p(c+1);};return jsxRuntime.jsxs("div",{className:u("w-full max-w-md mx-auto",y),...k,children:[jsxRuntime.jsx("div",{className:"flex items-center justify-between mb-8",children:f.map((d,C)=>{let v=C+1,z=C<c-1;return jsxRuntime.jsxs(M__default.default.Fragment,{children:[jsxRuntime.jsx(D,{step:v,disableStepIndicators:b,currentStep:n,onClickStep:N=>{l(N>n?1:-1),p(N);}}),z&&jsxRuntime.jsx(F,{isComplete:n>v})]},v)})}),jsxRuntime.jsx(E,{isCompleted:g,currentStep:n,direction:P,children:f[n-1]}),!g&&jsxRuntime.jsxs("div",{className:u("flex mt-8",n!==1?"justify-between":"justify-end"),children:[n!==1&&jsxRuntime.jsx("button",{onClick:R,className:"px-4 py-2 text-sm font-medium text-zinc-400 hover:text-white transition-colors rounded-lg hover:bg-zinc-800",children:o}),jsxRuntime.jsx("button",{onClick:h?T:L,className:"px-4 py-2 text-sm font-medium bg-white text-black rounded-lg hover:bg-zinc-200 transition-colors",children:h?"Complete":s})]})]})}function E({isCompleted:e,currentStep:r,direction:a,children:i}){let[o,s]=M.useState(0);return jsxRuntime.jsx(framerMotion.motion.div,{className:"relative overflow-hidden",animate:{height:e?0:o},transition:{type:"spring",duration:.4},children:jsxRuntime.jsx(framerMotion.AnimatePresence,{initial:false,mode:"sync",custom:a,children:!e&&jsxRuntime.jsx(I,{direction:a,onHeightReady:b=>s(b),children:i},r)})})}function I({children:e,direction:r,onHeightReady:a}){let i=M.useRef(null);M.useLayoutEffect(()=>{i.current&&a(i.current.offsetHeight);},[e,a]);let o={enter:s=>({x:s>=0?"-100%":"100%",opacity:0}),center:{x:"0%",opacity:1},exit:s=>({x:s>=0?"50%":"-50%",opacity:0})};return jsxRuntime.jsx(framerMotion.motion.div,{ref:i,custom:r,variants:o,initial:"enter",animate:"center",exit:"exit",transition:{duration:.4},className:"absolute left-0 right-0 top-0",children:e})}function Z({children:e}){return jsxRuntime.jsx("div",{className:"p-4 rounded-lg bg-zinc-900 border border-zinc-800",children:e})}function D({step:e,currentStep:r,onClickStep:a,disableStepIndicators:i}){let o=r===e?"active":r<e?"inactive":"complete",s=()=>{e!==r&&!i&&a(e);};return jsxRuntime.jsx(framerMotion.motion.button,{onClick:s,disabled:i,className:u("relative flex items-center justify-center w-10 h-10 rounded-full text-sm font-medium transition-all",o==="inactive"&&"bg-zinc-800 text-zinc-500 border border-zinc-700",o==="active"&&"bg-white text-black border-2 border-white",o==="complete"&&"bg-white text-black border-2 border-white",!i&&"cursor-pointer hover:opacity-80"),animate:o,initial:false,children:o==="complete"?jsxRuntime.jsx("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2.5,children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5 13l4 4L19 7"})}):jsxRuntime.jsx("span",{children:e})})}function F({isComplete:e}){return jsxRuntime.jsx("div",{className:"flex-1 h-[2px] mx-2 bg-zinc-800 rounded-full overflow-hidden",children:jsxRuntime.jsx(framerMotion.motion.div,{className:"h-full bg-white rounded-full",initial:{width:0},animate:{width:e?"100%":"0%"},transition:{duration:.4}})})}exports.Step=Z;exports.Stepper=Y;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/stepper/index.tsx"],"names":["cn","inputs","twMerge","clsx","Stepper","children","initialStep","onStepChange","onFinalStepCompleted","backButtonText","nextButtonText","disableStepIndicators","className","rest","currentStep","setCurrentStep","useState","direction","setDirection","stepsArray","Children","totalSteps","isCompleted","isLastStep","updateStep","newStep","handleBack","handleNext","handleComplete","jsxs","jsx","_","index","stepNumber","isNotLastStep","React","StepIndicator","clicked","StepConnector","StepContentWrapper","parentHeight","setParentHeight","motion","AnimatePresence","SlideTransition","h","onHeightReady","containerRef","useRef","useLayoutEffect","stepVariants","dir","Step","step","onClickStep","status","handleClick","isComplete"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useState, Children, useRef, useLayoutEffect, HTMLAttributes, ReactNode } from \"react\";\r\nimport { motion, AnimatePresence, Variants } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\nexport interface StepperProps extends HTMLAttributes<HTMLDivElement> {\r\n children: ReactNode;\r\n initialStep?: number;\r\n onStepChange?: (step: number) => void;\r\n onFinalStepCompleted?: () => void;\r\n backButtonText?: string;\r\n nextButtonText?: string;\r\n disableStepIndicators?: boolean;\r\n}\r\n\r\nexport function Stepper({\r\n children,\r\n initialStep = 1,\r\n onStepChange = () => {},\r\n onFinalStepCompleted = () => {},\r\n backButtonText = \"Back\",\r\n nextButtonText = \"Continue\",\r\n disableStepIndicators = false,\r\n className,\r\n ...rest\r\n}: StepperProps) {\r\n const [currentStep, setCurrentStep] = useState<number>(initialStep);\r\n const [direction, setDirection] = useState<number>(0);\r\n const stepsArray = Children.toArray(children);\r\n const totalSteps = stepsArray.length;\r\n const isCompleted = currentStep > totalSteps;\r\n const isLastStep = currentStep === totalSteps;\r\n\r\n const updateStep = (newStep: number) => {\r\n setCurrentStep(newStep);\r\n if (newStep > totalSteps) {\r\n onFinalStepCompleted();\r\n } else {\r\n onStepChange(newStep);\r\n }\r\n };\r\n\r\n const handleBack = () => {\r\n if (currentStep > 1) {\r\n setDirection(-1);\r\n updateStep(currentStep - 1);\r\n }\r\n };\r\n\r\n const handleNext = () => {\r\n if (!isLastStep) {\r\n setDirection(1);\r\n updateStep(currentStep + 1);\r\n }\r\n };\r\n\r\n const handleComplete = () => {\r\n setDirection(1);\r\n updateStep(totalSteps + 1);\r\n };\r\n\r\n return (\r\n <div className={cn(\"w-full max-w-md mx-auto\", className)} {...rest}>\r\n <div className=\"flex items-center justify-between mb-8\">\r\n {stepsArray.map((_, index) => {\r\n const stepNumber = index + 1;\r\n const isNotLastStep = index < totalSteps - 1;\r\n return (\r\n <React.Fragment key={stepNumber}>\r\n <StepIndicator\r\n step={stepNumber}\r\n disableStepIndicators={disableStepIndicators}\r\n currentStep={currentStep}\r\n onClickStep={(clicked) => {\r\n setDirection(clicked > currentStep ? 1 : -1);\r\n updateStep(clicked);\r\n }}\r\n />\r\n {isNotLastStep && <StepConnector isComplete={currentStep > stepNumber} />}\r\n </React.Fragment>\r\n );\r\n })}\r\n </div>\r\n\r\n <StepContentWrapper isCompleted={isCompleted} currentStep={currentStep} direction={direction}>\r\n {stepsArray[currentStep - 1]}\r\n </StepContentWrapper>\r\n\r\n {!isCompleted && (\r\n <div className={cn(\"flex mt-8\", currentStep !== 1 ? \"justify-between\" : \"justify-end\")}>\r\n {currentStep !== 1 && (\r\n <button\r\n onClick={handleBack}\r\n className=\"px-4 py-2 text-sm font-medium text-zinc-400 hover:text-white transition-colors rounded-lg hover:bg-zinc-800\"\r\n >\r\n {backButtonText}\r\n </button>\r\n )}\r\n <button\r\n onClick={isLastStep ? handleComplete : handleNext}\r\n className=\"px-4 py-2 text-sm font-medium bg-white text-black rounded-lg hover:bg-zinc-200 transition-colors\"\r\n >\r\n {isLastStep ? \"Complete\" : nextButtonText}\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\ninterface StepContentWrapperProps {\r\n isCompleted: boolean;\r\n currentStep: number;\r\n direction: number;\r\n children: ReactNode;\r\n}\r\n\r\nfunction StepContentWrapper({ isCompleted, currentStep, direction, children }: StepContentWrapperProps) {\r\n const [parentHeight, setParentHeight] = useState<number>(0);\r\n\r\n return (\r\n <motion.div\r\n className=\"relative overflow-hidden\"\r\n animate={{ height: isCompleted ? 0 : parentHeight }}\r\n transition={{ type: \"spring\", duration: 0.4 }}\r\n >\r\n <AnimatePresence initial={false} mode=\"sync\" custom={direction}>\r\n {!isCompleted && (\r\n <SlideTransition key={currentStep} direction={direction} onHeightReady={(h) => setParentHeight(h)}>\r\n {children}\r\n </SlideTransition>\r\n )}\r\n </AnimatePresence>\r\n </motion.div>\r\n );\r\n}\r\n\r\ninterface SlideTransitionProps {\r\n children: ReactNode;\r\n direction: number;\r\n onHeightReady: (h: number) => void;\r\n}\r\n\r\nfunction SlideTransition({ children, direction, onHeightReady }: SlideTransitionProps) {\r\n const containerRef = useRef<HTMLDivElement | null>(null);\r\n\r\n useLayoutEffect(() => {\r\n if (containerRef.current) {\r\n onHeightReady(containerRef.current.offsetHeight);\r\n }\r\n }, [children, onHeightReady]);\r\n\r\n const stepVariants: Variants = {\r\n enter: (dir: number) => ({ x: dir >= 0 ? \"-100%\" : \"100%\", opacity: 0 }),\r\n center: { x: \"0%\", opacity: 1 },\r\n exit: (dir: number) => ({ x: dir >= 0 ? \"50%\" : \"-50%\", opacity: 0 }),\r\n };\r\n\r\n return (\r\n <motion.div\r\n ref={containerRef}\r\n custom={direction}\r\n variants={stepVariants}\r\n initial=\"enter\"\r\n animate=\"center\"\r\n exit=\"exit\"\r\n transition={{ duration: 0.4 }}\r\n className=\"absolute left-0 right-0 top-0\"\r\n >\r\n {children}\r\n </motion.div>\r\n );\r\n}\r\n\r\ninterface StepProps {\r\n children: ReactNode;\r\n}\r\n\r\nexport function Step({ children }: StepProps): React.JSX.Element {\r\n return <div className=\"p-4 rounded-lg bg-zinc-900 border border-zinc-800\">{children}</div>;\r\n}\r\n\r\ninterface StepIndicatorProps {\r\n step: number;\r\n currentStep: number;\r\n onClickStep: (step: number) => void;\r\n disableStepIndicators?: boolean;\r\n}\r\n\r\nfunction StepIndicator({ step, currentStep, onClickStep, disableStepIndicators }: StepIndicatorProps) {\r\n const status = currentStep === step ? \"active\" : currentStep < step ? \"inactive\" : \"complete\";\r\n\r\n const handleClick = () => {\r\n if (step !== currentStep && !disableStepIndicators) {\r\n onClickStep(step);\r\n }\r\n };\r\n\r\n return (\r\n <motion.button\r\n onClick={handleClick}\r\n disabled={disableStepIndicators}\r\n className={cn(\r\n \"relative flex items-center justify-center w-10 h-10 rounded-full text-sm font-medium transition-all\",\r\n status === \"inactive\" && \"bg-zinc-800 text-zinc-500 border border-zinc-700\",\r\n status === \"active\" && \"bg-white text-black border-2 border-white\",\r\n status === \"complete\" && \"bg-white text-black border-2 border-white\",\r\n !disableStepIndicators && \"cursor-pointer hover:opacity-80\"\r\n )}\r\n animate={status}\r\n initial={false}\r\n >\r\n {status === \"complete\" ? (\r\n <svg className=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2.5}>\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\r\n </svg>\r\n ) : (\r\n <span>{step}</span>\r\n )}\r\n </motion.button>\r\n );\r\n}\r\n\r\ninterface StepConnectorProps {\r\n isComplete: boolean;\r\n}\r\n\r\nfunction StepConnector({ isComplete }: StepConnectorProps) {\r\n return (\r\n <div className=\"flex-1 h-[2px] mx-2 bg-zinc-800 rounded-full overflow-hidden\">\r\n <motion.div\r\n className=\"h-full bg-white rounded-full\"\r\n initial={{ width: 0 }}\r\n animate={{ width: isComplete ? \"100%\" : \"0%\" }}\r\n transition={{ duration: 0.4 }}\r\n />\r\n </div>\r\n );\r\n}\r\n"]}
@@ -0,0 +1,2 @@
1
+ import M,{useState,Children,useRef,useLayoutEffect}from'react';import {motion,AnimatePresence}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function u(...e){return twMerge(clsx(e))}function Y({children:e,initialStep:r=1,onStepChange:a=()=>{},onFinalStepCompleted:i=()=>{},backButtonText:o="Back",nextButtonText:s="Continue",disableStepIndicators:b=false,className:y,...k}){let[n,w]=useState(r),[P,l]=useState(0),f=Children.toArray(e),c=f.length,g=n>c,h=n===c,p=d=>{w(d),d>c?i():a(d);},R=()=>{n>1&&(l(-1),p(n-1));},L=()=>{h||(l(1),p(n+1));},T=()=>{l(1),p(c+1);};return jsxs("div",{className:u("w-full max-w-md mx-auto",y),...k,children:[jsx("div",{className:"flex items-center justify-between mb-8",children:f.map((d,C)=>{let v=C+1,z=C<c-1;return jsxs(M.Fragment,{children:[jsx(D,{step:v,disableStepIndicators:b,currentStep:n,onClickStep:N=>{l(N>n?1:-1),p(N);}}),z&&jsx(F,{isComplete:n>v})]},v)})}),jsx(E,{isCompleted:g,currentStep:n,direction:P,children:f[n-1]}),!g&&jsxs("div",{className:u("flex mt-8",n!==1?"justify-between":"justify-end"),children:[n!==1&&jsx("button",{onClick:R,className:"px-4 py-2 text-sm font-medium text-zinc-400 hover:text-white transition-colors rounded-lg hover:bg-zinc-800",children:o}),jsx("button",{onClick:h?T:L,className:"px-4 py-2 text-sm font-medium bg-white text-black rounded-lg hover:bg-zinc-200 transition-colors",children:h?"Complete":s})]})]})}function E({isCompleted:e,currentStep:r,direction:a,children:i}){let[o,s]=useState(0);return jsx(motion.div,{className:"relative overflow-hidden",animate:{height:e?0:o},transition:{type:"spring",duration:.4},children:jsx(AnimatePresence,{initial:false,mode:"sync",custom:a,children:!e&&jsx(I,{direction:a,onHeightReady:b=>s(b),children:i},r)})})}function I({children:e,direction:r,onHeightReady:a}){let i=useRef(null);useLayoutEffect(()=>{i.current&&a(i.current.offsetHeight);},[e,a]);let o={enter:s=>({x:s>=0?"-100%":"100%",opacity:0}),center:{x:"0%",opacity:1},exit:s=>({x:s>=0?"50%":"-50%",opacity:0})};return jsx(motion.div,{ref:i,custom:r,variants:o,initial:"enter",animate:"center",exit:"exit",transition:{duration:.4},className:"absolute left-0 right-0 top-0",children:e})}function Z({children:e}){return jsx("div",{className:"p-4 rounded-lg bg-zinc-900 border border-zinc-800",children:e})}function D({step:e,currentStep:r,onClickStep:a,disableStepIndicators:i}){let o=r===e?"active":r<e?"inactive":"complete",s=()=>{e!==r&&!i&&a(e);};return jsx(motion.button,{onClick:s,disabled:i,className:u("relative flex items-center justify-center w-10 h-10 rounded-full text-sm font-medium transition-all",o==="inactive"&&"bg-zinc-800 text-zinc-500 border border-zinc-700",o==="active"&&"bg-white text-black border-2 border-white",o==="complete"&&"bg-white text-black border-2 border-white",!i&&"cursor-pointer hover:opacity-80"),animate:o,initial:false,children:o==="complete"?jsx("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2.5,children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5 13l4 4L19 7"})}):jsx("span",{children:e})})}function F({isComplete:e}){return jsx("div",{className:"flex-1 h-[2px] mx-2 bg-zinc-800 rounded-full overflow-hidden",children:jsx(motion.div,{className:"h-full bg-white rounded-full",initial:{width:0},animate:{width:e?"100%":"0%"},transition:{duration:.4}})})}export{Z as Step,Y as Stepper};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/stepper/index.tsx"],"names":["cn","inputs","twMerge","clsx","Stepper","children","initialStep","onStepChange","onFinalStepCompleted","backButtonText","nextButtonText","disableStepIndicators","className","rest","currentStep","setCurrentStep","useState","direction","setDirection","stepsArray","Children","totalSteps","isCompleted","isLastStep","updateStep","newStep","handleBack","handleNext","handleComplete","jsxs","jsx","_","index","stepNumber","isNotLastStep","React","StepIndicator","clicked","StepConnector","StepContentWrapper","parentHeight","setParentHeight","motion","AnimatePresence","SlideTransition","h","onHeightReady","containerRef","useRef","useLayoutEffect","stepVariants","dir","Step","step","onClickStep","status","handleClick","isComplete"],"mappings":"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","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useState, Children, useRef, useLayoutEffect, HTMLAttributes, ReactNode } from \"react\";\r\nimport { motion, AnimatePresence, Variants } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\nexport interface StepperProps extends HTMLAttributes<HTMLDivElement> {\r\n children: ReactNode;\r\n initialStep?: number;\r\n onStepChange?: (step: number) => void;\r\n onFinalStepCompleted?: () => void;\r\n backButtonText?: string;\r\n nextButtonText?: string;\r\n disableStepIndicators?: boolean;\r\n}\r\n\r\nexport function Stepper({\r\n children,\r\n initialStep = 1,\r\n onStepChange = () => {},\r\n onFinalStepCompleted = () => {},\r\n backButtonText = \"Back\",\r\n nextButtonText = \"Continue\",\r\n disableStepIndicators = false,\r\n className,\r\n ...rest\r\n}: StepperProps) {\r\n const [currentStep, setCurrentStep] = useState<number>(initialStep);\r\n const [direction, setDirection] = useState<number>(0);\r\n const stepsArray = Children.toArray(children);\r\n const totalSteps = stepsArray.length;\r\n const isCompleted = currentStep > totalSteps;\r\n const isLastStep = currentStep === totalSteps;\r\n\r\n const updateStep = (newStep: number) => {\r\n setCurrentStep(newStep);\r\n if (newStep > totalSteps) {\r\n onFinalStepCompleted();\r\n } else {\r\n onStepChange(newStep);\r\n }\r\n };\r\n\r\n const handleBack = () => {\r\n if (currentStep > 1) {\r\n setDirection(-1);\r\n updateStep(currentStep - 1);\r\n }\r\n };\r\n\r\n const handleNext = () => {\r\n if (!isLastStep) {\r\n setDirection(1);\r\n updateStep(currentStep + 1);\r\n }\r\n };\r\n\r\n const handleComplete = () => {\r\n setDirection(1);\r\n updateStep(totalSteps + 1);\r\n };\r\n\r\n return (\r\n <div className={cn(\"w-full max-w-md mx-auto\", className)} {...rest}>\r\n <div className=\"flex items-center justify-between mb-8\">\r\n {stepsArray.map((_, index) => {\r\n const stepNumber = index + 1;\r\n const isNotLastStep = index < totalSteps - 1;\r\n return (\r\n <React.Fragment key={stepNumber}>\r\n <StepIndicator\r\n step={stepNumber}\r\n disableStepIndicators={disableStepIndicators}\r\n currentStep={currentStep}\r\n onClickStep={(clicked) => {\r\n setDirection(clicked > currentStep ? 1 : -1);\r\n updateStep(clicked);\r\n }}\r\n />\r\n {isNotLastStep && <StepConnector isComplete={currentStep > stepNumber} />}\r\n </React.Fragment>\r\n );\r\n })}\r\n </div>\r\n\r\n <StepContentWrapper isCompleted={isCompleted} currentStep={currentStep} direction={direction}>\r\n {stepsArray[currentStep - 1]}\r\n </StepContentWrapper>\r\n\r\n {!isCompleted && (\r\n <div className={cn(\"flex mt-8\", currentStep !== 1 ? \"justify-between\" : \"justify-end\")}>\r\n {currentStep !== 1 && (\r\n <button\r\n onClick={handleBack}\r\n className=\"px-4 py-2 text-sm font-medium text-zinc-400 hover:text-white transition-colors rounded-lg hover:bg-zinc-800\"\r\n >\r\n {backButtonText}\r\n </button>\r\n )}\r\n <button\r\n onClick={isLastStep ? handleComplete : handleNext}\r\n className=\"px-4 py-2 text-sm font-medium bg-white text-black rounded-lg hover:bg-zinc-200 transition-colors\"\r\n >\r\n {isLastStep ? \"Complete\" : nextButtonText}\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\ninterface StepContentWrapperProps {\r\n isCompleted: boolean;\r\n currentStep: number;\r\n direction: number;\r\n children: ReactNode;\r\n}\r\n\r\nfunction StepContentWrapper({ isCompleted, currentStep, direction, children }: StepContentWrapperProps) {\r\n const [parentHeight, setParentHeight] = useState<number>(0);\r\n\r\n return (\r\n <motion.div\r\n className=\"relative overflow-hidden\"\r\n animate={{ height: isCompleted ? 0 : parentHeight }}\r\n transition={{ type: \"spring\", duration: 0.4 }}\r\n >\r\n <AnimatePresence initial={false} mode=\"sync\" custom={direction}>\r\n {!isCompleted && (\r\n <SlideTransition key={currentStep} direction={direction} onHeightReady={(h) => setParentHeight(h)}>\r\n {children}\r\n </SlideTransition>\r\n )}\r\n </AnimatePresence>\r\n </motion.div>\r\n );\r\n}\r\n\r\ninterface SlideTransitionProps {\r\n children: ReactNode;\r\n direction: number;\r\n onHeightReady: (h: number) => void;\r\n}\r\n\r\nfunction SlideTransition({ children, direction, onHeightReady }: SlideTransitionProps) {\r\n const containerRef = useRef<HTMLDivElement | null>(null);\r\n\r\n useLayoutEffect(() => {\r\n if (containerRef.current) {\r\n onHeightReady(containerRef.current.offsetHeight);\r\n }\r\n }, [children, onHeightReady]);\r\n\r\n const stepVariants: Variants = {\r\n enter: (dir: number) => ({ x: dir >= 0 ? \"-100%\" : \"100%\", opacity: 0 }),\r\n center: { x: \"0%\", opacity: 1 },\r\n exit: (dir: number) => ({ x: dir >= 0 ? \"50%\" : \"-50%\", opacity: 0 }),\r\n };\r\n\r\n return (\r\n <motion.div\r\n ref={containerRef}\r\n custom={direction}\r\n variants={stepVariants}\r\n initial=\"enter\"\r\n animate=\"center\"\r\n exit=\"exit\"\r\n transition={{ duration: 0.4 }}\r\n className=\"absolute left-0 right-0 top-0\"\r\n >\r\n {children}\r\n </motion.div>\r\n );\r\n}\r\n\r\ninterface StepProps {\r\n children: ReactNode;\r\n}\r\n\r\nexport function Step({ children }: StepProps): React.JSX.Element {\r\n return <div className=\"p-4 rounded-lg bg-zinc-900 border border-zinc-800\">{children}</div>;\r\n}\r\n\r\ninterface StepIndicatorProps {\r\n step: number;\r\n currentStep: number;\r\n onClickStep: (step: number) => void;\r\n disableStepIndicators?: boolean;\r\n}\r\n\r\nfunction StepIndicator({ step, currentStep, onClickStep, disableStepIndicators }: StepIndicatorProps) {\r\n const status = currentStep === step ? \"active\" : currentStep < step ? \"inactive\" : \"complete\";\r\n\r\n const handleClick = () => {\r\n if (step !== currentStep && !disableStepIndicators) {\r\n onClickStep(step);\r\n }\r\n };\r\n\r\n return (\r\n <motion.button\r\n onClick={handleClick}\r\n disabled={disableStepIndicators}\r\n className={cn(\r\n \"relative flex items-center justify-center w-10 h-10 rounded-full text-sm font-medium transition-all\",\r\n status === \"inactive\" && \"bg-zinc-800 text-zinc-500 border border-zinc-700\",\r\n status === \"active\" && \"bg-white text-black border-2 border-white\",\r\n status === \"complete\" && \"bg-white text-black border-2 border-white\",\r\n !disableStepIndicators && \"cursor-pointer hover:opacity-80\"\r\n )}\r\n animate={status}\r\n initial={false}\r\n >\r\n {status === \"complete\" ? (\r\n <svg className=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2.5}>\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\r\n </svg>\r\n ) : (\r\n <span>{step}</span>\r\n )}\r\n </motion.button>\r\n );\r\n}\r\n\r\ninterface StepConnectorProps {\r\n isComplete: boolean;\r\n}\r\n\r\nfunction StepConnector({ isComplete }: StepConnectorProps) {\r\n return (\r\n <div className=\"flex-1 h-[2px] mx-2 bg-zinc-800 rounded-full overflow-hidden\">\r\n <motion.div\r\n className=\"h-full bg-white rounded-full\"\r\n initial={{ width: 0 }}\r\n animate={{ width: isComplete ? \"100%\" : \"0%\" }}\r\n transition={{ duration: 0.4 }}\r\n />\r\n </div>\r\n );\r\n}\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function e(...t){return tailwindMerge.twMerge(clsx.clsx(t))}var u={sm:{track:"w-8 h-4",thumb:"w-3 h-3",translate:16},md:{track:"w-11 h-6",thumb:"w-5 h-5",translate:20},lg:{track:"w-14 h-7",thumb:"w-6 h-6",translate:28}};function p({checked:t=false,onChange:r,disabled:o=false,size:s="md",className:i}){let n=u[s];return jsxRuntime.jsx("button",{type:"button",role:"switch","aria-checked":t,disabled:o,onClick:()=>r?.(!t),className:e("relative inline-flex shrink-0 cursor-pointer rounded-full transition-colors",t?"bg-blue-500":"bg-zinc-300 dark:bg-zinc-700",o&&"opacity-50 cursor-not-allowed",n.track,i),children:jsxRuntime.jsx(framerMotion.motion.span,{className:e("pointer-events-none inline-block rounded-full bg-white shadow-lg",n.thumb),animate:{x:t?n.translate:2},transition:{type:"spring",stiffness:500,damping:30},style:{marginTop:2}})})}var w=p;exports.Switch=p;exports.default=w;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/switch/index.tsx"],"names":["cn","inputs","twMerge","clsx","sizes","Switch","checked","onChange","disabled","size","className","sizeConfig","jsx","motion","switch_default"],"mappings":"qNAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCQA,IAAMG,CAAAA,CAAQ,CACZ,EAAA,CAAI,CAAE,KAAA,CAAO,SAAA,CAAW,MAAO,SAAA,CAAW,SAAA,CAAW,EAAG,CAAA,CACxD,EAAA,CAAI,CAAE,KAAA,CAAO,UAAA,CAAY,MAAO,SAAA,CAAW,SAAA,CAAW,EAAG,CAAA,CACzD,EAAA,CAAI,CAAE,KAAA,CAAO,UAAA,CAAY,MAAO,SAAA,CAAW,SAAA,CAAW,EAAG,CAC3D,CAAA,CAEO,SAASC,CAAAA,CAAO,CACrB,QAAAC,CAAAA,CAAU,KAAA,CACV,QAAA,CAAAC,CAAAA,CACA,SAAAC,CAAAA,CAAW,KAAA,CACX,IAAA,CAAAC,CAAAA,CAAO,KACP,SAAA,CAAAC,CACF,CAAA,CAAgB,CACd,IAAMC,CAAAA,CAAaP,CAAAA,CAAMK,CAAI,EAE7B,OACEG,cAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,IAAA,CAAK,QAAA,CACL,cAAA,CAAcN,EACd,QAAA,CAAUE,CAAAA,CACV,OAAA,CAAS,IAAMD,CAAAA,GAAW,CAACD,CAAO,CAAA,CAClC,UAAWN,CAAAA,CACT,6EAAA,CACAM,CAAAA,CAAU,aAAA,CAAgB,+BAC1BE,CAAAA,EAAY,+BAAA,CACZG,CAAAA,CAAW,KAAA,CACXD,CACF,CAAA,CAEA,QAAA,CAAAE,cAAAA,CAACC,mBAAAA,CAAO,IAAA,CAAP,CACC,SAAA,CAAWb,CAAAA,CACT,mEACAW,CAAAA,CAAW,KACb,CAAA,CACA,OAAA,CAAS,CAAE,CAAA,CAAGL,CAAAA,CAAUK,CAAAA,CAAW,SAAA,CAAY,CAAE,CAAA,CACjD,UAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,SAAA,CAAW,GAAA,CAAK,OAAA,CAAS,EAAG,CAAA,CAC1D,KAAA,CAAO,CAAE,SAAA,CAAW,CAAE,CAAA,CACxB,CAAA,CACF,CAEJ,KAEOG,CAAAA,CAAQT","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface SwitchProps {\r\n checked?: boolean;\r\n onChange?: (checked: boolean) => void;\r\n disabled?: boolean;\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n className?: string;\r\n}\r\n\r\nconst sizes = {\r\n sm: { track: \"w-8 h-4\", thumb: \"w-3 h-3\", translate: 16 },\r\n md: { track: \"w-11 h-6\", thumb: \"w-5 h-5\", translate: 20 },\r\n lg: { track: \"w-14 h-7\", thumb: \"w-6 h-6\", translate: 28 },\r\n};\r\n\r\nexport function Switch({ \r\n checked = false, \r\n onChange, \r\n disabled = false,\r\n size = \"md\",\r\n className \r\n}: SwitchProps) {\r\n const sizeConfig = sizes[size];\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n role=\"switch\"\r\n aria-checked={checked}\r\n disabled={disabled}\r\n onClick={() => onChange?.(!checked)}\r\n className={cn(\r\n \"relative inline-flex shrink-0 cursor-pointer rounded-full transition-colors\",\r\n checked ? \"bg-blue-500\" : \"bg-zinc-300 dark:bg-zinc-700\",\r\n disabled && \"opacity-50 cursor-not-allowed\",\r\n sizeConfig.track,\r\n className\r\n )}\r\n >\r\n <motion.span\r\n className={cn(\r\n \"pointer-events-none inline-block rounded-full bg-white shadow-lg\",\r\n sizeConfig.thumb\r\n )}\r\n animate={{ x: checked ? sizeConfig.translate : 2 }}\r\n transition={{ type: \"spring\", stiffness: 500, damping: 30 }}\r\n style={{ marginTop: 2 }}\r\n />\r\n </button>\r\n );\r\n}\r\n\r\nexport default Switch;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function e(...t){return twMerge(clsx(t))}var u={sm:{track:"w-8 h-4",thumb:"w-3 h-3",translate:16},md:{track:"w-11 h-6",thumb:"w-5 h-5",translate:20},lg:{track:"w-14 h-7",thumb:"w-6 h-6",translate:28}};function p({checked:t=false,onChange:r,disabled:o=false,size:s="md",className:i}){let n=u[s];return jsx("button",{type:"button",role:"switch","aria-checked":t,disabled:o,onClick:()=>r?.(!t),className:e("relative inline-flex shrink-0 cursor-pointer rounded-full transition-colors",t?"bg-blue-500":"bg-zinc-300 dark:bg-zinc-700",o&&"opacity-50 cursor-not-allowed",n.track,i),children:jsx(motion.span,{className:e("pointer-events-none inline-block rounded-full bg-white shadow-lg",n.thumb),animate:{x:t?n.translate:2},transition:{type:"spring",stiffness:500,damping:30},style:{marginTop:2}})})}var w=p;export{p as Switch,w as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/switch/index.tsx"],"names":["cn","inputs","twMerge","clsx","sizes","Switch","checked","onChange","disabled","size","className","sizeConfig","jsx","motion","switch_default"],"mappings":"oIAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCQA,IAAMG,CAAAA,CAAQ,CACZ,EAAA,CAAI,CAAE,KAAA,CAAO,SAAA,CAAW,MAAO,SAAA,CAAW,SAAA,CAAW,EAAG,CAAA,CACxD,EAAA,CAAI,CAAE,KAAA,CAAO,UAAA,CAAY,MAAO,SAAA,CAAW,SAAA,CAAW,EAAG,CAAA,CACzD,EAAA,CAAI,CAAE,KAAA,CAAO,UAAA,CAAY,MAAO,SAAA,CAAW,SAAA,CAAW,EAAG,CAC3D,CAAA,CAEO,SAASC,CAAAA,CAAO,CACrB,QAAAC,CAAAA,CAAU,KAAA,CACV,QAAA,CAAAC,CAAAA,CACA,SAAAC,CAAAA,CAAW,KAAA,CACX,IAAA,CAAAC,CAAAA,CAAO,KACP,SAAA,CAAAC,CACF,CAAA,CAAgB,CACd,IAAMC,CAAAA,CAAaP,CAAAA,CAAMK,CAAI,EAE7B,OACEG,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,IAAA,CAAK,QAAA,CACL,cAAA,CAAcN,EACd,QAAA,CAAUE,CAAAA,CACV,OAAA,CAAS,IAAMD,CAAAA,GAAW,CAACD,CAAO,CAAA,CAClC,UAAWN,CAAAA,CACT,6EAAA,CACAM,CAAAA,CAAU,aAAA,CAAgB,+BAC1BE,CAAAA,EAAY,+BAAA,CACZG,CAAAA,CAAW,KAAA,CACXD,CACF,CAAA,CAEA,QAAA,CAAAE,GAAAA,CAACC,MAAAA,CAAO,IAAA,CAAP,CACC,SAAA,CAAWb,CAAAA,CACT,mEACAW,CAAAA,CAAW,KACb,CAAA,CACA,OAAA,CAAS,CAAE,CAAA,CAAGL,CAAAA,CAAUK,CAAAA,CAAW,SAAA,CAAY,CAAE,CAAA,CACjD,UAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,SAAA,CAAW,GAAA,CAAK,OAAA,CAAS,EAAG,CAAA,CAC1D,KAAA,CAAO,CAAE,SAAA,CAAW,CAAE,CAAA,CACxB,CAAA,CACF,CAEJ,KAEOG,CAAAA,CAAQT","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface SwitchProps {\r\n checked?: boolean;\r\n onChange?: (checked: boolean) => void;\r\n disabled?: boolean;\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n className?: string;\r\n}\r\n\r\nconst sizes = {\r\n sm: { track: \"w-8 h-4\", thumb: \"w-3 h-3\", translate: 16 },\r\n md: { track: \"w-11 h-6\", thumb: \"w-5 h-5\", translate: 20 },\r\n lg: { track: \"w-14 h-7\", thumb: \"w-6 h-6\", translate: 28 },\r\n};\r\n\r\nexport function Switch({ \r\n checked = false, \r\n onChange, \r\n disabled = false,\r\n size = \"md\",\r\n className \r\n}: SwitchProps) {\r\n const sizeConfig = sizes[size];\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n role=\"switch\"\r\n aria-checked={checked}\r\n disabled={disabled}\r\n onClick={() => onChange?.(!checked)}\r\n className={cn(\r\n \"relative inline-flex shrink-0 cursor-pointer rounded-full transition-colors\",\r\n checked ? \"bg-blue-500\" : \"bg-zinc-300 dark:bg-zinc-700\",\r\n disabled && \"opacity-50 cursor-not-allowed\",\r\n sizeConfig.track,\r\n className\r\n )}\r\n >\r\n <motion.span\r\n className={cn(\r\n \"pointer-events-none inline-block rounded-full bg-white shadow-lg\",\r\n sizeConfig.thumb\r\n )}\r\n animate={{ x: checked ? sizeConfig.translate : 2 }}\r\n transition={{ type: \"spring\", stiffness: 500, damping: 30 }}\r\n style={{ marginTop: 2 }}\r\n />\r\n </button>\r\n );\r\n}\r\n\r\nexport default Switch;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function n(...i){return tailwindMerge.twMerge(clsx.clsx(i))}function y({text:i,className:s,delay:a=0}){let r=i.split(""),l={hidden:{opacity:0},visible:{opacity:1,transition:{staggerChildren:.03,delayChildren:a}}},p={hidden:{opacity:0,x:-20,y:10,rotate:-10},visible:{opacity:1,x:0,y:0,rotate:0,transition:{type:"spring",damping:12,stiffness:200}}};return jsxRuntime.jsx(framerMotion.motion.span,{className:n("inline-flex",s),variants:l,initial:"hidden",animate:"visible",children:r.map((t,c)=>jsxRuntime.jsx(framerMotion.motion.span,{variants:p,className:"inline-block",style:{whiteSpace:t===" "?"pre":"normal"},children:t===" "?"\xA0":t},c))})}var b=y;exports.SwooshText=y;exports.default=b;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/swoosh-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","SwooshText","text","className","delay","letters","container","child","jsx","motion","letter","index","swoosh_text_default"],"mappings":"qNAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCMO,SAASG,CAAAA,CAAW,CAAE,IAAA,CAAAC,CAAAA,CAAM,SAAA,CAAAC,CAAAA,CAAW,MAAAC,CAAAA,CAAQ,CAAE,CAAA,CAAoB,CAC1E,IAAMC,CAAAA,CAAUH,CAAAA,CAAK,KAAA,CAAM,EAAE,CAAA,CAEvBI,CAAAA,CAAY,CAChB,MAAA,CAAQ,CAAE,OAAA,CAAS,CAAE,CAAA,CACrB,OAAA,CAAS,CACP,OAAA,CAAS,CAAA,CACT,UAAA,CAAY,CAAE,eAAA,CAAiB,GAAA,CAAM,aAAA,CAAeF,CAAM,CAC5D,CACF,CAAA,CAEMG,CAAAA,CAAQ,CACZ,OAAQ,CACN,OAAA,CAAS,CAAA,CACT,CAAA,CAAG,IACH,CAAA,CAAG,EAAA,CACH,MAAA,CAAQ,GACV,CAAA,CACA,OAAA,CAAS,CACP,OAAA,CAAS,EACT,CAAA,CAAG,CAAA,CACH,CAAA,CAAG,CAAA,CACH,MAAA,CAAQ,CAAA,CACR,UAAA,CAAY,CACV,KAAM,QAAA,CACN,OAAA,CAAS,EAAA,CACT,SAAA,CAAW,GACb,CACF,CACF,CAAA,CAEA,OACEC,cAAAA,CAACC,mBAAAA,CAAO,IAAA,CAAP,CACC,UAAWZ,CAAAA,CAAG,aAAA,CAAeM,CAAS,CAAA,CACtC,SAAUG,CAAAA,CACV,OAAA,CAAQ,QAAA,CACR,OAAA,CAAQ,SAAA,CAEP,QAAA,CAAAD,CAAAA,CAAQ,GAAA,CAAI,CAACK,CAAAA,CAAQC,CAAAA,GACpBH,cAAAA,CAACC,mBAAAA,CAAO,KAAP,CAEC,QAAA,CAAUF,CAAAA,CACV,SAAA,CAAU,eACV,KAAA,CAAO,CAAE,UAAA,CAAYG,CAAAA,GAAW,GAAA,CAAM,KAAA,CAAQ,QAAS,CAAA,CAEtD,SAAAA,CAAAA,GAAW,GAAA,CAAM,MAAA,CAAWA,CAAAA,CAAAA,CALxBC,CAMP,CACD,CAAA,CACH,CAEJ,KAEOC,CAAAA,CAAQX","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface SwooshTextProps {\r\n text: string;\r\n className?: string;\r\n delay?: number;\r\n}\r\n\r\nexport function SwooshText({ text, className, delay = 0 }: SwooshTextProps) {\r\n const letters = text.split(\"\");\r\n\r\n const container = {\r\n hidden: { opacity: 0 },\r\n visible: {\r\n opacity: 1,\r\n transition: { staggerChildren: 0.03, delayChildren: delay },\r\n },\r\n };\r\n\r\n const child = {\r\n hidden: {\r\n opacity: 0,\r\n x: -20,\r\n y: 10,\r\n rotate: -10,\r\n },\r\n visible: {\r\n opacity: 1,\r\n x: 0,\r\n y: 0,\r\n rotate: 0,\r\n transition: {\r\n type: \"spring\",\r\n damping: 12,\r\n stiffness: 200,\r\n },\r\n },\r\n };\r\n\r\n return (\r\n <motion.span\r\n className={cn(\"inline-flex\", className)}\r\n variants={container}\r\n initial=\"hidden\"\r\n animate=\"visible\"\r\n >\r\n {letters.map((letter, index) => (\r\n <motion.span\r\n key={index}\r\n variants={child}\r\n className=\"inline-block\"\r\n style={{ whiteSpace: letter === \" \" ? \"pre\" : \"normal\" }}\r\n >\r\n {letter === \" \" ? \"\\u00A0\" : letter}\r\n </motion.span>\r\n ))}\r\n </motion.span>\r\n );\r\n}\r\n\r\nexport default SwooshText;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function n(...i){return twMerge(clsx(i))}function y({text:i,className:s,delay:a=0}){let r=i.split(""),l={hidden:{opacity:0},visible:{opacity:1,transition:{staggerChildren:.03,delayChildren:a}}},p={hidden:{opacity:0,x:-20,y:10,rotate:-10},visible:{opacity:1,x:0,y:0,rotate:0,transition:{type:"spring",damping:12,stiffness:200}}};return jsx(motion.span,{className:n("inline-flex",s),variants:l,initial:"hidden",animate:"visible",children:r.map((t,c)=>jsx(motion.span,{variants:p,className:"inline-block",style:{whiteSpace:t===" "?"pre":"normal"},children:t===" "?"\xA0":t},c))})}var b=y;export{y as SwooshText,b as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/swoosh-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","SwooshText","text","className","delay","letters","container","child","jsx","motion","letter","index","swoosh_text_default"],"mappings":"oIAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCMO,SAASG,CAAAA,CAAW,CAAE,IAAA,CAAAC,CAAAA,CAAM,SAAA,CAAAC,CAAAA,CAAW,MAAAC,CAAAA,CAAQ,CAAE,CAAA,CAAoB,CAC1E,IAAMC,CAAAA,CAAUH,CAAAA,CAAK,KAAA,CAAM,EAAE,CAAA,CAEvBI,CAAAA,CAAY,CAChB,MAAA,CAAQ,CAAE,OAAA,CAAS,CAAE,CAAA,CACrB,OAAA,CAAS,CACP,OAAA,CAAS,CAAA,CACT,UAAA,CAAY,CAAE,eAAA,CAAiB,GAAA,CAAM,aAAA,CAAeF,CAAM,CAC5D,CACF,CAAA,CAEMG,CAAAA,CAAQ,CACZ,OAAQ,CACN,OAAA,CAAS,CAAA,CACT,CAAA,CAAG,IACH,CAAA,CAAG,EAAA,CACH,MAAA,CAAQ,GACV,CAAA,CACA,OAAA,CAAS,CACP,OAAA,CAAS,EACT,CAAA,CAAG,CAAA,CACH,CAAA,CAAG,CAAA,CACH,MAAA,CAAQ,CAAA,CACR,UAAA,CAAY,CACV,KAAM,QAAA,CACN,OAAA,CAAS,EAAA,CACT,SAAA,CAAW,GACb,CACF,CACF,CAAA,CAEA,OACEC,GAAAA,CAACC,MAAAA,CAAO,IAAA,CAAP,CACC,UAAWZ,CAAAA,CAAG,aAAA,CAAeM,CAAS,CAAA,CACtC,SAAUG,CAAAA,CACV,OAAA,CAAQ,QAAA,CACR,OAAA,CAAQ,SAAA,CAEP,QAAA,CAAAD,CAAAA,CAAQ,GAAA,CAAI,CAACK,CAAAA,CAAQC,CAAAA,GACpBH,GAAAA,CAACC,MAAAA,CAAO,KAAP,CAEC,QAAA,CAAUF,CAAAA,CACV,SAAA,CAAU,eACV,KAAA,CAAO,CAAE,UAAA,CAAYG,CAAAA,GAAW,GAAA,CAAM,KAAA,CAAQ,QAAS,CAAA,CAEtD,SAAAA,CAAAA,GAAW,GAAA,CAAM,MAAA,CAAWA,CAAAA,CAAAA,CALxBC,CAMP,CACD,CAAA,CACH,CAEJ,KAEOC,CAAAA,CAAQX","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface SwooshTextProps {\r\n text: string;\r\n className?: string;\r\n delay?: number;\r\n}\r\n\r\nexport function SwooshText({ text, className, delay = 0 }: SwooshTextProps) {\r\n const letters = text.split(\"\");\r\n\r\n const container = {\r\n hidden: { opacity: 0 },\r\n visible: {\r\n opacity: 1,\r\n transition: { staggerChildren: 0.03, delayChildren: delay },\r\n },\r\n };\r\n\r\n const child = {\r\n hidden: {\r\n opacity: 0,\r\n x: -20,\r\n y: 10,\r\n rotate: -10,\r\n },\r\n visible: {\r\n opacity: 1,\r\n x: 0,\r\n y: 0,\r\n rotate: 0,\r\n transition: {\r\n type: \"spring\",\r\n damping: 12,\r\n stiffness: 200,\r\n },\r\n },\r\n };\r\n\r\n return (\r\n <motion.span\r\n className={cn(\"inline-flex\", className)}\r\n variants={container}\r\n initial=\"hidden\"\r\n animate=\"visible\"\r\n >\r\n {letters.map((letter, index) => (\r\n <motion.span\r\n key={index}\r\n variants={child}\r\n className=\"inline-block\"\r\n style={{ whiteSpace: letter === \" \" ? \"pre\" : \"normal\" }}\r\n >\r\n {letter === \" \" ? \"\\u00A0\" : letter}\r\n </motion.span>\r\n ))}\r\n </motion.span>\r\n );\r\n}\r\n\r\nexport default SwooshText;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function i(...t){return tailwindMerge.twMerge(clsx.clsx(t))}function f({tabs:t,className:s,defaultIndex:c=0}){let[e,l]=react.useState(c);return jsxRuntime.jsxs("div",{className:i("w-full",s),children:[jsxRuntime.jsx("div",{className:"relative flex border-b border-zinc-200 dark:border-zinc-800",children:t.map((m,a)=>jsxRuntime.jsxs("button",{onClick:()=>l(a),className:i("px-4 py-2 text-sm font-medium transition-colors relative",e===a?"text-zinc-900 dark:text-white":"text-zinc-500 hover:text-zinc-700 dark:text-zinc-400 dark:hover:text-zinc-200"),children:[m.label,e===a&&jsxRuntime.jsx(framerMotion.motion.div,{layoutId:"activeTab",className:"absolute bottom-0 left-0 right-0 h-0.5 bg-zinc-900 dark:bg-white",transition:{type:"spring",stiffness:500,damping:30}})]},a))}),jsxRuntime.jsx(framerMotion.motion.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},transition:{duration:.2},className:"py-4",children:t[e].content},e)]})}var z=f;exports.Tabs=f;exports.default=z;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/tabs/index.tsx"],"names":["cn","inputs","twMerge","clsx","Tabs","tabs","className","defaultIndex","activeIndex","setActiveIndex","useState","jsxs","jsx","tab","index","motion","tabs_default"],"mappings":"4OAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCYO,SAASG,EAAK,CAAE,IAAA,CAAAC,CAAAA,CAAM,SAAA,CAAAC,CAAAA,CAAW,YAAA,CAAAC,CAAAA,CAAe,CAAE,EAAc,CACrE,GAAM,CAACC,CAAAA,CAAaC,CAAc,CAAA,CAAIC,cAAAA,CAASH,CAAY,CAAA,CAE3D,OACEI,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWX,CAAAA,CAAG,QAAA,CAAUM,CAAS,CAAA,CACpC,QAAA,CAAA,CAAAM,eAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6DAAA,CACZ,QAAA,CAAAP,EAAK,GAAA,CAAI,CAACQ,CAAAA,CAAKC,CAAAA,GACdH,gBAAC,QAAA,CAAA,CAEC,OAAA,CAAS,IAAMF,CAAAA,CAAeK,CAAK,CAAA,CACnC,SAAA,CAAWd,CAAAA,CACT,2DACAQ,CAAAA,GAAgBM,CAAAA,CACZ,+BAAA,CACA,+EACN,EAEC,QAAA,CAAA,CAAAD,CAAAA,CAAI,KAAA,CACJL,CAAAA,GAAgBM,GACfF,cAAAA,CAACG,mBAAAA,CAAO,GAAA,CAAP,CACC,QAAA,CAAS,WAAA,CACT,SAAA,CAAU,kEAAA,CACV,WAAY,CAAE,IAAA,CAAM,QAAA,CAAU,SAAA,CAAW,IAAK,OAAA,CAAS,EAAG,CAAA,CAC5D,CAAA,CAAA,CAAA,CAfGD,CAiBP,CACD,CAAA,CACH,CAAA,CACAF,cAAAA,CAACG,mBAAAA,CAAO,GAAA,CAAP,CAEC,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,EAAG,EAC7B,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,EAAG,CAAE,CAAA,CAC5B,UAAA,CAAY,CAAE,QAAA,CAAU,EAAI,CAAA,CAC5B,SAAA,CAAU,OAET,QAAA,CAAAV,CAAAA,CAAKG,CAAW,CAAA,CAAE,SANdA,CAOP,CAAA,CAAA,CACF,CAEJ,KAEOQ,CAAAA,CAAQZ","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface Tab {\r\n label: string;\r\n content: React.ReactNode;\r\n}\r\n\r\ninterface TabsProps {\r\n tabs: Tab[];\r\n className?: string;\r\n defaultIndex?: number;\r\n}\r\n\r\nexport function Tabs({ tabs, className, defaultIndex = 0 }: TabsProps) {\r\n const [activeIndex, setActiveIndex] = useState(defaultIndex);\r\n\r\n return (\r\n <div className={cn(\"w-full\", className)}>\r\n <div className=\"relative flex border-b border-zinc-200 dark:border-zinc-800\">\r\n {tabs.map((tab, index) => (\r\n <button\r\n key={index}\r\n onClick={() => setActiveIndex(index)}\r\n className={cn(\r\n \"px-4 py-2 text-sm font-medium transition-colors relative\",\r\n activeIndex === index\r\n ? \"text-zinc-900 dark:text-white\"\r\n : \"text-zinc-500 hover:text-zinc-700 dark:text-zinc-400 dark:hover:text-zinc-200\"\r\n )}\r\n >\r\n {tab.label}\r\n {activeIndex === index && (\r\n <motion.div\r\n layoutId=\"activeTab\"\r\n className=\"absolute bottom-0 left-0 right-0 h-0.5 bg-zinc-900 dark:bg-white\"\r\n transition={{ type: \"spring\", stiffness: 500, damping: 30 }}\r\n />\r\n )}\r\n </button>\r\n ))}\r\n </div>\r\n <motion.div\r\n key={activeIndex}\r\n initial={{ opacity: 0, y: 10 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n transition={{ duration: 0.2 }}\r\n className=\"py-4\"\r\n >\r\n {tabs[activeIndex].content}\r\n </motion.div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Tabs;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useState}from'react';import {motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function i(...t){return twMerge(clsx(t))}function f({tabs:t,className:s,defaultIndex:c=0}){let[e,l]=useState(c);return jsxs("div",{className:i("w-full",s),children:[jsx("div",{className:"relative flex border-b border-zinc-200 dark:border-zinc-800",children:t.map((m,a)=>jsxs("button",{onClick:()=>l(a),className:i("px-4 py-2 text-sm font-medium transition-colors relative",e===a?"text-zinc-900 dark:text-white":"text-zinc-500 hover:text-zinc-700 dark:text-zinc-400 dark:hover:text-zinc-200"),children:[m.label,e===a&&jsx(motion.div,{layoutId:"activeTab",className:"absolute bottom-0 left-0 right-0 h-0.5 bg-zinc-900 dark:bg-white",transition:{type:"spring",stiffness:500,damping:30}})]},a))}),jsx(motion.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},transition:{duration:.2},className:"py-4",children:t[e].content},e)]})}var z=f;export{f as Tabs,z as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/tabs/index.tsx"],"names":["cn","inputs","twMerge","clsx","Tabs","tabs","className","defaultIndex","activeIndex","setActiveIndex","useState","jsxs","jsx","tab","index","motion","tabs_default"],"mappings":"sKAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCYO,SAASG,EAAK,CAAE,IAAA,CAAAC,CAAAA,CAAM,SAAA,CAAAC,CAAAA,CAAW,YAAA,CAAAC,CAAAA,CAAe,CAAE,EAAc,CACrE,GAAM,CAACC,CAAAA,CAAaC,CAAc,CAAA,CAAIC,QAAAA,CAASH,CAAY,CAAA,CAE3D,OACEI,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWX,CAAAA,CAAG,QAAA,CAAUM,CAAS,CAAA,CACpC,QAAA,CAAA,CAAAM,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,6DAAA,CACZ,QAAA,CAAAP,EAAK,GAAA,CAAI,CAACQ,CAAAA,CAAKC,CAAAA,GACdH,KAAC,QAAA,CAAA,CAEC,OAAA,CAAS,IAAMF,CAAAA,CAAeK,CAAK,CAAA,CACnC,SAAA,CAAWd,CAAAA,CACT,2DACAQ,CAAAA,GAAgBM,CAAAA,CACZ,+BAAA,CACA,+EACN,EAEC,QAAA,CAAA,CAAAD,CAAAA,CAAI,KAAA,CACJL,CAAAA,GAAgBM,GACfF,GAAAA,CAACG,MAAAA,CAAO,GAAA,CAAP,CACC,QAAA,CAAS,WAAA,CACT,SAAA,CAAU,kEAAA,CACV,WAAY,CAAE,IAAA,CAAM,QAAA,CAAU,SAAA,CAAW,IAAK,OAAA,CAAS,EAAG,CAAA,CAC5D,CAAA,CAAA,CAAA,CAfGD,CAiBP,CACD,CAAA,CACH,CAAA,CACAF,GAAAA,CAACG,MAAAA,CAAO,GAAA,CAAP,CAEC,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,EAAG,EAC7B,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,EAAG,CAAE,CAAA,CAC5B,UAAA,CAAY,CAAE,QAAA,CAAU,EAAI,CAAA,CAC5B,SAAA,CAAU,OAET,QAAA,CAAAV,CAAAA,CAAKG,CAAW,CAAA,CAAE,SANdA,CAOP,CAAA,CAAA,CACF,CAEJ,KAEOQ,CAAAA,CAAQZ","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface Tab {\r\n label: string;\r\n content: React.ReactNode;\r\n}\r\n\r\ninterface TabsProps {\r\n tabs: Tab[];\r\n className?: string;\r\n defaultIndex?: number;\r\n}\r\n\r\nexport function Tabs({ tabs, className, defaultIndex = 0 }: TabsProps) {\r\n const [activeIndex, setActiveIndex] = useState(defaultIndex);\r\n\r\n return (\r\n <div className={cn(\"w-full\", className)}>\r\n <div className=\"relative flex border-b border-zinc-200 dark:border-zinc-800\">\r\n {tabs.map((tab, index) => (\r\n <button\r\n key={index}\r\n onClick={() => setActiveIndex(index)}\r\n className={cn(\r\n \"px-4 py-2 text-sm font-medium transition-colors relative\",\r\n activeIndex === index\r\n ? \"text-zinc-900 dark:text-white\"\r\n : \"text-zinc-500 hover:text-zinc-700 dark:text-zinc-400 dark:hover:text-zinc-200\"\r\n )}\r\n >\r\n {tab.label}\r\n {activeIndex === index && (\r\n <motion.div\r\n layoutId=\"activeTab\"\r\n className=\"absolute bottom-0 left-0 right-0 h-0.5 bg-zinc-900 dark:bg-white\"\r\n transition={{ type: \"spring\", stiffness: 500, damping: 30 }}\r\n />\r\n )}\r\n </button>\r\n ))}\r\n </div>\r\n <motion.div\r\n key={activeIndex}\r\n initial={{ opacity: 0, y: 10 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n transition={{ duration: 0.2 }}\r\n className=\"py-4\"\r\n >\r\n {tabs[activeIndex].content}\r\n </motion.div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Tabs;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var react=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function n(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function k({children:e,className:r,title:a="Terminal"}){return jsxRuntime.jsxs("div",{className:n("relative w-full max-w-2xl mx-auto bg-zinc-100 dark:bg-black rounded-lg overflow-hidden shadow-2xl","border border-zinc-300 dark:border-gray-800",r),children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between px-4 py-3 bg-zinc-200 dark:bg-gray-800 border-b border-zinc-300 dark:border-gray-700",children:[jsxRuntime.jsxs("div",{className:"flex items-center space-x-2",children:[jsxRuntime.jsx("div",{className:"w-3 h-3 bg-red-500 rounded-full"}),jsxRuntime.jsx("div",{className:"w-3 h-3 bg-yellow-500 rounded-full"}),jsxRuntime.jsx("div",{className:"w-3 h-3 bg-green-500 rounded-full"})]}),jsxRuntime.jsx("div",{className:"text-zinc-600 dark:text-gray-400 text-sm font-mono",children:a}),jsxRuntime.jsx("div",{className:"w-16"})]}),jsxRuntime.jsx("div",{className:"p-4 font-mono text-sm leading-relaxed space-y-2 min-h-[300px] bg-zinc-100 dark:bg-black text-zinc-900 dark:text-white",children:e})]})}function z({children:e,className:r,delay:a=0,speed:i=50}){let[l,o]=react.useState(""),[u,f]=react.useState(false);return react.useEffect(()=>{let v=setTimeout(()=>{let c=0,m=setInterval(()=>{c<=e.length?(o(e.slice(0,c)),c++):(f(true),clearInterval(m));},i);return ()=>clearInterval(m)},a);return ()=>clearTimeout(v)},[e,a,i]),jsxRuntime.jsxs("div",{className:n("flex items-center",r),children:[jsxRuntime.jsx("span",{children:l}),!u&&jsxRuntime.jsx("span",{className:"ml-1 animate-pulse bg-white w-2 h-4 inline-block"})]})}function A({children:e,className:r,delay:a=0}){let[i,l]=react.useState(false);return react.useEffect(()=>{let o=setTimeout(()=>{l(true);},a);return ()=>clearTimeout(o)},[a]),jsxRuntime.jsx("div",{className:n("transition-all duration-500 transform",i?"opacity-100 translate-y-0":"opacity-0 translate-y-2",r),children:e})}exports.AnimatedSpan=A;exports.Terminal=k;exports.TypingAnimation=z;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/terminal/index.tsx"],"names":["cn","inputs","twMerge","clsx","Terminal","children","className","title","jsxs","jsx","TypingAnimation","delay","speed","displayedText","setDisplayedText","useState","isComplete","setIsComplete","useEffect","timer","currentIndex","interval","AnimatedSpan","isVisible","setIsVisible"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useState, useEffect } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface TerminalProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n title?: string;\r\n}\r\n\r\ninterface TypingAnimationProps {\r\n children: string;\r\n className?: string;\r\n delay?: number;\r\n speed?: number;\r\n}\r\n\r\ninterface AnimatedSpanProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n delay?: number;\r\n}\r\n\r\nexport function Terminal({ children, className, title = \"Terminal\" }: TerminalProps) {\r\n return (\r\n <div\r\n className={cn(\r\n \"relative w-full max-w-2xl mx-auto bg-zinc-100 dark:bg-black rounded-lg overflow-hidden shadow-2xl\",\r\n \"border border-zinc-300 dark:border-gray-800\",\r\n className\r\n )}\r\n >\r\n <div className=\"flex items-center justify-between px-4 py-3 bg-zinc-200 dark:bg-gray-800 border-b border-zinc-300 dark:border-gray-700\">\r\n <div className=\"flex items-center space-x-2\">\r\n <div className=\"w-3 h-3 bg-red-500 rounded-full\"></div>\r\n <div className=\"w-3 h-3 bg-yellow-500 rounded-full\"></div>\r\n <div className=\"w-3 h-3 bg-green-500 rounded-full\"></div>\r\n </div>\r\n <div className=\"text-zinc-600 dark:text-gray-400 text-sm font-mono\">{title}</div>\r\n <div className=\"w-16\"></div>\r\n </div>\r\n\r\n <div className=\"p-4 font-mono text-sm leading-relaxed space-y-2 min-h-[300px] bg-zinc-100 dark:bg-black text-zinc-900 dark:text-white\">\r\n {children}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport function TypingAnimation({ children, className, delay = 0, speed = 50 }: TypingAnimationProps) {\r\n const [displayedText, setDisplayedText] = useState(\"\");\r\n const [isComplete, setIsComplete] = useState(false);\r\n\r\n useEffect(() => {\r\n const timer = setTimeout(() => {\r\n let currentIndex = 0;\r\n const interval = setInterval(() => {\r\n if (currentIndex <= children.length) {\r\n setDisplayedText(children.slice(0, currentIndex));\r\n currentIndex++;\r\n } else {\r\n setIsComplete(true);\r\n clearInterval(interval);\r\n }\r\n }, speed);\r\n\r\n return () => clearInterval(interval);\r\n }, delay);\r\n\r\n return () => clearTimeout(timer);\r\n }, [children, delay, speed]);\r\n\r\n return (\r\n <div className={cn(\"flex items-center\", className)}>\r\n <span>{displayedText}</span>\r\n {!isComplete && <span className=\"ml-1 animate-pulse bg-white w-2 h-4 inline-block\"></span>}\r\n </div>\r\n );\r\n}\r\n\r\nexport function AnimatedSpan({ children, className, delay = 0 }: AnimatedSpanProps) {\r\n const [isVisible, setIsVisible] = useState(false);\r\n\r\n useEffect(() => {\r\n const timer = setTimeout(() => {\r\n setIsVisible(true);\r\n }, delay);\r\n\r\n return () => clearTimeout(timer);\r\n }, [delay]);\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"transition-all duration-500 transform\",\r\n isVisible ? \"opacity-100 translate-y-0\" : \"opacity-0 translate-y-2\",\r\n className\r\n )}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useState,useEffect}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function n(...e){return twMerge(clsx(e))}function k({children:e,className:r,title:a="Terminal"}){return jsxs("div",{className:n("relative w-full max-w-2xl mx-auto bg-zinc-100 dark:bg-black rounded-lg overflow-hidden shadow-2xl","border border-zinc-300 dark:border-gray-800",r),children:[jsxs("div",{className:"flex items-center justify-between px-4 py-3 bg-zinc-200 dark:bg-gray-800 border-b border-zinc-300 dark:border-gray-700",children:[jsxs("div",{className:"flex items-center space-x-2",children:[jsx("div",{className:"w-3 h-3 bg-red-500 rounded-full"}),jsx("div",{className:"w-3 h-3 bg-yellow-500 rounded-full"}),jsx("div",{className:"w-3 h-3 bg-green-500 rounded-full"})]}),jsx("div",{className:"text-zinc-600 dark:text-gray-400 text-sm font-mono",children:a}),jsx("div",{className:"w-16"})]}),jsx("div",{className:"p-4 font-mono text-sm leading-relaxed space-y-2 min-h-[300px] bg-zinc-100 dark:bg-black text-zinc-900 dark:text-white",children:e})]})}function z({children:e,className:r,delay:a=0,speed:i=50}){let[l,o]=useState(""),[u,f]=useState(false);return useEffect(()=>{let v=setTimeout(()=>{let c=0,m=setInterval(()=>{c<=e.length?(o(e.slice(0,c)),c++):(f(true),clearInterval(m));},i);return ()=>clearInterval(m)},a);return ()=>clearTimeout(v)},[e,a,i]),jsxs("div",{className:n("flex items-center",r),children:[jsx("span",{children:l}),!u&&jsx("span",{className:"ml-1 animate-pulse bg-white w-2 h-4 inline-block"})]})}function A({children:e,className:r,delay:a=0}){let[i,l]=useState(false);return useEffect(()=>{let o=setTimeout(()=>{l(true);},a);return ()=>clearTimeout(o)},[a]),jsx("div",{className:n("transition-all duration-500 transform",i?"opacity-100 translate-y-0":"opacity-0 translate-y-2",r),children:e})}export{A as AnimatedSpan,k as Terminal,z as TypingAnimation};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/terminal/index.tsx"],"names":["cn","inputs","twMerge","clsx","Terminal","children","className","title","jsxs","jsx","TypingAnimation","delay","speed","displayedText","setDisplayedText","useState","isComplete","setIsComplete","useEffect","timer","currentIndex","interval","AnimatedSpan","isVisible","setIsVisible"],"mappings":"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","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useState, useEffect } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface TerminalProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n title?: string;\r\n}\r\n\r\ninterface TypingAnimationProps {\r\n children: string;\r\n className?: string;\r\n delay?: number;\r\n speed?: number;\r\n}\r\n\r\ninterface AnimatedSpanProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n delay?: number;\r\n}\r\n\r\nexport function Terminal({ children, className, title = \"Terminal\" }: TerminalProps) {\r\n return (\r\n <div\r\n className={cn(\r\n \"relative w-full max-w-2xl mx-auto bg-zinc-100 dark:bg-black rounded-lg overflow-hidden shadow-2xl\",\r\n \"border border-zinc-300 dark:border-gray-800\",\r\n className\r\n )}\r\n >\r\n <div className=\"flex items-center justify-between px-4 py-3 bg-zinc-200 dark:bg-gray-800 border-b border-zinc-300 dark:border-gray-700\">\r\n <div className=\"flex items-center space-x-2\">\r\n <div className=\"w-3 h-3 bg-red-500 rounded-full\"></div>\r\n <div className=\"w-3 h-3 bg-yellow-500 rounded-full\"></div>\r\n <div className=\"w-3 h-3 bg-green-500 rounded-full\"></div>\r\n </div>\r\n <div className=\"text-zinc-600 dark:text-gray-400 text-sm font-mono\">{title}</div>\r\n <div className=\"w-16\"></div>\r\n </div>\r\n\r\n <div className=\"p-4 font-mono text-sm leading-relaxed space-y-2 min-h-[300px] bg-zinc-100 dark:bg-black text-zinc-900 dark:text-white\">\r\n {children}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport function TypingAnimation({ children, className, delay = 0, speed = 50 }: TypingAnimationProps) {\r\n const [displayedText, setDisplayedText] = useState(\"\");\r\n const [isComplete, setIsComplete] = useState(false);\r\n\r\n useEffect(() => {\r\n const timer = setTimeout(() => {\r\n let currentIndex = 0;\r\n const interval = setInterval(() => {\r\n if (currentIndex <= children.length) {\r\n setDisplayedText(children.slice(0, currentIndex));\r\n currentIndex++;\r\n } else {\r\n setIsComplete(true);\r\n clearInterval(interval);\r\n }\r\n }, speed);\r\n\r\n return () => clearInterval(interval);\r\n }, delay);\r\n\r\n return () => clearTimeout(timer);\r\n }, [children, delay, speed]);\r\n\r\n return (\r\n <div className={cn(\"flex items-center\", className)}>\r\n <span>{displayedText}</span>\r\n {!isComplete && <span className=\"ml-1 animate-pulse bg-white w-2 h-4 inline-block\"></span>}\r\n </div>\r\n );\r\n}\r\n\r\nexport function AnimatedSpan({ children, className, delay = 0 }: AnimatedSpanProps) {\r\n const [isVisible, setIsVisible] = useState(false);\r\n\r\n useEffect(() => {\r\n const timer = setTimeout(() => {\r\n setIsVisible(true);\r\n }, delay);\r\n\r\n return () => clearTimeout(timer);\r\n }, [delay]);\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"transition-all duration-500 transform\",\r\n isVisible ? \"opacity-100 translate-y-0\" : \"opacity-0 translate-y-2\",\r\n className\r\n )}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function n(...e){return tailwindMerge.twMerge(clsx.clsx(e))}var o=react.forwardRef(({className:e,label:a,error:t,...i},l)=>jsxRuntime.jsxs("div",{className:"w-full",children:[a&&jsxRuntime.jsx("label",{className:"block text-sm font-medium text-zinc-700 dark:text-zinc-300 mb-1",children:a}),jsxRuntime.jsx("textarea",{ref:l,className:n("w-full px-4 py-2 rounded-lg min-h-[100px] resize-y","bg-white dark:bg-zinc-900","border border-zinc-300 dark:border-zinc-700","text-zinc-900 dark:text-zinc-100","placeholder:text-zinc-400 dark:placeholder:text-zinc-500","focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent","transition-all duration-200",t&&"border-red-500 focus:ring-red-500",e),...i}),t&&jsxRuntime.jsx("p",{className:"mt-1 text-sm text-red-500",children:t})]}));o.displayName="Textarea";var z=o;exports.Textarea=o;exports.default=z;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/textarea/index.tsx"],"names":["cn","inputs","twMerge","clsx","Textarea","forwardRef","className","label","error","props","ref","jsxs","jsx","textarea_default"],"mappings":"sMAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,IAAMG,CAAAA,CAAWC,iBACtB,CAAC,CAAE,UAAAC,CAAAA,CAAW,KAAA,CAAAC,EAAO,KAAA,CAAAC,CAAAA,CAAO,GAAGC,CAAM,CAAA,CAAGC,IAEpCC,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,QAAA,CACZ,UAAAJ,CAAAA,EACCK,cAAAA,CAAC,SAAM,SAAA,CAAU,iEAAA,CACd,SAAAL,CAAAA,CACH,CAAA,CAEFK,eAAC,UAAA,CAAA,CACC,GAAA,CAAKF,EACL,SAAA,CAAWV,CAAAA,CACT,qDACA,2BAAA,CACA,6CAAA,CACA,mCACA,0DAAA,CACA,8EAAA,CACA,8BACAQ,CAAAA,EAAS,mCAAA,CACTF,CACF,CAAA,CACC,GAAGG,EACN,CAAA,CACCD,CAAAA,EAASI,eAAC,GAAA,CAAA,CAAE,SAAA,CAAU,4BAA6B,QAAA,CAAAJ,CAAAA,CAAM,GAC5D,CAGN,EAEAJ,EAAS,WAAA,CAAc,UAAA,KAEhBS,CAAAA,CAAQT","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { forwardRef } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\r\n label?: string;\r\n error?: string;\r\n}\r\n\r\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\r\n ({ className, label, error, ...props }, ref) => {\r\n return (\r\n <div className=\"w-full\">\r\n {label && (\r\n <label className=\"block text-sm font-medium text-zinc-700 dark:text-zinc-300 mb-1\">\r\n {label}\r\n </label>\r\n )}\r\n <textarea\r\n ref={ref}\r\n className={cn(\r\n \"w-full px-4 py-2 rounded-lg min-h-[100px] resize-y\",\r\n \"bg-white dark:bg-zinc-900\",\r\n \"border border-zinc-300 dark:border-zinc-700\",\r\n \"text-zinc-900 dark:text-zinc-100\",\r\n \"placeholder:text-zinc-400 dark:placeholder:text-zinc-500\",\r\n \"focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\",\r\n \"transition-all duration-200\",\r\n error && \"border-red-500 focus:ring-red-500\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n {error && <p className=\"mt-1 text-sm text-red-500\">{error}</p>}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nTextarea.displayName = \"Textarea\";\r\n\r\nexport default Textarea;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {forwardRef}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function n(...e){return twMerge(clsx(e))}var o=forwardRef(({className:e,label:a,error:t,...i},l)=>jsxs("div",{className:"w-full",children:[a&&jsx("label",{className:"block text-sm font-medium text-zinc-700 dark:text-zinc-300 mb-1",children:a}),jsx("textarea",{ref:l,className:n("w-full px-4 py-2 rounded-lg min-h-[100px] resize-y","bg-white dark:bg-zinc-900","border border-zinc-300 dark:border-zinc-700","text-zinc-900 dark:text-zinc-100","placeholder:text-zinc-400 dark:placeholder:text-zinc-500","focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent","transition-all duration-200",t&&"border-red-500 focus:ring-red-500",e),...i}),t&&jsx("p",{className:"mt-1 text-sm text-red-500",children:t})]}));o.displayName="Textarea";var z=o;export{o as Textarea,z as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/textarea/index.tsx"],"names":["cn","inputs","twMerge","clsx","Textarea","forwardRef","className","label","error","props","ref","jsxs","jsx","textarea_default"],"mappings":"qIAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,IAAMG,CAAAA,CAAWC,WACtB,CAAC,CAAE,UAAAC,CAAAA,CAAW,KAAA,CAAAC,EAAO,KAAA,CAAAC,CAAAA,CAAO,GAAGC,CAAM,CAAA,CAAGC,IAEpCC,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,QAAA,CACZ,UAAAJ,CAAAA,EACCK,GAAAA,CAAC,SAAM,SAAA,CAAU,iEAAA,CACd,SAAAL,CAAAA,CACH,CAAA,CAEFK,IAAC,UAAA,CAAA,CACC,GAAA,CAAKF,EACL,SAAA,CAAWV,CAAAA,CACT,qDACA,2BAAA,CACA,6CAAA,CACA,mCACA,0DAAA,CACA,8EAAA,CACA,8BACAQ,CAAAA,EAAS,mCAAA,CACTF,CACF,CAAA,CACC,GAAGG,EACN,CAAA,CACCD,CAAAA,EAASI,IAAC,GAAA,CAAA,CAAE,SAAA,CAAU,4BAA6B,QAAA,CAAAJ,CAAAA,CAAM,GAC5D,CAGN,EAEAJ,EAAS,WAAA,CAAc,UAAA,KAEhBS,CAAAA,CAAQT","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { forwardRef } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\r\n label?: string;\r\n error?: string;\r\n}\r\n\r\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\r\n ({ className, label, error, ...props }, ref) => {\r\n return (\r\n <div className=\"w-full\">\r\n {label && (\r\n <label className=\"block text-sm font-medium text-zinc-700 dark:text-zinc-300 mb-1\">\r\n {label}\r\n </label>\r\n )}\r\n <textarea\r\n ref={ref}\r\n className={cn(\r\n \"w-full px-4 py-2 rounded-lg min-h-[100px] resize-y\",\r\n \"bg-white dark:bg-zinc-900\",\r\n \"border border-zinc-300 dark:border-zinc-700\",\r\n \"text-zinc-900 dark:text-zinc-100\",\r\n \"placeholder:text-zinc-400 dark:placeholder:text-zinc-500\",\r\n \"focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\",\r\n \"transition-all duration-200\",\r\n error && \"border-red-500 focus:ring-red-500\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n {error && <p className=\"mt-1 text-sm text-red-500\">{error}</p>}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nTextarea.displayName = \"Textarea\";\r\n\r\nexport default Textarea;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function t(...e){return tailwindMerge.twMerge(clsx.clsx(e))}var p={primary:{bg:"bg-blue-500",shadow:"shadow-blue-700",hover:"hover:bg-blue-600"},secondary:{bg:"bg-zinc-700",shadow:"shadow-zinc-900",hover:"hover:bg-zinc-800"},danger:{bg:"bg-red-500",shadow:"shadow-red-700",hover:"hover:bg-red-600"}},l={sm:"px-4 py-2 text-sm",md:"px-6 py-3 text-base",lg:"px-8 py-4 text-lg"};function m({children:e,className:r,variant:n="primary",size:s="md",...a}){let o=p[n];return jsxRuntime.jsx(framerMotion.motion.button,{className:t("relative rounded-lg font-semibold text-white","shadow-[0_6px_0_0]",o.bg,o.shadow,o.hover,l[s],r),whileHover:{y:-2},whileTap:{y:4,boxShadow:"0 2px 0 0"},transition:{duration:.1},...a,children:e})}var v=m;exports.ThreeDButton=m;exports.default=v;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/threed-button/index.tsx"],"names":["cn","inputs","twMerge","clsx","variants","sizes","ThreeDButton","children","className","variant","size","props","colors","jsx","motion","threed_button_default"],"mappings":"qNAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKA,IAAMG,CAAAA,CAAW,CACf,QAAS,CACP,EAAA,CAAI,aAAA,CACJ,MAAA,CAAQ,iBAAA,CACR,KAAA,CAAO,mBACT,CAAA,CACA,SAAA,CAAW,CACT,EAAA,CAAI,aAAA,CACJ,MAAA,CAAQ,iBAAA,CACR,KAAA,CAAO,mBACT,EACA,MAAA,CAAQ,CACN,EAAA,CAAI,YAAA,CACJ,MAAA,CAAQ,gBAAA,CACR,KAAA,CAAO,kBACT,CACF,CAAA,CAEMC,CAAAA,CAAQ,CACZ,EAAA,CAAI,mBAAA,CACJ,EAAA,CAAI,qBAAA,CACJ,GAAI,mBACN,CAAA,CAEO,SAASC,CAAAA,CAAa,CAC3B,QAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CAAU,SAAA,CACV,IAAA,CAAAC,CAAAA,CAAO,IAAA,CACP,GAAGC,CACL,CAAA,CAAsB,CACpB,IAAMC,CAAAA,CAASR,CAAAA,CAASK,CAAO,CAAA,CAE/B,OACEI,cAAAA,CAACC,mBAAAA,CAAO,MAAA,CAAP,CACC,SAAA,CAAWd,CAAAA,CACT,8CAAA,CACA,oBAAA,CACAY,EAAO,EAAA,CACPA,CAAAA,CAAO,MAAA,CACPA,CAAAA,CAAO,KAAA,CACPP,CAAAA,CAAMK,CAAI,CAAA,CACVF,CACF,CAAA,CACA,UAAA,CAAY,CAAE,CAAA,CAAG,EAAG,CAAA,CACpB,QAAA,CAAU,CAAE,CAAA,CAAG,CAAA,CAAG,SAAA,CAAW,WAAY,CAAA,CACzC,UAAA,CAAY,CAAE,QAAA,CAAU,EAAI,CAAA,CAC3B,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAEJ,KAEOQ,CAAAA,CAAQT","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface ThreeDButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n variant?: \"primary\" | \"secondary\" | \"danger\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n}\r\n\r\nconst variants = {\r\n primary: {\r\n bg: \"bg-blue-500\",\r\n shadow: \"shadow-blue-700\",\r\n hover: \"hover:bg-blue-600\",\r\n },\r\n secondary: {\r\n bg: \"bg-zinc-700\",\r\n shadow: \"shadow-zinc-900\",\r\n hover: \"hover:bg-zinc-800\",\r\n },\r\n danger: {\r\n bg: \"bg-red-500\",\r\n shadow: \"shadow-red-700\",\r\n hover: \"hover:bg-red-600\",\r\n },\r\n};\r\n\r\nconst sizes = {\r\n sm: \"px-4 py-2 text-sm\",\r\n md: \"px-6 py-3 text-base\",\r\n lg: \"px-8 py-4 text-lg\",\r\n};\r\n\r\nexport function ThreeDButton({\r\n children,\r\n className,\r\n variant = \"primary\",\r\n size = \"md\",\r\n ...props\r\n}: ThreeDButtonProps) {\r\n const colors = variants[variant];\r\n\r\n return (\r\n <motion.button\r\n className={cn(\r\n \"relative rounded-lg font-semibold text-white\",\r\n \"shadow-[0_6px_0_0]\",\r\n colors.bg,\r\n colors.shadow,\r\n colors.hover,\r\n sizes[size],\r\n className\r\n )}\r\n whileHover={{ y: -2 }}\r\n whileTap={{ y: 4, boxShadow: \"0 2px 0 0\" }}\r\n transition={{ duration: 0.1 }}\r\n {...props}\r\n >\r\n {children}\r\n </motion.button>\r\n );\r\n}\r\n\r\nexport default ThreeDButton;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function t(...e){return twMerge(clsx(e))}var p={primary:{bg:"bg-blue-500",shadow:"shadow-blue-700",hover:"hover:bg-blue-600"},secondary:{bg:"bg-zinc-700",shadow:"shadow-zinc-900",hover:"hover:bg-zinc-800"},danger:{bg:"bg-red-500",shadow:"shadow-red-700",hover:"hover:bg-red-600"}},l={sm:"px-4 py-2 text-sm",md:"px-6 py-3 text-base",lg:"px-8 py-4 text-lg"};function m({children:e,className:r,variant:n="primary",size:s="md",...a}){let o=p[n];return jsx(motion.button,{className:t("relative rounded-lg font-semibold text-white","shadow-[0_6px_0_0]",o.bg,o.shadow,o.hover,l[s],r),whileHover:{y:-2},whileTap:{y:4,boxShadow:"0 2px 0 0"},transition:{duration:.1},...a,children:e})}var v=m;export{m as ThreeDButton,v as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/threed-button/index.tsx"],"names":["cn","inputs","twMerge","clsx","variants","sizes","ThreeDButton","children","className","variant","size","props","colors","jsx","motion","threed_button_default"],"mappings":"oIAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKA,IAAMG,CAAAA,CAAW,CACf,QAAS,CACP,EAAA,CAAI,aAAA,CACJ,MAAA,CAAQ,iBAAA,CACR,KAAA,CAAO,mBACT,CAAA,CACA,SAAA,CAAW,CACT,EAAA,CAAI,aAAA,CACJ,MAAA,CAAQ,iBAAA,CACR,KAAA,CAAO,mBACT,EACA,MAAA,CAAQ,CACN,EAAA,CAAI,YAAA,CACJ,MAAA,CAAQ,gBAAA,CACR,KAAA,CAAO,kBACT,CACF,CAAA,CAEMC,CAAAA,CAAQ,CACZ,EAAA,CAAI,mBAAA,CACJ,EAAA,CAAI,qBAAA,CACJ,GAAI,mBACN,CAAA,CAEO,SAASC,CAAAA,CAAa,CAC3B,QAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CAAU,SAAA,CACV,IAAA,CAAAC,CAAAA,CAAO,IAAA,CACP,GAAGC,CACL,CAAA,CAAsB,CACpB,IAAMC,CAAAA,CAASR,CAAAA,CAASK,CAAO,CAAA,CAE/B,OACEI,GAAAA,CAACC,MAAAA,CAAO,MAAA,CAAP,CACC,SAAA,CAAWd,CAAAA,CACT,8CAAA,CACA,oBAAA,CACAY,EAAO,EAAA,CACPA,CAAAA,CAAO,MAAA,CACPA,CAAAA,CAAO,KAAA,CACPP,CAAAA,CAAMK,CAAI,CAAA,CACVF,CACF,CAAA,CACA,UAAA,CAAY,CAAE,CAAA,CAAG,EAAG,CAAA,CACpB,QAAA,CAAU,CAAE,CAAA,CAAG,CAAA,CAAG,SAAA,CAAW,WAAY,CAAA,CACzC,UAAA,CAAY,CAAE,QAAA,CAAU,EAAI,CAAA,CAC3B,GAAGG,CAAAA,CAEH,QAAA,CAAAJ,CAAAA,CACH,CAEJ,KAEOQ,CAAAA,CAAQT","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface ThreeDButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n variant?: \"primary\" | \"secondary\" | \"danger\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n}\r\n\r\nconst variants = {\r\n primary: {\r\n bg: \"bg-blue-500\",\r\n shadow: \"shadow-blue-700\",\r\n hover: \"hover:bg-blue-600\",\r\n },\r\n secondary: {\r\n bg: \"bg-zinc-700\",\r\n shadow: \"shadow-zinc-900\",\r\n hover: \"hover:bg-zinc-800\",\r\n },\r\n danger: {\r\n bg: \"bg-red-500\",\r\n shadow: \"shadow-red-700\",\r\n hover: \"hover:bg-red-600\",\r\n },\r\n};\r\n\r\nconst sizes = {\r\n sm: \"px-4 py-2 text-sm\",\r\n md: \"px-6 py-3 text-base\",\r\n lg: \"px-8 py-4 text-lg\",\r\n};\r\n\r\nexport function ThreeDButton({\r\n children,\r\n className,\r\n variant = \"primary\",\r\n size = \"md\",\r\n ...props\r\n}: ThreeDButtonProps) {\r\n const colors = variants[variant];\r\n\r\n return (\r\n <motion.button\r\n className={cn(\r\n \"relative rounded-lg font-semibold text-white\",\r\n \"shadow-[0_6px_0_0]\",\r\n colors.bg,\r\n colors.shadow,\r\n colors.hover,\r\n sizes[size],\r\n className\r\n )}\r\n whileHover={{ y: -2 }}\r\n whileTap={{ y: 4, boxShadow: \"0 2px 0 0\" }}\r\n transition={{ duration: 0.1 }}\r\n {...props}\r\n >\r\n {children}\r\n </motion.button>\r\n );\r\n}\r\n\r\nexport default ThreeDButton;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function a(...e){return tailwindMerge.twMerge(clsx.clsx(e))}var b={initial:{gap:0,paddingLeft:".5rem",paddingRight:".5rem"},animate:e=>({gap:e?".5rem":0,paddingLeft:e?"1rem":".5rem",paddingRight:e?"1rem":".5rem"})},x={initial:{width:0,opacity:0},animate:{width:"auto",opacity:1},exit:{width:0,opacity:0}},r={type:"spring",bounce:0,duration:.4};function v({className:e,items:s,defaultSelected:l,onItemClick:d}){let[i,m]=react.useState(l||null),c=t=>{m(i===t?null:t),d?.(t);};return jsxRuntime.jsx("div",{className:a("flex items-center gap-3 p-2 relative","bg-background border rounded-xl transition-all duration-200",e),children:jsxRuntime.jsx("div",{className:"flex items-center gap-2",children:s.map(t=>jsxRuntime.jsxs(framerMotion.motion.button,{variants:b,initial:false,animate:"animate",custom:i===t.id,onClick:()=>c(t.id),transition:r,className:a("relative flex items-center rounded-none px-3 py-2","text-sm font-medium transition-colors duration-300",i===t.id?"bg-[#1F9CFE] text-white rounded-lg":"text-muted-foreground hover:bg-muted hover:text-foreground"),children:[t.icon,jsxRuntime.jsx(framerMotion.AnimatePresence,{initial:false,children:i===t.id&&jsxRuntime.jsx(framerMotion.motion.span,{variants:x,initial:"initial",animate:"animate",exit:"exit",transition:r,className:"overflow-hidden",children:t.title})})]},t.id))})})}var V=v;exports.Toolbar=v;exports.default=V;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/toolbar/index.tsx"],"names":["cn","inputs","twMerge","clsx","buttonVariants","isSelected","spanVariants","transition","Toolbar","className","items","defaultSelected","onItemClick","selected","setSelected","useState","handleItemClick","itemId","jsx","item","jsxs","motion","AnimatePresence","toolbar_default"],"mappings":"4OAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCcA,IAAMG,CAAAA,CAAiB,CACrB,OAAA,CAAS,CAAE,GAAA,CAAK,EAAG,WAAA,CAAa,OAAA,CAAS,YAAA,CAAc,OAAQ,CAAA,CAC/D,OAAA,CAAUC,IAAyB,CACjC,GAAA,CAAKA,CAAAA,CAAa,OAAA,CAAU,CAAA,CAC5B,WAAA,CAAaA,EAAa,MAAA,CAAS,OAAA,CACnC,YAAA,CAAcA,CAAAA,CAAa,MAAA,CAAS,OACtC,EACF,CAAA,CAEMC,CAAAA,CAAe,CACnB,OAAA,CAAS,CAAE,KAAA,CAAO,EAAG,OAAA,CAAS,CAAE,CAAA,CAChC,OAAA,CAAS,CAAE,KAAA,CAAO,OAAQ,OAAA,CAAS,CAAE,CAAA,CACrC,IAAA,CAAM,CAAE,KAAA,CAAO,EAAG,OAAA,CAAS,CAAE,CAC/B,CAAA,CAEMC,CAAAA,CAAa,CAAE,KAAM,QAAA,CAAU,MAAA,CAAQ,CAAA,CAAG,QAAA,CAAU,EAAI,CAAA,CAEvD,SAASC,CAAAA,CAAQ,CAAE,SAAA,CAAAC,CAAAA,CAAW,KAAA,CAAAC,CAAAA,CAAO,eAAA,CAAAC,CAAAA,CAAiB,WAAA,CAAAC,CAAY,CAAA,CAAiB,CACxF,GAAM,CAACC,EAAUC,CAAW,CAAA,CAAIC,cAAAA,CAAwBJ,CAAAA,EAAmB,IAAI,CAAA,CAEzEK,EAAmBC,CAAAA,EAAmB,CAC1CH,CAAAA,CAAYD,CAAAA,GAAaI,CAAAA,CAAS,IAAA,CAAOA,CAAM,CAAA,CAC/CL,CAAAA,GAAcK,CAAM,EACtB,CAAA,CAEA,OACEC,eAAC,KAAA,CAAA,CACC,SAAA,CAAWlB,CAAAA,CACT,sCAAA,CACA,6DAAA,CACAS,CACF,EAEA,QAAA,CAAAS,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACZ,QAAA,CAAAR,EAAM,GAAA,CAAKS,CAAAA,EACVC,eAAAA,CAACC,mBAAAA,CAAO,MAAA,CAAP,CAEC,SAAUjB,CAAAA,CACV,OAAA,CAAS,KAAA,CACT,OAAA,CAAQ,SAAA,CACR,MAAA,CAAQS,IAAaM,CAAAA,CAAK,EAAA,CAC1B,OAAA,CAAS,IAAMH,CAAAA,CAAgBG,CAAAA,CAAK,EAAE,CAAA,CACtC,UAAA,CAAYZ,CAAAA,CACZ,SAAA,CAAWP,CAAAA,CACT,mDAAA,CACA,qDACAa,CAAAA,GAAaM,CAAAA,CAAK,EAAA,CACd,oCAAA,CACA,4DACN,CAAA,CAEC,UAAAA,CAAAA,CAAK,IAAA,CACND,cAAAA,CAACI,4BAAAA,CAAA,CAAgB,OAAA,CAAS,MACvB,QAAA,CAAAT,CAAAA,GAAaM,CAAAA,CAAK,EAAA,EACjBD,cAAAA,CAACG,mBAAAA,CAAO,KAAP,CACC,QAAA,CAAUf,CAAAA,CACV,OAAA,CAAQ,SAAA,CACR,OAAA,CAAQ,UACR,IAAA,CAAK,MAAA,CACL,UAAA,CAAYC,CAAAA,CACZ,SAAA,CAAU,iBAAA,CAET,SAAAY,CAAAA,CAAK,KAAA,CACR,CAAA,CAEJ,CAAA,CAAA,CAAA,CA7BKA,CAAAA,CAAK,EA8BZ,CACD,CAAA,CACH,CAAA,CACF,CAEJ,CAEA,IAAOI,CAAAA,CAAQf","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useState, useRef } from \"react\";\r\nimport { AnimatePresence, motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface ToolbarItem {\r\n id: string;\r\n title: string;\r\n icon: React.ReactNode;\r\n}\r\n\r\ninterface ToolbarProps {\r\n className?: string;\r\n items: ToolbarItem[];\r\n defaultSelected?: string;\r\n onItemClick?: (itemId: string) => void;\r\n}\r\n\r\nconst buttonVariants = {\r\n initial: { gap: 0, paddingLeft: \".5rem\", paddingRight: \".5rem\" },\r\n animate: (isSelected: boolean) => ({\r\n gap: isSelected ? \".5rem\" : 0,\r\n paddingLeft: isSelected ? \"1rem\" : \".5rem\",\r\n paddingRight: isSelected ? \"1rem\" : \".5rem\",\r\n }),\r\n};\r\n\r\nconst spanVariants = {\r\n initial: { width: 0, opacity: 0 },\r\n animate: { width: \"auto\", opacity: 1 },\r\n exit: { width: 0, opacity: 0 },\r\n};\r\n\r\nconst transition = { type: \"spring\", bounce: 0, duration: 0.4 };\r\n\r\nexport function Toolbar({ className, items, defaultSelected, onItemClick }: ToolbarProps) {\r\n const [selected, setSelected] = useState<string | null>(defaultSelected || null);\r\n\r\n const handleItemClick = (itemId: string) => {\r\n setSelected(selected === itemId ? null : itemId);\r\n onItemClick?.(itemId);\r\n };\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"flex items-center gap-3 p-2 relative\",\r\n \"bg-background border rounded-xl transition-all duration-200\",\r\n className\r\n )}\r\n >\r\n <div className=\"flex items-center gap-2\">\r\n {items.map((item) => (\r\n <motion.button\r\n key={item.id}\r\n variants={buttonVariants}\r\n initial={false}\r\n animate=\"animate\"\r\n custom={selected === item.id}\r\n onClick={() => handleItemClick(item.id)}\r\n transition={transition}\r\n className={cn(\r\n \"relative flex items-center rounded-none px-3 py-2\",\r\n \"text-sm font-medium transition-colors duration-300\",\r\n selected === item.id\r\n ? \"bg-[#1F9CFE] text-white rounded-lg\"\r\n : \"text-muted-foreground hover:bg-muted hover:text-foreground\"\r\n )}\r\n >\r\n {item.icon}\r\n <AnimatePresence initial={false}>\r\n {selected === item.id && (\r\n <motion.span\r\n variants={spanVariants}\r\n initial=\"initial\"\r\n animate=\"animate\"\r\n exit=\"exit\"\r\n transition={transition}\r\n className=\"overflow-hidden\"\r\n >\r\n {item.title}\r\n </motion.span>\r\n )}\r\n </AnimatePresence>\r\n </motion.button>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Toolbar;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useState}from'react';import {motion,AnimatePresence}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx,jsxs}from'react/jsx-runtime';function a(...e){return twMerge(clsx(e))}var b={initial:{gap:0,paddingLeft:".5rem",paddingRight:".5rem"},animate:e=>({gap:e?".5rem":0,paddingLeft:e?"1rem":".5rem",paddingRight:e?"1rem":".5rem"})},x={initial:{width:0,opacity:0},animate:{width:"auto",opacity:1},exit:{width:0,opacity:0}},r={type:"spring",bounce:0,duration:.4};function v({className:e,items:s,defaultSelected:l,onItemClick:d}){let[i,m]=useState(l||null),c=t=>{m(i===t?null:t),d?.(t);};return jsx("div",{className:a("flex items-center gap-3 p-2 relative","bg-background border rounded-xl transition-all duration-200",e),children:jsx("div",{className:"flex items-center gap-2",children:s.map(t=>jsxs(motion.button,{variants:b,initial:false,animate:"animate",custom:i===t.id,onClick:()=>c(t.id),transition:r,className:a("relative flex items-center rounded-none px-3 py-2","text-sm font-medium transition-colors duration-300",i===t.id?"bg-[#1F9CFE] text-white rounded-lg":"text-muted-foreground hover:bg-muted hover:text-foreground"),children:[t.icon,jsx(AnimatePresence,{initial:false,children:i===t.id&&jsx(motion.span,{variants:x,initial:"initial",animate:"animate",exit:"exit",transition:r,className:"overflow-hidden",children:t.title})})]},t.id))})})}var V=v;export{v as Toolbar,V as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/toolbar/index.tsx"],"names":["cn","inputs","twMerge","clsx","buttonVariants","isSelected","spanVariants","transition","Toolbar","className","items","defaultSelected","onItemClick","selected","setSelected","useState","handleItemClick","itemId","jsx","item","jsxs","motion","AnimatePresence","toolbar_default"],"mappings":"sLAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCcA,IAAMG,CAAAA,CAAiB,CACrB,OAAA,CAAS,CAAE,GAAA,CAAK,EAAG,WAAA,CAAa,OAAA,CAAS,YAAA,CAAc,OAAQ,CAAA,CAC/D,OAAA,CAAUC,IAAyB,CACjC,GAAA,CAAKA,CAAAA,CAAa,OAAA,CAAU,CAAA,CAC5B,WAAA,CAAaA,EAAa,MAAA,CAAS,OAAA,CACnC,YAAA,CAAcA,CAAAA,CAAa,MAAA,CAAS,OACtC,EACF,CAAA,CAEMC,CAAAA,CAAe,CACnB,OAAA,CAAS,CAAE,KAAA,CAAO,EAAG,OAAA,CAAS,CAAE,CAAA,CAChC,OAAA,CAAS,CAAE,KAAA,CAAO,OAAQ,OAAA,CAAS,CAAE,CAAA,CACrC,IAAA,CAAM,CAAE,KAAA,CAAO,EAAG,OAAA,CAAS,CAAE,CAC/B,CAAA,CAEMC,CAAAA,CAAa,CAAE,KAAM,QAAA,CAAU,MAAA,CAAQ,CAAA,CAAG,QAAA,CAAU,EAAI,CAAA,CAEvD,SAASC,CAAAA,CAAQ,CAAE,SAAA,CAAAC,CAAAA,CAAW,KAAA,CAAAC,CAAAA,CAAO,eAAA,CAAAC,CAAAA,CAAiB,WAAA,CAAAC,CAAY,CAAA,CAAiB,CACxF,GAAM,CAACC,EAAUC,CAAW,CAAA,CAAIC,QAAAA,CAAwBJ,CAAAA,EAAmB,IAAI,CAAA,CAEzEK,EAAmBC,CAAAA,EAAmB,CAC1CH,CAAAA,CAAYD,CAAAA,GAAaI,CAAAA,CAAS,IAAA,CAAOA,CAAM,CAAA,CAC/CL,CAAAA,GAAcK,CAAM,EACtB,CAAA,CAEA,OACEC,IAAC,KAAA,CAAA,CACC,SAAA,CAAWlB,CAAAA,CACT,sCAAA,CACA,6DAAA,CACAS,CACF,EAEA,QAAA,CAAAS,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yBAAA,CACZ,QAAA,CAAAR,EAAM,GAAA,CAAKS,CAAAA,EACVC,IAAAA,CAACC,MAAAA,CAAO,MAAA,CAAP,CAEC,SAAUjB,CAAAA,CACV,OAAA,CAAS,KAAA,CACT,OAAA,CAAQ,SAAA,CACR,MAAA,CAAQS,IAAaM,CAAAA,CAAK,EAAA,CAC1B,OAAA,CAAS,IAAMH,CAAAA,CAAgBG,CAAAA,CAAK,EAAE,CAAA,CACtC,UAAA,CAAYZ,CAAAA,CACZ,SAAA,CAAWP,CAAAA,CACT,mDAAA,CACA,qDACAa,CAAAA,GAAaM,CAAAA,CAAK,EAAA,CACd,oCAAA,CACA,4DACN,CAAA,CAEC,UAAAA,CAAAA,CAAK,IAAA,CACND,GAAAA,CAACI,eAAAA,CAAA,CAAgB,OAAA,CAAS,MACvB,QAAA,CAAAT,CAAAA,GAAaM,CAAAA,CAAK,EAAA,EACjBD,GAAAA,CAACG,MAAAA,CAAO,KAAP,CACC,QAAA,CAAUf,CAAAA,CACV,OAAA,CAAQ,SAAA,CACR,OAAA,CAAQ,UACR,IAAA,CAAK,MAAA,CACL,UAAA,CAAYC,CAAAA,CACZ,SAAA,CAAU,iBAAA,CAET,SAAAY,CAAAA,CAAK,KAAA,CACR,CAAA,CAEJ,CAAA,CAAA,CAAA,CA7BKA,CAAAA,CAAK,EA8BZ,CACD,CAAA,CACH,CAAA,CACF,CAEJ,CAEA,IAAOI,CAAAA,CAAQf","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useState, useRef } from \"react\";\r\nimport { AnimatePresence, motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface ToolbarItem {\r\n id: string;\r\n title: string;\r\n icon: React.ReactNode;\r\n}\r\n\r\ninterface ToolbarProps {\r\n className?: string;\r\n items: ToolbarItem[];\r\n defaultSelected?: string;\r\n onItemClick?: (itemId: string) => void;\r\n}\r\n\r\nconst buttonVariants = {\r\n initial: { gap: 0, paddingLeft: \".5rem\", paddingRight: \".5rem\" },\r\n animate: (isSelected: boolean) => ({\r\n gap: isSelected ? \".5rem\" : 0,\r\n paddingLeft: isSelected ? \"1rem\" : \".5rem\",\r\n paddingRight: isSelected ? \"1rem\" : \".5rem\",\r\n }),\r\n};\r\n\r\nconst spanVariants = {\r\n initial: { width: 0, opacity: 0 },\r\n animate: { width: \"auto\", opacity: 1 },\r\n exit: { width: 0, opacity: 0 },\r\n};\r\n\r\nconst transition = { type: \"spring\", bounce: 0, duration: 0.4 };\r\n\r\nexport function Toolbar({ className, items, defaultSelected, onItemClick }: ToolbarProps) {\r\n const [selected, setSelected] = useState<string | null>(defaultSelected || null);\r\n\r\n const handleItemClick = (itemId: string) => {\r\n setSelected(selected === itemId ? null : itemId);\r\n onItemClick?.(itemId);\r\n };\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"flex items-center gap-3 p-2 relative\",\r\n \"bg-background border rounded-xl transition-all duration-200\",\r\n className\r\n )}\r\n >\r\n <div className=\"flex items-center gap-2\">\r\n {items.map((item) => (\r\n <motion.button\r\n key={item.id}\r\n variants={buttonVariants}\r\n initial={false}\r\n animate=\"animate\"\r\n custom={selected === item.id}\r\n onClick={() => handleItemClick(item.id)}\r\n transition={transition}\r\n className={cn(\r\n \"relative flex items-center rounded-none px-3 py-2\",\r\n \"text-sm font-medium transition-colors duration-300\",\r\n selected === item.id\r\n ? \"bg-[#1F9CFE] text-white rounded-lg\"\r\n : \"text-muted-foreground hover:bg-muted hover:text-foreground\"\r\n )}\r\n >\r\n {item.icon}\r\n <AnimatePresence initial={false}>\r\n {selected === item.id && (\r\n <motion.span\r\n variants={spanVariants}\r\n initial=\"initial\"\r\n animate=\"animate\"\r\n exit=\"exit\"\r\n transition={transition}\r\n className=\"overflow-hidden\"\r\n >\r\n {item.title}\r\n </motion.span>\r\n )}\r\n </AnimatePresence>\r\n </motion.button>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Toolbar;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function o(...i){return tailwindMerge.twMerge(clsx.clsx(i))}function x({children:i,content:l,position:t="top",className:r}){let[s,a]=react.useState(false),m={top:"bottom-full left-1/2 -translate-x-1/2 mb-2",bottom:"top-full left-1/2 -translate-x-1/2 mt-2",left:"right-full top-1/2 -translate-y-1/2 mr-2",right:"left-full top-1/2 -translate-y-1/2 ml-2"},e={top:{initial:{opacity:0,y:5},animate:{opacity:1,y:0}},bottom:{initial:{opacity:0,y:-5},animate:{opacity:1,y:0}},left:{initial:{opacity:0,x:5},animate:{opacity:1,x:0}},right:{initial:{opacity:0,x:-5},animate:{opacity:1,x:0}}};return jsxRuntime.jsxs("div",{className:"relative inline-block",onMouseEnter:()=>a(true),onMouseLeave:()=>a(false),children:[i,jsxRuntime.jsx(framerMotion.AnimatePresence,{children:s&&jsxRuntime.jsx(framerMotion.motion.div,{className:o("absolute z-50 px-2 py-1 text-sm text-white bg-zinc-900 dark:bg-zinc-100 dark:text-zinc-900 rounded whitespace-nowrap",m[t],r),initial:e[t].initial,animate:e[t].animate,exit:e[t].initial,transition:{duration:.15},children:l})})]})}var N=x;exports.Tooltip=x;exports.default=N;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/tooltip/index.tsx"],"names":["cn","inputs","twMerge","clsx","Tooltip","children","content","position","className","isVisible","setIsVisible","useState","positions","animations","jsxs","jsx","AnimatePresence","motion","tooltip_default"],"mappings":"4OAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,UAAKF,CAAM,CAAC,CAC7B,CCQO,SAASG,EAAQ,CACtB,QAAA,CAAAC,EACA,OAAA,CAAAC,CAAAA,CACA,SAAAC,CAAAA,CAAW,KAAA,CACX,SAAA,CAAAC,CACF,CAAA,CAAiB,CACf,GAAM,CAACC,CAAAA,CAAWC,CAAY,CAAA,CAAIC,cAAAA,CAAS,KAAK,CAAA,CAE1CC,CAAAA,CAAY,CAChB,GAAA,CAAK,4CAAA,CACL,OAAQ,yCAAA,CACR,IAAA,CAAM,2CACN,KAAA,CAAO,yCACT,EAEMC,CAAAA,CAAa,CACjB,GAAA,CAAK,CAAE,OAAA,CAAS,CAAE,QAAS,CAAA,CAAG,CAAA,CAAG,CAAE,CAAA,CAAG,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,CAAE,CAAE,CAAA,CACpE,OAAQ,CAAE,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,EAAG,EAAG,CAAA,CAAG,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,EAAG,CAAE,CAAE,EACxE,IAAA,CAAM,CAAE,QAAS,CAAE,OAAA,CAAS,EAAG,CAAA,CAAG,CAAE,EAAG,OAAA,CAAS,CAAE,QAAS,CAAA,CAAG,CAAA,CAAG,CAAE,CAAE,CAAA,CACrE,KAAA,CAAO,CAAE,OAAA,CAAS,CAAE,QAAS,CAAA,CAAG,CAAA,CAAG,EAAG,CAAA,CAAG,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,CAAE,CAAE,CACzE,EAEA,OACEC,eAAAA,CAAC,OACC,SAAA,CAAU,uBAAA,CACV,aAAc,IAAMJ,CAAAA,CAAa,IAAI,CAAA,CACrC,YAAA,CAAc,IAAMA,EAAa,KAAK,CAAA,CAErC,UAAAL,CAAAA,CACDU,cAAAA,CAACC,6BAAA,CACE,QAAA,CAAAP,GACCM,cAAAA,CAACE,mBAAAA,CAAO,IAAP,CACC,SAAA,CAAWjB,EACT,sHAAA,CACAY,CAAAA,CAAUL,CAAQ,CAAA,CAClBC,CACF,CAAA,CACA,OAAA,CAASK,CAAAA,CAAWN,CAAQ,EAAE,OAAA,CAC9B,OAAA,CAASM,EAAWN,CAAQ,CAAA,CAAE,QAC9B,IAAA,CAAMM,CAAAA,CAAWN,CAAQ,CAAA,CAAE,OAAA,CAC3B,UAAA,CAAY,CAAE,QAAA,CAAU,GAAK,EAE5B,QAAA,CAAAD,CAAAA,CACH,EAEJ,CAAA,CAAA,CACF,CAEJ,CAEA,IAAOY,CAAAA,CAAQd","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { motion, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface TooltipProps {\r\n children: React.ReactNode;\r\n content: string;\r\n position?: \"top\" | \"bottom\" | \"left\" | \"right\";\r\n className?: string;\r\n}\r\n\r\nexport function Tooltip({ \r\n children, \r\n content, \r\n position = \"top\",\r\n className \r\n}: TooltipProps) {\r\n const [isVisible, setIsVisible] = useState(false);\r\n\r\n const positions = {\r\n top: \"bottom-full left-1/2 -translate-x-1/2 mb-2\",\r\n bottom: \"top-full left-1/2 -translate-x-1/2 mt-2\",\r\n left: \"right-full top-1/2 -translate-y-1/2 mr-2\",\r\n right: \"left-full top-1/2 -translate-y-1/2 ml-2\",\r\n };\r\n\r\n const animations = {\r\n top: { initial: { opacity: 0, y: 5 }, animate: { opacity: 1, y: 0 } },\r\n bottom: { initial: { opacity: 0, y: -5 }, animate: { opacity: 1, y: 0 } },\r\n left: { initial: { opacity: 0, x: 5 }, animate: { opacity: 1, x: 0 } },\r\n right: { initial: { opacity: 0, x: -5 }, animate: { opacity: 1, x: 0 } },\r\n };\r\n\r\n return (\r\n <div\r\n className=\"relative inline-block\"\r\n onMouseEnter={() => setIsVisible(true)}\r\n onMouseLeave={() => setIsVisible(false)}\r\n >\r\n {children}\r\n <AnimatePresence>\r\n {isVisible && (\r\n <motion.div\r\n className={cn(\r\n \"absolute z-50 px-2 py-1 text-sm text-white bg-zinc-900 dark:bg-zinc-100 dark:text-zinc-900 rounded whitespace-nowrap\",\r\n positions[position],\r\n className\r\n )}\r\n initial={animations[position].initial}\r\n animate={animations[position].animate}\r\n exit={animations[position].initial}\r\n transition={{ duration: 0.15 }}\r\n >\r\n {content}\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Tooltip;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useState}from'react';import {AnimatePresence,motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function o(...i){return twMerge(clsx(i))}function x({children:i,content:l,position:t="top",className:r}){let[s,a]=useState(false),m={top:"bottom-full left-1/2 -translate-x-1/2 mb-2",bottom:"top-full left-1/2 -translate-x-1/2 mt-2",left:"right-full top-1/2 -translate-y-1/2 mr-2",right:"left-full top-1/2 -translate-y-1/2 ml-2"},e={top:{initial:{opacity:0,y:5},animate:{opacity:1,y:0}},bottom:{initial:{opacity:0,y:-5},animate:{opacity:1,y:0}},left:{initial:{opacity:0,x:5},animate:{opacity:1,x:0}},right:{initial:{opacity:0,x:-5},animate:{opacity:1,x:0}}};return jsxs("div",{className:"relative inline-block",onMouseEnter:()=>a(true),onMouseLeave:()=>a(false),children:[i,jsx(AnimatePresence,{children:s&&jsx(motion.div,{className:o("absolute z-50 px-2 py-1 text-sm text-white bg-zinc-900 dark:bg-zinc-100 dark:text-zinc-900 rounded whitespace-nowrap",m[t],r),initial:e[t].initial,animate:e[t].animate,exit:e[t].initial,transition:{duration:.15},children:l})})]})}var N=x;export{x as Tooltip,N as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/tooltip/index.tsx"],"names":["cn","inputs","twMerge","clsx","Tooltip","children","content","position","className","isVisible","setIsVisible","useState","positions","animations","jsxs","jsx","AnimatePresence","motion","tooltip_default"],"mappings":"sLAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,KAAKF,CAAM,CAAC,CAC7B,CCQO,SAASG,EAAQ,CACtB,QAAA,CAAAC,EACA,OAAA,CAAAC,CAAAA,CACA,SAAAC,CAAAA,CAAW,KAAA,CACX,SAAA,CAAAC,CACF,CAAA,CAAiB,CACf,GAAM,CAACC,CAAAA,CAAWC,CAAY,CAAA,CAAIC,QAAAA,CAAS,KAAK,CAAA,CAE1CC,CAAAA,CAAY,CAChB,GAAA,CAAK,4CAAA,CACL,OAAQ,yCAAA,CACR,IAAA,CAAM,2CACN,KAAA,CAAO,yCACT,EAEMC,CAAAA,CAAa,CACjB,GAAA,CAAK,CAAE,OAAA,CAAS,CAAE,QAAS,CAAA,CAAG,CAAA,CAAG,CAAE,CAAA,CAAG,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,CAAE,CAAE,CAAA,CACpE,OAAQ,CAAE,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,EAAG,EAAG,CAAA,CAAG,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,EAAG,CAAE,CAAE,EACxE,IAAA,CAAM,CAAE,QAAS,CAAE,OAAA,CAAS,EAAG,CAAA,CAAG,CAAE,EAAG,OAAA,CAAS,CAAE,QAAS,CAAA,CAAG,CAAA,CAAG,CAAE,CAAE,CAAA,CACrE,KAAA,CAAO,CAAE,OAAA,CAAS,CAAE,QAAS,CAAA,CAAG,CAAA,CAAG,EAAG,CAAA,CAAG,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,CAAE,CAAE,CACzE,EAEA,OACEC,IAAAA,CAAC,OACC,SAAA,CAAU,uBAAA,CACV,aAAc,IAAMJ,CAAAA,CAAa,IAAI,CAAA,CACrC,YAAA,CAAc,IAAMA,EAAa,KAAK,CAAA,CAErC,UAAAL,CAAAA,CACDU,GAAAA,CAACC,gBAAA,CACE,QAAA,CAAAP,GACCM,GAAAA,CAACE,MAAAA,CAAO,IAAP,CACC,SAAA,CAAWjB,EACT,sHAAA,CACAY,CAAAA,CAAUL,CAAQ,CAAA,CAClBC,CACF,CAAA,CACA,OAAA,CAASK,CAAAA,CAAWN,CAAQ,EAAE,OAAA,CAC9B,OAAA,CAASM,EAAWN,CAAQ,CAAA,CAAE,QAC9B,IAAA,CAAMM,CAAAA,CAAWN,CAAQ,CAAA,CAAE,OAAA,CAC3B,UAAA,CAAY,CAAE,QAAA,CAAU,GAAK,EAE5B,QAAA,CAAAD,CAAAA,CACH,EAEJ,CAAA,CAAA,CACF,CAEJ,CAEA,IAAOY,CAAAA,CAAQd","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { motion, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface TooltipProps {\r\n children: React.ReactNode;\r\n content: string;\r\n position?: \"top\" | \"bottom\" | \"left\" | \"right\";\r\n className?: string;\r\n}\r\n\r\nexport function Tooltip({ \r\n children, \r\n content, \r\n position = \"top\",\r\n className \r\n}: TooltipProps) {\r\n const [isVisible, setIsVisible] = useState(false);\r\n\r\n const positions = {\r\n top: \"bottom-full left-1/2 -translate-x-1/2 mb-2\",\r\n bottom: \"top-full left-1/2 -translate-x-1/2 mt-2\",\r\n left: \"right-full top-1/2 -translate-y-1/2 mr-2\",\r\n right: \"left-full top-1/2 -translate-y-1/2 ml-2\",\r\n };\r\n\r\n const animations = {\r\n top: { initial: { opacity: 0, y: 5 }, animate: { opacity: 1, y: 0 } },\r\n bottom: { initial: { opacity: 0, y: -5 }, animate: { opacity: 1, y: 0 } },\r\n left: { initial: { opacity: 0, x: 5 }, animate: { opacity: 1, x: 0 } },\r\n right: { initial: { opacity: 0, x: -5 }, animate: { opacity: 1, x: 0 } },\r\n };\r\n\r\n return (\r\n <div\r\n className=\"relative inline-block\"\r\n onMouseEnter={() => setIsVisible(true)}\r\n onMouseLeave={() => setIsVisible(false)}\r\n >\r\n {children}\r\n <AnimatePresence>\r\n {isVisible && (\r\n <motion.div\r\n className={cn(\r\n \"absolute z-50 px-2 py-1 text-sm text-white bg-zinc-900 dark:bg-zinc-100 dark:text-zinc-900 rounded whitespace-nowrap\",\r\n positions[position],\r\n className\r\n )}\r\n initial={animations[position].initial}\r\n animate={animations[position].animate}\r\n exit={animations[position].initial}\r\n transition={{ duration: 0.15 }}\r\n >\r\n {content}\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Tooltip;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function i(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function N({content:e,children:r,position:t="top",delay:c=200,animation:p="slide",className:m}){let[f,s]=react.useState(false),o=react.useRef(void 0),d=()=>{o.current=setTimeout(()=>s(true),c);},u=()=>{o.current&&clearTimeout(o.current),s(false);},y=()=>({top:"bottom-full left-1/2 -translate-x-1/2 mb-3",bottom:"top-full left-1/2 -translate-x-1/2 mt-3",left:"right-full top-1/2 -translate-y-1/2 mr-3",right:"left-full top-1/2 -translate-y-1/2 ml-3"})[t],b=()=>{let g={top:{y:10},bottom:{y:-10},left:{x:10},right:{x:-10}},{x:a=0,y:n=0}=g[t];return {...{fade:{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0}},scale:{initial:{opacity:0,scale:.8},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.8}},bounce:{initial:{opacity:0,scale:.3,y:t==="top"?10:-10},animate:{opacity:1,scale:1,y:0},exit:{opacity:0,scale:.3,y:t==="top"?10:-10}},slide:{initial:{opacity:0,x:a,y:n},animate:{opacity:1,x:0,y:0},exit:{opacity:0,x:a,y:n}}}[p],transition:{type:"spring",stiffness:300,damping:25}}};return jsxRuntime.jsxs("div",{className:i("relative inline-block",m),onMouseEnter:d,onMouseLeave:u,children:[r,jsxRuntime.jsx(framerMotion.AnimatePresence,{children:f&&jsxRuntime.jsx(framerMotion.motion.div,{...b(),className:i("absolute z-50 px-4 py-2 text-sm bg-popover border border-border rounded-xl shadow-lg whitespace-nowrap backdrop-blur-sm",y()),children:e})})]})}var E=N;exports.TooltipAnimated=N;exports.default=E;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/tooltip-animated/index.tsx"],"names":["cn","inputs","twMerge","clsx","TooltipAnimated","content","children","position","delay","animation","className","isVisible","setIsVisible","useState","timeoutRef","useRef","showTooltip","hideTooltip","getPositionClasses","getAnimationProps","offsets","x","y","jsxs","jsx","AnimatePresence","motion","tooltip_animated_default"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState, useRef } from \"react\";\r\nimport { motion, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface TooltipAnimatedProps {\r\n content: string;\r\n children: React.ReactNode;\r\n position?: \"top\" | \"bottom\" | \"left\" | \"right\";\r\n delay?: number;\r\n animation?: \"fade\" | \"slide\" | \"bounce\" | \"scale\";\r\n className?: string;\r\n}\r\n\r\nexport function TooltipAnimated({\r\n content,\r\n children,\r\n position = \"top\",\r\n delay = 200,\r\n animation = \"slide\",\r\n className,\r\n}: TooltipAnimatedProps) {\r\n const [isVisible, setIsVisible] = useState(false);\r\n const timeoutRef = useRef<NodeJS.Timeout>(undefined);\r\n\r\n const showTooltip = () => {\r\n timeoutRef.current = setTimeout(() => setIsVisible(true), delay);\r\n };\r\n\r\n const hideTooltip = () => {\r\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\r\n setIsVisible(false);\r\n };\r\n\r\n const getPositionClasses = () => {\r\n const positions = {\r\n top: \"bottom-full left-1/2 -translate-x-1/2 mb-3\",\r\n bottom: \"top-full left-1/2 -translate-x-1/2 mt-3\",\r\n left: \"right-full top-1/2 -translate-y-1/2 mr-3\",\r\n right: \"left-full top-1/2 -translate-y-1/2 ml-3\",\r\n };\r\n return positions[position];\r\n };\r\n\r\n const getAnimationProps = () => {\r\n const slideOffset = 10;\r\n const offsets = { top: { y: slideOffset }, bottom: { y: -slideOffset }, left: { x: slideOffset }, right: { x: -slideOffset } };\r\n const { x = 0, y = 0 } = offsets[position];\r\n\r\n const animations = {\r\n fade: { initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 } },\r\n scale: { initial: { opacity: 0, scale: 0.8 }, animate: { opacity: 1, scale: 1 }, exit: { opacity: 0, scale: 0.8 } },\r\n bounce: { initial: { opacity: 0, scale: 0.3, y: position === \"top\" ? 10 : -10 }, animate: { opacity: 1, scale: 1, y: 0 }, exit: { opacity: 0, scale: 0.3, y: position === \"top\" ? 10 : -10 } },\r\n slide: { initial: { opacity: 0, x, y }, animate: { opacity: 1, x: 0, y: 0 }, exit: { opacity: 0, x, y } },\r\n };\r\n return { ...animations[animation], transition: { type: \"spring\", stiffness: 300, damping: 25 } };\r\n };\r\n\r\n return (\r\n <div className={cn(\"relative inline-block\", className)} onMouseEnter={showTooltip} onMouseLeave={hideTooltip}>\r\n {children}\r\n <AnimatePresence>\r\n {isVisible && (\r\n <motion.div {...getAnimationProps()} className={cn(\"absolute z-50 px-4 py-2 text-sm bg-popover border border-border rounded-xl shadow-lg whitespace-nowrap backdrop-blur-sm\", getPositionClasses())}>\r\n {content}\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </div>\r\n );\r\n}\r\n\r\nexport default TooltipAnimated;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useState,useRef}from'react';import {AnimatePresence,motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function i(...e){return twMerge(clsx(e))}function N({content:e,children:r,position:t="top",delay:c=200,animation:p="slide",className:m}){let[f,s]=useState(false),o=useRef(void 0),d=()=>{o.current=setTimeout(()=>s(true),c);},u=()=>{o.current&&clearTimeout(o.current),s(false);},y=()=>({top:"bottom-full left-1/2 -translate-x-1/2 mb-3",bottom:"top-full left-1/2 -translate-x-1/2 mt-3",left:"right-full top-1/2 -translate-y-1/2 mr-3",right:"left-full top-1/2 -translate-y-1/2 ml-3"})[t],b=()=>{let g={top:{y:10},bottom:{y:-10},left:{x:10},right:{x:-10}},{x:a=0,y:n=0}=g[t];return {...{fade:{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0}},scale:{initial:{opacity:0,scale:.8},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.8}},bounce:{initial:{opacity:0,scale:.3,y:t==="top"?10:-10},animate:{opacity:1,scale:1,y:0},exit:{opacity:0,scale:.3,y:t==="top"?10:-10}},slide:{initial:{opacity:0,x:a,y:n},animate:{opacity:1,x:0,y:0},exit:{opacity:0,x:a,y:n}}}[p],transition:{type:"spring",stiffness:300,damping:25}}};return jsxs("div",{className:i("relative inline-block",m),onMouseEnter:d,onMouseLeave:u,children:[r,jsx(AnimatePresence,{children:f&&jsx(motion.div,{...b(),className:i("absolute z-50 px-4 py-2 text-sm bg-popover border border-border rounded-xl shadow-lg whitespace-nowrap backdrop-blur-sm",y()),children:e})})]})}var E=N;export{N as TooltipAnimated,E as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map