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 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/modal/index.tsx"],"names":["cn","inputs","twMerge","clsx","Modal","isOpen","onClose","children","className","title","useEffect","handleEscape","e","jsx","AnimatePresence","jsxs","Fragment","motion","modal_default"],"mappings":"gMAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCSO,SAASG,CAAAA,CAAM,CAAE,MAAA,CAAAC,CAAAA,CAAQ,OAAA,CAAAC,EAAS,QAAA,CAAAC,CAAAA,CAAU,SAAA,CAAAC,CAAAA,CAAW,KAAA,CAAAC,CAAM,CAAA,CAAe,CACjF,OAAAC,SAAAA,CAAU,IAAM,CACd,IAAMC,CAAAA,CAAgBC,GAAqB,CACrCA,CAAAA,CAAE,GAAA,GAAQ,QAAA,EAAUN,CAAAA,GAC1B,EACA,OAAID,CAAAA,GACF,QAAA,CAAS,gBAAA,CAAiB,SAAA,CAAWM,CAAY,EACjD,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAW,QAAA,CAAA,CAE1B,IAAM,CACX,QAAA,CAAS,mBAAA,CAAoB,SAAA,CAAWA,CAAY,CAAA,CACpD,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,CAAW,QACjC,CACF,CAAA,CAAG,CAACN,CAAAA,CAAQC,CAAO,CAAC,CAAA,CAGlBO,GAAAA,CAACC,eAAAA,CAAA,CACE,QAAA,CAAAT,GACCU,IAAAA,CAAAC,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAH,GAAAA,CAACI,MAAAA,CAAO,GAAA,CAAP,CACC,OAAA,CAAS,CAAE,OAAA,CAAS,CAAE,CAAA,CACtB,OAAA,CAAS,CAAE,OAAA,CAAS,CAAE,CAAA,CACtB,IAAA,CAAM,CAAE,OAAA,CAAS,CAAE,CAAA,CACnB,OAAA,CAASX,CAAAA,CACT,SAAA,CAAU,gCAAA,CACZ,CAAA,CACAS,KAACE,MAAAA,CAAO,GAAA,CAAP,CACC,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,KAAA,CAAO,GAAA,CAAM,CAAA,CAAG,EAAG,CAAA,CAC1C,OAAA,CAAS,CAAE,QAAS,CAAA,CAAG,KAAA,CAAO,CAAA,CAAG,CAAA,CAAG,CAAE,CAAA,CACtC,KAAM,CAAE,OAAA,CAAS,CAAA,CAAG,KAAA,CAAO,GAAA,CAAM,CAAA,CAAG,EAAG,CAAA,CACvC,UAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,OAAA,CAAS,EAAA,CAAI,SAAA,CAAW,GAAI,CAAA,CAC1D,SAAA,CAAWjB,CAAAA,CACT,+DAAA,CACA,gCAAA,CACA,4BACA,WAAA,CACAQ,CACF,CAAA,CAEC,QAAA,CAAA,CAAAC,CAAAA,EACCM,IAAAA,CAAC,OAAI,SAAA,CAAU,wCAAA,CACb,QAAA,CAAA,CAAAF,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,wBAAyB,QAAA,CAAAJ,CAAAA,CAAM,CAAA,CAC7CI,GAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAASP,CAAAA,CACT,SAAA,CAAU,2EAAA,CAEV,QAAA,CAAAO,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CAAU,KAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACjE,QAAA,CAAAA,IAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,EAAG,CAAA,CAAE,sBAAA,CAAuB,CAAA,CAC9F,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAEDN,CAAAA,CAAAA,CACH,CAAA,CAAA,CACF,CAAA,CAEJ,CAEJ,CAEA,IAAOW,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 { useEffect } from \"react\";\r\nimport { motion, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface ModalProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n children: React.ReactNode;\r\n className?: string;\r\n title?: string;\r\n}\r\n\r\nexport function Modal({ isOpen, onClose, children, className, title }: ModalProps) {\r\n useEffect(() => {\r\n const handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") onClose();\r\n };\r\n if (isOpen) {\r\n document.addEventListener(\"keydown\", handleEscape);\r\n document.body.style.overflow = \"hidden\";\r\n }\r\n return () => {\r\n document.removeEventListener(\"keydown\", handleEscape);\r\n document.body.style.overflow = \"unset\";\r\n };\r\n }, [isOpen, onClose]);\r\n\r\n return (\r\n <AnimatePresence>\r\n {isOpen && (\r\n <>\r\n <motion.div\r\n initial={{ opacity: 0 }}\r\n animate={{ opacity: 1 }}\r\n exit={{ opacity: 0 }}\r\n onClick={onClose}\r\n className=\"fixed inset-0 bg-black/50 z-50\"\r\n />\r\n <motion.div\r\n initial={{ opacity: 0, scale: 0.95, y: 20 }}\r\n animate={{ opacity: 1, scale: 1, y: 0 }}\r\n exit={{ opacity: 0, scale: 0.95, y: 20 }}\r\n transition={{ type: \"spring\", damping: 25, stiffness: 300 }}\r\n className={cn(\r\n \"fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 z-50\",\r\n \"w-full max-w-md p-6 rounded-xl\",\r\n \"bg-white dark:bg-zinc-900\",\r\n \"shadow-xl\",\r\n className\r\n )}\r\n >\r\n {title && (\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <h2 className=\"text-lg font-semibold\">{title}</h2>\r\n <button\r\n onClick={onClose}\r\n className=\"p-1 rounded-lg hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors\"\r\n >\r\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n )}\r\n {children}\r\n </motion.div>\r\n </>\r\n )}\r\n </AnimatePresence>\r\n );\r\n}\r\n\r\nexport default Modal;\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 r(...t){return tailwindMerge.twMerge(clsx.clsx(t))}function m({text:t,className:n}){let s=Array.from(t);return jsxRuntime.jsx("div",{className:r("flex",n),children:s.map((e,a)=>jsxRuntime.jsx(framerMotion.motion.span,{className:"inline-block",style:{whiteSpace:e===" "?"pre":"normal"},animate:{scaleY:[1,.5,1.5,.8,1],scaleX:[1,1.5,.5,1.2,1]},transition:{duration:1.5,repeat:1/0,delay:a*.08,ease:"easeInOut",repeatDelay:.3},children:e===" "?"\xA0":e},`${e}-${a}`))})}var d=m;exports.MorphText=m;exports.default=d;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/morph-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","MorphText","text","className","letters","jsx","letter","index","motion","morph_text_default"],"mappings":"qNAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,CAAAA,CAAU,CAAE,KAAAC,CAAAA,CAAM,SAAA,CAAAC,CAAU,CAAA,CAAmB,CAC7D,IAAMC,CAAAA,CAAU,KAAA,CAAM,IAAA,CAAKF,CAAI,CAAA,CAE/B,OACEG,cAAAA,CAAC,KAAA,CAAA,CAAI,UAAWR,CAAAA,CAAG,MAAA,CAAQM,CAAS,CAAA,CACjC,QAAA,CAAAC,CAAAA,CAAQ,GAAA,CAAI,CAACE,CAAAA,CAAQC,CAAAA,GACpBF,cAAAA,CAACG,mBAAAA,CAAO,IAAA,CAAP,CAEC,UAAU,cAAA,CACV,KAAA,CAAO,CAAE,UAAA,CAAYF,CAAAA,GAAW,GAAA,CAAM,KAAA,CAAQ,QAAS,CAAA,CACvD,OAAA,CAAS,CACP,MAAA,CAAQ,CAAC,CAAA,CAAG,GAAK,GAAA,CAAK,EAAA,CAAK,CAAC,CAAA,CAC5B,MAAA,CAAQ,CAAC,CAAA,CAAG,GAAA,CAAK,EAAA,CAAK,GAAA,CAAK,CAAC,CAC9B,CAAA,CACA,UAAA,CAAY,CACV,QAAA,CAAU,GAAA,CACV,MAAA,CAAQ,CAAA,CAAA,CAAA,CACR,KAAA,CAAOC,CAAAA,CAAQ,GAAA,CACf,IAAA,CAAM,WAAA,CACN,WAAA,CAAa,EACf,CAAA,CAEC,QAAA,CAAAD,CAAAA,GAAW,IAAM,MAAA,CAAWA,CAAAA,CAAAA,CAfxB,CAAA,EAAGA,CAAM,CAAA,CAAA,EAAIC,CAAK,CAAA,CAgBzB,CACD,CAAA,CACH,CAEJ,CAEA,IAAOE,CAAAA,CAAQR","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 MorphTextProps {\r\n text: string;\r\n className?: string;\r\n}\r\n\r\nexport function MorphText({ text, className }: MorphTextProps) {\r\n const letters = Array.from(text);\r\n\r\n return (\r\n <div className={cn(\"flex\", className)}>\r\n {letters.map((letter, index) => (\r\n <motion.span\r\n key={`${letter}-${index}`}\r\n className=\"inline-block\"\r\n style={{ whiteSpace: letter === \" \" ? \"pre\" : \"normal\" }}\r\n animate={{\r\n scaleY: [1, 0.5, 1.5, 0.8, 1],\r\n scaleX: [1, 1.5, 0.5, 1.2, 1],\r\n }}\r\n transition={{\r\n duration: 1.5,\r\n repeat: Infinity,\r\n delay: index * 0.08,\r\n ease: \"easeInOut\",\r\n repeatDelay: 0.3,\r\n }}\r\n >\r\n {letter === \" \" ? \"\\u00A0\" : letter}\r\n </motion.span>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default MorphText;\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 r(...t){return twMerge(clsx(t))}function m({text:t,className:n}){let s=Array.from(t);return jsx("div",{className:r("flex",n),children:s.map((e,a)=>jsx(motion.span,{className:"inline-block",style:{whiteSpace:e===" "?"pre":"normal"},animate:{scaleY:[1,.5,1.5,.8,1],scaleX:[1,1.5,.5,1.2,1]},transition:{duration:1.5,repeat:1/0,delay:a*.08,ease:"easeInOut",repeatDelay:.3},children:e===" "?"\xA0":e},`${e}-${a}`))})}var d=m;export{m as MorphText,d as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/morph-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","MorphText","text","className","letters","jsx","letter","index","motion","morph_text_default"],"mappings":"oIAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,CAAAA,CAAU,CAAE,KAAAC,CAAAA,CAAM,SAAA,CAAAC,CAAU,CAAA,CAAmB,CAC7D,IAAMC,CAAAA,CAAU,KAAA,CAAM,IAAA,CAAKF,CAAI,CAAA,CAE/B,OACEG,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAWR,CAAAA,CAAG,MAAA,CAAQM,CAAS,CAAA,CACjC,QAAA,CAAAC,CAAAA,CAAQ,GAAA,CAAI,CAACE,CAAAA,CAAQC,CAAAA,GACpBF,GAAAA,CAACG,MAAAA,CAAO,IAAA,CAAP,CAEC,UAAU,cAAA,CACV,KAAA,CAAO,CAAE,UAAA,CAAYF,CAAAA,GAAW,GAAA,CAAM,KAAA,CAAQ,QAAS,CAAA,CACvD,OAAA,CAAS,CACP,MAAA,CAAQ,CAAC,CAAA,CAAG,GAAK,GAAA,CAAK,EAAA,CAAK,CAAC,CAAA,CAC5B,MAAA,CAAQ,CAAC,CAAA,CAAG,GAAA,CAAK,EAAA,CAAK,GAAA,CAAK,CAAC,CAC9B,CAAA,CACA,UAAA,CAAY,CACV,QAAA,CAAU,GAAA,CACV,MAAA,CAAQ,CAAA,CAAA,CAAA,CACR,KAAA,CAAOC,CAAAA,CAAQ,GAAA,CACf,IAAA,CAAM,WAAA,CACN,WAAA,CAAa,EACf,CAAA,CAEC,QAAA,CAAAD,CAAAA,GAAW,IAAM,MAAA,CAAWA,CAAAA,CAAAA,CAfxB,CAAA,EAAGA,CAAM,CAAA,CAAA,EAAIC,CAAK,CAAA,CAgBzB,CACD,CAAA,CACH,CAEJ,CAEA,IAAOE,CAAAA,CAAQR","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 MorphTextProps {\r\n text: string;\r\n className?: string;\r\n}\r\n\r\nexport function MorphText({ text, className }: MorphTextProps) {\r\n const letters = Array.from(text);\r\n\r\n return (\r\n <div className={cn(\"flex\", className)}>\r\n {letters.map((letter, index) => (\r\n <motion.span\r\n key={`${letter}-${index}`}\r\n className=\"inline-block\"\r\n style={{ whiteSpace: letter === \" \" ? \"pre\" : \"normal\" }}\r\n animate={{\r\n scaleY: [1, 0.5, 1.5, 0.8, 1],\r\n scaleX: [1, 1.5, 0.5, 1.2, 1],\r\n }}\r\n transition={{\r\n duration: 1.5,\r\n repeat: Infinity,\r\n delay: index * 0.08,\r\n ease: \"easeInOut\",\r\n repeatDelay: 0.3,\r\n }}\r\n >\r\n {letter === \" \" ? \"\\u00A0\" : letter}\r\n </motion.span>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default MorphText;\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(...o){return tailwindMerge.twMerge(clsx.clsx(o))}var d={pink:{border:"border-pink-500",text:"text-pink-400",shadow:"shadow-pink-500/50",glow:"rgba(236, 72, 153, 0.6)",bg:"hover:bg-pink-500/10"},cyan:{border:"border-cyan-500",text:"text-cyan-400",shadow:"shadow-cyan-500/50",glow:"rgba(6, 182, 212, 0.6)",bg:"hover:bg-cyan-500/10"},green:{border:"border-green-500",text:"text-green-400",shadow:"shadow-green-500/50",glow:"rgba(34, 197, 94, 0.6)",bg:"hover:bg-green-500/10"},purple:{border:"border-purple-500",text:"text-purple-400",shadow:"shadow-purple-500/50",glow:"rgba(168, 85, 247, 0.6)",bg:"hover:bg-purple-500/10"},orange:{border:"border-orange-500",text:"text-orange-400",shadow:"shadow-orange-500/50",glow:"rgba(249, 115, 22, 0.6)",bg:"hover:bg-orange-500/10"}},b={sm:"h-8 px-3 text-xs",default:"h-10 px-6 text-sm",lg:"h-12 px-8 text-base"};function u({children:o,className:a,color:s="cyan",size:i="default",...l}){let e=d[s];return jsxRuntime.jsxs(framerMotion.motion.button,{className:t("relative inline-flex items-center justify-center","font-semibold tracking-wide uppercase","border-2 rounded-lg","bg-transparent","transition-colors duration-200",e.border,e.text,e.bg,b[i],a),whileHover:{boxShadow:`0 0 20px ${e.glow}, 0 0 40px ${e.glow}, 0 0 60px ${e.glow}`},whileTap:{scale:.98},transition:{duration:.2},...l,children:[jsxRuntime.jsx(framerMotion.motion.span,{className:t("absolute inset-0 rounded-lg opacity-0",e.border),animate:{opacity:[.5,1,.5]},transition:{duration:2,repeat:1/0,ease:"easeInOut"},style:{boxShadow:`inset 0 0 10px ${e.glow}`}}),jsxRuntime.jsx("span",{className:"relative z-10",children:o})]})}var y=u;exports.NeonButton=u;exports.default=y;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/neon-button/index.tsx"],"names":["cn","inputs","twMerge","clsx","colorVariants","sizeVariants","NeonButton","children","className","color","size","props","colors","jsxs","motion","jsx","neon_button_default"],"mappings":"qNAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKA,IAAMG,CAAAA,CAAgB,CACpB,IAAA,CAAM,CACJ,OAAQ,iBAAA,CACR,IAAA,CAAM,eAAA,CACN,MAAA,CAAQ,oBAAA,CACR,IAAA,CAAM,0BACN,EAAA,CAAI,sBACN,CAAA,CACA,IAAA,CAAM,CACJ,MAAA,CAAQ,iBAAA,CACR,IAAA,CAAM,eAAA,CACN,MAAA,CAAQ,oBAAA,CACR,IAAA,CAAM,wBAAA,CACN,EAAA,CAAI,sBACN,CAAA,CACA,KAAA,CAAO,CACL,MAAA,CAAQ,kBAAA,CACR,IAAA,CAAM,iBACN,MAAA,CAAQ,qBAAA,CACR,IAAA,CAAM,wBAAA,CACN,EAAA,CAAI,uBACN,EACA,MAAA,CAAQ,CACN,MAAA,CAAQ,mBAAA,CACR,IAAA,CAAM,iBAAA,CACN,OAAQ,sBAAA,CACR,IAAA,CAAM,yBAAA,CACN,EAAA,CAAI,wBACN,CAAA,CACA,OAAQ,CACN,MAAA,CAAQ,mBAAA,CACR,IAAA,CAAM,iBAAA,CACN,MAAA,CAAQ,uBACR,IAAA,CAAM,yBAAA,CACN,EAAA,CAAI,wBACN,CACF,CAAA,CAEMC,EAAe,CACnB,EAAA,CAAI,kBAAA,CACJ,OAAA,CAAS,mBAAA,CACT,EAAA,CAAI,qBACN,CAAA,CAEO,SAASC,CAAAA,CAAW,CACzB,QAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,EACA,KAAA,CAAAC,CAAAA,CAAQ,MAAA,CACR,IAAA,CAAAC,CAAAA,CAAO,SAAA,CACP,GAAGC,CACL,CAAA,CAAoB,CAClB,IAAMC,CAAAA,CAASR,CAAAA,CAAcK,CAAK,CAAA,CAElC,OACEI,eAAAA,CAACC,mBAAAA,CAAO,MAAA,CAAP,CACC,UAAWd,CAAAA,CACT,kDAAA,CACA,uCAAA,CACA,qBAAA,CACA,gBAAA,CACA,gCAAA,CACAY,EAAO,MAAA,CACPA,CAAAA,CAAO,IAAA,CACPA,CAAAA,CAAO,EAAA,CACPP,CAAAA,CAAaK,CAAI,CAAA,CACjBF,CACF,CAAA,CACA,UAAA,CAAY,CACV,SAAA,CAAW,YAAYI,CAAAA,CAAO,IAAI,CAAA,WAAA,EAAcA,CAAAA,CAAO,IAAI,CAAA,WAAA,EAAcA,CAAAA,CAAO,IAAI,CAAA,CACtF,CAAA,CACA,QAAA,CAAU,CAAE,KAAA,CAAO,GAAK,EACxB,UAAA,CAAY,CAAE,QAAA,CAAU,EAAI,CAAA,CAC3B,GAAGD,EAEJ,QAAA,CAAA,CAAAI,cAAAA,CAACD,mBAAAA,CAAO,IAAA,CAAP,CACC,SAAA,CAAWd,EAAG,uCAAA,CAAyCY,CAAAA,CAAO,MAAM,CAAA,CACpE,OAAA,CAAS,CAAE,OAAA,CAAS,CAAC,EAAA,CAAK,CAAA,CAAG,EAAG,CAAE,CAAA,CAClC,UAAA,CAAY,CAAE,QAAA,CAAU,CAAA,CAAG,MAAA,CAAQ,CAAA,CAAA,CAAA,CAAU,IAAA,CAAM,WAAY,EAC/D,KAAA,CAAO,CAAE,SAAA,CAAW,CAAA,eAAA,EAAkBA,CAAAA,CAAO,IAAI,EAAG,CAAA,CACtD,CAAA,CACAG,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,eAAA,CAAiB,QAAA,CAAAR,CAAAA,CAAS,CAAA,CAAA,CAC5C,CAEJ,CAEA,IAAOS,CAAAA,CAAQV","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 NeonButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n color?: \"pink\" | \"cyan\" | \"green\" | \"purple\" | \"orange\";\r\n size?: \"sm\" | \"default\" | \"lg\";\r\n}\r\n\r\nconst colorVariants = {\r\n pink: {\r\n border: \"border-pink-500\",\r\n text: \"text-pink-400\",\r\n shadow: \"shadow-pink-500/50\",\r\n glow: \"rgba(236, 72, 153, 0.6)\",\r\n bg: \"hover:bg-pink-500/10\",\r\n },\r\n cyan: {\r\n border: \"border-cyan-500\",\r\n text: \"text-cyan-400\",\r\n shadow: \"shadow-cyan-500/50\",\r\n glow: \"rgba(6, 182, 212, 0.6)\",\r\n bg: \"hover:bg-cyan-500/10\",\r\n },\r\n green: {\r\n border: \"border-green-500\",\r\n text: \"text-green-400\",\r\n shadow: \"shadow-green-500/50\",\r\n glow: \"rgba(34, 197, 94, 0.6)\",\r\n bg: \"hover:bg-green-500/10\",\r\n },\r\n purple: {\r\n border: \"border-purple-500\",\r\n text: \"text-purple-400\",\r\n shadow: \"shadow-purple-500/50\",\r\n glow: \"rgba(168, 85, 247, 0.6)\",\r\n bg: \"hover:bg-purple-500/10\",\r\n },\r\n orange: {\r\n border: \"border-orange-500\",\r\n text: \"text-orange-400\",\r\n shadow: \"shadow-orange-500/50\",\r\n glow: \"rgba(249, 115, 22, 0.6)\",\r\n bg: \"hover:bg-orange-500/10\",\r\n },\r\n};\r\n\r\nconst sizeVariants = {\r\n sm: \"h-8 px-3 text-xs\",\r\n default: \"h-10 px-6 text-sm\",\r\n lg: \"h-12 px-8 text-base\",\r\n};\r\n\r\nexport function NeonButton({\r\n children,\r\n className,\r\n color = \"cyan\",\r\n size = \"default\",\r\n ...props\r\n}: NeonButtonProps) {\r\n const colors = colorVariants[color];\r\n\r\n return (\r\n <motion.button\r\n className={cn(\r\n \"relative inline-flex items-center justify-center\",\r\n \"font-semibold tracking-wide uppercase\",\r\n \"border-2 rounded-lg\",\r\n \"bg-transparent\",\r\n \"transition-colors duration-200\",\r\n colors.border,\r\n colors.text,\r\n colors.bg,\r\n sizeVariants[size],\r\n className\r\n )}\r\n whileHover={{\r\n boxShadow: `0 0 20px ${colors.glow}, 0 0 40px ${colors.glow}, 0 0 60px ${colors.glow}`,\r\n }}\r\n whileTap={{ scale: 0.98 }}\r\n transition={{ duration: 0.2 }}\r\n {...props}\r\n >\r\n <motion.span\r\n className={cn(\"absolute inset-0 rounded-lg opacity-0\", colors.border)}\r\n animate={{ opacity: [0.5, 1, 0.5] }}\r\n transition={{ duration: 2, repeat: Infinity, ease: \"easeInOut\" }}\r\n style={{ boxShadow: `inset 0 0 10px ${colors.glow}` }}\r\n />\r\n <span className=\"relative z-10\">{children}</span>\r\n </motion.button>\r\n );\r\n}\r\n\r\nexport default NeonButton;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function t(...o){return twMerge(clsx(o))}var d={pink:{border:"border-pink-500",text:"text-pink-400",shadow:"shadow-pink-500/50",glow:"rgba(236, 72, 153, 0.6)",bg:"hover:bg-pink-500/10"},cyan:{border:"border-cyan-500",text:"text-cyan-400",shadow:"shadow-cyan-500/50",glow:"rgba(6, 182, 212, 0.6)",bg:"hover:bg-cyan-500/10"},green:{border:"border-green-500",text:"text-green-400",shadow:"shadow-green-500/50",glow:"rgba(34, 197, 94, 0.6)",bg:"hover:bg-green-500/10"},purple:{border:"border-purple-500",text:"text-purple-400",shadow:"shadow-purple-500/50",glow:"rgba(168, 85, 247, 0.6)",bg:"hover:bg-purple-500/10"},orange:{border:"border-orange-500",text:"text-orange-400",shadow:"shadow-orange-500/50",glow:"rgba(249, 115, 22, 0.6)",bg:"hover:bg-orange-500/10"}},b={sm:"h-8 px-3 text-xs",default:"h-10 px-6 text-sm",lg:"h-12 px-8 text-base"};function u({children:o,className:a,color:s="cyan",size:i="default",...l}){let e=d[s];return jsxs(motion.button,{className:t("relative inline-flex items-center justify-center","font-semibold tracking-wide uppercase","border-2 rounded-lg","bg-transparent","transition-colors duration-200",e.border,e.text,e.bg,b[i],a),whileHover:{boxShadow:`0 0 20px ${e.glow}, 0 0 40px ${e.glow}, 0 0 60px ${e.glow}`},whileTap:{scale:.98},transition:{duration:.2},...l,children:[jsx(motion.span,{className:t("absolute inset-0 rounded-lg opacity-0",e.border),animate:{opacity:[.5,1,.5]},transition:{duration:2,repeat:1/0,ease:"easeInOut"},style:{boxShadow:`inset 0 0 10px ${e.glow}`}}),jsx("span",{className:"relative z-10",children:o})]})}var y=u;export{u as NeonButton,y as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/neon-button/index.tsx"],"names":["cn","inputs","twMerge","clsx","colorVariants","sizeVariants","NeonButton","children","className","color","size","props","colors","jsxs","motion","jsx","neon_button_default"],"mappings":"yIAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKA,IAAMG,CAAAA,CAAgB,CACpB,IAAA,CAAM,CACJ,OAAQ,iBAAA,CACR,IAAA,CAAM,eAAA,CACN,MAAA,CAAQ,oBAAA,CACR,IAAA,CAAM,0BACN,EAAA,CAAI,sBACN,CAAA,CACA,IAAA,CAAM,CACJ,MAAA,CAAQ,iBAAA,CACR,IAAA,CAAM,eAAA,CACN,MAAA,CAAQ,oBAAA,CACR,IAAA,CAAM,wBAAA,CACN,EAAA,CAAI,sBACN,CAAA,CACA,KAAA,CAAO,CACL,MAAA,CAAQ,kBAAA,CACR,IAAA,CAAM,iBACN,MAAA,CAAQ,qBAAA,CACR,IAAA,CAAM,wBAAA,CACN,EAAA,CAAI,uBACN,EACA,MAAA,CAAQ,CACN,MAAA,CAAQ,mBAAA,CACR,IAAA,CAAM,iBAAA,CACN,OAAQ,sBAAA,CACR,IAAA,CAAM,yBAAA,CACN,EAAA,CAAI,wBACN,CAAA,CACA,OAAQ,CACN,MAAA,CAAQ,mBAAA,CACR,IAAA,CAAM,iBAAA,CACN,MAAA,CAAQ,uBACR,IAAA,CAAM,yBAAA,CACN,EAAA,CAAI,wBACN,CACF,CAAA,CAEMC,EAAe,CACnB,EAAA,CAAI,kBAAA,CACJ,OAAA,CAAS,mBAAA,CACT,EAAA,CAAI,qBACN,CAAA,CAEO,SAASC,CAAAA,CAAW,CACzB,QAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,EACA,KAAA,CAAAC,CAAAA,CAAQ,MAAA,CACR,IAAA,CAAAC,CAAAA,CAAO,SAAA,CACP,GAAGC,CACL,CAAA,CAAoB,CAClB,IAAMC,CAAAA,CAASR,CAAAA,CAAcK,CAAK,CAAA,CAElC,OACEI,IAAAA,CAACC,MAAAA,CAAO,MAAA,CAAP,CACC,UAAWd,CAAAA,CACT,kDAAA,CACA,uCAAA,CACA,qBAAA,CACA,gBAAA,CACA,gCAAA,CACAY,EAAO,MAAA,CACPA,CAAAA,CAAO,IAAA,CACPA,CAAAA,CAAO,EAAA,CACPP,CAAAA,CAAaK,CAAI,CAAA,CACjBF,CACF,CAAA,CACA,UAAA,CAAY,CACV,SAAA,CAAW,YAAYI,CAAAA,CAAO,IAAI,CAAA,WAAA,EAAcA,CAAAA,CAAO,IAAI,CAAA,WAAA,EAAcA,CAAAA,CAAO,IAAI,CAAA,CACtF,CAAA,CACA,QAAA,CAAU,CAAE,KAAA,CAAO,GAAK,EACxB,UAAA,CAAY,CAAE,QAAA,CAAU,EAAI,CAAA,CAC3B,GAAGD,EAEJ,QAAA,CAAA,CAAAI,GAAAA,CAACD,MAAAA,CAAO,IAAA,CAAP,CACC,SAAA,CAAWd,EAAG,uCAAA,CAAyCY,CAAAA,CAAO,MAAM,CAAA,CACpE,OAAA,CAAS,CAAE,OAAA,CAAS,CAAC,EAAA,CAAK,CAAA,CAAG,EAAG,CAAE,CAAA,CAClC,UAAA,CAAY,CAAE,QAAA,CAAU,CAAA,CAAG,MAAA,CAAQ,CAAA,CAAA,CAAA,CAAU,IAAA,CAAM,WAAY,EAC/D,KAAA,CAAO,CAAE,SAAA,CAAW,CAAA,eAAA,EAAkBA,CAAAA,CAAO,IAAI,EAAG,CAAA,CACtD,CAAA,CACAG,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,eAAA,CAAiB,QAAA,CAAAR,CAAAA,CAAS,CAAA,CAAA,CAC5C,CAEJ,CAEA,IAAOS,CAAAA,CAAQV","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 NeonButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n color?: \"pink\" | \"cyan\" | \"green\" | \"purple\" | \"orange\";\r\n size?: \"sm\" | \"default\" | \"lg\";\r\n}\r\n\r\nconst colorVariants = {\r\n pink: {\r\n border: \"border-pink-500\",\r\n text: \"text-pink-400\",\r\n shadow: \"shadow-pink-500/50\",\r\n glow: \"rgba(236, 72, 153, 0.6)\",\r\n bg: \"hover:bg-pink-500/10\",\r\n },\r\n cyan: {\r\n border: \"border-cyan-500\",\r\n text: \"text-cyan-400\",\r\n shadow: \"shadow-cyan-500/50\",\r\n glow: \"rgba(6, 182, 212, 0.6)\",\r\n bg: \"hover:bg-cyan-500/10\",\r\n },\r\n green: {\r\n border: \"border-green-500\",\r\n text: \"text-green-400\",\r\n shadow: \"shadow-green-500/50\",\r\n glow: \"rgba(34, 197, 94, 0.6)\",\r\n bg: \"hover:bg-green-500/10\",\r\n },\r\n purple: {\r\n border: \"border-purple-500\",\r\n text: \"text-purple-400\",\r\n shadow: \"shadow-purple-500/50\",\r\n glow: \"rgba(168, 85, 247, 0.6)\",\r\n bg: \"hover:bg-purple-500/10\",\r\n },\r\n orange: {\r\n border: \"border-orange-500\",\r\n text: \"text-orange-400\",\r\n shadow: \"shadow-orange-500/50\",\r\n glow: \"rgba(249, 115, 22, 0.6)\",\r\n bg: \"hover:bg-orange-500/10\",\r\n },\r\n};\r\n\r\nconst sizeVariants = {\r\n sm: \"h-8 px-3 text-xs\",\r\n default: \"h-10 px-6 text-sm\",\r\n lg: \"h-12 px-8 text-base\",\r\n};\r\n\r\nexport function NeonButton({\r\n children,\r\n className,\r\n color = \"cyan\",\r\n size = \"default\",\r\n ...props\r\n}: NeonButtonProps) {\r\n const colors = colorVariants[color];\r\n\r\n return (\r\n <motion.button\r\n className={cn(\r\n \"relative inline-flex items-center justify-center\",\r\n \"font-semibold tracking-wide uppercase\",\r\n \"border-2 rounded-lg\",\r\n \"bg-transparent\",\r\n \"transition-colors duration-200\",\r\n colors.border,\r\n colors.text,\r\n colors.bg,\r\n sizeVariants[size],\r\n className\r\n )}\r\n whileHover={{\r\n boxShadow: `0 0 20px ${colors.glow}, 0 0 40px ${colors.glow}, 0 0 60px ${colors.glow}`,\r\n }}\r\n whileTap={{ scale: 0.98 }}\r\n transition={{ duration: 0.2 }}\r\n {...props}\r\n >\r\n <motion.span\r\n className={cn(\"absolute inset-0 rounded-lg opacity-0\", colors.border)}\r\n animate={{ opacity: [0.5, 1, 0.5] }}\r\n transition={{ duration: 2, repeat: Infinity, ease: \"easeInOut\" }}\r\n style={{ boxShadow: `inset 0 0 10px ${colors.glow}` }}\r\n />\r\n <span className=\"relative z-10\">{children}</span>\r\n </motion.button>\r\n );\r\n}\r\n\r\nexport default NeonButton;\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 l(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function P({buttonRef:e}){let t=e.current?.getBoundingClientRect();if(!t)return null;let r=t.left+t.width/2,a=t.top+t.height/2;return jsxRuntime.jsx(framerMotion.AnimatePresence,{children:[...Array(6)].map((s,n)=>jsxRuntime.jsx(framerMotion.motion.div,{className:"fixed w-1 h-1 bg-black dark:bg-white rounded-full",style:{left:r,top:a},initial:{scale:0,x:0,y:0},animate:{scale:[0,1,0],x:[0,(n%2?1:-1)*(Math.random()*50+20)],y:[0,-Math.random()*50-20]},transition:{duration:.6,delay:n*.1,ease:"easeOut"}},n))})}function x({children:e,onClick:t,onSuccess:r,successDuration:a=1e3,className:s,...n}){let[c,u]=react.useState(false),i=react.useRef(null);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[c&&jsxRuntime.jsx(P,{buttonRef:i}),jsxRuntime.jsx("button",{ref:i,onClick:m=>{u(true),t?.(m),r?.(),setTimeout(()=>u(false),a);},className:l("relative px-4 py-2 rounded-md bg-primary text-primary-foreground",c&&"scale-95","transition-transform duration-100",s),...n,children:e})]})}var H=x;exports.ParticleButton=x;exports.default=H;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/particle-button/index.tsx"],"names":["cn","inputs","twMerge","clsx","SuccessParticles","buttonRef","rect","centerX","centerY","jsx","AnimatePresence","_","i","motion","ParticleButton","children","onClick","onSuccess","successDuration","className","props","showParticles","setShowParticles","useState","useRef","jsxs","Fragment","e","particle_button_default"],"mappings":"4OAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCMA,SAASG,CAAAA,CAAiB,CAAE,SAAA,CAAAC,CAAU,CAAA,CAAsD,CAC1F,IAAMC,CAAAA,CAAOD,CAAAA,CAAU,OAAA,EAAS,qBAAA,EAAsB,CACtD,GAAI,CAACC,CAAAA,CAAM,OAAO,IAAA,CAElB,IAAMC,EAAUD,CAAAA,CAAK,IAAA,CAAOA,CAAAA,CAAK,KAAA,CAAQ,CAAA,CACnCE,CAAAA,CAAUF,EAAK,GAAA,CAAMA,CAAAA,CAAK,MAAA,CAAS,CAAA,CAEzC,OACEG,cAAAA,CAACC,6BAAA,CACE,QAAA,CAAA,CAAC,GAAG,KAAA,CAAM,CAAC,CAAC,CAAA,CAAE,GAAA,CAAI,CAACC,CAAAA,CAAGC,CAAAA,GACrBH,cAAAA,CAACI,mBAAAA,CAAO,GAAA,CAAP,CAEC,SAAA,CAAU,mDAAA,CACV,KAAA,CAAO,CAAE,IAAA,CAAMN,CAAAA,CAAS,GAAA,CAAKC,CAAQ,CAAA,CACrC,OAAA,CAAS,CAAE,KAAA,CAAO,CAAA,CAAG,CAAA,CAAG,EAAG,CAAA,CAAG,CAAE,CAAA,CAChC,OAAA,CAAS,CAAE,KAAA,CAAO,CAAC,CAAA,CAAG,CAAA,CAAG,CAAC,CAAA,CAAG,CAAA,CAAG,CAAC,CAAA,CAAA,CAAII,EAAI,CAAA,CAAI,CAAA,CAAI,EAAA,GAAO,IAAA,CAAK,MAAA,EAAO,CAAI,GAAK,EAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAC,CAAA,CAAG,CAAC,KAAK,MAAA,EAAO,CAAI,EAAA,CAAK,EAAE,CAAE,CAAA,CACpH,UAAA,CAAY,CAAE,QAAA,CAAU,EAAA,CAAK,KAAA,CAAOA,CAAAA,CAAI,EAAA,CAAK,IAAA,CAAM,SAAU,CAAA,CAAA,CALxDA,CAMP,CACD,CAAA,CACH,CAEJ,CAEO,SAASE,CAAAA,CAAe,CAC7B,QAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,EACA,eAAA,CAAAC,CAAAA,CAAkB,GAAA,CAClB,SAAA,CAAAC,CAAAA,CACA,GAAGC,CACL,CAAA,CAAwB,CACtB,GAAM,CAACC,CAAAA,CAAeC,CAAgB,CAAA,CAAIC,eAAS,KAAK,CAAA,CAClDlB,CAAAA,CAAYmB,YAAAA,CAA0B,IAAI,CAAA,CAShD,OACEC,eAAAA,CAAAC,mBAAAA,CAAA,CACG,QAAA,CAAA,CAAAL,CAAAA,EAAiBZ,cAAAA,CAACL,CAAAA,CAAA,CAAiB,SAAA,CAAWC,CAAAA,CAAW,CAAA,CAC1DI,cAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAKJ,CAAAA,CACL,OAAA,CAZesB,CAAAA,EAA2C,CAC9DL,CAAAA,CAAiB,IAAI,CAAA,CACrBN,CAAAA,GAAUW,CAAC,CAAA,CACXV,CAAAA,IAAY,CACZ,UAAA,CAAW,IAAMK,CAAAA,CAAiB,KAAK,CAAA,CAAGJ,CAAe,EAC3D,CAAA,CAQM,SAAA,CAAWlB,CAAAA,CACT,kEAAA,CACAqB,GAAiB,UAAA,CACjB,mCAAA,CACAF,CACF,CAAA,CACC,GAAGC,CAAAA,CAEH,QAAA,CAAAL,CAAAA,CACH,CAAA,CAAA,CACF,CAEJ,CAEA,IAAOa,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, useRef } from \"react\";\r\nimport { motion, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface ParticleButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n onSuccess?: () => void;\r\n successDuration?: number;\r\n}\r\n\r\nfunction SuccessParticles({ buttonRef }: { buttonRef: React.RefObject<HTMLButtonElement> }) {\r\n const rect = buttonRef.current?.getBoundingClientRect();\r\n if (!rect) return null;\r\n\r\n const centerX = rect.left + rect.width / 2;\r\n const centerY = rect.top + rect.height / 2;\r\n\r\n return (\r\n <AnimatePresence>\r\n {[...Array(6)].map((_, i) => (\r\n <motion.div\r\n key={i}\r\n className=\"fixed w-1 h-1 bg-black dark:bg-white rounded-full\"\r\n style={{ left: centerX, top: centerY }}\r\n initial={{ scale: 0, x: 0, y: 0 }}\r\n animate={{ scale: [0, 1, 0], x: [0, (i % 2 ? 1 : -1) * (Math.random() * 50 + 20)], y: [0, -Math.random() * 50 - 20] }}\r\n transition={{ duration: 0.6, delay: i * 0.1, ease: \"easeOut\" }}\r\n />\r\n ))}\r\n </AnimatePresence>\r\n );\r\n}\r\n\r\nexport function ParticleButton({\r\n children,\r\n onClick,\r\n onSuccess,\r\n successDuration = 1000,\r\n className,\r\n ...props\r\n}: ParticleButtonProps) {\r\n const [showParticles, setShowParticles] = useState(false);\r\n const buttonRef = useRef<HTMLButtonElement>(null);\r\n\r\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\r\n setShowParticles(true);\r\n onClick?.(e);\r\n onSuccess?.();\r\n setTimeout(() => setShowParticles(false), successDuration);\r\n };\r\n\r\n return (\r\n <>\r\n {showParticles && <SuccessParticles buttonRef={buttonRef} />}\r\n <button\r\n ref={buttonRef}\r\n onClick={handleClick}\r\n className={cn(\r\n \"relative px-4 py-2 rounded-md bg-primary text-primary-foreground\",\r\n showParticles && \"scale-95\",\r\n \"transition-transform duration-100\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n </>\r\n );\r\n}\r\n\r\nexport default ParticleButton;\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,Fragment,jsx}from'react/jsx-runtime';function l(...e){return twMerge(clsx(e))}function P({buttonRef:e}){let t=e.current?.getBoundingClientRect();if(!t)return null;let r=t.left+t.width/2,a=t.top+t.height/2;return jsx(AnimatePresence,{children:[...Array(6)].map((s,n)=>jsx(motion.div,{className:"fixed w-1 h-1 bg-black dark:bg-white rounded-full",style:{left:r,top:a},initial:{scale:0,x:0,y:0},animate:{scale:[0,1,0],x:[0,(n%2?1:-1)*(Math.random()*50+20)],y:[0,-Math.random()*50-20]},transition:{duration:.6,delay:n*.1,ease:"easeOut"}},n))})}function x({children:e,onClick:t,onSuccess:r,successDuration:a=1e3,className:s,...n}){let[c,u]=useState(false),i=useRef(null);return jsxs(Fragment,{children:[c&&jsx(P,{buttonRef:i}),jsx("button",{ref:i,onClick:m=>{u(true),t?.(m),r?.(),setTimeout(()=>u(false),a);},className:l("relative px-4 py-2 rounded-md bg-primary text-primary-foreground",c&&"scale-95","transition-transform duration-100",s),...n,children:e})]})}var H=x;export{x as ParticleButton,H as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/particle-button/index.tsx"],"names":["cn","inputs","twMerge","clsx","SuccessParticles","buttonRef","rect","centerX","centerY","jsx","AnimatePresence","_","i","motion","ParticleButton","children","onClick","onSuccess","successDuration","className","props","showParticles","setShowParticles","useState","useRef","jsxs","Fragment","e","particle_button_default"],"mappings":"sMAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCMA,SAASG,CAAAA,CAAiB,CAAE,SAAA,CAAAC,CAAU,CAAA,CAAsD,CAC1F,IAAMC,CAAAA,CAAOD,CAAAA,CAAU,OAAA,EAAS,qBAAA,EAAsB,CACtD,GAAI,CAACC,CAAAA,CAAM,OAAO,IAAA,CAElB,IAAMC,EAAUD,CAAAA,CAAK,IAAA,CAAOA,CAAAA,CAAK,KAAA,CAAQ,CAAA,CACnCE,CAAAA,CAAUF,EAAK,GAAA,CAAMA,CAAAA,CAAK,MAAA,CAAS,CAAA,CAEzC,OACEG,GAAAA,CAACC,gBAAA,CACE,QAAA,CAAA,CAAC,GAAG,KAAA,CAAM,CAAC,CAAC,CAAA,CAAE,GAAA,CAAI,CAACC,CAAAA,CAAGC,CAAAA,GACrBH,GAAAA,CAACI,MAAAA,CAAO,GAAA,CAAP,CAEC,SAAA,CAAU,mDAAA,CACV,KAAA,CAAO,CAAE,IAAA,CAAMN,CAAAA,CAAS,GAAA,CAAKC,CAAQ,CAAA,CACrC,OAAA,CAAS,CAAE,KAAA,CAAO,CAAA,CAAG,CAAA,CAAG,EAAG,CAAA,CAAG,CAAE,CAAA,CAChC,OAAA,CAAS,CAAE,KAAA,CAAO,CAAC,CAAA,CAAG,CAAA,CAAG,CAAC,CAAA,CAAG,CAAA,CAAG,CAAC,CAAA,CAAA,CAAII,EAAI,CAAA,CAAI,CAAA,CAAI,EAAA,GAAO,IAAA,CAAK,MAAA,EAAO,CAAI,GAAK,EAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAC,CAAA,CAAG,CAAC,KAAK,MAAA,EAAO,CAAI,EAAA,CAAK,EAAE,CAAE,CAAA,CACpH,UAAA,CAAY,CAAE,QAAA,CAAU,EAAA,CAAK,KAAA,CAAOA,CAAAA,CAAI,EAAA,CAAK,IAAA,CAAM,SAAU,CAAA,CAAA,CALxDA,CAMP,CACD,CAAA,CACH,CAEJ,CAEO,SAASE,CAAAA,CAAe,CAC7B,QAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,EACA,eAAA,CAAAC,CAAAA,CAAkB,GAAA,CAClB,SAAA,CAAAC,CAAAA,CACA,GAAGC,CACL,CAAA,CAAwB,CACtB,GAAM,CAACC,CAAAA,CAAeC,CAAgB,CAAA,CAAIC,SAAS,KAAK,CAAA,CAClDlB,CAAAA,CAAYmB,MAAAA,CAA0B,IAAI,CAAA,CAShD,OACEC,IAAAA,CAAAC,QAAAA,CAAA,CACG,QAAA,CAAA,CAAAL,CAAAA,EAAiBZ,GAAAA,CAACL,CAAAA,CAAA,CAAiB,SAAA,CAAWC,CAAAA,CAAW,CAAA,CAC1DI,GAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAKJ,CAAAA,CACL,OAAA,CAZesB,CAAAA,EAA2C,CAC9DL,CAAAA,CAAiB,IAAI,CAAA,CACrBN,CAAAA,GAAUW,CAAC,CAAA,CACXV,CAAAA,IAAY,CACZ,UAAA,CAAW,IAAMK,CAAAA,CAAiB,KAAK,CAAA,CAAGJ,CAAe,EAC3D,CAAA,CAQM,SAAA,CAAWlB,CAAAA,CACT,kEAAA,CACAqB,GAAiB,UAAA,CACjB,mCAAA,CACAF,CACF,CAAA,CACC,GAAGC,CAAAA,CAEH,QAAA,CAAAL,CAAAA,CACH,CAAA,CAAA,CACF,CAEJ,CAEA,IAAOa,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, useRef } from \"react\";\r\nimport { motion, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface ParticleButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n onSuccess?: () => void;\r\n successDuration?: number;\r\n}\r\n\r\nfunction SuccessParticles({ buttonRef }: { buttonRef: React.RefObject<HTMLButtonElement> }) {\r\n const rect = buttonRef.current?.getBoundingClientRect();\r\n if (!rect) return null;\r\n\r\n const centerX = rect.left + rect.width / 2;\r\n const centerY = rect.top + rect.height / 2;\r\n\r\n return (\r\n <AnimatePresence>\r\n {[...Array(6)].map((_, i) => (\r\n <motion.div\r\n key={i}\r\n className=\"fixed w-1 h-1 bg-black dark:bg-white rounded-full\"\r\n style={{ left: centerX, top: centerY }}\r\n initial={{ scale: 0, x: 0, y: 0 }}\r\n animate={{ scale: [0, 1, 0], x: [0, (i % 2 ? 1 : -1) * (Math.random() * 50 + 20)], y: [0, -Math.random() * 50 - 20] }}\r\n transition={{ duration: 0.6, delay: i * 0.1, ease: \"easeOut\" }}\r\n />\r\n ))}\r\n </AnimatePresence>\r\n );\r\n}\r\n\r\nexport function ParticleButton({\r\n children,\r\n onClick,\r\n onSuccess,\r\n successDuration = 1000,\r\n className,\r\n ...props\r\n}: ParticleButtonProps) {\r\n const [showParticles, setShowParticles] = useState(false);\r\n const buttonRef = useRef<HTMLButtonElement>(null);\r\n\r\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\r\n setShowParticles(true);\r\n onClick?.(e);\r\n onSuccess?.();\r\n setTimeout(() => setShowParticles(false), successDuration);\r\n };\r\n\r\n return (\r\n <>\r\n {showParticles && <SuccessParticles buttonRef={buttonRef} />}\r\n <button\r\n ref={buttonRef}\r\n onClick={handleClick}\r\n className={cn(\r\n \"relative px-4 py-2 rounded-md bg-primary text-primary-foreground\",\r\n showParticles && \"scale-95\",\r\n \"transition-transform duration-100\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n </>\r\n );\r\n}\r\n\r\nexport default ParticleButton;\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 i(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function l({text:e,className:s}){let a=Array.from(e);return jsxRuntime.jsx("div",{className:i("flex",s),style:{perspective:"500px"},children:a.map((t,r)=>jsxRuntime.jsx(framerMotion.motion.span,{className:"inline-block",style:{whiteSpace:t===" "?"pre":"normal"},initial:{rotateY:90,opacity:0},animate:{rotateY:0,opacity:1},transition:{delay:r*.04,duration:.5,type:"spring",stiffness:120},whileHover:{rotateY:180,transition:{duration:.3}},children:t===" "?"\xA0":t},`${t}-${r}`))})}var v=l;exports.PerspectiveText=l;exports.default=v;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/perspective-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","PerspectiveText","text","className","letters","jsx","letter","index","motion","perspective_text_default"],"mappings":"qNAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,CAAAA,CAAgB,CAAE,IAAA,CAAAC,CAAAA,CAAM,SAAA,CAAAC,CAAU,CAAA,CAAyB,CACzE,IAAMC,CAAAA,CAAU,KAAA,CAAM,IAAA,CAAKF,CAAI,CAAA,CAE/B,OACEG,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWR,CAAAA,CAAG,MAAA,CAAQM,CAAS,CAAA,CAAG,KAAA,CAAO,CAAE,WAAA,CAAa,OAAQ,CAAA,CAClE,QAAA,CAAAC,CAAAA,CAAQ,GAAA,CAAI,CAACE,CAAAA,CAAQC,CAAAA,GACpBF,cAAAA,CAACG,mBAAAA,CAAO,IAAA,CAAP,CAEC,SAAA,CAAU,cAAA,CACV,KAAA,CAAO,CAAE,UAAA,CAAYF,CAAAA,GAAW,GAAA,CAAM,KAAA,CAAQ,QAAS,CAAA,CACvD,OAAA,CAAS,CAAE,OAAA,CAAS,EAAA,CAAI,OAAA,CAAS,CAAE,CAAA,CACnC,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CAClC,UAAA,CAAY,CACV,KAAA,CAAOC,CAAAA,CAAQ,GAAA,CACf,QAAA,CAAU,EAAA,CACV,IAAA,CAAM,QAAA,CACN,SAAA,CAAW,GACb,CAAA,CACA,UAAA,CAAY,CAAE,OAAA,CAAS,GAAA,CAAK,UAAA,CAAY,CAAE,QAAA,CAAU,EAAI,CAAE,CAAA,CAEzD,QAAA,CAAAD,CAAAA,GAAW,GAAA,CAAM,MAAA,CAAWA,CAAAA,CAAAA,CAbxB,CAAA,EAAGA,CAAM,CAAA,CAAA,EAAIC,CAAK,CAAA,CAczB,CACD,CAAA,CACH,CAEJ,CAEA,IAAOE,CAAAA,CAAQR","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 PerspectiveTextProps {\r\n text: string;\r\n className?: string;\r\n}\r\n\r\nexport function PerspectiveText({ text, className }: PerspectiveTextProps) {\r\n const letters = Array.from(text);\r\n\r\n return (\r\n <div className={cn(\"flex\", className)} style={{ perspective: \"500px\" }}>\r\n {letters.map((letter, index) => (\r\n <motion.span\r\n key={`${letter}-${index}`}\r\n className=\"inline-block\"\r\n style={{ whiteSpace: letter === \" \" ? \"pre\" : \"normal\" }}\r\n initial={{ rotateY: 90, opacity: 0 }}\r\n animate={{ rotateY: 0, opacity: 1 }}\r\n transition={{\r\n delay: index * 0.04,\r\n duration: 0.5,\r\n type: \"spring\",\r\n stiffness: 120,\r\n }}\r\n whileHover={{ rotateY: 180, transition: { duration: 0.3 } }}\r\n >\r\n {letter === \" \" ? \"\\u00A0\" : letter}\r\n </motion.span>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default PerspectiveText;\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 i(...e){return twMerge(clsx(e))}function l({text:e,className:s}){let a=Array.from(e);return jsx("div",{className:i("flex",s),style:{perspective:"500px"},children:a.map((t,r)=>jsx(motion.span,{className:"inline-block",style:{whiteSpace:t===" "?"pre":"normal"},initial:{rotateY:90,opacity:0},animate:{rotateY:0,opacity:1},transition:{delay:r*.04,duration:.5,type:"spring",stiffness:120},whileHover:{rotateY:180,transition:{duration:.3}},children:t===" "?"\xA0":t},`${t}-${r}`))})}var v=l;export{l as PerspectiveText,v as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/perspective-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","PerspectiveText","text","className","letters","jsx","letter","index","motion","perspective_text_default"],"mappings":"oIAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,CAAAA,CAAgB,CAAE,IAAA,CAAAC,CAAAA,CAAM,SAAA,CAAAC,CAAU,CAAA,CAAyB,CACzE,IAAMC,CAAAA,CAAU,KAAA,CAAM,IAAA,CAAKF,CAAI,CAAA,CAE/B,OACEG,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWR,CAAAA,CAAG,MAAA,CAAQM,CAAS,CAAA,CAAG,KAAA,CAAO,CAAE,WAAA,CAAa,OAAQ,CAAA,CAClE,QAAA,CAAAC,CAAAA,CAAQ,GAAA,CAAI,CAACE,CAAAA,CAAQC,CAAAA,GACpBF,GAAAA,CAACG,MAAAA,CAAO,IAAA,CAAP,CAEC,SAAA,CAAU,cAAA,CACV,KAAA,CAAO,CAAE,UAAA,CAAYF,CAAAA,GAAW,GAAA,CAAM,KAAA,CAAQ,QAAS,CAAA,CACvD,OAAA,CAAS,CAAE,OAAA,CAAS,EAAA,CAAI,OAAA,CAAS,CAAE,CAAA,CACnC,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CAClC,UAAA,CAAY,CACV,KAAA,CAAOC,CAAAA,CAAQ,GAAA,CACf,QAAA,CAAU,EAAA,CACV,IAAA,CAAM,QAAA,CACN,SAAA,CAAW,GACb,CAAA,CACA,UAAA,CAAY,CAAE,OAAA,CAAS,GAAA,CAAK,UAAA,CAAY,CAAE,QAAA,CAAU,EAAI,CAAE,CAAA,CAEzD,QAAA,CAAAD,CAAAA,GAAW,GAAA,CAAM,MAAA,CAAWA,CAAAA,CAAAA,CAbxB,CAAA,EAAGA,CAAM,CAAA,CAAA,EAAIC,CAAK,CAAA,CAczB,CACD,CAAA,CACH,CAEJ,CAEA,IAAOE,CAAAA,CAAQR","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 PerspectiveTextProps {\r\n text: string;\r\n className?: string;\r\n}\r\n\r\nexport function PerspectiveText({ text, className }: PerspectiveTextProps) {\r\n const letters = Array.from(text);\r\n\r\n return (\r\n <div className={cn(\"flex\", className)} style={{ perspective: \"500px\" }}>\r\n {letters.map((letter, index) => (\r\n <motion.span\r\n key={`${letter}-${index}`}\r\n className=\"inline-block\"\r\n style={{ whiteSpace: letter === \" \" ? \"pre\" : \"normal\" }}\r\n initial={{ rotateY: 90, opacity: 0 }}\r\n animate={{ rotateY: 0, opacity: 1 }}\r\n transition={{\r\n delay: index * 0.04,\r\n duration: 0.5,\r\n type: \"spring\",\r\n stiffness: 120,\r\n }}\r\n whileHover={{ rotateY: 180, transition: { duration: 0.3 } }}\r\n >\r\n {letter === \" \" ? \"\\u00A0\" : letter}\r\n </motion.span>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default PerspectiveText;\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 r(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function d({value:e,max:n=100,className:o,color:i="bg-blue-500",showLabel:l=false}){let t=Math.min(Math.max(e/n*100,0),100);return jsxRuntime.jsxs("div",{className:r("w-full",o),children:[jsxRuntime.jsx("div",{className:"h-2 w-full overflow-hidden rounded-full bg-zinc-200 dark:bg-zinc-800",children:jsxRuntime.jsx(framerMotion.motion.div,{className:r("h-full rounded-full",i),initial:{width:0},animate:{width:`${t}%`},transition:{duration:.5,ease:"easeOut"}})}),l&&jsxRuntime.jsxs("span",{className:"mt-1 text-sm text-zinc-600 dark:text-zinc-400",children:[Math.round(t),"%"]})]})}var x=d;exports.Progress=d;exports.default=x;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/progress/index.tsx"],"names":["cn","inputs","twMerge","clsx","Progress","value","max","className","color","showLabel","percentage","jsxs","jsx","motion","progress_default"],"mappings":"qNAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCQO,SAASG,EAAS,CACvB,KAAA,CAAAC,CAAAA,CACA,GAAA,CAAAC,CAAAA,CAAM,GAAA,CACN,SAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CAAQ,aAAA,CACR,SAAA,CAAAC,CAAAA,CAAY,KACd,EAAkB,CAChB,IAAMC,CAAAA,CAAa,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAKL,CAAAA,CAAQC,CAAAA,CAAO,GAAA,CAAK,CAAC,CAAA,CAAG,GAAG,CAAA,CAEjE,OACEK,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWX,CAAAA,CAAG,QAAA,CAAUO,CAAS,CAAA,CACpC,QAAA,CAAA,CAAAK,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sEAAA,CACb,QAAA,CAAAA,cAAAA,CAACC,oBAAO,GAAA,CAAP,CACC,SAAA,CAAWb,CAAAA,CAAG,qBAAA,CAAuBQ,CAAK,CAAA,CAC1C,OAAA,CAAS,CAAE,KAAA,CAAO,CAAE,CAAA,CACpB,OAAA,CAAS,CAAE,MAAO,CAAA,EAAGE,CAAU,CAAA,CAAA,CAAI,CAAA,CACnC,UAAA,CAAY,CAAE,QAAA,CAAU,EAAA,CAAK,IAAA,CAAM,SAAU,CAAA,CAC/C,CAAA,CACF,CAAA,CACCD,CAAAA,EACCE,gBAAC,MAAA,CAAA,CAAK,SAAA,CAAU,+CAAA,CACb,QAAA,CAAA,CAAA,IAAA,CAAK,KAAA,CAAMD,CAAU,CAAA,CAAE,GAAA,CAAA,CAC1B,CAAA,CAAA,CAEJ,CAEJ,CAEA,IAAOI,CAAAA,CAAQV","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 ProgressProps {\r\n value: number;\r\n max?: number;\r\n className?: string;\r\n color?: string;\r\n showLabel?: boolean;\r\n}\r\n\r\nexport function Progress({ \r\n value, \r\n max = 100, \r\n className,\r\n color = \"bg-blue-500\",\r\n showLabel = false\r\n}: ProgressProps) {\r\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\r\n\r\n return (\r\n <div className={cn(\"w-full\", className)}>\r\n <div className=\"h-2 w-full overflow-hidden rounded-full bg-zinc-200 dark:bg-zinc-800\">\r\n <motion.div\r\n className={cn(\"h-full rounded-full\", color)}\r\n initial={{ width: 0 }}\r\n animate={{ width: `${percentage}%` }}\r\n transition={{ duration: 0.5, ease: \"easeOut\" }}\r\n />\r\n </div>\r\n {showLabel && (\r\n <span className=\"mt-1 text-sm text-zinc-600 dark:text-zinc-400\">\r\n {Math.round(percentage)}%\r\n </span>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport default Progress;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function r(...e){return twMerge(clsx(e))}function d({value:e,max:n=100,className:o,color:i="bg-blue-500",showLabel:l=false}){let t=Math.min(Math.max(e/n*100,0),100);return jsxs("div",{className:r("w-full",o),children:[jsx("div",{className:"h-2 w-full overflow-hidden rounded-full bg-zinc-200 dark:bg-zinc-800",children:jsx(motion.div,{className:r("h-full rounded-full",i),initial:{width:0},animate:{width:`${t}%`},transition:{duration:.5,ease:"easeOut"}})}),l&&jsxs("span",{className:"mt-1 text-sm text-zinc-600 dark:text-zinc-400",children:[Math.round(t),"%"]})]})}var x=d;export{d as Progress,x as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/progress/index.tsx"],"names":["cn","inputs","twMerge","clsx","Progress","value","max","className","color","showLabel","percentage","jsxs","jsx","motion","progress_default"],"mappings":"yIAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCQO,SAASG,EAAS,CACvB,KAAA,CAAAC,CAAAA,CACA,GAAA,CAAAC,CAAAA,CAAM,GAAA,CACN,SAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CAAQ,aAAA,CACR,SAAA,CAAAC,CAAAA,CAAY,KACd,EAAkB,CAChB,IAAMC,CAAAA,CAAa,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAKL,CAAAA,CAAQC,CAAAA,CAAO,GAAA,CAAK,CAAC,CAAA,CAAG,GAAG,CAAA,CAEjE,OACEK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWX,CAAAA,CAAG,QAAA,CAAUO,CAAS,CAAA,CACpC,QAAA,CAAA,CAAAK,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sEAAA,CACb,QAAA,CAAAA,GAAAA,CAACC,OAAO,GAAA,CAAP,CACC,SAAA,CAAWb,CAAAA,CAAG,qBAAA,CAAuBQ,CAAK,CAAA,CAC1C,OAAA,CAAS,CAAE,KAAA,CAAO,CAAE,CAAA,CACpB,OAAA,CAAS,CAAE,MAAO,CAAA,EAAGE,CAAU,CAAA,CAAA,CAAI,CAAA,CACnC,UAAA,CAAY,CAAE,QAAA,CAAU,EAAA,CAAK,IAAA,CAAM,SAAU,CAAA,CAC/C,CAAA,CACF,CAAA,CACCD,CAAAA,EACCE,KAAC,MAAA,CAAA,CAAK,SAAA,CAAU,+CAAA,CACb,QAAA,CAAA,CAAA,IAAA,CAAK,KAAA,CAAMD,CAAU,CAAA,CAAE,GAAA,CAAA,CAC1B,CAAA,CAAA,CAEJ,CAEJ,CAEA,IAAOI,CAAAA,CAAQV","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 ProgressProps {\r\n value: number;\r\n max?: number;\r\n className?: string;\r\n color?: string;\r\n showLabel?: boolean;\r\n}\r\n\r\nexport function Progress({ \r\n value, \r\n max = 100, \r\n className,\r\n color = \"bg-blue-500\",\r\n showLabel = false\r\n}: ProgressProps) {\r\n const percentage = Math.min(Math.max((value / max) * 100, 0), 100);\r\n\r\n return (\r\n <div className={cn(\"w-full\", className)}>\r\n <div className=\"h-2 w-full overflow-hidden rounded-full bg-zinc-200 dark:bg-zinc-800\">\r\n <motion.div\r\n className={cn(\"h-full rounded-full\", color)}\r\n initial={{ width: 0 }}\r\n animate={{ width: `${percentage}%` }}\r\n transition={{ duration: 0.5, ease: \"easeOut\" }}\r\n />\r\n </div>\r\n {showLabel && (\r\n <span className=\"mt-1 text-sm text-zinc-600 dark:text-zinc-400\">\r\n {Math.round(percentage)}%\r\n </span>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport default Progress;\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 i(...l){return tailwindMerge.twMerge(clsx.clsx(l))}function d({options:l,value:a,onChange:t,name:f,className:o,direction:n="vertical"}){return jsxRuntime.jsx("div",{className:i("flex gap-3",n==="vertical"?"flex-col":"flex-row flex-wrap",o),children:l.map(e=>jsxRuntime.jsxs("label",{className:"inline-flex items-center gap-2 cursor-pointer",children:[jsxRuntime.jsx("button",{type:"button",role:"radio","aria-checked":a===e.value,onClick:()=>t?.(e.value),className:i("w-5 h-5 rounded-full border-2 flex items-center justify-center transition-colors",a===e.value?"border-blue-500":"border-zinc-300 dark:border-zinc-600"),children:jsxRuntime.jsx(framerMotion.motion.div,{initial:false,animate:{scale:a===e.value?1:0,opacity:a===e.value?1:0},transition:{duration:.15},className:"w-2.5 h-2.5 rounded-full bg-blue-500"})}),jsxRuntime.jsx("span",{className:"text-sm",children:e.label})]},e.value))})}var N=d;exports.RadioGroup=d;exports.default=N;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/radio/index.tsx"],"names":["cn","inputs","twMerge","clsx","RadioGroup","options","value","onChange","name","className","direction","jsx","option","jsxs","motion","radio_default"],"mappings":"qNAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCcO,SAASG,CAAAA,CAAW,CACzB,OAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,IAAA,CAAAC,CAAAA,CACA,UAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CAAY,UACd,CAAA,CAAoB,CAClB,OACEC,cAAAA,CAAC,OACC,SAAA,CAAWX,CAAAA,CACT,YAAA,CACAU,CAAAA,GAAc,UAAA,CAAa,UAAA,CAAa,oBAAA,CACxCD,CACF,EAEC,QAAA,CAAAJ,CAAAA,CAAQ,GAAA,CAAKO,CAAAA,EACZC,eAAAA,CAAC,OAAA,CAAA,CAEC,SAAA,CAAU,+CAAA,CAEV,UAAAF,cAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,IAAA,CAAK,OAAA,CACL,cAAA,CAAcL,CAAAA,GAAUM,CAAAA,CAAO,KAAA,CAC/B,OAAA,CAAS,IAAML,CAAAA,GAAWK,CAAAA,CAAO,KAAK,CAAA,CACtC,UAAWZ,CAAAA,CACT,kFAAA,CACAM,CAAAA,GAAUM,CAAAA,CAAO,KAAA,CACb,iBAAA,CACA,sCACN,CAAA,CAEA,SAAAD,cAAAA,CAACG,mBAAAA,CAAO,GAAA,CAAP,CACC,OAAA,CAAS,KAAA,CACT,OAAA,CAAS,CACP,MAAOR,CAAAA,GAAUM,CAAAA,CAAO,KAAA,CAAQ,CAAA,CAAI,CAAA,CACpC,OAAA,CAASN,CAAAA,GAAUM,CAAAA,CAAO,MAAQ,CAAA,CAAI,CACxC,CAAA,CACA,UAAA,CAAY,CAAE,QAAA,CAAU,GAAK,CAAA,CAC7B,UAAU,sCAAA,CACZ,CAAA,CACF,CAAA,CACAD,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,SAAA,CAAW,QAAA,CAAAC,EAAO,KAAA,CAAM,CAAA,CAAA,CAAA,CAzBnCA,CAAAA,CAAO,KA0Bd,CACD,CAAA,CACH,CAEJ,KAEOG,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 RadioOption {\r\n value: string;\r\n label: string;\r\n}\r\n\r\ninterface RadioGroupProps {\r\n options: RadioOption[];\r\n value?: string;\r\n onChange?: (value: string) => void;\r\n name: string;\r\n className?: string;\r\n direction?: \"horizontal\" | \"vertical\";\r\n}\r\n\r\nexport function RadioGroup({\r\n options,\r\n value,\r\n onChange,\r\n name,\r\n className,\r\n direction = \"vertical\",\r\n}: RadioGroupProps) {\r\n return (\r\n <div\r\n className={cn(\r\n \"flex gap-3\",\r\n direction === \"vertical\" ? \"flex-col\" : \"flex-row flex-wrap\",\r\n className\r\n )}\r\n >\r\n {options.map((option) => (\r\n <label\r\n key={option.value}\r\n className=\"inline-flex items-center gap-2 cursor-pointer\"\r\n >\r\n <button\r\n type=\"button\"\r\n role=\"radio\"\r\n aria-checked={value === option.value}\r\n onClick={() => onChange?.(option.value)}\r\n className={cn(\r\n \"w-5 h-5 rounded-full border-2 flex items-center justify-center transition-colors\",\r\n value === option.value\r\n ? \"border-blue-500\"\r\n : \"border-zinc-300 dark:border-zinc-600\"\r\n )}\r\n >\r\n <motion.div\r\n initial={false}\r\n animate={{\r\n scale: value === option.value ? 1 : 0,\r\n opacity: value === option.value ? 1 : 0,\r\n }}\r\n transition={{ duration: 0.15 }}\r\n className=\"w-2.5 h-2.5 rounded-full bg-blue-500\"\r\n />\r\n </button>\r\n <span className=\"text-sm\">{option.label}</span>\r\n </label>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default RadioGroup;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx,jsxs}from'react/jsx-runtime';function i(...l){return twMerge(clsx(l))}function d({options:l,value:a,onChange:t,name:f,className:o,direction:n="vertical"}){return jsx("div",{className:i("flex gap-3",n==="vertical"?"flex-col":"flex-row flex-wrap",o),children:l.map(e=>jsxs("label",{className:"inline-flex items-center gap-2 cursor-pointer",children:[jsx("button",{type:"button",role:"radio","aria-checked":a===e.value,onClick:()=>t?.(e.value),className:i("w-5 h-5 rounded-full border-2 flex items-center justify-center transition-colors",a===e.value?"border-blue-500":"border-zinc-300 dark:border-zinc-600"),children:jsx(motion.div,{initial:false,animate:{scale:a===e.value?1:0,opacity:a===e.value?1:0},transition:{duration:.15},className:"w-2.5 h-2.5 rounded-full bg-blue-500"})}),jsx("span",{className:"text-sm",children:e.label})]},e.value))})}var N=d;export{d as RadioGroup,N as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/radio/index.tsx"],"names":["cn","inputs","twMerge","clsx","RadioGroup","options","value","onChange","name","className","direction","jsx","option","jsxs","motion","radio_default"],"mappings":"yIAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCcO,SAASG,CAAAA,CAAW,CACzB,OAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,IAAA,CAAAC,CAAAA,CACA,UAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CAAY,UACd,CAAA,CAAoB,CAClB,OACEC,GAAAA,CAAC,OACC,SAAA,CAAWX,CAAAA,CACT,YAAA,CACAU,CAAAA,GAAc,UAAA,CAAa,UAAA,CAAa,oBAAA,CACxCD,CACF,EAEC,QAAA,CAAAJ,CAAAA,CAAQ,GAAA,CAAKO,CAAAA,EACZC,IAAAA,CAAC,OAAA,CAAA,CAEC,SAAA,CAAU,+CAAA,CAEV,UAAAF,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,IAAA,CAAK,OAAA,CACL,cAAA,CAAcL,CAAAA,GAAUM,CAAAA,CAAO,KAAA,CAC/B,OAAA,CAAS,IAAML,CAAAA,GAAWK,CAAAA,CAAO,KAAK,CAAA,CACtC,UAAWZ,CAAAA,CACT,kFAAA,CACAM,CAAAA,GAAUM,CAAAA,CAAO,KAAA,CACb,iBAAA,CACA,sCACN,CAAA,CAEA,SAAAD,GAAAA,CAACG,MAAAA,CAAO,GAAA,CAAP,CACC,OAAA,CAAS,KAAA,CACT,OAAA,CAAS,CACP,MAAOR,CAAAA,GAAUM,CAAAA,CAAO,KAAA,CAAQ,CAAA,CAAI,CAAA,CACpC,OAAA,CAASN,CAAAA,GAAUM,CAAAA,CAAO,MAAQ,CAAA,CAAI,CACxC,CAAA,CACA,UAAA,CAAY,CAAE,QAAA,CAAU,GAAK,CAAA,CAC7B,UAAU,sCAAA,CACZ,CAAA,CACF,CAAA,CACAD,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,SAAA,CAAW,QAAA,CAAAC,EAAO,KAAA,CAAM,CAAA,CAAA,CAAA,CAzBnCA,CAAAA,CAAO,KA0Bd,CACD,CAAA,CACH,CAEJ,KAEOG,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 RadioOption {\r\n value: string;\r\n label: string;\r\n}\r\n\r\ninterface RadioGroupProps {\r\n options: RadioOption[];\r\n value?: string;\r\n onChange?: (value: string) => void;\r\n name: string;\r\n className?: string;\r\n direction?: \"horizontal\" | \"vertical\";\r\n}\r\n\r\nexport function RadioGroup({\r\n options,\r\n value,\r\n onChange,\r\n name,\r\n className,\r\n direction = \"vertical\",\r\n}: RadioGroupProps) {\r\n return (\r\n <div\r\n className={cn(\r\n \"flex gap-3\",\r\n direction === \"vertical\" ? \"flex-col\" : \"flex-row flex-wrap\",\r\n className\r\n )}\r\n >\r\n {options.map((option) => (\r\n <label\r\n key={option.value}\r\n className=\"inline-flex items-center gap-2 cursor-pointer\"\r\n >\r\n <button\r\n type=\"button\"\r\n role=\"radio\"\r\n aria-checked={value === option.value}\r\n onClick={() => onChange?.(option.value)}\r\n className={cn(\r\n \"w-5 h-5 rounded-full border-2 flex items-center justify-center transition-colors\",\r\n value === option.value\r\n ? \"border-blue-500\"\r\n : \"border-zinc-300 dark:border-zinc-600\"\r\n )}\r\n >\r\n <motion.div\r\n initial={false}\r\n animate={{\r\n scale: value === option.value ? 1 : 0,\r\n opacity: value === option.value ? 1 : 0,\r\n }}\r\n transition={{ duration: 0.15 }}\r\n className=\"w-2.5 h-2.5 rounded-full bg-blue-500\"\r\n />\r\n </button>\r\n <span className=\"text-sm\">{option.label}</span>\r\n </label>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default RadioGroup;\r\n"]}
@@ -0,0 +1,7 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function t(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function i({children:e,className:r,speed:n=3}){return jsxRuntime.jsxs("span",{className:t("inline-block bg-gradient-to-r from-red-500 via-yellow-500 via-green-500 via-blue-500 to-purple-500 bg-clip-text text-transparent bg-[length:200%_auto] animate-[rainbow_var(--rainbow-speed)_linear_infinite]",r),style:{"--rainbow-speed":`${n}s`},children:[e,jsxRuntime.jsx("style",{children:`
2
+ @keyframes rainbow {
3
+ 0% { background-position: 0% center; }
4
+ 100% { background-position: 200% center; }
5
+ }
6
+ `})]})}var m=i;exports.RainbowText=i;exports.default=m;//# sourceMappingURL=index.js.map
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/rainbow-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","RainbowText","children","className","speed","jsxs","jsx","rainbow_text_default"],"mappings":"+KAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,sBAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,CAAAA,CAAY,CAAE,SAAAC,CAAAA,CAAU,SAAA,CAAAC,CAAAA,CAAW,KAAA,CAAAC,CAAAA,CAAQ,CAAE,EAAqB,CAChF,OACEC,eAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAWR,CAAAA,CACT,gNACAM,CACF,CAAA,CACA,KAAA,CAAO,CAAE,iBAAA,CAAmB,CAAA,EAAGC,CAAK,CAAA,CAAA,CAAI,CAAA,CAEvC,QAAA,CAAA,CAAAF,CAAAA,CACDI,cAAAA,CAAC,OAAA,CAAA,CAAO,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CAKN,CAAA,CAAA,CACJ,CAEJ,CAEA,IAAOC,CAAAA,CAAQN","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 { cn } from \"../utils/cn\";\r\n\r\ninterface RainbowTextProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n speed?: number;\r\n}\r\n\r\nexport function RainbowText({ children, className, speed = 3 }: RainbowTextProps) {\r\n return (\r\n <span\r\n className={cn(\r\n \"inline-block bg-gradient-to-r from-red-500 via-yellow-500 via-green-500 via-blue-500 to-purple-500 bg-clip-text text-transparent bg-[length:200%_auto] animate-[rainbow_var(--rainbow-speed)_linear_infinite]\",\r\n className\r\n )}\r\n style={{ \"--rainbow-speed\": `${speed}s` } as React.CSSProperties}\r\n >\r\n {children}\r\n <style>{`\r\n @keyframes rainbow {\r\n 0% { background-position: 0% center; }\r\n 100% { background-position: 200% center; }\r\n }\r\n `}</style>\r\n </span>\r\n );\r\n}\r\n\r\nexport default RainbowText;\r\n"]}
@@ -0,0 +1,7 @@
1
+ import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function t(...e){return twMerge(clsx(e))}function i({children:e,className:r,speed:n=3}){return jsxs("span",{className:t("inline-block bg-gradient-to-r from-red-500 via-yellow-500 via-green-500 via-blue-500 to-purple-500 bg-clip-text text-transparent bg-[length:200%_auto] animate-[rainbow_var(--rainbow-speed)_linear_infinite]",r),style:{"--rainbow-speed":`${n}s`},children:[e,jsx("style",{children:`
2
+ @keyframes rainbow {
3
+ 0% { background-position: 0% center; }
4
+ 100% { background-position: 200% center; }
5
+ }
6
+ `})]})}var m=i;export{i as RainbowText,m as default};//# sourceMappingURL=index.mjs.map
7
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/rainbow-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","RainbowText","children","className","speed","jsxs","jsx","rainbow_text_default"],"mappings":"sGAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,QAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,CAAAA,CAAY,CAAE,SAAAC,CAAAA,CAAU,SAAA,CAAAC,CAAAA,CAAW,KAAA,CAAAC,CAAAA,CAAQ,CAAE,EAAqB,CAChF,OACEC,IAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAWR,CAAAA,CACT,gNACAM,CACF,CAAA,CACA,KAAA,CAAO,CAAE,iBAAA,CAAmB,CAAA,EAAGC,CAAK,CAAA,CAAA,CAAI,CAAA,CAEvC,QAAA,CAAA,CAAAF,CAAAA,CACDI,GAAAA,CAAC,OAAA,CAAA,CAAO,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CAKN,CAAA,CAAA,CACJ,CAEJ,CAEA,IAAOC,CAAAA,CAAQN","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 { cn } from \"../utils/cn\";\r\n\r\ninterface RainbowTextProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n speed?: number;\r\n}\r\n\r\nexport function RainbowText({ children, className, speed = 3 }: RainbowTextProps) {\r\n return (\r\n <span\r\n className={cn(\r\n \"inline-block bg-gradient-to-r from-red-500 via-yellow-500 via-green-500 via-blue-500 to-purple-500 bg-clip-text text-transparent bg-[length:200%_auto] animate-[rainbow_var(--rainbow-speed)_linear_infinite]\",\r\n className\r\n )}\r\n style={{ \"--rainbow-speed\": `${speed}s` } as React.CSSProperties}\r\n >\r\n {children}\r\n <style>{`\r\n @keyframes rainbow {\r\n 0% { background-position: 0% center; }\r\n 100% { background-position: 200% center; }\r\n }\r\n `}</style>\r\n </span>\r\n );\r\n}\r\n\r\nexport default RainbowText;\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(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function f({text:e,className:o,stagger:s=.04}){let r=Array.from(e),l={hidden:{opacity:0},visible:{opacity:1,transition:{staggerChildren:s,delayChildren:.02}}},p={hidden:{opacity:0,y:20},visible:{opacity:1,y:0,transition:{type:"spring",damping:12,stiffness:100}}};return jsxRuntime.jsx(framerMotion.motion.div,{className:n("flex overflow-hidden",o),variants:l,initial:"hidden",animate:"visible",children:r.map((i,c)=>jsxRuntime.jsx(framerMotion.motion.span,{variants:p,className:"inline-block",style:{whiteSpace:i===" "?"pre":"normal"},children:i===" "?"\xA0":i},`${i}-${c}`))})}var x=f;exports.RevealText=f;exports.default=x;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/reveal-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","RevealText","text","className","stagger","letters","container","child","jsx","motion","letter","index","reveal_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,EAAW,OAAA,CAAAC,CAAAA,CAAU,GAAK,CAAA,CAAoB,CAC/E,IAAMC,CAAAA,CAAU,KAAA,CAAM,KAAKH,CAAI,CAAA,CAEzBI,CAAAA,CAAY,CAChB,MAAA,CAAQ,CAAE,OAAA,CAAS,CAAE,EACrB,OAAA,CAAS,CACP,OAAA,CAAS,CAAA,CACT,UAAA,CAAY,CAAE,eAAA,CAAiBF,CAAAA,CAAS,cAAe,GAAK,CAC9D,CACF,CAAA,CAEMG,EAAQ,CACZ,MAAA,CAAQ,CAAE,OAAA,CAAS,EAAG,CAAA,CAAG,EAAG,CAAA,CAC5B,OAAA,CAAS,CACP,OAAA,CAAS,CAAA,CACT,CAAA,CAAG,EACH,UAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,OAAA,CAAS,EAAA,CAAI,SAAA,CAAW,GAAI,CAC5D,CACF,CAAA,CAEA,OACEC,cAAAA,CAACC,mBAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAWZ,EAAG,sBAAA,CAAwBM,CAAS,CAAA,CAC/C,QAAA,CAAUG,CAAAA,CACV,OAAA,CAAQ,QAAA,CACR,OAAA,CAAQ,UAEP,QAAA,CAAAD,CAAAA,CAAQ,GAAA,CAAI,CAACK,CAAAA,CAAQC,CAAAA,GACpBH,cAAAA,CAACC,mBAAAA,CAAO,KAAP,CAEC,QAAA,CAAUF,CAAAA,CACV,SAAA,CAAU,cAAA,CACV,KAAA,CAAO,CAAE,UAAA,CAAYG,IAAW,GAAA,CAAM,KAAA,CAAQ,QAAS,CAAA,CAEtD,QAAA,CAAAA,CAAAA,GAAW,GAAA,CAAM,MAAA,CAAWA,GALxB,CAAA,EAAGA,CAAM,CAAA,CAAA,EAAIC,CAAK,EAMzB,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 RevealTextProps {\r\n text: string;\r\n className?: string;\r\n stagger?: number;\r\n}\r\n\r\nexport function RevealText({ text, className, stagger = 0.04 }: RevealTextProps) {\r\n const letters = Array.from(text);\r\n\r\n const container = {\r\n hidden: { opacity: 0 },\r\n visible: {\r\n opacity: 1,\r\n transition: { staggerChildren: stagger, delayChildren: 0.02 },\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: 100 },\r\n },\r\n };\r\n\r\n return (\r\n <motion.div\r\n className={cn(\"flex overflow-hidden\", 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={`${letter}-${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.div>\r\n );\r\n}\r\n\r\nexport default RevealText;\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(...e){return twMerge(clsx(e))}function f({text:e,className:o,stagger:s=.04}){let r=Array.from(e),l={hidden:{opacity:0},visible:{opacity:1,transition:{staggerChildren:s,delayChildren:.02}}},p={hidden:{opacity:0,y:20},visible:{opacity:1,y:0,transition:{type:"spring",damping:12,stiffness:100}}};return jsx(motion.div,{className:n("flex overflow-hidden",o),variants:l,initial:"hidden",animate:"visible",children:r.map((i,c)=>jsx(motion.span,{variants:p,className:"inline-block",style:{whiteSpace:i===" "?"pre":"normal"},children:i===" "?"\xA0":i},`${i}-${c}`))})}var x=f;export{f as RevealText,x as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/reveal-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","RevealText","text","className","stagger","letters","container","child","jsx","motion","letter","index","reveal_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,EAAW,OAAA,CAAAC,CAAAA,CAAU,GAAK,CAAA,CAAoB,CAC/E,IAAMC,CAAAA,CAAU,KAAA,CAAM,KAAKH,CAAI,CAAA,CAEzBI,CAAAA,CAAY,CAChB,MAAA,CAAQ,CAAE,OAAA,CAAS,CAAE,EACrB,OAAA,CAAS,CACP,OAAA,CAAS,CAAA,CACT,UAAA,CAAY,CAAE,eAAA,CAAiBF,CAAAA,CAAS,cAAe,GAAK,CAC9D,CACF,CAAA,CAEMG,EAAQ,CACZ,MAAA,CAAQ,CAAE,OAAA,CAAS,EAAG,CAAA,CAAG,EAAG,CAAA,CAC5B,OAAA,CAAS,CACP,OAAA,CAAS,CAAA,CACT,CAAA,CAAG,EACH,UAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,OAAA,CAAS,EAAA,CAAI,SAAA,CAAW,GAAI,CAC5D,CACF,CAAA,CAEA,OACEC,GAAAA,CAACC,MAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAWZ,EAAG,sBAAA,CAAwBM,CAAS,CAAA,CAC/C,QAAA,CAAUG,CAAAA,CACV,OAAA,CAAQ,QAAA,CACR,OAAA,CAAQ,UAEP,QAAA,CAAAD,CAAAA,CAAQ,GAAA,CAAI,CAACK,CAAAA,CAAQC,CAAAA,GACpBH,GAAAA,CAACC,MAAAA,CAAO,KAAP,CAEC,QAAA,CAAUF,CAAAA,CACV,SAAA,CAAU,cAAA,CACV,KAAA,CAAO,CAAE,UAAA,CAAYG,IAAW,GAAA,CAAM,KAAA,CAAQ,QAAS,CAAA,CAEtD,QAAA,CAAAA,CAAAA,GAAW,GAAA,CAAM,MAAA,CAAWA,GALxB,CAAA,EAAGA,CAAM,CAAA,CAAA,EAAIC,CAAK,EAMzB,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 RevealTextProps {\r\n text: string;\r\n className?: string;\r\n stagger?: number;\r\n}\r\n\r\nexport function RevealText({ text, className, stagger = 0.04 }: RevealTextProps) {\r\n const letters = Array.from(text);\r\n\r\n const container = {\r\n hidden: { opacity: 0 },\r\n visible: {\r\n opacity: 1,\r\n transition: { staggerChildren: stagger, delayChildren: 0.02 },\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: 100 },\r\n },\r\n };\r\n\r\n return (\r\n <motion.div\r\n className={cn(\"flex overflow-hidden\", 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={`${letter}-${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.div>\r\n );\r\n}\r\n\r\nexport default RevealText;\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 r(...t){return tailwindMerge.twMerge(clsx.clsx(t))}function g({words:t,className:i,interval:n=2e3}){let[a,o]=react.useState(0);return react.useEffect(()=>{let s=setInterval(()=>{o(l=>(l+1)%t.length);},n);return ()=>clearInterval(s)},[t.length,n]),jsxRuntime.jsx("span",{className:r("inline-block relative",i),children:jsxRuntime.jsx(framerMotion.AnimatePresence,{mode:"wait",children:jsxRuntime.jsx(framerMotion.motion.span,{initial:{rotateX:-90,opacity:0},animate:{rotateX:0,opacity:1},exit:{rotateX:90,opacity:0},transition:{duration:.4},className:"inline-block",style:{transformStyle:"preserve-3d"},children:t[a]},t[a])})})}var I=g;exports.RotatingText=g;exports.default=I;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/rotating-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","RotatingText","words","className","interval","index","setIndex","useState","useEffect","timer","prev","jsx","AnimatePresence","motion","rotating_text_default"],"mappings":"4OAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCOO,SAASG,CAAAA,CAAa,CAAE,KAAA,CAAAC,CAAAA,CAAO,SAAA,CAAAC,CAAAA,CAAW,QAAA,CAAAC,EAAW,GAAK,CAAA,CAAsB,CACrF,GAAM,CAACC,CAAAA,CAAOC,CAAQ,CAAA,CAAIC,cAAAA,CAAS,CAAC,CAAA,CAEpC,OAAAC,eAAAA,CAAU,IAAM,CACd,IAAMC,CAAAA,CAAQ,WAAA,CAAY,IAAM,CAC9BH,CAAAA,CAAUI,CAAAA,EAAAA,CAAUA,CAAAA,CAAO,GAAKR,CAAAA,CAAM,MAAM,EAC9C,CAAA,CAAGE,CAAQ,CAAA,CACX,OAAO,IAAM,aAAA,CAAcK,CAAK,CAClC,CAAA,CAAG,CAACP,EAAM,MAAA,CAAQE,CAAQ,CAAC,CAAA,CAGzBO,eAAC,MAAA,CAAA,CAAK,SAAA,CAAWd,CAAAA,CAAG,uBAAA,CAAyBM,CAAS,CAAA,CACpD,QAAA,CAAAQ,cAAAA,CAACC,4BAAAA,CAAA,CAAgB,IAAA,CAAK,MAAA,CACpB,QAAA,CAAAD,eAACE,mBAAAA,CAAO,IAAA,CAAP,CAEC,OAAA,CAAS,CAAE,OAAA,CAAS,GAAA,CAAK,OAAA,CAAS,CAAE,EACpC,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CAClC,IAAA,CAAM,CAAE,OAAA,CAAS,EAAA,CAAI,OAAA,CAAS,CAAE,EAChC,UAAA,CAAY,CAAE,QAAA,CAAU,EAAI,EAC5B,SAAA,CAAU,cAAA,CACV,KAAA,CAAO,CAAE,cAAA,CAAgB,aAAc,CAAA,CAEtC,QAAA,CAAAX,EAAMG,CAAK,CAAA,CAAA,CARPH,CAAAA,CAAMG,CAAK,CASlB,CAAA,CACF,CAAA,CACF,CAEJ,KAEOS,CAAAA,CAAQb","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 { useEffect, useState } from \"react\";\r\nimport { motion, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface RotatingTextProps {\r\n words: string[];\r\n className?: string;\r\n interval?: number;\r\n}\r\n\r\nexport function RotatingText({ words, className, interval = 2000 }: RotatingTextProps) {\r\n const [index, setIndex] = useState(0);\r\n\r\n useEffect(() => {\r\n const timer = setInterval(() => {\r\n setIndex((prev) => (prev + 1) % words.length);\r\n }, interval);\r\n return () => clearInterval(timer);\r\n }, [words.length, interval]);\r\n\r\n return (\r\n <span className={cn(\"inline-block relative\", className)}>\r\n <AnimatePresence mode=\"wait\">\r\n <motion.span\r\n key={words[index]}\r\n initial={{ rotateX: -90, opacity: 0 }}\r\n animate={{ rotateX: 0, opacity: 1 }}\r\n exit={{ rotateX: 90, opacity: 0 }}\r\n transition={{ duration: 0.4 }}\r\n className=\"inline-block\"\r\n style={{ transformStyle: \"preserve-3d\" }}\r\n >\r\n {words[index]}\r\n </motion.span>\r\n </AnimatePresence>\r\n </span>\r\n );\r\n}\r\n\r\nexport default RotatingText;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useState,useEffect}from'react';import {AnimatePresence,motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function r(...t){return twMerge(clsx(t))}function g({words:t,className:i,interval:n=2e3}){let[a,o]=useState(0);return useEffect(()=>{let s=setInterval(()=>{o(l=>(l+1)%t.length);},n);return ()=>clearInterval(s)},[t.length,n]),jsx("span",{className:r("inline-block relative",i),children:jsx(AnimatePresence,{mode:"wait",children:jsx(motion.span,{initial:{rotateX:-90,opacity:0},animate:{rotateX:0,opacity:1},exit:{rotateX:90,opacity:0},transition:{duration:.4},className:"inline-block",style:{transformStyle:"preserve-3d"},children:t[a]},t[a])})})}var I=g;export{g as RotatingText,I as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/rotating-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","RotatingText","words","className","interval","index","setIndex","useState","useEffect","timer","prev","jsx","AnimatePresence","motion","rotating_text_default"],"mappings":"2LAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCOO,SAASG,CAAAA,CAAa,CAAE,KAAA,CAAAC,CAAAA,CAAO,SAAA,CAAAC,CAAAA,CAAW,QAAA,CAAAC,EAAW,GAAK,CAAA,CAAsB,CACrF,GAAM,CAACC,CAAAA,CAAOC,CAAQ,CAAA,CAAIC,QAAAA,CAAS,CAAC,CAAA,CAEpC,OAAAC,SAAAA,CAAU,IAAM,CACd,IAAMC,CAAAA,CAAQ,WAAA,CAAY,IAAM,CAC9BH,CAAAA,CAAUI,CAAAA,EAAAA,CAAUA,CAAAA,CAAO,GAAKR,CAAAA,CAAM,MAAM,EAC9C,CAAA,CAAGE,CAAQ,CAAA,CACX,OAAO,IAAM,aAAA,CAAcK,CAAK,CAClC,CAAA,CAAG,CAACP,EAAM,MAAA,CAAQE,CAAQ,CAAC,CAAA,CAGzBO,IAAC,MAAA,CAAA,CAAK,SAAA,CAAWd,CAAAA,CAAG,uBAAA,CAAyBM,CAAS,CAAA,CACpD,QAAA,CAAAQ,GAAAA,CAACC,eAAAA,CAAA,CAAgB,IAAA,CAAK,MAAA,CACpB,QAAA,CAAAD,IAACE,MAAAA,CAAO,IAAA,CAAP,CAEC,OAAA,CAAS,CAAE,OAAA,CAAS,GAAA,CAAK,OAAA,CAAS,CAAE,EACpC,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CAClC,IAAA,CAAM,CAAE,OAAA,CAAS,EAAA,CAAI,OAAA,CAAS,CAAE,EAChC,UAAA,CAAY,CAAE,QAAA,CAAU,EAAI,EAC5B,SAAA,CAAU,cAAA,CACV,KAAA,CAAO,CAAE,cAAA,CAAgB,aAAc,CAAA,CAEtC,QAAA,CAAAX,EAAMG,CAAK,CAAA,CAAA,CARPH,CAAAA,CAAMG,CAAK,CASlB,CAAA,CACF,CAAA,CACF,CAEJ,KAEOS,CAAAA,CAAQb","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 { useEffect, useState } from \"react\";\r\nimport { motion, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface RotatingTextProps {\r\n words: string[];\r\n className?: string;\r\n interval?: number;\r\n}\r\n\r\nexport function RotatingText({ words, className, interval = 2000 }: RotatingTextProps) {\r\n const [index, setIndex] = useState(0);\r\n\r\n useEffect(() => {\r\n const timer = setInterval(() => {\r\n setIndex((prev) => (prev + 1) % words.length);\r\n }, interval);\r\n return () => clearInterval(timer);\r\n }, [words.length, interval]);\r\n\r\n return (\r\n <span className={cn(\"inline-block relative\", className)}>\r\n <AnimatePresence mode=\"wait\">\r\n <motion.span\r\n key={words[index]}\r\n initial={{ rotateX: -90, opacity: 0 }}\r\n animate={{ rotateX: 0, opacity: 1 }}\r\n exit={{ rotateX: 90, opacity: 0 }}\r\n transition={{ duration: 0.4 }}\r\n className=\"inline-block\"\r\n style={{ transformStyle: \"preserve-3d\" }}\r\n >\r\n {words[index]}\r\n </motion.span>\r\n </AnimatePresence>\r\n </span>\r\n );\r\n}\r\n\r\nexport default RotatingText;\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 l(...t){return tailwindMerge.twMerge(clsx.clsx(t))}function _({text:t,className:s,speed:n=50,scrambleChars:e="!<>-_\\/[]{}\u2014=+*^?#________"}){let[i,c]=react.useState(t);return react.useEffect(()=>{let r=0,a=setInterval(()=>{c(t.split("").map((d,o)=>o<r?t[o]:e[Math.floor(Math.random()*e.length)]).join("")),r>=t.length&&clearInterval(a),r+=1/3;},n);return ()=>clearInterval(a)},[t,n,e]),jsxRuntime.jsx("span",{className:l("font-mono",s),children:i})}var b=_;exports.ScrambledText=_;exports.default=b;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/scrambled-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","ScrambledText","text","className","speed","scrambleChars","displayText","setDisplayText","useState","useEffect","iteration","interval","char","index","jsx","scrambled_text_default"],"mappings":"sMAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCOO,SAASG,CAAAA,CAAc,CAC5B,IAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CAAQ,EAAA,CACR,aAAA,CAAAC,CAAAA,CAAgB,kCAClB,CAAA,CAAuB,CACrB,GAAM,CAACC,CAAAA,CAAaC,CAAc,CAAA,CAAIC,cAAAA,CAASN,CAAI,CAAA,CAEnD,OAAAO,eAAAA,CAAU,IAAM,CACd,IAAIC,CAAAA,CAAY,CAAA,CACVC,CAAAA,CAAW,WAAA,CAAY,IAAM,CACjCJ,CAAAA,CACEL,CAAAA,CACG,KAAA,CAAM,EAAE,CAAA,CACR,GAAA,CAAI,CAACU,CAAAA,CAAMC,CAAAA,GACNA,CAAAA,CAAQH,CAAAA,CAAkBR,CAAAA,CAAKW,CAAK,CAAA,CACjCR,CAAAA,CAAc,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,EAAO,CAAIA,CAAAA,CAAc,MAAM,CAAC,CACtE,CAAA,CACA,IAAA,CAAK,EAAE,CACZ,CAAA,CAEIK,CAAAA,EAAaR,CAAAA,CAAK,MAAA,EACpB,aAAA,CAAcS,CAAQ,CAAA,CAGxBD,CAAAA,EAAa,CAAA,CAAI,EACnB,CAAA,CAAGN,CAAK,CAAA,CAER,OAAO,IAAM,aAAA,CAAcO,CAAQ,CACrC,CAAA,CAAG,CAACT,CAAAA,CAAME,CAAAA,CAAOC,CAAa,CAAC,CAAA,CAG7BS,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAWjB,CAAAA,CAAG,WAAA,CAAaM,CAAS,CAAA,CACvC,QAAA,CAAAG,CAAAA,CACH,CAEJ,KAEOS,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 { useEffect, useState } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface ScrambledTextProps {\r\n text: string;\r\n className?: string;\r\n speed?: number;\r\n scrambleChars?: string;\r\n}\r\n\r\nexport function ScrambledText({\r\n text,\r\n className,\r\n speed = 50,\r\n scrambleChars = \"!<>-_\\\\/[]{}—=+*^?#________\"\r\n}: ScrambledTextProps) {\r\n const [displayText, setDisplayText] = useState(text);\r\n\r\n useEffect(() => {\r\n let iteration = 0;\r\n const interval = setInterval(() => {\r\n setDisplayText(\r\n text\r\n .split(\"\")\r\n .map((char, index) => {\r\n if (index < iteration) return text[index];\r\n return scrambleChars[Math.floor(Math.random() * scrambleChars.length)];\r\n })\r\n .join(\"\")\r\n );\r\n\r\n if (iteration >= text.length) {\r\n clearInterval(interval);\r\n }\r\n\r\n iteration += 1 / 3;\r\n }, speed);\r\n\r\n return () => clearInterval(interval);\r\n }, [text, speed, scrambleChars]);\r\n\r\n return (\r\n <span className={cn(\"font-mono\", className)}>\r\n {displayText}\r\n </span>\r\n );\r\n}\r\n\r\nexport default ScrambledText;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useState,useEffect}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function l(...t){return twMerge(clsx(t))}function _({text:t,className:s,speed:n=50,scrambleChars:e="!<>-_\\/[]{}\u2014=+*^?#________"}){let[i,c]=useState(t);return useEffect(()=>{let r=0,a=setInterval(()=>{c(t.split("").map((d,o)=>o<r?t[o]:e[Math.floor(Math.random()*e.length)]).join("")),r>=t.length&&clearInterval(a),r+=1/3;},n);return ()=>clearInterval(a)},[t,n,e]),jsx("span",{className:l("font-mono",s),children:i})}var b=_;export{_ as ScrambledText,b as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/scrambled-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","ScrambledText","text","className","speed","scrambleChars","displayText","setDisplayText","useState","useEffect","iteration","interval","char","index","jsx","scrambled_text_default"],"mappings":"wIAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCOO,SAASG,CAAAA,CAAc,CAC5B,IAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CAAQ,EAAA,CACR,aAAA,CAAAC,CAAAA,CAAgB,kCAClB,CAAA,CAAuB,CACrB,GAAM,CAACC,CAAAA,CAAaC,CAAc,CAAA,CAAIC,QAAAA,CAASN,CAAI,CAAA,CAEnD,OAAAO,SAAAA,CAAU,IAAM,CACd,IAAIC,CAAAA,CAAY,CAAA,CACVC,CAAAA,CAAW,WAAA,CAAY,IAAM,CACjCJ,CAAAA,CACEL,CAAAA,CACG,KAAA,CAAM,EAAE,CAAA,CACR,GAAA,CAAI,CAACU,CAAAA,CAAMC,CAAAA,GACNA,CAAAA,CAAQH,CAAAA,CAAkBR,CAAAA,CAAKW,CAAK,CAAA,CACjCR,CAAAA,CAAc,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,EAAO,CAAIA,CAAAA,CAAc,MAAM,CAAC,CACtE,CAAA,CACA,IAAA,CAAK,EAAE,CACZ,CAAA,CAEIK,CAAAA,EAAaR,CAAAA,CAAK,MAAA,EACpB,aAAA,CAAcS,CAAQ,CAAA,CAGxBD,CAAAA,EAAa,CAAA,CAAI,EACnB,CAAA,CAAGN,CAAK,CAAA,CAER,OAAO,IAAM,aAAA,CAAcO,CAAQ,CACrC,CAAA,CAAG,CAACT,CAAAA,CAAME,CAAAA,CAAOC,CAAa,CAAC,CAAA,CAG7BS,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAWjB,CAAAA,CAAG,WAAA,CAAaM,CAAS,CAAA,CACvC,QAAA,CAAAG,CAAAA,CACH,CAEJ,KAEOS,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 { useEffect, useState } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface ScrambledTextProps {\r\n text: string;\r\n className?: string;\r\n speed?: number;\r\n scrambleChars?: string;\r\n}\r\n\r\nexport function ScrambledText({\r\n text,\r\n className,\r\n speed = 50,\r\n scrambleChars = \"!<>-_\\\\/[]{}—=+*^?#________\"\r\n}: ScrambledTextProps) {\r\n const [displayText, setDisplayText] = useState(text);\r\n\r\n useEffect(() => {\r\n let iteration = 0;\r\n const interval = setInterval(() => {\r\n setDisplayText(\r\n text\r\n .split(\"\")\r\n .map((char, index) => {\r\n if (index < iteration) return text[index];\r\n return scrambleChars[Math.floor(Math.random() * scrambleChars.length)];\r\n })\r\n .join(\"\")\r\n );\r\n\r\n if (iteration >= text.length) {\r\n clearInterval(interval);\r\n }\r\n\r\n iteration += 1 / 3;\r\n }, speed);\r\n\r\n return () => clearInterval(interval);\r\n }, [text, speed, scrambleChars]);\r\n\r\n return (\r\n <span className={cn(\"font-mono\", className)}>\r\n {displayText}\r\n </span>\r\n );\r\n}\r\n\r\nexport default ScrambledText;\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 n(...o){return tailwindMerge.twMerge(clsx.clsx(o))}function h({options:o,value:s,onChange:m,placeholder:f="Select...",className:b,label:c}){let[r,i]=react.useState(false),l=react.useRef(null),u=o.find(e=>e.value===s);return react.useEffect(()=>{let e=p=>{l.current&&!l.current.contains(p.target)&&i(false);};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]),jsxRuntime.jsxs("div",{className:"w-full",children:[c&&jsxRuntime.jsx("label",{className:"block text-sm font-medium text-zinc-700 dark:text-zinc-300 mb-1",children:c}),jsxRuntime.jsxs("div",{ref:l,className:n("relative",b),children:[jsxRuntime.jsxs("button",{type:"button",onClick:()=>i(!r),className:n("w-full px-4 py-2 rounded-lg text-left","bg-white dark:bg-zinc-900","border border-zinc-300 dark:border-zinc-700","flex items-center justify-between","focus:outline-none focus:ring-2 focus:ring-blue-500","transition-all duration-200"),children:[jsxRuntime.jsx("span",{className:u?"":"text-zinc-400",children:u?.label||f}),jsxRuntime.jsx(framerMotion.motion.svg,{animate:{rotate:r?180:0},transition:{duration:.2},className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]}),jsxRuntime.jsx(framerMotion.AnimatePresence,{children:r&&jsxRuntime.jsx(framerMotion.motion.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:.15},className:n("absolute z-50 w-full mt-1 rounded-lg overflow-hidden","bg-white dark:bg-zinc-900","border border-zinc-300 dark:border-zinc-700","shadow-lg"),children:o.map(e=>jsxRuntime.jsx("button",{type:"button",onClick:()=>{m?.(e.value),i(false);},className:n("w-full px-4 py-2 text-left","hover:bg-zinc-100 dark:hover:bg-zinc-800","transition-colors",s===e.value&&"bg-blue-50 dark:bg-blue-900/20 text-blue-600"),children:e.label},e.value))})})]})]})}var L=h;exports.Select=h;exports.default=L;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/select/index.tsx"],"names":["cn","inputs","twMerge","clsx","Select","options","value","onChange","placeholder","className","label","isOpen","setIsOpen","useState","ref","useRef","selectedOption","opt","useEffect","handleClickOutside","e","jsxs","jsx","motion","AnimatePresence","option","select_default"],"mappings":"4OAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCeO,SAASG,CAAAA,CAAO,CAAE,QAAAC,CAAAA,CAAS,KAAA,CAAAC,CAAAA,CAAO,QAAA,CAAAC,CAAAA,CAAU,WAAA,CAAAC,CAAAA,CAAc,WAAA,CAAa,UAAAC,CAAAA,CAAW,KAAA,CAAAC,CAAM,CAAA,CAAgB,CAC7G,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIC,cAAAA,CAAS,KAAK,CAAA,CACpCC,CAAAA,CAAMC,YAAAA,CAAuB,IAAI,CAAA,CAEjCC,EAAiBX,CAAAA,CAAQ,IAAA,CAAMY,CAAAA,EAAQA,CAAAA,CAAI,KAAA,GAAUX,CAAK,CAAA,CAEhE,OAAAY,gBAAU,IAAM,CACd,IAAMC,CAAAA,CAAsBC,CAAAA,EAAkB,CACxCN,CAAAA,CAAI,OAAA,EAAW,CAACA,CAAAA,CAAI,OAAA,CAAQ,QAAA,CAASM,CAAAA,CAAE,MAAc,CAAA,EACvDR,CAAAA,CAAU,KAAK,EAEnB,CAAA,CACA,OAAA,QAAA,CAAS,gBAAA,CAAiB,WAAA,CAAaO,CAAkB,CAAA,CAClD,IAAM,QAAA,CAAS,oBAAoB,WAAA,CAAaA,CAAkB,CAC3E,CAAA,CAAG,EAAE,CAAA,CAGHE,eAAAA,CAAC,OAAI,SAAA,CAAU,QAAA,CACZ,QAAA,CAAA,CAAAX,CAAAA,EACCY,cAAAA,CAAC,OAAA,CAAA,CAAM,SAAA,CAAU,iEAAA,CACd,SAAAZ,CAAAA,CACH,CAAA,CAEFW,eAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKP,CAAAA,CAAK,SAAA,CAAWd,CAAAA,CAAG,WAAYS,CAAS,CAAA,CAChD,QAAA,CAAA,CAAAY,eAAAA,CAAC,UACC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS,IAAMT,EAAU,CAACD,CAAM,CAAA,CAChC,SAAA,CAAWX,CAAAA,CACT,uCAAA,CACA,2BAAA,CACA,6CAAA,CACA,oCACA,qDAAA,CACA,6BACF,CAAA,CAEA,QAAA,CAAA,CAAAsB,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAWN,CAAAA,CAAiB,GAAK,eAAA,CACpC,QAAA,CAAAA,CAAAA,EAAgB,KAAA,EAASR,CAAAA,CAC5B,CAAA,CACAc,cAAAA,CAACC,mBAAAA,CAAO,IAAP,CACC,OAAA,CAAS,CAAE,MAAA,CAAQZ,CAAAA,CAAS,GAAA,CAAM,CAAE,CAAA,CACpC,WAAY,CAAE,QAAA,CAAU,EAAI,CAAA,CAC5B,SAAA,CAAU,SAAA,CACV,IAAA,CAAK,MAAA,CACL,OAAO,cAAA,CACP,OAAA,CAAQ,WAAA,CAER,QAAA,CAAAW,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,gBAAA,CAAiB,CAAA,CACxF,CAAA,CAAA,CACF,CAAA,CACAA,eAACE,4BAAAA,CAAA,CACE,QAAA,CAAAb,CAAAA,EACCW,eAACC,mBAAAA,CAAO,GAAA,CAAP,CACC,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,GAAI,CAAA,CAC9B,OAAA,CAAS,CAAE,OAAA,CAAS,EAAG,CAAA,CAAG,CAAE,CAAA,CAC5B,IAAA,CAAM,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,GAAI,CAAA,CAC3B,UAAA,CAAY,CAAE,QAAA,CAAU,GAAK,CAAA,CAC7B,SAAA,CAAWvB,CAAAA,CACT,uDACA,2BAAA,CACA,6CAAA,CACA,WACF,CAAA,CAEC,QAAA,CAAAK,CAAAA,CAAQ,GAAA,CAAKoB,CAAAA,EACZH,eAAC,QAAA,CAAA,CAEC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS,IAAM,CACbf,CAAAA,GAAWkB,CAAAA,CAAO,KAAK,CAAA,CACvBb,CAAAA,CAAU,KAAK,EACjB,CAAA,CACA,SAAA,CAAWZ,CAAAA,CACT,4BAAA,CACA,2CACA,mBAAA,CACAM,CAAAA,GAAUmB,CAAAA,CAAO,KAAA,EAAS,8CAC5B,CAAA,CAEC,QAAA,CAAAA,CAAAA,CAAO,OAbHA,CAAAA,CAAO,KAcd,CACD,CAAA,CACH,EAEJ,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,KAEOC,CAAAA,CAAQtB","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, useEffect } from \"react\";\r\nimport { motion, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface SelectOption {\r\n value: string;\r\n label: string;\r\n}\r\n\r\ninterface SelectProps {\r\n options: SelectOption[];\r\n value?: string;\r\n onChange?: (value: string) => void;\r\n placeholder?: string;\r\n className?: string;\r\n label?: string;\r\n}\r\n\r\nexport function Select({ options, value, onChange, placeholder = \"Select...\", className, label }: SelectProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const ref = useRef<HTMLDivElement>(null);\r\n\r\n const selectedOption = options.find((opt) => opt.value === value);\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (e: MouseEvent) => {\r\n if (ref.current && !ref.current.contains(e.target as Node)) {\r\n setIsOpen(false);\r\n }\r\n };\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\r\n }, []);\r\n\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 <div ref={ref} className={cn(\"relative\", className)}>\r\n <button\r\n type=\"button\"\r\n onClick={() => setIsOpen(!isOpen)}\r\n className={cn(\r\n \"w-full px-4 py-2 rounded-lg text-left\",\r\n \"bg-white dark:bg-zinc-900\",\r\n \"border border-zinc-300 dark:border-zinc-700\",\r\n \"flex items-center justify-between\",\r\n \"focus:outline-none focus:ring-2 focus:ring-blue-500\",\r\n \"transition-all duration-200\"\r\n )}\r\n >\r\n <span className={selectedOption ? \"\" : \"text-zinc-400\"}>\r\n {selectedOption?.label || placeholder}\r\n </span>\r\n <motion.svg\r\n animate={{ rotate: isOpen ? 180 : 0 }}\r\n transition={{ duration: 0.2 }}\r\n className=\"w-5 h-5\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\r\n </motion.svg>\r\n </button>\r\n <AnimatePresence>\r\n {isOpen && (\r\n <motion.div\r\n initial={{ opacity: 0, y: -10 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: -10 }}\r\n transition={{ duration: 0.15 }}\r\n className={cn(\r\n \"absolute z-50 w-full mt-1 rounded-lg overflow-hidden\",\r\n \"bg-white dark:bg-zinc-900\",\r\n \"border border-zinc-300 dark:border-zinc-700\",\r\n \"shadow-lg\"\r\n )}\r\n >\r\n {options.map((option) => (\r\n <button\r\n key={option.value}\r\n type=\"button\"\r\n onClick={() => {\r\n onChange?.(option.value);\r\n setIsOpen(false);\r\n }}\r\n className={cn(\r\n \"w-full px-4 py-2 text-left\",\r\n \"hover:bg-zinc-100 dark:hover:bg-zinc-800\",\r\n \"transition-colors\",\r\n value === option.value && \"bg-blue-50 dark:bg-blue-900/20 text-blue-600\"\r\n )}\r\n >\r\n {option.label}\r\n </button>\r\n ))}\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Select;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useState,useRef,useEffect}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 n(...o){return twMerge(clsx(o))}function h({options:o,value:s,onChange:m,placeholder:f="Select...",className:b,label:c}){let[r,i]=useState(false),l=useRef(null),u=o.find(e=>e.value===s);return useEffect(()=>{let e=p=>{l.current&&!l.current.contains(p.target)&&i(false);};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]),jsxs("div",{className:"w-full",children:[c&&jsx("label",{className:"block text-sm font-medium text-zinc-700 dark:text-zinc-300 mb-1",children:c}),jsxs("div",{ref:l,className:n("relative",b),children:[jsxs("button",{type:"button",onClick:()=>i(!r),className:n("w-full px-4 py-2 rounded-lg text-left","bg-white dark:bg-zinc-900","border border-zinc-300 dark:border-zinc-700","flex items-center justify-between","focus:outline-none focus:ring-2 focus:ring-blue-500","transition-all duration-200"),children:[jsx("span",{className:u?"":"text-zinc-400",children:u?.label||f}),jsx(motion.svg,{animate:{rotate:r?180:0},transition:{duration:.2},className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]}),jsx(AnimatePresence,{children:r&&jsx(motion.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:.15},className:n("absolute z-50 w-full mt-1 rounded-lg overflow-hidden","bg-white dark:bg-zinc-900","border border-zinc-300 dark:border-zinc-700","shadow-lg"),children:o.map(e=>jsx("button",{type:"button",onClick:()=>{m?.(e.value),i(false);},className:n("w-full px-4 py-2 text-left","hover:bg-zinc-100 dark:hover:bg-zinc-800","transition-colors",s===e.value&&"bg-blue-50 dark:bg-blue-900/20 text-blue-600"),children:e.label},e.value))})})]})]})}var L=h;export{h as Select,L as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/select/index.tsx"],"names":["cn","inputs","twMerge","clsx","Select","options","value","onChange","placeholder","className","label","isOpen","setIsOpen","useState","ref","useRef","selectedOption","opt","useEffect","handleClickOutside","e","jsxs","jsx","motion","AnimatePresence","option","select_default"],"mappings":"uMAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCeO,SAASG,CAAAA,CAAO,CAAE,QAAAC,CAAAA,CAAS,KAAA,CAAAC,CAAAA,CAAO,QAAA,CAAAC,CAAAA,CAAU,WAAA,CAAAC,CAAAA,CAAc,WAAA,CAAa,UAAAC,CAAAA,CAAW,KAAA,CAAAC,CAAM,CAAA,CAAgB,CAC7G,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIC,QAAAA,CAAS,KAAK,CAAA,CACpCC,CAAAA,CAAMC,MAAAA,CAAuB,IAAI,CAAA,CAEjCC,EAAiBX,CAAAA,CAAQ,IAAA,CAAMY,CAAAA,EAAQA,CAAAA,CAAI,KAAA,GAAUX,CAAK,CAAA,CAEhE,OAAAY,UAAU,IAAM,CACd,IAAMC,CAAAA,CAAsBC,CAAAA,EAAkB,CACxCN,CAAAA,CAAI,OAAA,EAAW,CAACA,CAAAA,CAAI,OAAA,CAAQ,QAAA,CAASM,CAAAA,CAAE,MAAc,CAAA,EACvDR,CAAAA,CAAU,KAAK,EAEnB,CAAA,CACA,OAAA,QAAA,CAAS,gBAAA,CAAiB,WAAA,CAAaO,CAAkB,CAAA,CAClD,IAAM,QAAA,CAAS,oBAAoB,WAAA,CAAaA,CAAkB,CAC3E,CAAA,CAAG,EAAE,CAAA,CAGHE,IAAAA,CAAC,OAAI,SAAA,CAAU,QAAA,CACZ,QAAA,CAAA,CAAAX,CAAAA,EACCY,GAAAA,CAAC,OAAA,CAAA,CAAM,SAAA,CAAU,iEAAA,CACd,SAAAZ,CAAAA,CACH,CAAA,CAEFW,IAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKP,CAAAA,CAAK,SAAA,CAAWd,CAAAA,CAAG,WAAYS,CAAS,CAAA,CAChD,QAAA,CAAA,CAAAY,IAAAA,CAAC,UACC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS,IAAMT,EAAU,CAACD,CAAM,CAAA,CAChC,SAAA,CAAWX,CAAAA,CACT,uCAAA,CACA,2BAAA,CACA,6CAAA,CACA,oCACA,qDAAA,CACA,6BACF,CAAA,CAEA,QAAA,CAAA,CAAAsB,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAWN,CAAAA,CAAiB,GAAK,eAAA,CACpC,QAAA,CAAAA,CAAAA,EAAgB,KAAA,EAASR,CAAAA,CAC5B,CAAA,CACAc,GAAAA,CAACC,MAAAA,CAAO,IAAP,CACC,OAAA,CAAS,CAAE,MAAA,CAAQZ,CAAAA,CAAS,GAAA,CAAM,CAAE,CAAA,CACpC,WAAY,CAAE,QAAA,CAAU,EAAI,CAAA,CAC5B,SAAA,CAAU,SAAA,CACV,IAAA,CAAK,MAAA,CACL,OAAO,cAAA,CACP,OAAA,CAAQ,WAAA,CAER,QAAA,CAAAW,GAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,gBAAA,CAAiB,CAAA,CACxF,CAAA,CAAA,CACF,CAAA,CACAA,IAACE,eAAAA,CAAA,CACE,QAAA,CAAAb,CAAAA,EACCW,IAACC,MAAAA,CAAO,GAAA,CAAP,CACC,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,GAAI,CAAA,CAC9B,OAAA,CAAS,CAAE,OAAA,CAAS,EAAG,CAAA,CAAG,CAAE,CAAA,CAC5B,IAAA,CAAM,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,GAAI,CAAA,CAC3B,UAAA,CAAY,CAAE,QAAA,CAAU,GAAK,CAAA,CAC7B,SAAA,CAAWvB,CAAAA,CACT,uDACA,2BAAA,CACA,6CAAA,CACA,WACF,CAAA,CAEC,QAAA,CAAAK,CAAAA,CAAQ,GAAA,CAAKoB,CAAAA,EACZH,IAAC,QAAA,CAAA,CAEC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS,IAAM,CACbf,CAAAA,GAAWkB,CAAAA,CAAO,KAAK,CAAA,CACvBb,CAAAA,CAAU,KAAK,EACjB,CAAA,CACA,SAAA,CAAWZ,CAAAA,CACT,4BAAA,CACA,2CACA,mBAAA,CACAM,CAAAA,GAAUmB,CAAAA,CAAO,KAAA,EAAS,8CAC5B,CAAA,CAEC,QAAA,CAAAA,CAAAA,CAAO,OAbHA,CAAAA,CAAO,KAcd,CACD,CAAA,CACH,EAEJ,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,KAEOC,CAAAA,CAAQtB","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, useRef, useEffect } from \"react\";\r\nimport { motion, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface SelectOption {\r\n value: string;\r\n label: string;\r\n}\r\n\r\ninterface SelectProps {\r\n options: SelectOption[];\r\n value?: string;\r\n onChange?: (value: string) => void;\r\n placeholder?: string;\r\n className?: string;\r\n label?: string;\r\n}\r\n\r\nexport function Select({ options, value, onChange, placeholder = \"Select...\", className, label }: SelectProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const ref = useRef<HTMLDivElement>(null);\r\n\r\n const selectedOption = options.find((opt) => opt.value === value);\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (e: MouseEvent) => {\r\n if (ref.current && !ref.current.contains(e.target as Node)) {\r\n setIsOpen(false);\r\n }\r\n };\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\r\n }, []);\r\n\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 <div ref={ref} className={cn(\"relative\", className)}>\r\n <button\r\n type=\"button\"\r\n onClick={() => setIsOpen(!isOpen)}\r\n className={cn(\r\n \"w-full px-4 py-2 rounded-lg text-left\",\r\n \"bg-white dark:bg-zinc-900\",\r\n \"border border-zinc-300 dark:border-zinc-700\",\r\n \"flex items-center justify-between\",\r\n \"focus:outline-none focus:ring-2 focus:ring-blue-500\",\r\n \"transition-all duration-200\"\r\n )}\r\n >\r\n <span className={selectedOption ? \"\" : \"text-zinc-400\"}>\r\n {selectedOption?.label || placeholder}\r\n </span>\r\n <motion.svg\r\n animate={{ rotate: isOpen ? 180 : 0 }}\r\n transition={{ duration: 0.2 }}\r\n className=\"w-5 h-5\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\r\n </motion.svg>\r\n </button>\r\n <AnimatePresence>\r\n {isOpen && (\r\n <motion.div\r\n initial={{ opacity: 0, y: -10 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: -10 }}\r\n transition={{ duration: 0.15 }}\r\n className={cn(\r\n \"absolute z-50 w-full mt-1 rounded-lg overflow-hidden\",\r\n \"bg-white dark:bg-zinc-900\",\r\n \"border border-zinc-300 dark:border-zinc-700\",\r\n \"shadow-lg\"\r\n )}\r\n >\r\n {options.map((option) => (\r\n <button\r\n key={option.value}\r\n type=\"button\"\r\n onClick={() => {\r\n onChange?.(option.value);\r\n setIsOpen(false);\r\n }}\r\n className={cn(\r\n \"w-full px-4 py-2 text-left\",\r\n \"hover:bg-zinc-100 dark:hover:bg-zinc-800\",\r\n \"transition-colors\",\r\n value === option.value && \"bg-blue-50 dark:bg-blue-900/20 text-blue-600\"\r\n )}\r\n >\r\n {option.label}\r\n </button>\r\n ))}\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Select;\r\n"]}
@@ -0,0 +1,7 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function t(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function o({text:e,disabled:n=false,speed:r=5,className:a=""}){return jsxRuntime.jsxs("span",{className:t("inline-block bg-gradient-to-r from-gray-900 via-gray-100 to-gray-900 bg-clip-text text-transparent bg-[length:200%_100%]",!n&&"animate-[shine_var(--shine-speed)_linear_infinite]",a),style:{"--shine-speed":`${r}s`,backgroundImage:"linear-gradient(90deg, #374151 25%, #f3f4f6 50%, #374151 75%)"},children:[e,jsxRuntime.jsx("style",{children:`
2
+ @keyframes shine {
3
+ 0% { background-position: -200% 0; }
4
+ 100% { background-position: 200% 0; }
5
+ }
6
+ `})]})}var m=o;exports.ShinyText=o;exports.default=m;//# sourceMappingURL=index.js.map
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/shiny-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","ShinyText","text","disabled","speed","className","jsxs","jsx","shiny_text_default"],"mappings":"+KAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCMO,SAASG,CAAAA,CAAU,CACxB,IAAA,CAAAC,EACA,QAAA,CAAAC,CAAAA,CAAW,KAAA,CACX,KAAA,CAAAC,CAAAA,CAAQ,CAAA,CACR,SAAA,CAAAC,CAAAA,CAAY,EACd,CAAA,CAAmB,CACjB,OACEC,eAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAWT,CAAAA,CACT,2HACA,CAACM,CAAAA,EAAY,oDAAA,CACbE,CACF,CAAA,CACA,KAAA,CAAO,CACL,eAAA,CAAiB,CAAA,EAAGD,CAAK,CAAA,CAAA,CAAA,CACzB,eAAA,CAAiB,+DACnB,CAAA,CAEC,QAAA,CAAA,CAAAF,CAAAA,CACDK,eAAC,OAAA,CAAA,CAAO,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CAKN,CAAA,CAAA,CACJ,CAEJ,CAEA,IAAOC,CAAAA,CAAQP","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 { cn } from \"../utils/cn\";\r\n\r\ninterface ShinyTextProps {\r\n text: string;\r\n disabled?: boolean;\r\n speed?: number;\r\n className?: string;\r\n}\r\n\r\nexport function ShinyText({ \r\n text, \r\n disabled = false, \r\n speed = 5, \r\n className = \"\" \r\n}: ShinyTextProps) {\r\n return (\r\n <span \r\n className={cn(\r\n \"inline-block bg-gradient-to-r from-gray-900 via-gray-100 to-gray-900 bg-clip-text text-transparent bg-[length:200%_100%]\",\r\n !disabled && \"animate-[shine_var(--shine-speed)_linear_infinite]\",\r\n className\r\n )}\r\n style={{ \r\n \"--shine-speed\": `${speed}s`,\r\n backgroundImage: \"linear-gradient(90deg, #374151 25%, #f3f4f6 50%, #374151 75%)\"\r\n } as React.CSSProperties}\r\n >\r\n {text}\r\n <style>{`\r\n @keyframes shine {\r\n 0% { background-position: -200% 0; }\r\n 100% { background-position: 200% 0; }\r\n }\r\n `}</style>\r\n </span>\r\n );\r\n}\r\n\r\nexport default ShinyText;\r\n"]}
@@ -0,0 +1,7 @@
1
+ import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function t(...e){return twMerge(clsx(e))}function o({text:e,disabled:n=false,speed:r=5,className:a=""}){return jsxs("span",{className:t("inline-block bg-gradient-to-r from-gray-900 via-gray-100 to-gray-900 bg-clip-text text-transparent bg-[length:200%_100%]",!n&&"animate-[shine_var(--shine-speed)_linear_infinite]",a),style:{"--shine-speed":`${r}s`,backgroundImage:"linear-gradient(90deg, #374151 25%, #f3f4f6 50%, #374151 75%)"},children:[e,jsx("style",{children:`
2
+ @keyframes shine {
3
+ 0% { background-position: -200% 0; }
4
+ 100% { background-position: 200% 0; }
5
+ }
6
+ `})]})}var m=o;export{o as ShinyText,m as default};//# sourceMappingURL=index.mjs.map
7
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/shiny-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","ShinyText","text","disabled","speed","className","jsxs","jsx","shiny_text_default"],"mappings":"sGAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCMO,SAASG,CAAAA,CAAU,CACxB,IAAA,CAAAC,EACA,QAAA,CAAAC,CAAAA,CAAW,KAAA,CACX,KAAA,CAAAC,CAAAA,CAAQ,CAAA,CACR,SAAA,CAAAC,CAAAA,CAAY,EACd,CAAA,CAAmB,CACjB,OACEC,IAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAWT,CAAAA,CACT,2HACA,CAACM,CAAAA,EAAY,oDAAA,CACbE,CACF,CAAA,CACA,KAAA,CAAO,CACL,eAAA,CAAiB,CAAA,EAAGD,CAAK,CAAA,CAAA,CAAA,CACzB,eAAA,CAAiB,+DACnB,CAAA,CAEC,QAAA,CAAA,CAAAF,CAAAA,CACDK,IAAC,OAAA,CAAA,CAAO,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CAKN,CAAA,CAAA,CACJ,CAEJ,CAEA,IAAOC,CAAAA,CAAQP","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 { cn } from \"../utils/cn\";\r\n\r\ninterface ShinyTextProps {\r\n text: string;\r\n disabled?: boolean;\r\n speed?: number;\r\n className?: string;\r\n}\r\n\r\nexport function ShinyText({ \r\n text, \r\n disabled = false, \r\n speed = 5, \r\n className = \"\" \r\n}: ShinyTextProps) {\r\n return (\r\n <span \r\n className={cn(\r\n \"inline-block bg-gradient-to-r from-gray-900 via-gray-100 to-gray-900 bg-clip-text text-transparent bg-[length:200%_100%]\",\r\n !disabled && \"animate-[shine_var(--shine-speed)_linear_infinite]\",\r\n className\r\n )}\r\n style={{ \r\n \"--shine-speed\": `${speed}s`,\r\n backgroundImage: \"linear-gradient(90deg, #374151 25%, #f3f4f6 50%, #374151 75%)\"\r\n } as React.CSSProperties}\r\n >\r\n {text}\r\n <style>{`\r\n @keyframes shine {\r\n 0% { background-position: -200% 0; }\r\n 100% { background-position: 200% 0; }\r\n }\r\n `}</style>\r\n </span>\r\n );\r\n}\r\n\r\nexport default ShinyText;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function r(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function o({className:e,variant:t="text",width:n,height:a}){return jsxRuntime.jsx("div",{className:r("animate-pulse bg-zinc-200 dark:bg-zinc-800",{text:"h-4 rounded",circular:"rounded-full",rectangular:"rounded-lg"}[t],e),style:{width:n,height:a}})}var p=o;exports.Skeleton=o;exports.default=p;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/skeleton/index.tsx"],"names":["cn","inputs","twMerge","clsx","Skeleton","className","variant","width","height","jsx","skeleton_default"],"mappings":"+KAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCMO,SAASG,CAAAA,CAAS,CACvB,SAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CAAU,OACV,KAAA,CAAAC,CAAAA,CACA,MAAA,CAAAC,CACF,CAAA,CAAkB,CAOhB,OACEC,cAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWT,CAAAA,CACT,4CAAA,CATW,CACf,IAAA,CAAM,aAAA,CACN,QAAA,CAAU,eACV,WAAA,CAAa,YACf,CAAA,CAMeM,CAAO,CAAA,CAChBD,CACF,CAAA,CACA,KAAA,CAAO,CAAE,KAAA,CAAAE,CAAAA,CAAO,MAAA,CAAAC,CAAO,CAAA,CACzB,CAEJ,KAEOE,CAAAA,CAAQN","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 { cn } from \"../utils/cn\";\r\n\r\ninterface SkeletonProps {\r\n className?: string;\r\n variant?: \"text\" | \"circular\" | \"rectangular\";\r\n width?: string | number;\r\n height?: string | number;\r\n}\r\n\r\nexport function Skeleton({ \r\n className, \r\n variant = \"text\",\r\n width,\r\n height \r\n}: SkeletonProps) {\r\n const variants = {\r\n text: \"h-4 rounded\",\r\n circular: \"rounded-full\",\r\n rectangular: \"rounded-lg\",\r\n };\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"animate-pulse bg-zinc-200 dark:bg-zinc-800\",\r\n variants[variant],\r\n className\r\n )}\r\n style={{ width, height }}\r\n />\r\n );\r\n}\r\n\r\nexport default Skeleton;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function r(...e){return twMerge(clsx(e))}function o({className:e,variant:t="text",width:n,height:a}){return jsx("div",{className:r("animate-pulse bg-zinc-200 dark:bg-zinc-800",{text:"h-4 rounded",circular:"rounded-full",rectangular:"rounded-lg"}[t],e),style:{width:n,height:a}})}var p=o;export{o as Skeleton,p as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/skeleton/index.tsx"],"names":["cn","inputs","twMerge","clsx","Skeleton","className","variant","width","height","jsx","skeleton_default"],"mappings":"iGAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCMO,SAASG,CAAAA,CAAS,CACvB,SAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CAAU,OACV,KAAA,CAAAC,CAAAA,CACA,MAAA,CAAAC,CACF,CAAA,CAAkB,CAOhB,OACEC,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWT,CAAAA,CACT,4CAAA,CATW,CACf,IAAA,CAAM,aAAA,CACN,QAAA,CAAU,eACV,WAAA,CAAa,YACf,CAAA,CAMeM,CAAO,CAAA,CAChBD,CACF,CAAA,CACA,KAAA,CAAO,CAAE,KAAA,CAAAE,CAAAA,CAAO,MAAA,CAAAC,CAAO,CAAA,CACzB,CAEJ,KAEOE,CAAAA,CAAQN","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 { cn } from \"../utils/cn\";\r\n\r\ninterface SkeletonProps {\r\n className?: string;\r\n variant?: \"text\" | \"circular\" | \"rectangular\";\r\n width?: string | number;\r\n height?: string | number;\r\n}\r\n\r\nexport function Skeleton({ \r\n className, \r\n variant = \"text\",\r\n width,\r\n height \r\n}: SkeletonProps) {\r\n const variants = {\r\n text: \"h-4 rounded\",\r\n circular: \"rounded-full\",\r\n rectangular: \"rounded-lg\",\r\n };\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"animate-pulse bg-zinc-200 dark:bg-zinc-800\",\r\n variants[variant],\r\n className\r\n )}\r\n style={{ width, height }}\r\n />\r\n );\r\n}\r\n\r\nexport default Skeleton;\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 i(...t){return tailwindMerge.twMerge(clsx.clsx(t))}function c({text:t="Sliced Text",className:e="",containerClassName:n="",splitSpacing:a=2}){return jsxRuntime.jsxs(framerMotion.motion.div,{className:i("w-full text-center relative inline-block",n),whileHover:"hover",initial:"default",children:[jsxRuntime.jsx(framerMotion.motion.div,{className:i("absolute w-full text-4xl -ml-0.5",e),variants:{default:{clipPath:"inset(0 0 50% 0)",y:-a/2,opacity:1},hover:{clipPath:"inset(0 0 0 0)",y:0,opacity:0}},transition:{duration:.1},children:t}),jsxRuntime.jsx(framerMotion.motion.div,{className:i("absolute w-full text-4xl",e),variants:{default:{clipPath:"inset(50% 0 0 0)",y:a/2,opacity:1},hover:{clipPath:"inset(0 0 0 0)",y:0,opacity:1}},transition:{duration:.1},children:t}),jsxRuntime.jsx("div",{className:i("invisible text-4xl",e),children:t})]})}var x=c;exports.SlicedText=c;exports.default=x;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/sliced-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","SlicedText","text","className","containerClassName","splitSpacing","jsxs","motion","jsx","sliced_text_default"],"mappings":"qNAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCOO,SAASG,EAAW,CACzB,IAAA,CAAAC,CAAAA,CAAO,aAAA,CACP,UAAAC,CAAAA,CAAY,EAAA,CACZ,kBAAA,CAAAC,CAAAA,CAAqB,EAAA,CACrB,YAAA,CAAAC,CAAAA,CAAe,CACjB,EAAoB,CAClB,OACEC,eAAAA,CAACC,mBAAAA,CAAO,IAAP,CACC,SAAA,CAAWV,CAAAA,CAAG,0CAAA,CAA4CO,CAAkB,CAAA,CAC5E,UAAA,CAAW,OAAA,CACX,OAAA,CAAQ,UAER,QAAA,CAAA,CAAAI,cAAAA,CAACD,mBAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAWV,CAAAA,CAAG,kCAAA,CAAoCM,CAAS,EAC3D,QAAA,CAAU,CACR,OAAA,CAAS,CAAE,SAAU,kBAAA,CAAoB,CAAA,CAAG,CAACE,CAAAA,CAAe,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CAC1E,MAAO,CAAE,QAAA,CAAU,gBAAA,CAAkB,CAAA,CAAG,EAAG,OAAA,CAAS,CAAE,CACxD,CAAA,CACA,WAAY,CAAE,QAAA,CAAU,EAAI,CAAA,CAE3B,SAAAH,CAAAA,CACH,CAAA,CACAM,cAAAA,CAACD,mBAAAA,CAAO,IAAP,CACC,SAAA,CAAWV,CAAAA,CAAG,0BAAA,CAA4BM,CAAS,CAAA,CACnD,QAAA,CAAU,CACR,OAAA,CAAS,CAAE,QAAA,CAAU,kBAAA,CAAoB,CAAA,CAAGE,CAAAA,CAAe,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CACzE,MAAO,CAAE,QAAA,CAAU,gBAAA,CAAkB,CAAA,CAAG,EAAG,OAAA,CAAS,CAAE,CACxD,CAAA,CACA,WAAY,CAAE,QAAA,CAAU,EAAI,CAAA,CAE3B,SAAAH,CAAAA,CACH,CAAA,CACAM,cAAAA,CAAC,KAAA,CAAA,CAAI,UAAWX,CAAAA,CAAG,oBAAA,CAAsBM,CAAS,CAAA,CAAI,SAAAD,CAAAA,CAAK,CAAA,CAAA,CAC7D,CAEJ,KAEOO,CAAAA,CAAQR","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 SlicedTextProps {\r\n text: string;\r\n className?: string;\r\n containerClassName?: string;\r\n splitSpacing?: number;\r\n}\r\n\r\nexport function SlicedText({\r\n text = \"Sliced Text\",\r\n className = \"\",\r\n containerClassName = \"\",\r\n splitSpacing = 2,\r\n}: SlicedTextProps) {\r\n return (\r\n <motion.div\r\n className={cn(\"w-full text-center relative inline-block\", containerClassName)}\r\n whileHover=\"hover\"\r\n initial=\"default\"\r\n >\r\n <motion.div\r\n className={cn(\"absolute w-full text-4xl -ml-0.5\", className)}\r\n variants={{\r\n default: { clipPath: \"inset(0 0 50% 0)\", y: -splitSpacing / 2, opacity: 1 },\r\n hover: { clipPath: \"inset(0 0 0 0)\", y: 0, opacity: 0 },\r\n }}\r\n transition={{ duration: 0.1 }}\r\n >\r\n {text}\r\n </motion.div>\r\n <motion.div\r\n className={cn(\"absolute w-full text-4xl\", className)}\r\n variants={{\r\n default: { clipPath: \"inset(50% 0 0 0)\", y: splitSpacing / 2, opacity: 1 },\r\n hover: { clipPath: \"inset(0 0 0 0)\", y: 0, opacity: 1 },\r\n }}\r\n transition={{ duration: 0.1 }}\r\n >\r\n {text}\r\n </motion.div>\r\n <div className={cn(\"invisible text-4xl\", className)}>{text}</div>\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport default SlicedText;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 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 c({text:t="Sliced Text",className:e="",containerClassName:n="",splitSpacing:a=2}){return jsxs(motion.div,{className:i("w-full text-center relative inline-block",n),whileHover:"hover",initial:"default",children:[jsx(motion.div,{className:i("absolute w-full text-4xl -ml-0.5",e),variants:{default:{clipPath:"inset(0 0 50% 0)",y:-a/2,opacity:1},hover:{clipPath:"inset(0 0 0 0)",y:0,opacity:0}},transition:{duration:.1},children:t}),jsx(motion.div,{className:i("absolute w-full text-4xl",e),variants:{default:{clipPath:"inset(50% 0 0 0)",y:a/2,opacity:1},hover:{clipPath:"inset(0 0 0 0)",y:0,opacity:1}},transition:{duration:.1},children:t}),jsx("div",{className:i("invisible text-4xl",e),children:t})]})}var x=c;export{c as SlicedText,x as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/sliced-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","SlicedText","text","className","containerClassName","splitSpacing","jsxs","motion","jsx","sliced_text_default"],"mappings":"yIAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCOO,SAASG,EAAW,CACzB,IAAA,CAAAC,CAAAA,CAAO,aAAA,CACP,UAAAC,CAAAA,CAAY,EAAA,CACZ,kBAAA,CAAAC,CAAAA,CAAqB,EAAA,CACrB,YAAA,CAAAC,CAAAA,CAAe,CACjB,EAAoB,CAClB,OACEC,IAAAA,CAACC,MAAAA,CAAO,IAAP,CACC,SAAA,CAAWV,CAAAA,CAAG,0CAAA,CAA4CO,CAAkB,CAAA,CAC5E,UAAA,CAAW,OAAA,CACX,OAAA,CAAQ,UAER,QAAA,CAAA,CAAAI,GAAAA,CAACD,MAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAWV,CAAAA,CAAG,kCAAA,CAAoCM,CAAS,EAC3D,QAAA,CAAU,CACR,OAAA,CAAS,CAAE,SAAU,kBAAA,CAAoB,CAAA,CAAG,CAACE,CAAAA,CAAe,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CAC1E,MAAO,CAAE,QAAA,CAAU,gBAAA,CAAkB,CAAA,CAAG,EAAG,OAAA,CAAS,CAAE,CACxD,CAAA,CACA,WAAY,CAAE,QAAA,CAAU,EAAI,CAAA,CAE3B,SAAAH,CAAAA,CACH,CAAA,CACAM,GAAAA,CAACD,MAAAA,CAAO,IAAP,CACC,SAAA,CAAWV,CAAAA,CAAG,0BAAA,CAA4BM,CAAS,CAAA,CACnD,QAAA,CAAU,CACR,OAAA,CAAS,CAAE,QAAA,CAAU,kBAAA,CAAoB,CAAA,CAAGE,CAAAA,CAAe,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CACzE,MAAO,CAAE,QAAA,CAAU,gBAAA,CAAkB,CAAA,CAAG,EAAG,OAAA,CAAS,CAAE,CACxD,CAAA,CACA,WAAY,CAAE,QAAA,CAAU,EAAI,CAAA,CAE3B,SAAAH,CAAAA,CACH,CAAA,CACAM,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAWX,CAAAA,CAAG,oBAAA,CAAsBM,CAAS,CAAA,CAAI,SAAAD,CAAAA,CAAK,CAAA,CAAA,CAC7D,CAEJ,KAEOO,CAAAA,CAAQR","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 SlicedTextProps {\r\n text: string;\r\n className?: string;\r\n containerClassName?: string;\r\n splitSpacing?: number;\r\n}\r\n\r\nexport function SlicedText({\r\n text = \"Sliced Text\",\r\n className = \"\",\r\n containerClassName = \"\",\r\n splitSpacing = 2,\r\n}: SlicedTextProps) {\r\n return (\r\n <motion.div\r\n className={cn(\"w-full text-center relative inline-block\", containerClassName)}\r\n whileHover=\"hover\"\r\n initial=\"default\"\r\n >\r\n <motion.div\r\n className={cn(\"absolute w-full text-4xl -ml-0.5\", className)}\r\n variants={{\r\n default: { clipPath: \"inset(0 0 50% 0)\", y: -splitSpacing / 2, opacity: 1 },\r\n hover: { clipPath: \"inset(0 0 0 0)\", y: 0, opacity: 0 },\r\n }}\r\n transition={{ duration: 0.1 }}\r\n >\r\n {text}\r\n </motion.div>\r\n <motion.div\r\n className={cn(\"absolute w-full text-4xl\", className)}\r\n variants={{\r\n default: { clipPath: \"inset(50% 0 0 0)\", y: splitSpacing / 2, opacity: 1 },\r\n hover: { clipPath: \"inset(0 0 0 0)\", y: 0, opacity: 1 },\r\n }}\r\n transition={{ duration: 0.1 }}\r\n >\r\n {text}\r\n </motion.div>\r\n <div className={cn(\"invisible text-4xl\", className)}>{text}</div>\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport default SlicedText;\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(...o){return tailwindMerge.twMerge(clsx.clsx(o))}function y({children:o,className:l,variant:e="primary",size:d="md",slideText:c="Go!",onClick:m,...u}){let[t,a]=react.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 jsxRuntime.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:[jsxRuntime.jsx(framerMotion.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"}}),jsxRuntime.jsx(framerMotion.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}),jsxRuntime.jsxs(framerMotion.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,jsxRuntime.jsx("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M14 5l7 7m0 0l-7 7m7-7H3"})})]})]})}var C=y;exports.SlideButton=y;exports.default=C;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.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":"4OAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,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,cAAAA,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,eAAAA,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,cAAAA,CAACC,mBAAAA,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,cAAAA,CAACC,mBAAAA,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,eAAAA,CAACE,mBAAAA,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,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACjE,QAAA,CAAAA,cAAAA,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.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 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"]}