bynana-ui 1.1.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/dist/accordion/index.js +2 -0
  2. package/dist/accordion/index.js.map +1 -0
  3. package/dist/accordion/index.mjs +2 -0
  4. package/dist/accordion/index.mjs.map +1 -0
  5. package/dist/alert/index.js +2 -0
  6. package/dist/alert/index.js.map +1 -0
  7. package/dist/alert/index.mjs +2 -0
  8. package/dist/alert/index.mjs.map +1 -0
  9. package/dist/attract-button/index.js +2 -0
  10. package/dist/attract-button/index.js.map +1 -0
  11. package/dist/attract-button/index.mjs +2 -0
  12. package/dist/attract-button/index.mjs.map +1 -0
  13. package/dist/card/index.js +2 -0
  14. package/dist/card/index.js.map +1 -0
  15. package/dist/card/index.mjs +2 -0
  16. package/dist/card/index.mjs.map +1 -0
  17. package/dist/checkbox/index.js +2 -0
  18. package/dist/checkbox/index.js.map +1 -0
  19. package/dist/checkbox/index.mjs +2 -0
  20. package/dist/checkbox/index.mjs.map +1 -0
  21. package/dist/circular-text/index.js +2 -0
  22. package/dist/circular-text/index.js.map +1 -0
  23. package/dist/circular-text/index.mjs +2 -0
  24. package/dist/circular-text/index.mjs.map +1 -0
  25. package/dist/command-button/index.js +2 -0
  26. package/dist/command-button/index.js.map +1 -0
  27. package/dist/command-button/index.mjs +2 -0
  28. package/dist/command-button/index.mjs.map +1 -0
  29. package/dist/copy-button/index.js +2 -0
  30. package/dist/copy-button/index.js.map +1 -0
  31. package/dist/copy-button/index.mjs +2 -0
  32. package/dist/copy-button/index.mjs.map +1 -0
  33. package/dist/counter/index.js +2 -0
  34. package/dist/counter/index.js.map +1 -0
  35. package/dist/counter/index.mjs +2 -0
  36. package/dist/counter/index.mjs.map +1 -0
  37. package/dist/decrypted-text/index.js +2 -0
  38. package/dist/decrypted-text/index.js.map +1 -0
  39. package/dist/decrypted-text/index.mjs +2 -0
  40. package/dist/decrypted-text/index.mjs.map +1 -0
  41. package/dist/dock/index.js +2 -0
  42. package/dist/dock/index.js.map +1 -0
  43. package/dist/dock/index.mjs +2 -0
  44. package/dist/dock/index.mjs.map +1 -0
  45. package/dist/drawer/index.js +2 -0
  46. package/dist/drawer/index.js.map +1 -0
  47. package/dist/drawer/index.mjs +2 -0
  48. package/dist/drawer/index.mjs.map +1 -0
  49. package/dist/elastic-text/index.js +2 -0
  50. package/dist/elastic-text/index.js.map +1 -0
  51. package/dist/elastic-text/index.mjs +2 -0
  52. package/dist/elastic-text/index.mjs.map +1 -0
  53. package/dist/file-tree/index.js +2 -0
  54. package/dist/file-tree/index.js.map +1 -0
  55. package/dist/file-tree/index.mjs +2 -0
  56. package/dist/file-tree/index.mjs.map +1 -0
  57. package/dist/glowing-text/index.js +2 -0
  58. package/dist/glowing-text/index.js.map +1 -0
  59. package/dist/glowing-text/index.mjs +2 -0
  60. package/dist/glowing-text/index.mjs.map +1 -0
  61. package/dist/index.js +24 -3
  62. package/dist/index.js.map +1 -1
  63. package/dist/index.mjs +24 -3
  64. package/dist/index.mjs.map +1 -1
  65. package/dist/input/index.js +2 -0
  66. package/dist/input/index.js.map +1 -0
  67. package/dist/input/index.mjs +2 -0
  68. package/dist/input/index.mjs.map +1 -0
  69. package/dist/loading-flower/index.js +7 -0
  70. package/dist/loading-flower/index.js.map +1 -0
  71. package/dist/loading-flower/index.mjs +7 -0
  72. package/dist/loading-flower/index.mjs.map +1 -0
  73. package/dist/loading-geometric/index.js +7 -0
  74. package/dist/loading-geometric/index.js.map +1 -0
  75. package/dist/loading-geometric/index.mjs +7 -0
  76. package/dist/loading-geometric/index.mjs.map +1 -0
  77. package/dist/loading-morph/index.js +5 -0
  78. package/dist/loading-morph/index.js.map +1 -0
  79. package/dist/loading-morph/index.mjs +5 -0
  80. package/dist/loading-morph/index.mjs.map +1 -0
  81. package/dist/loading-rings/index.js +4 -0
  82. package/dist/loading-rings/index.js.map +1 -0
  83. package/dist/loading-rings/index.mjs +4 -0
  84. package/dist/loading-rings/index.mjs.map +1 -0
  85. package/dist/loading-text/index.js +6 -0
  86. package/dist/loading-text/index.js.map +1 -0
  87. package/dist/loading-text/index.mjs +6 -0
  88. package/dist/loading-text/index.mjs.map +1 -0
  89. package/dist/loading-words/index.js +4 -0
  90. package/dist/loading-words/index.js.map +1 -0
  91. package/dist/loading-words/index.mjs +4 -0
  92. package/dist/loading-words/index.mjs.map +1 -0
  93. package/dist/modal/index.js +2 -0
  94. package/dist/modal/index.js.map +1 -0
  95. package/dist/modal/index.mjs +2 -0
  96. package/dist/modal/index.mjs.map +1 -0
  97. package/dist/morph-text/index.js +2 -0
  98. package/dist/morph-text/index.js.map +1 -0
  99. package/dist/morph-text/index.mjs +2 -0
  100. package/dist/morph-text/index.mjs.map +1 -0
  101. package/dist/particle-button/index.js +2 -0
  102. package/dist/particle-button/index.js.map +1 -0
  103. package/dist/particle-button/index.mjs +2 -0
  104. package/dist/particle-button/index.mjs.map +1 -0
  105. package/dist/perspective-text/index.js +2 -0
  106. package/dist/perspective-text/index.js.map +1 -0
  107. package/dist/perspective-text/index.mjs +2 -0
  108. package/dist/perspective-text/index.mjs.map +1 -0
  109. package/dist/radio/index.js +2 -0
  110. package/dist/radio/index.js.map +1 -0
  111. package/dist/radio/index.mjs +2 -0
  112. package/dist/radio/index.mjs.map +1 -0
  113. package/dist/reveal-text/index.js +2 -0
  114. package/dist/reveal-text/index.js.map +1 -0
  115. package/dist/reveal-text/index.mjs +2 -0
  116. package/dist/reveal-text/index.mjs.map +1 -0
  117. package/dist/select/index.js +2 -0
  118. package/dist/select/index.js.map +1 -0
  119. package/dist/select/index.mjs +2 -0
  120. package/dist/select/index.mjs.map +1 -0
  121. package/dist/sliced-text/index.js +2 -0
  122. package/dist/sliced-text/index.js.map +1 -0
  123. package/dist/sliced-text/index.mjs +2 -0
  124. package/dist/sliced-text/index.mjs.map +1 -0
  125. package/dist/split-text/index.js +2 -0
  126. package/dist/split-text/index.js.map +1 -0
  127. package/dist/split-text/index.mjs +2 -0
  128. package/dist/split-text/index.mjs.map +1 -0
  129. package/dist/stepper/index.js +2 -0
  130. package/dist/stepper/index.js.map +1 -0
  131. package/dist/stepper/index.mjs +2 -0
  132. package/dist/stepper/index.mjs.map +1 -0
  133. package/dist/tabs/index.js +2 -0
  134. package/dist/tabs/index.js.map +1 -0
  135. package/dist/tabs/index.mjs +2 -0
  136. package/dist/tabs/index.mjs.map +1 -0
  137. package/dist/terminal/index.js +2 -0
  138. package/dist/terminal/index.js.map +1 -0
  139. package/dist/terminal/index.mjs +2 -0
  140. package/dist/terminal/index.mjs.map +1 -0
  141. package/dist/textarea/index.js +2 -0
  142. package/dist/textarea/index.js.map +1 -0
  143. package/dist/textarea/index.mjs +2 -0
  144. package/dist/textarea/index.mjs.map +1 -0
  145. package/dist/toolbar/index.js +2 -0
  146. package/dist/toolbar/index.js.map +1 -0
  147. package/dist/toolbar/index.mjs +2 -0
  148. package/dist/toolbar/index.mjs.map +1 -0
  149. package/dist/tooltip-animated/index.js +2 -0
  150. package/dist/tooltip-animated/index.js.map +1 -0
  151. package/dist/tooltip-animated/index.mjs +2 -0
  152. package/dist/tooltip-animated/index.mjs.map +1 -0
  153. package/dist/tooltip-minimal/index.js +2 -0
  154. package/dist/tooltip-minimal/index.js.map +1 -0
  155. package/dist/tooltip-minimal/index.mjs +2 -0
  156. package/dist/tooltip-minimal/index.mjs.map +1 -0
  157. package/dist/true-focus/index.js +2 -0
  158. package/dist/true-focus/index.js.map +1 -0
  159. package/dist/true-focus/index.mjs +2 -0
  160. package/dist/true-focus/index.mjs.map +1 -0
  161. package/package.json +94 -275
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function l(...t){return tailwindMerge.twMerge(clsx.clsx(t))}var o=react.forwardRef(({className:t,label:a,error:r,icon:n,...s},c)=>jsxRuntime.jsxs("div",{className:"w-full",children:[a&&jsxRuntime.jsx("label",{className:"block text-sm font-medium text-zinc-700 dark:text-zinc-300 mb-1",children:a}),jsxRuntime.jsxs("div",{className:"relative",children:[n&&jsxRuntime.jsx("div",{className:"absolute left-3 top-1/2 -translate-y-1/2 text-zinc-400",children:n}),jsxRuntime.jsx("input",{ref:c,className:l("w-full px-4 py-2 rounded-lg","bg-white dark:bg-zinc-900","border border-zinc-300 dark:border-zinc-700","text-zinc-900 dark:text-zinc-100","placeholder:text-zinc-400 dark:placeholder:text-zinc-500","focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent","transition-all duration-200",n&&"pl-10",r&&"border-red-500 focus:ring-red-500",t),...s})]}),r&&jsxRuntime.jsx("p",{className:"mt-1 text-sm text-red-500",children:r})]}));o.displayName="Input";var g=o;exports.Input=o;exports.default=g;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/input/index.tsx"],"names":["cn","inputs","twMerge","clsx","Input","forwardRef","className","label","error","icon","props","ref","jsxs","jsx","input_default"],"mappings":"sMAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCMO,IAAMG,CAAAA,CAAQC,gBAAAA,CACnB,CAAC,CAAE,UAAAC,CAAAA,CAAW,KAAA,CAAAC,CAAAA,CAAO,KAAA,CAAAC,CAAAA,CAAO,IAAA,CAAAC,EAAM,GAAGC,CAAM,CAAA,CAAGC,CAAAA,GAE1CC,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,QAAA,CACZ,QAAA,CAAA,CAAAL,CAAAA,EACCM,cAAAA,CAAC,OAAA,CAAA,CAAM,SAAA,CAAU,kEACd,QAAA,CAAAN,CAAAA,CACH,CAAA,CAEFK,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WACZ,QAAA,CAAA,CAAAH,CAAAA,EACCI,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wDAAA,CACZ,SAAAJ,CAAAA,CACH,CAAA,CAEFI,cAAAA,CAAC,OAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,UAAWX,CAAAA,CACT,6BAAA,CACA,2BAAA,CACA,6CAAA,CACA,kCAAA,CACA,0DAAA,CACA,+EACA,6BAAA,CACAS,CAAAA,EAAQ,OAAA,CACRD,CAAAA,EAAS,mCAAA,CACTF,CACF,EACC,GAAGI,CAAAA,CACN,CAAA,CAAA,CACF,CAAA,CACCF,CAAAA,EAASK,cAAAA,CAAC,KAAE,SAAA,CAAU,2BAAA,CAA6B,QAAA,CAAAL,CAAAA,CAAM,CAAA,CAAA,CAC5D,CAGN,EAEAJ,CAAAA,CAAM,WAAA,CAAc,OAAA,CAEpB,IAAOU,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 { forwardRef } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\r\n label?: string;\r\n error?: string;\r\n icon?: React.ReactNode;\r\n}\r\n\r\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\r\n ({ className, label, error, icon, ...props }, ref) => {\r\n return (\r\n <div className=\"w-full\">\r\n {label && (\r\n <label className=\"block text-sm font-medium text-zinc-700 dark:text-zinc-300 mb-1\">\r\n {label}\r\n </label>\r\n )}\r\n <div className=\"relative\">\r\n {icon && (\r\n <div className=\"absolute left-3 top-1/2 -translate-y-1/2 text-zinc-400\">\r\n {icon}\r\n </div>\r\n )}\r\n <input\r\n ref={ref}\r\n className={cn(\r\n \"w-full px-4 py-2 rounded-lg\",\r\n \"bg-white dark:bg-zinc-900\",\r\n \"border border-zinc-300 dark:border-zinc-700\",\r\n \"text-zinc-900 dark:text-zinc-100\",\r\n \"placeholder:text-zinc-400 dark:placeholder:text-zinc-500\",\r\n \"focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\",\r\n \"transition-all duration-200\",\r\n icon && \"pl-10\",\r\n error && \"border-red-500 focus:ring-red-500\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </div>\r\n {error && <p className=\"mt-1 text-sm text-red-500\">{error}</p>}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nInput.displayName = \"Input\";\r\n\r\nexport default Input;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {forwardRef}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function l(...t){return twMerge(clsx(t))}var o=forwardRef(({className:t,label:a,error:r,icon:n,...s},c)=>jsxs("div",{className:"w-full",children:[a&&jsx("label",{className:"block text-sm font-medium text-zinc-700 dark:text-zinc-300 mb-1",children:a}),jsxs("div",{className:"relative",children:[n&&jsx("div",{className:"absolute left-3 top-1/2 -translate-y-1/2 text-zinc-400",children:n}),jsx("input",{ref:c,className:l("w-full px-4 py-2 rounded-lg","bg-white dark:bg-zinc-900","border border-zinc-300 dark:border-zinc-700","text-zinc-900 dark:text-zinc-100","placeholder:text-zinc-400 dark:placeholder:text-zinc-500","focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent","transition-all duration-200",n&&"pl-10",r&&"border-red-500 focus:ring-red-500",t),...s})]}),r&&jsx("p",{className:"mt-1 text-sm text-red-500",children:r})]}));o.displayName="Input";var g=o;export{o as Input,g as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/input/index.tsx"],"names":["cn","inputs","twMerge","clsx","Input","forwardRef","className","label","error","icon","props","ref","jsxs","jsx","input_default"],"mappings":"qIAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCMO,IAAMG,CAAAA,CAAQC,UAAAA,CACnB,CAAC,CAAE,UAAAC,CAAAA,CAAW,KAAA,CAAAC,CAAAA,CAAO,KAAA,CAAAC,CAAAA,CAAO,IAAA,CAAAC,EAAM,GAAGC,CAAM,CAAA,CAAGC,CAAAA,GAE1CC,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,QAAA,CACZ,QAAA,CAAA,CAAAL,CAAAA,EACCM,GAAAA,CAAC,OAAA,CAAA,CAAM,SAAA,CAAU,kEACd,QAAA,CAAAN,CAAAA,CACH,CAAA,CAEFK,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WACZ,QAAA,CAAA,CAAAH,CAAAA,EACCI,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wDAAA,CACZ,SAAAJ,CAAAA,CACH,CAAA,CAEFI,GAAAA,CAAC,OAAA,CAAA,CACC,GAAA,CAAKF,CAAAA,CACL,UAAWX,CAAAA,CACT,6BAAA,CACA,2BAAA,CACA,6CAAA,CACA,kCAAA,CACA,0DAAA,CACA,+EACA,6BAAA,CACAS,CAAAA,EAAQ,OAAA,CACRD,CAAAA,EAAS,mCAAA,CACTF,CACF,EACC,GAAGI,CAAAA,CACN,CAAA,CAAA,CACF,CAAA,CACCF,CAAAA,EAASK,GAAAA,CAAC,KAAE,SAAA,CAAU,2BAAA,CAA6B,QAAA,CAAAL,CAAAA,CAAM,CAAA,CAAA,CAC5D,CAGN,EAEAJ,CAAAA,CAAM,WAAA,CAAc,OAAA,CAEpB,IAAOU,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 { forwardRef } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\r\n label?: string;\r\n error?: string;\r\n icon?: React.ReactNode;\r\n}\r\n\r\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\r\n ({ className, label, error, icon, ...props }, ref) => {\r\n return (\r\n <div className=\"w-full\">\r\n {label && (\r\n <label className=\"block text-sm font-medium text-zinc-700 dark:text-zinc-300 mb-1\">\r\n {label}\r\n </label>\r\n )}\r\n <div className=\"relative\">\r\n {icon && (\r\n <div className=\"absolute left-3 top-1/2 -translate-y-1/2 text-zinc-400\">\r\n {icon}\r\n </div>\r\n )}\r\n <input\r\n ref={ref}\r\n className={cn(\r\n \"w-full px-4 py-2 rounded-lg\",\r\n \"bg-white dark:bg-zinc-900\",\r\n \"border border-zinc-300 dark:border-zinc-700\",\r\n \"text-zinc-900 dark:text-zinc-100\",\r\n \"placeholder:text-zinc-400 dark:placeholder:text-zinc-500\",\r\n \"focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\",\r\n \"transition-all duration-200\",\r\n icon && \"pl-10\",\r\n error && \"border-red-500 focus:ring-red-500\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </div>\r\n {error && <p className=\"mt-1 text-sm text-red-500\">{error}</p>}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nInput.displayName = \"Input\";\r\n\r\nexport default Input;\r\n"]}
@@ -0,0 +1,7 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function s(...a){return tailwindMerge.twMerge(clsx.clsx(a))}function o({className:a=""}){return jsxRuntime.jsxs("div",{className:s("w-full h-full min-h-[400px] flex items-center justify-center",a),children:[jsxRuntime.jsx("div",{className:"relative",children:jsxRuntime.jsxs("div",{className:"flex items-center justify-center",children:[[...Array(8)].map((n,l)=>jsxRuntime.jsx("div",{className:"absolute w-3 h-3 rounded-full bg-black dark:bg-white",style:{transform:`rotate(${l*45}deg) translateY(-20px)`,animation:"flower-pulse 1.5s ease-in-out infinite",animationDelay:`${l*.1}s`}},l)),jsxRuntime.jsx("div",{className:"w-4 h-4 rounded-full bg-zinc-400"})]})}),jsxRuntime.jsx("style",{jsx:true,children:`
2
+ @keyframes flower-pulse {
3
+ 0%, 100% { opacity: 0.3; scale: 0.8; }
4
+ 50% { opacity: 1; scale: 1.2; }
5
+ }
6
+ `})]})}var d=o;exports.LoadingFlower=o;exports.default=d;//# sourceMappingURL=index.js.map
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/loading-flower/index.tsx"],"names":["cn","inputs","twMerge","clsx","LoadingFlower","className","jsxs","jsx","_","i","loading_flower_default"],"mappings":"+KAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,UAAKF,CAAM,CAAC,CAC7B,CCGO,SAASG,EAAc,CAAE,SAAA,CAAAC,EAAY,EAAG,CAAA,CAAuB,CACpE,OACEC,eAAAA,CAAC,OAAI,SAAA,CAAWN,CAAAA,CAAG,+DAAgEK,CAAS,CAAA,CAC1F,UAAAE,cAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,UAAA,CACb,QAAA,CAAAD,gBAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCACZ,QAAA,CAAA,CAAA,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,GAAA,CAAI,CAACE,EAAGC,CAAAA,GACrBF,cAAAA,CAAC,OAEC,SAAA,CAAU,sDAAA,CACV,MAAO,CACL,SAAA,CAAW,UAAUE,CAAAA,CAAI,EAAE,yBAC3B,SAAA,CAAW,wCAAA,CACX,eAAgB,CAAA,EAAGA,CAAAA,CAAI,EAAG,CAAA,CAAA,CAC5B,CAAA,CAAA,CANKA,CAOP,CACD,CAAA,CACDF,eAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCAAmC,CAAA,CAAA,CACpD,CAAA,CACF,EACAA,cAAAA,CAAC,OAAA,CAAA,CAAM,IAAG,IAAA,CAAE,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CAKV,CAAA,CAAA,CACJ,CAEJ,CAEA,IAAOG,CAAAA,CAAQN","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface LoadingFlowerProps {\r\n className?: string;\r\n}\r\n\r\nexport function LoadingFlower({ className = \"\" }: LoadingFlowerProps) {\r\n return (\r\n <div className={cn(\"w-full h-full min-h-[400px] flex items-center justify-center\", className)}>\r\n <div className=\"relative\">\r\n <div className=\"flex items-center justify-center\">\r\n {[...Array(8)].map((_, i) => (\r\n <div\r\n key={i}\r\n className=\"absolute w-3 h-3 rounded-full bg-black dark:bg-white\"\r\n style={{\r\n transform: `rotate(${i * 45}deg) translateY(-20px)`,\r\n animation: `flower-pulse 1.5s ease-in-out infinite`,\r\n animationDelay: `${i * 0.1}s`,\r\n }}\r\n />\r\n ))}\r\n <div className=\"w-4 h-4 rounded-full bg-zinc-400\" />\r\n </div>\r\n </div>\r\n <style jsx>{`\r\n @keyframes flower-pulse {\r\n 0%, 100% { opacity: 0.3; scale: 0.8; }\r\n 50% { opacity: 1; scale: 1.2; }\r\n }\r\n `}</style>\r\n </div>\r\n );\r\n}\r\n\r\nexport default LoadingFlower;\r\n"]}
@@ -0,0 +1,7 @@
1
+ import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function s(...a){return twMerge(clsx(a))}function o({className:a=""}){return jsxs("div",{className:s("w-full h-full min-h-[400px] flex items-center justify-center",a),children:[jsx("div",{className:"relative",children:jsxs("div",{className:"flex items-center justify-center",children:[[...Array(8)].map((n,l)=>jsx("div",{className:"absolute w-3 h-3 rounded-full bg-black dark:bg-white",style:{transform:`rotate(${l*45}deg) translateY(-20px)`,animation:"flower-pulse 1.5s ease-in-out infinite",animationDelay:`${l*.1}s`}},l)),jsx("div",{className:"w-4 h-4 rounded-full bg-zinc-400"})]})}),jsx("style",{jsx:true,children:`
2
+ @keyframes flower-pulse {
3
+ 0%, 100% { opacity: 0.3; scale: 0.8; }
4
+ 50% { opacity: 1; scale: 1.2; }
5
+ }
6
+ `})]})}var d=o;export{o as LoadingFlower,d as default};//# sourceMappingURL=index.mjs.map
7
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/loading-flower/index.tsx"],"names":["cn","inputs","twMerge","clsx","LoadingFlower","className","jsxs","jsx","_","i","loading_flower_default"],"mappings":"sGAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,KAAKF,CAAM,CAAC,CAC7B,CCGO,SAASG,EAAc,CAAE,SAAA,CAAAC,EAAY,EAAG,CAAA,CAAuB,CACpE,OACEC,IAAAA,CAAC,OAAI,SAAA,CAAWN,CAAAA,CAAG,+DAAgEK,CAAS,CAAA,CAC1F,UAAAE,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,UAAA,CACb,QAAA,CAAAD,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCACZ,QAAA,CAAA,CAAA,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,GAAA,CAAI,CAACE,EAAGC,CAAAA,GACrBF,GAAAA,CAAC,OAEC,SAAA,CAAU,sDAAA,CACV,MAAO,CACL,SAAA,CAAW,UAAUE,CAAAA,CAAI,EAAE,yBAC3B,SAAA,CAAW,wCAAA,CACX,eAAgB,CAAA,EAAGA,CAAAA,CAAI,EAAG,CAAA,CAAA,CAC5B,CAAA,CAAA,CANKA,CAOP,CACD,CAAA,CACDF,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCAAmC,CAAA,CAAA,CACpD,CAAA,CACF,EACAA,GAAAA,CAAC,OAAA,CAAA,CAAM,IAAG,IAAA,CAAE,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CAKV,CAAA,CAAA,CACJ,CAEJ,CAEA,IAAOG,CAAAA,CAAQN","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface LoadingFlowerProps {\r\n className?: string;\r\n}\r\n\r\nexport function LoadingFlower({ className = \"\" }: LoadingFlowerProps) {\r\n return (\r\n <div className={cn(\"w-full h-full min-h-[400px] flex items-center justify-center\", className)}>\r\n <div className=\"relative\">\r\n <div className=\"flex items-center justify-center\">\r\n {[...Array(8)].map((_, i) => (\r\n <div\r\n key={i}\r\n className=\"absolute w-3 h-3 rounded-full bg-black dark:bg-white\"\r\n style={{\r\n transform: `rotate(${i * 45}deg) translateY(-20px)`,\r\n animation: `flower-pulse 1.5s ease-in-out infinite`,\r\n animationDelay: `${i * 0.1}s`,\r\n }}\r\n />\r\n ))}\r\n <div className=\"w-4 h-4 rounded-full bg-zinc-400\" />\r\n </div>\r\n </div>\r\n <style jsx>{`\r\n @keyframes flower-pulse {\r\n 0%, 100% { opacity: 0.3; scale: 0.8; }\r\n 50% { opacity: 1; scale: 1.2; }\r\n }\r\n `}</style>\r\n </div>\r\n );\r\n}\r\n\r\nexport default LoadingFlower;\r\n"]}
@@ -0,0 +1,7 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function i(...t){return tailwindMerge.twMerge(clsx.clsx(t))}function s({className:t=""}){return jsxRuntime.jsxs("div",{className:i("w-full h-full min-h-[400px] flex items-center justify-center",t),children:[jsxRuntime.jsx("div",{className:"flex justify-center items-center",children:jsxRuntime.jsxs("div",{className:"w-36 h-36 flex justify-center items-center relative",children:[jsxRuntime.jsx("div",{className:"w-4 h-16 absolute bg-zinc-600 dark:bg-zinc-400 animate-[move-h_1.2s_infinite_cubic-bezier(0.65,0.05,0.36,1)]"}),jsxRuntime.jsx("div",{className:"w-4 h-16 absolute bg-zinc-800 dark:bg-zinc-200 rotate-90 animate-[move-v_1.2s_infinite_cubic-bezier(0.65,0.05,0.36,1)]"}),jsxRuntime.jsx("div",{className:"absolute top-4 left-5 font-black text-lg text-black dark:text-white animate-[rot_0.8s_infinite_cubic-bezier(0.65,0.05,0.36,1)]",children:"X"}),jsxRuntime.jsx("div",{className:"absolute bottom-0 right-0 font-black text-3xl text-black dark:text-white animate-[scale_0.8s_infinite_cubic-bezier(0.65,0.05,0.36,1)]",children:"*"})]})}),jsxRuntime.jsx("style",{jsx:true,children:`
2
+ @keyframes move-h { 0% { top: 0; opacity: 0; } 25% { opacity: 1; } 50% { top: 30%; opacity: 1; } 75% { opacity: 1; } 100% { top: 100%; opacity: 0; } }
3
+ @keyframes move-v { 0% { left: 0; opacity: 0; } 25% { opacity: 1; } 50% { left: 45%; opacity: 1; } 75% { opacity: 1; } 100% { left: 100%; opacity: 0; } }
4
+ @keyframes rot { 0% { transform: rotate(0deg); } 50% { transform: rotate(180deg); } 100% { transform: rotate(360deg); } }
5
+ @keyframes scale { 0% { scale: 1; } 50% { scale: 1.9; } 100% { scale: 1; } }
6
+ `})]})}var f=s;exports.LoadingGeometric=s;exports.default=f;//# sourceMappingURL=index.js.map
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/loading-geometric/index.tsx"],"names":["cn","inputs","twMerge","clsx","LoadingGeometric","className","jsxs","jsx","loading_geometric_default"],"mappings":"+KAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCGO,SAASG,EAAiB,CAAE,SAAA,CAAAC,CAAAA,CAAY,EAAG,EAA0B,CAC1E,OACEC,gBAAC,KAAA,CAAA,CAAI,SAAA,CAAWN,EAAG,8DAAA,CAAgEK,CAAS,CAAA,CAC1F,QAAA,CAAA,CAAAE,eAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACb,QAAA,CAAAD,gBAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qDAAA,CACb,QAAA,CAAA,CAAAC,eAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8GAAA,CAA+G,CAAA,CAC9HA,eAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wHAAA,CAAyH,CAAA,CACxIA,eAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gIAAA,CAAiI,QAAA,CAAA,GAAA,CAAC,EACjJA,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uIAAA,CAAwI,aAAC,CAAA,CAAA,CAC1J,CAAA,CACF,EACAA,cAAAA,CAAC,OAAA,CAAA,CAAM,IAAG,IAAA,CAAE,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CAKV,CAAA,CAAA,CACJ,CAEJ,CAEA,IAAOC,CAAAA,CAAQJ","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 LoadingGeometricProps {\r\n className?: string;\r\n}\r\n\r\nexport function LoadingGeometric({ className = \"\" }: LoadingGeometricProps) {\r\n return (\r\n <div className={cn(\"w-full h-full min-h-[400px] flex items-center justify-center\", className)}>\r\n <div className=\"flex justify-center items-center\">\r\n <div className=\"w-36 h-36 flex justify-center items-center relative\">\r\n <div className=\"w-4 h-16 absolute bg-zinc-600 dark:bg-zinc-400 animate-[move-h_1.2s_infinite_cubic-bezier(0.65,0.05,0.36,1)]\" />\r\n <div className=\"w-4 h-16 absolute bg-zinc-800 dark:bg-zinc-200 rotate-90 animate-[move-v_1.2s_infinite_cubic-bezier(0.65,0.05,0.36,1)]\" />\r\n <div className=\"absolute top-4 left-5 font-black text-lg text-black dark:text-white animate-[rot_0.8s_infinite_cubic-bezier(0.65,0.05,0.36,1)]\">X</div>\r\n <div className=\"absolute bottom-0 right-0 font-black text-3xl text-black dark:text-white animate-[scale_0.8s_infinite_cubic-bezier(0.65,0.05,0.36,1)]\">*</div>\r\n </div>\r\n </div>\r\n <style jsx>{`\r\n @keyframes move-h { 0% { top: 0; opacity: 0; } 25% { opacity: 1; } 50% { top: 30%; opacity: 1; } 75% { opacity: 1; } 100% { top: 100%; opacity: 0; } }\r\n @keyframes move-v { 0% { left: 0; opacity: 0; } 25% { opacity: 1; } 50% { left: 45%; opacity: 1; } 75% { opacity: 1; } 100% { left: 100%; opacity: 0; } }\r\n @keyframes rot { 0% { transform: rotate(0deg); } 50% { transform: rotate(180deg); } 100% { transform: rotate(360deg); } }\r\n @keyframes scale { 0% { scale: 1; } 50% { scale: 1.9; } 100% { scale: 1; } }\r\n `}</style>\r\n </div>\r\n );\r\n}\r\n\r\nexport default LoadingGeometric;\r\n"]}
@@ -0,0 +1,7 @@
1
+ import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function i(...t){return twMerge(clsx(t))}function s({className:t=""}){return jsxs("div",{className:i("w-full h-full min-h-[400px] flex items-center justify-center",t),children:[jsx("div",{className:"flex justify-center items-center",children:jsxs("div",{className:"w-36 h-36 flex justify-center items-center relative",children:[jsx("div",{className:"w-4 h-16 absolute bg-zinc-600 dark:bg-zinc-400 animate-[move-h_1.2s_infinite_cubic-bezier(0.65,0.05,0.36,1)]"}),jsx("div",{className:"w-4 h-16 absolute bg-zinc-800 dark:bg-zinc-200 rotate-90 animate-[move-v_1.2s_infinite_cubic-bezier(0.65,0.05,0.36,1)]"}),jsx("div",{className:"absolute top-4 left-5 font-black text-lg text-black dark:text-white animate-[rot_0.8s_infinite_cubic-bezier(0.65,0.05,0.36,1)]",children:"X"}),jsx("div",{className:"absolute bottom-0 right-0 font-black text-3xl text-black dark:text-white animate-[scale_0.8s_infinite_cubic-bezier(0.65,0.05,0.36,1)]",children:"*"})]})}),jsx("style",{jsx:true,children:`
2
+ @keyframes move-h { 0% { top: 0; opacity: 0; } 25% { opacity: 1; } 50% { top: 30%; opacity: 1; } 75% { opacity: 1; } 100% { top: 100%; opacity: 0; } }
3
+ @keyframes move-v { 0% { left: 0; opacity: 0; } 25% { opacity: 1; } 50% { left: 45%; opacity: 1; } 75% { opacity: 1; } 100% { left: 100%; opacity: 0; } }
4
+ @keyframes rot { 0% { transform: rotate(0deg); } 50% { transform: rotate(180deg); } 100% { transform: rotate(360deg); } }
5
+ @keyframes scale { 0% { scale: 1; } 50% { scale: 1.9; } 100% { scale: 1; } }
6
+ `})]})}var f=s;export{s as LoadingGeometric,f as default};//# sourceMappingURL=index.mjs.map
7
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/loading-geometric/index.tsx"],"names":["cn","inputs","twMerge","clsx","LoadingGeometric","className","jsxs","jsx","loading_geometric_default"],"mappings":"sGAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCGO,SAASG,EAAiB,CAAE,SAAA,CAAAC,CAAAA,CAAY,EAAG,EAA0B,CAC1E,OACEC,KAAC,KAAA,CAAA,CAAI,SAAA,CAAWN,EAAG,8DAAA,CAAgEK,CAAS,CAAA,CAC1F,QAAA,CAAA,CAAAE,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACb,QAAA,CAAAD,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qDAAA,CACb,QAAA,CAAA,CAAAC,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,8GAAA,CAA+G,CAAA,CAC9HA,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wHAAA,CAAyH,CAAA,CACxIA,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gIAAA,CAAiI,QAAA,CAAA,GAAA,CAAC,EACjJA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uIAAA,CAAwI,aAAC,CAAA,CAAA,CAC1J,CAAA,CACF,EACAA,GAAAA,CAAC,OAAA,CAAA,CAAM,IAAG,IAAA,CAAE,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CAKV,CAAA,CAAA,CACJ,CAEJ,CAEA,IAAOC,CAAAA,CAAQJ","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 LoadingGeometricProps {\r\n className?: string;\r\n}\r\n\r\nexport function LoadingGeometric({ className = \"\" }: LoadingGeometricProps) {\r\n return (\r\n <div className={cn(\"w-full h-full min-h-[400px] flex items-center justify-center\", className)}>\r\n <div className=\"flex justify-center items-center\">\r\n <div className=\"w-36 h-36 flex justify-center items-center relative\">\r\n <div className=\"w-4 h-16 absolute bg-zinc-600 dark:bg-zinc-400 animate-[move-h_1.2s_infinite_cubic-bezier(0.65,0.05,0.36,1)]\" />\r\n <div className=\"w-4 h-16 absolute bg-zinc-800 dark:bg-zinc-200 rotate-90 animate-[move-v_1.2s_infinite_cubic-bezier(0.65,0.05,0.36,1)]\" />\r\n <div className=\"absolute top-4 left-5 font-black text-lg text-black dark:text-white animate-[rot_0.8s_infinite_cubic-bezier(0.65,0.05,0.36,1)]\">X</div>\r\n <div className=\"absolute bottom-0 right-0 font-black text-3xl text-black dark:text-white animate-[scale_0.8s_infinite_cubic-bezier(0.65,0.05,0.36,1)]\">*</div>\r\n </div>\r\n </div>\r\n <style jsx>{`\r\n @keyframes move-h { 0% { top: 0; opacity: 0; } 25% { opacity: 1; } 50% { top: 30%; opacity: 1; } 75% { opacity: 1; } 100% { top: 100%; opacity: 0; } }\r\n @keyframes move-v { 0% { left: 0; opacity: 0; } 25% { opacity: 1; } 50% { left: 45%; opacity: 1; } 75% { opacity: 1; } 100% { left: 100%; opacity: 0; } }\r\n @keyframes rot { 0% { transform: rotate(0deg); } 50% { transform: rotate(180deg); } 100% { transform: rotate(360deg); } }\r\n @keyframes scale { 0% { scale: 1; } 50% { scale: 1.9; } 100% { scale: 1; } }\r\n `}</style>\r\n </div>\r\n );\r\n}\r\n\r\nexport default LoadingGeometric;\r\n"]}
@@ -0,0 +1,5 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function o(...r){return tailwindMerge.twMerge(clsx.clsx(r))}function a({className:r=""}){return jsxRuntime.jsx("div",{className:o("w-full h-full min-h-[400px] flex items-center justify-center",r),children:jsxRuntime.jsx("div",{className:"w-20 h-20 rounded-full border-8 border-transparent border-t-black dark:border-t-white border-r-zinc-600 dark:border-r-zinc-400 border-b-zinc-400 dark:border-b-zinc-600 border-l-zinc-200 dark:border-l-zinc-800 animate-[morph_2s_ease-in-out_infinite,rotate-color_2s_linear_infinite]",children:jsxRuntime.jsx("style",{jsx:true,children:`
2
+ @keyframes rotate-color { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
3
+ @keyframes morph { 0%, 100% { border-radius: 50%; width: 80px; height: 80px; } 50% { border-radius: 10%; width: 100px; height: 100px; } }
4
+ `})})})}var c=a;exports.LoadingMorph=a;exports.default=c;//# sourceMappingURL=index.js.map
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/loading-morph/index.tsx"],"names":["cn","inputs","twMerge","clsx","LoadingMorph","className","jsx","loading_morph_default"],"mappings":"+KAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,UAAKF,CAAM,CAAC,CAC7B,CCGO,SAASG,CAAAA,CAAa,CAAE,SAAA,CAAAC,CAAAA,CAAY,EAAG,CAAA,CAAsB,CAClE,OACEC,cAAAA,CAAC,KAAA,CAAA,CAAI,UAAWN,CAAAA,CAAG,8DAAA,CAAgEK,CAAS,CAAA,CAC1F,QAAA,CAAAC,eAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2RACb,QAAA,CAAAA,cAAAA,CAAC,OAAA,CAAA,CAAM,GAAA,CAAG,IAAA,CAAE,QAAA,CAAA;AAAA;AAAA;AAAA,QAAA,CAAA,CAGV,CAAA,CACJ,CAAA,CACF,CAEJ,KAEOC,CAAAA,CAAQH","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 LoadingMorphProps {\r\n className?: string;\r\n}\r\n\r\nexport function LoadingMorph({ className = \"\" }: LoadingMorphProps) {\r\n return (\r\n <div className={cn(\"w-full h-full min-h-[400px] flex items-center justify-center\", className)}>\r\n <div className=\"w-20 h-20 rounded-full border-8 border-transparent border-t-black dark:border-t-white border-r-zinc-600 dark:border-r-zinc-400 border-b-zinc-400 dark:border-b-zinc-600 border-l-zinc-200 dark:border-l-zinc-800 animate-[morph_2s_ease-in-out_infinite,rotate-color_2s_linear_infinite]\">\r\n <style jsx>{`\r\n @keyframes rotate-color { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }\r\n @keyframes morph { 0%, 100% { border-radius: 50%; width: 80px; height: 80px; } 50% { border-radius: 10%; width: 100px; height: 100px; } }\r\n `}</style>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default LoadingMorph;\r\n"]}
@@ -0,0 +1,5 @@
1
+ import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function o(...r){return twMerge(clsx(r))}function a({className:r=""}){return jsx("div",{className:o("w-full h-full min-h-[400px] flex items-center justify-center",r),children:jsx("div",{className:"w-20 h-20 rounded-full border-8 border-transparent border-t-black dark:border-t-white border-r-zinc-600 dark:border-r-zinc-400 border-b-zinc-400 dark:border-b-zinc-600 border-l-zinc-200 dark:border-l-zinc-800 animate-[morph_2s_ease-in-out_infinite,rotate-color_2s_linear_infinite]",children:jsx("style",{jsx:true,children:`
2
+ @keyframes rotate-color { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
3
+ @keyframes morph { 0%, 100% { border-radius: 50%; width: 80px; height: 80px; } 50% { border-radius: 10%; width: 100px; height: 100px; } }
4
+ `})})})}var c=a;export{a as LoadingMorph,c as default};//# sourceMappingURL=index.mjs.map
5
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/loading-morph/index.tsx"],"names":["cn","inputs","twMerge","clsx","LoadingMorph","className","jsx","loading_morph_default"],"mappings":"iGAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,KAAKF,CAAM,CAAC,CAC7B,CCGO,SAASG,CAAAA,CAAa,CAAE,SAAA,CAAAC,CAAAA,CAAY,EAAG,CAAA,CAAsB,CAClE,OACEC,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAWN,CAAAA,CAAG,8DAAA,CAAgEK,CAAS,CAAA,CAC1F,QAAA,CAAAC,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2RACb,QAAA,CAAAA,GAAAA,CAAC,OAAA,CAAA,CAAM,GAAA,CAAG,IAAA,CAAE,QAAA,CAAA;AAAA;AAAA;AAAA,QAAA,CAAA,CAGV,CAAA,CACJ,CAAA,CACF,CAEJ,KAEOC,CAAAA,CAAQH","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 LoadingMorphProps {\r\n className?: string;\r\n}\r\n\r\nexport function LoadingMorph({ className = \"\" }: LoadingMorphProps) {\r\n return (\r\n <div className={cn(\"w-full h-full min-h-[400px] flex items-center justify-center\", className)}>\r\n <div className=\"w-20 h-20 rounded-full border-8 border-transparent border-t-black dark:border-t-white border-r-zinc-600 dark:border-r-zinc-400 border-b-zinc-400 dark:border-b-zinc-600 border-l-zinc-200 dark:border-l-zinc-800 animate-[morph_2s_ease-in-out_infinite,rotate-color_2s_linear_infinite]\">\r\n <style jsx>{`\r\n @keyframes rotate-color { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }\r\n @keyframes morph { 0%, 100% { border-radius: 50%; width: 80px; height: 80px; } 50% { border-radius: 10%; width: 100px; height: 100px; } }\r\n `}</style>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default LoadingMorph;\r\n"]}
@@ -0,0 +1,4 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function o(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function i({className:e=""}){return jsxRuntime.jsx("div",{className:o("w-full h-full min-h-[400px] flex items-center justify-center",e),children:jsxRuntime.jsxs("div",{className:"w-16 h-16",children:[jsxRuntime.jsx("div",{className:"box-border w-full h-full border-[10px] border-zinc-300 dark:border-zinc-800 border-t-zinc-700 dark:border-t-zinc-200 border-b-zinc-500 rounded-full animate-[rotate_5s_linear_infinite]",children:jsxRuntime.jsx("div",{className:"box-border w-full h-full border-[10px] border-zinc-300 dark:border-zinc-800 border-t-zinc-600 dark:border-t-zinc-400 border-b-black dark:border-b-white rounded-full animate-[rotate_2.5s_linear_infinite]"})}),jsxRuntime.jsx("style",{jsx:true,children:`
2
+ @keyframes rotate { 0% { transform: scale(1) rotate(360deg); } 50% { transform: scale(0.8) rotate(-360deg); } 100% { transform: scale(1) rotate(360deg); } }
3
+ `})]})})}var f=i;exports.LoadingRings=i;exports.default=f;//# sourceMappingURL=index.js.map
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/loading-rings/index.tsx"],"names":["cn","inputs","twMerge","clsx","LoadingRings","className","jsx","jsxs","loading_rings_default"],"mappings":"+KAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCGO,SAASG,CAAAA,CAAa,CAAE,SAAA,CAAAC,CAAAA,CAAY,EAAG,CAAA,CAAsB,CAClE,OACEC,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWN,CAAAA,CAAG,8DAAA,CAAgEK,CAAS,CAAA,CAC1F,QAAA,CAAAE,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAAD,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yLAAA,CACb,QAAA,CAAAA,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4MAAA,CAA6M,CAAA,CAC9N,CAAA,CACAA,cAAAA,CAAC,OAAA,CAAA,CAAM,GAAA,CAAG,IAAA,CAAE,QAAA,CAAA;AAAA;AAAA,QAAA,CAAA,CAEV,CAAA,CAAA,CACJ,CAAA,CACF,CAEJ,KAEOE,CAAAA,CAAQJ","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 LoadingRingsProps {\r\n className?: string;\r\n}\r\n\r\nexport function LoadingRings({ className = \"\" }: LoadingRingsProps) {\r\n return (\r\n <div className={cn(\"w-full h-full min-h-[400px] flex items-center justify-center\", className)}>\r\n <div className=\"w-16 h-16\">\r\n <div className=\"box-border w-full h-full border-[10px] border-zinc-300 dark:border-zinc-800 border-t-zinc-700 dark:border-t-zinc-200 border-b-zinc-500 rounded-full animate-[rotate_5s_linear_infinite]\">\r\n <div className=\"box-border w-full h-full border-[10px] border-zinc-300 dark:border-zinc-800 border-t-zinc-600 dark:border-t-zinc-400 border-b-black dark:border-b-white rounded-full animate-[rotate_2.5s_linear_infinite]\" />\r\n </div>\r\n <style jsx>{`\r\n @keyframes rotate { 0% { transform: scale(1) rotate(360deg); } 50% { transform: scale(0.8) rotate(-360deg); } 100% { transform: scale(1) rotate(360deg); } }\r\n `}</style>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default LoadingRings;\r\n"]}
@@ -0,0 +1,4 @@
1
+ import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx,jsxs}from'react/jsx-runtime';function o(...e){return twMerge(clsx(e))}function i({className:e=""}){return jsx("div",{className:o("w-full h-full min-h-[400px] flex items-center justify-center",e),children:jsxs("div",{className:"w-16 h-16",children:[jsx("div",{className:"box-border w-full h-full border-[10px] border-zinc-300 dark:border-zinc-800 border-t-zinc-700 dark:border-t-zinc-200 border-b-zinc-500 rounded-full animate-[rotate_5s_linear_infinite]",children:jsx("div",{className:"box-border w-full h-full border-[10px] border-zinc-300 dark:border-zinc-800 border-t-zinc-600 dark:border-t-zinc-400 border-b-black dark:border-b-white rounded-full animate-[rotate_2.5s_linear_infinite]"})}),jsx("style",{jsx:true,children:`
2
+ @keyframes rotate { 0% { transform: scale(1) rotate(360deg); } 50% { transform: scale(0.8) rotate(-360deg); } 100% { transform: scale(1) rotate(360deg); } }
3
+ `})]})})}var f=i;export{i as LoadingRings,f as default};//# sourceMappingURL=index.mjs.map
4
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/loading-rings/index.tsx"],"names":["cn","inputs","twMerge","clsx","LoadingRings","className","jsx","jsxs","loading_rings_default"],"mappings":"sGAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCGO,SAASG,CAAAA,CAAa,CAAE,SAAA,CAAAC,CAAAA,CAAY,EAAG,CAAA,CAAsB,CAClE,OACEC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWN,CAAAA,CAAG,8DAAA,CAAgEK,CAAS,CAAA,CAC1F,QAAA,CAAAE,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAAD,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,yLAAA,CACb,QAAA,CAAAA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4MAAA,CAA6M,CAAA,CAC9N,CAAA,CACAA,GAAAA,CAAC,OAAA,CAAA,CAAM,GAAA,CAAG,IAAA,CAAE,QAAA,CAAA;AAAA;AAAA,QAAA,CAAA,CAEV,CAAA,CAAA,CACJ,CAAA,CACF,CAEJ,KAEOE,CAAAA,CAAQJ","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 LoadingRingsProps {\r\n className?: string;\r\n}\r\n\r\nexport function LoadingRings({ className = \"\" }: LoadingRingsProps) {\r\n return (\r\n <div className={cn(\"w-full h-full min-h-[400px] flex items-center justify-center\", className)}>\r\n <div className=\"w-16 h-16\">\r\n <div className=\"box-border w-full h-full border-[10px] border-zinc-300 dark:border-zinc-800 border-t-zinc-700 dark:border-t-zinc-200 border-b-zinc-500 rounded-full animate-[rotate_5s_linear_infinite]\">\r\n <div className=\"box-border w-full h-full border-[10px] border-zinc-300 dark:border-zinc-800 border-t-zinc-600 dark:border-t-zinc-400 border-b-black dark:border-b-white rounded-full animate-[rotate_2.5s_linear_infinite]\" />\r\n </div>\r\n <style jsx>{`\r\n @keyframes rotate { 0% { transform: scale(1) rotate(360deg); } 50% { transform: scale(0.8) rotate(-360deg); } 100% { transform: scale(1) rotate(360deg); } }\r\n `}</style>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default LoadingRings;\r\n"]}
@@ -0,0 +1,6 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function e(...a){return tailwindMerge.twMerge(clsx.clsx(a))}function i({text:a="loading",className:r=""}){return jsxRuntime.jsx("div",{className:e("w-full h-full min-h-[400px] flex items-center justify-center",r),children:jsxRuntime.jsxs("div",{className:"relative w-20 h-12",children:[jsxRuntime.jsx("span",{className:"absolute top-0 left-0 m-0 p-0 text-black dark:text-white text-sm tracking-wider animate-[loading-text_3.5s_ease_both_infinite]",children:a}),jsxRuntime.jsx("span",{className:"absolute bottom-0 left-0 block h-4 w-4 rounded-full bg-black dark:bg-white animate-[loading-bar_3.5s_ease_both_infinite]",children:jsxRuntime.jsx("span",{className:"absolute inset-0 rounded-full bg-zinc-400 dark:bg-zinc-500 animate-[loading-bar-before_3.5s_ease_both_infinite]"})}),jsxRuntime.jsx("style",{jsx:true,children:`
2
+ @keyframes loading-text { 0% { letter-spacing: 1px; transform: translateX(0px); } 40% { letter-spacing: 2px; transform: translateX(26px); } 80% { letter-spacing: 1px; transform: translateX(32px); } 90% { letter-spacing: 2px; transform: translateX(0px); } 100% { letter-spacing: 1px; transform: translateX(0px); } }
3
+ @keyframes loading-bar { 0% { width: 16px; transform: translateX(0px); } 40% { width: 100%; transform: translateX(0px); } 80% { width: 16px; transform: translateX(64px); } 90% { width: 100%; transform: translateX(0px); } 100% { width: 16px; transform: translateX(0px); } }
4
+ @keyframes loading-bar-before { 0% { transform: translateX(0px); width: 16px; } 40% { transform: translateX(0%); width: 80%; } 80% { width: 100%; transform: translateX(0px); } 90% { width: 80%; transform: translateX(15px); } 100% { transform: translateX(0px); width: 16px; } }
5
+ `})]})})}var m=i;exports.LoadingText=i;exports.default=m;//# sourceMappingURL=index.js.map
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/loading-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","LoadingText","text","className","jsx","jsxs","loading_text_default"],"mappings":"+KAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,UAAKF,CAAM,CAAC,CAC7B,CCIO,SAASG,CAAAA,CAAY,CAAE,KAAAC,CAAAA,CAAO,SAAA,CAAW,SAAA,CAAAC,CAAAA,CAAY,EAAG,CAAA,CAAqB,CAClF,OACEC,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWP,CAAAA,CAAG,8DAAA,CAAgEM,CAAS,CAAA,CAC1F,QAAA,CAAAE,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oBAAA,CACb,QAAA,CAAA,CAAAD,cAAAA,CAAC,QAAK,SAAA,CAAU,gIAAA,CACb,QAAA,CAAAF,CAAAA,CACH,CAAA,CACAE,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,2HACd,QAAA,CAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,kHAAkH,CAAA,CACpI,CAAA,CACAA,cAAAA,CAAC,OAAA,CAAA,CAAM,IAAG,IAAA,CAAE,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA,CAIV,CAAA,CAAA,CACJ,CAAA,CACF,CAEJ,KAEOE,CAAAA,CAAQL","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 LoadingTextProps {\r\n text?: string;\r\n className?: string;\r\n}\r\n\r\nexport function LoadingText({ text = \"loading\", className = \"\" }: LoadingTextProps) {\r\n return (\r\n <div className={cn(\"w-full h-full min-h-[400px] flex items-center justify-center\", className)}>\r\n <div className=\"relative w-20 h-12\">\r\n <span className=\"absolute top-0 left-0 m-0 p-0 text-black dark:text-white text-sm tracking-wider animate-[loading-text_3.5s_ease_both_infinite]\">\r\n {text}\r\n </span>\r\n <span className=\"absolute bottom-0 left-0 block h-4 w-4 rounded-full bg-black dark:bg-white animate-[loading-bar_3.5s_ease_both_infinite]\">\r\n <span className=\"absolute inset-0 rounded-full bg-zinc-400 dark:bg-zinc-500 animate-[loading-bar-before_3.5s_ease_both_infinite]\" />\r\n </span>\r\n <style jsx>{`\r\n @keyframes loading-text { 0% { letter-spacing: 1px; transform: translateX(0px); } 40% { letter-spacing: 2px; transform: translateX(26px); } 80% { letter-spacing: 1px; transform: translateX(32px); } 90% { letter-spacing: 2px; transform: translateX(0px); } 100% { letter-spacing: 1px; transform: translateX(0px); } }\r\n @keyframes loading-bar { 0% { width: 16px; transform: translateX(0px); } 40% { width: 100%; transform: translateX(0px); } 80% { width: 16px; transform: translateX(64px); } 90% { width: 100%; transform: translateX(0px); } 100% { width: 16px; transform: translateX(0px); } }\r\n @keyframes loading-bar-before { 0% { transform: translateX(0px); width: 16px; } 40% { transform: translateX(0%); width: 80%; } 80% { width: 100%; transform: translateX(0px); } 90% { width: 80%; transform: translateX(15px); } 100% { transform: translateX(0px); width: 16px; } }\r\n `}</style>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default LoadingText;\r\n"]}
@@ -0,0 +1,6 @@
1
+ import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx,jsxs}from'react/jsx-runtime';function e(...a){return twMerge(clsx(a))}function i({text:a="loading",className:r=""}){return jsx("div",{className:e("w-full h-full min-h-[400px] flex items-center justify-center",r),children:jsxs("div",{className:"relative w-20 h-12",children:[jsx("span",{className:"absolute top-0 left-0 m-0 p-0 text-black dark:text-white text-sm tracking-wider animate-[loading-text_3.5s_ease_both_infinite]",children:a}),jsx("span",{className:"absolute bottom-0 left-0 block h-4 w-4 rounded-full bg-black dark:bg-white animate-[loading-bar_3.5s_ease_both_infinite]",children:jsx("span",{className:"absolute inset-0 rounded-full bg-zinc-400 dark:bg-zinc-500 animate-[loading-bar-before_3.5s_ease_both_infinite]"})}),jsx("style",{jsx:true,children:`
2
+ @keyframes loading-text { 0% { letter-spacing: 1px; transform: translateX(0px); } 40% { letter-spacing: 2px; transform: translateX(26px); } 80% { letter-spacing: 1px; transform: translateX(32px); } 90% { letter-spacing: 2px; transform: translateX(0px); } 100% { letter-spacing: 1px; transform: translateX(0px); } }
3
+ @keyframes loading-bar { 0% { width: 16px; transform: translateX(0px); } 40% { width: 100%; transform: translateX(0px); } 80% { width: 16px; transform: translateX(64px); } 90% { width: 100%; transform: translateX(0px); } 100% { width: 16px; transform: translateX(0px); } }
4
+ @keyframes loading-bar-before { 0% { transform: translateX(0px); width: 16px; } 40% { transform: translateX(0%); width: 80%; } 80% { width: 100%; transform: translateX(0px); } 90% { width: 80%; transform: translateX(15px); } 100% { transform: translateX(0px); width: 16px; } }
5
+ `})]})})}var m=i;export{i as LoadingText,m as default};//# sourceMappingURL=index.mjs.map
6
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/loading-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","LoadingText","text","className","jsx","jsxs","loading_text_default"],"mappings":"sGAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,KAAKF,CAAM,CAAC,CAC7B,CCIO,SAASG,CAAAA,CAAY,CAAE,KAAAC,CAAAA,CAAO,SAAA,CAAW,SAAA,CAAAC,CAAAA,CAAY,EAAG,CAAA,CAAqB,CAClF,OACEC,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWP,CAAAA,CAAG,8DAAA,CAAgEM,CAAS,CAAA,CAC1F,QAAA,CAAAE,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,oBAAA,CACb,QAAA,CAAA,CAAAD,GAAAA,CAAC,QAAK,SAAA,CAAU,gIAAA,CACb,QAAA,CAAAF,CAAAA,CACH,CAAA,CACAE,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,2HACd,QAAA,CAAAA,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,kHAAkH,CAAA,CACpI,CAAA,CACAA,GAAAA,CAAC,OAAA,CAAA,CAAM,IAAG,IAAA,CAAE,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA,CAIV,CAAA,CAAA,CACJ,CAAA,CACF,CAEJ,KAEOE,CAAAA,CAAQL","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 LoadingTextProps {\r\n text?: string;\r\n className?: string;\r\n}\r\n\r\nexport function LoadingText({ text = \"loading\", className = \"\" }: LoadingTextProps) {\r\n return (\r\n <div className={cn(\"w-full h-full min-h-[400px] flex items-center justify-center\", className)}>\r\n <div className=\"relative w-20 h-12\">\r\n <span className=\"absolute top-0 left-0 m-0 p-0 text-black dark:text-white text-sm tracking-wider animate-[loading-text_3.5s_ease_both_infinite]\">\r\n {text}\r\n </span>\r\n <span className=\"absolute bottom-0 left-0 block h-4 w-4 rounded-full bg-black dark:bg-white animate-[loading-bar_3.5s_ease_both_infinite]\">\r\n <span className=\"absolute inset-0 rounded-full bg-zinc-400 dark:bg-zinc-500 animate-[loading-bar-before_3.5s_ease_both_infinite]\" />\r\n </span>\r\n <style jsx>{`\r\n @keyframes loading-text { 0% { letter-spacing: 1px; transform: translateX(0px); } 40% { letter-spacing: 2px; transform: translateX(26px); } 80% { letter-spacing: 1px; transform: translateX(32px); } 90% { letter-spacing: 2px; transform: translateX(0px); } 100% { letter-spacing: 1px; transform: translateX(0px); } }\r\n @keyframes loading-bar { 0% { width: 16px; transform: translateX(0px); } 40% { width: 100%; transform: translateX(0px); } 80% { width: 16px; transform: translateX(64px); } 90% { width: 100%; transform: translateX(0px); } 100% { width: 16px; transform: translateX(0px); } }\r\n @keyframes loading-bar-before { 0% { transform: translateX(0px); width: 16px; } 40% { transform: translateX(0%); width: 80%; } 80% { width: 100%; transform: translateX(0px); } 90% { width: 80%; transform: translateX(15px); } 100% { transform: translateX(0px); width: 16px; } }\r\n `}</style>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default LoadingText;\r\n"]}
@@ -0,0 +1,4 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function e(...a){return tailwindMerge.twMerge(clsx.clsx(a))}function m({words:a=["buttons","forms","switches","cards","loaders"],className:n=""}){return jsxRuntime.jsxs("div",{className:e("w-full h-full min-h-[400px] flex items-center justify-center",n),children:[jsxRuntime.jsxs("div",{className:"text-zinc-400 dark:text-zinc-500 font-medium text-2xl box-border h-10 px-2.5 py-2 flex items-center rounded-lg",children:[jsxRuntime.jsx("span",{className:"mr-2",children:"loading"}),jsxRuntime.jsxs("div",{className:"overflow-hidden relative h-full",children:[jsxRuntime.jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-white via-transparent to-white dark:from-zinc-950 dark:via-transparent dark:to-zinc-950 z-10"}),a.map((o,s)=>jsxRuntime.jsx("span",{className:"block h-full pl-1.5 text-black dark:text-white animate-[spin-words_4s_infinite]",style:{animationDelay:`${s*.8}s`},children:o},s))]})]}),jsxRuntime.jsx("style",{jsx:true,children:`
2
+ @keyframes spin-words { 10% { transform: translateY(-102%); } 25% { transform: translateY(-100%); } 35% { transform: translateY(-202%); } 50% { transform: translateY(-200%); } 60% { transform: translateY(-302%); } 75% { transform: translateY(-300%); } 85% { transform: translateY(-402%); } 100% { transform: translateY(-400%); } }
3
+ `})]})}var u=m;exports.LoadingWords=m;exports.default=u;//# sourceMappingURL=index.js.map
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/loading-words/index.tsx"],"names":["cn","inputs","twMerge","clsx","LoadingWords","words","className","jsxs","jsx","word","index","loading_words_default"],"mappings":"+KAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,UAAKF,CAAM,CAAC,CAC7B,CCIO,SAASG,CAAAA,CAAa,CAC3B,MAAAC,CAAAA,CAAQ,CAAC,UAAW,OAAA,CAAS,UAAA,CAAY,QAAS,SAAS,CAAA,CAC3D,UAAAC,CAAAA,CAAY,EACd,EAAsB,CACpB,OACEC,gBAAC,KAAA,CAAA,CAAI,SAAA,CAAWP,CAAAA,CAAG,8DAAA,CAAgEM,CAAS,CAAA,CAC1F,UAAAC,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,gHAAA,CACb,QAAA,CAAA,CAAAC,eAAC,MAAA,CAAA,CAAK,SAAA,CAAU,OAAO,QAAA,CAAA,SAAA,CAAO,CAAA,CAC9BD,gBAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCACb,QAAA,CAAA,CAAAC,cAAAA,CAAC,OAAI,SAAA,CAAU,qIAAA,CAAsI,CAAA,CACpJH,CAAAA,CAAM,GAAA,CAAI,CAACI,EAAMC,CAAAA,GAChBF,cAAAA,CAAC,QAEC,SAAA,CAAU,iFAAA,CACV,MAAO,CAAE,cAAA,CAAgB,CAAA,EAAGE,CAAAA,CAAQ,EAAG,CAAA,CAAA,CAAI,EAE1C,QAAA,CAAAD,CAAAA,CAAAA,CAJIC,CAKP,CACD,CAAA,CAAA,CACH,GACF,CAAA,CACAF,cAAAA,CAAC,OAAA,CAAA,CAAM,GAAA,CAAG,IAAA,CAAE,QAAA,CAAA;AAAA;AAAA,MAAA,CAAA,CAEV,CAAA,CAAA,CACJ,CAEJ,CAEA,IAAOG,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 LoadingWordsProps {\r\n words?: string[];\r\n className?: string;\r\n}\r\n\r\nexport function LoadingWords({\r\n words = [\"buttons\", \"forms\", \"switches\", \"cards\", \"loaders\"],\r\n className = \"\",\r\n}: LoadingWordsProps) {\r\n return (\r\n <div className={cn(\"w-full h-full min-h-[400px] flex items-center justify-center\", className)}>\r\n <div className=\"text-zinc-400 dark:text-zinc-500 font-medium text-2xl box-border h-10 px-2.5 py-2 flex items-center rounded-lg\">\r\n <span className=\"mr-2\">loading</span>\r\n <div className=\"overflow-hidden relative h-full\">\r\n <div className=\"absolute inset-0 bg-gradient-to-b from-white via-transparent to-white dark:from-zinc-950 dark:via-transparent dark:to-zinc-950 z-10\" />\r\n {words.map((word, index) => (\r\n <span\r\n key={index}\r\n className=\"block h-full pl-1.5 text-black dark:text-white animate-[spin-words_4s_infinite]\"\r\n style={{ animationDelay: `${index * 0.8}s` }}\r\n >\r\n {word}\r\n </span>\r\n ))}\r\n </div>\r\n </div>\r\n <style jsx>{`\r\n @keyframes spin-words { 10% { transform: translateY(-102%); } 25% { transform: translateY(-100%); } 35% { transform: translateY(-202%); } 50% { transform: translateY(-200%); } 60% { transform: translateY(-302%); } 75% { transform: translateY(-300%); } 85% { transform: translateY(-402%); } 100% { transform: translateY(-400%); } }\r\n `}</style>\r\n </div>\r\n );\r\n}\r\n\r\nexport default LoadingWords;\r\n"]}
@@ -0,0 +1,4 @@
1
+ import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function e(...a){return twMerge(clsx(a))}function m({words:a=["buttons","forms","switches","cards","loaders"],className:n=""}){return jsxs("div",{className:e("w-full h-full min-h-[400px] flex items-center justify-center",n),children:[jsxs("div",{className:"text-zinc-400 dark:text-zinc-500 font-medium text-2xl box-border h-10 px-2.5 py-2 flex items-center rounded-lg",children:[jsx("span",{className:"mr-2",children:"loading"}),jsxs("div",{className:"overflow-hidden relative h-full",children:[jsx("div",{className:"absolute inset-0 bg-gradient-to-b from-white via-transparent to-white dark:from-zinc-950 dark:via-transparent dark:to-zinc-950 z-10"}),a.map((o,s)=>jsx("span",{className:"block h-full pl-1.5 text-black dark:text-white animate-[spin-words_4s_infinite]",style:{animationDelay:`${s*.8}s`},children:o},s))]})]}),jsx("style",{jsx:true,children:`
2
+ @keyframes spin-words { 10% { transform: translateY(-102%); } 25% { transform: translateY(-100%); } 35% { transform: translateY(-202%); } 50% { transform: translateY(-200%); } 60% { transform: translateY(-302%); } 75% { transform: translateY(-300%); } 85% { transform: translateY(-402%); } 100% { transform: translateY(-400%); } }
3
+ `})]})}var u=m;export{m as LoadingWords,u as default};//# sourceMappingURL=index.mjs.map
4
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/loading-words/index.tsx"],"names":["cn","inputs","twMerge","clsx","LoadingWords","words","className","jsxs","jsx","word","index","loading_words_default"],"mappings":"sGAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,KAAKF,CAAM,CAAC,CAC7B,CCIO,SAASG,CAAAA,CAAa,CAC3B,MAAAC,CAAAA,CAAQ,CAAC,UAAW,OAAA,CAAS,UAAA,CAAY,QAAS,SAAS,CAAA,CAC3D,UAAAC,CAAAA,CAAY,EACd,EAAsB,CACpB,OACEC,KAAC,KAAA,CAAA,CAAI,SAAA,CAAWP,CAAAA,CAAG,8DAAA,CAAgEM,CAAS,CAAA,CAC1F,UAAAC,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,gHAAA,CACb,QAAA,CAAA,CAAAC,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,OAAO,QAAA,CAAA,SAAA,CAAO,CAAA,CAC9BD,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCACb,QAAA,CAAA,CAAAC,GAAAA,CAAC,OAAI,SAAA,CAAU,qIAAA,CAAsI,CAAA,CACpJH,CAAAA,CAAM,GAAA,CAAI,CAACI,EAAMC,CAAAA,GAChBF,GAAAA,CAAC,QAEC,SAAA,CAAU,iFAAA,CACV,MAAO,CAAE,cAAA,CAAgB,CAAA,EAAGE,CAAAA,CAAQ,EAAG,CAAA,CAAA,CAAI,EAE1C,QAAA,CAAAD,CAAAA,CAAAA,CAJIC,CAKP,CACD,CAAA,CAAA,CACH,GACF,CAAA,CACAF,GAAAA,CAAC,OAAA,CAAA,CAAM,GAAA,CAAG,IAAA,CAAE,QAAA,CAAA;AAAA;AAAA,MAAA,CAAA,CAEV,CAAA,CAAA,CACJ,CAEJ,CAEA,IAAOG,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 LoadingWordsProps {\r\n words?: string[];\r\n className?: string;\r\n}\r\n\r\nexport function LoadingWords({\r\n words = [\"buttons\", \"forms\", \"switches\", \"cards\", \"loaders\"],\r\n className = \"\",\r\n}: LoadingWordsProps) {\r\n return (\r\n <div className={cn(\"w-full h-full min-h-[400px] flex items-center justify-center\", className)}>\r\n <div className=\"text-zinc-400 dark:text-zinc-500 font-medium text-2xl box-border h-10 px-2.5 py-2 flex items-center rounded-lg\">\r\n <span className=\"mr-2\">loading</span>\r\n <div className=\"overflow-hidden relative h-full\">\r\n <div className=\"absolute inset-0 bg-gradient-to-b from-white via-transparent to-white dark:from-zinc-950 dark:via-transparent dark:to-zinc-950 z-10\" />\r\n {words.map((word, index) => (\r\n <span\r\n key={index}\r\n className=\"block h-full pl-1.5 text-black dark:text-white animate-[spin-words_4s_infinite]\"\r\n style={{ animationDelay: `${index * 0.8}s` }}\r\n >\r\n {word}\r\n </span>\r\n ))}\r\n </div>\r\n </div>\r\n <style jsx>{`\r\n @keyframes spin-words { 10% { transform: translateY(-102%); } 25% { transform: translateY(-100%); } 35% { transform: translateY(-202%); } 50% { transform: translateY(-200%); } 60% { transform: translateY(-302%); } 75% { transform: translateY(-300%); } 85% { transform: translateY(-402%); } 100% { transform: translateY(-400%); } }\r\n `}</style>\r\n </div>\r\n );\r\n}\r\n\r\nexport default LoadingWords;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function r(...t){return tailwindMerge.twMerge(clsx.clsx(t))}function y({isOpen:t,onClose:o,children:l,className:c,title:n}){return react.useEffect(()=>{let a=d=>{d.key==="Escape"&&o();};return t&&(document.addEventListener("keydown",a),document.body.style.overflow="hidden"),()=>{document.removeEventListener("keydown",a),document.body.style.overflow="unset";}},[t,o]),jsxRuntime.jsx(framerMotion.AnimatePresence,{children:t&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(framerMotion.motion.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},onClick:o,className:"fixed inset-0 bg-black/50 z-50"}),jsxRuntime.jsxs(framerMotion.motion.div,{initial:{opacity:0,scale:.95,y:20},animate:{opacity:1,scale:1,y:0},exit:{opacity:0,scale:.95,y:20},transition:{type:"spring",damping:25,stiffness:300},className:r("fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 z-50","w-full max-w-md p-6 rounded-xl","bg-white dark:bg-zinc-900","shadow-xl",c),children:[n&&jsxRuntime.jsxs("div",{className:"flex items-center justify-between mb-4",children:[jsxRuntime.jsx("h2",{className:"text-lg font-semibold",children:n}),jsxRuntime.jsx("button",{onClick:o,className:"p-1 rounded-lg hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors",children:jsxRuntime.jsx("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),l]})]})})}var N=y;exports.Modal=y;exports.default=N;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/modal/index.tsx"],"names":["cn","inputs","twMerge","clsx","Modal","isOpen","onClose","children","className","title","useEffect","handleEscape","e","jsx","AnimatePresence","jsxs","Fragment","motion","modal_default"],"mappings":"4OAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCSO,SAASG,CAAAA,CAAM,CAAE,MAAA,CAAAC,CAAAA,CAAQ,OAAA,CAAAC,EAAS,QAAA,CAAAC,CAAAA,CAAU,SAAA,CAAAC,CAAAA,CAAW,KAAA,CAAAC,CAAM,CAAA,CAAe,CACjF,OAAAC,eAAAA,CAAU,IAAM,CACd,IAAMC,CAAAA,CAAgBC,GAAqB,CACrCA,CAAAA,CAAE,GAAA,GAAQ,QAAA,EAAUN,CAAAA,GAC1B,EACA,OAAID,CAAAA,GACF,QAAA,CAAS,gBAAA,CAAiB,SAAA,CAAWM,CAAY,EACjD,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAW,QAAA,CAAA,CAE1B,IAAM,CACX,QAAA,CAAS,mBAAA,CAAoB,SAAA,CAAWA,CAAY,CAAA,CACpD,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,CAAW,QACjC,CACF,CAAA,CAAG,CAACN,CAAAA,CAAQC,CAAO,CAAC,CAAA,CAGlBO,cAAAA,CAACC,4BAAAA,CAAA,CACE,QAAA,CAAAT,GACCU,eAAAA,CAAAC,mBAAAA,CAAA,CACE,QAAA,CAAA,CAAAH,cAAAA,CAACI,mBAAAA,CAAO,GAAA,CAAP,CACC,OAAA,CAAS,CAAE,OAAA,CAAS,CAAE,CAAA,CACtB,OAAA,CAAS,CAAE,OAAA,CAAS,CAAE,CAAA,CACtB,IAAA,CAAM,CAAE,OAAA,CAAS,CAAE,CAAA,CACnB,OAAA,CAASX,CAAAA,CACT,SAAA,CAAU,gCAAA,CACZ,CAAA,CACAS,gBAACE,mBAAAA,CAAO,GAAA,CAAP,CACC,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,KAAA,CAAO,GAAA,CAAM,CAAA,CAAG,EAAG,CAAA,CAC1C,OAAA,CAAS,CAAE,QAAS,CAAA,CAAG,KAAA,CAAO,CAAA,CAAG,CAAA,CAAG,CAAE,CAAA,CACtC,KAAM,CAAE,OAAA,CAAS,CAAA,CAAG,KAAA,CAAO,GAAA,CAAM,CAAA,CAAG,EAAG,CAAA,CACvC,UAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,OAAA,CAAS,EAAA,CAAI,SAAA,CAAW,GAAI,CAAA,CAC1D,SAAA,CAAWjB,CAAAA,CACT,+DAAA,CACA,gCAAA,CACA,4BACA,WAAA,CACAQ,CACF,CAAA,CAEC,QAAA,CAAA,CAAAC,CAAAA,EACCM,eAAAA,CAAC,OAAI,SAAA,CAAU,wCAAA,CACb,QAAA,CAAA,CAAAF,cAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,wBAAyB,QAAA,CAAAJ,CAAAA,CAAM,CAAA,CAC7CI,cAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAASP,CAAAA,CACT,SAAA,CAAU,2EAAA,CAEV,QAAA,CAAAO,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CAAU,KAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACjE,QAAA,CAAAA,eAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,EAAG,CAAA,CAAE,sBAAA,CAAuB,CAAA,CAC9F,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAEDN,CAAAA,CAAAA,CACH,CAAA,CAAA,CACF,CAAA,CAEJ,CAEJ,CAEA,IAAOW,CAAAA,CAAQd","file":"index.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, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface ModalProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n children: React.ReactNode;\r\n className?: string;\r\n title?: string;\r\n}\r\n\r\nexport function Modal({ isOpen, onClose, children, className, title }: ModalProps) {\r\n useEffect(() => {\r\n const handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") onClose();\r\n };\r\n if (isOpen) {\r\n document.addEventListener(\"keydown\", handleEscape);\r\n document.body.style.overflow = \"hidden\";\r\n }\r\n return () => {\r\n document.removeEventListener(\"keydown\", handleEscape);\r\n document.body.style.overflow = \"unset\";\r\n };\r\n }, [isOpen, onClose]);\r\n\r\n return (\r\n <AnimatePresence>\r\n {isOpen && (\r\n <>\r\n <motion.div\r\n initial={{ opacity: 0 }}\r\n animate={{ opacity: 1 }}\r\n exit={{ opacity: 0 }}\r\n onClick={onClose}\r\n className=\"fixed inset-0 bg-black/50 z-50\"\r\n />\r\n <motion.div\r\n initial={{ opacity: 0, scale: 0.95, y: 20 }}\r\n animate={{ opacity: 1, scale: 1, y: 0 }}\r\n exit={{ opacity: 0, scale: 0.95, y: 20 }}\r\n transition={{ type: \"spring\", damping: 25, stiffness: 300 }}\r\n className={cn(\r\n \"fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 z-50\",\r\n \"w-full max-w-md p-6 rounded-xl\",\r\n \"bg-white dark:bg-zinc-900\",\r\n \"shadow-xl\",\r\n className\r\n )}\r\n >\r\n {title && (\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <h2 className=\"text-lg font-semibold\">{title}</h2>\r\n <button\r\n onClick={onClose}\r\n className=\"p-1 rounded-lg hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors\"\r\n >\r\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n )}\r\n {children}\r\n </motion.div>\r\n </>\r\n )}\r\n </AnimatePresence>\r\n );\r\n}\r\n\r\nexport default Modal;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useEffect}from'react';import {AnimatePresence,motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx,jsxs,Fragment}from'react/jsx-runtime';function r(...t){return twMerge(clsx(t))}function y({isOpen:t,onClose:o,children:l,className:c,title:n}){return useEffect(()=>{let a=d=>{d.key==="Escape"&&o();};return t&&(document.addEventListener("keydown",a),document.body.style.overflow="hidden"),()=>{document.removeEventListener("keydown",a),document.body.style.overflow="unset";}},[t,o]),jsx(AnimatePresence,{children:t&&jsxs(Fragment,{children:[jsx(motion.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},onClick:o,className:"fixed inset-0 bg-black/50 z-50"}),jsxs(motion.div,{initial:{opacity:0,scale:.95,y:20},animate:{opacity:1,scale:1,y:0},exit:{opacity:0,scale:.95,y:20},transition:{type:"spring",damping:25,stiffness:300},className:r("fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 z-50","w-full max-w-md p-6 rounded-xl","bg-white dark:bg-zinc-900","shadow-xl",c),children:[n&&jsxs("div",{className:"flex items-center justify-between mb-4",children:[jsx("h2",{className:"text-lg font-semibold",children:n}),jsx("button",{onClick:o,className:"p-1 rounded-lg hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors",children:jsx("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),l]})]})})}var N=y;export{y as Modal,N as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/modal/index.tsx"],"names":["cn","inputs","twMerge","clsx","Modal","isOpen","onClose","children","className","title","useEffect","handleEscape","e","jsx","AnimatePresence","jsxs","Fragment","motion","modal_default"],"mappings":"gMAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCSO,SAASG,CAAAA,CAAM,CAAE,MAAA,CAAAC,CAAAA,CAAQ,OAAA,CAAAC,EAAS,QAAA,CAAAC,CAAAA,CAAU,SAAA,CAAAC,CAAAA,CAAW,KAAA,CAAAC,CAAM,CAAA,CAAe,CACjF,OAAAC,SAAAA,CAAU,IAAM,CACd,IAAMC,CAAAA,CAAgBC,GAAqB,CACrCA,CAAAA,CAAE,GAAA,GAAQ,QAAA,EAAUN,CAAAA,GAC1B,EACA,OAAID,CAAAA,GACF,QAAA,CAAS,gBAAA,CAAiB,SAAA,CAAWM,CAAY,EACjD,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAW,QAAA,CAAA,CAE1B,IAAM,CACX,QAAA,CAAS,mBAAA,CAAoB,SAAA,CAAWA,CAAY,CAAA,CACpD,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,CAAW,QACjC,CACF,CAAA,CAAG,CAACN,CAAAA,CAAQC,CAAO,CAAC,CAAA,CAGlBO,GAAAA,CAACC,eAAAA,CAAA,CACE,QAAA,CAAAT,GACCU,IAAAA,CAAAC,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAH,GAAAA,CAACI,MAAAA,CAAO,GAAA,CAAP,CACC,OAAA,CAAS,CAAE,OAAA,CAAS,CAAE,CAAA,CACtB,OAAA,CAAS,CAAE,OAAA,CAAS,CAAE,CAAA,CACtB,IAAA,CAAM,CAAE,OAAA,CAAS,CAAE,CAAA,CACnB,OAAA,CAASX,CAAAA,CACT,SAAA,CAAU,gCAAA,CACZ,CAAA,CACAS,KAACE,MAAAA,CAAO,GAAA,CAAP,CACC,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,KAAA,CAAO,GAAA,CAAM,CAAA,CAAG,EAAG,CAAA,CAC1C,OAAA,CAAS,CAAE,QAAS,CAAA,CAAG,KAAA,CAAO,CAAA,CAAG,CAAA,CAAG,CAAE,CAAA,CACtC,KAAM,CAAE,OAAA,CAAS,CAAA,CAAG,KAAA,CAAO,GAAA,CAAM,CAAA,CAAG,EAAG,CAAA,CACvC,UAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,OAAA,CAAS,EAAA,CAAI,SAAA,CAAW,GAAI,CAAA,CAC1D,SAAA,CAAWjB,CAAAA,CACT,+DAAA,CACA,gCAAA,CACA,4BACA,WAAA,CACAQ,CACF,CAAA,CAEC,QAAA,CAAA,CAAAC,CAAAA,EACCM,IAAAA,CAAC,OAAI,SAAA,CAAU,wCAAA,CACb,QAAA,CAAA,CAAAF,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,wBAAyB,QAAA,CAAAJ,CAAAA,CAAM,CAAA,CAC7CI,GAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAASP,CAAAA,CACT,SAAA,CAAU,2EAAA,CAEV,QAAA,CAAAO,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,SAAA,CAAU,KAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACjE,QAAA,CAAAA,IAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,WAAA,CAAa,EAAG,CAAA,CAAE,sBAAA,CAAuB,CAAA,CAC9F,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAEDN,CAAAA,CAAAA,CACH,CAAA,CAAA,CACF,CAAA,CAEJ,CAEJ,CAEA,IAAOW,CAAAA,CAAQd","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect } from \"react\";\r\nimport { motion, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface ModalProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n children: React.ReactNode;\r\n className?: string;\r\n title?: string;\r\n}\r\n\r\nexport function Modal({ isOpen, onClose, children, className, title }: ModalProps) {\r\n useEffect(() => {\r\n const handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") onClose();\r\n };\r\n if (isOpen) {\r\n document.addEventListener(\"keydown\", handleEscape);\r\n document.body.style.overflow = \"hidden\";\r\n }\r\n return () => {\r\n document.removeEventListener(\"keydown\", handleEscape);\r\n document.body.style.overflow = \"unset\";\r\n };\r\n }, [isOpen, onClose]);\r\n\r\n return (\r\n <AnimatePresence>\r\n {isOpen && (\r\n <>\r\n <motion.div\r\n initial={{ opacity: 0 }}\r\n animate={{ opacity: 1 }}\r\n exit={{ opacity: 0 }}\r\n onClick={onClose}\r\n className=\"fixed inset-0 bg-black/50 z-50\"\r\n />\r\n <motion.div\r\n initial={{ opacity: 0, scale: 0.95, y: 20 }}\r\n animate={{ opacity: 1, scale: 1, y: 0 }}\r\n exit={{ opacity: 0, scale: 0.95, y: 20 }}\r\n transition={{ type: \"spring\", damping: 25, stiffness: 300 }}\r\n className={cn(\r\n \"fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 z-50\",\r\n \"w-full max-w-md p-6 rounded-xl\",\r\n \"bg-white dark:bg-zinc-900\",\r\n \"shadow-xl\",\r\n className\r\n )}\r\n >\r\n {title && (\r\n <div className=\"flex items-center justify-between mb-4\">\r\n <h2 className=\"text-lg font-semibold\">{title}</h2>\r\n <button\r\n onClick={onClose}\r\n className=\"p-1 rounded-lg hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors\"\r\n >\r\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n )}\r\n {children}\r\n </motion.div>\r\n </>\r\n )}\r\n </AnimatePresence>\r\n );\r\n}\r\n\r\nexport default Modal;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function r(...t){return tailwindMerge.twMerge(clsx.clsx(t))}function m({text:t,className:n}){let s=Array.from(t);return jsxRuntime.jsx("div",{className:r("flex",n),children:s.map((e,a)=>jsxRuntime.jsx(framerMotion.motion.span,{className:"inline-block",style:{whiteSpace:e===" "?"pre":"normal"},animate:{scaleY:[1,.5,1.5,.8,1],scaleX:[1,1.5,.5,1.2,1]},transition:{duration:1.5,repeat:1/0,delay:a*.08,ease:"easeInOut",repeatDelay:.3},children:e===" "?"\xA0":e},`${e}-${a}`))})}var d=m;exports.MorphText=m;exports.default=d;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/morph-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","MorphText","text","className","letters","jsx","letter","index","motion","morph_text_default"],"mappings":"qNAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,CAAAA,CAAU,CAAE,KAAAC,CAAAA,CAAM,SAAA,CAAAC,CAAU,CAAA,CAAmB,CAC7D,IAAMC,CAAAA,CAAU,KAAA,CAAM,IAAA,CAAKF,CAAI,CAAA,CAE/B,OACEG,cAAAA,CAAC,KAAA,CAAA,CAAI,UAAWR,CAAAA,CAAG,MAAA,CAAQM,CAAS,CAAA,CACjC,QAAA,CAAAC,CAAAA,CAAQ,GAAA,CAAI,CAACE,CAAAA,CAAQC,CAAAA,GACpBF,cAAAA,CAACG,mBAAAA,CAAO,IAAA,CAAP,CAEC,UAAU,cAAA,CACV,KAAA,CAAO,CAAE,UAAA,CAAYF,CAAAA,GAAW,GAAA,CAAM,KAAA,CAAQ,QAAS,CAAA,CACvD,OAAA,CAAS,CACP,MAAA,CAAQ,CAAC,CAAA,CAAG,GAAK,GAAA,CAAK,EAAA,CAAK,CAAC,CAAA,CAC5B,MAAA,CAAQ,CAAC,CAAA,CAAG,GAAA,CAAK,EAAA,CAAK,GAAA,CAAK,CAAC,CAC9B,CAAA,CACA,UAAA,CAAY,CACV,QAAA,CAAU,GAAA,CACV,MAAA,CAAQ,CAAA,CAAA,CAAA,CACR,KAAA,CAAOC,CAAAA,CAAQ,GAAA,CACf,IAAA,CAAM,WAAA,CACN,WAAA,CAAa,EACf,CAAA,CAEC,QAAA,CAAAD,CAAAA,GAAW,IAAM,MAAA,CAAWA,CAAAA,CAAAA,CAfxB,CAAA,EAAGA,CAAM,CAAA,CAAA,EAAIC,CAAK,CAAA,CAgBzB,CACD,CAAA,CACH,CAEJ,CAEA,IAAOE,CAAAA,CAAQR","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface MorphTextProps {\r\n text: string;\r\n className?: string;\r\n}\r\n\r\nexport function MorphText({ text, className }: MorphTextProps) {\r\n const letters = Array.from(text);\r\n\r\n return (\r\n <div className={cn(\"flex\", className)}>\r\n {letters.map((letter, index) => (\r\n <motion.span\r\n key={`${letter}-${index}`}\r\n className=\"inline-block\"\r\n style={{ whiteSpace: letter === \" \" ? \"pre\" : \"normal\" }}\r\n animate={{\r\n scaleY: [1, 0.5, 1.5, 0.8, 1],\r\n scaleX: [1, 1.5, 0.5, 1.2, 1],\r\n }}\r\n transition={{\r\n duration: 1.5,\r\n repeat: Infinity,\r\n delay: index * 0.08,\r\n ease: \"easeInOut\",\r\n repeatDelay: 0.3,\r\n }}\r\n >\r\n {letter === \" \" ? \"\\u00A0\" : letter}\r\n </motion.span>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default MorphText;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function r(...t){return twMerge(clsx(t))}function m({text:t,className:n}){let s=Array.from(t);return jsx("div",{className:r("flex",n),children:s.map((e,a)=>jsx(motion.span,{className:"inline-block",style:{whiteSpace:e===" "?"pre":"normal"},animate:{scaleY:[1,.5,1.5,.8,1],scaleX:[1,1.5,.5,1.2,1]},transition:{duration:1.5,repeat:1/0,delay:a*.08,ease:"easeInOut",repeatDelay:.3},children:e===" "?"\xA0":e},`${e}-${a}`))})}var d=m;export{m as MorphText,d as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/morph-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","MorphText","text","className","letters","jsx","letter","index","motion","morph_text_default"],"mappings":"oIAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,CAAAA,CAAU,CAAE,KAAAC,CAAAA,CAAM,SAAA,CAAAC,CAAU,CAAA,CAAmB,CAC7D,IAAMC,CAAAA,CAAU,KAAA,CAAM,IAAA,CAAKF,CAAI,CAAA,CAE/B,OACEG,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAWR,CAAAA,CAAG,MAAA,CAAQM,CAAS,CAAA,CACjC,QAAA,CAAAC,CAAAA,CAAQ,GAAA,CAAI,CAACE,CAAAA,CAAQC,CAAAA,GACpBF,GAAAA,CAACG,MAAAA,CAAO,IAAA,CAAP,CAEC,UAAU,cAAA,CACV,KAAA,CAAO,CAAE,UAAA,CAAYF,CAAAA,GAAW,GAAA,CAAM,KAAA,CAAQ,QAAS,CAAA,CACvD,OAAA,CAAS,CACP,MAAA,CAAQ,CAAC,CAAA,CAAG,GAAK,GAAA,CAAK,EAAA,CAAK,CAAC,CAAA,CAC5B,MAAA,CAAQ,CAAC,CAAA,CAAG,GAAA,CAAK,EAAA,CAAK,GAAA,CAAK,CAAC,CAC9B,CAAA,CACA,UAAA,CAAY,CACV,QAAA,CAAU,GAAA,CACV,MAAA,CAAQ,CAAA,CAAA,CAAA,CACR,KAAA,CAAOC,CAAAA,CAAQ,GAAA,CACf,IAAA,CAAM,WAAA,CACN,WAAA,CAAa,EACf,CAAA,CAEC,QAAA,CAAAD,CAAAA,GAAW,IAAM,MAAA,CAAWA,CAAAA,CAAAA,CAfxB,CAAA,EAAGA,CAAM,CAAA,CAAA,EAAIC,CAAK,CAAA,CAgBzB,CACD,CAAA,CACH,CAEJ,CAEA,IAAOE,CAAAA,CAAQR","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface MorphTextProps {\r\n text: string;\r\n className?: string;\r\n}\r\n\r\nexport function MorphText({ text, className }: MorphTextProps) {\r\n const letters = Array.from(text);\r\n\r\n return (\r\n <div className={cn(\"flex\", className)}>\r\n {letters.map((letter, index) => (\r\n <motion.span\r\n key={`${letter}-${index}`}\r\n className=\"inline-block\"\r\n style={{ whiteSpace: letter === \" \" ? \"pre\" : \"normal\" }}\r\n animate={{\r\n scaleY: [1, 0.5, 1.5, 0.8, 1],\r\n scaleX: [1, 1.5, 0.5, 1.2, 1],\r\n }}\r\n transition={{\r\n duration: 1.5,\r\n repeat: Infinity,\r\n delay: index * 0.08,\r\n ease: \"easeInOut\",\r\n repeatDelay: 0.3,\r\n }}\r\n >\r\n {letter === \" \" ? \"\\u00A0\" : letter}\r\n </motion.span>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default MorphText;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function l(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function P({buttonRef:e}){let t=e.current?.getBoundingClientRect();if(!t)return null;let r=t.left+t.width/2,a=t.top+t.height/2;return jsxRuntime.jsx(framerMotion.AnimatePresence,{children:[...Array(6)].map((s,n)=>jsxRuntime.jsx(framerMotion.motion.div,{className:"fixed w-1 h-1 bg-black dark:bg-white rounded-full",style:{left:r,top:a},initial:{scale:0,x:0,y:0},animate:{scale:[0,1,0],x:[0,(n%2?1:-1)*(Math.random()*50+20)],y:[0,-Math.random()*50-20]},transition:{duration:.6,delay:n*.1,ease:"easeOut"}},n))})}function x({children:e,onClick:t,onSuccess:r,successDuration:a=1e3,className:s,...n}){let[c,u]=react.useState(false),i=react.useRef(null);return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[c&&jsxRuntime.jsx(P,{buttonRef:i}),jsxRuntime.jsx("button",{ref:i,onClick:m=>{u(true),t?.(m),r?.(),setTimeout(()=>u(false),a);},className:l("relative px-4 py-2 rounded-md bg-primary text-primary-foreground",c&&"scale-95","transition-transform duration-100",s),...n,children:e})]})}var H=x;exports.ParticleButton=x;exports.default=H;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/particle-button/index.tsx"],"names":["cn","inputs","twMerge","clsx","SuccessParticles","buttonRef","rect","centerX","centerY","jsx","AnimatePresence","_","i","motion","ParticleButton","children","onClick","onSuccess","successDuration","className","props","showParticles","setShowParticles","useState","useRef","jsxs","Fragment","e","particle_button_default"],"mappings":"4OAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCMA,SAASG,CAAAA,CAAiB,CAAE,SAAA,CAAAC,CAAU,CAAA,CAAsD,CAC1F,IAAMC,CAAAA,CAAOD,CAAAA,CAAU,OAAA,EAAS,qBAAA,EAAsB,CACtD,GAAI,CAACC,CAAAA,CAAM,OAAO,IAAA,CAElB,IAAMC,EAAUD,CAAAA,CAAK,IAAA,CAAOA,CAAAA,CAAK,KAAA,CAAQ,CAAA,CACnCE,CAAAA,CAAUF,EAAK,GAAA,CAAMA,CAAAA,CAAK,MAAA,CAAS,CAAA,CAEzC,OACEG,cAAAA,CAACC,6BAAA,CACE,QAAA,CAAA,CAAC,GAAG,KAAA,CAAM,CAAC,CAAC,CAAA,CAAE,GAAA,CAAI,CAACC,CAAAA,CAAGC,CAAAA,GACrBH,cAAAA,CAACI,mBAAAA,CAAO,GAAA,CAAP,CAEC,SAAA,CAAU,mDAAA,CACV,KAAA,CAAO,CAAE,IAAA,CAAMN,CAAAA,CAAS,GAAA,CAAKC,CAAQ,CAAA,CACrC,OAAA,CAAS,CAAE,KAAA,CAAO,CAAA,CAAG,CAAA,CAAG,EAAG,CAAA,CAAG,CAAE,CAAA,CAChC,OAAA,CAAS,CAAE,KAAA,CAAO,CAAC,CAAA,CAAG,CAAA,CAAG,CAAC,CAAA,CAAG,CAAA,CAAG,CAAC,CAAA,CAAA,CAAII,EAAI,CAAA,CAAI,CAAA,CAAI,EAAA,GAAO,IAAA,CAAK,MAAA,EAAO,CAAI,GAAK,EAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAC,CAAA,CAAG,CAAC,KAAK,MAAA,EAAO,CAAI,EAAA,CAAK,EAAE,CAAE,CAAA,CACpH,UAAA,CAAY,CAAE,QAAA,CAAU,EAAA,CAAK,KAAA,CAAOA,CAAAA,CAAI,EAAA,CAAK,IAAA,CAAM,SAAU,CAAA,CAAA,CALxDA,CAMP,CACD,CAAA,CACH,CAEJ,CAEO,SAASE,CAAAA,CAAe,CAC7B,QAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,EACA,eAAA,CAAAC,CAAAA,CAAkB,GAAA,CAClB,SAAA,CAAAC,CAAAA,CACA,GAAGC,CACL,CAAA,CAAwB,CACtB,GAAM,CAACC,CAAAA,CAAeC,CAAgB,CAAA,CAAIC,eAAS,KAAK,CAAA,CAClDlB,CAAAA,CAAYmB,YAAAA,CAA0B,IAAI,CAAA,CAShD,OACEC,eAAAA,CAAAC,mBAAAA,CAAA,CACG,QAAA,CAAA,CAAAL,CAAAA,EAAiBZ,cAAAA,CAACL,CAAAA,CAAA,CAAiB,SAAA,CAAWC,CAAAA,CAAW,CAAA,CAC1DI,cAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAKJ,CAAAA,CACL,OAAA,CAZesB,CAAAA,EAA2C,CAC9DL,CAAAA,CAAiB,IAAI,CAAA,CACrBN,CAAAA,GAAUW,CAAC,CAAA,CACXV,CAAAA,IAAY,CACZ,UAAA,CAAW,IAAMK,CAAAA,CAAiB,KAAK,CAAA,CAAGJ,CAAe,EAC3D,CAAA,CAQM,SAAA,CAAWlB,CAAAA,CACT,kEAAA,CACAqB,GAAiB,UAAA,CACjB,mCAAA,CACAF,CACF,CAAA,CACC,GAAGC,CAAAA,CAEH,QAAA,CAAAL,CAAAA,CACH,CAAA,CAAA,CACF,CAEJ,CAEA,IAAOa,CAAAA,CAAQd","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState, useRef } from \"react\";\r\nimport { motion, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface ParticleButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n onSuccess?: () => void;\r\n successDuration?: number;\r\n}\r\n\r\nfunction SuccessParticles({ buttonRef }: { buttonRef: React.RefObject<HTMLButtonElement> }) {\r\n const rect = buttonRef.current?.getBoundingClientRect();\r\n if (!rect) return null;\r\n\r\n const centerX = rect.left + rect.width / 2;\r\n const centerY = rect.top + rect.height / 2;\r\n\r\n return (\r\n <AnimatePresence>\r\n {[...Array(6)].map((_, i) => (\r\n <motion.div\r\n key={i}\r\n className=\"fixed w-1 h-1 bg-black dark:bg-white rounded-full\"\r\n style={{ left: centerX, top: centerY }}\r\n initial={{ scale: 0, x: 0, y: 0 }}\r\n animate={{ scale: [0, 1, 0], x: [0, (i % 2 ? 1 : -1) * (Math.random() * 50 + 20)], y: [0, -Math.random() * 50 - 20] }}\r\n transition={{ duration: 0.6, delay: i * 0.1, ease: \"easeOut\" }}\r\n />\r\n ))}\r\n </AnimatePresence>\r\n );\r\n}\r\n\r\nexport function ParticleButton({\r\n children,\r\n onClick,\r\n onSuccess,\r\n successDuration = 1000,\r\n className,\r\n ...props\r\n}: ParticleButtonProps) {\r\n const [showParticles, setShowParticles] = useState(false);\r\n const buttonRef = useRef<HTMLButtonElement>(null);\r\n\r\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\r\n setShowParticles(true);\r\n onClick?.(e);\r\n onSuccess?.();\r\n setTimeout(() => setShowParticles(false), successDuration);\r\n };\r\n\r\n return (\r\n <>\r\n {showParticles && <SuccessParticles buttonRef={buttonRef} />}\r\n <button\r\n ref={buttonRef}\r\n onClick={handleClick}\r\n className={cn(\r\n \"relative px-4 py-2 rounded-md bg-primary text-primary-foreground\",\r\n showParticles && \"scale-95\",\r\n \"transition-transform duration-100\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n </>\r\n );\r\n}\r\n\r\nexport default ParticleButton;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useState,useRef}from'react';import {AnimatePresence,motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,Fragment,jsx}from'react/jsx-runtime';function l(...e){return twMerge(clsx(e))}function P({buttonRef:e}){let t=e.current?.getBoundingClientRect();if(!t)return null;let r=t.left+t.width/2,a=t.top+t.height/2;return jsx(AnimatePresence,{children:[...Array(6)].map((s,n)=>jsx(motion.div,{className:"fixed w-1 h-1 bg-black dark:bg-white rounded-full",style:{left:r,top:a},initial:{scale:0,x:0,y:0},animate:{scale:[0,1,0],x:[0,(n%2?1:-1)*(Math.random()*50+20)],y:[0,-Math.random()*50-20]},transition:{duration:.6,delay:n*.1,ease:"easeOut"}},n))})}function x({children:e,onClick:t,onSuccess:r,successDuration:a=1e3,className:s,...n}){let[c,u]=useState(false),i=useRef(null);return jsxs(Fragment,{children:[c&&jsx(P,{buttonRef:i}),jsx("button",{ref:i,onClick:m=>{u(true),t?.(m),r?.(),setTimeout(()=>u(false),a);},className:l("relative px-4 py-2 rounded-md bg-primary text-primary-foreground",c&&"scale-95","transition-transform duration-100",s),...n,children:e})]})}var H=x;export{x as ParticleButton,H as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/particle-button/index.tsx"],"names":["cn","inputs","twMerge","clsx","SuccessParticles","buttonRef","rect","centerX","centerY","jsx","AnimatePresence","_","i","motion","ParticleButton","children","onClick","onSuccess","successDuration","className","props","showParticles","setShowParticles","useState","useRef","jsxs","Fragment","e","particle_button_default"],"mappings":"sMAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCMA,SAASG,CAAAA,CAAiB,CAAE,SAAA,CAAAC,CAAU,CAAA,CAAsD,CAC1F,IAAMC,CAAAA,CAAOD,CAAAA,CAAU,OAAA,EAAS,qBAAA,EAAsB,CACtD,GAAI,CAACC,CAAAA,CAAM,OAAO,IAAA,CAElB,IAAMC,EAAUD,CAAAA,CAAK,IAAA,CAAOA,CAAAA,CAAK,KAAA,CAAQ,CAAA,CACnCE,CAAAA,CAAUF,EAAK,GAAA,CAAMA,CAAAA,CAAK,MAAA,CAAS,CAAA,CAEzC,OACEG,GAAAA,CAACC,gBAAA,CACE,QAAA,CAAA,CAAC,GAAG,KAAA,CAAM,CAAC,CAAC,CAAA,CAAE,GAAA,CAAI,CAACC,CAAAA,CAAGC,CAAAA,GACrBH,GAAAA,CAACI,MAAAA,CAAO,GAAA,CAAP,CAEC,SAAA,CAAU,mDAAA,CACV,KAAA,CAAO,CAAE,IAAA,CAAMN,CAAAA,CAAS,GAAA,CAAKC,CAAQ,CAAA,CACrC,OAAA,CAAS,CAAE,KAAA,CAAO,CAAA,CAAG,CAAA,CAAG,EAAG,CAAA,CAAG,CAAE,CAAA,CAChC,OAAA,CAAS,CAAE,KAAA,CAAO,CAAC,CAAA,CAAG,CAAA,CAAG,CAAC,CAAA,CAAG,CAAA,CAAG,CAAC,CAAA,CAAA,CAAII,EAAI,CAAA,CAAI,CAAA,CAAI,EAAA,GAAO,IAAA,CAAK,MAAA,EAAO,CAAI,GAAK,EAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAC,CAAA,CAAG,CAAC,KAAK,MAAA,EAAO,CAAI,EAAA,CAAK,EAAE,CAAE,CAAA,CACpH,UAAA,CAAY,CAAE,QAAA,CAAU,EAAA,CAAK,KAAA,CAAOA,CAAAA,CAAI,EAAA,CAAK,IAAA,CAAM,SAAU,CAAA,CAAA,CALxDA,CAMP,CACD,CAAA,CACH,CAEJ,CAEO,SAASE,CAAAA,CAAe,CAC7B,QAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,EACA,eAAA,CAAAC,CAAAA,CAAkB,GAAA,CAClB,SAAA,CAAAC,CAAAA,CACA,GAAGC,CACL,CAAA,CAAwB,CACtB,GAAM,CAACC,CAAAA,CAAeC,CAAgB,CAAA,CAAIC,SAAS,KAAK,CAAA,CAClDlB,CAAAA,CAAYmB,MAAAA,CAA0B,IAAI,CAAA,CAShD,OACEC,IAAAA,CAAAC,QAAAA,CAAA,CACG,QAAA,CAAA,CAAAL,CAAAA,EAAiBZ,GAAAA,CAACL,CAAAA,CAAA,CAAiB,SAAA,CAAWC,CAAAA,CAAW,CAAA,CAC1DI,GAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAKJ,CAAAA,CACL,OAAA,CAZesB,CAAAA,EAA2C,CAC9DL,CAAAA,CAAiB,IAAI,CAAA,CACrBN,CAAAA,GAAUW,CAAC,CAAA,CACXV,CAAAA,IAAY,CACZ,UAAA,CAAW,IAAMK,CAAAA,CAAiB,KAAK,CAAA,CAAGJ,CAAe,EAC3D,CAAA,CAQM,SAAA,CAAWlB,CAAAA,CACT,kEAAA,CACAqB,GAAiB,UAAA,CACjB,mCAAA,CACAF,CACF,CAAA,CACC,GAAGC,CAAAA,CAEH,QAAA,CAAAL,CAAAA,CACH,CAAA,CAAA,CACF,CAEJ,CAEA,IAAOa,CAAAA,CAAQd","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState, useRef } from \"react\";\r\nimport { motion, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface ParticleButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n onSuccess?: () => void;\r\n successDuration?: number;\r\n}\r\n\r\nfunction SuccessParticles({ buttonRef }: { buttonRef: React.RefObject<HTMLButtonElement> }) {\r\n const rect = buttonRef.current?.getBoundingClientRect();\r\n if (!rect) return null;\r\n\r\n const centerX = rect.left + rect.width / 2;\r\n const centerY = rect.top + rect.height / 2;\r\n\r\n return (\r\n <AnimatePresence>\r\n {[...Array(6)].map((_, i) => (\r\n <motion.div\r\n key={i}\r\n className=\"fixed w-1 h-1 bg-black dark:bg-white rounded-full\"\r\n style={{ left: centerX, top: centerY }}\r\n initial={{ scale: 0, x: 0, y: 0 }}\r\n animate={{ scale: [0, 1, 0], x: [0, (i % 2 ? 1 : -1) * (Math.random() * 50 + 20)], y: [0, -Math.random() * 50 - 20] }}\r\n transition={{ duration: 0.6, delay: i * 0.1, ease: \"easeOut\" }}\r\n />\r\n ))}\r\n </AnimatePresence>\r\n );\r\n}\r\n\r\nexport function ParticleButton({\r\n children,\r\n onClick,\r\n onSuccess,\r\n successDuration = 1000,\r\n className,\r\n ...props\r\n}: ParticleButtonProps) {\r\n const [showParticles, setShowParticles] = useState(false);\r\n const buttonRef = useRef<HTMLButtonElement>(null);\r\n\r\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\r\n setShowParticles(true);\r\n onClick?.(e);\r\n onSuccess?.();\r\n setTimeout(() => setShowParticles(false), successDuration);\r\n };\r\n\r\n return (\r\n <>\r\n {showParticles && <SuccessParticles buttonRef={buttonRef} />}\r\n <button\r\n ref={buttonRef}\r\n onClick={handleClick}\r\n className={cn(\r\n \"relative px-4 py-2 rounded-md bg-primary text-primary-foreground\",\r\n showParticles && \"scale-95\",\r\n \"transition-transform duration-100\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </button>\r\n </>\r\n );\r\n}\r\n\r\nexport default ParticleButton;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function i(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function l({text:e,className:s}){let a=Array.from(e);return jsxRuntime.jsx("div",{className:i("flex",s),style:{perspective:"500px"},children:a.map((t,r)=>jsxRuntime.jsx(framerMotion.motion.span,{className:"inline-block",style:{whiteSpace:t===" "?"pre":"normal"},initial:{rotateY:90,opacity:0},animate:{rotateY:0,opacity:1},transition:{delay:r*.04,duration:.5,type:"spring",stiffness:120},whileHover:{rotateY:180,transition:{duration:.3}},children:t===" "?"\xA0":t},`${t}-${r}`))})}var v=l;exports.PerspectiveText=l;exports.default=v;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/perspective-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","PerspectiveText","text","className","letters","jsx","letter","index","motion","perspective_text_default"],"mappings":"qNAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,CAAAA,CAAgB,CAAE,IAAA,CAAAC,CAAAA,CAAM,SAAA,CAAAC,CAAU,CAAA,CAAyB,CACzE,IAAMC,CAAAA,CAAU,KAAA,CAAM,IAAA,CAAKF,CAAI,CAAA,CAE/B,OACEG,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWR,CAAAA,CAAG,MAAA,CAAQM,CAAS,CAAA,CAAG,KAAA,CAAO,CAAE,WAAA,CAAa,OAAQ,CAAA,CAClE,QAAA,CAAAC,CAAAA,CAAQ,GAAA,CAAI,CAACE,CAAAA,CAAQC,CAAAA,GACpBF,cAAAA,CAACG,mBAAAA,CAAO,IAAA,CAAP,CAEC,SAAA,CAAU,cAAA,CACV,KAAA,CAAO,CAAE,UAAA,CAAYF,CAAAA,GAAW,GAAA,CAAM,KAAA,CAAQ,QAAS,CAAA,CACvD,OAAA,CAAS,CAAE,OAAA,CAAS,EAAA,CAAI,OAAA,CAAS,CAAE,CAAA,CACnC,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CAClC,UAAA,CAAY,CACV,KAAA,CAAOC,CAAAA,CAAQ,GAAA,CACf,QAAA,CAAU,EAAA,CACV,IAAA,CAAM,QAAA,CACN,SAAA,CAAW,GACb,CAAA,CACA,UAAA,CAAY,CAAE,OAAA,CAAS,GAAA,CAAK,UAAA,CAAY,CAAE,QAAA,CAAU,EAAI,CAAE,CAAA,CAEzD,QAAA,CAAAD,CAAAA,GAAW,GAAA,CAAM,MAAA,CAAWA,CAAAA,CAAAA,CAbxB,CAAA,EAAGA,CAAM,CAAA,CAAA,EAAIC,CAAK,CAAA,CAczB,CACD,CAAA,CACH,CAEJ,CAEA,IAAOE,CAAAA,CAAQR","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface PerspectiveTextProps {\r\n text: string;\r\n className?: string;\r\n}\r\n\r\nexport function PerspectiveText({ text, className }: PerspectiveTextProps) {\r\n const letters = Array.from(text);\r\n\r\n return (\r\n <div className={cn(\"flex\", className)} style={{ perspective: \"500px\" }}>\r\n {letters.map((letter, index) => (\r\n <motion.span\r\n key={`${letter}-${index}`}\r\n className=\"inline-block\"\r\n style={{ whiteSpace: letter === \" \" ? \"pre\" : \"normal\" }}\r\n initial={{ rotateY: 90, opacity: 0 }}\r\n animate={{ rotateY: 0, opacity: 1 }}\r\n transition={{\r\n delay: index * 0.04,\r\n duration: 0.5,\r\n type: \"spring\",\r\n stiffness: 120,\r\n }}\r\n whileHover={{ rotateY: 180, transition: { duration: 0.3 } }}\r\n >\r\n {letter === \" \" ? \"\\u00A0\" : letter}\r\n </motion.span>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default PerspectiveText;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function i(...e){return twMerge(clsx(e))}function l({text:e,className:s}){let a=Array.from(e);return jsx("div",{className:i("flex",s),style:{perspective:"500px"},children:a.map((t,r)=>jsx(motion.span,{className:"inline-block",style:{whiteSpace:t===" "?"pre":"normal"},initial:{rotateY:90,opacity:0},animate:{rotateY:0,opacity:1},transition:{delay:r*.04,duration:.5,type:"spring",stiffness:120},whileHover:{rotateY:180,transition:{duration:.3}},children:t===" "?"\xA0":t},`${t}-${r}`))})}var v=l;export{l as PerspectiveText,v as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/perspective-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","PerspectiveText","text","className","letters","jsx","letter","index","motion","perspective_text_default"],"mappings":"oIAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,CAAAA,CAAgB,CAAE,IAAA,CAAAC,CAAAA,CAAM,SAAA,CAAAC,CAAU,CAAA,CAAyB,CACzE,IAAMC,CAAAA,CAAU,KAAA,CAAM,IAAA,CAAKF,CAAI,CAAA,CAE/B,OACEG,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWR,CAAAA,CAAG,MAAA,CAAQM,CAAS,CAAA,CAAG,KAAA,CAAO,CAAE,WAAA,CAAa,OAAQ,CAAA,CAClE,QAAA,CAAAC,CAAAA,CAAQ,GAAA,CAAI,CAACE,CAAAA,CAAQC,CAAAA,GACpBF,GAAAA,CAACG,MAAAA,CAAO,IAAA,CAAP,CAEC,SAAA,CAAU,cAAA,CACV,KAAA,CAAO,CAAE,UAAA,CAAYF,CAAAA,GAAW,GAAA,CAAM,KAAA,CAAQ,QAAS,CAAA,CACvD,OAAA,CAAS,CAAE,OAAA,CAAS,EAAA,CAAI,OAAA,CAAS,CAAE,CAAA,CACnC,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CAClC,UAAA,CAAY,CACV,KAAA,CAAOC,CAAAA,CAAQ,GAAA,CACf,QAAA,CAAU,EAAA,CACV,IAAA,CAAM,QAAA,CACN,SAAA,CAAW,GACb,CAAA,CACA,UAAA,CAAY,CAAE,OAAA,CAAS,GAAA,CAAK,UAAA,CAAY,CAAE,QAAA,CAAU,EAAI,CAAE,CAAA,CAEzD,QAAA,CAAAD,CAAAA,GAAW,GAAA,CAAM,MAAA,CAAWA,CAAAA,CAAAA,CAbxB,CAAA,EAAGA,CAAM,CAAA,CAAA,EAAIC,CAAK,CAAA,CAczB,CACD,CAAA,CACH,CAEJ,CAEA,IAAOE,CAAAA,CAAQR","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface PerspectiveTextProps {\r\n text: string;\r\n className?: string;\r\n}\r\n\r\nexport function PerspectiveText({ text, className }: PerspectiveTextProps) {\r\n const letters = Array.from(text);\r\n\r\n return (\r\n <div className={cn(\"flex\", className)} style={{ perspective: \"500px\" }}>\r\n {letters.map((letter, index) => (\r\n <motion.span\r\n key={`${letter}-${index}`}\r\n className=\"inline-block\"\r\n style={{ whiteSpace: letter === \" \" ? \"pre\" : \"normal\" }}\r\n initial={{ rotateY: 90, opacity: 0 }}\r\n animate={{ rotateY: 0, opacity: 1 }}\r\n transition={{\r\n delay: index * 0.04,\r\n duration: 0.5,\r\n type: \"spring\",\r\n stiffness: 120,\r\n }}\r\n whileHover={{ rotateY: 180, transition: { duration: 0.3 } }}\r\n >\r\n {letter === \" \" ? \"\\u00A0\" : letter}\r\n </motion.span>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default PerspectiveText;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function i(...l){return tailwindMerge.twMerge(clsx.clsx(l))}function d({options:l,value:a,onChange:t,name:f,className:o,direction:n="vertical"}){return jsxRuntime.jsx("div",{className:i("flex gap-3",n==="vertical"?"flex-col":"flex-row flex-wrap",o),children:l.map(e=>jsxRuntime.jsxs("label",{className:"inline-flex items-center gap-2 cursor-pointer",children:[jsxRuntime.jsx("button",{type:"button",role:"radio","aria-checked":a===e.value,onClick:()=>t?.(e.value),className:i("w-5 h-5 rounded-full border-2 flex items-center justify-center transition-colors",a===e.value?"border-blue-500":"border-zinc-300 dark:border-zinc-600"),children:jsxRuntime.jsx(framerMotion.motion.div,{initial:false,animate:{scale:a===e.value?1:0,opacity:a===e.value?1:0},transition:{duration:.15},className:"w-2.5 h-2.5 rounded-full bg-blue-500"})}),jsxRuntime.jsx("span",{className:"text-sm",children:e.label})]},e.value))})}var N=d;exports.RadioGroup=d;exports.default=N;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/radio/index.tsx"],"names":["cn","inputs","twMerge","clsx","RadioGroup","options","value","onChange","name","className","direction","jsx","option","jsxs","motion","radio_default"],"mappings":"qNAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCcO,SAASG,CAAAA,CAAW,CACzB,OAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,IAAA,CAAAC,CAAAA,CACA,UAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CAAY,UACd,CAAA,CAAoB,CAClB,OACEC,cAAAA,CAAC,OACC,SAAA,CAAWX,CAAAA,CACT,YAAA,CACAU,CAAAA,GAAc,UAAA,CAAa,UAAA,CAAa,oBAAA,CACxCD,CACF,EAEC,QAAA,CAAAJ,CAAAA,CAAQ,GAAA,CAAKO,CAAAA,EACZC,eAAAA,CAAC,OAAA,CAAA,CAEC,SAAA,CAAU,+CAAA,CAEV,UAAAF,cAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,IAAA,CAAK,OAAA,CACL,cAAA,CAAcL,CAAAA,GAAUM,CAAAA,CAAO,KAAA,CAC/B,OAAA,CAAS,IAAML,CAAAA,GAAWK,CAAAA,CAAO,KAAK,CAAA,CACtC,UAAWZ,CAAAA,CACT,kFAAA,CACAM,CAAAA,GAAUM,CAAAA,CAAO,KAAA,CACb,iBAAA,CACA,sCACN,CAAA,CAEA,SAAAD,cAAAA,CAACG,mBAAAA,CAAO,GAAA,CAAP,CACC,OAAA,CAAS,KAAA,CACT,OAAA,CAAS,CACP,MAAOR,CAAAA,GAAUM,CAAAA,CAAO,KAAA,CAAQ,CAAA,CAAI,CAAA,CACpC,OAAA,CAASN,CAAAA,GAAUM,CAAAA,CAAO,MAAQ,CAAA,CAAI,CACxC,CAAA,CACA,UAAA,CAAY,CAAE,QAAA,CAAU,GAAK,CAAA,CAC7B,UAAU,sCAAA,CACZ,CAAA,CACF,CAAA,CACAD,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,SAAA,CAAW,QAAA,CAAAC,EAAO,KAAA,CAAM,CAAA,CAAA,CAAA,CAzBnCA,CAAAA,CAAO,KA0Bd,CACD,CAAA,CACH,CAEJ,KAEOG,CAAAA,CAAQX","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface RadioOption {\r\n value: string;\r\n label: string;\r\n}\r\n\r\ninterface RadioGroupProps {\r\n options: RadioOption[];\r\n value?: string;\r\n onChange?: (value: string) => void;\r\n name: string;\r\n className?: string;\r\n direction?: \"horizontal\" | \"vertical\";\r\n}\r\n\r\nexport function RadioGroup({\r\n options,\r\n value,\r\n onChange,\r\n name,\r\n className,\r\n direction = \"vertical\",\r\n}: RadioGroupProps) {\r\n return (\r\n <div\r\n className={cn(\r\n \"flex gap-3\",\r\n direction === \"vertical\" ? \"flex-col\" : \"flex-row flex-wrap\",\r\n className\r\n )}\r\n >\r\n {options.map((option) => (\r\n <label\r\n key={option.value}\r\n className=\"inline-flex items-center gap-2 cursor-pointer\"\r\n >\r\n <button\r\n type=\"button\"\r\n role=\"radio\"\r\n aria-checked={value === option.value}\r\n onClick={() => onChange?.(option.value)}\r\n className={cn(\r\n \"w-5 h-5 rounded-full border-2 flex items-center justify-center transition-colors\",\r\n value === option.value\r\n ? \"border-blue-500\"\r\n : \"border-zinc-300 dark:border-zinc-600\"\r\n )}\r\n >\r\n <motion.div\r\n initial={false}\r\n animate={{\r\n scale: value === option.value ? 1 : 0,\r\n opacity: value === option.value ? 1 : 0,\r\n }}\r\n transition={{ duration: 0.15 }}\r\n className=\"w-2.5 h-2.5 rounded-full bg-blue-500\"\r\n />\r\n </button>\r\n <span className=\"text-sm\">{option.label}</span>\r\n </label>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default RadioGroup;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx,jsxs}from'react/jsx-runtime';function i(...l){return twMerge(clsx(l))}function d({options:l,value:a,onChange:t,name:f,className:o,direction:n="vertical"}){return jsx("div",{className:i("flex gap-3",n==="vertical"?"flex-col":"flex-row flex-wrap",o),children:l.map(e=>jsxs("label",{className:"inline-flex items-center gap-2 cursor-pointer",children:[jsx("button",{type:"button",role:"radio","aria-checked":a===e.value,onClick:()=>t?.(e.value),className:i("w-5 h-5 rounded-full border-2 flex items-center justify-center transition-colors",a===e.value?"border-blue-500":"border-zinc-300 dark:border-zinc-600"),children:jsx(motion.div,{initial:false,animate:{scale:a===e.value?1:0,opacity:a===e.value?1:0},transition:{duration:.15},className:"w-2.5 h-2.5 rounded-full bg-blue-500"})}),jsx("span",{className:"text-sm",children:e.label})]},e.value))})}var N=d;export{d as RadioGroup,N as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/radio/index.tsx"],"names":["cn","inputs","twMerge","clsx","RadioGroup","options","value","onChange","name","className","direction","jsx","option","jsxs","motion","radio_default"],"mappings":"yIAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCcO,SAASG,CAAAA,CAAW,CACzB,OAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,IAAA,CAAAC,CAAAA,CACA,UAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CAAY,UACd,CAAA,CAAoB,CAClB,OACEC,GAAAA,CAAC,OACC,SAAA,CAAWX,CAAAA,CACT,YAAA,CACAU,CAAAA,GAAc,UAAA,CAAa,UAAA,CAAa,oBAAA,CACxCD,CACF,EAEC,QAAA,CAAAJ,CAAAA,CAAQ,GAAA,CAAKO,CAAAA,EACZC,IAAAA,CAAC,OAAA,CAAA,CAEC,SAAA,CAAU,+CAAA,CAEV,UAAAF,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,IAAA,CAAK,OAAA,CACL,cAAA,CAAcL,CAAAA,GAAUM,CAAAA,CAAO,KAAA,CAC/B,OAAA,CAAS,IAAML,CAAAA,GAAWK,CAAAA,CAAO,KAAK,CAAA,CACtC,UAAWZ,CAAAA,CACT,kFAAA,CACAM,CAAAA,GAAUM,CAAAA,CAAO,KAAA,CACb,iBAAA,CACA,sCACN,CAAA,CAEA,SAAAD,GAAAA,CAACG,MAAAA,CAAO,GAAA,CAAP,CACC,OAAA,CAAS,KAAA,CACT,OAAA,CAAS,CACP,MAAOR,CAAAA,GAAUM,CAAAA,CAAO,KAAA,CAAQ,CAAA,CAAI,CAAA,CACpC,OAAA,CAASN,CAAAA,GAAUM,CAAAA,CAAO,MAAQ,CAAA,CAAI,CACxC,CAAA,CACA,UAAA,CAAY,CAAE,QAAA,CAAU,GAAK,CAAA,CAC7B,UAAU,sCAAA,CACZ,CAAA,CACF,CAAA,CACAD,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,SAAA,CAAW,QAAA,CAAAC,EAAO,KAAA,CAAM,CAAA,CAAA,CAAA,CAzBnCA,CAAAA,CAAO,KA0Bd,CACD,CAAA,CACH,CAEJ,KAEOG,CAAAA,CAAQX","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface RadioOption {\r\n value: string;\r\n label: string;\r\n}\r\n\r\ninterface RadioGroupProps {\r\n options: RadioOption[];\r\n value?: string;\r\n onChange?: (value: string) => void;\r\n name: string;\r\n className?: string;\r\n direction?: \"horizontal\" | \"vertical\";\r\n}\r\n\r\nexport function RadioGroup({\r\n options,\r\n value,\r\n onChange,\r\n name,\r\n className,\r\n direction = \"vertical\",\r\n}: RadioGroupProps) {\r\n return (\r\n <div\r\n className={cn(\r\n \"flex gap-3\",\r\n direction === \"vertical\" ? \"flex-col\" : \"flex-row flex-wrap\",\r\n className\r\n )}\r\n >\r\n {options.map((option) => (\r\n <label\r\n key={option.value}\r\n className=\"inline-flex items-center gap-2 cursor-pointer\"\r\n >\r\n <button\r\n type=\"button\"\r\n role=\"radio\"\r\n aria-checked={value === option.value}\r\n onClick={() => onChange?.(option.value)}\r\n className={cn(\r\n \"w-5 h-5 rounded-full border-2 flex items-center justify-center transition-colors\",\r\n value === option.value\r\n ? \"border-blue-500\"\r\n : \"border-zinc-300 dark:border-zinc-600\"\r\n )}\r\n >\r\n <motion.div\r\n initial={false}\r\n animate={{\r\n scale: value === option.value ? 1 : 0,\r\n opacity: value === option.value ? 1 : 0,\r\n }}\r\n transition={{ duration: 0.15 }}\r\n className=\"w-2.5 h-2.5 rounded-full bg-blue-500\"\r\n />\r\n </button>\r\n <span className=\"text-sm\">{option.label}</span>\r\n </label>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default RadioGroup;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function n(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function f({text:e,className:o,stagger:s=.04}){let r=Array.from(e),l={hidden:{opacity:0},visible:{opacity:1,transition:{staggerChildren:s,delayChildren:.02}}},p={hidden:{opacity:0,y:20},visible:{opacity:1,y:0,transition:{type:"spring",damping:12,stiffness:100}}};return jsxRuntime.jsx(framerMotion.motion.div,{className:n("flex overflow-hidden",o),variants:l,initial:"hidden",animate:"visible",children:r.map((i,c)=>jsxRuntime.jsx(framerMotion.motion.span,{variants:p,className:"inline-block",style:{whiteSpace:i===" "?"pre":"normal"},children:i===" "?"\xA0":i},`${i}-${c}`))})}var x=f;exports.RevealText=f;exports.default=x;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/reveal-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","RevealText","text","className","stagger","letters","container","child","jsx","motion","letter","index","reveal_text_default"],"mappings":"qNAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCMO,SAASG,CAAAA,CAAW,CAAE,IAAA,CAAAC,CAAAA,CAAM,SAAA,CAAAC,EAAW,OAAA,CAAAC,CAAAA,CAAU,GAAK,CAAA,CAAoB,CAC/E,IAAMC,CAAAA,CAAU,KAAA,CAAM,KAAKH,CAAI,CAAA,CAEzBI,CAAAA,CAAY,CAChB,MAAA,CAAQ,CAAE,OAAA,CAAS,CAAE,EACrB,OAAA,CAAS,CACP,OAAA,CAAS,CAAA,CACT,UAAA,CAAY,CAAE,eAAA,CAAiBF,CAAAA,CAAS,cAAe,GAAK,CAC9D,CACF,CAAA,CAEMG,EAAQ,CACZ,MAAA,CAAQ,CAAE,OAAA,CAAS,EAAG,CAAA,CAAG,EAAG,CAAA,CAC5B,OAAA,CAAS,CACP,OAAA,CAAS,CAAA,CACT,CAAA,CAAG,EACH,UAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,OAAA,CAAS,EAAA,CAAI,SAAA,CAAW,GAAI,CAC5D,CACF,CAAA,CAEA,OACEC,cAAAA,CAACC,mBAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAWZ,EAAG,sBAAA,CAAwBM,CAAS,CAAA,CAC/C,QAAA,CAAUG,CAAAA,CACV,OAAA,CAAQ,QAAA,CACR,OAAA,CAAQ,UAEP,QAAA,CAAAD,CAAAA,CAAQ,GAAA,CAAI,CAACK,CAAAA,CAAQC,CAAAA,GACpBH,cAAAA,CAACC,mBAAAA,CAAO,KAAP,CAEC,QAAA,CAAUF,CAAAA,CACV,SAAA,CAAU,cAAA,CACV,KAAA,CAAO,CAAE,UAAA,CAAYG,IAAW,GAAA,CAAM,KAAA,CAAQ,QAAS,CAAA,CAEtD,QAAA,CAAAA,CAAAA,GAAW,GAAA,CAAM,MAAA,CAAWA,GALxB,CAAA,EAAGA,CAAM,CAAA,CAAA,EAAIC,CAAK,EAMzB,CACD,CAAA,CACH,CAEJ,KAEOC,CAAAA,CAAQX","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface RevealTextProps {\r\n text: string;\r\n className?: string;\r\n stagger?: number;\r\n}\r\n\r\nexport function RevealText({ text, className, stagger = 0.04 }: RevealTextProps) {\r\n const letters = Array.from(text);\r\n\r\n const container = {\r\n hidden: { opacity: 0 },\r\n visible: {\r\n opacity: 1,\r\n transition: { staggerChildren: stagger, delayChildren: 0.02 },\r\n },\r\n };\r\n\r\n const child = {\r\n hidden: { opacity: 0, y: 20 },\r\n visible: {\r\n opacity: 1,\r\n y: 0,\r\n transition: { type: \"spring\", damping: 12, stiffness: 100 },\r\n },\r\n };\r\n\r\n return (\r\n <motion.div\r\n className={cn(\"flex overflow-hidden\", className)}\r\n variants={container}\r\n initial=\"hidden\"\r\n animate=\"visible\"\r\n >\r\n {letters.map((letter, index) => (\r\n <motion.span\r\n key={`${letter}-${index}`}\r\n variants={child}\r\n className=\"inline-block\"\r\n style={{ whiteSpace: letter === \" \" ? \"pre\" : \"normal\" }}\r\n >\r\n {letter === \" \" ? \"\\u00A0\" : letter}\r\n </motion.span>\r\n ))}\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport default RevealText;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function n(...e){return twMerge(clsx(e))}function f({text:e,className:o,stagger:s=.04}){let r=Array.from(e),l={hidden:{opacity:0},visible:{opacity:1,transition:{staggerChildren:s,delayChildren:.02}}},p={hidden:{opacity:0,y:20},visible:{opacity:1,y:0,transition:{type:"spring",damping:12,stiffness:100}}};return jsx(motion.div,{className:n("flex overflow-hidden",o),variants:l,initial:"hidden",animate:"visible",children:r.map((i,c)=>jsx(motion.span,{variants:p,className:"inline-block",style:{whiteSpace:i===" "?"pre":"normal"},children:i===" "?"\xA0":i},`${i}-${c}`))})}var x=f;export{f as RevealText,x as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/reveal-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","RevealText","text","className","stagger","letters","container","child","jsx","motion","letter","index","reveal_text_default"],"mappings":"oIAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCMO,SAASG,CAAAA,CAAW,CAAE,IAAA,CAAAC,CAAAA,CAAM,SAAA,CAAAC,EAAW,OAAA,CAAAC,CAAAA,CAAU,GAAK,CAAA,CAAoB,CAC/E,IAAMC,CAAAA,CAAU,KAAA,CAAM,KAAKH,CAAI,CAAA,CAEzBI,CAAAA,CAAY,CAChB,MAAA,CAAQ,CAAE,OAAA,CAAS,CAAE,EACrB,OAAA,CAAS,CACP,OAAA,CAAS,CAAA,CACT,UAAA,CAAY,CAAE,eAAA,CAAiBF,CAAAA,CAAS,cAAe,GAAK,CAC9D,CACF,CAAA,CAEMG,EAAQ,CACZ,MAAA,CAAQ,CAAE,OAAA,CAAS,EAAG,CAAA,CAAG,EAAG,CAAA,CAC5B,OAAA,CAAS,CACP,OAAA,CAAS,CAAA,CACT,CAAA,CAAG,EACH,UAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,OAAA,CAAS,EAAA,CAAI,SAAA,CAAW,GAAI,CAC5D,CACF,CAAA,CAEA,OACEC,GAAAA,CAACC,MAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAWZ,EAAG,sBAAA,CAAwBM,CAAS,CAAA,CAC/C,QAAA,CAAUG,CAAAA,CACV,OAAA,CAAQ,QAAA,CACR,OAAA,CAAQ,UAEP,QAAA,CAAAD,CAAAA,CAAQ,GAAA,CAAI,CAACK,CAAAA,CAAQC,CAAAA,GACpBH,GAAAA,CAACC,MAAAA,CAAO,KAAP,CAEC,QAAA,CAAUF,CAAAA,CACV,SAAA,CAAU,cAAA,CACV,KAAA,CAAO,CAAE,UAAA,CAAYG,IAAW,GAAA,CAAM,KAAA,CAAQ,QAAS,CAAA,CAEtD,QAAA,CAAAA,CAAAA,GAAW,GAAA,CAAM,MAAA,CAAWA,GALxB,CAAA,EAAGA,CAAM,CAAA,CAAA,EAAIC,CAAK,EAMzB,CACD,CAAA,CACH,CAEJ,KAEOC,CAAAA,CAAQX","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface RevealTextProps {\r\n text: string;\r\n className?: string;\r\n stagger?: number;\r\n}\r\n\r\nexport function RevealText({ text, className, stagger = 0.04 }: RevealTextProps) {\r\n const letters = Array.from(text);\r\n\r\n const container = {\r\n hidden: { opacity: 0 },\r\n visible: {\r\n opacity: 1,\r\n transition: { staggerChildren: stagger, delayChildren: 0.02 },\r\n },\r\n };\r\n\r\n const child = {\r\n hidden: { opacity: 0, y: 20 },\r\n visible: {\r\n opacity: 1,\r\n y: 0,\r\n transition: { type: \"spring\", damping: 12, stiffness: 100 },\r\n },\r\n };\r\n\r\n return (\r\n <motion.div\r\n className={cn(\"flex overflow-hidden\", className)}\r\n variants={container}\r\n initial=\"hidden\"\r\n animate=\"visible\"\r\n >\r\n {letters.map((letter, index) => (\r\n <motion.span\r\n key={`${letter}-${index}`}\r\n variants={child}\r\n className=\"inline-block\"\r\n style={{ whiteSpace: letter === \" \" ? \"pre\" : \"normal\" }}\r\n >\r\n {letter === \" \" ? \"\\u00A0\" : letter}\r\n </motion.span>\r\n ))}\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport default RevealText;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function n(...o){return tailwindMerge.twMerge(clsx.clsx(o))}function h({options:o,value:s,onChange:m,placeholder:f="Select...",className:b,label:c}){let[r,i]=react.useState(false),l=react.useRef(null),u=o.find(e=>e.value===s);return react.useEffect(()=>{let e=p=>{l.current&&!l.current.contains(p.target)&&i(false);};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]),jsxRuntime.jsxs("div",{className:"w-full",children:[c&&jsxRuntime.jsx("label",{className:"block text-sm font-medium text-zinc-700 dark:text-zinc-300 mb-1",children:c}),jsxRuntime.jsxs("div",{ref:l,className:n("relative",b),children:[jsxRuntime.jsxs("button",{type:"button",onClick:()=>i(!r),className:n("w-full px-4 py-2 rounded-lg text-left","bg-white dark:bg-zinc-900","border border-zinc-300 dark:border-zinc-700","flex items-center justify-between","focus:outline-none focus:ring-2 focus:ring-blue-500","transition-all duration-200"),children:[jsxRuntime.jsx("span",{className:u?"":"text-zinc-400",children:u?.label||f}),jsxRuntime.jsx(framerMotion.motion.svg,{animate:{rotate:r?180:0},transition:{duration:.2},className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]}),jsxRuntime.jsx(framerMotion.AnimatePresence,{children:r&&jsxRuntime.jsx(framerMotion.motion.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:.15},className:n("absolute z-50 w-full mt-1 rounded-lg overflow-hidden","bg-white dark:bg-zinc-900","border border-zinc-300 dark:border-zinc-700","shadow-lg"),children:o.map(e=>jsxRuntime.jsx("button",{type:"button",onClick:()=>{m?.(e.value),i(false);},className:n("w-full px-4 py-2 text-left","hover:bg-zinc-100 dark:hover:bg-zinc-800","transition-colors",s===e.value&&"bg-blue-50 dark:bg-blue-900/20 text-blue-600"),children:e.label},e.value))})})]})]})}var L=h;exports.Select=h;exports.default=L;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/select/index.tsx"],"names":["cn","inputs","twMerge","clsx","Select","options","value","onChange","placeholder","className","label","isOpen","setIsOpen","useState","ref","useRef","selectedOption","opt","useEffect","handleClickOutside","e","jsxs","jsx","motion","AnimatePresence","option","select_default"],"mappings":"4OAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCeO,SAASG,CAAAA,CAAO,CAAE,QAAAC,CAAAA,CAAS,KAAA,CAAAC,CAAAA,CAAO,QAAA,CAAAC,CAAAA,CAAU,WAAA,CAAAC,CAAAA,CAAc,WAAA,CAAa,UAAAC,CAAAA,CAAW,KAAA,CAAAC,CAAM,CAAA,CAAgB,CAC7G,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIC,cAAAA,CAAS,KAAK,CAAA,CACpCC,CAAAA,CAAMC,YAAAA,CAAuB,IAAI,CAAA,CAEjCC,EAAiBX,CAAAA,CAAQ,IAAA,CAAMY,CAAAA,EAAQA,CAAAA,CAAI,KAAA,GAAUX,CAAK,CAAA,CAEhE,OAAAY,gBAAU,IAAM,CACd,IAAMC,CAAAA,CAAsBC,CAAAA,EAAkB,CACxCN,CAAAA,CAAI,OAAA,EAAW,CAACA,CAAAA,CAAI,OAAA,CAAQ,QAAA,CAASM,CAAAA,CAAE,MAAc,CAAA,EACvDR,CAAAA,CAAU,KAAK,EAEnB,CAAA,CACA,OAAA,QAAA,CAAS,gBAAA,CAAiB,WAAA,CAAaO,CAAkB,CAAA,CAClD,IAAM,QAAA,CAAS,oBAAoB,WAAA,CAAaA,CAAkB,CAC3E,CAAA,CAAG,EAAE,CAAA,CAGHE,eAAAA,CAAC,OAAI,SAAA,CAAU,QAAA,CACZ,QAAA,CAAA,CAAAX,CAAAA,EACCY,cAAAA,CAAC,OAAA,CAAA,CAAM,SAAA,CAAU,iEAAA,CACd,SAAAZ,CAAAA,CACH,CAAA,CAEFW,eAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKP,CAAAA,CAAK,SAAA,CAAWd,CAAAA,CAAG,WAAYS,CAAS,CAAA,CAChD,QAAA,CAAA,CAAAY,eAAAA,CAAC,UACC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS,IAAMT,EAAU,CAACD,CAAM,CAAA,CAChC,SAAA,CAAWX,CAAAA,CACT,uCAAA,CACA,2BAAA,CACA,6CAAA,CACA,oCACA,qDAAA,CACA,6BACF,CAAA,CAEA,QAAA,CAAA,CAAAsB,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAWN,CAAAA,CAAiB,GAAK,eAAA,CACpC,QAAA,CAAAA,CAAAA,EAAgB,KAAA,EAASR,CAAAA,CAC5B,CAAA,CACAc,cAAAA,CAACC,mBAAAA,CAAO,IAAP,CACC,OAAA,CAAS,CAAE,MAAA,CAAQZ,CAAAA,CAAS,GAAA,CAAM,CAAE,CAAA,CACpC,WAAY,CAAE,QAAA,CAAU,EAAI,CAAA,CAC5B,SAAA,CAAU,SAAA,CACV,IAAA,CAAK,MAAA,CACL,OAAO,cAAA,CACP,OAAA,CAAQ,WAAA,CAER,QAAA,CAAAW,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,gBAAA,CAAiB,CAAA,CACxF,CAAA,CAAA,CACF,CAAA,CACAA,eAACE,4BAAAA,CAAA,CACE,QAAA,CAAAb,CAAAA,EACCW,eAACC,mBAAAA,CAAO,GAAA,CAAP,CACC,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,GAAI,CAAA,CAC9B,OAAA,CAAS,CAAE,OAAA,CAAS,EAAG,CAAA,CAAG,CAAE,CAAA,CAC5B,IAAA,CAAM,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,GAAI,CAAA,CAC3B,UAAA,CAAY,CAAE,QAAA,CAAU,GAAK,CAAA,CAC7B,SAAA,CAAWvB,CAAAA,CACT,uDACA,2BAAA,CACA,6CAAA,CACA,WACF,CAAA,CAEC,QAAA,CAAAK,CAAAA,CAAQ,GAAA,CAAKoB,CAAAA,EACZH,eAAC,QAAA,CAAA,CAEC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS,IAAM,CACbf,CAAAA,GAAWkB,CAAAA,CAAO,KAAK,CAAA,CACvBb,CAAAA,CAAU,KAAK,EACjB,CAAA,CACA,SAAA,CAAWZ,CAAAA,CACT,4BAAA,CACA,2CACA,mBAAA,CACAM,CAAAA,GAAUmB,CAAAA,CAAO,KAAA,EAAS,8CAC5B,CAAA,CAEC,QAAA,CAAAA,CAAAA,CAAO,OAbHA,CAAAA,CAAO,KAcd,CACD,CAAA,CACH,EAEJ,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,KAEOC,CAAAA,CAAQtB","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState, useRef, useEffect } from \"react\";\r\nimport { motion, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface SelectOption {\r\n value: string;\r\n label: string;\r\n}\r\n\r\ninterface SelectProps {\r\n options: SelectOption[];\r\n value?: string;\r\n onChange?: (value: string) => void;\r\n placeholder?: string;\r\n className?: string;\r\n label?: string;\r\n}\r\n\r\nexport function Select({ options, value, onChange, placeholder = \"Select...\", className, label }: SelectProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const ref = useRef<HTMLDivElement>(null);\r\n\r\n const selectedOption = options.find((opt) => opt.value === value);\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (e: MouseEvent) => {\r\n if (ref.current && !ref.current.contains(e.target as Node)) {\r\n setIsOpen(false);\r\n }\r\n };\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\r\n }, []);\r\n\r\n return (\r\n <div className=\"w-full\">\r\n {label && (\r\n <label className=\"block text-sm font-medium text-zinc-700 dark:text-zinc-300 mb-1\">\r\n {label}\r\n </label>\r\n )}\r\n <div ref={ref} className={cn(\"relative\", className)}>\r\n <button\r\n type=\"button\"\r\n onClick={() => setIsOpen(!isOpen)}\r\n className={cn(\r\n \"w-full px-4 py-2 rounded-lg text-left\",\r\n \"bg-white dark:bg-zinc-900\",\r\n \"border border-zinc-300 dark:border-zinc-700\",\r\n \"flex items-center justify-between\",\r\n \"focus:outline-none focus:ring-2 focus:ring-blue-500\",\r\n \"transition-all duration-200\"\r\n )}\r\n >\r\n <span className={selectedOption ? \"\" : \"text-zinc-400\"}>\r\n {selectedOption?.label || placeholder}\r\n </span>\r\n <motion.svg\r\n animate={{ rotate: isOpen ? 180 : 0 }}\r\n transition={{ duration: 0.2 }}\r\n className=\"w-5 h-5\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\r\n </motion.svg>\r\n </button>\r\n <AnimatePresence>\r\n {isOpen && (\r\n <motion.div\r\n initial={{ opacity: 0, y: -10 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: -10 }}\r\n transition={{ duration: 0.15 }}\r\n className={cn(\r\n \"absolute z-50 w-full mt-1 rounded-lg overflow-hidden\",\r\n \"bg-white dark:bg-zinc-900\",\r\n \"border border-zinc-300 dark:border-zinc-700\",\r\n \"shadow-lg\"\r\n )}\r\n >\r\n {options.map((option) => (\r\n <button\r\n key={option.value}\r\n type=\"button\"\r\n onClick={() => {\r\n onChange?.(option.value);\r\n setIsOpen(false);\r\n }}\r\n className={cn(\r\n \"w-full px-4 py-2 text-left\",\r\n \"hover:bg-zinc-100 dark:hover:bg-zinc-800\",\r\n \"transition-colors\",\r\n value === option.value && \"bg-blue-50 dark:bg-blue-900/20 text-blue-600\"\r\n )}\r\n >\r\n {option.label}\r\n </button>\r\n ))}\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Select;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useState,useRef,useEffect}from'react';import {motion,AnimatePresence}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function n(...o){return twMerge(clsx(o))}function h({options:o,value:s,onChange:m,placeholder:f="Select...",className:b,label:c}){let[r,i]=useState(false),l=useRef(null),u=o.find(e=>e.value===s);return useEffect(()=>{let e=p=>{l.current&&!l.current.contains(p.target)&&i(false);};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]),jsxs("div",{className:"w-full",children:[c&&jsx("label",{className:"block text-sm font-medium text-zinc-700 dark:text-zinc-300 mb-1",children:c}),jsxs("div",{ref:l,className:n("relative",b),children:[jsxs("button",{type:"button",onClick:()=>i(!r),className:n("w-full px-4 py-2 rounded-lg text-left","bg-white dark:bg-zinc-900","border border-zinc-300 dark:border-zinc-700","flex items-center justify-between","focus:outline-none focus:ring-2 focus:ring-blue-500","transition-all duration-200"),children:[jsx("span",{className:u?"":"text-zinc-400",children:u?.label||f}),jsx(motion.svg,{animate:{rotate:r?180:0},transition:{duration:.2},className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]}),jsx(AnimatePresence,{children:r&&jsx(motion.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:.15},className:n("absolute z-50 w-full mt-1 rounded-lg overflow-hidden","bg-white dark:bg-zinc-900","border border-zinc-300 dark:border-zinc-700","shadow-lg"),children:o.map(e=>jsx("button",{type:"button",onClick:()=>{m?.(e.value),i(false);},className:n("w-full px-4 py-2 text-left","hover:bg-zinc-100 dark:hover:bg-zinc-800","transition-colors",s===e.value&&"bg-blue-50 dark:bg-blue-900/20 text-blue-600"),children:e.label},e.value))})})]})]})}var L=h;export{h as Select,L as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/select/index.tsx"],"names":["cn","inputs","twMerge","clsx","Select","options","value","onChange","placeholder","className","label","isOpen","setIsOpen","useState","ref","useRef","selectedOption","opt","useEffect","handleClickOutside","e","jsxs","jsx","motion","AnimatePresence","option","select_default"],"mappings":"uMAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCeO,SAASG,CAAAA,CAAO,CAAE,QAAAC,CAAAA,CAAS,KAAA,CAAAC,CAAAA,CAAO,QAAA,CAAAC,CAAAA,CAAU,WAAA,CAAAC,CAAAA,CAAc,WAAA,CAAa,UAAAC,CAAAA,CAAW,KAAA,CAAAC,CAAM,CAAA,CAAgB,CAC7G,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIC,QAAAA,CAAS,KAAK,CAAA,CACpCC,CAAAA,CAAMC,MAAAA,CAAuB,IAAI,CAAA,CAEjCC,EAAiBX,CAAAA,CAAQ,IAAA,CAAMY,CAAAA,EAAQA,CAAAA,CAAI,KAAA,GAAUX,CAAK,CAAA,CAEhE,OAAAY,UAAU,IAAM,CACd,IAAMC,CAAAA,CAAsBC,CAAAA,EAAkB,CACxCN,CAAAA,CAAI,OAAA,EAAW,CAACA,CAAAA,CAAI,OAAA,CAAQ,QAAA,CAASM,CAAAA,CAAE,MAAc,CAAA,EACvDR,CAAAA,CAAU,KAAK,EAEnB,CAAA,CACA,OAAA,QAAA,CAAS,gBAAA,CAAiB,WAAA,CAAaO,CAAkB,CAAA,CAClD,IAAM,QAAA,CAAS,oBAAoB,WAAA,CAAaA,CAAkB,CAC3E,CAAA,CAAG,EAAE,CAAA,CAGHE,IAAAA,CAAC,OAAI,SAAA,CAAU,QAAA,CACZ,QAAA,CAAA,CAAAX,CAAAA,EACCY,GAAAA,CAAC,OAAA,CAAA,CAAM,SAAA,CAAU,iEAAA,CACd,SAAAZ,CAAAA,CACH,CAAA,CAEFW,IAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKP,CAAAA,CAAK,SAAA,CAAWd,CAAAA,CAAG,WAAYS,CAAS,CAAA,CAChD,QAAA,CAAA,CAAAY,IAAAA,CAAC,UACC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS,IAAMT,EAAU,CAACD,CAAM,CAAA,CAChC,SAAA,CAAWX,CAAAA,CACT,uCAAA,CACA,2BAAA,CACA,6CAAA,CACA,oCACA,qDAAA,CACA,6BACF,CAAA,CAEA,QAAA,CAAA,CAAAsB,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAWN,CAAAA,CAAiB,GAAK,eAAA,CACpC,QAAA,CAAAA,CAAAA,EAAgB,KAAA,EAASR,CAAAA,CAC5B,CAAA,CACAc,GAAAA,CAACC,MAAAA,CAAO,IAAP,CACC,OAAA,CAAS,CAAE,MAAA,CAAQZ,CAAAA,CAAS,GAAA,CAAM,CAAE,CAAA,CACpC,WAAY,CAAE,QAAA,CAAU,EAAI,CAAA,CAC5B,SAAA,CAAU,SAAA,CACV,IAAA,CAAK,MAAA,CACL,OAAO,cAAA,CACP,OAAA,CAAQ,WAAA,CAER,QAAA,CAAAW,GAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,gBAAA,CAAiB,CAAA,CACxF,CAAA,CAAA,CACF,CAAA,CACAA,IAACE,eAAAA,CAAA,CACE,QAAA,CAAAb,CAAAA,EACCW,IAACC,MAAAA,CAAO,GAAA,CAAP,CACC,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,GAAI,CAAA,CAC9B,OAAA,CAAS,CAAE,OAAA,CAAS,EAAG,CAAA,CAAG,CAAE,CAAA,CAC5B,IAAA,CAAM,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,GAAI,CAAA,CAC3B,UAAA,CAAY,CAAE,QAAA,CAAU,GAAK,CAAA,CAC7B,SAAA,CAAWvB,CAAAA,CACT,uDACA,2BAAA,CACA,6CAAA,CACA,WACF,CAAA,CAEC,QAAA,CAAAK,CAAAA,CAAQ,GAAA,CAAKoB,CAAAA,EACZH,IAAC,QAAA,CAAA,CAEC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS,IAAM,CACbf,CAAAA,GAAWkB,CAAAA,CAAO,KAAK,CAAA,CACvBb,CAAAA,CAAU,KAAK,EACjB,CAAA,CACA,SAAA,CAAWZ,CAAAA,CACT,4BAAA,CACA,2CACA,mBAAA,CACAM,CAAAA,GAAUmB,CAAAA,CAAO,KAAA,EAAS,8CAC5B,CAAA,CAEC,QAAA,CAAAA,CAAAA,CAAO,OAbHA,CAAAA,CAAO,KAcd,CACD,CAAA,CACH,EAEJ,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,KAEOC,CAAAA,CAAQtB","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState, useRef, useEffect } from \"react\";\r\nimport { motion, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface SelectOption {\r\n value: string;\r\n label: string;\r\n}\r\n\r\ninterface SelectProps {\r\n options: SelectOption[];\r\n value?: string;\r\n onChange?: (value: string) => void;\r\n placeholder?: string;\r\n className?: string;\r\n label?: string;\r\n}\r\n\r\nexport function Select({ options, value, onChange, placeholder = \"Select...\", className, label }: SelectProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const ref = useRef<HTMLDivElement>(null);\r\n\r\n const selectedOption = options.find((opt) => opt.value === value);\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (e: MouseEvent) => {\r\n if (ref.current && !ref.current.contains(e.target as Node)) {\r\n setIsOpen(false);\r\n }\r\n };\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\r\n }, []);\r\n\r\n return (\r\n <div className=\"w-full\">\r\n {label && (\r\n <label className=\"block text-sm font-medium text-zinc-700 dark:text-zinc-300 mb-1\">\r\n {label}\r\n </label>\r\n )}\r\n <div ref={ref} className={cn(\"relative\", className)}>\r\n <button\r\n type=\"button\"\r\n onClick={() => setIsOpen(!isOpen)}\r\n className={cn(\r\n \"w-full px-4 py-2 rounded-lg text-left\",\r\n \"bg-white dark:bg-zinc-900\",\r\n \"border border-zinc-300 dark:border-zinc-700\",\r\n \"flex items-center justify-between\",\r\n \"focus:outline-none focus:ring-2 focus:ring-blue-500\",\r\n \"transition-all duration-200\"\r\n )}\r\n >\r\n <span className={selectedOption ? \"\" : \"text-zinc-400\"}>\r\n {selectedOption?.label || placeholder}\r\n </span>\r\n <motion.svg\r\n animate={{ rotate: isOpen ? 180 : 0 }}\r\n transition={{ duration: 0.2 }}\r\n className=\"w-5 h-5\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\r\n </motion.svg>\r\n </button>\r\n <AnimatePresence>\r\n {isOpen && (\r\n <motion.div\r\n initial={{ opacity: 0, y: -10 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: -10 }}\r\n transition={{ duration: 0.15 }}\r\n className={cn(\r\n \"absolute z-50 w-full mt-1 rounded-lg overflow-hidden\",\r\n \"bg-white dark:bg-zinc-900\",\r\n \"border border-zinc-300 dark:border-zinc-700\",\r\n \"shadow-lg\"\r\n )}\r\n >\r\n {options.map((option) => (\r\n <button\r\n key={option.value}\r\n type=\"button\"\r\n onClick={() => {\r\n onChange?.(option.value);\r\n setIsOpen(false);\r\n }}\r\n className={cn(\r\n \"w-full px-4 py-2 text-left\",\r\n \"hover:bg-zinc-100 dark:hover:bg-zinc-800\",\r\n \"transition-colors\",\r\n value === option.value && \"bg-blue-50 dark:bg-blue-900/20 text-blue-600\"\r\n )}\r\n >\r\n {option.label}\r\n </button>\r\n ))}\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Select;\r\n"]}