bynana-ui 1.1.0 → 1.4.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 (217) 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/ascii-text/index.js +3 -0
  10. package/dist/ascii-text/index.js.map +1 -0
  11. package/dist/ascii-text/index.mjs +3 -0
  12. package/dist/ascii-text/index.mjs.map +1 -0
  13. package/dist/attract-button/index.js +2 -0
  14. package/dist/attract-button/index.js.map +1 -0
  15. package/dist/attract-button/index.mjs +2 -0
  16. package/dist/attract-button/index.mjs.map +1 -0
  17. package/dist/blur-fade/index.js +2 -0
  18. package/dist/blur-fade/index.js.map +1 -0
  19. package/dist/blur-fade/index.mjs +2 -0
  20. package/dist/blur-fade/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/click-spark/index.js +2 -0
  34. package/dist/click-spark/index.js.map +1 -0
  35. package/dist/click-spark/index.mjs +2 -0
  36. package/dist/click-spark/index.mjs.map +1 -0
  37. package/dist/command-button/index.js +2 -0
  38. package/dist/command-button/index.js.map +1 -0
  39. package/dist/command-button/index.mjs +2 -0
  40. package/dist/command-button/index.mjs.map +1 -0
  41. package/dist/copy-button/index.js +2 -0
  42. package/dist/copy-button/index.js.map +1 -0
  43. package/dist/copy-button/index.mjs +2 -0
  44. package/dist/copy-button/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/elastic-text/index.js +2 -0
  62. package/dist/elastic-text/index.js.map +1 -0
  63. package/dist/elastic-text/index.mjs +2 -0
  64. package/dist/elastic-text/index.mjs.map +1 -0
  65. package/dist/falling-text/index.js +2 -0
  66. package/dist/falling-text/index.js.map +1 -0
  67. package/dist/falling-text/index.mjs +2 -0
  68. package/dist/falling-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/float-effect/index.js +2 -0
  74. package/dist/float-effect/index.js.map +1 -0
  75. package/dist/float-effect/index.mjs +2 -0
  76. package/dist/float-effect/index.mjs.map +1 -0
  77. package/dist/glow-effect/index.js +2 -0
  78. package/dist/glow-effect/index.js.map +1 -0
  79. package/dist/glow-effect/index.mjs +2 -0
  80. package/dist/glow-effect/index.mjs.map +1 -0
  81. package/dist/glowing-text/index.js +2 -0
  82. package/dist/glowing-text/index.js.map +1 -0
  83. package/dist/glowing-text/index.mjs +2 -0
  84. package/dist/glowing-text/index.mjs.map +1 -0
  85. package/dist/hamburger-basic/index.js +2 -0
  86. package/dist/hamburger-basic/index.js.map +1 -0
  87. package/dist/hamburger-basic/index.mjs +2 -0
  88. package/dist/hamburger-basic/index.mjs.map +1 -0
  89. package/dist/hamburger-spin/index.js +2 -0
  90. package/dist/hamburger-spin/index.js.map +1 -0
  91. package/dist/hamburger-spin/index.mjs +2 -0
  92. package/dist/hamburger-spin/index.mjs.map +1 -0
  93. package/dist/index.js +34 -3
  94. package/dist/index.js.map +1 -1
  95. package/dist/index.mjs +34 -3
  96. package/dist/index.mjs.map +1 -1
  97. package/dist/infinite-scroll/index.js +11 -0
  98. package/dist/infinite-scroll/index.js.map +1 -0
  99. package/dist/infinite-scroll/index.mjs +11 -0
  100. package/dist/infinite-scroll/index.mjs.map +1 -0
  101. package/dist/input/index.js +2 -0
  102. package/dist/input/index.js.map +1 -0
  103. package/dist/input/index.mjs +2 -0
  104. package/dist/input/index.mjs.map +1 -0
  105. package/dist/input-otp/index.js +2 -0
  106. package/dist/input-otp/index.js.map +1 -0
  107. package/dist/input-otp/index.mjs +2 -0
  108. package/dist/input-otp/index.mjs.map +1 -0
  109. package/dist/loading-flower/index.js +7 -0
  110. package/dist/loading-flower/index.js.map +1 -0
  111. package/dist/loading-flower/index.mjs +7 -0
  112. package/dist/loading-flower/index.mjs.map +1 -0
  113. package/dist/loading-geometric/index.js +7 -0
  114. package/dist/loading-geometric/index.js.map +1 -0
  115. package/dist/loading-geometric/index.mjs +7 -0
  116. package/dist/loading-geometric/index.mjs.map +1 -0
  117. package/dist/loading-morph/index.js +5 -0
  118. package/dist/loading-morph/index.js.map +1 -0
  119. package/dist/loading-morph/index.mjs +5 -0
  120. package/dist/loading-morph/index.mjs.map +1 -0
  121. package/dist/loading-rings/index.js +4 -0
  122. package/dist/loading-rings/index.js.map +1 -0
  123. package/dist/loading-rings/index.mjs +4 -0
  124. package/dist/loading-rings/index.mjs.map +1 -0
  125. package/dist/loading-text/index.js +6 -0
  126. package/dist/loading-text/index.js.map +1 -0
  127. package/dist/loading-text/index.mjs +6 -0
  128. package/dist/loading-text/index.mjs.map +1 -0
  129. package/dist/loading-words/index.js +4 -0
  130. package/dist/loading-words/index.js.map +1 -0
  131. package/dist/loading-words/index.mjs +4 -0
  132. package/dist/loading-words/index.mjs.map +1 -0
  133. package/dist/modal/index.js +2 -0
  134. package/dist/modal/index.js.map +1 -0
  135. package/dist/modal/index.mjs +2 -0
  136. package/dist/modal/index.mjs.map +1 -0
  137. package/dist/morph-text/index.js +2 -0
  138. package/dist/morph-text/index.js.map +1 -0
  139. package/dist/morph-text/index.mjs +2 -0
  140. package/dist/morph-text/index.mjs.map +1 -0
  141. package/dist/multi-step-loader/index.js +2 -0
  142. package/dist/multi-step-loader/index.js.map +1 -0
  143. package/dist/multi-step-loader/index.mjs +2 -0
  144. package/dist/multi-step-loader/index.mjs.map +1 -0
  145. package/dist/particle-button/index.js +2 -0
  146. package/dist/particle-button/index.js.map +1 -0
  147. package/dist/particle-button/index.mjs +2 -0
  148. package/dist/particle-button/index.mjs.map +1 -0
  149. package/dist/perspective-text/index.js +2 -0
  150. package/dist/perspective-text/index.js.map +1 -0
  151. package/dist/perspective-text/index.mjs +2 -0
  152. package/dist/perspective-text/index.mjs.map +1 -0
  153. package/dist/pixel-card/index.js +2 -0
  154. package/dist/pixel-card/index.js.map +1 -0
  155. package/dist/pixel-card/index.mjs +2 -0
  156. package/dist/pixel-card/index.mjs.map +1 -0
  157. package/dist/radio/index.js +2 -0
  158. package/dist/radio/index.js.map +1 -0
  159. package/dist/radio/index.mjs +2 -0
  160. package/dist/radio/index.mjs.map +1 -0
  161. package/dist/reveal-text/index.js +2 -0
  162. package/dist/reveal-text/index.js.map +1 -0
  163. package/dist/reveal-text/index.mjs +2 -0
  164. package/dist/reveal-text/index.mjs.map +1 -0
  165. package/dist/select/index.js +2 -0
  166. package/dist/select/index.js.map +1 -0
  167. package/dist/select/index.mjs +2 -0
  168. package/dist/select/index.mjs.map +1 -0
  169. package/dist/sliced-text/index.js +2 -0
  170. package/dist/sliced-text/index.js.map +1 -0
  171. package/dist/sliced-text/index.mjs +2 -0
  172. package/dist/sliced-text/index.mjs.map +1 -0
  173. package/dist/smooth-cursor/index.js +2 -0
  174. package/dist/smooth-cursor/index.js.map +1 -0
  175. package/dist/smooth-cursor/index.mjs +2 -0
  176. package/dist/smooth-cursor/index.mjs.map +1 -0
  177. package/dist/split-text/index.js +2 -0
  178. package/dist/split-text/index.js.map +1 -0
  179. package/dist/split-text/index.mjs +2 -0
  180. package/dist/split-text/index.mjs.map +1 -0
  181. package/dist/stepper/index.js +2 -0
  182. package/dist/stepper/index.js.map +1 -0
  183. package/dist/stepper/index.mjs +2 -0
  184. package/dist/stepper/index.mjs.map +1 -0
  185. package/dist/tabs/index.js +2 -0
  186. package/dist/tabs/index.js.map +1 -0
  187. package/dist/tabs/index.mjs +2 -0
  188. package/dist/tabs/index.mjs.map +1 -0
  189. package/dist/terminal/index.js +2 -0
  190. package/dist/terminal/index.js.map +1 -0
  191. package/dist/terminal/index.mjs +2 -0
  192. package/dist/terminal/index.mjs.map +1 -0
  193. package/dist/textarea/index.js +2 -0
  194. package/dist/textarea/index.js.map +1 -0
  195. package/dist/textarea/index.mjs +2 -0
  196. package/dist/textarea/index.mjs.map +1 -0
  197. package/dist/tilted-card/index.js +2 -0
  198. package/dist/tilted-card/index.js.map +1 -0
  199. package/dist/tilted-card/index.mjs +2 -0
  200. package/dist/tilted-card/index.mjs.map +1 -0
  201. package/dist/toolbar/index.js +2 -0
  202. package/dist/toolbar/index.js.map +1 -0
  203. package/dist/toolbar/index.mjs +2 -0
  204. package/dist/toolbar/index.mjs.map +1 -0
  205. package/dist/tooltip-animated/index.js +2 -0
  206. package/dist/tooltip-animated/index.js.map +1 -0
  207. package/dist/tooltip-animated/index.mjs +2 -0
  208. package/dist/tooltip-animated/index.mjs.map +1 -0
  209. package/dist/tooltip-minimal/index.js +2 -0
  210. package/dist/tooltip-minimal/index.js.map +1 -0
  211. package/dist/tooltip-minimal/index.mjs +2 -0
  212. package/dist/tooltip-minimal/index.mjs.map +1 -0
  213. package/dist/true-focus/index.js +2 -0
  214. package/dist/true-focus/index.js.map +1 -0
  215. package/dist/true-focus/index.mjs +2 -0
  216. package/dist/true-focus/index.mjs.map +1 -0
  217. package/package.json +108 -275
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function a(...i){return tailwindMerge.twMerge(clsx.clsx(i))}function h({items:i,className:l,allowMultiple:m=false}){let[n,r]=react.useState([]),d=t=>{r(m?e=>e.includes(t)?e.filter(u=>u!==t):[...e,t]:e=>e.includes(t)?[]:[t]);};return jsxRuntime.jsx("div",{className:a("w-full space-y-2",l),children:i.map((t,e)=>jsxRuntime.jsxs("div",{className:"border border-zinc-200 dark:border-zinc-800 rounded-lg overflow-hidden",children:[jsxRuntime.jsxs("button",{onClick:()=>d(e),className:"w-full px-4 py-3 flex items-center justify-between text-left bg-zinc-50 dark:bg-zinc-900 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors",children:[jsxRuntime.jsx("span",{className:"font-medium",children:t.title}),jsxRuntime.jsx(framerMotion.motion.svg,{animate:{rotate:n.includes(e)?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:n.includes(e)&&jsxRuntime.jsx(framerMotion.motion.div,{initial:{height:0,opacity:0},animate:{height:"auto",opacity:1},exit:{height:0,opacity:0},transition:{duration:.2},children:jsxRuntime.jsx("div",{className:"px-4 py-3 bg-white dark:bg-zinc-950",children:t.content})})})]},e))})}var A=h;exports.Accordion=h;exports.default=A;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/accordion/index.tsx"],"names":["cn","inputs","twMerge","clsx","Accordion","items","className","allowMultiple","openItems","setOpenItems","useState","toggleItem","index","prev","i","jsx","item","jsxs","motion","AnimatePresence","accordion_default"],"mappings":"4OAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCYO,SAASG,CAAAA,CAAU,CAAE,KAAA,CAAAC,CAAAA,CAAO,SAAA,CAAAC,EAAW,aAAA,CAAAC,CAAAA,CAAgB,KAAM,CAAA,CAAmB,CACrF,GAAM,CAACC,CAAAA,CAAWC,CAAY,CAAA,CAAIC,cAAAA,CAAmB,EAAE,EAEjDC,CAAAA,CAAcC,CAAAA,EAAkB,CAElCH,CAAAA,CADEF,CAAAA,CACYM,CAAAA,EACZA,EAAK,QAAA,CAASD,CAAK,CAAA,CAAIC,CAAAA,CAAK,MAAA,CAAQC,CAAAA,EAAMA,IAAMF,CAAK,CAAA,CAAI,CAAC,GAAGC,CAAAA,CAAMD,CAAK,EAG5DC,CAAAA,EAAUA,CAAAA,CAAK,QAAA,CAASD,CAAK,CAAA,CAAI,GAAK,CAACA,CAAK,CAF1D,EAIJ,CAAA,CAEA,OACEG,eAAC,KAAA,CAAA,CAAI,SAAA,CAAWf,CAAAA,CAAG,kBAAA,CAAoBM,CAAS,CAAA,CAC7C,SAAAD,CAAAA,CAAM,GAAA,CAAI,CAACW,CAAAA,CAAMJ,CAAAA,GAChBK,eAAAA,CAAC,OAEC,SAAA,CAAU,wEAAA,CAEV,QAAA,CAAA,CAAAA,eAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAMN,CAAAA,CAAWC,CAAK,CAAA,CAC/B,SAAA,CAAU,qJAAA,CAEV,QAAA,CAAA,CAAAG,eAAC,MAAA,CAAA,CAAK,SAAA,CAAU,aAAA,CAAe,QAAA,CAAAC,CAAAA,CAAK,KAAA,CAAM,EAC1CD,cAAAA,CAACG,mBAAAA,CAAO,GAAA,CAAP,CACC,OAAA,CAAS,CAAE,OAAQV,CAAAA,CAAU,QAAA,CAASI,CAAK,CAAA,CAAI,GAAA,CAAM,CAAE,EACvD,UAAA,CAAY,CAAE,QAAA,CAAU,EAAI,CAAA,CAC5B,SAAA,CAAU,UACV,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,OAAA,CAAQ,WAAA,CAER,SAAAG,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,YAAa,CAAA,CAAG,CAAA,CAAE,gBAAA,CAAiB,CAAA,CACxF,CAAA,CAAA,CACF,CAAA,CACAA,eAACI,4BAAAA,CAAA,CACE,QAAA,CAAAX,CAAAA,CAAU,QAAA,CAASI,CAAK,GACvBG,cAAAA,CAACG,mBAAAA,CAAO,GAAA,CAAP,CACC,OAAA,CAAS,CAAE,OAAQ,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CACjC,OAAA,CAAS,CAAE,OAAQ,MAAA,CAAQ,OAAA,CAAS,CAAE,CAAA,CACtC,IAAA,CAAM,CAAE,OAAQ,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CAC9B,UAAA,CAAY,CAAE,SAAU,EAAI,CAAA,CAE5B,QAAA,CAAAH,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sCAAuC,QAAA,CAAAC,CAAAA,CAAK,OAAA,CAAQ,CAAA,CACrE,CAAA,CAEJ,CAAA,CAAA,CAAA,CA9BKJ,CA+BP,CACD,CAAA,CACH,CAEJ,CAEA,IAAOQ,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, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface AccordionItem {\r\n title: string;\r\n content: React.ReactNode;\r\n}\r\n\r\ninterface AccordionProps {\r\n items: AccordionItem[];\r\n className?: string;\r\n allowMultiple?: boolean;\r\n}\r\n\r\nexport function Accordion({ items, className, allowMultiple = false }: AccordionProps) {\r\n const [openItems, setOpenItems] = useState<number[]>([]);\r\n\r\n const toggleItem = (index: number) => {\r\n if (allowMultiple) {\r\n setOpenItems((prev) =>\r\n prev.includes(index) ? prev.filter((i) => i !== index) : [...prev, index]\r\n );\r\n } else {\r\n setOpenItems((prev) => (prev.includes(index) ? [] : [index]));\r\n }\r\n };\r\n\r\n return (\r\n <div className={cn(\"w-full space-y-2\", className)}>\r\n {items.map((item, index) => (\r\n <div\r\n key={index}\r\n className=\"border border-zinc-200 dark:border-zinc-800 rounded-lg overflow-hidden\"\r\n >\r\n <button\r\n onClick={() => toggleItem(index)}\r\n className=\"w-full px-4 py-3 flex items-center justify-between text-left bg-zinc-50 dark:bg-zinc-900 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors\"\r\n >\r\n <span className=\"font-medium\">{item.title}</span>\r\n <motion.svg\r\n animate={{ rotate: openItems.includes(index) ? 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 {openItems.includes(index) && (\r\n <motion.div\r\n initial={{ height: 0, opacity: 0 }}\r\n animate={{ height: \"auto\", opacity: 1 }}\r\n exit={{ height: 0, opacity: 0 }}\r\n transition={{ duration: 0.2 }}\r\n >\r\n <div className=\"px-4 py-3 bg-white dark:bg-zinc-950\">{item.content}</div>\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default Accordion;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useState}from'react';import {motion,AnimatePresence}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx,jsxs}from'react/jsx-runtime';function a(...i){return twMerge(clsx(i))}function h({items:i,className:l,allowMultiple:m=false}){let[n,r]=useState([]),d=t=>{r(m?e=>e.includes(t)?e.filter(u=>u!==t):[...e,t]:e=>e.includes(t)?[]:[t]);};return jsx("div",{className:a("w-full space-y-2",l),children:i.map((t,e)=>jsxs("div",{className:"border border-zinc-200 dark:border-zinc-800 rounded-lg overflow-hidden",children:[jsxs("button",{onClick:()=>d(e),className:"w-full px-4 py-3 flex items-center justify-between text-left bg-zinc-50 dark:bg-zinc-900 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors",children:[jsx("span",{className:"font-medium",children:t.title}),jsx(motion.svg,{animate:{rotate:n.includes(e)?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:n.includes(e)&&jsx(motion.div,{initial:{height:0,opacity:0},animate:{height:"auto",opacity:1},exit:{height:0,opacity:0},transition:{duration:.2},children:jsx("div",{className:"px-4 py-3 bg-white dark:bg-zinc-950",children:t.content})})})]},e))})}var A=h;export{h as Accordion,A as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/accordion/index.tsx"],"names":["cn","inputs","twMerge","clsx","Accordion","items","className","allowMultiple","openItems","setOpenItems","useState","toggleItem","index","prev","i","jsx","item","jsxs","motion","AnimatePresence","accordion_default"],"mappings":"sLAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCYO,SAASG,CAAAA,CAAU,CAAE,KAAA,CAAAC,CAAAA,CAAO,SAAA,CAAAC,EAAW,aAAA,CAAAC,CAAAA,CAAgB,KAAM,CAAA,CAAmB,CACrF,GAAM,CAACC,CAAAA,CAAWC,CAAY,CAAA,CAAIC,QAAAA,CAAmB,EAAE,EAEjDC,CAAAA,CAAcC,CAAAA,EAAkB,CAElCH,CAAAA,CADEF,CAAAA,CACYM,CAAAA,EACZA,EAAK,QAAA,CAASD,CAAK,CAAA,CAAIC,CAAAA,CAAK,MAAA,CAAQC,CAAAA,EAAMA,IAAMF,CAAK,CAAA,CAAI,CAAC,GAAGC,CAAAA,CAAMD,CAAK,EAG5DC,CAAAA,EAAUA,CAAAA,CAAK,QAAA,CAASD,CAAK,CAAA,CAAI,GAAK,CAACA,CAAK,CAF1D,EAIJ,CAAA,CAEA,OACEG,IAAC,KAAA,CAAA,CAAI,SAAA,CAAWf,CAAAA,CAAG,kBAAA,CAAoBM,CAAS,CAAA,CAC7C,SAAAD,CAAAA,CAAM,GAAA,CAAI,CAACW,CAAAA,CAAMJ,CAAAA,GAChBK,IAAAA,CAAC,OAEC,SAAA,CAAU,wEAAA,CAEV,QAAA,CAAA,CAAAA,IAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAMN,CAAAA,CAAWC,CAAK,CAAA,CAC/B,SAAA,CAAU,qJAAA,CAEV,QAAA,CAAA,CAAAG,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,aAAA,CAAe,QAAA,CAAAC,CAAAA,CAAK,KAAA,CAAM,EAC1CD,GAAAA,CAACG,MAAAA,CAAO,GAAA,CAAP,CACC,OAAA,CAAS,CAAE,OAAQV,CAAAA,CAAU,QAAA,CAASI,CAAK,CAAA,CAAI,GAAA,CAAM,CAAE,EACvD,UAAA,CAAY,CAAE,QAAA,CAAU,EAAI,CAAA,CAC5B,SAAA,CAAU,UACV,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,OAAA,CAAQ,WAAA,CAER,SAAAG,GAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,YAAa,CAAA,CAAG,CAAA,CAAE,gBAAA,CAAiB,CAAA,CACxF,CAAA,CAAA,CACF,CAAA,CACAA,IAACI,eAAAA,CAAA,CACE,QAAA,CAAAX,CAAAA,CAAU,QAAA,CAASI,CAAK,GACvBG,GAAAA,CAACG,MAAAA,CAAO,GAAA,CAAP,CACC,OAAA,CAAS,CAAE,OAAQ,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CACjC,OAAA,CAAS,CAAE,OAAQ,MAAA,CAAQ,OAAA,CAAS,CAAE,CAAA,CACtC,IAAA,CAAM,CAAE,OAAQ,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CAC9B,UAAA,CAAY,CAAE,SAAU,EAAI,CAAA,CAE5B,QAAA,CAAAH,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sCAAuC,QAAA,CAAAC,CAAAA,CAAK,OAAA,CAAQ,CAAA,CACrE,CAAA,CAEJ,CAAA,CAAA,CAAA,CA9BKJ,CA+BP,CACD,CAAA,CACH,CAEJ,CAEA,IAAOQ,CAAAA,CAAQhB","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { motion, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface AccordionItem {\r\n title: string;\r\n content: React.ReactNode;\r\n}\r\n\r\ninterface AccordionProps {\r\n items: AccordionItem[];\r\n className?: string;\r\n allowMultiple?: boolean;\r\n}\r\n\r\nexport function Accordion({ items, className, allowMultiple = false }: AccordionProps) {\r\n const [openItems, setOpenItems] = useState<number[]>([]);\r\n\r\n const toggleItem = (index: number) => {\r\n if (allowMultiple) {\r\n setOpenItems((prev) =>\r\n prev.includes(index) ? prev.filter((i) => i !== index) : [...prev, index]\r\n );\r\n } else {\r\n setOpenItems((prev) => (prev.includes(index) ? [] : [index]));\r\n }\r\n };\r\n\r\n return (\r\n <div className={cn(\"w-full space-y-2\", className)}>\r\n {items.map((item, index) => (\r\n <div\r\n key={index}\r\n className=\"border border-zinc-200 dark:border-zinc-800 rounded-lg overflow-hidden\"\r\n >\r\n <button\r\n onClick={() => toggleItem(index)}\r\n className=\"w-full px-4 py-3 flex items-center justify-between text-left bg-zinc-50 dark:bg-zinc-900 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors\"\r\n >\r\n <span className=\"font-medium\">{item.title}</span>\r\n <motion.svg\r\n animate={{ rotate: openItems.includes(index) ? 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 {openItems.includes(index) && (\r\n <motion.div\r\n initial={{ height: 0, opacity: 0 }}\r\n animate={{ height: \"auto\", opacity: 1 }}\r\n exit={{ height: 0, opacity: 0 }}\r\n transition={{ duration: 0.2 }}\r\n >\r\n <div className=\"px-4 py-3 bg-white dark:bg-zinc-950\">{item.content}</div>\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default Accordion;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var m=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var m__default=/*#__PURE__*/_interopDefault(m);function o(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function h({className:e="",close:r=false,children:l,onClose:s}){let[a,n]=m__default.default.useState(true);if(!a)return null;let i=()=>{n(false),s?.();};return jsxRuntime.jsx("div",{className:o("min-h-[400px] w-full flex items-center justify-center p-4",e),children:jsxRuntime.jsx("div",{className:"flex flex-col items-center w-full lg:max-w-[75%] gap-6",children:jsxRuntime.jsxs("div",{className:"relative flex items-center gap-3 rounded-lg border border-zinc-300 dark:border-zinc-700 bg-transparent px-4 py-3 shadow-sm w-full max-w-md transition-all duration-200",children:[l,r&&jsxRuntime.jsx("button",{onClick:i,className:"absolute top-2 right-2 text-gray-500 hover:text-gray-700 dark:text-white/60 dark:hover:text-white transition-colors",children:jsxRuntime.jsx("svg",{className:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]})})})}function N({children:e,className:r}){return jsxRuntime.jsx("div",{className:o("text-primary flex-shrink-0",r),children:e})}function b({children:e,className:r}){return jsxRuntime.jsx("span",{className:o("text-foreground font-medium text-sm flex-1",r),children:e})}function A({children:e,className:r}){return jsxRuntime.jsx("div",{className:o("flex items-center gap-2",r),children:e})}exports.Alert=h;exports.AlertIcon=N;exports.AlertTitle=b;exports.AlertToolbar=A;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/alert/index.tsx"],"names":["cn","inputs","twMerge","clsx","Alert","className","close","children","onClose","isVisible","setIsVisible","React","handleClose","jsx","jsxs","AlertIcon","AlertTitle","AlertToolbar"],"mappings":"yPAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,sBAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCsBO,SAASG,CAAAA,CAAM,CAAE,SAAA,CAAAC,CAAAA,CAAY,GAAI,KAAA,CAAAC,CAAAA,CAAQ,MAAO,QAAA,CAAAC,CAAAA,CAAU,QAAAC,CAAQ,CAAA,CAAe,CACtF,GAAM,CAACC,CAAAA,CAAWC,CAAY,EAAIC,kBAAAA,CAAM,QAAA,CAAS,IAAI,CAAA,CAErD,GAAI,CAACF,CAAAA,CAAW,OAAO,KAEvB,IAAMG,CAAAA,CAAc,IAAM,CACxBF,CAAAA,CAAa,KAAK,CAAA,CAClBF,CAAAA,KACF,CAAA,CAEA,OACEK,eAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,EAAG,2DAAA,CAA6DK,CAAS,EACvF,QAAA,CAAAQ,cAAAA,CAAC,OAAI,SAAA,CAAU,wDAAA,CACb,SAAAC,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,wKAAA,CACZ,QAAA,CAAA,CAAAP,EACAD,CAAAA,EACCO,cAAAA,CAAC,UACC,OAAA,CAASD,CAAAA,CACT,SAAA,CAAU,qHAAA,CAEV,SAAAC,cAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,SAAA,CAAU,IAAA,CAAK,OAAO,OAAA,CAAQ,WAAA,CAAY,OAAO,cAAA,CAC9D,QAAA,CAAAA,eAAC,MAAA,CAAA,CAAK,aAAA,CAAc,QAAQ,cAAA,CAAe,OAAA,CAAQ,YAAa,CAAA,CAAG,CAAA,CAAE,uBAAuB,CAAA,CAC9F,CAAA,CACF,GAEJ,CAAA,CACF,CAAA,CACF,CAEJ,CAEO,SAASE,EAAU,CAAE,QAAA,CAAAR,EAAU,SAAA,CAAAF,CAAU,EAAmB,CACjE,OAAOQ,eAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,EAAG,4BAAA,CAA8BK,CAAS,CAAA,CAAI,QAAA,CAAAE,EAAS,CAChF,CAEO,SAASS,CAAAA,CAAW,CAAE,SAAAT,CAAAA,CAAU,SAAA,CAAAF,CAAU,CAAA,CAAoB,CACnE,OAAOQ,cAAAA,CAAC,MAAA,CAAA,CAAK,UAAWb,CAAAA,CAAG,4CAAA,CAA8CK,CAAS,CAAA,CAAI,QAAA,CAAAE,EAAS,CACjG,CAEO,SAASU,CAAAA,CAAa,CAAE,SAAAV,CAAAA,CAAU,SAAA,CAAAF,CAAU,CAAA,CAAsB,CACvE,OAAOQ,cAAAA,CAAC,KAAA,CAAA,CAAI,UAAWb,CAAAA,CAAG,yBAAA,CAA2BK,CAAS,CAAA,CAAI,QAAA,CAAAE,EAAS,CAC7E","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface AlertProps {\r\n className?: string;\r\n close?: boolean;\r\n children?: React.ReactNode;\r\n onClose?: () => void;\r\n}\r\n\r\ninterface AlertIconProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\ninterface AlertTitleProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\ninterface AlertToolbarProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function Alert({ className = \"\", close = false, children, onClose }: AlertProps) {\r\n const [isVisible, setIsVisible] = React.useState(true);\r\n\r\n if (!isVisible) return null;\r\n\r\n const handleClose = () => {\r\n setIsVisible(false);\r\n onClose?.();\r\n };\r\n\r\n return (\r\n <div className={cn(\"min-h-[400px] w-full flex items-center justify-center p-4\", className)}>\r\n <div className=\"flex flex-col items-center w-full lg:max-w-[75%] gap-6\">\r\n <div className=\"relative flex items-center gap-3 rounded-lg border border-zinc-300 dark:border-zinc-700 bg-transparent px-4 py-3 shadow-sm w-full max-w-md transition-all duration-200\">\r\n {children}\r\n {close && (\r\n <button\r\n onClick={handleClose}\r\n className=\"absolute top-2 right-2 text-gray-500 hover:text-gray-700 dark:text-white/60 dark:hover:text-white transition-colors\"\r\n >\r\n <svg className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport function AlertIcon({ children, className }: AlertIconProps) {\r\n return <div className={cn(\"text-primary flex-shrink-0\", className)}>{children}</div>;\r\n}\r\n\r\nexport function AlertTitle({ children, className }: AlertTitleProps) {\r\n return <span className={cn(\"text-foreground font-medium text-sm flex-1\", className)}>{children}</span>;\r\n}\r\n\r\nexport function AlertToolbar({ children, className }: AlertToolbarProps) {\r\n return <div className={cn(\"flex items-center gap-2\", className)}>{children}</div>;\r\n}\r\n"]}
@@ -0,0 +1,2 @@
1
+ import m from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx,jsxs}from'react/jsx-runtime';function o(...e){return twMerge(clsx(e))}function h({className:e="",close:r=false,children:l,onClose:s}){let[a,n]=m.useState(true);if(!a)return null;let i=()=>{n(false),s?.();};return jsx("div",{className:o("min-h-[400px] w-full flex items-center justify-center p-4",e),children:jsx("div",{className:"flex flex-col items-center w-full lg:max-w-[75%] gap-6",children:jsxs("div",{className:"relative flex items-center gap-3 rounded-lg border border-zinc-300 dark:border-zinc-700 bg-transparent px-4 py-3 shadow-sm w-full max-w-md transition-all duration-200",children:[l,r&&jsx("button",{onClick:i,className:"absolute top-2 right-2 text-gray-500 hover:text-gray-700 dark:text-white/60 dark:hover:text-white transition-colors",children:jsx("svg",{className:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]})})})}function N({children:e,className:r}){return jsx("div",{className:o("text-primary flex-shrink-0",r),children:e})}function b({children:e,className:r}){return jsx("span",{className:o("text-foreground font-medium text-sm flex-1",r),children:e})}function A({children:e,className:r}){return jsx("div",{className:o("flex items-center gap-2",r),children:e})}export{h as Alert,N as AlertIcon,b as AlertTitle,A as AlertToolbar};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/alert/index.tsx"],"names":["cn","inputs","twMerge","clsx","Alert","className","close","children","onClose","isVisible","setIsVisible","React","handleClose","jsx","jsxs","AlertIcon","AlertTitle","AlertToolbar"],"mappings":"2HAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,QAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCsBO,SAASG,CAAAA,CAAM,CAAE,SAAA,CAAAC,CAAAA,CAAY,GAAI,KAAA,CAAAC,CAAAA,CAAQ,MAAO,QAAA,CAAAC,CAAAA,CAAU,QAAAC,CAAQ,CAAA,CAAe,CACtF,GAAM,CAACC,CAAAA,CAAWC,CAAY,EAAIC,CAAAA,CAAM,QAAA,CAAS,IAAI,CAAA,CAErD,GAAI,CAACF,CAAAA,CAAW,OAAO,KAEvB,IAAMG,CAAAA,CAAc,IAAM,CACxBF,CAAAA,CAAa,KAAK,CAAA,CAClBF,CAAAA,KACF,CAAA,CAEA,OACEK,IAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,EAAG,2DAAA,CAA6DK,CAAS,EACvF,QAAA,CAAAQ,GAAAA,CAAC,OAAI,SAAA,CAAU,wDAAA,CACb,SAAAC,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,wKAAA,CACZ,QAAA,CAAA,CAAAP,EACAD,CAAAA,EACCO,GAAAA,CAAC,UACC,OAAA,CAASD,CAAAA,CACT,SAAA,CAAU,qHAAA,CAEV,SAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,SAAA,CAAU,IAAA,CAAK,OAAO,OAAA,CAAQ,WAAA,CAAY,OAAO,cAAA,CAC9D,QAAA,CAAAA,IAAC,MAAA,CAAA,CAAK,aAAA,CAAc,QAAQ,cAAA,CAAe,OAAA,CAAQ,YAAa,CAAA,CAAG,CAAA,CAAE,uBAAuB,CAAA,CAC9F,CAAA,CACF,GAEJ,CAAA,CACF,CAAA,CACF,CAEJ,CAEO,SAASE,EAAU,CAAE,QAAA,CAAAR,EAAU,SAAA,CAAAF,CAAU,EAAmB,CACjE,OAAOQ,IAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,EAAG,4BAAA,CAA8BK,CAAS,CAAA,CAAI,QAAA,CAAAE,EAAS,CAChF,CAEO,SAASS,CAAAA,CAAW,CAAE,SAAAT,CAAAA,CAAU,SAAA,CAAAF,CAAU,CAAA,CAAoB,CACnE,OAAOQ,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAWb,CAAAA,CAAG,4CAAA,CAA8CK,CAAS,CAAA,CAAI,QAAA,CAAAE,EAAS,CACjG,CAEO,SAASU,CAAAA,CAAa,CAAE,SAAAV,CAAAA,CAAU,SAAA,CAAAF,CAAU,CAAA,CAAsB,CACvE,OAAOQ,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAWb,CAAAA,CAAG,yBAAA,CAA2BK,CAAS,CAAA,CAAI,QAAA,CAAAE,EAAS,CAC7E","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface AlertProps {\r\n className?: string;\r\n close?: boolean;\r\n children?: React.ReactNode;\r\n onClose?: () => void;\r\n}\r\n\r\ninterface AlertIconProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\ninterface AlertTitleProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\ninterface AlertToolbarProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function Alert({ className = \"\", close = false, children, onClose }: AlertProps) {\r\n const [isVisible, setIsVisible] = React.useState(true);\r\n\r\n if (!isVisible) return null;\r\n\r\n const handleClose = () => {\r\n setIsVisible(false);\r\n onClose?.();\r\n };\r\n\r\n return (\r\n <div className={cn(\"min-h-[400px] w-full flex items-center justify-center p-4\", className)}>\r\n <div className=\"flex flex-col items-center w-full lg:max-w-[75%] gap-6\">\r\n <div className=\"relative flex items-center gap-3 rounded-lg border border-zinc-300 dark:border-zinc-700 bg-transparent px-4 py-3 shadow-sm w-full max-w-md transition-all duration-200\">\r\n {children}\r\n {close && (\r\n <button\r\n onClick={handleClose}\r\n className=\"absolute top-2 right-2 text-gray-500 hover:text-gray-700 dark:text-white/60 dark:hover:text-white transition-colors\"\r\n >\r\n <svg className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport function AlertIcon({ children, className }: AlertIconProps) {\r\n return <div className={cn(\"text-primary flex-shrink-0\", className)}>{children}</div>;\r\n}\r\n\r\nexport function AlertTitle({ children, className }: AlertTitleProps) {\r\n return <span className={cn(\"text-foreground font-medium text-sm flex-1\", className)}>{children}</span>;\r\n}\r\n\r\nexport function AlertToolbar({ children, className }: AlertToolbarProps) {\r\n return <div className={cn(\"flex items-center gap-2\", className)}>{children}</div>;\r\n}\r\n"]}
@@ -0,0 +1,3 @@
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 h(...n){return tailwindMerge.twMerge(clsx.clsx(n))}var u=" .:-=+*#%@";function R({text:n,enableWaves:$=true,asciiFontSize:t=8,textFontSize:o=200,textColor:a="#ffffff",planeBaseHeight:N=.2,className:d}){let x=react.useRef(null),[I,b]=react.useState("");return react.useEffect(()=>{let c=document.createElement("canvas"),e=c.getContext("2d");if(!e)return;e.font=`bold ${o}px monospace`;let A=e.measureText(n),s=Math.ceil(A.width),r=o*1.2;c.width=s,c.height=r,e.fillStyle=a,e.font=`bold ${o}px monospace`,e.textBaseline="middle",e.fillText(n,0,r/2);let l=e.getImageData(0,0,s,r).data,v=Math.floor(s/t),C=Math.floor(r/t),f="";for(let i=0;i<C;i++){for(let p=0;p<v;p++){let w=p*t,m=(i*t*s+w)*4,y=(l[m]+l[m+1]+l[m+2])/3,M=Math.floor(y/255*(u.length-1));f+=u[M];}f+=`
2
+ `;}b(f);},[n,t,o,a]),jsxRuntime.jsx("div",{ref:x,className:h("font-mono whitespace-pre",d),children:jsxRuntime.jsx("pre",{style:{fontSize:`${t}px`,lineHeight:1,color:a},children:I})})}var q=R;exports.ASCIIText=R;exports.default=q;//# sourceMappingURL=index.js.map
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/ascii-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","ASCII_CHARS","ASCIIText","text","enableWaves","asciiFontSize","textFontSize","textColor","planeBaseHeight","className","containerRef","useRef","asciiArt","setAsciiArt","useState","useEffect","canvas","ctx","metrics","width","height","pixels","cols","rows","ascii","y","x","px","idx","brightness","charIdx","jsx","ascii_text_default"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface ASCIITextProps {\r\n text: string;\r\n enableWaves?: boolean;\r\n asciiFontSize?: number;\r\n textFontSize?: number;\r\n textColor?: string;\r\n planeBaseHeight?: number;\r\n className?: string;\r\n}\r\n\r\nconst ASCII_CHARS = ' .:-=+*#%@';\r\n\r\nexport function ASCIIText({\r\n text,\r\n enableWaves = true,\r\n asciiFontSize = 8,\r\n textFontSize = 200,\r\n textColor = \"#ffffff\",\r\n planeBaseHeight = 0.2,\r\n className,\r\n}: ASCIITextProps) {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const [asciiArt, setAsciiArt] = useState<string>(\"\");\r\n\r\n useEffect(() => {\r\n const canvas = document.createElement(\"canvas\");\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n // Set canvas size based on text\r\n ctx.font = `bold ${textFontSize}px monospace`;\r\n const metrics = ctx.measureText(text);\r\n const width = Math.ceil(metrics.width);\r\n const height = textFontSize * 1.2;\r\n\r\n canvas.width = width;\r\n canvas.height = height;\r\n\r\n // Draw text\r\n ctx.fillStyle = textColor;\r\n ctx.font = `bold ${textFontSize}px monospace`;\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillText(text, 0, height / 2);\r\n\r\n // Get image data\r\n const imageData = ctx.getImageData(0, 0, width, height);\r\n const pixels = imageData.data;\r\n\r\n // Convert to ASCII\r\n const cols = Math.floor(width / asciiFontSize);\r\n const rows = Math.floor(height / asciiFontSize);\r\n let ascii = \"\";\r\n\r\n for (let y = 0; y < rows; y++) {\r\n for (let x = 0; x < cols; x++) {\r\n const px = x * asciiFontSize;\r\n const py = y * asciiFontSize;\r\n const idx = (py * width + px) * 4;\r\n const brightness = (pixels[idx] + pixels[idx + 1] + pixels[idx + 2]) / 3;\r\n const charIdx = Math.floor((brightness / 255) * (ASCII_CHARS.length - 1));\r\n ascii += ASCII_CHARS[charIdx];\r\n }\r\n ascii += \"\\n\";\r\n }\r\n\r\n setAsciiArt(ascii);\r\n }, [text, asciiFontSize, textFontSize, textColor]);\r\n\r\n return (\r\n <div ref={containerRef} className={cn(\"font-mono whitespace-pre\", className)}>\r\n <pre\r\n style={{\r\n fontSize: `${asciiFontSize}px`,\r\n lineHeight: 1,\r\n color: textColor,\r\n }}\r\n >\r\n {asciiArt}\r\n </pre>\r\n </div>\r\n );\r\n}\r\n\r\nexport default ASCIIText;\r\n"]}
@@ -0,0 +1,3 @@
1
+ import {useRef,useState,useEffect}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function h(...n){return twMerge(clsx(n))}var u=" .:-=+*#%@";function R({text:n,enableWaves:$=true,asciiFontSize:t=8,textFontSize:o=200,textColor:a="#ffffff",planeBaseHeight:N=.2,className:d}){let x=useRef(null),[I,b]=useState("");return useEffect(()=>{let c=document.createElement("canvas"),e=c.getContext("2d");if(!e)return;e.font=`bold ${o}px monospace`;let A=e.measureText(n),s=Math.ceil(A.width),r=o*1.2;c.width=s,c.height=r,e.fillStyle=a,e.font=`bold ${o}px monospace`,e.textBaseline="middle",e.fillText(n,0,r/2);let l=e.getImageData(0,0,s,r).data,v=Math.floor(s/t),C=Math.floor(r/t),f="";for(let i=0;i<C;i++){for(let p=0;p<v;p++){let w=p*t,m=(i*t*s+w)*4,y=(l[m]+l[m+1]+l[m+2])/3,M=Math.floor(y/255*(u.length-1));f+=u[M];}f+=`
2
+ `;}b(f);},[n,t,o,a]),jsx("div",{ref:x,className:h("font-mono whitespace-pre",d),children:jsx("pre",{style:{fontSize:`${t}px`,lineHeight:1,color:a},children:I})})}var q=R;export{R as ASCIIText,q as default};//# sourceMappingURL=index.mjs.map
3
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/ascii-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","ASCII_CHARS","ASCIIText","text","enableWaves","asciiFontSize","textFontSize","textColor","planeBaseHeight","className","containerRef","useRef","asciiArt","setAsciiArt","useState","useEffect","canvas","ctx","metrics","width","height","pixels","cols","rows","ascii","y","x","px","idx","brightness","charIdx","jsx","ascii_text_default"],"mappings":"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","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface ASCIITextProps {\r\n text: string;\r\n enableWaves?: boolean;\r\n asciiFontSize?: number;\r\n textFontSize?: number;\r\n textColor?: string;\r\n planeBaseHeight?: number;\r\n className?: string;\r\n}\r\n\r\nconst ASCII_CHARS = ' .:-=+*#%@';\r\n\r\nexport function ASCIIText({\r\n text,\r\n enableWaves = true,\r\n asciiFontSize = 8,\r\n textFontSize = 200,\r\n textColor = \"#ffffff\",\r\n planeBaseHeight = 0.2,\r\n className,\r\n}: ASCIITextProps) {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const [asciiArt, setAsciiArt] = useState<string>(\"\");\r\n\r\n useEffect(() => {\r\n const canvas = document.createElement(\"canvas\");\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n // Set canvas size based on text\r\n ctx.font = `bold ${textFontSize}px monospace`;\r\n const metrics = ctx.measureText(text);\r\n const width = Math.ceil(metrics.width);\r\n const height = textFontSize * 1.2;\r\n\r\n canvas.width = width;\r\n canvas.height = height;\r\n\r\n // Draw text\r\n ctx.fillStyle = textColor;\r\n ctx.font = `bold ${textFontSize}px monospace`;\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillText(text, 0, height / 2);\r\n\r\n // Get image data\r\n const imageData = ctx.getImageData(0, 0, width, height);\r\n const pixels = imageData.data;\r\n\r\n // Convert to ASCII\r\n const cols = Math.floor(width / asciiFontSize);\r\n const rows = Math.floor(height / asciiFontSize);\r\n let ascii = \"\";\r\n\r\n for (let y = 0; y < rows; y++) {\r\n for (let x = 0; x < cols; x++) {\r\n const px = x * asciiFontSize;\r\n const py = y * asciiFontSize;\r\n const idx = (py * width + px) * 4;\r\n const brightness = (pixels[idx] + pixels[idx + 1] + pixels[idx + 2]) / 3;\r\n const charIdx = Math.floor((brightness / 255) * (ASCII_CHARS.length - 1));\r\n ascii += ASCII_CHARS[charIdx];\r\n }\r\n ascii += \"\\n\";\r\n }\r\n\r\n setAsciiArt(ascii);\r\n }, [text, asciiFontSize, textFontSize, textColor]);\r\n\r\n return (\r\n <div ref={containerRef} className={cn(\"font-mono whitespace-pre\", className)}>\r\n <pre\r\n style={{\r\n fontSize: `${asciiFontSize}px`,\r\n lineHeight: 1,\r\n color: textColor,\r\n }}\r\n >\r\n {asciiArt}\r\n </pre>\r\n </div>\r\n );\r\n}\r\n\r\nexport default ASCIIText;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),framerMotion=require('framer-motion'),react=require('react'),jsxRuntime=require('react/jsx-runtime');function o(...n){return tailwindMerge.twMerge(clsx.clsx(n))}function w({className:n,particleCount:i=12,children:f,...b}){let[s,c]=react.useState(false),[t,y]=react.useState([]),e=framerMotion.useAnimation();react.useEffect(()=>{let a=Array.from({length:i},(r,v)=>({id:v,x:Math.random()*360-180,y:Math.random()*360-180}));y(a);},[i]);let l=react.useCallback(async()=>{c(true),await e.start({x:0,y:0,transition:{type:"spring",stiffness:50,damping:10}});},[e]),u=react.useCallback(async()=>{c(false),await e.start(a=>({x:t[a].x,y:t[a].y,transition:{type:"spring",stiffness:100,damping:15}}));},[e,t]);return jsxRuntime.jsxs("button",{className:o("min-w-40 relative touch-none px-4 py-2 rounded-md","bg-violet-100 dark:bg-violet-900","hover:bg-violet-200 dark:hover:bg-violet-800","text-violet-600 dark:text-violet-300","border border-violet-300 dark:border-violet-700","transition-all duration-300",n),onMouseEnter:l,onMouseLeave:u,onTouchStart:l,onTouchEnd:u,...b,children:[t.map((a,r)=>jsxRuntime.jsx(framerMotion.motion.div,{custom:r,initial:{x:t[r].x,y:t[r].y},animate:e,className:o("absolute w-1.5 h-1.5 rounded-full bg-violet-400 dark:bg-violet-300 transition-opacity duration-300",s?"opacity-100":"opacity-40")},r)),jsxRuntime.jsx("span",{className:"relative w-full flex items-center justify-center gap-2",children:f||(s?"Attracting":"Hover me")})]})}var T=w;exports.AttractButton=w;exports.default=T;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/attract-button/index.tsx"],"names":["cn","inputs","twMerge","clsx","AttractButton","className","particleCount","children","props","isAttracting","setIsAttracting","useState","particles","setParticles","particlesControl","useAnimation","useEffect","newParticles","_","i","handleInteractionStart","useCallback","handleInteractionEnd","jsxs","index","jsx","motion","attract_button_default"],"mappings":"4OAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCaO,SAASG,CAAAA,CAAc,CAC5B,SAAA,CAAAC,CAAAA,CACA,aAAA,CAAAC,CAAAA,CAAgB,EAAA,CAChB,QAAA,CAAAC,CAAAA,CACA,GAAGC,CACL,CAAA,CAAuB,CACrB,GAAM,CAACC,CAAAA,CAAcC,CAAe,CAAA,CAAIC,cAAAA,CAAS,KAAK,CAAA,CAChD,CAACC,CAAAA,CAAWC,CAAY,CAAA,CAAIF,cAAAA,CAAqB,EAAE,CAAA,CACnDG,CAAAA,CAAmBC,yBAAAA,EAAa,CAEtCC,eAAAA,CAAU,IAAM,CACd,IAAMC,CAAAA,CAAe,KAAA,CAAM,IAAA,CAAK,CAAE,MAAA,CAAQX,CAAc,CAAA,CAAG,CAACY,CAAAA,CAAGC,CAAAA,IAAO,CACpE,EAAA,CAAIA,CAAAA,CACJ,CAAA,CAAG,IAAA,CAAK,MAAA,EAAO,CAAI,GAAA,CAAM,GAAA,CACzB,CAAA,CAAG,IAAA,CAAK,MAAA,EAAO,CAAI,GAAA,CAAM,GAC3B,CAAA,CAAE,CAAA,CACFN,CAAAA,CAAaI,CAAY,EAC3B,CAAA,CAAG,CAACX,CAAa,CAAC,CAAA,CAElB,IAAMc,CAAAA,CAAyBC,iBAAAA,CAAY,SAAY,CACrDX,CAAAA,CAAgB,IAAI,CAAA,CACpB,MAAMI,CAAAA,CAAiB,KAAA,CAAM,CAAE,CAAA,CAAG,CAAA,CAAG,EAAG,CAAA,CAAG,UAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,SAAA,CAAW,EAAA,CAAI,OAAA,CAAS,EAAG,CAAE,CAAC,EACzG,CAAA,CAAG,CAACA,CAAgB,CAAC,CAAA,CAEfQ,CAAAA,CAAuBD,iBAAAA,CAAY,SAAY,CACnDX,CAAAA,CAAgB,KAAK,CAAA,CACrB,MAAMI,CAAAA,CAAiB,KAAA,CAAOK,CAAAA,GAAO,CACnC,CAAA,CAAGP,CAAAA,CAAUO,CAAC,CAAA,CAAE,CAAA,CAChB,CAAA,CAAGP,CAAAA,CAAUO,CAAC,CAAA,CAAE,CAAA,CAChB,UAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,SAAA,CAAW,GAAA,CAAK,OAAA,CAAS,EAAG,CAC5D,CAAA,CAAE,EACJ,CAAA,CAAG,CAACL,CAAAA,CAAkBF,CAAS,CAAC,CAAA,CAEhC,OACEW,eAAAA,CAAC,QAAA,CAAA,CACC,SAAA,CAAWvB,CAAAA,CACT,mDAAA,CACA,kCAAA,CACA,8CAAA,CACA,sCAAA,CACA,iDAAA,CACA,6BAAA,CACAK,CACF,CAAA,CACA,YAAA,CAAce,CAAAA,CACd,YAAA,CAAcE,CAAAA,CACd,YAAA,CAAcF,CAAAA,CACd,UAAA,CAAYE,CAAAA,CACX,GAAGd,CAAAA,CAEH,QAAA,CAAA,CAAAI,CAAAA,CAAU,GAAA,CAAI,CAACM,CAAAA,CAAGM,CAAAA,GACjBC,cAAAA,CAACC,mBAAAA,CAAO,GAAA,CAAP,CAEC,MAAA,CAAQF,CAAAA,CACR,OAAA,CAAS,CAAE,CAAA,CAAGZ,CAAAA,CAAUY,CAAK,CAAA,CAAE,CAAA,CAAG,CAAA,CAAGZ,CAAAA,CAAUY,CAAK,CAAA,CAAE,CAAE,CAAA,CACxD,OAAA,CAASV,CAAAA,CACT,SAAA,CAAWd,CAAAA,CAAG,oGAAA,CAAsGS,CAAAA,CAAe,aAAA,CAAgB,YAAY,CAAA,CAAA,CAJ1Je,CAKP,CACD,CAAA,CACDC,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,wDAAA,CACb,QAAA,CAAAlB,CAAAA,GAAaE,CAAAA,CAAe,YAAA,CAAe,UAAA,CAAA,CAC9C,CAAA,CAAA,CACF,CAEJ,KAEOkB,CAAAA,CAAQvB","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\nimport { motion, useAnimation } from \"framer-motion\";\r\nimport { useEffect, useState, useCallback } from \"react\";\r\n\r\ninterface AttractButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n particleCount?: number;\r\n attractRadius?: number;\r\n children?: React.ReactNode;\r\n}\r\n\r\ninterface Particle {\r\n id: number;\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport function AttractButton({\r\n className,\r\n particleCount = 12,\r\n children,\r\n ...props\r\n}: AttractButtonProps) {\r\n const [isAttracting, setIsAttracting] = useState(false);\r\n const [particles, setParticles] = useState<Particle[]>([]);\r\n const particlesControl = useAnimation();\r\n\r\n useEffect(() => {\r\n const newParticles = Array.from({ length: particleCount }, (_, i) => ({\r\n id: i,\r\n x: Math.random() * 360 - 180,\r\n y: Math.random() * 360 - 180,\r\n }));\r\n setParticles(newParticles);\r\n }, [particleCount]);\r\n\r\n const handleInteractionStart = useCallback(async () => {\r\n setIsAttracting(true);\r\n await particlesControl.start({ x: 0, y: 0, transition: { type: \"spring\", stiffness: 50, damping: 10 } });\r\n }, [particlesControl]);\r\n\r\n const handleInteractionEnd = useCallback(async () => {\r\n setIsAttracting(false);\r\n await particlesControl.start((i) => ({\r\n x: particles[i].x,\r\n y: particles[i].y,\r\n transition: { type: \"spring\", stiffness: 100, damping: 15 },\r\n }));\r\n }, [particlesControl, particles]);\r\n\r\n return (\r\n <button\r\n className={cn(\r\n \"min-w-40 relative touch-none px-4 py-2 rounded-md\",\r\n \"bg-violet-100 dark:bg-violet-900\",\r\n \"hover:bg-violet-200 dark:hover:bg-violet-800\",\r\n \"text-violet-600 dark:text-violet-300\",\r\n \"border border-violet-300 dark:border-violet-700\",\r\n \"transition-all duration-300\",\r\n className\r\n )}\r\n onMouseEnter={handleInteractionStart}\r\n onMouseLeave={handleInteractionEnd}\r\n onTouchStart={handleInteractionStart}\r\n onTouchEnd={handleInteractionEnd}\r\n {...props}\r\n >\r\n {particles.map((_, index) => (\r\n <motion.div\r\n key={index}\r\n custom={index}\r\n initial={{ x: particles[index].x, y: particles[index].y }}\r\n animate={particlesControl}\r\n className={cn(\"absolute w-1.5 h-1.5 rounded-full bg-violet-400 dark:bg-violet-300 transition-opacity duration-300\", isAttracting ? \"opacity-100\" : \"opacity-40\")}\r\n />\r\n ))}\r\n <span className=\"relative w-full flex items-center justify-center gap-2\">\r\n {children || (isAttracting ? \"Attracting\" : \"Hover me\")}\r\n </span>\r\n </button>\r\n );\r\n}\r\n\r\nexport default AttractButton;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {useAnimation,motion}from'framer-motion';import {useState,useEffect,useCallback}from'react';import {jsxs,jsx}from'react/jsx-runtime';function o(...n){return twMerge(clsx(n))}function w({className:n,particleCount:i=12,children:f,...b}){let[s,c]=useState(false),[t,y]=useState([]),e=useAnimation();useEffect(()=>{let a=Array.from({length:i},(r,v)=>({id:v,x:Math.random()*360-180,y:Math.random()*360-180}));y(a);},[i]);let l=useCallback(async()=>{c(true),await e.start({x:0,y:0,transition:{type:"spring",stiffness:50,damping:10}});},[e]),u=useCallback(async()=>{c(false),await e.start(a=>({x:t[a].x,y:t[a].y,transition:{type:"spring",stiffness:100,damping:15}}));},[e,t]);return jsxs("button",{className:o("min-w-40 relative touch-none px-4 py-2 rounded-md","bg-violet-100 dark:bg-violet-900","hover:bg-violet-200 dark:hover:bg-violet-800","text-violet-600 dark:text-violet-300","border border-violet-300 dark:border-violet-700","transition-all duration-300",n),onMouseEnter:l,onMouseLeave:u,onTouchStart:l,onTouchEnd:u,...b,children:[t.map((a,r)=>jsx(motion.div,{custom:r,initial:{x:t[r].x,y:t[r].y},animate:e,className:o("absolute w-1.5 h-1.5 rounded-full bg-violet-400 dark:bg-violet-300 transition-opacity duration-300",s?"opacity-100":"opacity-40")},r)),jsx("span",{className:"relative w-full flex items-center justify-center gap-2",children:f||(s?"Attracting":"Hover me")})]})}var T=w;export{w as AttractButton,T as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/attract-button/index.tsx"],"names":["cn","inputs","twMerge","clsx","AttractButton","className","particleCount","children","props","isAttracting","setIsAttracting","useState","particles","setParticles","particlesControl","useAnimation","useEffect","newParticles","_","i","handleInteractionStart","useCallback","handleInteractionEnd","jsxs","index","jsx","motion","attract_button_default"],"mappings":"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","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { cn } from \"../utils/cn\";\r\nimport { motion, useAnimation } from \"framer-motion\";\r\nimport { useEffect, useState, useCallback } from \"react\";\r\n\r\ninterface AttractButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n particleCount?: number;\r\n attractRadius?: number;\r\n children?: React.ReactNode;\r\n}\r\n\r\ninterface Particle {\r\n id: number;\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport function AttractButton({\r\n className,\r\n particleCount = 12,\r\n children,\r\n ...props\r\n}: AttractButtonProps) {\r\n const [isAttracting, setIsAttracting] = useState(false);\r\n const [particles, setParticles] = useState<Particle[]>([]);\r\n const particlesControl = useAnimation();\r\n\r\n useEffect(() => {\r\n const newParticles = Array.from({ length: particleCount }, (_, i) => ({\r\n id: i,\r\n x: Math.random() * 360 - 180,\r\n y: Math.random() * 360 - 180,\r\n }));\r\n setParticles(newParticles);\r\n }, [particleCount]);\r\n\r\n const handleInteractionStart = useCallback(async () => {\r\n setIsAttracting(true);\r\n await particlesControl.start({ x: 0, y: 0, transition: { type: \"spring\", stiffness: 50, damping: 10 } });\r\n }, [particlesControl]);\r\n\r\n const handleInteractionEnd = useCallback(async () => {\r\n setIsAttracting(false);\r\n await particlesControl.start((i) => ({\r\n x: particles[i].x,\r\n y: particles[i].y,\r\n transition: { type: \"spring\", stiffness: 100, damping: 15 },\r\n }));\r\n }, [particlesControl, particles]);\r\n\r\n return (\r\n <button\r\n className={cn(\r\n \"min-w-40 relative touch-none px-4 py-2 rounded-md\",\r\n \"bg-violet-100 dark:bg-violet-900\",\r\n \"hover:bg-violet-200 dark:hover:bg-violet-800\",\r\n \"text-violet-600 dark:text-violet-300\",\r\n \"border border-violet-300 dark:border-violet-700\",\r\n \"transition-all duration-300\",\r\n className\r\n )}\r\n onMouseEnter={handleInteractionStart}\r\n onMouseLeave={handleInteractionEnd}\r\n onTouchStart={handleInteractionStart}\r\n onTouchEnd={handleInteractionEnd}\r\n {...props}\r\n >\r\n {particles.map((_, index) => (\r\n <motion.div\r\n key={index}\r\n custom={index}\r\n initial={{ x: particles[index].x, y: particles[index].y }}\r\n animate={particlesControl}\r\n className={cn(\"absolute w-1.5 h-1.5 rounded-full bg-violet-400 dark:bg-violet-300 transition-opacity duration-300\", isAttracting ? \"opacity-100\" : \"opacity-40\")}\r\n />\r\n ))}\r\n <span className=\"relative w-full flex items-center justify-center gap-2\">\r\n {children || (isAttracting ? \"Attracting\" : \"Hover me\")}\r\n </span>\r\n </button>\r\n );\r\n}\r\n\r\nexport default AttractButton;\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 f({children:e,className:n,delay:t=0,duration:o=.8,blur:a=10,inView:i=false,inViewMargin:l="-50px",yOffset:s=6}){let u={hidden:{opacity:0,filter:`blur(${a}px)`,y:s},visible:{opacity:1,filter:"blur(0px)",y:0}};return jsxRuntime.jsx(framerMotion.motion.div,{className:r(n),initial:"hidden",animate:i?void 0:"visible",whileInView:i?"visible":void 0,viewport:{once:true,margin:l},variants:u,transition:{duration:o,delay:t,ease:[.25,.1,.25,1]},children:e})}var w=f;exports.BlurFade=f;exports.default=w;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/blur-fade/index.tsx"],"names":["cn","inputs","twMerge","clsx","BlurFade","children","className","delay","duration","blur","inView","inViewMargin","yOffset","variants","jsx","motion","blur_fade_default"],"mappings":"qNAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCYO,SAASG,CAAAA,CAAS,CACvB,QAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CAAQ,CAAA,CACR,QAAA,CAAAC,CAAAA,CAAW,EAAA,CACX,IAAA,CAAAC,CAAAA,CAAO,EAAA,CACP,MAAA,CAAAC,CAAAA,CAAS,KAAA,CACT,YAAA,CAAAC,CAAAA,CAAe,OAAA,CACf,OAAA,CAAAC,CAAAA,CAAU,CACZ,CAAA,CAAkB,CAChB,IAAMC,CAAAA,CAAW,CACf,MAAA,CAAQ,CACN,OAAA,CAAS,CAAA,CACT,MAAA,CAAQ,CAAA,KAAA,EAAQJ,CAAI,CAAA,GAAA,CAAA,CACpB,CAAA,CAAGG,CACL,CAAA,CACA,OAAA,CAAS,CACP,OAAA,CAAS,CAAA,CACT,MAAA,CAAQ,WAAA,CACR,CAAA,CAAG,CACL,CACF,CAAA,CAEA,OACEE,cAAAA,CAACC,mBAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAWf,CAAAA,CAAGM,CAAS,CAAA,CACvB,OAAA,CAAQ,QAAA,CACR,OAAA,CAASI,CAAAA,CAAS,MAAA,CAAY,SAAA,CAC9B,WAAA,CAAaA,CAAAA,CAAS,SAAA,CAAY,MAAA,CAClC,QAAA,CAAU,CAAE,IAAA,CAAM,IAAA,CAAM,MAAA,CAAQC,CAAa,CAAA,CAC7C,QAAA,CAAUE,CAAAA,CACV,UAAA,CAAY,CACV,QAAA,CAAAL,CAAAA,CACA,KAAA,CAAAD,CAAAA,CACA,IAAA,CAAM,CAAC,GAAA,CAAM,EAAA,CAAK,GAAA,CAAM,CAAC,CAC3B,CAAA,CAEC,QAAA,CAAAF,CAAAA,CACH,CAEJ,CAEA,IAAOW,CAAAA,CAAQZ","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { ReactNode } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface BlurFadeProps {\r\n children: ReactNode;\r\n className?: string;\r\n delay?: number;\r\n duration?: number;\r\n blur?: number;\r\n inView?: boolean;\r\n inViewMargin?: string;\r\n yOffset?: number;\r\n}\r\n\r\nexport function BlurFade({\r\n children,\r\n className,\r\n delay = 0,\r\n duration = 0.8,\r\n blur = 10,\r\n inView = false,\r\n inViewMargin = \"-50px\",\r\n yOffset = 6,\r\n}: BlurFadeProps) {\r\n const variants = {\r\n hidden: {\r\n opacity: 0,\r\n filter: `blur(${blur}px)`,\r\n y: yOffset,\r\n },\r\n visible: {\r\n opacity: 1,\r\n filter: \"blur(0px)\",\r\n y: 0,\r\n },\r\n };\r\n\r\n return (\r\n <motion.div\r\n className={cn(className)}\r\n initial=\"hidden\"\r\n animate={inView ? undefined : \"visible\"}\r\n whileInView={inView ? \"visible\" : undefined}\r\n viewport={{ once: true, margin: inViewMargin }}\r\n variants={variants}\r\n transition={{\r\n duration,\r\n delay,\r\n ease: [0.25, 0.1, 0.25, 1],\r\n }}\r\n >\r\n {children}\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport default BlurFade;\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(...e){return twMerge(clsx(e))}function f({children:e,className:n,delay:t=0,duration:o=.8,blur:a=10,inView:i=false,inViewMargin:l="-50px",yOffset:s=6}){let u={hidden:{opacity:0,filter:`blur(${a}px)`,y:s},visible:{opacity:1,filter:"blur(0px)",y:0}};return jsx(motion.div,{className:r(n),initial:"hidden",animate:i?void 0:"visible",whileInView:i?"visible":void 0,viewport:{once:true,margin:l},variants:u,transition:{duration:o,delay:t,ease:[.25,.1,.25,1]},children:e})}var w=f;export{f as BlurFade,w as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/blur-fade/index.tsx"],"names":["cn","inputs","twMerge","clsx","BlurFade","children","className","delay","duration","blur","inView","inViewMargin","yOffset","variants","jsx","motion","blur_fade_default"],"mappings":"oIAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCYO,SAASG,CAAAA,CAAS,CACvB,QAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CAAQ,CAAA,CACR,QAAA,CAAAC,CAAAA,CAAW,EAAA,CACX,IAAA,CAAAC,CAAAA,CAAO,EAAA,CACP,MAAA,CAAAC,CAAAA,CAAS,KAAA,CACT,YAAA,CAAAC,CAAAA,CAAe,OAAA,CACf,OAAA,CAAAC,CAAAA,CAAU,CACZ,CAAA,CAAkB,CAChB,IAAMC,CAAAA,CAAW,CACf,MAAA,CAAQ,CACN,OAAA,CAAS,CAAA,CACT,MAAA,CAAQ,CAAA,KAAA,EAAQJ,CAAI,CAAA,GAAA,CAAA,CACpB,CAAA,CAAGG,CACL,CAAA,CACA,OAAA,CAAS,CACP,OAAA,CAAS,CAAA,CACT,MAAA,CAAQ,WAAA,CACR,CAAA,CAAG,CACL,CACF,CAAA,CAEA,OACEE,GAAAA,CAACC,MAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAWf,CAAAA,CAAGM,CAAS,CAAA,CACvB,OAAA,CAAQ,QAAA,CACR,OAAA,CAASI,CAAAA,CAAS,MAAA,CAAY,SAAA,CAC9B,WAAA,CAAaA,CAAAA,CAAS,SAAA,CAAY,MAAA,CAClC,QAAA,CAAU,CAAE,IAAA,CAAM,IAAA,CAAM,MAAA,CAAQC,CAAa,CAAA,CAC7C,QAAA,CAAUE,CAAAA,CACV,UAAA,CAAY,CACV,QAAA,CAAAL,CAAAA,CACA,KAAA,CAAAD,CAAAA,CACA,IAAA,CAAM,CAAC,GAAA,CAAM,EAAA,CAAK,GAAA,CAAM,CAAC,CAC3B,CAAA,CAEC,QAAA,CAAAF,CAAAA,CACH,CAEJ,CAEA,IAAOW,CAAAA,CAAQZ","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { ReactNode } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface BlurFadeProps {\r\n children: ReactNode;\r\n className?: string;\r\n delay?: number;\r\n duration?: number;\r\n blur?: number;\r\n inView?: boolean;\r\n inViewMargin?: string;\r\n yOffset?: number;\r\n}\r\n\r\nexport function BlurFade({\r\n children,\r\n className,\r\n delay = 0,\r\n duration = 0.8,\r\n blur = 10,\r\n inView = false,\r\n inViewMargin = \"-50px\",\r\n yOffset = 6,\r\n}: BlurFadeProps) {\r\n const variants = {\r\n hidden: {\r\n opacity: 0,\r\n filter: `blur(${blur}px)`,\r\n y: yOffset,\r\n },\r\n visible: {\r\n opacity: 1,\r\n filter: \"blur(0px)\",\r\n y: 0,\r\n },\r\n };\r\n\r\n return (\r\n <motion.div\r\n className={cn(className)}\r\n initial=\"hidden\"\r\n animate={inView ? undefined : \"visible\"}\r\n whileInView={inView ? \"visible\" : undefined}\r\n viewport={{ once: true, margin: inViewMargin }}\r\n variants={variants}\r\n transition={{\r\n duration,\r\n delay,\r\n ease: [0.25, 0.1, 0.25, 1],\r\n }}\r\n >\r\n {children}\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport default BlurFade;\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 t(...r){return tailwindMerge.twMerge(clsx.clsx(r))}function i({children:r,className:e,hover:o=false}){return jsxRuntime.jsx("div",{className:t("rounded-xl p-6","bg-white dark:bg-zinc-900","border border-zinc-200 dark:border-zinc-800",o&&"transition-all duration-200 hover:shadow-lg hover:-translate-y-1",e),children:r})}function C({children:r,className:e}){return jsxRuntime.jsx("div",{className:t("mb-4",e),children:r})}function m({children:r,className:e}){return jsxRuntime.jsx("h3",{className:t("text-lg font-semibold",e),children:r})}function f({children:r,className:e}){return jsxRuntime.jsx("p",{className:t("text-sm text-zinc-500 dark:text-zinc-400",e),children:r})}function u({children:r,className:e}){return jsxRuntime.jsx("div",{className:t("",e),children:r})}function N({children:r,className:e}){return jsxRuntime.jsx("div",{className:t("mt-4 pt-4 border-t border-zinc-200 dark:border-zinc-800",e),children:r})}var h=i;exports.Card=i;exports.CardContent=u;exports.CardDescription=f;exports.CardFooter=N;exports.CardHeader=C;exports.CardTitle=m;exports.default=h;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/card/index.tsx"],"names":["cn","inputs","twMerge","clsx","Card","children","className","hover","jsx","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","card_default"],"mappings":"+KAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,CAAAA,CAAK,CAAE,SAAAC,CAAAA,CAAU,SAAA,CAAAC,CAAAA,CAAW,KAAA,CAAAC,EAAQ,KAAM,CAAA,CAAc,CACtE,OACEC,eAAC,KAAA,CAAA,CACC,SAAA,CAAWR,CAAAA,CACT,gBAAA,CACA,4BACA,6CAAA,CACAO,CAAAA,EAAS,kEAAA,CACTD,CACF,EAEC,QAAA,CAAAD,CAAAA,CACH,CAEJ,CAOO,SAASI,CAAAA,CAAW,CAAE,QAAA,CAAAJ,CAAAA,CAAU,UAAAC,CAAU,CAAA,CAAoB,CACnE,OAAOE,eAAC,KAAA,CAAA,CAAI,SAAA,CAAWR,CAAAA,CAAG,MAAA,CAAQM,CAAS,CAAA,CAAI,QAAA,CAAAD,CAAAA,CAAS,CAC1D,CAOO,SAASK,CAAAA,CAAU,CAAE,QAAA,CAAAL,EAAU,SAAA,CAAAC,CAAU,CAAA,CAAmB,CACjE,OAAOE,cAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAWR,CAAAA,CAAG,wBAAyBM,CAAS,CAAA,CAAI,QAAA,CAAAD,CAAAA,CAAS,CAC1E,CAOO,SAASM,CAAAA,CAAgB,CAAE,SAAAN,CAAAA,CAAU,SAAA,CAAAC,CAAU,CAAA,CAAyB,CAC7E,OAAOE,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAWR,EAAG,0CAAA,CAA4CM,CAAS,CAAA,CAAI,QAAA,CAAAD,EAAS,CAC5F,CAOO,SAASO,CAAAA,CAAY,CAAE,QAAA,CAAAP,CAAAA,CAAU,SAAA,CAAAC,CAAU,EAAqB,CACrE,OAAOE,cAAAA,CAAC,KAAA,CAAA,CAAI,UAAWR,CAAAA,CAAG,EAAA,CAAIM,CAAS,CAAA,CAAI,SAAAD,CAAAA,CAAS,CACtD,CAOO,SAASQ,EAAW,CAAE,QAAA,CAAAR,CAAAA,CAAU,SAAA,CAAAC,CAAU,CAAA,CAAoB,CACnE,OAAOE,cAAAA,CAAC,OAAI,SAAA,CAAWR,CAAAA,CAAG,yDAAA,CAA2DM,CAAS,EAAI,QAAA,CAAAD,CAAAA,CAAS,CAC7G,KAEOS,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 { cn } from \"../utils/cn\";\r\n\r\ninterface CardProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n hover?: boolean;\r\n}\r\n\r\nexport function Card({ children, className, hover = false }: CardProps) {\r\n return (\r\n <div\r\n className={cn(\r\n \"rounded-xl p-6\",\r\n \"bg-white dark:bg-zinc-900\",\r\n \"border border-zinc-200 dark:border-zinc-800\",\r\n hover && \"transition-all duration-200 hover:shadow-lg hover:-translate-y-1\",\r\n className\r\n )}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\ninterface CardHeaderProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function CardHeader({ children, className }: CardHeaderProps) {\r\n return <div className={cn(\"mb-4\", className)}>{children}</div>;\r\n}\r\n\r\ninterface CardTitleProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function CardTitle({ children, className }: CardTitleProps) {\r\n return <h3 className={cn(\"text-lg font-semibold\", className)}>{children}</h3>;\r\n}\r\n\r\ninterface CardDescriptionProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function CardDescription({ children, className }: CardDescriptionProps) {\r\n return <p className={cn(\"text-sm text-zinc-500 dark:text-zinc-400\", className)}>{children}</p>;\r\n}\r\n\r\ninterface CardContentProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function CardContent({ children, className }: CardContentProps) {\r\n return <div className={cn(\"\", className)}>{children}</div>;\r\n}\r\n\r\ninterface CardFooterProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function CardFooter({ children, className }: CardFooterProps) {\r\n return <div className={cn(\"mt-4 pt-4 border-t border-zinc-200 dark:border-zinc-800\", className)}>{children}</div>;\r\n}\r\n\r\nexport default Card;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function t(...r){return twMerge(clsx(r))}function i({children:r,className:e,hover:o=false}){return jsx("div",{className:t("rounded-xl p-6","bg-white dark:bg-zinc-900","border border-zinc-200 dark:border-zinc-800",o&&"transition-all duration-200 hover:shadow-lg hover:-translate-y-1",e),children:r})}function C({children:r,className:e}){return jsx("div",{className:t("mb-4",e),children:r})}function m({children:r,className:e}){return jsx("h3",{className:t("text-lg font-semibold",e),children:r})}function f({children:r,className:e}){return jsx("p",{className:t("text-sm text-zinc-500 dark:text-zinc-400",e),children:r})}function u({children:r,className:e}){return jsx("div",{className:t("",e),children:r})}function N({children:r,className:e}){return jsx("div",{className:t("mt-4 pt-4 border-t border-zinc-200 dark:border-zinc-800",e),children:r})}var h=i;export{i as Card,u as CardContent,f as CardDescription,N as CardFooter,C as CardHeader,m as CardTitle,h as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/card/index.tsx"],"names":["cn","inputs","twMerge","clsx","Card","children","className","hover","jsx","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","card_default"],"mappings":"iGAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,CAAAA,CAAK,CAAE,SAAAC,CAAAA,CAAU,SAAA,CAAAC,CAAAA,CAAW,KAAA,CAAAC,EAAQ,KAAM,CAAA,CAAc,CACtE,OACEC,IAAC,KAAA,CAAA,CACC,SAAA,CAAWR,CAAAA,CACT,gBAAA,CACA,4BACA,6CAAA,CACAO,CAAAA,EAAS,kEAAA,CACTD,CACF,EAEC,QAAA,CAAAD,CAAAA,CACH,CAEJ,CAOO,SAASI,CAAAA,CAAW,CAAE,QAAA,CAAAJ,CAAAA,CAAU,UAAAC,CAAU,CAAA,CAAoB,CACnE,OAAOE,IAAC,KAAA,CAAA,CAAI,SAAA,CAAWR,CAAAA,CAAG,MAAA,CAAQM,CAAS,CAAA,CAAI,QAAA,CAAAD,CAAAA,CAAS,CAC1D,CAOO,SAASK,CAAAA,CAAU,CAAE,QAAA,CAAAL,EAAU,SAAA,CAAAC,CAAU,CAAA,CAAmB,CACjE,OAAOE,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAWR,CAAAA,CAAG,wBAAyBM,CAAS,CAAA,CAAI,QAAA,CAAAD,CAAAA,CAAS,CAC1E,CAOO,SAASM,CAAAA,CAAgB,CAAE,SAAAN,CAAAA,CAAU,SAAA,CAAAC,CAAU,CAAA,CAAyB,CAC7E,OAAOE,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAWR,EAAG,0CAAA,CAA4CM,CAAS,CAAA,CAAI,QAAA,CAAAD,EAAS,CAC5F,CAOO,SAASO,CAAAA,CAAY,CAAE,QAAA,CAAAP,CAAAA,CAAU,SAAA,CAAAC,CAAU,EAAqB,CACrE,OAAOE,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAWR,CAAAA,CAAG,EAAA,CAAIM,CAAS,CAAA,CAAI,SAAAD,CAAAA,CAAS,CACtD,CAOO,SAASQ,EAAW,CAAE,QAAA,CAAAR,CAAAA,CAAU,SAAA,CAAAC,CAAU,CAAA,CAAoB,CACnE,OAAOE,GAAAA,CAAC,OAAI,SAAA,CAAWR,CAAAA,CAAG,yDAAA,CAA2DM,CAAS,EAAI,QAAA,CAAAD,CAAAA,CAAS,CAC7G,KAEOS,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 { cn } from \"../utils/cn\";\r\n\r\ninterface CardProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n hover?: boolean;\r\n}\r\n\r\nexport function Card({ children, className, hover = false }: CardProps) {\r\n return (\r\n <div\r\n className={cn(\r\n \"rounded-xl p-6\",\r\n \"bg-white dark:bg-zinc-900\",\r\n \"border border-zinc-200 dark:border-zinc-800\",\r\n hover && \"transition-all duration-200 hover:shadow-lg hover:-translate-y-1\",\r\n className\r\n )}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\ninterface CardHeaderProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function CardHeader({ children, className }: CardHeaderProps) {\r\n return <div className={cn(\"mb-4\", className)}>{children}</div>;\r\n}\r\n\r\ninterface CardTitleProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function CardTitle({ children, className }: CardTitleProps) {\r\n return <h3 className={cn(\"text-lg font-semibold\", className)}>{children}</h3>;\r\n}\r\n\r\ninterface CardDescriptionProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function CardDescription({ children, className }: CardDescriptionProps) {\r\n return <p className={cn(\"text-sm text-zinc-500 dark:text-zinc-400\", className)}>{children}</p>;\r\n}\r\n\r\ninterface CardContentProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function CardContent({ children, className }: CardContentProps) {\r\n return <div className={cn(\"\", className)}>{children}</div>;\r\n}\r\n\r\ninterface CardFooterProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function CardFooter({ children, className }: CardFooterProps) {\r\n return <div className={cn(\"mt-4 pt-4 border-t border-zinc-200 dark:border-zinc-800\", className)}>{children}</div>;\r\n}\r\n\r\nexport default Card;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function t(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function b({checked:e=false,onChange:a,label:r,disabled:n=false,className:s}){return jsxRuntime.jsxs("label",{className:t("inline-flex items-center gap-2 cursor-pointer",n&&"opacity-50 cursor-not-allowed",s),children:[jsxRuntime.jsx("button",{type:"button",role:"checkbox","aria-checked":e,disabled:n,onClick:()=>a?.(!e),className:t("w-5 h-5 rounded border-2 flex items-center justify-center transition-colors",e?"bg-blue-500 border-blue-500":"bg-transparent border-zinc-300 dark:border-zinc-600"),children:jsxRuntime.jsx(framerMotion.motion.svg,{initial:false,animate:{scale:e?1:0,opacity:e?1:0},transition:{duration:.15},className:"w-3 h-3 text-white",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:3,d:"M5 13l4 4L19 7"})})}),r&&jsxRuntime.jsx("span",{className:"text-sm",children:r})]})}var g=b;exports.Checkbox=b;exports.default=g;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/checkbox/index.tsx"],"names":["cn","inputs","twMerge","clsx","Checkbox","checked","onChange","label","disabled","className","jsxs","jsx","motion","checkbox_default"],"mappings":"qNAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCQO,SAASG,EAAS,CAAE,OAAA,CAAAC,CAAAA,CAAU,KAAA,CAAO,QAAA,CAAAC,CAAAA,CAAU,KAAA,CAAAC,CAAAA,CAAO,QAAA,CAAAC,CAAAA,CAAW,KAAA,CAAO,SAAA,CAAAC,CAAU,CAAA,CAAkB,CACzG,OACEC,gBAAC,OAAA,CAAA,CACC,SAAA,CAAWV,CAAAA,CACT,+CAAA,CACAQ,CAAAA,EAAY,+BAAA,CACZC,CACF,CAAA,CAEA,UAAAE,cAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,IAAA,CAAK,UAAA,CACL,cAAA,CAAcN,CAAAA,CACd,SAAUG,CAAAA,CACV,OAAA,CAAS,IAAMF,CAAAA,GAAW,CAACD,CAAO,CAAA,CAClC,SAAA,CAAWL,CAAAA,CACT,6EAAA,CACAK,CAAAA,CACI,6BAAA,CACA,qDACN,CAAA,CAEA,QAAA,CAAAM,cAAAA,CAACC,oBAAO,GAAA,CAAP,CACC,OAAA,CAAS,KAAA,CACT,OAAA,CAAS,CAAE,KAAA,CAAOP,CAAAA,CAAU,EAAI,CAAA,CAAG,OAAA,CAASA,CAAAA,CAAU,CAAA,CAAI,CAAE,CAAA,CAC5D,UAAA,CAAY,CAAE,SAAU,GAAK,CAAA,CAC7B,SAAA,CAAU,oBAAA,CACV,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,OAAA,CAAQ,WAAA,CAER,QAAA,CAAAM,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,QAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,gBAAA,CAAiB,CAAA,CACxF,CAAA,CACF,CAAA,CACCJ,CAAAA,EAASI,eAAC,MAAA,CAAA,CAAK,SAAA,CAAU,SAAA,CAAW,QAAA,CAAAJ,CAAAA,CAAM,CAAA,CAAA,CAC7C,CAEJ,KAEOM,CAAAA,CAAQT","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface CheckboxProps {\r\n checked?: boolean;\r\n onChange?: (checked: boolean) => void;\r\n label?: string;\r\n disabled?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport function Checkbox({ checked = false, onChange, label, disabled = false, className }: CheckboxProps) {\r\n return (\r\n <label\r\n className={cn(\r\n \"inline-flex items-center gap-2 cursor-pointer\",\r\n disabled && \"opacity-50 cursor-not-allowed\",\r\n className\r\n )}\r\n >\r\n <button\r\n type=\"button\"\r\n role=\"checkbox\"\r\n aria-checked={checked}\r\n disabled={disabled}\r\n onClick={() => onChange?.(!checked)}\r\n className={cn(\r\n \"w-5 h-5 rounded border-2 flex items-center justify-center transition-colors\",\r\n checked\r\n ? \"bg-blue-500 border-blue-500\"\r\n : \"bg-transparent border-zinc-300 dark:border-zinc-600\"\r\n )}\r\n >\r\n <motion.svg\r\n initial={false}\r\n animate={{ scale: checked ? 1 : 0, opacity: checked ? 1 : 0 }}\r\n transition={{ duration: 0.15 }}\r\n className=\"w-3 h-3 text-white\"\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={3} d=\"M5 13l4 4L19 7\" />\r\n </motion.svg>\r\n </button>\r\n {label && <span className=\"text-sm\">{label}</span>}\r\n </label>\r\n );\r\n}\r\n\r\nexport default Checkbox;\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(...e){return twMerge(clsx(e))}function b({checked:e=false,onChange:a,label:r,disabled:n=false,className:s}){return jsxs("label",{className:t("inline-flex items-center gap-2 cursor-pointer",n&&"opacity-50 cursor-not-allowed",s),children:[jsx("button",{type:"button",role:"checkbox","aria-checked":e,disabled:n,onClick:()=>a?.(!e),className:t("w-5 h-5 rounded border-2 flex items-center justify-center transition-colors",e?"bg-blue-500 border-blue-500":"bg-transparent border-zinc-300 dark:border-zinc-600"),children:jsx(motion.svg,{initial:false,animate:{scale:e?1:0,opacity:e?1:0},transition:{duration:.15},className:"w-3 h-3 text-white",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:3,d:"M5 13l4 4L19 7"})})}),r&&jsx("span",{className:"text-sm",children:r})]})}var g=b;export{b as Checkbox,g as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/checkbox/index.tsx"],"names":["cn","inputs","twMerge","clsx","Checkbox","checked","onChange","label","disabled","className","jsxs","jsx","motion","checkbox_default"],"mappings":"yIAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCQO,SAASG,EAAS,CAAE,OAAA,CAAAC,CAAAA,CAAU,KAAA,CAAO,QAAA,CAAAC,CAAAA,CAAU,KAAA,CAAAC,CAAAA,CAAO,QAAA,CAAAC,CAAAA,CAAW,KAAA,CAAO,SAAA,CAAAC,CAAU,CAAA,CAAkB,CACzG,OACEC,KAAC,OAAA,CAAA,CACC,SAAA,CAAWV,CAAAA,CACT,+CAAA,CACAQ,CAAAA,EAAY,+BAAA,CACZC,CACF,CAAA,CAEA,UAAAE,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,IAAA,CAAK,UAAA,CACL,cAAA,CAAcN,CAAAA,CACd,SAAUG,CAAAA,CACV,OAAA,CAAS,IAAMF,CAAAA,GAAW,CAACD,CAAO,CAAA,CAClC,SAAA,CAAWL,CAAAA,CACT,6EAAA,CACAK,CAAAA,CACI,6BAAA,CACA,qDACN,CAAA,CAEA,QAAA,CAAAM,GAAAA,CAACC,OAAO,GAAA,CAAP,CACC,OAAA,CAAS,KAAA,CACT,OAAA,CAAS,CAAE,KAAA,CAAOP,CAAAA,CAAU,EAAI,CAAA,CAAG,OAAA,CAASA,CAAAA,CAAU,CAAA,CAAI,CAAE,CAAA,CAC5D,UAAA,CAAY,CAAE,SAAU,GAAK,CAAA,CAC7B,SAAA,CAAU,oBAAA,CACV,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,OAAA,CAAQ,WAAA,CAER,QAAA,CAAAM,GAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,QAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,gBAAA,CAAiB,CAAA,CACxF,CAAA,CACF,CAAA,CACCJ,CAAAA,EAASI,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,SAAA,CAAW,QAAA,CAAAJ,CAAAA,CAAM,CAAA,CAAA,CAC7C,CAEJ,KAEOM,CAAAA,CAAQT","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface CheckboxProps {\r\n checked?: boolean;\r\n onChange?: (checked: boolean) => void;\r\n label?: string;\r\n disabled?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport function Checkbox({ checked = false, onChange, label, disabled = false, className }: CheckboxProps) {\r\n return (\r\n <label\r\n className={cn(\r\n \"inline-flex items-center gap-2 cursor-pointer\",\r\n disabled && \"opacity-50 cursor-not-allowed\",\r\n className\r\n )}\r\n >\r\n <button\r\n type=\"button\"\r\n role=\"checkbox\"\r\n aria-checked={checked}\r\n disabled={disabled}\r\n onClick={() => onChange?.(!checked)}\r\n className={cn(\r\n \"w-5 h-5 rounded border-2 flex items-center justify-center transition-colors\",\r\n checked\r\n ? \"bg-blue-500 border-blue-500\"\r\n : \"bg-transparent border-zinc-300 dark:border-zinc-600\"\r\n )}\r\n >\r\n <motion.svg\r\n initial={false}\r\n animate={{ scale: checked ? 1 : 0, opacity: checked ? 1 : 0 }}\r\n transition={{ duration: 0.15 }}\r\n className=\"w-3 h-3 text-white\"\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={3} d=\"M5 13l4 4L19 7\" />\r\n </motion.svg>\r\n </button>\r\n {label && <span className=\"text-sm\">{label}</span>}\r\n </label>\r\n );\r\n}\r\n\r\nexport default Checkbox;\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 f(...n){return tailwindMerge.twMerge(clsx.clsx(n))}function C({text:n,spinDuration:s=20,onHover:i="speedUp",className:u=""}){let l=Array.from(n),a=framerMotion.useAnimation(),r=framerMotion.useMotionValue(0);react.useEffect(()=>{let t=r.get();a.start({rotate:t+360,scale:1,transition:{rotate:{from:t,to:t+360,ease:"linear",duration:s,repeat:1/0},scale:{type:"spring",damping:20,stiffness:300}}});},[s,a,r]);let g=()=>{let t=r.get(),e=s,o=1;switch(i){case "slowDown":e=s*2;break;case "speedUp":e=s/4;break;case "pause":e=0;break;case "goBonkers":e=s/20,o=.8;break}i==="pause"?a.stop():a.start({rotate:t+360,scale:o,transition:{rotate:{from:t,to:t+360,ease:"linear",duration:e,repeat:1/0},scale:{type:"spring",damping:20,stiffness:300}}});},d=()=>{let t=r.get();a.start({rotate:t+360,scale:1,transition:{rotate:{from:t,to:t+360,ease:"linear",duration:s,repeat:1/0},scale:{type:"spring",damping:20,stiffness:300}}});};return jsxRuntime.jsx(framerMotion.motion.div,{className:f("relative w-32 h-32 cursor-pointer",u),style:{rotate:r},initial:{rotate:0},animate:a,onMouseEnter:g,onMouseLeave:d,children:l.map((t,e)=>{let o=360/l.length*e,c=60,p=o*Math.PI/180,y=Math.cos(p)*c,x=Math.sin(p)*c;return jsxRuntime.jsx("span",{className:"absolute text-lg font-bold",style:{transform:`translate(-50%, -50%) translate(${y}px, ${x}px) rotate(${o+90}deg)`,left:"50%",top:"50%"},children:t},e)})})}var V=C;exports.CircularText=C;exports.default=V;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/circular-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","CircularText","text","spinDuration","onHover","className","letters","controls","useAnimation","rotation","useMotionValue","useEffect","start","handleHoverStart","duration","scale","handleHoverEnd","jsx","motion","letter","i","rotationDeg","radius","angle","x","y","circular_text_default"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect } from \"react\";\r\nimport { motion, useAnimation, useMotionValue } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface CircularTextProps {\r\n text: string;\r\n spinDuration?: number;\r\n onHover?: \"slowDown\" | \"speedUp\" | \"pause\" | \"goBonkers\";\r\n className?: string;\r\n}\r\n\r\nexport function CircularText({\r\n text,\r\n spinDuration = 20,\r\n onHover = \"speedUp\",\r\n className = \"\",\r\n}: CircularTextProps) {\r\n const letters = Array.from(text);\r\n const controls = useAnimation();\r\n const rotation = useMotionValue(0);\r\n\r\n useEffect(() => {\r\n const start = rotation.get();\r\n controls.start({\r\n rotate: start + 360,\r\n scale: 1,\r\n transition: {\r\n rotate: { from: start, to: start + 360, ease: \"linear\", duration: spinDuration, repeat: Infinity },\r\n scale: { type: \"spring\", damping: 20, stiffness: 300 },\r\n },\r\n });\r\n }, [spinDuration, controls, rotation]);\r\n\r\n const handleHoverStart = () => {\r\n const start = rotation.get();\r\n let duration = spinDuration;\r\n let scale = 1;\r\n\r\n switch (onHover) {\r\n case \"slowDown\": duration = spinDuration * 2; break;\r\n case \"speedUp\": duration = spinDuration / 4; break;\r\n case \"pause\": duration = 0; break;\r\n case \"goBonkers\": duration = spinDuration / 20; scale = 0.8; break;\r\n }\r\n\r\n if (onHover === \"pause\") {\r\n controls.stop();\r\n } else {\r\n controls.start({\r\n rotate: start + 360,\r\n scale,\r\n transition: {\r\n rotate: { from: start, to: start + 360, ease: \"linear\", duration, repeat: Infinity },\r\n scale: { type: \"spring\", damping: 20, stiffness: 300 },\r\n },\r\n });\r\n }\r\n };\r\n\r\n const handleHoverEnd = () => {\r\n const start = rotation.get();\r\n controls.start({\r\n rotate: start + 360,\r\n scale: 1,\r\n transition: {\r\n rotate: { from: start, to: start + 360, ease: \"linear\", duration: spinDuration, repeat: Infinity },\r\n scale: { type: \"spring\", damping: 20, stiffness: 300 },\r\n },\r\n });\r\n };\r\n\r\n return (\r\n <motion.div\r\n className={cn(\"relative w-32 h-32 cursor-pointer\", className)}\r\n style={{ rotate: rotation }}\r\n initial={{ rotate: 0 }}\r\n animate={controls}\r\n onMouseEnter={handleHoverStart}\r\n onMouseLeave={handleHoverEnd}\r\n >\r\n {letters.map((letter, i) => {\r\n const rotationDeg = (360 / letters.length) * i;\r\n const radius = 60;\r\n const angle = (rotationDeg * Math.PI) / 180;\r\n const x = Math.cos(angle) * radius;\r\n const y = Math.sin(angle) * radius;\r\n\r\n return (\r\n <span\r\n key={i}\r\n className=\"absolute text-lg font-bold\"\r\n style={{\r\n transform: `translate(-50%, -50%) translate(${x}px, ${y}px) rotate(${rotationDeg + 90}deg)`,\r\n left: \"50%\",\r\n top: \"50%\",\r\n }}\r\n >\r\n {letter}\r\n </span>\r\n );\r\n })}\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport default CircularText;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useEffect}from'react';import {useAnimation,useMotionValue,motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function f(...n){return twMerge(clsx(n))}function C({text:n,spinDuration:s=20,onHover:i="speedUp",className:u=""}){let l=Array.from(n),a=useAnimation(),r=useMotionValue(0);useEffect(()=>{let t=r.get();a.start({rotate:t+360,scale:1,transition:{rotate:{from:t,to:t+360,ease:"linear",duration:s,repeat:1/0},scale:{type:"spring",damping:20,stiffness:300}}});},[s,a,r]);let g=()=>{let t=r.get(),e=s,o=1;switch(i){case "slowDown":e=s*2;break;case "speedUp":e=s/4;break;case "pause":e=0;break;case "goBonkers":e=s/20,o=.8;break}i==="pause"?a.stop():a.start({rotate:t+360,scale:o,transition:{rotate:{from:t,to:t+360,ease:"linear",duration:e,repeat:1/0},scale:{type:"spring",damping:20,stiffness:300}}});},d=()=>{let t=r.get();a.start({rotate:t+360,scale:1,transition:{rotate:{from:t,to:t+360,ease:"linear",duration:s,repeat:1/0},scale:{type:"spring",damping:20,stiffness:300}}});};return jsx(motion.div,{className:f("relative w-32 h-32 cursor-pointer",u),style:{rotate:r},initial:{rotate:0},animate:a,onMouseEnter:g,onMouseLeave:d,children:l.map((t,e)=>{let o=360/l.length*e,c=60,p=o*Math.PI/180,y=Math.cos(p)*c,x=Math.sin(p)*c;return jsx("span",{className:"absolute text-lg font-bold",style:{transform:`translate(-50%, -50%) translate(${y}px, ${x}px) rotate(${o+90}deg)`,left:"50%",top:"50%"},children:t},e)})})}var V=C;export{C as CircularText,V as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/circular-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","CircularText","text","spinDuration","onHover","className","letters","controls","useAnimation","rotation","useMotionValue","useEffect","start","handleHoverStart","duration","scale","handleHoverEnd","jsx","motion","letter","i","rotationDeg","radius","angle","x","y","circular_text_default"],"mappings":"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","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect } from \"react\";\r\nimport { motion, useAnimation, useMotionValue } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface CircularTextProps {\r\n text: string;\r\n spinDuration?: number;\r\n onHover?: \"slowDown\" | \"speedUp\" | \"pause\" | \"goBonkers\";\r\n className?: string;\r\n}\r\n\r\nexport function CircularText({\r\n text,\r\n spinDuration = 20,\r\n onHover = \"speedUp\",\r\n className = \"\",\r\n}: CircularTextProps) {\r\n const letters = Array.from(text);\r\n const controls = useAnimation();\r\n const rotation = useMotionValue(0);\r\n\r\n useEffect(() => {\r\n const start = rotation.get();\r\n controls.start({\r\n rotate: start + 360,\r\n scale: 1,\r\n transition: {\r\n rotate: { from: start, to: start + 360, ease: \"linear\", duration: spinDuration, repeat: Infinity },\r\n scale: { type: \"spring\", damping: 20, stiffness: 300 },\r\n },\r\n });\r\n }, [spinDuration, controls, rotation]);\r\n\r\n const handleHoverStart = () => {\r\n const start = rotation.get();\r\n let duration = spinDuration;\r\n let scale = 1;\r\n\r\n switch (onHover) {\r\n case \"slowDown\": duration = spinDuration * 2; break;\r\n case \"speedUp\": duration = spinDuration / 4; break;\r\n case \"pause\": duration = 0; break;\r\n case \"goBonkers\": duration = spinDuration / 20; scale = 0.8; break;\r\n }\r\n\r\n if (onHover === \"pause\") {\r\n controls.stop();\r\n } else {\r\n controls.start({\r\n rotate: start + 360,\r\n scale,\r\n transition: {\r\n rotate: { from: start, to: start + 360, ease: \"linear\", duration, repeat: Infinity },\r\n scale: { type: \"spring\", damping: 20, stiffness: 300 },\r\n },\r\n });\r\n }\r\n };\r\n\r\n const handleHoverEnd = () => {\r\n const start = rotation.get();\r\n controls.start({\r\n rotate: start + 360,\r\n scale: 1,\r\n transition: {\r\n rotate: { from: start, to: start + 360, ease: \"linear\", duration: spinDuration, repeat: Infinity },\r\n scale: { type: \"spring\", damping: 20, stiffness: 300 },\r\n },\r\n });\r\n };\r\n\r\n return (\r\n <motion.div\r\n className={cn(\"relative w-32 h-32 cursor-pointer\", className)}\r\n style={{ rotate: rotation }}\r\n initial={{ rotate: 0 }}\r\n animate={controls}\r\n onMouseEnter={handleHoverStart}\r\n onMouseLeave={handleHoverEnd}\r\n >\r\n {letters.map((letter, i) => {\r\n const rotationDeg = (360 / letters.length) * i;\r\n const radius = 60;\r\n const angle = (rotationDeg * Math.PI) / 180;\r\n const x = Math.cos(angle) * radius;\r\n const y = Math.sin(angle) * radius;\r\n\r\n return (\r\n <span\r\n key={i}\r\n className=\"absolute text-lg font-bold\"\r\n style={{\r\n transform: `translate(-50%, -50%) translate(${x}px, ${y}px) rotate(${rotationDeg + 90}deg)`,\r\n left: \"50%\",\r\n top: \"50%\",\r\n }}\r\n >\r\n {letter}\r\n </span>\r\n );\r\n })}\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport default CircularText;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),jsxRuntime=require('react/jsx-runtime');function z({sparkColor:d="#000000",sparkSize:g=10,sparkRadius:b=15,sparkCount:p=8,duration:h=400,easing:v="ease-out",extraScale:y=1,children:x}){let a=react.useRef(null),m=react.useRef([]),R=react.useRef(null);react.useEffect(()=>{let e=a.current;if(!e)return;let n=e.parentElement;if(!n)return;let r,s=()=>{let{width:c,height:o}=n.getBoundingClientRect();(e.width!==c||e.height!==o)&&(e.width=c,e.height=o);},i=()=>{clearTimeout(r),r=setTimeout(s,100);},t=new ResizeObserver(i);return t.observe(n),s(),()=>{t.disconnect(),clearTimeout(r);}},[]);let T=react.useCallback(e=>{switch(v){case "linear":return e;case "ease-in":return e*e;case "ease-in-out":return e<.5?2*e*e:-1+(4-2*e)*e;default:return e*(2-e)}},[v]);return react.useEffect(()=>{let e=a.current;if(!e)return;let n=e.getContext("2d");if(!n)return;let r,s=i=>{R.current||(R.current=i),n.clearRect(0,0,e.width,e.height),m.current=m.current.filter(t=>{let c=i-t.startTime;if(c>=h)return false;let o=c/h,u=T(o),l=u*b*y,w=g*(1-u),k=t.x+l*Math.cos(t.angle),M=t.y+l*Math.sin(t.angle),S=t.x+(l+w)*Math.cos(t.angle),A=t.y+(l+w)*Math.sin(t.angle);return n.strokeStyle=d,n.lineWidth=2,n.beginPath(),n.moveTo(k,M),n.lineTo(S,A),n.stroke(),true}),r=requestAnimationFrame(s);};return r=requestAnimationFrame(s),()=>{cancelAnimationFrame(r);}},[d,g,b,h,T,y]),jsxRuntime.jsxs("div",{style:{position:"relative",width:"100%",height:"100%"},onClick:e=>{let n=a.current;if(!n)return;let r=n.getBoundingClientRect(),s=e.clientX-r.left,i=e.clientY-r.top,t=performance.now(),c=Array.from({length:p},(o,u)=>({x:s,y:i,angle:2*Math.PI*u/p,startTime:t}));m.current.push(...c);},children:[jsxRuntime.jsx("canvas",{ref:a,style:{width:"100%",height:"100%",display:"block",userSelect:"none",position:"absolute",top:0,left:0,pointerEvents:"none"}}),x]})}var L=z;exports.ClickSpark=z;exports.default=L;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/click-spark/index.tsx"],"names":["ClickSpark","sparkColor","sparkSize","sparkRadius","sparkCount","duration","easing","extraScale","children","canvasRef","useRef","sparksRef","startTimeRef","useEffect","canvas","parent","resizeTimeout","resizeCanvas","width","height","handleResize","ro","easeFunc","useCallback","t","ctx","animationId","draw","timestamp","spark","elapsed","progress","eased","distance","lineLength","x1","y1","x2","y2","jsxs","rect","x","y","now","newSparks","_","i","jsx","click_spark_default"],"mappings":"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","file":"index.js","sourcesContent":["\"use client\";\r\n\r\nimport { useRef, useEffect, useCallback, ReactNode } from \"react\";\r\n\r\ninterface ClickSparkProps {\r\n sparkColor?: string;\r\n sparkSize?: number;\r\n sparkRadius?: number;\r\n sparkCount?: number;\r\n duration?: number;\r\n easing?: string;\r\n extraScale?: number;\r\n children: ReactNode;\r\n}\r\n\r\nexport function ClickSpark({\r\n sparkColor = \"#000000\",\r\n sparkSize = 10,\r\n sparkRadius = 15,\r\n sparkCount = 8,\r\n duration = 400,\r\n easing = \"ease-out\",\r\n extraScale = 1.0,\r\n children,\r\n}: ClickSparkProps) {\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const sparksRef = useRef<\r\n Array<{\r\n x: number;\r\n y: number;\r\n angle: number;\r\n startTime: number;\r\n }>\r\n >([]);\r\n const startTimeRef = useRef<number | null>(null);\r\n\r\n useEffect(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n\r\n const parent = canvas.parentElement;\r\n if (!parent) return;\r\n\r\n let resizeTimeout: ReturnType<typeof setTimeout>;\r\n\r\n const resizeCanvas = () => {\r\n const { width, height } = parent.getBoundingClientRect();\r\n if (canvas.width !== width || canvas.height !== height) {\r\n canvas.width = width;\r\n canvas.height = height;\r\n }\r\n };\r\n\r\n const handleResize = () => {\r\n clearTimeout(resizeTimeout);\r\n resizeTimeout = setTimeout(resizeCanvas, 100);\r\n };\r\n\r\n const ro = new ResizeObserver(handleResize);\r\n ro.observe(parent);\r\n\r\n resizeCanvas();\r\n\r\n return () => {\r\n ro.disconnect();\r\n clearTimeout(resizeTimeout);\r\n };\r\n }, []);\r\n\r\n const easeFunc = useCallback(\r\n (t: number) => {\r\n switch (easing) {\r\n case \"linear\":\r\n return t;\r\n case \"ease-in\":\r\n return t * t;\r\n case \"ease-in-out\":\r\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\r\n default:\r\n return t * (2 - t);\r\n }\r\n },\r\n [easing]\r\n );\r\n\r\n useEffect(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n let animationId: number;\r\n\r\n const draw = (timestamp: number) => {\r\n if (!startTimeRef.current) {\r\n startTimeRef.current = timestamp;\r\n }\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n sparksRef.current = sparksRef.current.filter((spark) => {\r\n const elapsed = timestamp - spark.startTime;\r\n if (elapsed >= duration) {\r\n return false;\r\n }\r\n\r\n const progress = elapsed / duration;\r\n const eased = easeFunc(progress);\r\n\r\n const distance = eased * sparkRadius * extraScale;\r\n const lineLength = sparkSize * (1 - eased);\r\n\r\n const x1 = spark.x + distance * Math.cos(spark.angle);\r\n const y1 = spark.y + distance * Math.sin(spark.angle);\r\n const x2 = spark.x + (distance + lineLength) * Math.cos(spark.angle);\r\n const y2 = spark.y + (distance + lineLength) * Math.sin(spark.angle);\r\n\r\n ctx.strokeStyle = sparkColor;\r\n ctx.lineWidth = 2;\r\n ctx.beginPath();\r\n ctx.moveTo(x1, y1);\r\n ctx.lineTo(x2, y2);\r\n ctx.stroke();\r\n\r\n return true;\r\n });\r\n\r\n animationId = requestAnimationFrame(draw);\r\n };\r\n\r\n animationId = requestAnimationFrame(draw);\r\n\r\n return () => {\r\n cancelAnimationFrame(animationId);\r\n };\r\n }, [sparkColor, sparkSize, sparkRadius, duration, easeFunc, extraScale]);\r\n\r\n const handleClick = (e: React.MouseEvent) => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n const rect = canvas.getBoundingClientRect();\r\n const x = e.clientX - rect.left;\r\n const y = e.clientY - rect.top;\r\n\r\n const now = performance.now();\r\n const newSparks = Array.from({ length: sparkCount }, (_, i) => ({\r\n x,\r\n y,\r\n angle: (2 * Math.PI * i) / sparkCount,\r\n startTime: now,\r\n }));\r\n\r\n sparksRef.current.push(...newSparks);\r\n };\r\n\r\n return (\r\n <div\r\n style={{\r\n position: \"relative\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n }}\r\n onClick={handleClick}\r\n >\r\n <canvas\r\n ref={canvasRef}\r\n style={{\r\n width: \"100%\",\r\n height: \"100%\",\r\n display: \"block\",\r\n userSelect: \"none\",\r\n position: \"absolute\",\r\n top: 0,\r\n left: 0,\r\n pointerEvents: \"none\",\r\n }}\r\n />\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport default ClickSpark;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useRef,useEffect,useCallback}from'react';import {jsxs,jsx}from'react/jsx-runtime';function z({sparkColor:d="#000000",sparkSize:g=10,sparkRadius:b=15,sparkCount:p=8,duration:h=400,easing:v="ease-out",extraScale:y=1,children:x}){let a=useRef(null),m=useRef([]),R=useRef(null);useEffect(()=>{let e=a.current;if(!e)return;let n=e.parentElement;if(!n)return;let r,s=()=>{let{width:c,height:o}=n.getBoundingClientRect();(e.width!==c||e.height!==o)&&(e.width=c,e.height=o);},i=()=>{clearTimeout(r),r=setTimeout(s,100);},t=new ResizeObserver(i);return t.observe(n),s(),()=>{t.disconnect(),clearTimeout(r);}},[]);let T=useCallback(e=>{switch(v){case "linear":return e;case "ease-in":return e*e;case "ease-in-out":return e<.5?2*e*e:-1+(4-2*e)*e;default:return e*(2-e)}},[v]);return useEffect(()=>{let e=a.current;if(!e)return;let n=e.getContext("2d");if(!n)return;let r,s=i=>{R.current||(R.current=i),n.clearRect(0,0,e.width,e.height),m.current=m.current.filter(t=>{let c=i-t.startTime;if(c>=h)return false;let o=c/h,u=T(o),l=u*b*y,w=g*(1-u),k=t.x+l*Math.cos(t.angle),M=t.y+l*Math.sin(t.angle),S=t.x+(l+w)*Math.cos(t.angle),A=t.y+(l+w)*Math.sin(t.angle);return n.strokeStyle=d,n.lineWidth=2,n.beginPath(),n.moveTo(k,M),n.lineTo(S,A),n.stroke(),true}),r=requestAnimationFrame(s);};return r=requestAnimationFrame(s),()=>{cancelAnimationFrame(r);}},[d,g,b,h,T,y]),jsxs("div",{style:{position:"relative",width:"100%",height:"100%"},onClick:e=>{let n=a.current;if(!n)return;let r=n.getBoundingClientRect(),s=e.clientX-r.left,i=e.clientY-r.top,t=performance.now(),c=Array.from({length:p},(o,u)=>({x:s,y:i,angle:2*Math.PI*u/p,startTime:t}));m.current.push(...c);},children:[jsx("canvas",{ref:a,style:{width:"100%",height:"100%",display:"block",userSelect:"none",position:"absolute",top:0,left:0,pointerEvents:"none"}}),x]})}var L=z;export{z as ClickSpark,L as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/click-spark/index.tsx"],"names":["ClickSpark","sparkColor","sparkSize","sparkRadius","sparkCount","duration","easing","extraScale","children","canvasRef","useRef","sparksRef","startTimeRef","useEffect","canvas","parent","resizeTimeout","resizeCanvas","width","height","handleResize","ro","easeFunc","useCallback","t","ctx","animationId","draw","timestamp","spark","elapsed","progress","eased","distance","lineLength","x1","y1","x2","y2","jsxs","rect","x","y","now","newSparks","_","i","jsx","click_spark_default"],"mappings":"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","file":"index.mjs","sourcesContent":["\"use client\";\r\n\r\nimport { useRef, useEffect, useCallback, ReactNode } from \"react\";\r\n\r\ninterface ClickSparkProps {\r\n sparkColor?: string;\r\n sparkSize?: number;\r\n sparkRadius?: number;\r\n sparkCount?: number;\r\n duration?: number;\r\n easing?: string;\r\n extraScale?: number;\r\n children: ReactNode;\r\n}\r\n\r\nexport function ClickSpark({\r\n sparkColor = \"#000000\",\r\n sparkSize = 10,\r\n sparkRadius = 15,\r\n sparkCount = 8,\r\n duration = 400,\r\n easing = \"ease-out\",\r\n extraScale = 1.0,\r\n children,\r\n}: ClickSparkProps) {\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const sparksRef = useRef<\r\n Array<{\r\n x: number;\r\n y: number;\r\n angle: number;\r\n startTime: number;\r\n }>\r\n >([]);\r\n const startTimeRef = useRef<number | null>(null);\r\n\r\n useEffect(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n\r\n const parent = canvas.parentElement;\r\n if (!parent) return;\r\n\r\n let resizeTimeout: ReturnType<typeof setTimeout>;\r\n\r\n const resizeCanvas = () => {\r\n const { width, height } = parent.getBoundingClientRect();\r\n if (canvas.width !== width || canvas.height !== height) {\r\n canvas.width = width;\r\n canvas.height = height;\r\n }\r\n };\r\n\r\n const handleResize = () => {\r\n clearTimeout(resizeTimeout);\r\n resizeTimeout = setTimeout(resizeCanvas, 100);\r\n };\r\n\r\n const ro = new ResizeObserver(handleResize);\r\n ro.observe(parent);\r\n\r\n resizeCanvas();\r\n\r\n return () => {\r\n ro.disconnect();\r\n clearTimeout(resizeTimeout);\r\n };\r\n }, []);\r\n\r\n const easeFunc = useCallback(\r\n (t: number) => {\r\n switch (easing) {\r\n case \"linear\":\r\n return t;\r\n case \"ease-in\":\r\n return t * t;\r\n case \"ease-in-out\":\r\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\r\n default:\r\n return t * (2 - t);\r\n }\r\n },\r\n [easing]\r\n );\r\n\r\n useEffect(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n let animationId: number;\r\n\r\n const draw = (timestamp: number) => {\r\n if (!startTimeRef.current) {\r\n startTimeRef.current = timestamp;\r\n }\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n sparksRef.current = sparksRef.current.filter((spark) => {\r\n const elapsed = timestamp - spark.startTime;\r\n if (elapsed >= duration) {\r\n return false;\r\n }\r\n\r\n const progress = elapsed / duration;\r\n const eased = easeFunc(progress);\r\n\r\n const distance = eased * sparkRadius * extraScale;\r\n const lineLength = sparkSize * (1 - eased);\r\n\r\n const x1 = spark.x + distance * Math.cos(spark.angle);\r\n const y1 = spark.y + distance * Math.sin(spark.angle);\r\n const x2 = spark.x + (distance + lineLength) * Math.cos(spark.angle);\r\n const y2 = spark.y + (distance + lineLength) * Math.sin(spark.angle);\r\n\r\n ctx.strokeStyle = sparkColor;\r\n ctx.lineWidth = 2;\r\n ctx.beginPath();\r\n ctx.moveTo(x1, y1);\r\n ctx.lineTo(x2, y2);\r\n ctx.stroke();\r\n\r\n return true;\r\n });\r\n\r\n animationId = requestAnimationFrame(draw);\r\n };\r\n\r\n animationId = requestAnimationFrame(draw);\r\n\r\n return () => {\r\n cancelAnimationFrame(animationId);\r\n };\r\n }, [sparkColor, sparkSize, sparkRadius, duration, easeFunc, extraScale]);\r\n\r\n const handleClick = (e: React.MouseEvent) => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n const rect = canvas.getBoundingClientRect();\r\n const x = e.clientX - rect.left;\r\n const y = e.clientY - rect.top;\r\n\r\n const now = performance.now();\r\n const newSparks = Array.from({ length: sparkCount }, (_, i) => ({\r\n x,\r\n y,\r\n angle: (2 * Math.PI * i) / sparkCount,\r\n startTime: now,\r\n }));\r\n\r\n sparksRef.current.push(...newSparks);\r\n };\r\n\r\n return (\r\n <div\r\n style={{\r\n position: \"relative\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n }}\r\n onClick={handleClick}\r\n >\r\n <canvas\r\n ref={canvasRef}\r\n style={{\r\n width: \"100%\",\r\n height: \"100%\",\r\n display: \"block\",\r\n userSelect: \"none\",\r\n position: \"absolute\",\r\n top: 0,\r\n left: 0,\r\n pointerEvents: \"none\",\r\n }}\r\n />\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport default ClickSpark;\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(...o){return tailwindMerge.twMerge(clsx.clsx(o))}function d({className:o,children:e,shortcut:n="CMD + K",...a}){return jsxRuntime.jsxs("button",{...a,className:r("relative p-2 rounded-lg overflow-hidden","bg-gradient-to-b from-zinc-50 to-zinc-100 dark:from-zinc-800 dark:to-zinc-900","border border-zinc-200 dark:border-zinc-800","hover:border-zinc-300 dark:hover:border-zinc-700","transition-all duration-300 ease-out group","inline-flex items-center justify-center gap-2",o),children:[jsxRuntime.jsx("svg",{className:r("w-4 h-4 text-zinc-600 dark:text-zinc-400","transition-all duration-300","group-hover:scale-110 group-hover:rotate-[-4deg] group-active:scale-95"),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M18 3a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3H6a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3V6a3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3h12a3 3 0 0 0 3-3 3 3 0 0 0-3-3z"})}),jsxRuntime.jsx("span",{className:"text-sm text-zinc-600 dark:text-zinc-400",children:e||n}),jsxRuntime.jsx("span",{className:"absolute inset-0 bg-gradient-to-r from-indigo-500/0 via-indigo-500/10 to-indigo-500/0 translate-x-[-100%] group-hover:translate-x-[100%] transition-transform duration-500 ease-out"})]})}var g=d;exports.CommandButton=d;exports.default=g;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/command-button/index.tsx"],"names":["cn","inputs","twMerge","clsx","CommandButton","className","children","shortcut","props","jsxs","jsx","command_button_default"],"mappings":"+KAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,UAAKF,CAAM,CAAC,CAC7B,CCGO,SAASG,CAAAA,CAAc,CAAE,SAAA,CAAAC,CAAAA,CAAW,SAAAC,CAAAA,CAAU,QAAA,CAAAC,EAAW,SAAA,CAAW,GAAGC,CAAM,CAAA,CAAuB,CACzG,OACEC,eAAAA,CAAC,QAAA,CAAA,CACE,GAAGD,CAAAA,CACJ,SAAA,CAAWR,CAAAA,CACT,yCAAA,CACA,+EAAA,CACA,6CAAA,CACA,mDACA,4CAAA,CACA,+CAAA,CACAK,CACF,CAAA,CAEA,QAAA,CAAA,CAAAK,eAAC,KAAA,CAAA,CACC,SAAA,CAAWV,EACT,0CAAA,CACA,6BAAA,CACA,wEACF,CAAA,CACA,IAAA,CAAK,OACL,OAAA,CAAQ,WAAA,CACR,OAAO,cAAA,CAEP,QAAA,CAAAU,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,EAAG,CAAA,CAAE,0LAAA,CAA2L,EAClQ,CAAA,CACAA,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0CAAA,CAA4C,QAAA,CAAAJ,GAAYC,CAAAA,CAAS,CAAA,CACjFG,eAAC,MAAA,CAAA,CAAK,SAAA,CAAU,sLAAsL,CAAA,CAAA,CACxM,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 CommandButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n shortcut?: string;\r\n}\r\n\r\nexport function CommandButton({ className, children, shortcut = \"CMD + K\", ...props }: CommandButtonProps) {\r\n return (\r\n <button\r\n {...props}\r\n className={cn(\r\n \"relative p-2 rounded-lg overflow-hidden\",\r\n \"bg-gradient-to-b from-zinc-50 to-zinc-100 dark:from-zinc-800 dark:to-zinc-900\",\r\n \"border border-zinc-200 dark:border-zinc-800\",\r\n \"hover:border-zinc-300 dark:hover:border-zinc-700\",\r\n \"transition-all duration-300 ease-out group\",\r\n \"inline-flex items-center justify-center gap-2\",\r\n className\r\n )}\r\n >\r\n <svg\r\n className={cn(\r\n \"w-4 h-4 text-zinc-600 dark:text-zinc-400\",\r\n \"transition-all duration-300\",\r\n \"group-hover:scale-110 group-hover:rotate-[-4deg] group-active:scale-95\"\r\n )}\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M18 3a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3H6a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3V6a3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3h12a3 3 0 0 0 3-3 3 3 0 0 0-3-3z\" />\r\n </svg>\r\n <span className=\"text-sm text-zinc-600 dark:text-zinc-400\">{children || shortcut}</span>\r\n <span className=\"absolute inset-0 bg-gradient-to-r from-indigo-500/0 via-indigo-500/10 to-indigo-500/0 translate-x-[-100%] group-hover:translate-x-[100%] transition-transform duration-500 ease-out\" />\r\n </button>\r\n );\r\n}\r\n\r\nexport default CommandButton;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function r(...o){return twMerge(clsx(o))}function d({className:o,children:e,shortcut:n="CMD + K",...a}){return jsxs("button",{...a,className:r("relative p-2 rounded-lg overflow-hidden","bg-gradient-to-b from-zinc-50 to-zinc-100 dark:from-zinc-800 dark:to-zinc-900","border border-zinc-200 dark:border-zinc-800","hover:border-zinc-300 dark:hover:border-zinc-700","transition-all duration-300 ease-out group","inline-flex items-center justify-center gap-2",o),children:[jsx("svg",{className:r("w-4 h-4 text-zinc-600 dark:text-zinc-400","transition-all duration-300","group-hover:scale-110 group-hover:rotate-[-4deg] group-active:scale-95"),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M18 3a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3H6a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3V6a3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3h12a3 3 0 0 0 3-3 3 3 0 0 0-3-3z"})}),jsx("span",{className:"text-sm text-zinc-600 dark:text-zinc-400",children:e||n}),jsx("span",{className:"absolute inset-0 bg-gradient-to-r from-indigo-500/0 via-indigo-500/10 to-indigo-500/0 translate-x-[-100%] group-hover:translate-x-[100%] transition-transform duration-500 ease-out"})]})}var g=d;export{d as CommandButton,g as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/command-button/index.tsx"],"names":["cn","inputs","twMerge","clsx","CommandButton","className","children","shortcut","props","jsxs","jsx","command_button_default"],"mappings":"sGAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,KAAKF,CAAM,CAAC,CAC7B,CCGO,SAASG,CAAAA,CAAc,CAAE,SAAA,CAAAC,CAAAA,CAAW,SAAAC,CAAAA,CAAU,QAAA,CAAAC,EAAW,SAAA,CAAW,GAAGC,CAAM,CAAA,CAAuB,CACzG,OACEC,IAAAA,CAAC,QAAA,CAAA,CACE,GAAGD,CAAAA,CACJ,SAAA,CAAWR,CAAAA,CACT,yCAAA,CACA,+EAAA,CACA,6CAAA,CACA,mDACA,4CAAA,CACA,+CAAA,CACAK,CACF,CAAA,CAEA,QAAA,CAAA,CAAAK,IAAC,KAAA,CAAA,CACC,SAAA,CAAWV,EACT,0CAAA,CACA,6BAAA,CACA,wEACF,CAAA,CACA,IAAA,CAAK,OACL,OAAA,CAAQ,WAAA,CACR,OAAO,cAAA,CAEP,QAAA,CAAAU,GAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,EAAG,CAAA,CAAE,0LAAA,CAA2L,EAClQ,CAAA,CACAA,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0CAAA,CAA4C,QAAA,CAAAJ,GAAYC,CAAAA,CAAS,CAAA,CACjFG,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,sLAAsL,CAAA,CAAA,CACxM,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 CommandButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n shortcut?: string;\r\n}\r\n\r\nexport function CommandButton({ className, children, shortcut = \"CMD + K\", ...props }: CommandButtonProps) {\r\n return (\r\n <button\r\n {...props}\r\n className={cn(\r\n \"relative p-2 rounded-lg overflow-hidden\",\r\n \"bg-gradient-to-b from-zinc-50 to-zinc-100 dark:from-zinc-800 dark:to-zinc-900\",\r\n \"border border-zinc-200 dark:border-zinc-800\",\r\n \"hover:border-zinc-300 dark:hover:border-zinc-700\",\r\n \"transition-all duration-300 ease-out group\",\r\n \"inline-flex items-center justify-center gap-2\",\r\n className\r\n )}\r\n >\r\n <svg\r\n className={cn(\r\n \"w-4 h-4 text-zinc-600 dark:text-zinc-400\",\r\n \"transition-all duration-300\",\r\n \"group-hover:scale-110 group-hover:rotate-[-4deg] group-active:scale-95\"\r\n )}\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M18 3a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3H6a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3V6a3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3h12a3 3 0 0 0 3-3 3 3 0 0 0-3-3z\" />\r\n </svg>\r\n <span className=\"text-sm text-zinc-600 dark:text-zinc-400\">{children || shortcut}</span>\r\n <span className=\"absolute inset-0 bg-gradient-to-r from-indigo-500/0 via-indigo-500/10 to-indigo-500/0 translate-x-[-100%] group-hover:translate-x-[100%] transition-transform duration-500 ease-out\" />\r\n </button>\r\n );\r\n}\r\n\r\nexport default CommandButton;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function n(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function f({text:e="Copy",value:t,onCopy:s,className:c}){let[l,r]=react.useState(false);return jsxRuntime.jsx("button",{onClick:async()=>{try{t&&await navigator.clipboard.writeText(t),s?.(),r(!0),setTimeout(()=>r(!1),2e3);}catch(p){console.error("Failed to copy:",p);}},className:n("inline-flex items-center gap-2 px-4 py-2","bg-transparent hover:bg-zinc-100 dark:hover:bg-zinc-800","text-zinc-900 dark:text-zinc-100","border border-zinc-300 dark:border-zinc-700","rounded-md transition-all duration-200 font-medium text-sm",c),children:l?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("svg",{className:"w-4 h-4 text-green-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})}),"Copied!"]}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[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:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"})}),e]})})}var y=f;exports.CopyButton=f;exports.default=y;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/copy-button/index.tsx"],"names":["cn","inputs","twMerge","clsx","CopyButton","text","value","onCopy","className","copied","setCopied","useState","jsx","error","jsxs","Fragment","copy_button_default"],"mappings":"sMAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCOO,SAASG,EAAW,CACzB,IAAA,CAAAC,EAAO,MAAA,CACP,KAAA,CAAAC,EACA,MAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CACF,EAAoB,CAClB,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIC,cAAAA,CAAS,KAAK,CAAA,CAe1C,OACEC,cAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAfe,SAAY,CAC7B,GAAI,CACEN,CAAAA,EACF,MAAM,UAAU,SAAA,CAAU,SAAA,CAAUA,CAAK,CAAA,CAE3CC,KAAS,CACTG,CAAAA,CAAU,CAAA,CAAI,CAAA,CACd,WAAW,IAAMA,CAAAA,CAAU,EAAK,CAAA,CAAG,GAAI,EACzC,CAAA,MAASG,CAAAA,CAAO,CACd,OAAA,CAAQ,MAAM,iBAAA,CAAmBA,CAAK,EACxC,CACF,EAKI,SAAA,CAAWb,CAAAA,CACT,0CAAA,CACA,yDAAA,CACA,mCACA,6CAAA,CACA,4DAAA,CACAQ,CACF,CAAA,CAEC,SAAAC,CAAAA,CACCK,eAAAA,CAAAC,mBAAAA,CAAA,CACE,UAAAH,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wBAAA,CAAyB,KAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,YAChF,QAAA,CAAAA,cAAAA,CAAC,QAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,iBAAiB,CAAA,CACxF,CAAA,CAAM,SAAA,CAAA,CAER,CAAA,CAEAE,gBAAAC,mBAAAA,CAAA,CACE,QAAA,CAAA,CAAAH,cAAAA,CAAC,OAAI,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,OAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACjE,QAAA,CAAAA,eAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,QAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,uHAAA,CAAwH,EAC/L,CAAA,CACCP,CAAAA,CAAAA,CACH,EAEJ,CAEJ,KAEOW,CAAAA,CAAQZ","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface CopyButtonProps {\r\n text?: string;\r\n value?: string;\r\n onCopy?: () => void;\r\n className?: string;\r\n}\r\n\r\nexport function CopyButton({ \r\n text = \"Copy\",\r\n value,\r\n onCopy,\r\n className \r\n}: CopyButtonProps) {\r\n const [copied, setCopied] = useState(false);\r\n\r\n const handleCopy = async () => {\r\n try {\r\n if (value) {\r\n await navigator.clipboard.writeText(value);\r\n }\r\n onCopy?.();\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), 2000);\r\n } catch (error) {\r\n console.error(\"Failed to copy:\", error);\r\n }\r\n };\r\n\r\n return (\r\n <button\r\n onClick={handleCopy}\r\n className={cn(\r\n \"inline-flex items-center gap-2 px-4 py-2\",\r\n \"bg-transparent hover:bg-zinc-100 dark:hover:bg-zinc-800\",\r\n \"text-zinc-900 dark:text-zinc-100\",\r\n \"border border-zinc-300 dark:border-zinc-700\",\r\n \"rounded-md transition-all duration-200 font-medium text-sm\",\r\n className\r\n )}\r\n >\r\n {copied ? (\r\n <>\r\n <svg className=\"w-4 h-4 text-green-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\r\n </svg>\r\n Copied!\r\n </>\r\n ) : (\r\n <>\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=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\" />\r\n </svg>\r\n {text}\r\n </>\r\n )}\r\n </button>\r\n );\r\n}\r\n\r\nexport default CopyButton;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useState}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx,jsxs,Fragment}from'react/jsx-runtime';function n(...e){return twMerge(clsx(e))}function f({text:e="Copy",value:t,onCopy:s,className:c}){let[l,r]=useState(false);return jsx("button",{onClick:async()=>{try{t&&await navigator.clipboard.writeText(t),s?.(),r(!0),setTimeout(()=>r(!1),2e3);}catch(p){console.error("Failed to copy:",p);}},className:n("inline-flex items-center gap-2 px-4 py-2","bg-transparent hover:bg-zinc-100 dark:hover:bg-zinc-800","text-zinc-900 dark:text-zinc-100","border border-zinc-300 dark:border-zinc-700","rounded-md transition-all duration-200 font-medium text-sm",c),children:l?jsxs(Fragment,{children:[jsx("svg",{className:"w-4 h-4 text-green-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})}),"Copied!"]}):jsxs(Fragment,{children:[jsx("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"})}),e]})})}var y=f;export{f as CopyButton,y as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/copy-button/index.tsx"],"names":["cn","inputs","twMerge","clsx","CopyButton","text","value","onCopy","className","copied","setCopied","useState","jsx","error","jsxs","Fragment","copy_button_default"],"mappings":"4IAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCOO,SAASG,EAAW,CACzB,IAAA,CAAAC,EAAO,MAAA,CACP,KAAA,CAAAC,EACA,MAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CACF,EAAoB,CAClB,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIC,QAAAA,CAAS,KAAK,CAAA,CAe1C,OACEC,GAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAfe,SAAY,CAC7B,GAAI,CACEN,CAAAA,EACF,MAAM,UAAU,SAAA,CAAU,SAAA,CAAUA,CAAK,CAAA,CAE3CC,KAAS,CACTG,CAAAA,CAAU,CAAA,CAAI,CAAA,CACd,WAAW,IAAMA,CAAAA,CAAU,EAAK,CAAA,CAAG,GAAI,EACzC,CAAA,MAASG,CAAAA,CAAO,CACd,OAAA,CAAQ,MAAM,iBAAA,CAAmBA,CAAK,EACxC,CACF,EAKI,SAAA,CAAWb,CAAAA,CACT,0CAAA,CACA,yDAAA,CACA,mCACA,6CAAA,CACA,4DAAA,CACAQ,CACF,CAAA,CAEC,SAAAC,CAAAA,CACCK,IAAAA,CAAAC,QAAAA,CAAA,CACE,UAAAH,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wBAAA,CAAyB,KAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,YAChF,QAAA,CAAAA,GAAAA,CAAC,QAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,iBAAiB,CAAA,CACxF,CAAA,CAAM,SAAA,CAAA,CAER,CAAA,CAEAE,KAAAC,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAH,GAAAA,CAAC,OAAI,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,OAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACjE,QAAA,CAAAA,IAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,QAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,uHAAA,CAAwH,EAC/L,CAAA,CACCP,CAAAA,CAAAA,CACH,EAEJ,CAEJ,KAEOW,CAAAA,CAAQZ","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface CopyButtonProps {\r\n text?: string;\r\n value?: string;\r\n onCopy?: () => void;\r\n className?: string;\r\n}\r\n\r\nexport function CopyButton({ \r\n text = \"Copy\",\r\n value,\r\n onCopy,\r\n className \r\n}: CopyButtonProps) {\r\n const [copied, setCopied] = useState(false);\r\n\r\n const handleCopy = async () => {\r\n try {\r\n if (value) {\r\n await navigator.clipboard.writeText(value);\r\n }\r\n onCopy?.();\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), 2000);\r\n } catch (error) {\r\n console.error(\"Failed to copy:\", error);\r\n }\r\n };\r\n\r\n return (\r\n <button\r\n onClick={handleCopy}\r\n className={cn(\r\n \"inline-flex items-center gap-2 px-4 py-2\",\r\n \"bg-transparent hover:bg-zinc-100 dark:hover:bg-zinc-800\",\r\n \"text-zinc-900 dark:text-zinc-100\",\r\n \"border border-zinc-300 dark:border-zinc-700\",\r\n \"rounded-md transition-all duration-200 font-medium text-sm\",\r\n className\r\n )}\r\n >\r\n {copied ? (\r\n <>\r\n <svg className=\"w-4 h-4 text-green-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\r\n </svg>\r\n Copied!\r\n </>\r\n ) : (\r\n <>\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=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\" />\r\n </svg>\r\n {text}\r\n </>\r\n )}\r\n </button>\r\n );\r\n}\r\n\r\nexport default CopyButton;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var framerMotion=require('framer-motion'),react=require('react'),jsxRuntime=require('react/jsx-runtime');function b({mv:i,number:e,height:t}){let u=framerMotion.useTransform(i,r=>{let n=r%10,s=(10+e-n)%10,o=s*t;return s>5&&(o-=10*t),o});return jsxRuntime.jsx(framerMotion.motion.span,{style:{y:u,position:"absolute",inset:0,display:"flex",justifyContent:"center"},children:e})}function y({place:i,value:e,height:t,digitStyle:u}){let r=Math.floor(e/i),n=framerMotion.useSpring(r,{stiffness:200,damping:25});return react.useEffect(()=>{n.set(r);},[n,r]),jsxRuntime.jsx("div",{style:{height:t,position:"relative",overflow:"hidden",...u},children:Array.from({length:10},(s,o)=>jsxRuntime.jsx(b,{mv:n,number:o,height:t},o))})}function S({value:i,fontSize:e=100,padding:t=0,places:u=[100,10,1],gap:r=8,textColor:n="#000000",fontWeight:s=900,containerStyle:o,digitStyle:m}){let p=e+t;return jsxRuntime.jsx("div",{style:{display:"flex",gap:r,fontSize:e,color:n,fontWeight:s,...o},children:u.map(l=>jsxRuntime.jsx(y,{place:l,value:i,height:p,digitStyle:m},l))})}var C=S;exports.Counter=S;exports.default=C;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/counter/index.tsx"],"names":["Number","mv","number","height","y","useTransform","latest","placeValue","offset","memo","jsx","motion","Digit","place","value","digitStyle","valueRoundedToPlace","animatedValue","useSpring","useEffect","_","i","Counter","fontSize","padding","places","gap","textColor","fontWeight","containerStyle","counter_default"],"mappings":"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","file":"index.js","sourcesContent":["\"use client\";\r\n\r\nimport { MotionValue, motion, useSpring, useTransform } from \"framer-motion\";\r\nimport { useEffect } from \"react\";\r\n\r\ninterface NumberProps {\r\n mv: MotionValue<number>;\r\n number: number;\r\n height: number;\r\n}\r\n\r\nfunction Number({ mv, number, height }: NumberProps) {\r\n const y = useTransform(mv, (latest) => {\r\n const placeValue = latest % 10;\r\n let offset = (10 + number - placeValue) % 10;\r\n let memo = offset * height;\r\n if (offset > 5) {\r\n memo -= 10 * height;\r\n }\r\n return memo;\r\n });\r\n\r\n return (\r\n <motion.span style={{ y, position: \"absolute\", inset: 0, display: \"flex\", justifyContent: \"center\" }}>\r\n {number}\r\n </motion.span>\r\n );\r\n}\r\n\r\ninterface DigitProps {\r\n place: number;\r\n value: number;\r\n height: number;\r\n digitStyle?: React.CSSProperties;\r\n}\r\n\r\nfunction Digit({ place, value, height, digitStyle }: DigitProps) {\r\n const valueRoundedToPlace = Math.floor(value / place);\r\n const animatedValue = useSpring(valueRoundedToPlace, { stiffness: 200, damping: 25 });\r\n\r\n useEffect(() => {\r\n animatedValue.set(valueRoundedToPlace);\r\n }, [animatedValue, valueRoundedToPlace]);\r\n\r\n return (\r\n <div style={{ height, position: \"relative\", overflow: \"hidden\", ...digitStyle }}>\r\n {Array.from({ length: 10 }, (_, i) => (\r\n <Number key={i} mv={animatedValue} number={i} height={height} />\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport interface CounterProps {\r\n value: number;\r\n fontSize?: number;\r\n padding?: number;\r\n places?: number[];\r\n gap?: number;\r\n textColor?: string;\r\n fontWeight?: React.CSSProperties[\"fontWeight\"];\r\n containerStyle?: React.CSSProperties;\r\n digitStyle?: React.CSSProperties;\r\n}\r\n\r\nexport function Counter({\r\n value,\r\n fontSize = 100,\r\n padding = 0,\r\n places = [100, 10, 1],\r\n gap = 8,\r\n textColor = \"#000000\",\r\n fontWeight = 900,\r\n containerStyle,\r\n digitStyle,\r\n}: CounterProps) {\r\n const height = fontSize + padding;\r\n\r\n return (\r\n <div style={{ display: \"flex\", gap, fontSize, color: textColor, fontWeight, ...containerStyle }}>\r\n {places.map((place) => (\r\n <Digit key={place} place={place} value={value} height={height} digitStyle={digitStyle} />\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default Counter;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useSpring,useTransform,motion}from'framer-motion';import {useEffect}from'react';import {jsx}from'react/jsx-runtime';function b({mv:i,number:e,height:t}){let u=useTransform(i,r=>{let n=r%10,s=(10+e-n)%10,o=s*t;return s>5&&(o-=10*t),o});return jsx(motion.span,{style:{y:u,position:"absolute",inset:0,display:"flex",justifyContent:"center"},children:e})}function y({place:i,value:e,height:t,digitStyle:u}){let r=Math.floor(e/i),n=useSpring(r,{stiffness:200,damping:25});return useEffect(()=>{n.set(r);},[n,r]),jsx("div",{style:{height:t,position:"relative",overflow:"hidden",...u},children:Array.from({length:10},(s,o)=>jsx(b,{mv:n,number:o,height:t},o))})}function S({value:i,fontSize:e=100,padding:t=0,places:u=[100,10,1],gap:r=8,textColor:n="#000000",fontWeight:s=900,containerStyle:o,digitStyle:m}){let p=e+t;return jsx("div",{style:{display:"flex",gap:r,fontSize:e,color:n,fontWeight:s,...o},children:u.map(l=>jsx(y,{place:l,value:i,height:p,digitStyle:m},l))})}var C=S;export{S as Counter,C as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/counter/index.tsx"],"names":["Number","mv","number","height","y","useTransform","latest","placeValue","offset","memo","jsx","motion","Digit","place","value","digitStyle","valueRoundedToPlace","animatedValue","useSpring","useEffect","_","i","Counter","fontSize","padding","places","gap","textColor","fontWeight","containerStyle","counter_default"],"mappings":"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","file":"index.mjs","sourcesContent":["\"use client\";\r\n\r\nimport { MotionValue, motion, useSpring, useTransform } from \"framer-motion\";\r\nimport { useEffect } from \"react\";\r\n\r\ninterface NumberProps {\r\n mv: MotionValue<number>;\r\n number: number;\r\n height: number;\r\n}\r\n\r\nfunction Number({ mv, number, height }: NumberProps) {\r\n const y = useTransform(mv, (latest) => {\r\n const placeValue = latest % 10;\r\n let offset = (10 + number - placeValue) % 10;\r\n let memo = offset * height;\r\n if (offset > 5) {\r\n memo -= 10 * height;\r\n }\r\n return memo;\r\n });\r\n\r\n return (\r\n <motion.span style={{ y, position: \"absolute\", inset: 0, display: \"flex\", justifyContent: \"center\" }}>\r\n {number}\r\n </motion.span>\r\n );\r\n}\r\n\r\ninterface DigitProps {\r\n place: number;\r\n value: number;\r\n height: number;\r\n digitStyle?: React.CSSProperties;\r\n}\r\n\r\nfunction Digit({ place, value, height, digitStyle }: DigitProps) {\r\n const valueRoundedToPlace = Math.floor(value / place);\r\n const animatedValue = useSpring(valueRoundedToPlace, { stiffness: 200, damping: 25 });\r\n\r\n useEffect(() => {\r\n animatedValue.set(valueRoundedToPlace);\r\n }, [animatedValue, valueRoundedToPlace]);\r\n\r\n return (\r\n <div style={{ height, position: \"relative\", overflow: \"hidden\", ...digitStyle }}>\r\n {Array.from({ length: 10 }, (_, i) => (\r\n <Number key={i} mv={animatedValue} number={i} height={height} />\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport interface CounterProps {\r\n value: number;\r\n fontSize?: number;\r\n padding?: number;\r\n places?: number[];\r\n gap?: number;\r\n textColor?: string;\r\n fontWeight?: React.CSSProperties[\"fontWeight\"];\r\n containerStyle?: React.CSSProperties;\r\n digitStyle?: React.CSSProperties;\r\n}\r\n\r\nexport function Counter({\r\n value,\r\n fontSize = 100,\r\n padding = 0,\r\n places = [100, 10, 1],\r\n gap = 8,\r\n textColor = \"#000000\",\r\n fontWeight = 900,\r\n containerStyle,\r\n digitStyle,\r\n}: CounterProps) {\r\n const height = fontSize + padding;\r\n\r\n return (\r\n <div style={{ display: \"flex\", gap, fontSize, color: textColor, fontWeight, ...containerStyle }}>\r\n {places.map((place) => (\r\n <Digit key={place} place={place} value={value} height={height} digitStyle={digitStyle} />\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default Counter;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),framerMotion=require('framer-motion'),jsxRuntime=require('react/jsx-runtime');function F({text:r,speed:w=50,maxIterations:y=10,sequential:S=false,revealDirection:N="start",useOriginalCharsOnly:I=false,characters:x="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()_+",className:L="",parentClassName:P="",encryptedClassName:C="",animateOn:f="hover",...k}){let[T,h]=react.useState(r),[g,M]=react.useState(false),[A,m]=react.useState(false),[R,z]=react.useState(new Set),[H,j]=react.useState(false),D=react.useRef(null);react.useEffect(()=>{let o,i=0,l=s=>{let a=r.length;switch(N){case "start":return s.size;case "end":return a-1-s.size;case "center":{let n=Math.floor(a/2),t=Math.floor(s.size/2),c=s.size%2===0?n+t:n-t-1;if(c>=0&&c<a&&!s.has(c))return c;for(let e=0;e<a;e++)if(!s.has(e))return e;return 0}default:return s.size}},b=I?Array.from(new Set(r.split(""))).filter(s=>s!==" "):x.split(""),d=(s,a)=>{if(I){let n=s.split("").map((e,u)=>({char:e,isSpace:e===" ",index:u,isRevealed:a.has(u)})),t=n.filter(e=>!e.isSpace&&!e.isRevealed).map(e=>e.char);for(let e=t.length-1;e>0;e--){let u=Math.floor(Math.random()*(e+1));[t[e],t[u]]=[t[u],t[e]];}let c=0;return n.map(e=>e.isSpace?" ":e.isRevealed?s[e.index]:t[c++]).join("")}else return s.split("").map((n,t)=>n===" "?" ":a.has(t)?s[t]:b[Math.floor(Math.random()*b.length)]).join("")};return g?(m(true),o=setInterval(()=>{z(s=>{if(S)if(s.size<r.length){let a=l(s),n=new Set(s);return n.add(a),h(d(r,n)),n}else return clearInterval(o),m(false),s;else return h(d(r,s)),i++,i>=y&&(clearInterval(o),m(false),h(r)),s});},w)):(h(r),z(new Set),m(false)),()=>{o&&clearInterval(o);}},[g,r,w,y,S,N,x,I]),react.useEffect(()=>{if(f!=="view"&&f!=="both")return;let o=b=>{b.forEach(d=>{d.isIntersecting&&!H&&(M(true),j(true));});},i=new IntersectionObserver(o,{threshold:.1}),l=D.current;return l&&i.observe(l),()=>{l&&i.unobserve(l);}},[f,H]);let J=f==="hover"||f==="both"?{onMouseEnter:()=>M(true),onMouseLeave:()=>M(false)}:{};return jsxRuntime.jsxs(framerMotion.motion.span,{className:P,ref:D,style:{display:"inline-block",whiteSpace:"pre-wrap"},...J,...k,children:[jsxRuntime.jsx("span",{className:"sr-only",children:T}),jsxRuntime.jsx("span",{"aria-hidden":"true",children:T.split("").map((o,i)=>{let l=R.has(i)||!A||!g;return jsxRuntime.jsx("span",{className:l?L:C,children:o},i)})})]})}var V=F;exports.DecryptedText=F;exports.default=V;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map