bynana-ui 1.3.0 → 1.5.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 (129) hide show
  1. package/dist/animated-circular-progress/index.js +2 -0
  2. package/dist/animated-circular-progress/index.js.map +1 -0
  3. package/dist/animated-circular-progress/index.mjs +2 -0
  4. package/dist/animated-circular-progress/index.mjs.map +1 -0
  5. package/dist/ascii-text/index.js +3 -0
  6. package/dist/ascii-text/index.js.map +1 -0
  7. package/dist/ascii-text/index.mjs +3 -0
  8. package/dist/ascii-text/index.mjs.map +1 -0
  9. package/dist/blur-fade/index.js +2 -0
  10. package/dist/blur-fade/index.js.map +1 -0
  11. package/dist/blur-fade/index.mjs +2 -0
  12. package/dist/blur-fade/index.mjs.map +1 -0
  13. package/dist/click-spark/index.js +2 -0
  14. package/dist/click-spark/index.js.map +1 -0
  15. package/dist/click-spark/index.mjs +2 -0
  16. package/dist/click-spark/index.mjs.map +1 -0
  17. package/dist/contribution-graph/index.js +2 -0
  18. package/dist/contribution-graph/index.js.map +1 -0
  19. package/dist/contribution-graph/index.mjs +2 -0
  20. package/dist/contribution-graph/index.mjs.map +1 -0
  21. package/dist/elastic-slider/index.js +2 -0
  22. package/dist/elastic-slider/index.js.map +1 -0
  23. package/dist/elastic-slider/index.mjs +2 -0
  24. package/dist/elastic-slider/index.mjs.map +1 -0
  25. package/dist/falling-text/index.js +2 -0
  26. package/dist/falling-text/index.js.map +1 -0
  27. package/dist/falling-text/index.mjs +2 -0
  28. package/dist/falling-text/index.mjs.map +1 -0
  29. package/dist/float-effect/index.js +2 -0
  30. package/dist/float-effect/index.js.map +1 -0
  31. package/dist/float-effect/index.mjs +2 -0
  32. package/dist/float-effect/index.mjs.map +1 -0
  33. package/dist/glow-effect/index.js +2 -0
  34. package/dist/glow-effect/index.js.map +1 -0
  35. package/dist/glow-effect/index.mjs +2 -0
  36. package/dist/glow-effect/index.mjs.map +1 -0
  37. package/dist/hamburger-3d/index.js +2 -0
  38. package/dist/hamburger-3d/index.js.map +1 -0
  39. package/dist/hamburger-3d/index.mjs +2 -0
  40. package/dist/hamburger-3d/index.mjs.map +1 -0
  41. package/dist/hamburger-basic/index.js +2 -0
  42. package/dist/hamburger-basic/index.js.map +1 -0
  43. package/dist/hamburger-basic/index.mjs +2 -0
  44. package/dist/hamburger-basic/index.mjs.map +1 -0
  45. package/dist/hamburger-elastic/index.js +2 -0
  46. package/dist/hamburger-elastic/index.js.map +1 -0
  47. package/dist/hamburger-elastic/index.mjs +2 -0
  48. package/dist/hamburger-elastic/index.mjs.map +1 -0
  49. package/dist/hamburger-morph/index.js +2 -0
  50. package/dist/hamburger-morph/index.js.map +1 -0
  51. package/dist/hamburger-morph/index.mjs +2 -0
  52. package/dist/hamburger-morph/index.mjs.map +1 -0
  53. package/dist/hamburger-spin/index.js +2 -0
  54. package/dist/hamburger-spin/index.js.map +1 -0
  55. package/dist/hamburger-spin/index.mjs +2 -0
  56. package/dist/hamburger-spin/index.mjs.map +1 -0
  57. package/dist/hamburger-spring/index.js +2 -0
  58. package/dist/hamburger-spring/index.js.map +1 -0
  59. package/dist/hamburger-spring/index.mjs +2 -0
  60. package/dist/hamburger-spring/index.mjs.map +1 -0
  61. package/dist/hamburger-stagger/index.js +2 -0
  62. package/dist/hamburger-stagger/index.js.map +1 -0
  63. package/dist/hamburger-stagger/index.mjs +2 -0
  64. package/dist/hamburger-stagger/index.mjs.map +1 -0
  65. package/dist/hamburger-wave/index.js +2 -0
  66. package/dist/hamburger-wave/index.js.map +1 -0
  67. package/dist/hamburger-wave/index.mjs +2 -0
  68. package/dist/hamburger-wave/index.mjs.map +1 -0
  69. package/dist/index.js +21 -9
  70. package/dist/index.js.map +1 -1
  71. package/dist/index.mjs +21 -9
  72. package/dist/index.mjs.map +1 -1
  73. package/dist/infinite-scroll/index.js +11 -0
  74. package/dist/infinite-scroll/index.js.map +1 -0
  75. package/dist/infinite-scroll/index.mjs +11 -0
  76. package/dist/infinite-scroll/index.mjs.map +1 -0
  77. package/dist/input-otp/index.js +2 -0
  78. package/dist/input-otp/index.js.map +1 -0
  79. package/dist/input-otp/index.mjs +2 -0
  80. package/dist/input-otp/index.mjs.map +1 -0
  81. package/dist/loader/index.js +2 -0
  82. package/dist/loader/index.js.map +1 -0
  83. package/dist/loader/index.mjs +2 -0
  84. package/dist/loader/index.mjs.map +1 -0
  85. package/dist/loading-invert/index.js +4 -0
  86. package/dist/loading-invert/index.js.map +1 -0
  87. package/dist/loading-invert/index.mjs +4 -0
  88. package/dist/loading-invert/index.mjs.map +1 -0
  89. package/dist/multi-step-loader/index.js +2 -0
  90. package/dist/multi-step-loader/index.js.map +1 -0
  91. package/dist/multi-step-loader/index.mjs +2 -0
  92. package/dist/multi-step-loader/index.mjs.map +1 -0
  93. package/dist/pixel-card/index.js +2 -0
  94. package/dist/pixel-card/index.js.map +1 -0
  95. package/dist/pixel-card/index.mjs +2 -0
  96. package/dist/pixel-card/index.mjs.map +1 -0
  97. package/dist/scroll-velocity/index.js +2 -0
  98. package/dist/scroll-velocity/index.js.map +1 -0
  99. package/dist/scroll-velocity/index.mjs +2 -0
  100. package/dist/scroll-velocity/index.mjs.map +1 -0
  101. package/dist/shimmer-effect/index.js +2 -0
  102. package/dist/shimmer-effect/index.js.map +1 -0
  103. package/dist/shimmer-effect/index.mjs +2 -0
  104. package/dist/shimmer-effect/index.mjs.map +1 -0
  105. package/dist/smooth-cursor/index.js +2 -0
  106. package/dist/smooth-cursor/index.js.map +1 -0
  107. package/dist/smooth-cursor/index.mjs +2 -0
  108. package/dist/smooth-cursor/index.mjs.map +1 -0
  109. package/dist/social-button/index.js +2 -0
  110. package/dist/social-button/index.js.map +1 -0
  111. package/dist/social-button/index.mjs +2 -0
  112. package/dist/social-button/index.mjs.map +1 -0
  113. package/dist/text-cursor/index.js +2 -0
  114. package/dist/text-cursor/index.js.map +1 -0
  115. package/dist/text-cursor/index.mjs +2 -0
  116. package/dist/text-cursor/index.mjs.map +1 -0
  117. package/dist/theme-toggler/index.js +2 -0
  118. package/dist/theme-toggler/index.js.map +1 -0
  119. package/dist/theme-toggler/index.mjs +2 -0
  120. package/dist/theme-toggler/index.mjs.map +1 -0
  121. package/dist/tilted-card/index.js +2 -0
  122. package/dist/tilted-card/index.js.map +1 -0
  123. package/dist/tilted-card/index.mjs +2 -0
  124. package/dist/tilted-card/index.mjs.map +1 -0
  125. package/dist/v0-button/index.js +2 -0
  126. package/dist/v0-button/index.js.map +1 -0
  127. package/dist/v0-button/index.mjs +2 -0
  128. package/dist/v0-button/index.mjs.map +1 -0
  129. package/package.json +33 -2
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),framerMotion=require('framer-motion'),jsxRuntime=require('react/jsx-runtime');function A(...s){return s.filter(Boolean).join(" ")}function j({max:s=100,min:i=0,value:d=0,gaugePrimaryColor:h="#a1a1aa",gaugeSecondaryColor:P="#27272a",className:M,size:e=200,strokeWidth:a=8,showValue:V=true,duration:b=2,autoAnimate:u=true}){let[p,x]=react.useState(u?i:d),n=(e-a)/2,o=2*Math.PI*n,y=framerMotion.useMotionValue(p),v=framerMotion.useSpring(y,{damping:30,stiffness:100}),k=framerMotion.useTransform(v,[i,s],[0,o]),I=framerMotion.useTransform(v,t=>Math.round(t));return react.useEffect(()=>{if(u){let t=setInterval(()=>{x(l=>{let c=l+1;return c>s?i:c});},b*10);return ()=>clearInterval(t)}else x(d);},[u,d,s,i,b]),react.useEffect(()=>{y.set(p);},[p,y]),jsxRuntime.jsxs("div",{className:A("relative flex items-center justify-center",M),style:{width:e,height:e},children:[jsxRuntime.jsxs("svg",{width:e,height:e,className:"transform -rotate-90",children:[jsxRuntime.jsx("circle",{cx:e/2,cy:e/2,r:n,stroke:P,strokeWidth:a,fill:"none",className:"opacity-20"}),jsxRuntime.jsx(framerMotion.motion.circle,{cx:e/2,cy:e/2,r:n,stroke:h,strokeWidth:a,fill:"none",strokeLinecap:"round",strokeDasharray:o,strokeDashoffset:framerMotion.useTransform(k,t=>o-t),className:"transition-all duration-300 ease-in-out",style:{filter:"drop-shadow(0 0 6px rgba(59, 130, 246, 0.4))"}}),jsxRuntime.jsx(framerMotion.motion.circle,{cx:e/2,cy:e/2,r:n,stroke:h,strokeWidth:a/2,fill:"none",strokeLinecap:"round",strokeDasharray:o,strokeDashoffset:framerMotion.useTransform(k,t=>o-t),className:"opacity-50 blur-sm"})]}),V&&jsxRuntime.jsxs("div",{className:"absolute inset-0 flex flex-col items-center justify-center",children:[jsxRuntime.jsx(framerMotion.motion.span,{className:"text-3xl font-semibold text-zinc-900 dark:text-zinc-100",style:{fontSize:e/8},children:I}),jsxRuntime.jsx("span",{className:"text-sm text-zinc-500",style:{fontSize:e/16},children:u?"Auto":"%"})]}),jsxRuntime.jsx("div",{className:"absolute inset-0",children:[...Array(8)].map((t,l)=>{let c=l*45-90,w=e/2+(n+a)*Math.cos(c*Math.PI/180),C=e/2+(n+a)*Math.sin(c*Math.PI/180);return jsxRuntime.jsx(framerMotion.motion.div,{className:"absolute w-1 h-1 bg-zinc-500 rounded-full",style:{left:w-2,top:C-2},animate:{opacity:[.3,1,.3],scale:[.8,1.2,.8]},transition:{duration:2,repeat:1/0,delay:l*.2}},l)})})]})}var T=j;exports.AnimatedCircularProgressBar=j;exports.default=T;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/animated-circular-progress/index.tsx"],"names":["cn","classes","AnimatedCircularProgressBar","max","min","value","gaugePrimaryColor","gaugeSecondaryColor","className","size","strokeWidth","showValue","duration","autoAnimate","currentValue","setCurrentValue","useState","radius","circumference","motionValue","useMotionValue","springValue","useSpring","strokeDasharray","useTransform","displayValue","latest","useEffect","interval","prev","next","jsxs","jsx","motion","_","i","angle","x","y","animated_circular_progress_default"],"mappings":"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","file":"index.js","sourcesContent":["\"use client\";\r\n\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { motion, useMotionValue, useSpring, useTransform } from \"framer-motion\";\r\n\r\nfunction cn(...classes: (string | undefined | false)[]) {\r\n return classes.filter(Boolean).join(\" \");\r\n}\r\n\r\ninterface AnimatedCircularProgressBarProps {\r\n max?: number;\r\n min?: number;\r\n value?: number;\r\n gaugePrimaryColor?: string;\r\n gaugeSecondaryColor?: string;\r\n className?: string;\r\n size?: number;\r\n strokeWidth?: number;\r\n showValue?: boolean;\r\n duration?: number;\r\n autoAnimate?: boolean;\r\n}\r\n\r\nexport function AnimatedCircularProgressBar({\r\n max = 100,\r\n min = 0,\r\n value = 0,\r\n gaugePrimaryColor = \"#a1a1aa\",\r\n gaugeSecondaryColor = \"#27272a\",\r\n className,\r\n size = 200,\r\n strokeWidth = 8,\r\n showValue = true,\r\n duration = 2,\r\n autoAnimate = true,\r\n}: AnimatedCircularProgressBarProps) {\r\n const [currentValue, setCurrentValue] = useState(autoAnimate ? min : value);\r\n \r\n const radius = (size - strokeWidth) / 2;\r\n const circumference = 2 * Math.PI * radius;\r\n \r\n const motionValue = useMotionValue(currentValue);\r\n const springValue = useSpring(motionValue, {\r\n damping: 30,\r\n stiffness: 100,\r\n });\r\n \r\n const strokeDasharray = useTransform(\r\n springValue,\r\n [min, max],\r\n [0, circumference]\r\n );\r\n \r\n const displayValue = useTransform(springValue, (latest) => Math.round(latest));\r\n\r\n useEffect(() => {\r\n if (autoAnimate) {\r\n const interval = setInterval(() => {\r\n setCurrentValue(prev => {\r\n const next = prev + 1;\r\n if (next > max) {\r\n return min;\r\n }\r\n return next;\r\n });\r\n }, duration * 10);\r\n\r\n return () => clearInterval(interval);\r\n } else {\r\n setCurrentValue(value);\r\n }\r\n }, [autoAnimate, value, max, min, duration]);\r\n\r\n useEffect(() => {\r\n motionValue.set(currentValue);\r\n }, [currentValue, motionValue]);\r\n\r\n return (\r\n <div \r\n className={cn(\"relative flex items-center justify-center\", className)}\r\n style={{ width: size, height: size }}\r\n >\r\n <svg\r\n width={size}\r\n height={size}\r\n className=\"transform -rotate-90\"\r\n >\r\n <circle\r\n cx={size / 2}\r\n cy={size / 2}\r\n r={radius}\r\n stroke={gaugeSecondaryColor}\r\n strokeWidth={strokeWidth}\r\n fill=\"none\"\r\n className=\"opacity-20\"\r\n />\r\n \r\n <motion.circle\r\n cx={size / 2}\r\n cy={size / 2}\r\n r={radius}\r\n stroke={gaugePrimaryColor}\r\n strokeWidth={strokeWidth}\r\n fill=\"none\"\r\n strokeLinecap=\"round\"\r\n strokeDasharray={circumference}\r\n strokeDashoffset={useTransform(strokeDasharray, (latest) => circumference - latest)}\r\n className=\"transition-all duration-300 ease-in-out\"\r\n style={{\r\n filter: \"drop-shadow(0 0 6px rgba(59, 130, 246, 0.4))\",\r\n }}\r\n />\r\n \r\n <motion.circle\r\n cx={size / 2}\r\n cy={size / 2}\r\n r={radius}\r\n stroke={gaugePrimaryColor}\r\n strokeWidth={strokeWidth / 2}\r\n fill=\"none\"\r\n strokeLinecap=\"round\"\r\n strokeDasharray={circumference}\r\n strokeDashoffset={useTransform(strokeDasharray, (latest) => circumference - latest)}\r\n className=\"opacity-50 blur-sm\"\r\n />\r\n </svg>\r\n \r\n {showValue && (\r\n <div className=\"absolute inset-0 flex flex-col items-center justify-center\">\r\n <motion.span \r\n className=\"text-3xl font-semibold text-zinc-900 dark:text-zinc-100\"\r\n style={{ fontSize: size / 8 }}\r\n >\r\n {displayValue}\r\n </motion.span>\r\n <span \r\n className=\"text-sm text-zinc-500\"\r\n style={{ fontSize: size / 16 }}\r\n >\r\n {autoAnimate ? \"Auto\" : \"%\"}\r\n </span>\r\n </div>\r\n )}\r\n \r\n <div className=\"absolute inset-0\">\r\n {[...Array(8)].map((_, i) => {\r\n const angle = (i * 45) - 90;\r\n const x = size / 2 + (radius + strokeWidth) * Math.cos((angle * Math.PI) / 180);\r\n const y = size / 2 + (radius + strokeWidth) * Math.sin((angle * Math.PI) / 180);\r\n \r\n return (\r\n <motion.div\r\n key={i}\r\n className=\"absolute w-1 h-1 bg-zinc-500 rounded-full\"\r\n style={{\r\n left: x - 2,\r\n top: y - 2,\r\n }}\r\n animate={{\r\n opacity: [0.3, 1, 0.3],\r\n scale: [0.8, 1.2, 0.8],\r\n }}\r\n transition={{\r\n duration: 2,\r\n repeat: Infinity,\r\n delay: i * 0.2,\r\n }}\r\n />\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default AnimatedCircularProgressBar;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useState,useEffect}from'react';import {useMotionValue,useSpring,useTransform,motion}from'framer-motion';import {jsxs,jsx}from'react/jsx-runtime';function A(...s){return s.filter(Boolean).join(" ")}function j({max:s=100,min:i=0,value:d=0,gaugePrimaryColor:h="#a1a1aa",gaugeSecondaryColor:P="#27272a",className:M,size:e=200,strokeWidth:a=8,showValue:V=true,duration:b=2,autoAnimate:u=true}){let[p,x]=useState(u?i:d),n=(e-a)/2,o=2*Math.PI*n,y=useMotionValue(p),v=useSpring(y,{damping:30,stiffness:100}),k=useTransform(v,[i,s],[0,o]),I=useTransform(v,t=>Math.round(t));return useEffect(()=>{if(u){let t=setInterval(()=>{x(l=>{let c=l+1;return c>s?i:c});},b*10);return ()=>clearInterval(t)}else x(d);},[u,d,s,i,b]),useEffect(()=>{y.set(p);},[p,y]),jsxs("div",{className:A("relative flex items-center justify-center",M),style:{width:e,height:e},children:[jsxs("svg",{width:e,height:e,className:"transform -rotate-90",children:[jsx("circle",{cx:e/2,cy:e/2,r:n,stroke:P,strokeWidth:a,fill:"none",className:"opacity-20"}),jsx(motion.circle,{cx:e/2,cy:e/2,r:n,stroke:h,strokeWidth:a,fill:"none",strokeLinecap:"round",strokeDasharray:o,strokeDashoffset:useTransform(k,t=>o-t),className:"transition-all duration-300 ease-in-out",style:{filter:"drop-shadow(0 0 6px rgba(59, 130, 246, 0.4))"}}),jsx(motion.circle,{cx:e/2,cy:e/2,r:n,stroke:h,strokeWidth:a/2,fill:"none",strokeLinecap:"round",strokeDasharray:o,strokeDashoffset:useTransform(k,t=>o-t),className:"opacity-50 blur-sm"})]}),V&&jsxs("div",{className:"absolute inset-0 flex flex-col items-center justify-center",children:[jsx(motion.span,{className:"text-3xl font-semibold text-zinc-900 dark:text-zinc-100",style:{fontSize:e/8},children:I}),jsx("span",{className:"text-sm text-zinc-500",style:{fontSize:e/16},children:u?"Auto":"%"})]}),jsx("div",{className:"absolute inset-0",children:[...Array(8)].map((t,l)=>{let c=l*45-90,w=e/2+(n+a)*Math.cos(c*Math.PI/180),C=e/2+(n+a)*Math.sin(c*Math.PI/180);return jsx(motion.div,{className:"absolute w-1 h-1 bg-zinc-500 rounded-full",style:{left:w-2,top:C-2},animate:{opacity:[.3,1,.3],scale:[.8,1.2,.8]},transition:{duration:2,repeat:1/0,delay:l*.2}},l)})})]})}var T=j;export{j as AnimatedCircularProgressBar,T as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/animated-circular-progress/index.tsx"],"names":["cn","classes","AnimatedCircularProgressBar","max","min","value","gaugePrimaryColor","gaugeSecondaryColor","className","size","strokeWidth","showValue","duration","autoAnimate","currentValue","setCurrentValue","useState","radius","circumference","motionValue","useMotionValue","springValue","useSpring","strokeDasharray","useTransform","displayValue","latest","useEffect","interval","prev","next","jsxs","jsx","motion","_","i","angle","x","y","animated_circular_progress_default"],"mappings":"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","file":"index.mjs","sourcesContent":["\"use client\";\r\n\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { motion, useMotionValue, useSpring, useTransform } from \"framer-motion\";\r\n\r\nfunction cn(...classes: (string | undefined | false)[]) {\r\n return classes.filter(Boolean).join(\" \");\r\n}\r\n\r\ninterface AnimatedCircularProgressBarProps {\r\n max?: number;\r\n min?: number;\r\n value?: number;\r\n gaugePrimaryColor?: string;\r\n gaugeSecondaryColor?: string;\r\n className?: string;\r\n size?: number;\r\n strokeWidth?: number;\r\n showValue?: boolean;\r\n duration?: number;\r\n autoAnimate?: boolean;\r\n}\r\n\r\nexport function AnimatedCircularProgressBar({\r\n max = 100,\r\n min = 0,\r\n value = 0,\r\n gaugePrimaryColor = \"#a1a1aa\",\r\n gaugeSecondaryColor = \"#27272a\",\r\n className,\r\n size = 200,\r\n strokeWidth = 8,\r\n showValue = true,\r\n duration = 2,\r\n autoAnimate = true,\r\n}: AnimatedCircularProgressBarProps) {\r\n const [currentValue, setCurrentValue] = useState(autoAnimate ? min : value);\r\n \r\n const radius = (size - strokeWidth) / 2;\r\n const circumference = 2 * Math.PI * radius;\r\n \r\n const motionValue = useMotionValue(currentValue);\r\n const springValue = useSpring(motionValue, {\r\n damping: 30,\r\n stiffness: 100,\r\n });\r\n \r\n const strokeDasharray = useTransform(\r\n springValue,\r\n [min, max],\r\n [0, circumference]\r\n );\r\n \r\n const displayValue = useTransform(springValue, (latest) => Math.round(latest));\r\n\r\n useEffect(() => {\r\n if (autoAnimate) {\r\n const interval = setInterval(() => {\r\n setCurrentValue(prev => {\r\n const next = prev + 1;\r\n if (next > max) {\r\n return min;\r\n }\r\n return next;\r\n });\r\n }, duration * 10);\r\n\r\n return () => clearInterval(interval);\r\n } else {\r\n setCurrentValue(value);\r\n }\r\n }, [autoAnimate, value, max, min, duration]);\r\n\r\n useEffect(() => {\r\n motionValue.set(currentValue);\r\n }, [currentValue, motionValue]);\r\n\r\n return (\r\n <div \r\n className={cn(\"relative flex items-center justify-center\", className)}\r\n style={{ width: size, height: size }}\r\n >\r\n <svg\r\n width={size}\r\n height={size}\r\n className=\"transform -rotate-90\"\r\n >\r\n <circle\r\n cx={size / 2}\r\n cy={size / 2}\r\n r={radius}\r\n stroke={gaugeSecondaryColor}\r\n strokeWidth={strokeWidth}\r\n fill=\"none\"\r\n className=\"opacity-20\"\r\n />\r\n \r\n <motion.circle\r\n cx={size / 2}\r\n cy={size / 2}\r\n r={radius}\r\n stroke={gaugePrimaryColor}\r\n strokeWidth={strokeWidth}\r\n fill=\"none\"\r\n strokeLinecap=\"round\"\r\n strokeDasharray={circumference}\r\n strokeDashoffset={useTransform(strokeDasharray, (latest) => circumference - latest)}\r\n className=\"transition-all duration-300 ease-in-out\"\r\n style={{\r\n filter: \"drop-shadow(0 0 6px rgba(59, 130, 246, 0.4))\",\r\n }}\r\n />\r\n \r\n <motion.circle\r\n cx={size / 2}\r\n cy={size / 2}\r\n r={radius}\r\n stroke={gaugePrimaryColor}\r\n strokeWidth={strokeWidth / 2}\r\n fill=\"none\"\r\n strokeLinecap=\"round\"\r\n strokeDasharray={circumference}\r\n strokeDashoffset={useTransform(strokeDasharray, (latest) => circumference - latest)}\r\n className=\"opacity-50 blur-sm\"\r\n />\r\n </svg>\r\n \r\n {showValue && (\r\n <div className=\"absolute inset-0 flex flex-col items-center justify-center\">\r\n <motion.span \r\n className=\"text-3xl font-semibold text-zinc-900 dark:text-zinc-100\"\r\n style={{ fontSize: size / 8 }}\r\n >\r\n {displayValue}\r\n </motion.span>\r\n <span \r\n className=\"text-sm text-zinc-500\"\r\n style={{ fontSize: size / 16 }}\r\n >\r\n {autoAnimate ? \"Auto\" : \"%\"}\r\n </span>\r\n </div>\r\n )}\r\n \r\n <div className=\"absolute inset-0\">\r\n {[...Array(8)].map((_, i) => {\r\n const angle = (i * 45) - 90;\r\n const x = size / 2 + (radius + strokeWidth) * Math.cos((angle * Math.PI) / 180);\r\n const y = size / 2 + (radius + strokeWidth) * Math.sin((angle * Math.PI) / 180);\r\n \r\n return (\r\n <motion.div\r\n key={i}\r\n className=\"absolute w-1 h-1 bg-zinc-500 rounded-full\"\r\n style={{\r\n left: x - 2,\r\n top: y - 2,\r\n }}\r\n animate={{\r\n opacity: [0.3, 1, 0.3],\r\n scale: [0.8, 1.2, 0.8],\r\n }}\r\n transition={{\r\n duration: 2,\r\n repeat: Infinity,\r\n delay: i * 0.2,\r\n }}\r\n />\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default AnimatedCircularProgressBar;\r\n"]}
@@ -0,0 +1,3 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function h(...n){return tailwindMerge.twMerge(clsx.clsx(n))}var u=" .:-=+*#%@";function R({text:n,enableWaves:$=true,asciiFontSize:t=8,textFontSize:o=200,textColor:a="#ffffff",planeBaseHeight:N=.2,className:d}){let x=react.useRef(null),[I,b]=react.useState("");return react.useEffect(()=>{let c=document.createElement("canvas"),e=c.getContext("2d");if(!e)return;e.font=`bold ${o}px monospace`;let A=e.measureText(n),s=Math.ceil(A.width),r=o*1.2;c.width=s,c.height=r,e.fillStyle=a,e.font=`bold ${o}px monospace`,e.textBaseline="middle",e.fillText(n,0,r/2);let l=e.getImageData(0,0,s,r).data,v=Math.floor(s/t),C=Math.floor(r/t),f="";for(let i=0;i<C;i++){for(let p=0;p<v;p++){let w=p*t,m=(i*t*s+w)*4,y=(l[m]+l[m+1]+l[m+2])/3,M=Math.floor(y/255*(u.length-1));f+=u[M];}f+=`
2
+ `;}b(f);},[n,t,o,a]),jsxRuntime.jsx("div",{ref:x,className:h("font-mono whitespace-pre",d),children:jsxRuntime.jsx("pre",{style:{fontSize:`${t}px`,lineHeight:1,color:a},children:I})})}var q=R;exports.ASCIIText=R;exports.default=q;//# sourceMappingURL=index.js.map
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/ascii-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","ASCII_CHARS","ASCIIText","text","enableWaves","asciiFontSize","textFontSize","textColor","planeBaseHeight","className","containerRef","useRef","asciiArt","setAsciiArt","useState","useEffect","canvas","ctx","metrics","width","height","pixels","cols","rows","ascii","y","x","px","idx","brightness","charIdx","jsx","ascii_text_default"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface ASCIITextProps {\r\n text: string;\r\n enableWaves?: boolean;\r\n asciiFontSize?: number;\r\n textFontSize?: number;\r\n textColor?: string;\r\n planeBaseHeight?: number;\r\n className?: string;\r\n}\r\n\r\nconst ASCII_CHARS = ' .:-=+*#%@';\r\n\r\nexport function ASCIIText({\r\n text,\r\n enableWaves = true,\r\n asciiFontSize = 8,\r\n textFontSize = 200,\r\n textColor = \"#ffffff\",\r\n planeBaseHeight = 0.2,\r\n className,\r\n}: ASCIITextProps) {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const [asciiArt, setAsciiArt] = useState<string>(\"\");\r\n\r\n useEffect(() => {\r\n const canvas = document.createElement(\"canvas\");\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n // Set canvas size based on text\r\n ctx.font = `bold ${textFontSize}px monospace`;\r\n const metrics = ctx.measureText(text);\r\n const width = Math.ceil(metrics.width);\r\n const height = textFontSize * 1.2;\r\n\r\n canvas.width = width;\r\n canvas.height = height;\r\n\r\n // Draw text\r\n ctx.fillStyle = textColor;\r\n ctx.font = `bold ${textFontSize}px monospace`;\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillText(text, 0, height / 2);\r\n\r\n // Get image data\r\n const imageData = ctx.getImageData(0, 0, width, height);\r\n const pixels = imageData.data;\r\n\r\n // Convert to ASCII\r\n const cols = Math.floor(width / asciiFontSize);\r\n const rows = Math.floor(height / asciiFontSize);\r\n let ascii = \"\";\r\n\r\n for (let y = 0; y < rows; y++) {\r\n for (let x = 0; x < cols; x++) {\r\n const px = x * asciiFontSize;\r\n const py = y * asciiFontSize;\r\n const idx = (py * width + px) * 4;\r\n const brightness = (pixels[idx] + pixels[idx + 1] + pixels[idx + 2]) / 3;\r\n const charIdx = Math.floor((brightness / 255) * (ASCII_CHARS.length - 1));\r\n ascii += ASCII_CHARS[charIdx];\r\n }\r\n ascii += \"\\n\";\r\n }\r\n\r\n setAsciiArt(ascii);\r\n }, [text, asciiFontSize, textFontSize, textColor]);\r\n\r\n return (\r\n <div ref={containerRef} className={cn(\"font-mono whitespace-pre\", className)}>\r\n <pre\r\n style={{\r\n fontSize: `${asciiFontSize}px`,\r\n lineHeight: 1,\r\n color: textColor,\r\n }}\r\n >\r\n {asciiArt}\r\n </pre>\r\n </div>\r\n );\r\n}\r\n\r\nexport default ASCIIText;\r\n"]}
@@ -0,0 +1,3 @@
1
+ import {useRef,useState,useEffect}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function h(...n){return twMerge(clsx(n))}var u=" .:-=+*#%@";function R({text:n,enableWaves:$=true,asciiFontSize:t=8,textFontSize:o=200,textColor:a="#ffffff",planeBaseHeight:N=.2,className:d}){let x=useRef(null),[I,b]=useState("");return useEffect(()=>{let c=document.createElement("canvas"),e=c.getContext("2d");if(!e)return;e.font=`bold ${o}px monospace`;let A=e.measureText(n),s=Math.ceil(A.width),r=o*1.2;c.width=s,c.height=r,e.fillStyle=a,e.font=`bold ${o}px monospace`,e.textBaseline="middle",e.fillText(n,0,r/2);let l=e.getImageData(0,0,s,r).data,v=Math.floor(s/t),C=Math.floor(r/t),f="";for(let i=0;i<C;i++){for(let p=0;p<v;p++){let w=p*t,m=(i*t*s+w)*4,y=(l[m]+l[m+1]+l[m+2])/3,M=Math.floor(y/255*(u.length-1));f+=u[M];}f+=`
2
+ `;}b(f);},[n,t,o,a]),jsx("div",{ref:x,className:h("font-mono whitespace-pre",d),children:jsx("pre",{style:{fontSize:`${t}px`,lineHeight:1,color:a},children:I})})}var q=R;export{R as ASCIIText,q as default};//# sourceMappingURL=index.mjs.map
3
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/ascii-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","ASCII_CHARS","ASCIIText","text","enableWaves","asciiFontSize","textFontSize","textColor","planeBaseHeight","className","containerRef","useRef","asciiArt","setAsciiArt","useState","useEffect","canvas","ctx","metrics","width","height","pixels","cols","rows","ascii","y","x","px","idx","brightness","charIdx","jsx","ascii_text_default"],"mappings":"+IAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCUA,IAAMG,EAAc,YAAA,CAEb,SAASC,CAAAA,CAAU,CACxB,IAAA,CAAAC,CAAAA,CACA,YAAAC,CAAAA,CAAc,IAAA,CACd,cAAAC,CAAAA,CAAgB,CAAA,CAChB,aAAAC,CAAAA,CAAe,GAAA,CACf,SAAA,CAAAC,CAAAA,CAAY,SAAA,CACZ,eAAA,CAAAC,EAAkB,EAAA,CAClB,SAAA,CAAAC,CACF,CAAA,CAAmB,CACjB,IAAMC,CAAAA,CAAeC,MAAAA,CAAuB,IAAI,CAAA,CAC1C,CAACC,CAAAA,CAAUC,CAAW,CAAA,CAAIC,QAAAA,CAAiB,EAAE,CAAA,CAEnD,OAAAC,UAAU,IAAM,CACd,IAAMC,CAAAA,CAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA,CACxCC,CAAAA,CAAMD,EAAO,UAAA,CAAW,IAAI,EAClC,GAAI,CAACC,CAAAA,CAAK,OAGVA,CAAAA,CAAI,IAAA,CAAO,QAAQX,CAAY,CAAA,YAAA,CAAA,CAC/B,IAAMY,CAAAA,CAAUD,CAAAA,CAAI,WAAA,CAAYd,CAAI,CAAA,CAC9BgB,CAAAA,CAAQ,IAAA,CAAK,IAAA,CAAKD,CAAAA,CAAQ,KAAK,EAC/BE,CAAAA,CAASd,CAAAA,CAAe,IAE9BU,CAAAA,CAAO,KAAA,CAAQG,EACfH,CAAAA,CAAO,MAAA,CAASI,CAAAA,CAGhBH,CAAAA,CAAI,SAAA,CAAYV,CAAAA,CAChBU,EAAI,IAAA,CAAO,CAAA,KAAA,EAAQX,CAAY,CAAA,YAAA,CAAA,CAC/BW,CAAAA,CAAI,aAAe,QAAA,CACnBA,CAAAA,CAAI,QAAA,CAASd,CAAAA,CAAM,CAAA,CAAGiB,CAAAA,CAAS,CAAC,CAAA,CAIhC,IAAMC,EADYJ,CAAAA,CAAI,YAAA,CAAa,EAAG,CAAA,CAAGE,CAAAA,CAAOC,CAAM,CAAA,CAC7B,IAAA,CAGnBE,CAAAA,CAAO,KAAK,KAAA,CAAMH,CAAAA,CAAQd,CAAa,CAAA,CACvCkB,CAAAA,CAAO,KAAK,KAAA,CAAMH,CAAAA,CAASf,CAAa,CAAA,CAC1CmB,CAAAA,CAAQ,EAAA,CAEZ,QAASC,CAAAA,CAAI,CAAA,CAAGA,EAAIF,CAAAA,CAAME,CAAAA,EAAAA,CAAK,CAC7B,IAAA,IAASC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIJ,CAAAA,CAAMI,CAAAA,EAAAA,CAAK,CAC7B,IAAMC,CAAAA,CAAKD,EAAIrB,CAAAA,CAETuB,CAAAA,CAAAA,CADKH,EAAIpB,CAAAA,CACGc,CAAAA,CAAQQ,CAAAA,EAAM,CAAA,CAC1BE,CAAAA,CAAAA,CAAcR,CAAAA,CAAOO,CAAG,CAAA,CAAIP,CAAAA,CAAOO,EAAM,CAAC,CAAA,CAAIP,EAAOO,CAAAA,CAAM,CAAC,CAAA,EAAK,CAAA,CACjEE,CAAAA,CAAU,IAAA,CAAK,MAAOD,CAAAA,CAAa,GAAA,EAAQ5B,CAAAA,CAAY,MAAA,CAAS,CAAA,CAAE,CAAA,CACxEuB,GAASvB,CAAAA,CAAY6B,CAAO,EAC9B,CACAN,CAAAA,EAAS;AAAA,EACX,CAEAX,CAAAA,CAAYW,CAAK,EACnB,CAAA,CAAG,CAACrB,EAAME,CAAAA,CAAeC,CAAAA,CAAcC,CAAS,CAAC,EAG/CwB,GAAAA,CAAC,KAAA,CAAA,CAAI,IAAKrB,CAAAA,CAAc,SAAA,CAAWb,EAAG,0BAAA,CAA4BY,CAAS,CAAA,CACzE,QAAA,CAAAsB,IAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,QAAA,CAAU,CAAA,EAAG1B,CAAa,CAAA,EAAA,CAAA,CAC1B,UAAA,CAAY,EACZ,KAAA,CAAOE,CACT,EAEC,QAAA,CAAAK,CAAAA,CACH,EACF,CAEJ,KAEOoB,CAAAA,CAAQ9B","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface ASCIITextProps {\r\n text: string;\r\n enableWaves?: boolean;\r\n asciiFontSize?: number;\r\n textFontSize?: number;\r\n textColor?: string;\r\n planeBaseHeight?: number;\r\n className?: string;\r\n}\r\n\r\nconst ASCII_CHARS = ' .:-=+*#%@';\r\n\r\nexport function ASCIIText({\r\n text,\r\n enableWaves = true,\r\n asciiFontSize = 8,\r\n textFontSize = 200,\r\n textColor = \"#ffffff\",\r\n planeBaseHeight = 0.2,\r\n className,\r\n}: ASCIITextProps) {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const [asciiArt, setAsciiArt] = useState<string>(\"\");\r\n\r\n useEffect(() => {\r\n const canvas = document.createElement(\"canvas\");\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n // Set canvas size based on text\r\n ctx.font = `bold ${textFontSize}px monospace`;\r\n const metrics = ctx.measureText(text);\r\n const width = Math.ceil(metrics.width);\r\n const height = textFontSize * 1.2;\r\n\r\n canvas.width = width;\r\n canvas.height = height;\r\n\r\n // Draw text\r\n ctx.fillStyle = textColor;\r\n ctx.font = `bold ${textFontSize}px monospace`;\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillText(text, 0, height / 2);\r\n\r\n // Get image data\r\n const imageData = ctx.getImageData(0, 0, width, height);\r\n const pixels = imageData.data;\r\n\r\n // Convert to ASCII\r\n const cols = Math.floor(width / asciiFontSize);\r\n const rows = Math.floor(height / asciiFontSize);\r\n let ascii = \"\";\r\n\r\n for (let y = 0; y < rows; y++) {\r\n for (let x = 0; x < cols; x++) {\r\n const px = x * asciiFontSize;\r\n const py = y * asciiFontSize;\r\n const idx = (py * width + px) * 4;\r\n const brightness = (pixels[idx] + pixels[idx + 1] + pixels[idx + 2]) / 3;\r\n const charIdx = Math.floor((brightness / 255) * (ASCII_CHARS.length - 1));\r\n ascii += ASCII_CHARS[charIdx];\r\n }\r\n ascii += \"\\n\";\r\n }\r\n\r\n setAsciiArt(ascii);\r\n }, [text, asciiFontSize, textFontSize, textColor]);\r\n\r\n return (\r\n <div ref={containerRef} className={cn(\"font-mono whitespace-pre\", className)}>\r\n <pre\r\n style={{\r\n fontSize: `${asciiFontSize}px`,\r\n lineHeight: 1,\r\n color: textColor,\r\n }}\r\n >\r\n {asciiArt}\r\n </pre>\r\n </div>\r\n );\r\n}\r\n\r\nexport default ASCIIText;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function r(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function f({children:e,className:n,delay:t=0,duration:o=.8,blur:a=10,inView:i=false,inViewMargin:l="-50px",yOffset:s=6}){let u={hidden:{opacity:0,filter:`blur(${a}px)`,y:s},visible:{opacity:1,filter:"blur(0px)",y:0}};return jsxRuntime.jsx(framerMotion.motion.div,{className:r(n),initial:"hidden",animate:i?void 0:"visible",whileInView:i?"visible":void 0,viewport:{once:true,margin:l},variants:u,transition:{duration:o,delay:t,ease:[.25,.1,.25,1]},children:e})}var w=f;exports.BlurFade=f;exports.default=w;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/blur-fade/index.tsx"],"names":["cn","inputs","twMerge","clsx","BlurFade","children","className","delay","duration","blur","inView","inViewMargin","yOffset","variants","jsx","motion","blur_fade_default"],"mappings":"qNAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCYO,SAASG,CAAAA,CAAS,CACvB,QAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CAAQ,CAAA,CACR,QAAA,CAAAC,CAAAA,CAAW,EAAA,CACX,IAAA,CAAAC,CAAAA,CAAO,EAAA,CACP,MAAA,CAAAC,CAAAA,CAAS,KAAA,CACT,YAAA,CAAAC,CAAAA,CAAe,OAAA,CACf,OAAA,CAAAC,CAAAA,CAAU,CACZ,CAAA,CAAkB,CAChB,IAAMC,CAAAA,CAAW,CACf,MAAA,CAAQ,CACN,OAAA,CAAS,CAAA,CACT,MAAA,CAAQ,CAAA,KAAA,EAAQJ,CAAI,CAAA,GAAA,CAAA,CACpB,CAAA,CAAGG,CACL,CAAA,CACA,OAAA,CAAS,CACP,OAAA,CAAS,CAAA,CACT,MAAA,CAAQ,WAAA,CACR,CAAA,CAAG,CACL,CACF,CAAA,CAEA,OACEE,cAAAA,CAACC,mBAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAWf,CAAAA,CAAGM,CAAS,CAAA,CACvB,OAAA,CAAQ,QAAA,CACR,OAAA,CAASI,CAAAA,CAAS,MAAA,CAAY,SAAA,CAC9B,WAAA,CAAaA,CAAAA,CAAS,SAAA,CAAY,MAAA,CAClC,QAAA,CAAU,CAAE,IAAA,CAAM,IAAA,CAAM,MAAA,CAAQC,CAAa,CAAA,CAC7C,QAAA,CAAUE,CAAAA,CACV,UAAA,CAAY,CACV,QAAA,CAAAL,CAAAA,CACA,KAAA,CAAAD,CAAAA,CACA,IAAA,CAAM,CAAC,GAAA,CAAM,EAAA,CAAK,GAAA,CAAM,CAAC,CAC3B,CAAA,CAEC,QAAA,CAAAF,CAAAA,CACH,CAEJ,CAEA,IAAOW,CAAAA,CAAQZ","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { ReactNode } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface BlurFadeProps {\r\n children: ReactNode;\r\n className?: string;\r\n delay?: number;\r\n duration?: number;\r\n blur?: number;\r\n inView?: boolean;\r\n inViewMargin?: string;\r\n yOffset?: number;\r\n}\r\n\r\nexport function BlurFade({\r\n children,\r\n className,\r\n delay = 0,\r\n duration = 0.8,\r\n blur = 10,\r\n inView = false,\r\n inViewMargin = \"-50px\",\r\n yOffset = 6,\r\n}: BlurFadeProps) {\r\n const variants = {\r\n hidden: {\r\n opacity: 0,\r\n filter: `blur(${blur}px)`,\r\n y: yOffset,\r\n },\r\n visible: {\r\n opacity: 1,\r\n filter: \"blur(0px)\",\r\n y: 0,\r\n },\r\n };\r\n\r\n return (\r\n <motion.div\r\n className={cn(className)}\r\n initial=\"hidden\"\r\n animate={inView ? undefined : \"visible\"}\r\n whileInView={inView ? \"visible\" : undefined}\r\n viewport={{ once: true, margin: inViewMargin }}\r\n variants={variants}\r\n transition={{\r\n duration,\r\n delay,\r\n ease: [0.25, 0.1, 0.25, 1],\r\n }}\r\n >\r\n {children}\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport default BlurFade;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function r(...e){return twMerge(clsx(e))}function f({children:e,className:n,delay:t=0,duration:o=.8,blur:a=10,inView:i=false,inViewMargin:l="-50px",yOffset:s=6}){let u={hidden:{opacity:0,filter:`blur(${a}px)`,y:s},visible:{opacity:1,filter:"blur(0px)",y:0}};return jsx(motion.div,{className:r(n),initial:"hidden",animate:i?void 0:"visible",whileInView:i?"visible":void 0,viewport:{once:true,margin:l},variants:u,transition:{duration:o,delay:t,ease:[.25,.1,.25,1]},children:e})}var w=f;export{f as BlurFade,w as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/blur-fade/index.tsx"],"names":["cn","inputs","twMerge","clsx","BlurFade","children","className","delay","duration","blur","inView","inViewMargin","yOffset","variants","jsx","motion","blur_fade_default"],"mappings":"oIAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCYO,SAASG,CAAAA,CAAS,CACvB,QAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CAAQ,CAAA,CACR,QAAA,CAAAC,CAAAA,CAAW,EAAA,CACX,IAAA,CAAAC,CAAAA,CAAO,EAAA,CACP,MAAA,CAAAC,CAAAA,CAAS,KAAA,CACT,YAAA,CAAAC,CAAAA,CAAe,OAAA,CACf,OAAA,CAAAC,CAAAA,CAAU,CACZ,CAAA,CAAkB,CAChB,IAAMC,CAAAA,CAAW,CACf,MAAA,CAAQ,CACN,OAAA,CAAS,CAAA,CACT,MAAA,CAAQ,CAAA,KAAA,EAAQJ,CAAI,CAAA,GAAA,CAAA,CACpB,CAAA,CAAGG,CACL,CAAA,CACA,OAAA,CAAS,CACP,OAAA,CAAS,CAAA,CACT,MAAA,CAAQ,WAAA,CACR,CAAA,CAAG,CACL,CACF,CAAA,CAEA,OACEE,GAAAA,CAACC,MAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAWf,CAAAA,CAAGM,CAAS,CAAA,CACvB,OAAA,CAAQ,QAAA,CACR,OAAA,CAASI,CAAAA,CAAS,MAAA,CAAY,SAAA,CAC9B,WAAA,CAAaA,CAAAA,CAAS,SAAA,CAAY,MAAA,CAClC,QAAA,CAAU,CAAE,IAAA,CAAM,IAAA,CAAM,MAAA,CAAQC,CAAa,CAAA,CAC7C,QAAA,CAAUE,CAAAA,CACV,UAAA,CAAY,CACV,QAAA,CAAAL,CAAAA,CACA,KAAA,CAAAD,CAAAA,CACA,IAAA,CAAM,CAAC,GAAA,CAAM,EAAA,CAAK,GAAA,CAAM,CAAC,CAC3B,CAAA,CAEC,QAAA,CAAAF,CAAAA,CACH,CAEJ,CAEA,IAAOW,CAAAA,CAAQZ","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { ReactNode } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface BlurFadeProps {\r\n children: ReactNode;\r\n className?: string;\r\n delay?: number;\r\n duration?: number;\r\n blur?: number;\r\n inView?: boolean;\r\n inViewMargin?: string;\r\n yOffset?: number;\r\n}\r\n\r\nexport function BlurFade({\r\n children,\r\n className,\r\n delay = 0,\r\n duration = 0.8,\r\n blur = 10,\r\n inView = false,\r\n inViewMargin = \"-50px\",\r\n yOffset = 6,\r\n}: BlurFadeProps) {\r\n const variants = {\r\n hidden: {\r\n opacity: 0,\r\n filter: `blur(${blur}px)`,\r\n y: yOffset,\r\n },\r\n visible: {\r\n opacity: 1,\r\n filter: \"blur(0px)\",\r\n y: 0,\r\n },\r\n };\r\n\r\n return (\r\n <motion.div\r\n className={cn(className)}\r\n initial=\"hidden\"\r\n animate={inView ? undefined : \"visible\"}\r\n whileInView={inView ? \"visible\" : undefined}\r\n viewport={{ once: true, margin: inViewMargin }}\r\n variants={variants}\r\n transition={{\r\n duration,\r\n delay,\r\n ease: [0.25, 0.1, 0.25, 1],\r\n }}\r\n >\r\n {children}\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport default BlurFade;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),jsxRuntime=require('react/jsx-runtime');function z({sparkColor:d="#000000",sparkSize:g=10,sparkRadius:b=15,sparkCount:p=8,duration:h=400,easing:v="ease-out",extraScale:y=1,children:x}){let a=react.useRef(null),m=react.useRef([]),R=react.useRef(null);react.useEffect(()=>{let e=a.current;if(!e)return;let n=e.parentElement;if(!n)return;let r,s=()=>{let{width:c,height:o}=n.getBoundingClientRect();(e.width!==c||e.height!==o)&&(e.width=c,e.height=o);},i=()=>{clearTimeout(r),r=setTimeout(s,100);},t=new ResizeObserver(i);return t.observe(n),s(),()=>{t.disconnect(),clearTimeout(r);}},[]);let T=react.useCallback(e=>{switch(v){case "linear":return e;case "ease-in":return e*e;case "ease-in-out":return e<.5?2*e*e:-1+(4-2*e)*e;default:return e*(2-e)}},[v]);return react.useEffect(()=>{let e=a.current;if(!e)return;let n=e.getContext("2d");if(!n)return;let r,s=i=>{R.current||(R.current=i),n.clearRect(0,0,e.width,e.height),m.current=m.current.filter(t=>{let c=i-t.startTime;if(c>=h)return false;let o=c/h,u=T(o),l=u*b*y,w=g*(1-u),k=t.x+l*Math.cos(t.angle),M=t.y+l*Math.sin(t.angle),S=t.x+(l+w)*Math.cos(t.angle),A=t.y+(l+w)*Math.sin(t.angle);return n.strokeStyle=d,n.lineWidth=2,n.beginPath(),n.moveTo(k,M),n.lineTo(S,A),n.stroke(),true}),r=requestAnimationFrame(s);};return r=requestAnimationFrame(s),()=>{cancelAnimationFrame(r);}},[d,g,b,h,T,y]),jsxRuntime.jsxs("div",{style:{position:"relative",width:"100%",height:"100%"},onClick:e=>{let n=a.current;if(!n)return;let r=n.getBoundingClientRect(),s=e.clientX-r.left,i=e.clientY-r.top,t=performance.now(),c=Array.from({length:p},(o,u)=>({x:s,y:i,angle:2*Math.PI*u/p,startTime:t}));m.current.push(...c);},children:[jsxRuntime.jsx("canvas",{ref:a,style:{width:"100%",height:"100%",display:"block",userSelect:"none",position:"absolute",top:0,left:0,pointerEvents:"none"}}),x]})}var L=z;exports.ClickSpark=z;exports.default=L;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/click-spark/index.tsx"],"names":["ClickSpark","sparkColor","sparkSize","sparkRadius","sparkCount","duration","easing","extraScale","children","canvasRef","useRef","sparksRef","startTimeRef","useEffect","canvas","parent","resizeTimeout","resizeCanvas","width","height","handleResize","ro","easeFunc","useCallback","t","ctx","animationId","draw","timestamp","spark","elapsed","progress","eased","distance","lineLength","x1","y1","x2","y2","jsxs","rect","x","y","now","newSparks","_","i","jsx","click_spark_default"],"mappings":"yIAeO,SAASA,CAAAA,CAAW,CACzB,UAAA,CAAAC,CAAAA,CAAa,SAAA,CACb,UAAAC,CAAAA,CAAY,EAAA,CACZ,WAAA,CAAAC,CAAAA,CAAc,EAAA,CACd,UAAA,CAAAC,EAAa,CAAA,CACb,QAAA,CAAAC,CAAAA,CAAW,GAAA,CACX,MAAA,CAAAC,CAAAA,CAAS,WACT,UAAA,CAAAC,CAAAA,CAAa,CAAA,CACb,QAAA,CAAAC,CACF,CAAA,CAAoB,CAClB,IAAMC,CAAAA,CAAYC,YAAAA,CAA0B,IAAI,CAAA,CAC1CC,CAAAA,CAAYD,aAOhB,EAAE,CAAA,CACEE,CAAAA,CAAeF,YAAAA,CAAsB,IAAI,EAE/CG,eAAAA,CAAU,IAAM,CACd,IAAMC,CAAAA,CAASL,CAAAA,CAAU,QACzB,GAAI,CAACK,CAAAA,CAAQ,OAEb,IAAMC,CAAAA,CAASD,EAAO,aAAA,CACtB,GAAI,CAACC,CAAAA,CAAQ,OAEb,IAAIC,EAEEC,CAAAA,CAAe,IAAM,CACzB,GAAM,CAAE,KAAA,CAAAC,EAAO,MAAA,CAAAC,CAAO,CAAA,CAAIJ,CAAAA,CAAO,qBAAA,EAAsB,CAAA,CACnDD,EAAO,KAAA,GAAUI,CAAAA,EAASJ,CAAAA,CAAO,MAAA,GAAWK,CAAAA,IAC9CL,CAAAA,CAAO,MAAQI,CAAAA,CACfJ,CAAAA,CAAO,MAAA,CAASK,CAAAA,EAEpB,CAAA,CAEMC,CAAAA,CAAe,IAAM,CACzB,YAAA,CAAaJ,CAAa,CAAA,CAC1BA,CAAAA,CAAgB,UAAA,CAAWC,EAAc,GAAG,EAC9C,CAAA,CAEMI,CAAAA,CAAK,IAAI,cAAA,CAAeD,CAAY,CAAA,CAC1C,OAAAC,CAAAA,CAAG,OAAA,CAAQN,CAAM,CAAA,CAEjBE,GAAa,CAEN,IAAM,CACXI,CAAAA,CAAG,UAAA,EAAW,CACd,aAAaL,CAAa,EAC5B,CACF,CAAA,CAAG,EAAE,EAEL,IAAMM,CAAAA,CAAWC,iBAAAA,CACdC,CAAAA,EAAc,CACb,OAAQlB,GACN,KAAK,QAAA,CACH,OAAOkB,CAAAA,CACT,KAAK,UACH,OAAOA,CAAAA,CAAIA,CAAAA,CACb,KAAK,aAAA,CACH,OAAOA,EAAI,EAAA,CAAM,CAAA,CAAIA,CAAAA,CAAIA,CAAAA,CAAI,EAAA,CAAA,CAAM,CAAA,CAAI,EAAIA,CAAAA,EAAKA,CAAAA,CAClD,QACE,OAAOA,CAAAA,EAAK,CAAA,CAAIA,EACpB,CACF,CAAA,CACA,CAAClB,CAAM,CACT,CAAA,CAEA,OAAAO,eAAAA,CAAU,IAAM,CACd,IAAMC,CAAAA,CAASL,CAAAA,CAAU,QACzB,GAAI,CAACK,CAAAA,CAAQ,OACb,IAAMW,CAAAA,CAAMX,EAAO,UAAA,CAAW,IAAI,CAAA,CAClC,GAAI,CAACW,CAAAA,CAAK,OAEV,IAAIC,CAAAA,CAEEC,CAAAA,CAAQC,CAAAA,EAAsB,CAC7BhB,CAAAA,CAAa,UAChBA,CAAAA,CAAa,OAAA,CAAUgB,CAAAA,CAAAA,CAEzBH,CAAAA,CAAI,SAAA,CAAU,CAAA,CAAG,CAAA,CAAGX,CAAAA,CAAO,KAAA,CAAOA,CAAAA,CAAO,MAAM,CAAA,CAE/CH,CAAAA,CAAU,OAAA,CAAUA,EAAU,OAAA,CAAQ,MAAA,CAAQkB,CAAAA,EAAU,CACtD,IAAMC,CAAAA,CAAUF,EAAYC,CAAAA,CAAM,SAAA,CAClC,GAAIC,CAAAA,EAAWzB,CAAAA,CACb,OAAO,OAGT,IAAM0B,CAAAA,CAAWD,CAAAA,CAAUzB,CAAAA,CACrB2B,CAAAA,CAAQV,CAAAA,CAASS,CAAQ,CAAA,CAEzBE,CAAAA,CAAWD,CAAAA,CAAQ7B,CAAAA,CAAcI,CAAAA,CACjC2B,CAAAA,CAAahC,GAAa,CAAA,CAAI8B,CAAAA,CAAAA,CAE9BG,CAAAA,CAAKN,CAAAA,CAAM,CAAA,CAAII,CAAAA,CAAW,KAAK,GAAA,CAAIJ,CAAAA,CAAM,KAAK,CAAA,CAC9CO,CAAAA,CAAKP,CAAAA,CAAM,EAAII,CAAAA,CAAW,IAAA,CAAK,GAAA,CAAIJ,CAAAA,CAAM,KAAK,CAAA,CAC9CQ,EAAKR,CAAAA,CAAM,CAAA,CAAA,CAAKI,CAAAA,CAAWC,CAAAA,EAAc,IAAA,CAAK,GAAA,CAAIL,EAAM,KAAK,CAAA,CAC7DS,CAAAA,CAAKT,CAAAA,CAAM,CAAA,CAAA,CAAKI,CAAAA,CAAWC,GAAc,IAAA,CAAK,GAAA,CAAIL,CAAAA,CAAM,KAAK,CAAA,CAEnE,OAAAJ,EAAI,WAAA,CAAcxB,CAAAA,CAClBwB,CAAAA,CAAI,SAAA,CAAY,CAAA,CAChBA,CAAAA,CAAI,WAAU,CACdA,CAAAA,CAAI,MAAA,CAAOU,CAAAA,CAAIC,CAAE,CAAA,CACjBX,EAAI,MAAA,CAAOY,CAAAA,CAAIC,CAAE,CAAA,CACjBb,CAAAA,CAAI,MAAA,GAEG,IACT,CAAC,CAAA,CAEDC,CAAAA,CAAc,qBAAA,CAAsBC,CAAI,EAC1C,CAAA,CAEA,OAAAD,CAAAA,CAAc,qBAAA,CAAsBC,CAAI,CAAA,CAEjC,IAAM,CACX,oBAAA,CAAqBD,CAAW,EAClC,CACF,CAAA,CAAG,CAACzB,CAAAA,CAAYC,CAAAA,CAAWC,CAAAA,CAAaE,CAAAA,CAAUiB,CAAAA,CAAUf,CAAU,CAAC,CAAA,CAqBrEgC,eAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,QAAA,CAAU,WACV,KAAA,CAAO,MAAA,CACP,MAAA,CAAQ,MACV,CAAA,CACA,OAAA,CAzBiB,GAAwB,CAC3C,IAAMzB,CAAAA,CAASL,CAAAA,CAAU,OAAA,CACzB,GAAI,CAACK,CAAAA,CAAQ,OACb,IAAM0B,CAAAA,CAAO1B,CAAAA,CAAO,qBAAA,GACd2B,CAAAA,CAAI,CAAA,CAAE,OAAA,CAAUD,CAAAA,CAAK,IAAA,CACrBE,CAAAA,CAAI,EAAE,OAAA,CAAUF,CAAAA,CAAK,GAAA,CAErBG,CAAAA,CAAM,WAAA,CAAY,GAAA,GAClBC,CAAAA,CAAY,KAAA,CAAM,IAAA,CAAK,CAAE,MAAA,CAAQxC,CAAW,EAAG,CAACyC,CAAAA,CAAGC,CAAAA,IAAO,CAC9D,CAAA,CAAAL,CAAAA,CACA,EAAAC,CAAAA,CACA,KAAA,CAAQ,CAAA,CAAI,IAAA,CAAK,EAAA,CAAKI,CAAAA,CAAK1C,EAC3B,SAAA,CAAWuC,CACb,CAAA,CAAE,CAAA,CAEFhC,CAAAA,CAAU,OAAA,CAAQ,KAAK,GAAGiC,CAAS,EACrC,CAAA,CAWI,QAAA,CAAA,CAAAG,cAAAA,CAAC,UACC,GAAA,CAAKtC,CAAAA,CACL,KAAA,CAAO,CACL,KAAA,CAAO,MAAA,CACP,OAAQ,MAAA,CACR,OAAA,CAAS,OAAA,CACT,UAAA,CAAY,MAAA,CACZ,QAAA,CAAU,WACV,GAAA,CAAK,CAAA,CACL,IAAA,CAAM,CAAA,CACN,aAAA,CAAe,MACjB,CAAA,CACF,CAAA,CACCD,CAAAA,CAAAA,CACH,CAEJ,CAEA,IAAOwC,CAAAA,CAAQhD","file":"index.js","sourcesContent":["\"use client\";\r\n\r\nimport { useRef, useEffect, useCallback, ReactNode } from \"react\";\r\n\r\ninterface ClickSparkProps {\r\n sparkColor?: string;\r\n sparkSize?: number;\r\n sparkRadius?: number;\r\n sparkCount?: number;\r\n duration?: number;\r\n easing?: string;\r\n extraScale?: number;\r\n children: ReactNode;\r\n}\r\n\r\nexport function ClickSpark({\r\n sparkColor = \"#000000\",\r\n sparkSize = 10,\r\n sparkRadius = 15,\r\n sparkCount = 8,\r\n duration = 400,\r\n easing = \"ease-out\",\r\n extraScale = 1.0,\r\n children,\r\n}: ClickSparkProps) {\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const sparksRef = useRef<\r\n Array<{\r\n x: number;\r\n y: number;\r\n angle: number;\r\n startTime: number;\r\n }>\r\n >([]);\r\n const startTimeRef = useRef<number | null>(null);\r\n\r\n useEffect(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n\r\n const parent = canvas.parentElement;\r\n if (!parent) return;\r\n\r\n let resizeTimeout: ReturnType<typeof setTimeout>;\r\n\r\n const resizeCanvas = () => {\r\n const { width, height } = parent.getBoundingClientRect();\r\n if (canvas.width !== width || canvas.height !== height) {\r\n canvas.width = width;\r\n canvas.height = height;\r\n }\r\n };\r\n\r\n const handleResize = () => {\r\n clearTimeout(resizeTimeout);\r\n resizeTimeout = setTimeout(resizeCanvas, 100);\r\n };\r\n\r\n const ro = new ResizeObserver(handleResize);\r\n ro.observe(parent);\r\n\r\n resizeCanvas();\r\n\r\n return () => {\r\n ro.disconnect();\r\n clearTimeout(resizeTimeout);\r\n };\r\n }, []);\r\n\r\n const easeFunc = useCallback(\r\n (t: number) => {\r\n switch (easing) {\r\n case \"linear\":\r\n return t;\r\n case \"ease-in\":\r\n return t * t;\r\n case \"ease-in-out\":\r\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\r\n default:\r\n return t * (2 - t);\r\n }\r\n },\r\n [easing]\r\n );\r\n\r\n useEffect(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n let animationId: number;\r\n\r\n const draw = (timestamp: number) => {\r\n if (!startTimeRef.current) {\r\n startTimeRef.current = timestamp;\r\n }\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n sparksRef.current = sparksRef.current.filter((spark) => {\r\n const elapsed = timestamp - spark.startTime;\r\n if (elapsed >= duration) {\r\n return false;\r\n }\r\n\r\n const progress = elapsed / duration;\r\n const eased = easeFunc(progress);\r\n\r\n const distance = eased * sparkRadius * extraScale;\r\n const lineLength = sparkSize * (1 - eased);\r\n\r\n const x1 = spark.x + distance * Math.cos(spark.angle);\r\n const y1 = spark.y + distance * Math.sin(spark.angle);\r\n const x2 = spark.x + (distance + lineLength) * Math.cos(spark.angle);\r\n const y2 = spark.y + (distance + lineLength) * Math.sin(spark.angle);\r\n\r\n ctx.strokeStyle = sparkColor;\r\n ctx.lineWidth = 2;\r\n ctx.beginPath();\r\n ctx.moveTo(x1, y1);\r\n ctx.lineTo(x2, y2);\r\n ctx.stroke();\r\n\r\n return true;\r\n });\r\n\r\n animationId = requestAnimationFrame(draw);\r\n };\r\n\r\n animationId = requestAnimationFrame(draw);\r\n\r\n return () => {\r\n cancelAnimationFrame(animationId);\r\n };\r\n }, [sparkColor, sparkSize, sparkRadius, duration, easeFunc, extraScale]);\r\n\r\n const handleClick = (e: React.MouseEvent) => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n const rect = canvas.getBoundingClientRect();\r\n const x = e.clientX - rect.left;\r\n const y = e.clientY - rect.top;\r\n\r\n const now = performance.now();\r\n const newSparks = Array.from({ length: sparkCount }, (_, i) => ({\r\n x,\r\n y,\r\n angle: (2 * Math.PI * i) / sparkCount,\r\n startTime: now,\r\n }));\r\n\r\n sparksRef.current.push(...newSparks);\r\n };\r\n\r\n return (\r\n <div\r\n style={{\r\n position: \"relative\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n }}\r\n onClick={handleClick}\r\n >\r\n <canvas\r\n ref={canvasRef}\r\n style={{\r\n width: \"100%\",\r\n height: \"100%\",\r\n display: \"block\",\r\n userSelect: \"none\",\r\n position: \"absolute\",\r\n top: 0,\r\n left: 0,\r\n pointerEvents: \"none\",\r\n }}\r\n />\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport default ClickSpark;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useRef,useEffect,useCallback}from'react';import {jsxs,jsx}from'react/jsx-runtime';function z({sparkColor:d="#000000",sparkSize:g=10,sparkRadius:b=15,sparkCount:p=8,duration:h=400,easing:v="ease-out",extraScale:y=1,children:x}){let a=useRef(null),m=useRef([]),R=useRef(null);useEffect(()=>{let e=a.current;if(!e)return;let n=e.parentElement;if(!n)return;let r,s=()=>{let{width:c,height:o}=n.getBoundingClientRect();(e.width!==c||e.height!==o)&&(e.width=c,e.height=o);},i=()=>{clearTimeout(r),r=setTimeout(s,100);},t=new ResizeObserver(i);return t.observe(n),s(),()=>{t.disconnect(),clearTimeout(r);}},[]);let T=useCallback(e=>{switch(v){case "linear":return e;case "ease-in":return e*e;case "ease-in-out":return e<.5?2*e*e:-1+(4-2*e)*e;default:return e*(2-e)}},[v]);return useEffect(()=>{let e=a.current;if(!e)return;let n=e.getContext("2d");if(!n)return;let r,s=i=>{R.current||(R.current=i),n.clearRect(0,0,e.width,e.height),m.current=m.current.filter(t=>{let c=i-t.startTime;if(c>=h)return false;let o=c/h,u=T(o),l=u*b*y,w=g*(1-u),k=t.x+l*Math.cos(t.angle),M=t.y+l*Math.sin(t.angle),S=t.x+(l+w)*Math.cos(t.angle),A=t.y+(l+w)*Math.sin(t.angle);return n.strokeStyle=d,n.lineWidth=2,n.beginPath(),n.moveTo(k,M),n.lineTo(S,A),n.stroke(),true}),r=requestAnimationFrame(s);};return r=requestAnimationFrame(s),()=>{cancelAnimationFrame(r);}},[d,g,b,h,T,y]),jsxs("div",{style:{position:"relative",width:"100%",height:"100%"},onClick:e=>{let n=a.current;if(!n)return;let r=n.getBoundingClientRect(),s=e.clientX-r.left,i=e.clientY-r.top,t=performance.now(),c=Array.from({length:p},(o,u)=>({x:s,y:i,angle:2*Math.PI*u/p,startTime:t}));m.current.push(...c);},children:[jsx("canvas",{ref:a,style:{width:"100%",height:"100%",display:"block",userSelect:"none",position:"absolute",top:0,left:0,pointerEvents:"none"}}),x]})}var L=z;export{z as ClickSpark,L as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/click-spark/index.tsx"],"names":["ClickSpark","sparkColor","sparkSize","sparkRadius","sparkCount","duration","easing","extraScale","children","canvasRef","useRef","sparksRef","startTimeRef","useEffect","canvas","parent","resizeTimeout","resizeCanvas","width","height","handleResize","ro","easeFunc","useCallback","t","ctx","animationId","draw","timestamp","spark","elapsed","progress","eased","distance","lineLength","x1","y1","x2","y2","jsxs","rect","x","y","now","newSparks","_","i","jsx","click_spark_default"],"mappings":"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","file":"index.mjs","sourcesContent":["\"use client\";\r\n\r\nimport { useRef, useEffect, useCallback, ReactNode } from \"react\";\r\n\r\ninterface ClickSparkProps {\r\n sparkColor?: string;\r\n sparkSize?: number;\r\n sparkRadius?: number;\r\n sparkCount?: number;\r\n duration?: number;\r\n easing?: string;\r\n extraScale?: number;\r\n children: ReactNode;\r\n}\r\n\r\nexport function ClickSpark({\r\n sparkColor = \"#000000\",\r\n sparkSize = 10,\r\n sparkRadius = 15,\r\n sparkCount = 8,\r\n duration = 400,\r\n easing = \"ease-out\",\r\n extraScale = 1.0,\r\n children,\r\n}: ClickSparkProps) {\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const sparksRef = useRef<\r\n Array<{\r\n x: number;\r\n y: number;\r\n angle: number;\r\n startTime: number;\r\n }>\r\n >([]);\r\n const startTimeRef = useRef<number | null>(null);\r\n\r\n useEffect(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n\r\n const parent = canvas.parentElement;\r\n if (!parent) return;\r\n\r\n let resizeTimeout: ReturnType<typeof setTimeout>;\r\n\r\n const resizeCanvas = () => {\r\n const { width, height } = parent.getBoundingClientRect();\r\n if (canvas.width !== width || canvas.height !== height) {\r\n canvas.width = width;\r\n canvas.height = height;\r\n }\r\n };\r\n\r\n const handleResize = () => {\r\n clearTimeout(resizeTimeout);\r\n resizeTimeout = setTimeout(resizeCanvas, 100);\r\n };\r\n\r\n const ro = new ResizeObserver(handleResize);\r\n ro.observe(parent);\r\n\r\n resizeCanvas();\r\n\r\n return () => {\r\n ro.disconnect();\r\n clearTimeout(resizeTimeout);\r\n };\r\n }, []);\r\n\r\n const easeFunc = useCallback(\r\n (t: number) => {\r\n switch (easing) {\r\n case \"linear\":\r\n return t;\r\n case \"ease-in\":\r\n return t * t;\r\n case \"ease-in-out\":\r\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\r\n default:\r\n return t * (2 - t);\r\n }\r\n },\r\n [easing]\r\n );\r\n\r\n useEffect(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n let animationId: number;\r\n\r\n const draw = (timestamp: number) => {\r\n if (!startTimeRef.current) {\r\n startTimeRef.current = timestamp;\r\n }\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n sparksRef.current = sparksRef.current.filter((spark) => {\r\n const elapsed = timestamp - spark.startTime;\r\n if (elapsed >= duration) {\r\n return false;\r\n }\r\n\r\n const progress = elapsed / duration;\r\n const eased = easeFunc(progress);\r\n\r\n const distance = eased * sparkRadius * extraScale;\r\n const lineLength = sparkSize * (1 - eased);\r\n\r\n const x1 = spark.x + distance * Math.cos(spark.angle);\r\n const y1 = spark.y + distance * Math.sin(spark.angle);\r\n const x2 = spark.x + (distance + lineLength) * Math.cos(spark.angle);\r\n const y2 = spark.y + (distance + lineLength) * Math.sin(spark.angle);\r\n\r\n ctx.strokeStyle = sparkColor;\r\n ctx.lineWidth = 2;\r\n ctx.beginPath();\r\n ctx.moveTo(x1, y1);\r\n ctx.lineTo(x2, y2);\r\n ctx.stroke();\r\n\r\n return true;\r\n });\r\n\r\n animationId = requestAnimationFrame(draw);\r\n };\r\n\r\n animationId = requestAnimationFrame(draw);\r\n\r\n return () => {\r\n cancelAnimationFrame(animationId);\r\n };\r\n }, [sparkColor, sparkSize, sparkRadius, duration, easeFunc, extraScale]);\r\n\r\n const handleClick = (e: React.MouseEvent) => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) return;\r\n const rect = canvas.getBoundingClientRect();\r\n const x = e.clientX - rect.left;\r\n const y = e.clientY - rect.top;\r\n\r\n const now = performance.now();\r\n const newSparks = Array.from({ length: sparkCount }, (_, i) => ({\r\n x,\r\n y,\r\n angle: (2 * Math.PI * i) / sparkCount,\r\n startTime: now,\r\n }));\r\n\r\n sparksRef.current.push(...newSparks);\r\n };\r\n\r\n return (\r\n <div\r\n style={{\r\n position: \"relative\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n }}\r\n onClick={handleClick}\r\n >\r\n <canvas\r\n ref={canvasRef}\r\n style={{\r\n width: \"100%\",\r\n height: \"100%\",\r\n display: \"block\",\r\n userSelect: \"none\",\r\n position: \"absolute\",\r\n top: 0,\r\n left: 0,\r\n pointerEvents: \"none\",\r\n }}\r\n />\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport default ClickSpark;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),framerMotion=require('framer-motion'),jsxRuntime=require('react/jsx-runtime');function m(...r){return r.filter(Boolean).join(" ")}function p({data:r,weeks:a=52,className:s,colors:n=["bg-zinc-100 dark:bg-zinc-800","bg-emerald-200 dark:bg-emerald-900","bg-emerald-300 dark:bg-emerald-700","bg-emerald-400 dark:bg-emerald-500","bg-emerald-500 dark:bg-emerald-400"]}){let d=react.useMemo(()=>r||Array.from({length:a*7},()=>Math.floor(Math.random()*5)),[r,a]),c=o=>n[Math.min(o,n.length-1)];return jsxRuntime.jsx("div",{className:m("overflow-x-auto",s),children:jsxRuntime.jsx("div",{className:"flex gap-1",children:Array.from({length:a}).map((o,t)=>jsxRuntime.jsx("div",{className:"flex flex-col gap-1",children:Array.from({length:7}).map((b,i)=>{let l=t*7+i,g=d[l]||0;return jsxRuntime.jsx(framerMotion.motion.div,{className:m("w-3 h-3 rounded-sm",c(g)),initial:{scale:0,opacity:0},animate:{scale:1,opacity:1},transition:{delay:l*.002,type:"spring",stiffness:300,damping:20},whileHover:{scale:1.3}},i)})},t))})})}var y=p;exports.ContributionGraph=p;exports.default=y;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/contribution-graph/index.tsx"],"names":["cn","classes","ContributionGraph","data","weeks","className","colors","contributions","useMemo","getColor","level","jsx","_","weekIndex","dayIndex","index","motion","contribution_graph_default"],"mappings":"+KAKA,SAASA,CAAAA,CAAAA,GAAMC,EAAyC,CACtD,OAAOA,EAAQ,MAAA,CAAO,OAAO,EAAE,IAAA,CAAK,GAAG,CACzC,CASO,SAASC,EAAkB,CAChC,IAAA,CAAAC,EACA,KAAA,CAAAC,CAAAA,CAAQ,GACR,SAAA,CAAAC,CAAAA,CACA,OAAAC,CAAAA,CAAS,CACP,+BACA,oCAAA,CACA,oCAAA,CACA,qCACA,oCACF,CACF,EAA2B,CACzB,IAAMC,CAAAA,CAAgBC,aAAAA,CAAQ,IACxBL,CAAAA,EACG,KAAA,CAAM,KAAK,CAAE,MAAA,CAAQC,EAAQ,CAAE,CAAA,CAAG,IAAM,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,EAAO,CAAI,CAAC,CAAC,CAAA,CAC3E,CAACD,CAAAA,CAAMC,CAAK,CAAC,CAAA,CAEVK,CAAAA,CAAYC,GAAkBJ,CAAAA,CAAO,IAAA,CAAK,IAAII,CAAAA,CAAOJ,CAAAA,CAAO,OAAS,CAAC,CAAC,EAE7E,OACEK,cAAAA,CAAC,OAAI,SAAA,CAAWX,CAAAA,CAAG,kBAAmBK,CAAS,CAAA,CAC7C,SAAAM,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YAAA,CACZ,eAAM,IAAA,CAAK,CAAE,OAAQP,CAAM,CAAC,EAAE,GAAA,CAAI,CAACQ,EAAGC,CAAAA,GACrCF,cAAAA,CAAC,OAAoB,SAAA,CAAU,qBAAA,CAC5B,eAAM,IAAA,CAAK,CAAE,OAAQ,CAAE,CAAC,EAAE,GAAA,CAAI,CAACC,EAAGE,CAAAA,GAAa,CAC9C,IAAMC,CAAAA,CAAQF,CAAAA,CAAY,EAAIC,CAAAA,CACxBJ,CAAAA,CAAQH,EAAcQ,CAAK,CAAA,EAAK,EACtC,OACEJ,cAAAA,CAACK,oBAAO,GAAA,CAAP,CAEC,UAAWhB,CAAAA,CACT,oBAAA,CACAS,EAASC,CAAK,CAChB,EACA,OAAA,CAAS,CAAE,MAAO,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CAChC,OAAA,CAAS,CAAE,KAAA,CAAO,CAAA,CAAG,QAAS,CAAE,CAAA,CAChC,WAAY,CACV,KAAA,CAAOK,EAAQ,IAAA,CACf,IAAA,CAAM,SACN,SAAA,CAAW,GAAA,CACX,QAAS,EACX,CAAA,CACA,WAAY,CAAE,KAAA,CAAO,GAAI,CAAA,CAAA,CAbpBD,CAcP,CAEJ,CAAC,CAAA,CAAA,CAtBOD,CAuBV,CACD,CAAA,CACH,EACF,CAEJ,KAEOI,CAAAA,CAAQf","file":"index.js","sourcesContent":["\"use client\";\r\n\r\nimport { useMemo } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\n\r\nfunction cn(...classes: (string | undefined | false)[]) {\r\n return classes.filter(Boolean).join(\" \");\r\n}\r\n\r\ninterface ContributionGraphProps {\r\n data?: number[];\r\n weeks?: number;\r\n className?: string;\r\n colors?: string[];\r\n}\r\n\r\nexport function ContributionGraph({\r\n data,\r\n weeks = 52,\r\n className,\r\n colors = [\r\n \"bg-zinc-100 dark:bg-zinc-800\",\r\n \"bg-emerald-200 dark:bg-emerald-900\",\r\n \"bg-emerald-300 dark:bg-emerald-700\",\r\n \"bg-emerald-400 dark:bg-emerald-500\",\r\n \"bg-emerald-500 dark:bg-emerald-400\",\r\n ],\r\n}: ContributionGraphProps) {\r\n const contributions = useMemo(() => {\r\n if (data) return data;\r\n return Array.from({ length: weeks * 7 }, () => Math.floor(Math.random() * 5));\r\n }, [data, weeks]);\r\n\r\n const getColor = (level: number) => colors[Math.min(level, colors.length - 1)];\r\n\r\n return (\r\n <div className={cn(\"overflow-x-auto\", className)}>\r\n <div className=\"flex gap-1\">\r\n {Array.from({ length: weeks }).map((_, weekIndex) => (\r\n <div key={weekIndex} className=\"flex flex-col gap-1\">\r\n {Array.from({ length: 7 }).map((_, dayIndex) => {\r\n const index = weekIndex * 7 + dayIndex;\r\n const level = contributions[index] || 0;\r\n return (\r\n <motion.div\r\n key={dayIndex}\r\n className={cn(\r\n \"w-3 h-3 rounded-sm\",\r\n getColor(level)\r\n )}\r\n initial={{ scale: 0, opacity: 0 }}\r\n animate={{ scale: 1, opacity: 1 }}\r\n transition={{\r\n delay: index * 0.002,\r\n type: \"spring\",\r\n stiffness: 300,\r\n damping: 20,\r\n }}\r\n whileHover={{ scale: 1.3 }}\r\n />\r\n );\r\n })}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default ContributionGraph;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useMemo}from'react';import {motion}from'framer-motion';import {jsx}from'react/jsx-runtime';function m(...r){return r.filter(Boolean).join(" ")}function p({data:r,weeks:a=52,className:s,colors:n=["bg-zinc-100 dark:bg-zinc-800","bg-emerald-200 dark:bg-emerald-900","bg-emerald-300 dark:bg-emerald-700","bg-emerald-400 dark:bg-emerald-500","bg-emerald-500 dark:bg-emerald-400"]}){let d=useMemo(()=>r||Array.from({length:a*7},()=>Math.floor(Math.random()*5)),[r,a]),c=o=>n[Math.min(o,n.length-1)];return jsx("div",{className:m("overflow-x-auto",s),children:jsx("div",{className:"flex gap-1",children:Array.from({length:a}).map((o,t)=>jsx("div",{className:"flex flex-col gap-1",children:Array.from({length:7}).map((b,i)=>{let l=t*7+i,g=d[l]||0;return jsx(motion.div,{className:m("w-3 h-3 rounded-sm",c(g)),initial:{scale:0,opacity:0},animate:{scale:1,opacity:1},transition:{delay:l*.002,type:"spring",stiffness:300,damping:20},whileHover:{scale:1.3}},i)})},t))})})}var y=p;export{p as ContributionGraph,y as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/contribution-graph/index.tsx"],"names":["cn","classes","ContributionGraph","data","weeks","className","colors","contributions","useMemo","getColor","level","jsx","_","weekIndex","dayIndex","index","motion","contribution_graph_default"],"mappings":"mGAKA,SAASA,CAAAA,CAAAA,GAAMC,EAAyC,CACtD,OAAOA,EAAQ,MAAA,CAAO,OAAO,EAAE,IAAA,CAAK,GAAG,CACzC,CASO,SAASC,EAAkB,CAChC,IAAA,CAAAC,EACA,KAAA,CAAAC,CAAAA,CAAQ,GACR,SAAA,CAAAC,CAAAA,CACA,OAAAC,CAAAA,CAAS,CACP,+BACA,oCAAA,CACA,oCAAA,CACA,qCACA,oCACF,CACF,EAA2B,CACzB,IAAMC,CAAAA,CAAgBC,OAAAA,CAAQ,IACxBL,CAAAA,EACG,KAAA,CAAM,KAAK,CAAE,MAAA,CAAQC,EAAQ,CAAE,CAAA,CAAG,IAAM,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,EAAO,CAAI,CAAC,CAAC,CAAA,CAC3E,CAACD,CAAAA,CAAMC,CAAK,CAAC,CAAA,CAEVK,CAAAA,CAAYC,GAAkBJ,CAAAA,CAAO,IAAA,CAAK,IAAII,CAAAA,CAAOJ,CAAAA,CAAO,OAAS,CAAC,CAAC,EAE7E,OACEK,GAAAA,CAAC,OAAI,SAAA,CAAWX,CAAAA,CAAG,kBAAmBK,CAAS,CAAA,CAC7C,SAAAM,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,YAAA,CACZ,eAAM,IAAA,CAAK,CAAE,OAAQP,CAAM,CAAC,EAAE,GAAA,CAAI,CAACQ,EAAGC,CAAAA,GACrCF,GAAAA,CAAC,OAAoB,SAAA,CAAU,qBAAA,CAC5B,eAAM,IAAA,CAAK,CAAE,OAAQ,CAAE,CAAC,EAAE,GAAA,CAAI,CAACC,EAAGE,CAAAA,GAAa,CAC9C,IAAMC,CAAAA,CAAQF,CAAAA,CAAY,EAAIC,CAAAA,CACxBJ,CAAAA,CAAQH,EAAcQ,CAAK,CAAA,EAAK,EACtC,OACEJ,GAAAA,CAACK,OAAO,GAAA,CAAP,CAEC,UAAWhB,CAAAA,CACT,oBAAA,CACAS,EAASC,CAAK,CAChB,EACA,OAAA,CAAS,CAAE,MAAO,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CAChC,OAAA,CAAS,CAAE,KAAA,CAAO,CAAA,CAAG,QAAS,CAAE,CAAA,CAChC,WAAY,CACV,KAAA,CAAOK,EAAQ,IAAA,CACf,IAAA,CAAM,SACN,SAAA,CAAW,GAAA,CACX,QAAS,EACX,CAAA,CACA,WAAY,CAAE,KAAA,CAAO,GAAI,CAAA,CAAA,CAbpBD,CAcP,CAEJ,CAAC,CAAA,CAAA,CAtBOD,CAuBV,CACD,CAAA,CACH,EACF,CAEJ,KAEOI,CAAAA,CAAQf","file":"index.mjs","sourcesContent":["\"use client\";\r\n\r\nimport { useMemo } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\n\r\nfunction cn(...classes: (string | undefined | false)[]) {\r\n return classes.filter(Boolean).join(\" \");\r\n}\r\n\r\ninterface ContributionGraphProps {\r\n data?: number[];\r\n weeks?: number;\r\n className?: string;\r\n colors?: string[];\r\n}\r\n\r\nexport function ContributionGraph({\r\n data,\r\n weeks = 52,\r\n className,\r\n colors = [\r\n \"bg-zinc-100 dark:bg-zinc-800\",\r\n \"bg-emerald-200 dark:bg-emerald-900\",\r\n \"bg-emerald-300 dark:bg-emerald-700\",\r\n \"bg-emerald-400 dark:bg-emerald-500\",\r\n \"bg-emerald-500 dark:bg-emerald-400\",\r\n ],\r\n}: ContributionGraphProps) {\r\n const contributions = useMemo(() => {\r\n if (data) return data;\r\n return Array.from({ length: weeks * 7 }, () => Math.floor(Math.random() * 5));\r\n }, [data, weeks]);\r\n\r\n const getColor = (level: number) => colors[Math.min(level, colors.length - 1)];\r\n\r\n return (\r\n <div className={cn(\"overflow-x-auto\", className)}>\r\n <div className=\"flex gap-1\">\r\n {Array.from({ length: weeks }).map((_, weekIndex) => (\r\n <div key={weekIndex} className=\"flex flex-col gap-1\">\r\n {Array.from({ length: 7 }).map((_, dayIndex) => {\r\n const index = weekIndex * 7 + dayIndex;\r\n const level = contributions[index] || 0;\r\n return (\r\n <motion.div\r\n key={dayIndex}\r\n className={cn(\r\n \"w-3 h-3 rounded-sm\",\r\n getColor(level)\r\n )}\r\n initial={{ scale: 0, opacity: 0 }}\r\n animate={{ scale: 1, opacity: 1 }}\r\n transition={{\r\n delay: index * 0.002,\r\n type: \"spring\",\r\n stiffness: 300,\r\n damping: 20,\r\n }}\r\n whileHover={{ scale: 1.3 }}\r\n />\r\n );\r\n })}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default ContributionGraph;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),framerMotion=require('framer-motion'),jsxRuntime=require('react/jsx-runtime');function l(...n){return n.filter(Boolean).join(" ")}function w({defaultValue:n=50,min:s=0,max:o=100,step:m=1,onChange:g,className:f,trackClassName:p,thumbClassName:b}){let[r,h]=react.useState(n),[e,t]=react.useState(false),u=(r-s)/(o-s)*100,v=N=>{let c=Number(N.target.value);h(c),g?.(c);};return jsxRuntime.jsxs("div",{className:l("relative w-full h-12 flex items-center",f),children:[jsxRuntime.jsx("div",{className:l("absolute w-full h-2 rounded-full bg-zinc-200 dark:bg-zinc-800",p),children:jsxRuntime.jsx(framerMotion.motion.div,{className:"h-full rounded-full bg-zinc-900 dark:bg-zinc-100",style:{width:`${u}%`},animate:{scaleY:e?1.5:1},transition:{type:"spring",stiffness:400,damping:25}})}),jsxRuntime.jsx(framerMotion.motion.div,{className:l("absolute w-6 h-6 rounded-full bg-zinc-900 dark:bg-zinc-100 shadow-lg cursor-grab","border-2 border-white dark:border-zinc-900",b),style:{left:`calc(${u}% - 12px)`},animate:{scale:e?1.3:1,y:e?-4:0},transition:{type:"spring",stiffness:500,damping:30}}),jsxRuntime.jsx("input",{type:"range",min:s,max:o,step:m,value:r,onChange:v,onMouseDown:()=>t(true),onMouseUp:()=>t(false),onTouchStart:()=>t(true),onTouchEnd:()=>t(false),className:"absolute w-full h-full opacity-0 cursor-grab active:cursor-grabbing"}),jsxRuntime.jsx(framerMotion.motion.span,{className:"absolute -top-8 left-1/2 -translate-x-1/2 text-sm font-medium text-zinc-900 dark:text-zinc-100",animate:{opacity:e?1:0,y:e?0:10},transition:{duration:.2},children:r})]})}var S=w;exports.ElasticSlider=w;exports.default=S;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/elastic-slider/index.tsx"],"names":["cn","classes","ElasticSlider","defaultValue","min","max","step","onChange","className","trackClassName","thumbClassName","value","setValue","useState","isDragging","setIsDragging","percentage","handleChange","e","newValue","jsxs","jsx","motion","elastic_slider_default"],"mappings":"+KAKA,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAyC,CACtD,OAAOA,CAAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CACzC,CAaO,SAASC,CAAAA,CAAc,CAC5B,YAAA,CAAAC,CAAAA,CAAe,EAAA,CACf,GAAA,CAAAC,CAAAA,CAAM,CAAA,CACN,GAAA,CAAAC,CAAAA,CAAM,GAAA,CACN,IAAA,CAAAC,CAAAA,CAAO,CAAA,CACP,QAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,cAAA,CAAAC,CAAAA,CACA,cAAA,CAAAC,CACF,CAAA,CAAuB,CACrB,GAAM,CAACC,CAAAA,CAAOC,CAAQ,CAAA,CAAIC,cAAAA,CAASV,CAAY,CAAA,CACzC,CAACW,CAAAA,CAAYC,CAAa,CAAA,CAAIF,cAAAA,CAAS,KAAK,CAAA,CAE5CG,CAAAA,CAAAA,CAAeL,CAAAA,CAAQP,CAAAA,GAAQC,CAAAA,CAAMD,CAAAA,CAAAA,CAAQ,GAAA,CAE7Ca,CAAAA,CAAgBC,CAAAA,EAA2C,CAC/D,IAAMC,CAAAA,CAAW,MAAA,CAAOD,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CACtCN,CAAAA,CAASO,CAAQ,CAAA,CACjBZ,CAAAA,GAAWY,CAAQ,EACrB,CAAA,CAEA,OACEC,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWpB,CAAAA,CAAG,wCAAA,CAA0CQ,CAAS,CAAA,CACpE,QAAA,CAAA,CAAAa,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWrB,CAAAA,CACd,+DAAA,CACAS,CACF,CAAA,CACE,QAAA,CAAAY,cAAAA,CAACC,mBAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAU,kDAAA,CACV,KAAA,CAAO,CAAE,KAAA,CAAO,CAAA,EAAGN,CAAU,CAAA,CAAA,CAAI,CAAA,CACjC,OAAA,CAAS,CAAE,MAAA,CAAQF,CAAAA,CAAa,GAAA,CAAM,CAAE,CAAA,CACxC,UAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,SAAA,CAAW,GAAA,CAAK,OAAA,CAAS,EAAG,CAAA,CAC5D,EACF,CAAA,CAEAO,cAAAA,CAACC,mBAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAWtB,CAAAA,CACT,kFAAA,CACA,4CAAA,CACAU,CACF,CAAA,CACA,KAAA,CAAO,CAAE,IAAA,CAAM,QAAQM,CAAU,CAAA,SAAA,CAAY,CAAA,CAC7C,OAAA,CAAS,CACP,KAAA,CAAOF,CAAAA,CAAa,GAAA,CAAM,CAAA,CAC1B,CAAA,CAAGA,CAAAA,CAAa,EAAA,CAAK,CACvB,CAAA,CACA,UAAA,CAAY,CAAE,IAAA,CAAM,QAAA,CAAU,SAAA,CAAW,GAAA,CAAK,OAAA,CAAS,EAAG,CAAA,CAC5D,CAAA,CAEAO,cAAAA,CAAC,OAAA,CAAA,CACC,IAAA,CAAK,OAAA,CACL,GAAA,CAAKjB,CAAAA,CACL,IAAKC,CAAAA,CACL,IAAA,CAAMC,CAAAA,CACN,KAAA,CAAOK,CAAAA,CACP,QAAA,CAAUM,CAAAA,CACV,WAAA,CAAa,IAAMF,CAAAA,CAAc,IAAI,CAAA,CACrC,SAAA,CAAW,IAAMA,EAAc,KAAK,CAAA,CACpC,YAAA,CAAc,IAAMA,CAAAA,CAAc,IAAI,CAAA,CACtC,UAAA,CAAY,IAAMA,CAAAA,CAAc,KAAK,CAAA,CACrC,SAAA,CAAU,qEAAA,CACZ,EAEAM,cAAAA,CAACC,mBAAAA,CAAO,IAAA,CAAP,CACC,SAAA,CAAU,gGAAA,CACV,OAAA,CAAS,CAAE,OAAA,CAASR,CAAAA,CAAa,CAAA,CAAI,CAAA,CAAG,CAAA,CAAGA,CAAAA,CAAa,CAAA,CAAI,EAAG,CAAA,CAC/D,UAAA,CAAY,CAAE,QAAA,CAAU,EAAI,CAAA,CAE3B,QAAA,CAAAH,CAAAA,CACH,CAAA,CAAA,CACF,CAEJ,CAEA,IAAOY,CAAAA,CAAQrB","file":"index.js","sourcesContent":["\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { motion, useMotionValue, useTransform, animate } from \"framer-motion\";\r\n\r\nfunction cn(...classes: (string | undefined | false)[]) {\r\n return classes.filter(Boolean).join(\" \");\r\n}\r\n\r\ninterface ElasticSliderProps {\r\n defaultValue?: number;\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n onChange?: (value: number) => void;\r\n className?: string;\r\n trackClassName?: string;\r\n thumbClassName?: string;\r\n}\r\n\r\nexport function ElasticSlider({\r\n defaultValue = 50,\r\n min = 0,\r\n max = 100,\r\n step = 1,\r\n onChange,\r\n className,\r\n trackClassName,\r\n thumbClassName,\r\n}: ElasticSliderProps) {\r\n const [value, setValue] = useState(defaultValue);\r\n const [isDragging, setIsDragging] = useState(false);\r\n \r\n const percentage = ((value - min) / (max - min)) * 100;\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newValue = Number(e.target.value);\r\n setValue(newValue);\r\n onChange?.(newValue);\r\n };\r\n\r\n return (\r\n <div className={cn(\"relative w-full h-12 flex items-center\", className)}>\r\n <div className={cn(\r\n \"absolute w-full h-2 rounded-full bg-zinc-200 dark:bg-zinc-800\",\r\n trackClassName\r\n )}>\r\n <motion.div\r\n className=\"h-full rounded-full bg-zinc-900 dark:bg-zinc-100\"\r\n style={{ width: `${percentage}%` }}\r\n animate={{ scaleY: isDragging ? 1.5 : 1 }}\r\n transition={{ type: \"spring\", stiffness: 400, damping: 25 }}\r\n />\r\n </div>\r\n \r\n <motion.div\r\n className={cn(\r\n \"absolute w-6 h-6 rounded-full bg-zinc-900 dark:bg-zinc-100 shadow-lg cursor-grab\",\r\n \"border-2 border-white dark:border-zinc-900\",\r\n thumbClassName\r\n )}\r\n style={{ left: `calc(${percentage}% - 12px)` }}\r\n animate={{ \r\n scale: isDragging ? 1.3 : 1,\r\n y: isDragging ? -4 : 0\r\n }}\r\n transition={{ type: \"spring\", stiffness: 500, damping: 30 }}\r\n />\r\n \r\n <input\r\n type=\"range\"\r\n min={min}\r\n max={max}\r\n step={step}\r\n value={value}\r\n onChange={handleChange}\r\n onMouseDown={() => setIsDragging(true)}\r\n onMouseUp={() => setIsDragging(false)}\r\n onTouchStart={() => setIsDragging(true)}\r\n onTouchEnd={() => setIsDragging(false)}\r\n className=\"absolute w-full h-full opacity-0 cursor-grab active:cursor-grabbing\"\r\n />\r\n \r\n <motion.span\r\n className=\"absolute -top-8 left-1/2 -translate-x-1/2 text-sm font-medium text-zinc-900 dark:text-zinc-100\"\r\n animate={{ opacity: isDragging ? 1 : 0, y: isDragging ? 0 : 10 }}\r\n transition={{ duration: 0.2 }}\r\n >\r\n {value}\r\n </motion.span>\r\n </div>\r\n );\r\n}\r\n\r\nexport default ElasticSlider;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useState}from'react';import {motion}from'framer-motion';import {jsxs,jsx}from'react/jsx-runtime';function l(...n){return n.filter(Boolean).join(" ")}function w({defaultValue:n=50,min:s=0,max:o=100,step:m=1,onChange:g,className:f,trackClassName:p,thumbClassName:b}){let[r,h]=useState(n),[e,t]=useState(false),u=(r-s)/(o-s)*100,v=N=>{let c=Number(N.target.value);h(c),g?.(c);};return jsxs("div",{className:l("relative w-full h-12 flex items-center",f),children:[jsx("div",{className:l("absolute w-full h-2 rounded-full bg-zinc-200 dark:bg-zinc-800",p),children:jsx(motion.div,{className:"h-full rounded-full bg-zinc-900 dark:bg-zinc-100",style:{width:`${u}%`},animate:{scaleY:e?1.5:1},transition:{type:"spring",stiffness:400,damping:25}})}),jsx(motion.div,{className:l("absolute w-6 h-6 rounded-full bg-zinc-900 dark:bg-zinc-100 shadow-lg cursor-grab","border-2 border-white dark:border-zinc-900",b),style:{left:`calc(${u}% - 12px)`},animate:{scale:e?1.3:1,y:e?-4:0},transition:{type:"spring",stiffness:500,damping:30}}),jsx("input",{type:"range",min:s,max:o,step:m,value:r,onChange:v,onMouseDown:()=>t(true),onMouseUp:()=>t(false),onTouchStart:()=>t(true),onTouchEnd:()=>t(false),className:"absolute w-full h-full opacity-0 cursor-grab active:cursor-grabbing"}),jsx(motion.span,{className:"absolute -top-8 left-1/2 -translate-x-1/2 text-sm font-medium text-zinc-900 dark:text-zinc-100",animate:{opacity:e?1:0,y:e?0:10},transition:{duration:.2},children:r})]})}var S=w;export{w as ElasticSlider,S as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/elastic-slider/index.tsx"],"names":["cn","classes","ElasticSlider","defaultValue","min","max","step","onChange","className","trackClassName","thumbClassName","value","setValue","useState","isDragging","setIsDragging","percentage","handleChange","e","newValue","jsxs","jsx","motion","elastic_slider_default"],"mappings":"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","file":"index.mjs","sourcesContent":["\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { motion, useMotionValue, useTransform, animate } from \"framer-motion\";\r\n\r\nfunction cn(...classes: (string | undefined | false)[]) {\r\n return classes.filter(Boolean).join(\" \");\r\n}\r\n\r\ninterface ElasticSliderProps {\r\n defaultValue?: number;\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n onChange?: (value: number) => void;\r\n className?: string;\r\n trackClassName?: string;\r\n thumbClassName?: string;\r\n}\r\n\r\nexport function ElasticSlider({\r\n defaultValue = 50,\r\n min = 0,\r\n max = 100,\r\n step = 1,\r\n onChange,\r\n className,\r\n trackClassName,\r\n thumbClassName,\r\n}: ElasticSliderProps) {\r\n const [value, setValue] = useState(defaultValue);\r\n const [isDragging, setIsDragging] = useState(false);\r\n \r\n const percentage = ((value - min) / (max - min)) * 100;\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newValue = Number(e.target.value);\r\n setValue(newValue);\r\n onChange?.(newValue);\r\n };\r\n\r\n return (\r\n <div className={cn(\"relative w-full h-12 flex items-center\", className)}>\r\n <div className={cn(\r\n \"absolute w-full h-2 rounded-full bg-zinc-200 dark:bg-zinc-800\",\r\n trackClassName\r\n )}>\r\n <motion.div\r\n className=\"h-full rounded-full bg-zinc-900 dark:bg-zinc-100\"\r\n style={{ width: `${percentage}%` }}\r\n animate={{ scaleY: isDragging ? 1.5 : 1 }}\r\n transition={{ type: \"spring\", stiffness: 400, damping: 25 }}\r\n />\r\n </div>\r\n \r\n <motion.div\r\n className={cn(\r\n \"absolute w-6 h-6 rounded-full bg-zinc-900 dark:bg-zinc-100 shadow-lg cursor-grab\",\r\n \"border-2 border-white dark:border-zinc-900\",\r\n thumbClassName\r\n )}\r\n style={{ left: `calc(${percentage}% - 12px)` }}\r\n animate={{ \r\n scale: isDragging ? 1.3 : 1,\r\n y: isDragging ? -4 : 0\r\n }}\r\n transition={{ type: \"spring\", stiffness: 500, damping: 30 }}\r\n />\r\n \r\n <input\r\n type=\"range\"\r\n min={min}\r\n max={max}\r\n step={step}\r\n value={value}\r\n onChange={handleChange}\r\n onMouseDown={() => setIsDragging(true)}\r\n onMouseUp={() => setIsDragging(false)}\r\n onTouchStart={() => setIsDragging(true)}\r\n onTouchEnd={() => setIsDragging(false)}\r\n className=\"absolute w-full h-full opacity-0 cursor-grab active:cursor-grabbing\"\r\n />\r\n \r\n <motion.span\r\n className=\"absolute -top-8 left-1/2 -translate-x-1/2 text-sm font-medium text-zinc-900 dark:text-zinc-100\"\r\n animate={{ opacity: isDragging ? 1 : 0, y: isDragging ? 0 : 10 }}\r\n transition={{ duration: 0.2 }}\r\n >\r\n {value}\r\n </motion.span>\r\n </div>\r\n );\r\n}\r\n\r\nexport default ElasticSlider;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function o(...s){return tailwindMerge.twMerge(clsx.clsx(s))}function P({text:s,highlightWords:c=[],highlightClass:u="text-primary",trigger:e="auto",delay:m=0,staggerDelay:f=.05,className:p}){let[d,a]=react.useState(e==="auto"),i=react.useRef(null),h=s.split(" ");react.useEffect(()=>{if(e==="scroll"&&i.current){let t=new IntersectionObserver(([n])=>{n.isIntersecting&&a(true);},{threshold:.1});return t.observe(i.current),()=>t.disconnect()}},[e]);let l=()=>{(e==="hover"||e==="click")&&a(true);};return jsxRuntime.jsx("div",{ref:i,className:o("flex flex-wrap gap-2",p),onMouseEnter:e==="hover"?l:void 0,onClick:e==="click"?l:void 0,children:jsxRuntime.jsx(framerMotion.AnimatePresence,{children:h.map((t,n)=>{let y=c.includes(t.toLowerCase());return jsxRuntime.jsx(framerMotion.motion.span,{initial:{opacity:0,y:-50,rotateX:-90},animate:d?{opacity:1,y:0,rotateX:0}:{opacity:0,y:-50,rotateX:-90},transition:{duration:.5,delay:m+n*f,ease:[.25,.46,.45,.94]},className:o(y&&u),children:t},`${t}-${n}`)})})})}var N=P;exports.FallingText=P;exports.default=N;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/falling-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","FallingText","text","highlightWords","highlightClass","trigger","delay","staggerDelay","className","isVisible","setIsVisible","useState","containerRef","useRef","words","useEffect","observer","entry","handleInteraction","jsx","AnimatePresence","word","index","isHighlighted","motion","falling_text_default"],"mappings":"4OAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCWO,SAASG,CAAAA,CAAY,CAC1B,IAAA,CAAAC,CAAAA,CACA,cAAA,CAAAC,CAAAA,CAAiB,EAAC,CAClB,cAAA,CAAAC,CAAAA,CAAiB,cAAA,CACjB,OAAA,CAAAC,CAAAA,CAAU,MAAA,CACV,KAAA,CAAAC,CAAAA,CAAQ,CAAA,CACR,YAAA,CAAAC,CAAAA,CAAe,GAAA,CACf,SAAA,CAAAC,CACF,CAAA,CAAqB,CACnB,GAAM,CAACC,CAAAA,CAAWC,CAAY,CAAA,CAAIC,cAAAA,CAASN,CAAAA,GAAY,MAAM,CAAA,CACvDO,CAAAA,CAAeC,YAAAA,CAAuB,IAAI,CAAA,CAC1CC,CAAAA,CAAQZ,EAAK,KAAA,CAAM,GAAG,CAAA,CAE5Ba,eAAAA,CAAU,IAAM,CACd,GAAIV,CAAAA,GAAY,QAAA,EAAYO,CAAAA,CAAa,OAAA,CAAS,CAChD,IAAMI,CAAAA,CAAW,IAAI,oBAAA,CACnB,CAAC,CAACC,CAAK,CAAA,GAAM,CACPA,CAAAA,CAAM,cAAA,EACRP,CAAAA,CAAa,IAAI,EAErB,CAAA,CACA,CAAE,SAAA,CAAW,EAAI,CACnB,CAAA,CACA,OAAAM,CAAAA,CAAS,OAAA,CAAQJ,CAAAA,CAAa,OAAO,CAAA,CAC9B,IAAMI,CAAAA,CAAS,UAAA,EACxB,CACF,CAAA,CAAG,CAACX,CAAO,CAAC,CAAA,CAEZ,IAAMa,CAAAA,CAAoB,IAAM,CAAA,CAC1Bb,CAAAA,GAAY,OAAA,EAAWA,CAAAA,GAAY,OAAA,GACrCK,CAAAA,CAAa,IAAI,EAErB,CAAA,CAEA,OACES,cAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKP,CAAAA,CACL,SAAA,CAAWf,CAAAA,CAAG,sBAAA,CAAwBW,CAAS,CAAA,CAC/C,YAAA,CAAcH,CAAAA,GAAY,OAAA,CAAUa,CAAAA,CAAoB,MAAA,CACxD,QAASb,CAAAA,GAAY,OAAA,CAAUa,CAAAA,CAAoB,MAAA,CAEnD,QAAA,CAAAC,cAAAA,CAACC,4BAAAA,CAAA,CACE,QAAA,CAAAN,CAAAA,CAAM,GAAA,CAAI,CAACO,CAAAA,CAAMC,CAAAA,GAAU,CAC1B,IAAMC,CAAAA,CAAgBpB,CAAAA,CAAe,QAAA,CAASkB,CAAAA,CAAK,WAAA,EAAa,CAAA,CAChE,OACEF,cAAAA,CAACK,mBAAAA,CAAO,IAAA,CAAP,CAEC,OAAA,CAAS,CAAE,QAAS,CAAA,CAAG,CAAA,CAAG,GAAA,CAAK,OAAA,CAAS,GAAI,CAAA,CAC5C,OAAA,CACEf,CAAAA,CACI,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CAC/B,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,GAAA,CAAK,OAAA,CAAS,GAAI,CAAA,CAEzC,UAAA,CAAY,CACV,QAAA,CAAU,EAAA,CACV,KAAA,CAAOH,CAAAA,CAAQgB,EAAQf,CAAAA,CACvB,IAAA,CAAM,CAAC,GAAA,CAAM,GAAA,CAAM,GAAA,CAAM,GAAI,CAC/B,CAAA,CACA,SAAA,CAAWV,CAAAA,CAAG0B,CAAAA,EAAiBnB,CAAc,CAAA,CAE5C,QAAA,CAAAiB,CAAAA,CAAAA,CAdI,CAAA,EAAGA,CAAI,CAAA,CAAA,EAAIC,CAAK,CAAA,CAevB,CAEJ,CAAC,CAAA,CACH,CAAA,CACF,CAEJ,CAEA,IAAOG,CAAAA,CAAQxB","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { motion, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface FallingTextProps {\r\n text: string;\r\n highlightWords?: string[];\r\n highlightClass?: string;\r\n trigger?: \"auto\" | \"hover\" | \"click\" | \"scroll\";\r\n delay?: number;\r\n staggerDelay?: number;\r\n className?: string;\r\n}\r\n\r\nexport function FallingText({\r\n text,\r\n highlightWords = [],\r\n highlightClass = \"text-primary\",\r\n trigger = \"auto\",\r\n delay = 0,\r\n staggerDelay = 0.05,\r\n className,\r\n}: FallingTextProps) {\r\n const [isVisible, setIsVisible] = useState(trigger === \"auto\");\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const words = text.split(\" \");\r\n\r\n useEffect(() => {\r\n if (trigger === \"scroll\" && containerRef.current) {\r\n const observer = new IntersectionObserver(\r\n ([entry]) => {\r\n if (entry.isIntersecting) {\r\n setIsVisible(true);\r\n }\r\n },\r\n { threshold: 0.1 }\r\n );\r\n observer.observe(containerRef.current);\r\n return () => observer.disconnect();\r\n }\r\n }, [trigger]);\r\n\r\n const handleInteraction = () => {\r\n if (trigger === \"hover\" || trigger === \"click\") {\r\n setIsVisible(true);\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={cn(\"flex flex-wrap gap-2\", className)}\r\n onMouseEnter={trigger === \"hover\" ? handleInteraction : undefined}\r\n onClick={trigger === \"click\" ? handleInteraction : undefined}\r\n >\r\n <AnimatePresence>\r\n {words.map((word, index) => {\r\n const isHighlighted = highlightWords.includes(word.toLowerCase());\r\n return (\r\n <motion.span\r\n key={`${word}-${index}`}\r\n initial={{ opacity: 0, y: -50, rotateX: -90 }}\r\n animate={\r\n isVisible\r\n ? { opacity: 1, y: 0, rotateX: 0 }\r\n : { opacity: 0, y: -50, rotateX: -90 }\r\n }\r\n transition={{\r\n duration: 0.5,\r\n delay: delay + index * staggerDelay,\r\n ease: [0.25, 0.46, 0.45, 0.94],\r\n }}\r\n className={cn(isHighlighted && highlightClass)}\r\n >\r\n {word}\r\n </motion.span>\r\n );\r\n })}\r\n </AnimatePresence>\r\n </div>\r\n );\r\n}\r\n\r\nexport default FallingText;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useState,useRef,useEffect}from'react';import {AnimatePresence,motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function o(...s){return twMerge(clsx(s))}function P({text:s,highlightWords:c=[],highlightClass:u="text-primary",trigger:e="auto",delay:m=0,staggerDelay:f=.05,className:p}){let[d,a]=useState(e==="auto"),i=useRef(null),h=s.split(" ");useEffect(()=>{if(e==="scroll"&&i.current){let t=new IntersectionObserver(([n])=>{n.isIntersecting&&a(true);},{threshold:.1});return t.observe(i.current),()=>t.disconnect()}},[e]);let l=()=>{(e==="hover"||e==="click")&&a(true);};return jsx("div",{ref:i,className:o("flex flex-wrap gap-2",p),onMouseEnter:e==="hover"?l:void 0,onClick:e==="click"?l:void 0,children:jsx(AnimatePresence,{children:h.map((t,n)=>{let y=c.includes(t.toLowerCase());return jsx(motion.span,{initial:{opacity:0,y:-50,rotateX:-90},animate:d?{opacity:1,y:0,rotateX:0}:{opacity:0,y:-50,rotateX:-90},transition:{duration:.5,delay:m+n*f,ease:[.25,.46,.45,.94]},className:o(y&&u),children:t},`${t}-${n}`)})})})}var N=P;export{P as FallingText,N as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/falling-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","FallingText","text","highlightWords","highlightClass","trigger","delay","staggerDelay","className","isVisible","setIsVisible","useState","containerRef","useRef","words","useEffect","observer","entry","handleInteraction","jsx","AnimatePresence","word","index","isHighlighted","motion","falling_text_default"],"mappings":"kMAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCWO,SAASG,CAAAA,CAAY,CAC1B,IAAA,CAAAC,CAAAA,CACA,cAAA,CAAAC,CAAAA,CAAiB,EAAC,CAClB,cAAA,CAAAC,CAAAA,CAAiB,cAAA,CACjB,OAAA,CAAAC,CAAAA,CAAU,MAAA,CACV,KAAA,CAAAC,CAAAA,CAAQ,CAAA,CACR,YAAA,CAAAC,CAAAA,CAAe,GAAA,CACf,SAAA,CAAAC,CACF,CAAA,CAAqB,CACnB,GAAM,CAACC,CAAAA,CAAWC,CAAY,CAAA,CAAIC,QAAAA,CAASN,CAAAA,GAAY,MAAM,CAAA,CACvDO,CAAAA,CAAeC,MAAAA,CAAuB,IAAI,CAAA,CAC1CC,CAAAA,CAAQZ,EAAK,KAAA,CAAM,GAAG,CAAA,CAE5Ba,SAAAA,CAAU,IAAM,CACd,GAAIV,CAAAA,GAAY,QAAA,EAAYO,CAAAA,CAAa,OAAA,CAAS,CAChD,IAAMI,CAAAA,CAAW,IAAI,oBAAA,CACnB,CAAC,CAACC,CAAK,CAAA,GAAM,CACPA,CAAAA,CAAM,cAAA,EACRP,CAAAA,CAAa,IAAI,EAErB,CAAA,CACA,CAAE,SAAA,CAAW,EAAI,CACnB,CAAA,CACA,OAAAM,CAAAA,CAAS,OAAA,CAAQJ,CAAAA,CAAa,OAAO,CAAA,CAC9B,IAAMI,CAAAA,CAAS,UAAA,EACxB,CACF,CAAA,CAAG,CAACX,CAAO,CAAC,CAAA,CAEZ,IAAMa,CAAAA,CAAoB,IAAM,CAAA,CAC1Bb,CAAAA,GAAY,OAAA,EAAWA,CAAAA,GAAY,OAAA,GACrCK,CAAAA,CAAa,IAAI,EAErB,CAAA,CAEA,OACES,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKP,CAAAA,CACL,SAAA,CAAWf,CAAAA,CAAG,sBAAA,CAAwBW,CAAS,CAAA,CAC/C,YAAA,CAAcH,CAAAA,GAAY,OAAA,CAAUa,CAAAA,CAAoB,MAAA,CACxD,QAASb,CAAAA,GAAY,OAAA,CAAUa,CAAAA,CAAoB,MAAA,CAEnD,QAAA,CAAAC,GAAAA,CAACC,eAAAA,CAAA,CACE,QAAA,CAAAN,CAAAA,CAAM,GAAA,CAAI,CAACO,CAAAA,CAAMC,CAAAA,GAAU,CAC1B,IAAMC,CAAAA,CAAgBpB,CAAAA,CAAe,QAAA,CAASkB,CAAAA,CAAK,WAAA,EAAa,CAAA,CAChE,OACEF,GAAAA,CAACK,MAAAA,CAAO,IAAA,CAAP,CAEC,OAAA,CAAS,CAAE,QAAS,CAAA,CAAG,CAAA,CAAG,GAAA,CAAK,OAAA,CAAS,GAAI,CAAA,CAC5C,OAAA,CACEf,CAAAA,CACI,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CAC/B,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,GAAA,CAAK,OAAA,CAAS,GAAI,CAAA,CAEzC,UAAA,CAAY,CACV,QAAA,CAAU,EAAA,CACV,KAAA,CAAOH,CAAAA,CAAQgB,EAAQf,CAAAA,CACvB,IAAA,CAAM,CAAC,GAAA,CAAM,GAAA,CAAM,GAAA,CAAM,GAAI,CAC/B,CAAA,CACA,SAAA,CAAWV,CAAAA,CAAG0B,CAAAA,EAAiBnB,CAAc,CAAA,CAE5C,QAAA,CAAAiB,CAAAA,CAAAA,CAdI,CAAA,EAAGA,CAAI,CAAA,CAAA,EAAIC,CAAK,CAAA,CAevB,CAEJ,CAAC,CAAA,CACH,CAAA,CACF,CAEJ,CAEA,IAAOG,CAAAA,CAAQxB","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { motion, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface FallingTextProps {\r\n text: string;\r\n highlightWords?: string[];\r\n highlightClass?: string;\r\n trigger?: \"auto\" | \"hover\" | \"click\" | \"scroll\";\r\n delay?: number;\r\n staggerDelay?: number;\r\n className?: string;\r\n}\r\n\r\nexport function FallingText({\r\n text,\r\n highlightWords = [],\r\n highlightClass = \"text-primary\",\r\n trigger = \"auto\",\r\n delay = 0,\r\n staggerDelay = 0.05,\r\n className,\r\n}: FallingTextProps) {\r\n const [isVisible, setIsVisible] = useState(trigger === \"auto\");\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const words = text.split(\" \");\r\n\r\n useEffect(() => {\r\n if (trigger === \"scroll\" && containerRef.current) {\r\n const observer = new IntersectionObserver(\r\n ([entry]) => {\r\n if (entry.isIntersecting) {\r\n setIsVisible(true);\r\n }\r\n },\r\n { threshold: 0.1 }\r\n );\r\n observer.observe(containerRef.current);\r\n return () => observer.disconnect();\r\n }\r\n }, [trigger]);\r\n\r\n const handleInteraction = () => {\r\n if (trigger === \"hover\" || trigger === \"click\") {\r\n setIsVisible(true);\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={cn(\"flex flex-wrap gap-2\", className)}\r\n onMouseEnter={trigger === \"hover\" ? handleInteraction : undefined}\r\n onClick={trigger === \"click\" ? handleInteraction : undefined}\r\n >\r\n <AnimatePresence>\r\n {words.map((word, index) => {\r\n const isHighlighted = highlightWords.includes(word.toLowerCase());\r\n return (\r\n <motion.span\r\n key={`${word}-${index}`}\r\n initial={{ opacity: 0, y: -50, rotateX: -90 }}\r\n animate={\r\n isVisible\r\n ? { opacity: 1, y: 0, rotateX: 0 }\r\n : { opacity: 0, y: -50, rotateX: -90 }\r\n }\r\n transition={{\r\n duration: 0.5,\r\n delay: delay + index * staggerDelay,\r\n ease: [0.25, 0.46, 0.45, 0.94],\r\n }}\r\n className={cn(isHighlighted && highlightClass)}\r\n >\r\n {word}\r\n </motion.span>\r\n );\r\n })}\r\n </AnimatePresence>\r\n </div>\r\n );\r\n}\r\n\r\nexport default FallingText;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function t(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function m({children:e,className:o,duration:r=5,distance:a=50}){return jsxRuntime.jsx(framerMotion.motion.div,{className:t("relative",o),animate:{y:[0,-a,0]},transition:{duration:r,repeat:1/0,ease:"easeInOut"},children:e})}var N=m;exports.FloatEffect=m;exports.default=N;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/float-effect/index.tsx"],"names":["cn","inputs","twMerge","clsx","FloatEffect","children","className","duration","distance","jsx","motion","float_effect_default"],"mappings":"qNAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCQO,SAASG,CAAAA,CAAY,CAC1B,QAAA,CAAAC,EACA,SAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CAAW,EACX,QAAA,CAAAC,CAAAA,CAAW,EACb,CAAA,CAAqB,CACnB,OACEC,cAAAA,CAACC,mBAAAA,CAAO,IAAP,CACC,SAAA,CAAWV,CAAAA,CAAG,UAAA,CAAYM,CAAS,CAAA,CACnC,OAAA,CAAS,CACP,CAAA,CAAG,CAAC,CAAA,CAAG,CAACE,CAAAA,CAAU,CAAC,CACrB,CAAA,CACA,UAAA,CAAY,CACV,QAAA,CAAAD,EACA,MAAA,CAAQ,CAAA,CAAA,CAAA,CACR,IAAA,CAAM,WACR,EAEC,QAAA,CAAAF,CAAAA,CACH,CAEJ,KAEOM,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 { ReactNode } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface FloatEffectProps {\r\n children?: ReactNode;\r\n className?: string;\r\n duration?: number;\r\n distance?: number;\r\n}\r\n\r\nexport function FloatEffect({\r\n children,\r\n className,\r\n duration = 5,\r\n distance = 50,\r\n}: FloatEffectProps) {\r\n return (\r\n <motion.div\r\n className={cn(\"relative\", className)}\r\n animate={{\r\n y: [0, -distance, 0],\r\n }}\r\n transition={{\r\n duration,\r\n repeat: Infinity,\r\n ease: \"easeInOut\",\r\n }}\r\n >\r\n {children}\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport default FloatEffect;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function t(...e){return twMerge(clsx(e))}function m({children:e,className:o,duration:r=5,distance:a=50}){return jsx(motion.div,{className:t("relative",o),animate:{y:[0,-a,0]},transition:{duration:r,repeat:1/0,ease:"easeInOut"},children:e})}var N=m;export{m as FloatEffect,N as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/float-effect/index.tsx"],"names":["cn","inputs","twMerge","clsx","FloatEffect","children","className","duration","distance","jsx","motion","float_effect_default"],"mappings":"oIAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCQO,SAASG,CAAAA,CAAY,CAC1B,QAAA,CAAAC,EACA,SAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CAAW,EACX,QAAA,CAAAC,CAAAA,CAAW,EACb,CAAA,CAAqB,CACnB,OACEC,GAAAA,CAACC,MAAAA,CAAO,IAAP,CACC,SAAA,CAAWV,CAAAA,CAAG,UAAA,CAAYM,CAAS,CAAA,CACnC,OAAA,CAAS,CACP,CAAA,CAAG,CAAC,CAAA,CAAG,CAACE,CAAAA,CAAU,CAAC,CACrB,CAAA,CACA,UAAA,CAAY,CACV,QAAA,CAAAD,EACA,MAAA,CAAQ,CAAA,CAAA,CAAA,CACR,IAAA,CAAM,WACR,EAEC,QAAA,CAAAF,CAAAA,CACH,CAEJ,KAEOM,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 { ReactNode } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface FloatEffectProps {\r\n children?: ReactNode;\r\n className?: string;\r\n duration?: number;\r\n distance?: number;\r\n}\r\n\r\nexport function FloatEffect({\r\n children,\r\n className,\r\n duration = 5,\r\n distance = 50,\r\n}: FloatEffectProps) {\r\n return (\r\n <motion.div\r\n className={cn(\"relative\", className)}\r\n animate={{\r\n y: [0, -distance, 0],\r\n }}\r\n transition={{\r\n duration,\r\n repeat: Infinity,\r\n ease: \"easeInOut\",\r\n }}\r\n >\r\n {children}\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport default FloatEffect;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function t(...r){return tailwindMerge.twMerge(clsx.clsx(r))}function c({children:r,className:a,glowColor:e="rgba(255, 255, 255, 0.4)",duration:n=3}){return jsxRuntime.jsx(framerMotion.motion.div,{className:t("relative p-8 rounded-3xl border-2 border-white/30",a),style:{background:"radial-gradient(circle at center, rgba(255,255,255,0.05) 0%, transparent 70%)"},animate:{boxShadow:[`0 0 40px ${e}, 0 0 80px ${e.replace("0.4","0.2")}`,`0 0 80px ${e.replace("0.4","0.8")}, 0 0 160px ${e.replace("0.4","0.5")}`,`0 0 40px ${e}, 0 0 80px ${e.replace("0.4","0.2")}`],borderColor:["rgba(255, 255, 255, 0.3)","rgba(255, 255, 255, 0.6)","rgba(255, 255, 255, 0.3)"]},transition:{duration:n,repeat:1/0,ease:"easeInOut"},children:r})}var b=c;exports.GlowEffect=c;exports.default=b;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/glow-effect/index.tsx"],"names":["cn","inputs","twMerge","clsx","GlowEffect","children","className","glowColor","duration","jsx","motion","glow_effect_default"],"mappings":"qNAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCQO,SAASG,CAAAA,CAAW,CACzB,QAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CAAY,2BACZ,QAAA,CAAAC,CAAAA,CAAW,CACb,CAAA,CAAoB,CAClB,OACEC,eAACC,mBAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAWV,CAAAA,CACT,mDAAA,CACAM,CACF,CAAA,CACA,KAAA,CAAO,CACL,UAAA,CACE,+EACJ,CAAA,CACA,OAAA,CAAS,CACP,SAAA,CAAW,CACT,CAAA,SAAA,EAAYC,CAAS,CAAA,WAAA,EAAcA,CAAAA,CAAU,QAAQ,KAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAClE,CAAA,SAAA,EAAYA,CAAAA,CAAU,QAAQ,KAAA,CAAO,KAAK,CAAC,CAAA,YAAA,EAAeA,CAAAA,CAAU,OAAA,CAAQ,KAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CACzF,CAAA,SAAA,EAAYA,CAAS,CAAA,WAAA,EAAcA,CAAAA,CAAU,QAAQ,KAAA,CAAO,KAAK,CAAC,CAAA,CACpE,CAAA,CACA,WAAA,CAAa,CACX,0BAAA,CACA,0BAAA,CACA,0BACF,CACF,CAAA,CACA,UAAA,CAAY,CACV,QAAA,CAAAC,CAAAA,CACA,MAAA,CAAQ,CAAA,CAAA,CAAA,CACR,IAAA,CAAM,WACR,CAAA,CAEC,QAAA,CAAAH,CAAAA,CACH,CAEJ,CAEA,IAAOM,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 { ReactNode } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface GlowEffectProps {\r\n children?: ReactNode;\r\n className?: string;\r\n glowColor?: string;\r\n duration?: number;\r\n}\r\n\r\nexport function GlowEffect({\r\n children,\r\n className,\r\n glowColor = \"rgba(255, 255, 255, 0.4)\",\r\n duration = 3,\r\n}: GlowEffectProps) {\r\n return (\r\n <motion.div\r\n className={cn(\r\n \"relative p-8 rounded-3xl border-2 border-white/30\",\r\n className\r\n )}\r\n style={{\r\n background:\r\n \"radial-gradient(circle at center, rgba(255,255,255,0.05) 0%, transparent 70%)\",\r\n }}\r\n animate={{\r\n boxShadow: [\r\n `0 0 40px ${glowColor}, 0 0 80px ${glowColor.replace(\"0.4\", \"0.2\")}`,\r\n `0 0 80px ${glowColor.replace(\"0.4\", \"0.8\")}, 0 0 160px ${glowColor.replace(\"0.4\", \"0.5\")}`,\r\n `0 0 40px ${glowColor}, 0 0 80px ${glowColor.replace(\"0.4\", \"0.2\")}`,\r\n ],\r\n borderColor: [\r\n \"rgba(255, 255, 255, 0.3)\",\r\n \"rgba(255, 255, 255, 0.6)\",\r\n \"rgba(255, 255, 255, 0.3)\",\r\n ],\r\n }}\r\n transition={{\r\n duration,\r\n repeat: Infinity,\r\n ease: \"easeInOut\",\r\n }}\r\n >\r\n {children}\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport default GlowEffect;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function t(...r){return twMerge(clsx(r))}function c({children:r,className:a,glowColor:e="rgba(255, 255, 255, 0.4)",duration:n=3}){return jsx(motion.div,{className:t("relative p-8 rounded-3xl border-2 border-white/30",a),style:{background:"radial-gradient(circle at center, rgba(255,255,255,0.05) 0%, transparent 70%)"},animate:{boxShadow:[`0 0 40px ${e}, 0 0 80px ${e.replace("0.4","0.2")}`,`0 0 80px ${e.replace("0.4","0.8")}, 0 0 160px ${e.replace("0.4","0.5")}`,`0 0 40px ${e}, 0 0 80px ${e.replace("0.4","0.2")}`],borderColor:["rgba(255, 255, 255, 0.3)","rgba(255, 255, 255, 0.6)","rgba(255, 255, 255, 0.3)"]},transition:{duration:n,repeat:1/0,ease:"easeInOut"},children:r})}var b=c;export{c as GlowEffect,b as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/glow-effect/index.tsx"],"names":["cn","inputs","twMerge","clsx","GlowEffect","children","className","glowColor","duration","jsx","motion","glow_effect_default"],"mappings":"oIAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCQO,SAASG,CAAAA,CAAW,CACzB,QAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CAAY,2BACZ,QAAA,CAAAC,CAAAA,CAAW,CACb,CAAA,CAAoB,CAClB,OACEC,IAACC,MAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAWV,CAAAA,CACT,mDAAA,CACAM,CACF,CAAA,CACA,KAAA,CAAO,CACL,UAAA,CACE,+EACJ,CAAA,CACA,OAAA,CAAS,CACP,SAAA,CAAW,CACT,CAAA,SAAA,EAAYC,CAAS,CAAA,WAAA,EAAcA,CAAAA,CAAU,QAAQ,KAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAClE,CAAA,SAAA,EAAYA,CAAAA,CAAU,QAAQ,KAAA,CAAO,KAAK,CAAC,CAAA,YAAA,EAAeA,CAAAA,CAAU,OAAA,CAAQ,KAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CACzF,CAAA,SAAA,EAAYA,CAAS,CAAA,WAAA,EAAcA,CAAAA,CAAU,QAAQ,KAAA,CAAO,KAAK,CAAC,CAAA,CACpE,CAAA,CACA,WAAA,CAAa,CACX,0BAAA,CACA,0BAAA,CACA,0BACF,CACF,CAAA,CACA,UAAA,CAAY,CACV,QAAA,CAAAC,CAAAA,CACA,MAAA,CAAQ,CAAA,CAAA,CAAA,CACR,IAAA,CAAM,WACR,CAAA,CAEC,QAAA,CAAAH,CAAAA,CACH,CAEJ,CAEA,IAAOM,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 { ReactNode } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface GlowEffectProps {\r\n children?: ReactNode;\r\n className?: string;\r\n glowColor?: string;\r\n duration?: number;\r\n}\r\n\r\nexport function GlowEffect({\r\n children,\r\n className,\r\n glowColor = \"rgba(255, 255, 255, 0.4)\",\r\n duration = 3,\r\n}: GlowEffectProps) {\r\n return (\r\n <motion.div\r\n className={cn(\r\n \"relative p-8 rounded-3xl border-2 border-white/30\",\r\n className\r\n )}\r\n style={{\r\n background:\r\n \"radial-gradient(circle at center, rgba(255,255,255,0.05) 0%, transparent 70%)\",\r\n }}\r\n animate={{\r\n boxShadow: [\r\n `0 0 40px ${glowColor}, 0 0 80px ${glowColor.replace(\"0.4\", \"0.2\")}`,\r\n `0 0 80px ${glowColor.replace(\"0.4\", \"0.8\")}, 0 0 160px ${glowColor.replace(\"0.4\", \"0.5\")}`,\r\n `0 0 40px ${glowColor}, 0 0 80px ${glowColor.replace(\"0.4\", \"0.2\")}`,\r\n ],\r\n borderColor: [\r\n \"rgba(255, 255, 255, 0.3)\",\r\n \"rgba(255, 255, 255, 0.6)\",\r\n \"rgba(255, 255, 255, 0.3)\",\r\n ],\r\n }}\r\n transition={{\r\n duration,\r\n repeat: Infinity,\r\n ease: \"easeInOut\",\r\n }}\r\n >\r\n {children}\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport default GlowEffect;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),framerMotion=require('framer-motion'),jsxRuntime=require('react/jsx-runtime');function d(...t){return t.filter(Boolean).join(" ")}function u({className:t,onChange:n}){let[e,s]=react.useState(false);return jsxRuntime.jsxs("button",{onClick:()=>{let i=!e;s(i),n?.(i);},className:d("relative w-12 h-12 bg-transparent cursor-pointer flex flex-col items-center justify-center gap-2 p-2",t),style:{transformStyle:"preserve-3d",perspective:"800px"},"aria-label":"Toggle menu",children:[jsxRuntime.jsx(framerMotion.motion.div,{className:"w-8 h-0.5 bg-black dark:bg-white rounded",animate:e?{width:10,height:10,borderRadius:"50%",y:-6}:{width:32,height:2,borderRadius:"4px",y:0},transition:{duration:.3,ease:"easeInOut"}}),jsxRuntime.jsx(framerMotion.motion.div,{className:"w-8 h-0.5 bg-black dark:bg-white rounded",animate:e?{width:10,height:10,borderRadius:"50%",x:-8,y:6}:{width:32,height:2,borderRadius:"4px",x:0,y:0},transition:{duration:.35,ease:"easeInOut"}}),jsxRuntime.jsx(framerMotion.motion.div,{className:"w-8 h-0.5 bg-black dark:bg-white rounded",animate:e?{width:10,height:10,borderRadius:"50%",x:8,y:6}:{width:32,height:2,borderRadius:"4px",x:0,y:0},transition:{duration:.4,ease:"easeInOut"}})]})}var m=u;exports.Hamburger3D=u;exports.default=m;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hamburger-3d/index.tsx"],"names":["cn","classes","Hamburger3D","className","onChange","isOpen","setIsOpen","useState","jsxs","newState","jsx","motion","hamburger_3d_default"],"mappings":"+KAKA,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAyC,CACtD,OAAOA,CAAAA,CAAQ,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CACzC,CAOO,SAASC,CAAAA,CAAY,CAAE,SAAA,CAAAC,CAAAA,CAAW,SAAAC,CAAS,CAAA,CAAqB,CACrE,GAAM,CAACC,EAAQC,CAAS,CAAA,CAAIC,eAAS,KAAK,CAAA,CAQ1C,OACEC,eAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CARiB,IAAM,CACzB,IAAMC,EAAW,CAACJ,CAAAA,CAClBC,EAAUG,CAAQ,CAAA,CAClBL,IAAWK,CAAQ,EACrB,EAKI,SAAA,CAAWT,CAAAA,CACT,uGACAG,CACF,CAAA,CACA,MAAO,CAAE,cAAA,CAAgB,aAAA,CAAe,WAAA,CAAa,OAAQ,CAAA,CAC7D,aAAW,aAAA,CAEX,QAAA,CAAA,CAAAO,eAACC,mBAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAU,0CAAA,CACV,QAASN,CAAAA,CAAS,CAChB,MAAO,EAAA,CACP,MAAA,CAAQ,GACR,YAAA,CAAc,KAAA,CACd,EAAG,EACL,CAAA,CAAI,CACF,KAAA,CAAO,EAAA,CACP,MAAA,CAAQ,EACR,YAAA,CAAc,KAAA,CACd,EAAG,CACL,CAAA,CACA,WAAY,CAAE,QAAA,CAAU,GAAK,IAAA,CAAM,WAAY,EACjD,CAAA,CACAK,cAAAA,CAACC,oBAAO,GAAA,CAAP,CACC,UAAU,0CAAA,CACV,OAAA,CAASN,EAAS,CAChB,KAAA,CAAO,GACP,MAAA,CAAQ,EAAA,CACR,aAAc,KAAA,CACd,CAAA,CAAG,GACH,CAAA,CAAG,CACL,EAAI,CACF,KAAA,CAAO,GACP,MAAA,CAAQ,CAAA,CACR,aAAc,KAAA,CACd,CAAA,CAAG,EACH,CAAA,CAAG,CACL,CAAA,CACA,UAAA,CAAY,CAAE,QAAA,CAAU,IAAM,IAAA,CAAM,WAAY,EAClD,CAAA,CACAK,cAAAA,CAACC,oBAAO,GAAA,CAAP,CACC,UAAU,0CAAA,CACV,OAAA,CAASN,EAAS,CAChB,KAAA,CAAO,GACP,MAAA,CAAQ,EAAA,CACR,aAAc,KAAA,CACd,CAAA,CAAG,CAAA,CACH,CAAA,CAAG,CACL,CAAA,CAAI,CACF,KAAA,CAAO,EAAA,CACP,OAAQ,CAAA,CACR,YAAA,CAAc,MACd,CAAA,CAAG,CAAA,CACH,EAAG,CACL,CAAA,CACA,WAAY,CAAE,QAAA,CAAU,GAAK,IAAA,CAAM,WAAY,EACjD,CAAA,CAAA,CACF,CAEJ,CAEA,IAAOO,CAAAA,CAAQV","file":"index.js","sourcesContent":["\"use client\";\r\n\r\nimport { useState, useEffect, useRef } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\n\r\nfunction cn(...classes: (string | undefined | false)[]) {\r\n return classes.filter(Boolean).join(\" \");\r\n}\r\n\r\ninterface Hamburger3DProps {\r\n className?: string;\r\n onChange?: (isOpen: boolean) => void;\r\n}\r\n\r\nexport function Hamburger3D({ className, onChange }: Hamburger3DProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const handleToggle = () => {\r\n const newState = !isOpen;\r\n setIsOpen(newState);\r\n onChange?.(newState);\r\n };\r\n\r\n return (\r\n <button\r\n onClick={handleToggle}\r\n className={cn(\r\n \"relative w-12 h-12 bg-transparent cursor-pointer flex flex-col items-center justify-center gap-2 p-2\",\r\n className\r\n )}\r\n style={{ transformStyle: \"preserve-3d\", perspective: \"800px\" }}\r\n aria-label=\"Toggle menu\"\r\n >\r\n <motion.div\r\n className=\"w-8 h-0.5 bg-black dark:bg-white rounded\"\r\n animate={isOpen ? { \r\n width: 10, \r\n height: 10, \r\n borderRadius: \"50%\",\r\n y: -6 \r\n } : { \r\n width: 32, \r\n height: 2, \r\n borderRadius: \"4px\",\r\n y: 0 \r\n }}\r\n transition={{ duration: 0.3, ease: \"easeInOut\" }}\r\n />\r\n <motion.div\r\n className=\"w-8 h-0.5 bg-black dark:bg-white rounded\"\r\n animate={isOpen ? { \r\n width: 10, \r\n height: 10, \r\n borderRadius: \"50%\",\r\n x: -8,\r\n y: 6 \r\n } : { \r\n width: 32, \r\n height: 2, \r\n borderRadius: \"4px\",\r\n x: 0,\r\n y: 0 \r\n }}\r\n transition={{ duration: 0.35, ease: \"easeInOut\" }}\r\n />\r\n <motion.div\r\n className=\"w-8 h-0.5 bg-black dark:bg-white rounded\"\r\n animate={isOpen ? { \r\n width: 10, \r\n height: 10, \r\n borderRadius: \"50%\",\r\n x: 8,\r\n y: 6 \r\n } : { \r\n width: 32, \r\n height: 2, \r\n borderRadius: \"4px\",\r\n x: 0,\r\n y: 0 \r\n }}\r\n transition={{ duration: 0.4, ease: \"easeInOut\" }}\r\n />\r\n </button>\r\n );\r\n}\r\n\r\nexport default Hamburger3D;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useState}from'react';import {motion}from'framer-motion';import {jsxs,jsx}from'react/jsx-runtime';function d(...t){return t.filter(Boolean).join(" ")}function u({className:t,onChange:n}){let[e,s]=useState(false);return jsxs("button",{onClick:()=>{let i=!e;s(i),n?.(i);},className:d("relative w-12 h-12 bg-transparent cursor-pointer flex flex-col items-center justify-center gap-2 p-2",t),style:{transformStyle:"preserve-3d",perspective:"800px"},"aria-label":"Toggle menu",children:[jsx(motion.div,{className:"w-8 h-0.5 bg-black dark:bg-white rounded",animate:e?{width:10,height:10,borderRadius:"50%",y:-6}:{width:32,height:2,borderRadius:"4px",y:0},transition:{duration:.3,ease:"easeInOut"}}),jsx(motion.div,{className:"w-8 h-0.5 bg-black dark:bg-white rounded",animate:e?{width:10,height:10,borderRadius:"50%",x:-8,y:6}:{width:32,height:2,borderRadius:"4px",x:0,y:0},transition:{duration:.35,ease:"easeInOut"}}),jsx(motion.div,{className:"w-8 h-0.5 bg-black dark:bg-white rounded",animate:e?{width:10,height:10,borderRadius:"50%",x:8,y:6}:{width:32,height:2,borderRadius:"4px",x:0,y:0},transition:{duration:.4,ease:"easeInOut"}})]})}var m=u;export{u as Hamburger3D,m as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hamburger-3d/index.tsx"],"names":["cn","classes","Hamburger3D","className","onChange","isOpen","setIsOpen","useState","jsxs","newState","jsx","motion","hamburger_3d_default"],"mappings":"yGAKA,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAyC,CACtD,OAAOA,CAAAA,CAAQ,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CACzC,CAOO,SAASC,CAAAA,CAAY,CAAE,SAAA,CAAAC,CAAAA,CAAW,SAAAC,CAAS,CAAA,CAAqB,CACrE,GAAM,CAACC,EAAQC,CAAS,CAAA,CAAIC,SAAS,KAAK,CAAA,CAQ1C,OACEC,IAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CARiB,IAAM,CACzB,IAAMC,EAAW,CAACJ,CAAAA,CAClBC,EAAUG,CAAQ,CAAA,CAClBL,IAAWK,CAAQ,EACrB,EAKI,SAAA,CAAWT,CAAAA,CACT,uGACAG,CACF,CAAA,CACA,MAAO,CAAE,cAAA,CAAgB,aAAA,CAAe,WAAA,CAAa,OAAQ,CAAA,CAC7D,aAAW,aAAA,CAEX,QAAA,CAAA,CAAAO,IAACC,MAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAU,0CAAA,CACV,QAASN,CAAAA,CAAS,CAChB,MAAO,EAAA,CACP,MAAA,CAAQ,GACR,YAAA,CAAc,KAAA,CACd,EAAG,EACL,CAAA,CAAI,CACF,KAAA,CAAO,EAAA,CACP,MAAA,CAAQ,EACR,YAAA,CAAc,KAAA,CACd,EAAG,CACL,CAAA,CACA,WAAY,CAAE,QAAA,CAAU,GAAK,IAAA,CAAM,WAAY,EACjD,CAAA,CACAK,GAAAA,CAACC,OAAO,GAAA,CAAP,CACC,UAAU,0CAAA,CACV,OAAA,CAASN,EAAS,CAChB,KAAA,CAAO,GACP,MAAA,CAAQ,EAAA,CACR,aAAc,KAAA,CACd,CAAA,CAAG,GACH,CAAA,CAAG,CACL,EAAI,CACF,KAAA,CAAO,GACP,MAAA,CAAQ,CAAA,CACR,aAAc,KAAA,CACd,CAAA,CAAG,EACH,CAAA,CAAG,CACL,CAAA,CACA,UAAA,CAAY,CAAE,QAAA,CAAU,IAAM,IAAA,CAAM,WAAY,EAClD,CAAA,CACAK,GAAAA,CAACC,OAAO,GAAA,CAAP,CACC,UAAU,0CAAA,CACV,OAAA,CAASN,EAAS,CAChB,KAAA,CAAO,GACP,MAAA,CAAQ,EAAA,CACR,aAAc,KAAA,CACd,CAAA,CAAG,CAAA,CACH,CAAA,CAAG,CACL,CAAA,CAAI,CACF,KAAA,CAAO,EAAA,CACP,OAAQ,CAAA,CACR,YAAA,CAAc,MACd,CAAA,CAAG,CAAA,CACH,EAAG,CACL,CAAA,CACA,WAAY,CAAE,QAAA,CAAU,GAAK,IAAA,CAAM,WAAY,EACjD,CAAA,CAAA,CACF,CAEJ,CAEA,IAAOO,CAAAA,CAAQV","file":"index.mjs","sourcesContent":["\"use client\";\r\n\r\nimport { useState, useEffect, useRef } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\n\r\nfunction cn(...classes: (string | undefined | false)[]) {\r\n return classes.filter(Boolean).join(\" \");\r\n}\r\n\r\ninterface Hamburger3DProps {\r\n className?: string;\r\n onChange?: (isOpen: boolean) => void;\r\n}\r\n\r\nexport function Hamburger3D({ className, onChange }: Hamburger3DProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const handleToggle = () => {\r\n const newState = !isOpen;\r\n setIsOpen(newState);\r\n onChange?.(newState);\r\n };\r\n\r\n return (\r\n <button\r\n onClick={handleToggle}\r\n className={cn(\r\n \"relative w-12 h-12 bg-transparent cursor-pointer flex flex-col items-center justify-center gap-2 p-2\",\r\n className\r\n )}\r\n style={{ transformStyle: \"preserve-3d\", perspective: \"800px\" }}\r\n aria-label=\"Toggle menu\"\r\n >\r\n <motion.div\r\n className=\"w-8 h-0.5 bg-black dark:bg-white rounded\"\r\n animate={isOpen ? { \r\n width: 10, \r\n height: 10, \r\n borderRadius: \"50%\",\r\n y: -6 \r\n } : { \r\n width: 32, \r\n height: 2, \r\n borderRadius: \"4px\",\r\n y: 0 \r\n }}\r\n transition={{ duration: 0.3, ease: \"easeInOut\" }}\r\n />\r\n <motion.div\r\n className=\"w-8 h-0.5 bg-black dark:bg-white rounded\"\r\n animate={isOpen ? { \r\n width: 10, \r\n height: 10, \r\n borderRadius: \"50%\",\r\n x: -8,\r\n y: 6 \r\n } : { \r\n width: 32, \r\n height: 2, \r\n borderRadius: \"4px\",\r\n x: 0,\r\n y: 0 \r\n }}\r\n transition={{ duration: 0.35, ease: \"easeInOut\" }}\r\n />\r\n <motion.div\r\n className=\"w-8 h-0.5 bg-black dark:bg-white rounded\"\r\n animate={isOpen ? { \r\n width: 10, \r\n height: 10, \r\n borderRadius: \"50%\",\r\n x: 8,\r\n y: 6 \r\n } : { \r\n width: 32, \r\n height: 2, \r\n borderRadius: \"4px\",\r\n x: 0,\r\n y: 0 \r\n }}\r\n transition={{ duration: 0.4, ease: \"easeInOut\" }}\r\n />\r\n </button>\r\n );\r\n}\r\n\r\nexport default Hamburger3D;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function t(...l){return tailwindMerge.twMerge(clsx.clsx(l))}function p({className:l,onChange:r}){let[e,n]=react.useState(false),s=()=>{let o=!e;n(o),r?.(o);};return jsxRuntime.jsxs("label",{className:t("relative w-10 h-8 bg-transparent cursor-pointer block",l),htmlFor:"burger-basic",children:[jsxRuntime.jsx("input",{type:"checkbox",id:"burger-basic",className:"hidden",checked:e,onChange:s}),jsxRuntime.jsx("span",{className:t("block absolute h-1 w-full bg-black dark:bg-white rounded-lg opacity-100 left-0 transition-all duration-250 ease-in-out","top-0 origin-left",e&&"rotate-45 top-0 left-1.5")}),jsxRuntime.jsx("span",{className:t("block absolute h-1 w-full bg-black dark:bg-white rounded-lg opacity-100 left-0 transition-all duration-250 ease-in-out","top-1/2 -translate-y-1/2 origin-left",e&&"w-0 opacity-0")}),jsxRuntime.jsx("span",{className:t("block absolute h-1 w-full bg-black dark:bg-white rounded-lg opacity-100 left-0 transition-all duration-250 ease-in-out","top-full -translate-y-full origin-left",e&&"-rotate-45 top-7 left-1.5")})]})}var k=p;exports.HamburgerBasic=p;exports.default=k;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/hamburger-basic/index.tsx"],"names":["cn","inputs","twMerge","clsx","HamburgerBasic","className","onChange","isOpen","setIsOpen","useState","handleToggle","newState","jsxs","jsx","hamburger_basic_default"],"mappings":"sMAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,CAAAA,CAAe,CAAE,SAAA,CAAAC,CAAAA,CAAW,QAAA,CAAAC,CAAS,CAAA,CAAwB,CAC3E,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIC,cAAAA,CAAS,KAAK,CAAA,CAEpCC,CAAAA,CAAe,IAAM,CACzB,IAAMC,CAAAA,CAAW,CAACJ,CAAAA,CAClBC,CAAAA,CAAUG,CAAQ,CAAA,CAClBL,CAAAA,GAAWK,CAAQ,EACrB,EAEA,OACEC,eAAAA,CAAC,OAAA,CAAA,CACC,SAAA,CAAWZ,CAAAA,CACT,uDAAA,CACAK,CACF,CAAA,CACA,OAAA,CAAQ,cAAA,CAER,QAAA,CAAA,CAAAQ,cAAAA,CAAC,OAAA,CAAA,CACC,IAAA,CAAK,WACL,EAAA,CAAG,cAAA,CACH,SAAA,CAAU,QAAA,CACV,OAAA,CAASN,CAAAA,CACT,QAAA,CAAUG,CAAAA,CACZ,CAAA,CACAG,cAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,wHAAA,CACA,oBACAO,CAAAA,EAAU,0BACZ,CAAA,CACF,CAAA,CACAM,cAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,wHAAA,CACA,sCAAA,CACAO,CAAAA,EAAU,eACZ,CAAA,CACF,CAAA,CACAM,eAAC,MAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,wHAAA,CACA,wCAAA,CACAO,CAAAA,EAAU,2BACZ,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CAEA,IAAOO,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 { useState } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface HamburgerBasicProps {\r\n className?: string;\r\n onChange?: (isOpen: boolean) => void;\r\n}\r\n\r\nexport function HamburgerBasic({ className, onChange }: HamburgerBasicProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const handleToggle = () => {\r\n const newState = !isOpen;\r\n setIsOpen(newState);\r\n onChange?.(newState);\r\n };\r\n\r\n return (\r\n <label\r\n className={cn(\r\n \"relative w-10 h-8 bg-transparent cursor-pointer block\",\r\n className\r\n )}\r\n htmlFor=\"burger-basic\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n id=\"burger-basic\"\r\n className=\"hidden\"\r\n checked={isOpen}\r\n onChange={handleToggle}\r\n />\r\n <span\r\n className={cn(\r\n \"block absolute h-1 w-full bg-black dark:bg-white rounded-lg opacity-100 left-0 transition-all duration-250 ease-in-out\",\r\n \"top-0 origin-left\",\r\n isOpen && \"rotate-45 top-0 left-1.5\"\r\n )}\r\n />\r\n <span\r\n className={cn(\r\n \"block absolute h-1 w-full bg-black dark:bg-white rounded-lg opacity-100 left-0 transition-all duration-250 ease-in-out\",\r\n \"top-1/2 -translate-y-1/2 origin-left\",\r\n isOpen && \"w-0 opacity-0\"\r\n )}\r\n />\r\n <span\r\n className={cn(\r\n \"block absolute h-1 w-full bg-black dark:bg-white rounded-lg opacity-100 left-0 transition-all duration-250 ease-in-out\",\r\n \"top-full -translate-y-full origin-left\",\r\n isOpen && \"-rotate-45 top-7 left-1.5\"\r\n )}\r\n />\r\n </label>\r\n );\r\n}\r\n\r\nexport default HamburgerBasic;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useState}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function t(...l){return twMerge(clsx(l))}function p({className:l,onChange:r}){let[e,n]=useState(false),s=()=>{let o=!e;n(o),r?.(o);};return jsxs("label",{className:t("relative w-10 h-8 bg-transparent cursor-pointer block",l),htmlFor:"burger-basic",children:[jsx("input",{type:"checkbox",id:"burger-basic",className:"hidden",checked:e,onChange:s}),jsx("span",{className:t("block absolute h-1 w-full bg-black dark:bg-white rounded-lg opacity-100 left-0 transition-all duration-250 ease-in-out","top-0 origin-left",e&&"rotate-45 top-0 left-1.5")}),jsx("span",{className:t("block absolute h-1 w-full bg-black dark:bg-white rounded-lg opacity-100 left-0 transition-all duration-250 ease-in-out","top-1/2 -translate-y-1/2 origin-left",e&&"w-0 opacity-0")}),jsx("span",{className:t("block absolute h-1 w-full bg-black dark:bg-white rounded-lg opacity-100 left-0 transition-all duration-250 ease-in-out","top-full -translate-y-full origin-left",e&&"-rotate-45 top-7 left-1.5")})]})}var k=p;export{p as HamburgerBasic,k as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cn.ts","../../src/hamburger-basic/index.tsx"],"names":["cn","inputs","twMerge","clsx","HamburgerBasic","className","onChange","isOpen","setIsOpen","useState","handleToggle","newState","jsxs","jsx","hamburger_basic_default"],"mappings":"mIAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,CAAAA,CAAe,CAAE,SAAA,CAAAC,CAAAA,CAAW,QAAA,CAAAC,CAAS,CAAA,CAAwB,CAC3E,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIC,QAAAA,CAAS,KAAK,CAAA,CAEpCC,CAAAA,CAAe,IAAM,CACzB,IAAMC,CAAAA,CAAW,CAACJ,CAAAA,CAClBC,CAAAA,CAAUG,CAAQ,CAAA,CAClBL,CAAAA,GAAWK,CAAQ,EACrB,EAEA,OACEC,IAAAA,CAAC,OAAA,CAAA,CACC,SAAA,CAAWZ,CAAAA,CACT,uDAAA,CACAK,CACF,CAAA,CACA,OAAA,CAAQ,cAAA,CAER,QAAA,CAAA,CAAAQ,GAAAA,CAAC,OAAA,CAAA,CACC,IAAA,CAAK,WACL,EAAA,CAAG,cAAA,CACH,SAAA,CAAU,QAAA,CACV,OAAA,CAASN,CAAAA,CACT,QAAA,CAAUG,CAAAA,CACZ,CAAA,CACAG,GAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,wHAAA,CACA,oBACAO,CAAAA,EAAU,0BACZ,CAAA,CACF,CAAA,CACAM,GAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,wHAAA,CACA,sCAAA,CACAO,CAAAA,EAAU,eACZ,CAAA,CACF,CAAA,CACAM,IAAC,MAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,wHAAA,CACA,wCAAA,CACAO,CAAAA,EAAU,2BACZ,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CAEA,IAAOO,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 { useState } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface HamburgerBasicProps {\r\n className?: string;\r\n onChange?: (isOpen: boolean) => void;\r\n}\r\n\r\nexport function HamburgerBasic({ className, onChange }: HamburgerBasicProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const handleToggle = () => {\r\n const newState = !isOpen;\r\n setIsOpen(newState);\r\n onChange?.(newState);\r\n };\r\n\r\n return (\r\n <label\r\n className={cn(\r\n \"relative w-10 h-8 bg-transparent cursor-pointer block\",\r\n className\r\n )}\r\n htmlFor=\"burger-basic\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n id=\"burger-basic\"\r\n className=\"hidden\"\r\n checked={isOpen}\r\n onChange={handleToggle}\r\n />\r\n <span\r\n className={cn(\r\n \"block absolute h-1 w-full bg-black dark:bg-white rounded-lg opacity-100 left-0 transition-all duration-250 ease-in-out\",\r\n \"top-0 origin-left\",\r\n isOpen && \"rotate-45 top-0 left-1.5\"\r\n )}\r\n />\r\n <span\r\n className={cn(\r\n \"block absolute h-1 w-full bg-black dark:bg-white rounded-lg opacity-100 left-0 transition-all duration-250 ease-in-out\",\r\n \"top-1/2 -translate-y-1/2 origin-left\",\r\n isOpen && \"w-0 opacity-0\"\r\n )}\r\n />\r\n <span\r\n className={cn(\r\n \"block absolute h-1 w-full bg-black dark:bg-white rounded-lg opacity-100 left-0 transition-all duration-250 ease-in-out\",\r\n \"top-full -translate-y-full origin-left\",\r\n isOpen && \"-rotate-45 top-7 left-1.5\"\r\n )}\r\n />\r\n </label>\r\n );\r\n}\r\n\r\nexport default HamburgerBasic;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),framerMotion=require('framer-motion'),jsxRuntime=require('react/jsx-runtime');function l(...t){return t.filter(Boolean).join(" ")}function c({className:t,onChange:r}){let[e,o]=react.useState(false);return jsxRuntime.jsxs("button",{onClick:()=>{let i=!e;o(i),r?.(i);},className:l("relative w-12 h-12 bg-transparent cursor-pointer flex flex-col items-center justify-center gap-2",t),"aria-label":"Toggle menu",children:[jsxRuntime.jsx(framerMotion.motion.div,{className:"w-full h-1 bg-black dark:bg-white rounded-full origin-center",animate:e?{rotateX:90,y:0,opacity:0}:{rotateX:0,y:0,opacity:1},transition:{duration:.3,type:"spring",stiffness:300,damping:30}}),jsxRuntime.jsx(framerMotion.motion.div,{className:"w-full h-1 bg-black dark:bg-white rounded-full origin-center",animate:e?{scaleY:3}:{scaleY:1},transition:{duration:.6,type:"spring",stiffness:200,damping:15}}),jsxRuntime.jsx(framerMotion.motion.div,{className:"w-full h-1 bg-black dark:bg-white rounded-full origin-center",animate:e?{rotateX:90,y:0,opacity:0}:{rotateX:0,y:0,opacity:1},transition:{duration:.3,type:"spring",stiffness:300,damping:30}})]})}var d=c;exports.HamburgerElastic=c;exports.default=d;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hamburger-elastic/index.tsx"],"names":["cn","classes","HamburgerElastic","className","onChange","isOpen","setIsOpen","useState","jsxs","newState","jsx","motion","hamburger_elastic_default"],"mappings":"+KAKA,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAyC,CACtD,OAAOA,CAAAA,CAAQ,MAAA,CAAO,OAAO,EAAE,IAAA,CAAK,GAAG,CACzC,CAOO,SAASC,EAAiB,CAAE,SAAA,CAAAC,CAAAA,CAAW,QAAA,CAAAC,CAAS,CAAA,CAA0B,CAC/E,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIC,cAAAA,CAAS,KAAK,CAAA,CAQ1C,OACEC,eAAAA,CAAC,QAAA,CAAA,CACC,QARiB,IAAM,CACzB,IAAMC,CAAAA,CAAW,CAACJ,CAAAA,CAClBC,CAAAA,CAAUG,CAAQ,CAAA,CAClBL,CAAAA,GAAWK,CAAQ,EACrB,CAAA,CAKI,UAAWT,CAAAA,CACT,kGAAA,CACAG,CACF,CAAA,CACA,aAAW,aAAA,CAEX,QAAA,CAAA,CAAAO,eAACC,mBAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAU,8DAAA,CACV,OAAA,CAASN,CAAAA,CAAS,CAAE,OAAA,CAAS,EAAA,CAAI,EAAG,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CAAI,CAAE,OAAA,CAAS,CAAA,CAAG,EAAG,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CACrF,UAAA,CAAY,CAAE,QAAA,CAAU,EAAA,CAAK,IAAA,CAAM,QAAA,CAAU,UAAW,GAAA,CAAK,OAAA,CAAS,EAAG,CAAA,CAC3E,CAAA,CACAK,eAACC,mBAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAU,+DACV,OAAA,CAASN,CAAAA,CAAS,CAAE,MAAA,CAAQ,CAAE,EAAI,CAAE,MAAA,CAAQ,CAAE,CAAA,CAC9C,WAAY,CAAE,QAAA,CAAU,GAAK,IAAA,CAAM,QAAA,CAAU,UAAW,GAAA,CAAK,OAAA,CAAS,EAAG,CAAA,CAC3E,EACAK,cAAAA,CAACC,mBAAAA,CAAO,IAAP,CACC,SAAA,CAAU,+DACV,OAAA,CAASN,CAAAA,CAAS,CAAE,OAAA,CAAS,GAAI,CAAA,CAAG,CAAA,CAAG,QAAS,CAAE,CAAA,CAAI,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,QAAS,CAAE,CAAA,CACrF,WAAY,CAAE,QAAA,CAAU,GAAK,IAAA,CAAM,QAAA,CAAU,SAAA,CAAW,GAAA,CAAK,QAAS,EAAG,CAAA,CAC3E,GACF,CAEJ,KAEOO,CAAAA,CAAQV","file":"index.js","sourcesContent":["\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\n\r\nfunction cn(...classes: (string | undefined | false)[]) {\r\n return classes.filter(Boolean).join(\" \");\r\n}\r\n\r\ninterface HamburgerElasticProps {\r\n className?: string;\r\n onChange?: (isOpen: boolean) => void;\r\n}\r\n\r\nexport function HamburgerElastic({ className, onChange }: HamburgerElasticProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const handleToggle = () => {\r\n const newState = !isOpen;\r\n setIsOpen(newState);\r\n onChange?.(newState);\r\n };\r\n\r\n return (\r\n <button\r\n onClick={handleToggle}\r\n className={cn(\r\n \"relative w-12 h-12 bg-transparent cursor-pointer flex flex-col items-center justify-center gap-2\",\r\n className\r\n )}\r\n aria-label=\"Toggle menu\"\r\n >\r\n <motion.div\r\n className=\"w-full h-1 bg-black dark:bg-white rounded-full origin-center\"\r\n animate={isOpen ? { rotateX: 90, y: 0, opacity: 0 } : { rotateX: 0, y: 0, opacity: 1 }}\r\n transition={{ duration: 0.3, type: \"spring\", stiffness: 300, damping: 30 }}\r\n />\r\n <motion.div\r\n className=\"w-full h-1 bg-black dark:bg-white rounded-full origin-center\"\r\n animate={isOpen ? { scaleY: 3 } : { scaleY: 1 }}\r\n transition={{ duration: 0.6, type: \"spring\", stiffness: 200, damping: 15 }}\r\n />\r\n <motion.div\r\n className=\"w-full h-1 bg-black dark:bg-white rounded-full origin-center\"\r\n animate={isOpen ? { rotateX: 90, y: 0, opacity: 0 } : { rotateX: 0, y: 0, opacity: 1 }}\r\n transition={{ duration: 0.3, type: \"spring\", stiffness: 300, damping: 30 }}\r\n />\r\n </button>\r\n );\r\n}\r\n\r\nexport default HamburgerElastic;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useState}from'react';import {motion}from'framer-motion';import {jsxs,jsx}from'react/jsx-runtime';function l(...t){return t.filter(Boolean).join(" ")}function c({className:t,onChange:r}){let[e,o]=useState(false);return jsxs("button",{onClick:()=>{let i=!e;o(i),r?.(i);},className:l("relative w-12 h-12 bg-transparent cursor-pointer flex flex-col items-center justify-center gap-2",t),"aria-label":"Toggle menu",children:[jsx(motion.div,{className:"w-full h-1 bg-black dark:bg-white rounded-full origin-center",animate:e?{rotateX:90,y:0,opacity:0}:{rotateX:0,y:0,opacity:1},transition:{duration:.3,type:"spring",stiffness:300,damping:30}}),jsx(motion.div,{className:"w-full h-1 bg-black dark:bg-white rounded-full origin-center",animate:e?{scaleY:3}:{scaleY:1},transition:{duration:.6,type:"spring",stiffness:200,damping:15}}),jsx(motion.div,{className:"w-full h-1 bg-black dark:bg-white rounded-full origin-center",animate:e?{rotateX:90,y:0,opacity:0}:{rotateX:0,y:0,opacity:1},transition:{duration:.3,type:"spring",stiffness:300,damping:30}})]})}var d=c;export{c as HamburgerElastic,d as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hamburger-elastic/index.tsx"],"names":["cn","classes","HamburgerElastic","className","onChange","isOpen","setIsOpen","useState","jsxs","newState","jsx","motion","hamburger_elastic_default"],"mappings":"yGAKA,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAyC,CACtD,OAAOA,CAAAA,CAAQ,MAAA,CAAO,OAAO,EAAE,IAAA,CAAK,GAAG,CACzC,CAOO,SAASC,EAAiB,CAAE,SAAA,CAAAC,CAAAA,CAAW,QAAA,CAAAC,CAAS,CAAA,CAA0B,CAC/E,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIC,QAAAA,CAAS,KAAK,CAAA,CAQ1C,OACEC,IAAAA,CAAC,QAAA,CAAA,CACC,QARiB,IAAM,CACzB,IAAMC,CAAAA,CAAW,CAACJ,CAAAA,CAClBC,CAAAA,CAAUG,CAAQ,CAAA,CAClBL,CAAAA,GAAWK,CAAQ,EACrB,CAAA,CAKI,UAAWT,CAAAA,CACT,kGAAA,CACAG,CACF,CAAA,CACA,aAAW,aAAA,CAEX,QAAA,CAAA,CAAAO,IAACC,MAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAU,8DAAA,CACV,OAAA,CAASN,CAAAA,CAAS,CAAE,OAAA,CAAS,EAAA,CAAI,EAAG,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CAAI,CAAE,OAAA,CAAS,CAAA,CAAG,EAAG,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CACrF,UAAA,CAAY,CAAE,QAAA,CAAU,EAAA,CAAK,IAAA,CAAM,QAAA,CAAU,UAAW,GAAA,CAAK,OAAA,CAAS,EAAG,CAAA,CAC3E,CAAA,CACAK,IAACC,MAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAU,+DACV,OAAA,CAASN,CAAAA,CAAS,CAAE,MAAA,CAAQ,CAAE,EAAI,CAAE,MAAA,CAAQ,CAAE,CAAA,CAC9C,WAAY,CAAE,QAAA,CAAU,GAAK,IAAA,CAAM,QAAA,CAAU,UAAW,GAAA,CAAK,OAAA,CAAS,EAAG,CAAA,CAC3E,EACAK,GAAAA,CAACC,MAAAA,CAAO,IAAP,CACC,SAAA,CAAU,+DACV,OAAA,CAASN,CAAAA,CAAS,CAAE,OAAA,CAAS,GAAI,CAAA,CAAG,CAAA,CAAG,QAAS,CAAE,CAAA,CAAI,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,QAAS,CAAE,CAAA,CACrF,WAAY,CAAE,QAAA,CAAU,GAAK,IAAA,CAAM,QAAA,CAAU,SAAA,CAAW,GAAA,CAAK,QAAS,EAAG,CAAA,CAC3E,GACF,CAEJ,KAEOO,CAAAA,CAAQV","file":"index.mjs","sourcesContent":["\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\n\r\nfunction cn(...classes: (string | undefined | false)[]) {\r\n return classes.filter(Boolean).join(\" \");\r\n}\r\n\r\ninterface HamburgerElasticProps {\r\n className?: string;\r\n onChange?: (isOpen: boolean) => void;\r\n}\r\n\r\nexport function HamburgerElastic({ className, onChange }: HamburgerElasticProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const handleToggle = () => {\r\n const newState = !isOpen;\r\n setIsOpen(newState);\r\n onChange?.(newState);\r\n };\r\n\r\n return (\r\n <button\r\n onClick={handleToggle}\r\n className={cn(\r\n \"relative w-12 h-12 bg-transparent cursor-pointer flex flex-col items-center justify-center gap-2\",\r\n className\r\n )}\r\n aria-label=\"Toggle menu\"\r\n >\r\n <motion.div\r\n className=\"w-full h-1 bg-black dark:bg-white rounded-full origin-center\"\r\n animate={isOpen ? { rotateX: 90, y: 0, opacity: 0 } : { rotateX: 0, y: 0, opacity: 1 }}\r\n transition={{ duration: 0.3, type: \"spring\", stiffness: 300, damping: 30 }}\r\n />\r\n <motion.div\r\n className=\"w-full h-1 bg-black dark:bg-white rounded-full origin-center\"\r\n animate={isOpen ? { scaleY: 3 } : { scaleY: 1 }}\r\n transition={{ duration: 0.6, type: \"spring\", stiffness: 200, damping: 15 }}\r\n />\r\n <motion.div\r\n className=\"w-full h-1 bg-black dark:bg-white rounded-full origin-center\"\r\n animate={isOpen ? { rotateX: 90, y: 0, opacity: 0 } : { rotateX: 0, y: 0, opacity: 1 }}\r\n transition={{ duration: 0.3, type: \"spring\", stiffness: 300, damping: 30 }}\r\n />\r\n </button>\r\n );\r\n}\r\n\r\nexport default HamburgerElastic;\r\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),framerMotion=require('framer-motion'),jsxRuntime=require('react/jsx-runtime');function o(...n){return n.filter(Boolean).join(" ")}function c({className:n,onChange:r}){let[e,s]=react.useState(false);return jsxRuntime.jsxs("button",{onClick:()=>{let i=!e;s(i),r?.(i);},className:o("relative w-12 h-12 bg-transparent cursor-pointer flex flex-col items-center justify-center gap-2",n),"aria-label":"Toggle menu",children:[jsxRuntime.jsx(framerMotion.motion.div,{className:"w-full h-1 bg-black dark:bg-white rounded-full origin-center",animate:e?{scaleX:0}:{scaleX:1},transition:{duration:.3,type:"spring",stiffness:400,damping:30}}),jsxRuntime.jsx(framerMotion.motion.div,{className:"w-full h-1 bg-black dark:bg-white rounded-full origin-center",animate:e?{scaleX:1.2}:{scaleX:1},transition:{duration:.4,type:"spring",stiffness:200,damping:20}}),jsxRuntime.jsx(framerMotion.motion.div,{className:"w-full h-1 bg-black dark:bg-white rounded-full origin-center",animate:e?{scaleX:0}:{scaleX:1},transition:{duration:.3,delay:.05,type:"spring",stiffness:400,damping:30}})]})}var p=c;exports.HamburgerMorph=c;exports.default=p;//# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hamburger-morph/index.tsx"],"names":["cn","classes","HamburgerMorph","className","onChange","isOpen","setIsOpen","useState","jsxs","newState","jsx","motion","hamburger_morph_default"],"mappings":"+KAKA,SAASA,CAAAA,CAAAA,GAAMC,EAAyC,CACtD,OAAOA,CAAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CACzC,CAOO,SAASC,CAAAA,CAAe,CAAE,SAAA,CAAAC,EAAW,QAAA,CAAAC,CAAS,CAAA,CAAwB,CAC3E,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIC,eAAS,KAAK,CAAA,CAQ1C,OACEC,eAAAA,CAAC,UACC,OAAA,CARiB,IAAM,CACzB,IAAMC,EAAW,CAACJ,CAAAA,CAClBC,CAAAA,CAAUG,CAAQ,EAClBL,CAAAA,GAAWK,CAAQ,EACrB,CAAA,CAKI,UAAWT,CAAAA,CACT,kGAAA,CACAG,CACF,CAAA,CACA,aAAW,aAAA,CAEX,QAAA,CAAA,CAAAO,cAAAA,CAACC,mBAAAA,CAAO,IAAP,CACC,SAAA,CAAU,8DAAA,CACV,OAAA,CAASN,EAAS,CAAE,MAAA,CAAQ,CAAE,CAAA,CAAI,CAAE,MAAA,CAAQ,CAAE,CAAA,CAC9C,UAAA,CAAY,CAAE,QAAA,CAAU,EAAA,CAAK,IAAA,CAAM,QAAA,CAAU,UAAW,GAAA,CAAK,OAAA,CAAS,EAAG,CAAA,CAC3E,EACAK,cAAAA,CAACC,mBAAAA,CAAO,GAAA,CAAP,CACC,UAAU,8DAAA,CACV,OAAA,CAASN,CAAAA,CAAS,CAAE,OAAQ,GAAI,CAAA,CAAI,CAAE,MAAA,CAAQ,CAAE,CAAA,CAChD,UAAA,CAAY,CAAE,QAAA,CAAU,GAAK,IAAA,CAAM,QAAA,CAAU,SAAA,CAAW,GAAA,CAAK,QAAS,EAAG,CAAA,CAC3E,CAAA,CACAK,cAAAA,CAACC,oBAAO,GAAA,CAAP,CACC,SAAA,CAAU,8DAAA,CACV,QAASN,CAAAA,CAAS,CAAE,MAAA,CAAQ,CAAE,EAAI,CAAE,MAAA,CAAQ,CAAE,CAAA,CAC9C,WAAY,CAAE,QAAA,CAAU,EAAA,CAAK,KAAA,CAAO,IAAM,IAAA,CAAM,QAAA,CAAU,SAAA,CAAW,GAAA,CAAK,QAAS,EAAG,CAAA,CACxF,GACF,CAEJ,KAEOO,CAAAA,CAAQV","file":"index.js","sourcesContent":["\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\n\r\nfunction cn(...classes: (string | undefined | false)[]) {\r\n return classes.filter(Boolean).join(\" \");\r\n}\r\n\r\ninterface HamburgerMorphProps {\r\n className?: string;\r\n onChange?: (isOpen: boolean) => void;\r\n}\r\n\r\nexport function HamburgerMorph({ className, onChange }: HamburgerMorphProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const handleToggle = () => {\r\n const newState = !isOpen;\r\n setIsOpen(newState);\r\n onChange?.(newState);\r\n };\r\n\r\n return (\r\n <button\r\n onClick={handleToggle}\r\n className={cn(\r\n \"relative w-12 h-12 bg-transparent cursor-pointer flex flex-col items-center justify-center gap-2\",\r\n className\r\n )}\r\n aria-label=\"Toggle menu\"\r\n >\r\n <motion.div\r\n className=\"w-full h-1 bg-black dark:bg-white rounded-full origin-center\"\r\n animate={isOpen ? { scaleX: 0 } : { scaleX: 1 }}\r\n transition={{ duration: 0.3, type: \"spring\", stiffness: 400, damping: 30 }}\r\n />\r\n <motion.div\r\n className=\"w-full h-1 bg-black dark:bg-white rounded-full origin-center\"\r\n animate={isOpen ? { scaleX: 1.2 } : { scaleX: 1 }}\r\n transition={{ duration: 0.4, type: \"spring\", stiffness: 200, damping: 20 }}\r\n />\r\n <motion.div\r\n className=\"w-full h-1 bg-black dark:bg-white rounded-full origin-center\"\r\n animate={isOpen ? { scaleX: 0 } : { scaleX: 1 }}\r\n transition={{ duration: 0.3, delay: 0.05, type: \"spring\", stiffness: 400, damping: 30 }}\r\n />\r\n </button>\r\n );\r\n}\r\n\r\nexport default HamburgerMorph;\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {useState}from'react';import {motion}from'framer-motion';import {jsxs,jsx}from'react/jsx-runtime';function o(...n){return n.filter(Boolean).join(" ")}function c({className:n,onChange:r}){let[e,s]=useState(false);return jsxs("button",{onClick:()=>{let i=!e;s(i),r?.(i);},className:o("relative w-12 h-12 bg-transparent cursor-pointer flex flex-col items-center justify-center gap-2",n),"aria-label":"Toggle menu",children:[jsx(motion.div,{className:"w-full h-1 bg-black dark:bg-white rounded-full origin-center",animate:e?{scaleX:0}:{scaleX:1},transition:{duration:.3,type:"spring",stiffness:400,damping:30}}),jsx(motion.div,{className:"w-full h-1 bg-black dark:bg-white rounded-full origin-center",animate:e?{scaleX:1.2}:{scaleX:1},transition:{duration:.4,type:"spring",stiffness:200,damping:20}}),jsx(motion.div,{className:"w-full h-1 bg-black dark:bg-white rounded-full origin-center",animate:e?{scaleX:0}:{scaleX:1},transition:{duration:.3,delay:.05,type:"spring",stiffness:400,damping:30}})]})}var p=c;export{c as HamburgerMorph,p as default};//# sourceMappingURL=index.mjs.map
2
+ //# sourceMappingURL=index.mjs.map