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.
- package/dist/animated-circular-progress/index.js +2 -0
- package/dist/animated-circular-progress/index.js.map +1 -0
- package/dist/animated-circular-progress/index.mjs +2 -0
- package/dist/animated-circular-progress/index.mjs.map +1 -0
- package/dist/ascii-text/index.js +3 -0
- package/dist/ascii-text/index.js.map +1 -0
- package/dist/ascii-text/index.mjs +3 -0
- package/dist/ascii-text/index.mjs.map +1 -0
- package/dist/blur-fade/index.js +2 -0
- package/dist/blur-fade/index.js.map +1 -0
- package/dist/blur-fade/index.mjs +2 -0
- package/dist/blur-fade/index.mjs.map +1 -0
- package/dist/click-spark/index.js +2 -0
- package/dist/click-spark/index.js.map +1 -0
- package/dist/click-spark/index.mjs +2 -0
- package/dist/click-spark/index.mjs.map +1 -0
- package/dist/contribution-graph/index.js +2 -0
- package/dist/contribution-graph/index.js.map +1 -0
- package/dist/contribution-graph/index.mjs +2 -0
- package/dist/contribution-graph/index.mjs.map +1 -0
- package/dist/elastic-slider/index.js +2 -0
- package/dist/elastic-slider/index.js.map +1 -0
- package/dist/elastic-slider/index.mjs +2 -0
- package/dist/elastic-slider/index.mjs.map +1 -0
- package/dist/falling-text/index.js +2 -0
- package/dist/falling-text/index.js.map +1 -0
- package/dist/falling-text/index.mjs +2 -0
- package/dist/falling-text/index.mjs.map +1 -0
- package/dist/float-effect/index.js +2 -0
- package/dist/float-effect/index.js.map +1 -0
- package/dist/float-effect/index.mjs +2 -0
- package/dist/float-effect/index.mjs.map +1 -0
- package/dist/glow-effect/index.js +2 -0
- package/dist/glow-effect/index.js.map +1 -0
- package/dist/glow-effect/index.mjs +2 -0
- package/dist/glow-effect/index.mjs.map +1 -0
- package/dist/hamburger-3d/index.js +2 -0
- package/dist/hamburger-3d/index.js.map +1 -0
- package/dist/hamburger-3d/index.mjs +2 -0
- package/dist/hamburger-3d/index.mjs.map +1 -0
- package/dist/hamburger-basic/index.js +2 -0
- package/dist/hamburger-basic/index.js.map +1 -0
- package/dist/hamburger-basic/index.mjs +2 -0
- package/dist/hamburger-basic/index.mjs.map +1 -0
- package/dist/hamburger-elastic/index.js +2 -0
- package/dist/hamburger-elastic/index.js.map +1 -0
- package/dist/hamburger-elastic/index.mjs +2 -0
- package/dist/hamburger-elastic/index.mjs.map +1 -0
- package/dist/hamburger-morph/index.js +2 -0
- package/dist/hamburger-morph/index.js.map +1 -0
- package/dist/hamburger-morph/index.mjs +2 -0
- package/dist/hamburger-morph/index.mjs.map +1 -0
- package/dist/hamburger-spin/index.js +2 -0
- package/dist/hamburger-spin/index.js.map +1 -0
- package/dist/hamburger-spin/index.mjs +2 -0
- package/dist/hamburger-spin/index.mjs.map +1 -0
- package/dist/hamburger-spring/index.js +2 -0
- package/dist/hamburger-spring/index.js.map +1 -0
- package/dist/hamburger-spring/index.mjs +2 -0
- package/dist/hamburger-spring/index.mjs.map +1 -0
- package/dist/hamburger-stagger/index.js +2 -0
- package/dist/hamburger-stagger/index.js.map +1 -0
- package/dist/hamburger-stagger/index.mjs +2 -0
- package/dist/hamburger-stagger/index.mjs.map +1 -0
- package/dist/hamburger-wave/index.js +2 -0
- package/dist/hamburger-wave/index.js.map +1 -0
- package/dist/hamburger-wave/index.mjs +2 -0
- package/dist/hamburger-wave/index.mjs.map +1 -0
- package/dist/index.js +21 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +21 -9
- package/dist/index.mjs.map +1 -1
- package/dist/infinite-scroll/index.js +11 -0
- package/dist/infinite-scroll/index.js.map +1 -0
- package/dist/infinite-scroll/index.mjs +11 -0
- package/dist/infinite-scroll/index.mjs.map +1 -0
- package/dist/input-otp/index.js +2 -0
- package/dist/input-otp/index.js.map +1 -0
- package/dist/input-otp/index.mjs +2 -0
- package/dist/input-otp/index.mjs.map +1 -0
- package/dist/loader/index.js +2 -0
- package/dist/loader/index.js.map +1 -0
- package/dist/loader/index.mjs +2 -0
- package/dist/loader/index.mjs.map +1 -0
- package/dist/loading-invert/index.js +4 -0
- package/dist/loading-invert/index.js.map +1 -0
- package/dist/loading-invert/index.mjs +4 -0
- package/dist/loading-invert/index.mjs.map +1 -0
- package/dist/multi-step-loader/index.js +2 -0
- package/dist/multi-step-loader/index.js.map +1 -0
- package/dist/multi-step-loader/index.mjs +2 -0
- package/dist/multi-step-loader/index.mjs.map +1 -0
- package/dist/pixel-card/index.js +2 -0
- package/dist/pixel-card/index.js.map +1 -0
- package/dist/pixel-card/index.mjs +2 -0
- package/dist/pixel-card/index.mjs.map +1 -0
- package/dist/scroll-velocity/index.js +2 -0
- package/dist/scroll-velocity/index.js.map +1 -0
- package/dist/scroll-velocity/index.mjs +2 -0
- package/dist/scroll-velocity/index.mjs.map +1 -0
- package/dist/shimmer-effect/index.js +2 -0
- package/dist/shimmer-effect/index.js.map +1 -0
- package/dist/shimmer-effect/index.mjs +2 -0
- package/dist/shimmer-effect/index.mjs.map +1 -0
- package/dist/smooth-cursor/index.js +2 -0
- package/dist/smooth-cursor/index.js.map +1 -0
- package/dist/smooth-cursor/index.mjs +2 -0
- package/dist/smooth-cursor/index.mjs.map +1 -0
- package/dist/social-button/index.js +2 -0
- package/dist/social-button/index.js.map +1 -0
- package/dist/social-button/index.mjs +2 -0
- package/dist/social-button/index.mjs.map +1 -0
- package/dist/text-cursor/index.js +2 -0
- package/dist/text-cursor/index.js.map +1 -0
- package/dist/text-cursor/index.mjs +2 -0
- package/dist/text-cursor/index.mjs.map +1 -0
- package/dist/theme-toggler/index.js +2 -0
- package/dist/theme-toggler/index.js.map +1 -0
- package/dist/theme-toggler/index.mjs +2 -0
- package/dist/theme-toggler/index.mjs.map +1 -0
- package/dist/tilted-card/index.js +2 -0
- package/dist/tilted-card/index.js.map +1 -0
- package/dist/tilted-card/index.mjs +2 -0
- package/dist/tilted-card/index.mjs.map +1 -0
- package/dist/v0-button/index.js +2 -0
- package/dist/v0-button/index.js.map +1 -0
- package/dist/v0-button/index.mjs +2 -0
- package/dist/v0-button/index.mjs.map +1 -0
- package/package.json +33 -2
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function n(...t){return tailwindMerge.twMerge(clsx.clsx(t))}function v({children:t,speed:o=30,direction:a="left",pauseOnHover:s=true,className:c}){let r=react.useRef(null),e=react.useRef(null);return react.useEffect(()=>{if(!r.current||!e.current)return;Array.from(e.current.children).forEach(f=>{let m=f.cloneNode(true);e.current&&e.current.appendChild(m);}),r.current.style.setProperty("--animation-duration",`${o}s`),r.current.style.setProperty("--animation-direction",a==="left"?"forwards":"reverse");},[o,a]),jsxRuntime.jsxs("div",{ref:r,className:n("group relative flex overflow-hidden [mask-image:linear-gradient(to_right,transparent,white_20%,white_80%,transparent)]",c),children:[jsxRuntime.jsx("div",{ref:e,className:n("flex min-w-full shrink-0 gap-4 py-4 w-max flex-nowrap","animate-scroll",s&&"group-hover:[animation-play-state:paused]"),style:{animation:"scroll var(--animation-duration, 30s) var(--animation-direction, forwards) linear infinite"},children:t}),jsxRuntime.jsx("style",{jsx:true,children:`
|
|
2
|
+
@keyframes scroll {
|
|
3
|
+
from {
|
|
4
|
+
transform: translateX(0);
|
|
5
|
+
}
|
|
6
|
+
to {
|
|
7
|
+
transform: translateX(calc(-50% - 0.5rem));
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
`})]})}var R=v;exports.InfiniteScroll=v;exports.default=R;//# sourceMappingURL=index.js.map
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/infinite-scroll/index.tsx"],"names":["cn","inputs","twMerge","clsx","InfiniteScroll","children","speed","direction","pauseOnHover","className","scrollerRef","useRef","scrollerInnerRef","useEffect","item","duplicatedItem","jsxs","jsx","infinite_scroll_default"],"mappings":"sMAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCQO,SAASG,CAAAA,CAAe,CAC7B,SAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CAAQ,EAAA,CACR,SAAA,CAAAC,CAAAA,CAAY,MAAA,CACZ,YAAA,CAAAC,EAAe,IAAA,CACf,SAAA,CAAAC,CACF,CAAA,CAAwB,CACtB,IAAMC,CAAAA,CAAcC,YAAAA,CAAuB,IAAI,EACzCC,CAAAA,CAAmBD,YAAAA,CAAuB,IAAI,CAAA,CAEpD,OAAAE,eAAAA,CAAU,IAAM,CACd,GAAI,CAACH,CAAAA,CAAY,OAAA,EAAW,CAACE,CAAAA,CAAiB,QAAS,OAE/B,KAAA,CAAM,IAAA,CAAKA,CAAAA,CAAiB,QAAQ,QAAQ,CAAA,CAEpD,OAAA,CAASE,CAAAA,EAAS,CAChC,IAAMC,CAAAA,CAAiBD,CAAAA,CAAK,UAAU,IAAI,CAAA,CACtCF,CAAAA,CAAiB,OAAA,EACnBA,EAAiB,OAAA,CAAQ,WAAA,CAAYG,CAAc,EAEvD,CAAC,CAAA,CAEDL,CAAAA,CAAY,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,sBAAA,CAAwB,CAAA,EAAGJ,CAAK,GAAG,CAAA,CACzEI,CAAAA,CAAY,OAAA,CAAQ,KAAA,CAAM,YACxB,uBAAA,CACAH,CAAAA,GAAc,MAAA,CAAS,UAAA,CAAa,SACtC,EACF,CAAA,CAAG,CAACD,CAAAA,CAAOC,CAAS,CAAC,CAAA,CAGnBS,eAAAA,CAAC,OACC,GAAA,CAAKN,CAAAA,CACL,SAAA,CAAWV,CAAAA,CACT,yHACAS,CACF,CAAA,CAEA,QAAA,CAAA,CAAAQ,cAAAA,CAAC,OACC,GAAA,CAAKL,CAAAA,CACL,SAAA,CAAWZ,CAAAA,CACT,wDACA,gBAAA,CACAQ,CAAAA,EAAgB,2CAClB,CAAA,CACA,MAAO,CACL,SAAA,CAAW,4FACb,CAAA,CAEC,SAAAH,CAAAA,CACH,CAAA,CACAY,cAAAA,CAAC,OAAA,CAAA,CAAM,IAAG,IAAA,CAAE,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CASV,CAAA,CAAA,CACJ,CAEJ,CAEA,IAAOC,CAAAA,CAAQd","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect, useRef, ReactNode } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface InfiniteScrollProps {\r\n children: ReactNode;\r\n speed?: number;\r\n direction?: \"left\" | \"right\";\r\n pauseOnHover?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport function InfiniteScroll({\r\n children,\r\n speed = 30,\r\n direction = \"left\",\r\n pauseOnHover = true,\r\n className,\r\n}: InfiniteScrollProps) {\r\n const scrollerRef = useRef<HTMLDivElement>(null);\r\n const scrollerInnerRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n if (!scrollerRef.current || !scrollerInnerRef.current) return;\r\n\r\n const scrollerContent = Array.from(scrollerInnerRef.current.children);\r\n\r\n scrollerContent.forEach((item) => {\r\n const duplicatedItem = item.cloneNode(true);\r\n if (scrollerInnerRef.current) {\r\n scrollerInnerRef.current.appendChild(duplicatedItem);\r\n }\r\n });\r\n\r\n scrollerRef.current.style.setProperty(\"--animation-duration\", `${speed}s`);\r\n scrollerRef.current.style.setProperty(\r\n \"--animation-direction\",\r\n direction === \"left\" ? \"forwards\" : \"reverse\"\r\n );\r\n }, [speed, direction]);\r\n\r\n return (\r\n <div\r\n ref={scrollerRef}\r\n className={cn(\r\n \"group relative flex overflow-hidden [mask-image:linear-gradient(to_right,transparent,white_20%,white_80%,transparent)]\",\r\n className\r\n )}\r\n >\r\n <div\r\n ref={scrollerInnerRef}\r\n className={cn(\r\n \"flex min-w-full shrink-0 gap-4 py-4 w-max flex-nowrap\",\r\n \"animate-scroll\",\r\n pauseOnHover && \"group-hover:[animation-play-state:paused]\"\r\n )}\r\n style={{\r\n animation: `scroll var(--animation-duration, 30s) var(--animation-direction, forwards) linear infinite`,\r\n }}\r\n >\r\n {children}\r\n </div>\r\n <style jsx>{`\r\n @keyframes scroll {\r\n from {\r\n transform: translateX(0);\r\n }\r\n to {\r\n transform: translateX(calc(-50% - 0.5rem));\r\n }\r\n }\r\n `}</style>\r\n </div>\r\n );\r\n}\r\n\r\nexport default InfiniteScroll;\r\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import {useRef,useEffect}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function n(...t){return twMerge(clsx(t))}function v({children:t,speed:o=30,direction:a="left",pauseOnHover:s=true,className:c}){let r=useRef(null),e=useRef(null);return useEffect(()=>{if(!r.current||!e.current)return;Array.from(e.current.children).forEach(f=>{let m=f.cloneNode(true);e.current&&e.current.appendChild(m);}),r.current.style.setProperty("--animation-duration",`${o}s`),r.current.style.setProperty("--animation-direction",a==="left"?"forwards":"reverse");},[o,a]),jsxs("div",{ref:r,className:n("group relative flex overflow-hidden [mask-image:linear-gradient(to_right,transparent,white_20%,white_80%,transparent)]",c),children:[jsx("div",{ref:e,className:n("flex min-w-full shrink-0 gap-4 py-4 w-max flex-nowrap","animate-scroll",s&&"group-hover:[animation-play-state:paused]"),style:{animation:"scroll var(--animation-duration, 30s) var(--animation-direction, forwards) linear infinite"},children:t}),jsx("style",{jsx:true,children:`
|
|
2
|
+
@keyframes scroll {
|
|
3
|
+
from {
|
|
4
|
+
transform: translateX(0);
|
|
5
|
+
}
|
|
6
|
+
to {
|
|
7
|
+
transform: translateX(calc(-50% - 0.5rem));
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
`})]})}var R=v;export{v as InfiniteScroll,R as default};//# sourceMappingURL=index.mjs.map
|
|
11
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/infinite-scroll/index.tsx"],"names":["cn","inputs","twMerge","clsx","InfiniteScroll","children","speed","direction","pauseOnHover","className","scrollerRef","useRef","scrollerInnerRef","useEffect","item","duplicatedItem","jsxs","jsx","infinite_scroll_default"],"mappings":"2IAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCQO,SAASG,CAAAA,CAAe,CAC7B,SAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CAAQ,EAAA,CACR,SAAA,CAAAC,CAAAA,CAAY,MAAA,CACZ,YAAA,CAAAC,EAAe,IAAA,CACf,SAAA,CAAAC,CACF,CAAA,CAAwB,CACtB,IAAMC,CAAAA,CAAcC,MAAAA,CAAuB,IAAI,EACzCC,CAAAA,CAAmBD,MAAAA,CAAuB,IAAI,CAAA,CAEpD,OAAAE,SAAAA,CAAU,IAAM,CACd,GAAI,CAACH,CAAAA,CAAY,OAAA,EAAW,CAACE,CAAAA,CAAiB,QAAS,OAE/B,KAAA,CAAM,IAAA,CAAKA,CAAAA,CAAiB,QAAQ,QAAQ,CAAA,CAEpD,OAAA,CAASE,CAAAA,EAAS,CAChC,IAAMC,CAAAA,CAAiBD,CAAAA,CAAK,UAAU,IAAI,CAAA,CACtCF,CAAAA,CAAiB,OAAA,EACnBA,EAAiB,OAAA,CAAQ,WAAA,CAAYG,CAAc,EAEvD,CAAC,CAAA,CAEDL,CAAAA,CAAY,OAAA,CAAQ,KAAA,CAAM,WAAA,CAAY,sBAAA,CAAwB,CAAA,EAAGJ,CAAK,GAAG,CAAA,CACzEI,CAAAA,CAAY,OAAA,CAAQ,KAAA,CAAM,YACxB,uBAAA,CACAH,CAAAA,GAAc,MAAA,CAAS,UAAA,CAAa,SACtC,EACF,CAAA,CAAG,CAACD,CAAAA,CAAOC,CAAS,CAAC,CAAA,CAGnBS,IAAAA,CAAC,OACC,GAAA,CAAKN,CAAAA,CACL,SAAA,CAAWV,CAAAA,CACT,yHACAS,CACF,CAAA,CAEA,QAAA,CAAA,CAAAQ,GAAAA,CAAC,OACC,GAAA,CAAKL,CAAAA,CACL,SAAA,CAAWZ,CAAAA,CACT,wDACA,gBAAA,CACAQ,CAAAA,EAAgB,2CAClB,CAAA,CACA,MAAO,CACL,SAAA,CAAW,4FACb,CAAA,CAEC,SAAAH,CAAAA,CACH,CAAA,CACAY,GAAAA,CAAC,OAAA,CAAA,CAAM,IAAG,IAAA,CAAE,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,CASV,CAAA,CAAA,CACJ,CAEJ,CAEA,IAAOC,CAAAA,CAAQd","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect, useRef, ReactNode } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface InfiniteScrollProps {\r\n children: ReactNode;\r\n speed?: number;\r\n direction?: \"left\" | \"right\";\r\n pauseOnHover?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport function InfiniteScroll({\r\n children,\r\n speed = 30,\r\n direction = \"left\",\r\n pauseOnHover = true,\r\n className,\r\n}: InfiniteScrollProps) {\r\n const scrollerRef = useRef<HTMLDivElement>(null);\r\n const scrollerInnerRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n if (!scrollerRef.current || !scrollerInnerRef.current) return;\r\n\r\n const scrollerContent = Array.from(scrollerInnerRef.current.children);\r\n\r\n scrollerContent.forEach((item) => {\r\n const duplicatedItem = item.cloneNode(true);\r\n if (scrollerInnerRef.current) {\r\n scrollerInnerRef.current.appendChild(duplicatedItem);\r\n }\r\n });\r\n\r\n scrollerRef.current.style.setProperty(\"--animation-duration\", `${speed}s`);\r\n scrollerRef.current.style.setProperty(\r\n \"--animation-direction\",\r\n direction === \"left\" ? \"forwards\" : \"reverse\"\r\n );\r\n }, [speed, direction]);\r\n\r\n return (\r\n <div\r\n ref={scrollerRef}\r\n className={cn(\r\n \"group relative flex overflow-hidden [mask-image:linear-gradient(to_right,transparent,white_20%,white_80%,transparent)]\",\r\n className\r\n )}\r\n >\r\n <div\r\n ref={scrollerInnerRef}\r\n className={cn(\r\n \"flex min-w-full shrink-0 gap-4 py-4 w-max flex-nowrap\",\r\n \"animate-scroll\",\r\n pauseOnHover && \"group-hover:[animation-play-state:paused]\"\r\n )}\r\n style={{\r\n animation: `scroll var(--animation-duration, 30s) var(--animation-direction, forwards) linear infinite`,\r\n }}\r\n >\r\n {children}\r\n </div>\r\n <style jsx>{`\r\n @keyframes scroll {\r\n from {\r\n transform: translateX(0);\r\n }\r\n to {\r\n transform: translateX(calc(-50% - 0.5rem));\r\n }\r\n }\r\n `}</style>\r\n </div>\r\n );\r\n}\r\n\r\nexport default InfiniteScroll;\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 u(...n){return tailwindMerge.twMerge(clsx.clsx(n))}function z({maxLength:n=6,onComplete:l,onChange:a,className:m=""}){let[s,c]=react.useState(new Array(n).fill("")),o=react.useRef([]);react.useEffect(()=>{let e=s.join("");a?.(e),e.length===n&&l?.(e);},[s,n,a,l]);let b=(e,t)=>{if(t.length>1){let r=t.slice(0,n).split(""),f=[...s];r.forEach((h,i)=>{e+i<n&&(f[e+i]=h);}),c(f);let d=Math.min(e+r.length,n-1);o.current[d]?.focus();return}if(/^\d*$/.test(t)){let r=[...s];r[e]=t,c(r),t&&e<n-1&&o.current[e+1]?.focus();}},w=(e,t)=>{if(t.key==="Backspace")if(!s[e]&&e>0)o.current[e-1]?.focus();else {let r=[...s];r[e]="",c(r);}else t.key==="ArrowLeft"&&e>0?o.current[e-1]?.focus():t.key==="ArrowRight"&&e<n-1&&o.current[e+1]?.focus();},g=e=>{o.current[e]?.select();};return jsxRuntime.jsx("div",{className:u("flex items-center gap-2",m),children:s.map((e,t)=>jsxRuntime.jsx("input",{ref:r=>{o.current[t]=r;},type:"text",inputMode:"numeric",maxLength:1,value:e,onChange:r=>b(t,r.target.value),onKeyDown:r=>w(t,r),onFocus:()=>g(t),className:u("w-12 h-12 text-center text-lg font-semibold","border-2 border-zinc-300 dark:border-zinc-600 rounded-md","focus:border-zinc-900 dark:focus:border-white focus:outline-none","bg-white dark:bg-zinc-800 text-zinc-900 dark:text-white","transition-colors")},t))})}var R=z;exports.InputOTP=z;exports.default=R;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/input-otp/index.tsx"],"names":["cn","inputs","twMerge","clsx","InputOTP","maxLength","onComplete","onChange","className","values","setValues","useState","inputRefs","useRef","useEffect","currentValue","handleChange","index","value","pastedValues","newValues","val","nextIndex","handleKeyDown","e","handleFocus","jsx","el","input_otp_default"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState, useRef, useEffect } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface InputOTPProps {\r\n maxLength?: number;\r\n onComplete?: (value: string) => void;\r\n onChange?: (value: string) => void;\r\n className?: string;\r\n}\r\n\r\nexport function InputOTP({\r\n maxLength = 6,\r\n onComplete,\r\n onChange,\r\n className = \"\",\r\n}: InputOTPProps) {\r\n const [values, setValues] = useState<string[]>(new Array(maxLength).fill(\"\"));\r\n const inputRefs = useRef<(HTMLInputElement | null)[]>([]);\r\n\r\n useEffect(() => {\r\n const currentValue = values.join(\"\");\r\n onChange?.(currentValue);\r\n\r\n if (currentValue.length === maxLength) {\r\n onComplete?.(currentValue);\r\n }\r\n }, [values, maxLength, onChange, onComplete]);\r\n\r\n const handleChange = (index: number, value: string) => {\r\n if (value.length > 1) {\r\n const pastedValues = value.slice(0, maxLength).split(\"\");\r\n const newValues = [...values];\r\n pastedValues.forEach((val, i) => {\r\n if (index + i < maxLength) {\r\n newValues[index + i] = val;\r\n }\r\n });\r\n setValues(newValues);\r\n\r\n const nextIndex = Math.min(index + pastedValues.length, maxLength - 1);\r\n inputRefs.current[nextIndex]?.focus();\r\n return;\r\n }\r\n\r\n if (/^\\d*$/.test(value)) {\r\n const newValues = [...values];\r\n newValues[index] = value;\r\n setValues(newValues);\r\n\r\n if (value && index < maxLength - 1) {\r\n inputRefs.current[index + 1]?.focus();\r\n }\r\n }\r\n };\r\n\r\n const handleKeyDown = (\r\n index: number,\r\n e: React.KeyboardEvent<HTMLInputElement>\r\n ) => {\r\n if (e.key === \"Backspace\") {\r\n if (!values[index] && index > 0) {\r\n inputRefs.current[index - 1]?.focus();\r\n } else {\r\n const newValues = [...values];\r\n newValues[index] = \"\";\r\n setValues(newValues);\r\n }\r\n } else if (e.key === \"ArrowLeft\" && index > 0) {\r\n inputRefs.current[index - 1]?.focus();\r\n } else if (e.key === \"ArrowRight\" && index < maxLength - 1) {\r\n inputRefs.current[index + 1]?.focus();\r\n }\r\n };\r\n\r\n const handleFocus = (index: number) => {\r\n inputRefs.current[index]?.select();\r\n };\r\n\r\n return (\r\n <div className={cn(\"flex items-center gap-2\", className)}>\r\n {values.map((value, index) => (\r\n <input\r\n key={index}\r\n ref={(el) => {\r\n inputRefs.current[index] = el;\r\n }}\r\n type=\"text\"\r\n inputMode=\"numeric\"\r\n maxLength={1}\r\n value={value}\r\n onChange={(e) => handleChange(index, e.target.value)}\r\n onKeyDown={(e) => handleKeyDown(index, e)}\r\n onFocus={() => handleFocus(index)}\r\n className={cn(\r\n \"w-12 h-12 text-center text-lg font-semibold\",\r\n \"border-2 border-zinc-300 dark:border-zinc-600 rounded-md\",\r\n \"focus:border-zinc-900 dark:focus:border-white focus:outline-none\",\r\n \"bg-white dark:bg-zinc-800 text-zinc-900 dark:text-white\",\r\n \"transition-colors\"\r\n )}\r\n />\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default InputOTP;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {useState,useRef,useEffect}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function u(...n){return twMerge(clsx(n))}function z({maxLength:n=6,onComplete:l,onChange:a,className:m=""}){let[s,c]=useState(new Array(n).fill("")),o=useRef([]);useEffect(()=>{let e=s.join("");a?.(e),e.length===n&&l?.(e);},[s,n,a,l]);let b=(e,t)=>{if(t.length>1){let r=t.slice(0,n).split(""),f=[...s];r.forEach((h,i)=>{e+i<n&&(f[e+i]=h);}),c(f);let d=Math.min(e+r.length,n-1);o.current[d]?.focus();return}if(/^\d*$/.test(t)){let r=[...s];r[e]=t,c(r),t&&e<n-1&&o.current[e+1]?.focus();}},w=(e,t)=>{if(t.key==="Backspace")if(!s[e]&&e>0)o.current[e-1]?.focus();else {let r=[...s];r[e]="",c(r);}else t.key==="ArrowLeft"&&e>0?o.current[e-1]?.focus():t.key==="ArrowRight"&&e<n-1&&o.current[e+1]?.focus();},g=e=>{o.current[e]?.select();};return jsx("div",{className:u("flex items-center gap-2",m),children:s.map((e,t)=>jsx("input",{ref:r=>{o.current[t]=r;},type:"text",inputMode:"numeric",maxLength:1,value:e,onChange:r=>b(t,r.target.value),onKeyDown:r=>w(t,r),onFocus:()=>g(t),className:u("w-12 h-12 text-center text-lg font-semibold","border-2 border-zinc-300 dark:border-zinc-600 rounded-md","focus:border-zinc-900 dark:focus:border-white focus:outline-none","bg-white dark:bg-zinc-800 text-zinc-900 dark:text-white","transition-colors")},t))})}var R=z;export{z as InputOTP,R as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/input-otp/index.tsx"],"names":["cn","inputs","twMerge","clsx","InputOTP","maxLength","onComplete","onChange","className","values","setValues","useState","inputRefs","useRef","useEffect","currentValue","handleChange","index","value","pastedValues","newValues","val","nextIndex","handleKeyDown","e","handleFocus","jsx","el","input_otp_default"],"mappings":"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","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState, useRef, useEffect } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface InputOTPProps {\r\n maxLength?: number;\r\n onComplete?: (value: string) => void;\r\n onChange?: (value: string) => void;\r\n className?: string;\r\n}\r\n\r\nexport function InputOTP({\r\n maxLength = 6,\r\n onComplete,\r\n onChange,\r\n className = \"\",\r\n}: InputOTPProps) {\r\n const [values, setValues] = useState<string[]>(new Array(maxLength).fill(\"\"));\r\n const inputRefs = useRef<(HTMLInputElement | null)[]>([]);\r\n\r\n useEffect(() => {\r\n const currentValue = values.join(\"\");\r\n onChange?.(currentValue);\r\n\r\n if (currentValue.length === maxLength) {\r\n onComplete?.(currentValue);\r\n }\r\n }, [values, maxLength, onChange, onComplete]);\r\n\r\n const handleChange = (index: number, value: string) => {\r\n if (value.length > 1) {\r\n const pastedValues = value.slice(0, maxLength).split(\"\");\r\n const newValues = [...values];\r\n pastedValues.forEach((val, i) => {\r\n if (index + i < maxLength) {\r\n newValues[index + i] = val;\r\n }\r\n });\r\n setValues(newValues);\r\n\r\n const nextIndex = Math.min(index + pastedValues.length, maxLength - 1);\r\n inputRefs.current[nextIndex]?.focus();\r\n return;\r\n }\r\n\r\n if (/^\\d*$/.test(value)) {\r\n const newValues = [...values];\r\n newValues[index] = value;\r\n setValues(newValues);\r\n\r\n if (value && index < maxLength - 1) {\r\n inputRefs.current[index + 1]?.focus();\r\n }\r\n }\r\n };\r\n\r\n const handleKeyDown = (\r\n index: number,\r\n e: React.KeyboardEvent<HTMLInputElement>\r\n ) => {\r\n if (e.key === \"Backspace\") {\r\n if (!values[index] && index > 0) {\r\n inputRefs.current[index - 1]?.focus();\r\n } else {\r\n const newValues = [...values];\r\n newValues[index] = \"\";\r\n setValues(newValues);\r\n }\r\n } else if (e.key === \"ArrowLeft\" && index > 0) {\r\n inputRefs.current[index - 1]?.focus();\r\n } else if (e.key === \"ArrowRight\" && index < maxLength - 1) {\r\n inputRefs.current[index + 1]?.focus();\r\n }\r\n };\r\n\r\n const handleFocus = (index: number) => {\r\n inputRefs.current[index]?.select();\r\n };\r\n\r\n return (\r\n <div className={cn(\"flex items-center gap-2\", className)}>\r\n {values.map((value, index) => (\r\n <input\r\n key={index}\r\n ref={(el) => {\r\n inputRefs.current[index] = el;\r\n }}\r\n type=\"text\"\r\n inputMode=\"numeric\"\r\n maxLength={1}\r\n value={value}\r\n onChange={(e) => handleChange(index, e.target.value)}\r\n onKeyDown={(e) => handleKeyDown(index, e)}\r\n onFocus={() => handleFocus(index)}\r\n className={cn(\r\n \"w-12 h-12 text-center text-lg font-semibold\",\r\n \"border-2 border-zinc-300 dark:border-zinc-600 rounded-md\",\r\n \"focus:border-zinc-900 dark:focus:border-white focus:outline-none\",\r\n \"bg-white dark:bg-zinc-800 text-zinc-900 dark:text-white\",\r\n \"transition-colors\"\r\n )}\r\n />\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default InputOTP;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var framerMotion=require('framer-motion'),jsxRuntime=require('react/jsx-runtime');function i(...n){return n.filter(Boolean).join(" ")}function c({title:n="Configuring your account...",subtitle:s="Please wait while we prepare everything for you",size:l="md",className:o,...d}){let e={sm:{container:"size-20",titleClass:"text-sm/tight font-medium",subtitleClass:"text-xs/relaxed",spacing:"space-y-2",maxWidth:"max-w-48"},md:{container:"size-32",titleClass:"text-base/snug font-medium",subtitleClass:"text-sm/relaxed",spacing:"space-y-3",maxWidth:"max-w-56"},lg:{container:"size-40",titleClass:"text-lg/tight font-semibold",subtitleClass:"text-base/relaxed",spacing:"space-y-4",maxWidth:"max-w-64"}}[l];return jsxRuntime.jsxs("div",{className:i("flex flex-col items-center justify-center gap-8 p-8",o),...d,children:[jsxRuntime.jsxs(framerMotion.motion.div,{className:i("relative",e.container),animate:{scale:[1,1.02,1]},transition:{duration:4,repeat:1/0,ease:[.4,0,.6,1]},children:[jsxRuntime.jsx(framerMotion.motion.div,{className:"absolute inset-0 rounded-full",style:{background:"conic-gradient(from 0deg, transparent 0deg, rgb(0, 0, 0) 90deg, transparent 180deg)",mask:"radial-gradient(circle at 50% 50%, transparent 35%, black 37%, black 39%, transparent 41%)",WebkitMask:"radial-gradient(circle at 50% 50%, transparent 35%, black 37%, black 39%, transparent 41%)",opacity:.8},animate:{rotate:[0,360]},transition:{duration:3,repeat:1/0,ease:"linear"}}),jsxRuntime.jsx(framerMotion.motion.div,{className:"absolute inset-0 rounded-full",style:{background:"conic-gradient(from 0deg, transparent 0deg, rgb(0, 0, 0) 120deg, rgba(0, 0, 0, 0.5) 240deg, transparent 360deg)",mask:"radial-gradient(circle at 50% 50%, transparent 42%, black 44%, black 48%, transparent 50%)",WebkitMask:"radial-gradient(circle at 50% 50%, transparent 42%, black 44%, black 48%, transparent 50%)",opacity:.9},animate:{rotate:[0,360]},transition:{duration:2.5,repeat:1/0,ease:[.4,0,.6,1]}}),jsxRuntime.jsx(framerMotion.motion.div,{className:"absolute inset-0 rounded-full dark:block hidden",style:{background:"conic-gradient(from 0deg, transparent 0deg, rgb(255, 255, 255) 90deg, transparent 180deg)",mask:"radial-gradient(circle at 50% 50%, transparent 35%, black 37%, black 39%, transparent 41%)",WebkitMask:"radial-gradient(circle at 50% 50%, transparent 35%, black 37%, black 39%, transparent 41%)",opacity:.8},animate:{rotate:[0,360]},transition:{duration:3,repeat:1/0,ease:"linear"}}),jsxRuntime.jsx(framerMotion.motion.div,{className:"absolute inset-0 rounded-full dark:block hidden",style:{background:"conic-gradient(from 0deg, transparent 0deg, rgb(255, 255, 255) 120deg, rgba(255, 255, 255, 0.5) 240deg, transparent 360deg)",mask:"radial-gradient(circle at 50% 50%, transparent 42%, black 44%, black 48%, transparent 50%)",WebkitMask:"radial-gradient(circle at 50% 50%, transparent 42%, black 44%, black 48%, transparent 50%)",opacity:.9},animate:{rotate:[0,360]},transition:{duration:2.5,repeat:1/0,ease:[.4,0,.6,1]}})]}),jsxRuntime.jsxs(framerMotion.motion.div,{className:i("text-center",e.spacing,e.maxWidth),initial:{opacity:0,y:12},animate:{opacity:1,y:0},transition:{delay:.4,duration:1,ease:[.4,0,.2,1]},children:[jsxRuntime.jsx(framerMotion.motion.h1,{className:i(e.titleClass,"text-black/90 dark:text-white/90 font-medium tracking-[-0.02em] leading-[1.15] antialiased"),initial:{opacity:0,y:12},animate:{opacity:1,y:0},transition:{delay:.6,duration:.8,ease:[.4,0,.2,1]},children:jsxRuntime.jsx(framerMotion.motion.span,{animate:{opacity:[.9,.7,.9]},transition:{duration:3,repeat:1/0,ease:[.4,0,.6,1]},children:n})}),jsxRuntime.jsx(framerMotion.motion.p,{className:i(e.subtitleClass,"text-black/60 dark:text-white/60 font-normal tracking-[-0.01em] leading-[1.45] antialiased"),initial:{opacity:0,y:8},animate:{opacity:1,y:0},transition:{delay:.8,duration:.8,ease:[.4,0,.2,1]},children:jsxRuntime.jsx(framerMotion.motion.span,{animate:{opacity:[.6,.4,.6]},transition:{duration:4,repeat:1/0,ease:[.4,0,.6,1]},children:s})})]})]})}var m=c;exports.Loader=c;exports.default=m;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/loader/index.tsx"],"names":["cn","classes","Loader","title","subtitle","size","className","props","config","jsxs","motion","jsx","loader_default"],"mappings":"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","file":"index.js","sourcesContent":["\"use client\";\r\n\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 LoaderProps extends React.HTMLAttributes<HTMLDivElement> {\r\n title?: string;\r\n subtitle?: string;\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n}\r\n\r\nexport function Loader({\r\n title = \"Configuring your account...\",\r\n subtitle = \"Please wait while we prepare everything for you\",\r\n size = \"md\",\r\n className,\r\n ...props\r\n}: LoaderProps) {\r\n const sizeConfig = {\r\n sm: {\r\n container: \"size-20\",\r\n titleClass: \"text-sm/tight font-medium\",\r\n subtitleClass: \"text-xs/relaxed\",\r\n spacing: \"space-y-2\",\r\n maxWidth: \"max-w-48\",\r\n },\r\n md: {\r\n container: \"size-32\",\r\n titleClass: \"text-base/snug font-medium\",\r\n subtitleClass: \"text-sm/relaxed\",\r\n spacing: \"space-y-3\",\r\n maxWidth: \"max-w-56\",\r\n },\r\n lg: {\r\n container: \"size-40\",\r\n titleClass: \"text-lg/tight font-semibold\",\r\n subtitleClass: \"text-base/relaxed\",\r\n spacing: \"space-y-4\",\r\n maxWidth: \"max-w-64\",\r\n },\r\n };\r\n\r\n const config = sizeConfig[size];\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"flex flex-col items-center justify-center gap-8 p-8\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <motion.div\r\n className={cn(\"relative\", config.container)}\r\n animate={{\r\n scale: [1, 1.02, 1],\r\n }}\r\n transition={{\r\n duration: 4,\r\n repeat: Infinity,\r\n ease: [0.4, 0, 0.6, 1],\r\n }}\r\n >\r\n <motion.div\r\n className=\"absolute inset-0 rounded-full\"\r\n style={{\r\n background: `conic-gradient(from 0deg, transparent 0deg, rgb(0, 0, 0) 90deg, transparent 180deg)`,\r\n mask: `radial-gradient(circle at 50% 50%, transparent 35%, black 37%, black 39%, transparent 41%)`,\r\n WebkitMask: `radial-gradient(circle at 50% 50%, transparent 35%, black 37%, black 39%, transparent 41%)`,\r\n opacity: 0.8,\r\n }}\r\n animate={{\r\n rotate: [0, 360],\r\n }}\r\n transition={{\r\n duration: 3,\r\n repeat: Infinity,\r\n ease: \"linear\",\r\n }}\r\n />\r\n\r\n <motion.div\r\n className=\"absolute inset-0 rounded-full\"\r\n style={{\r\n background: `conic-gradient(from 0deg, transparent 0deg, rgb(0, 0, 0) 120deg, rgba(0, 0, 0, 0.5) 240deg, transparent 360deg)`,\r\n mask: `radial-gradient(circle at 50% 50%, transparent 42%, black 44%, black 48%, transparent 50%)`,\r\n WebkitMask: `radial-gradient(circle at 50% 50%, transparent 42%, black 44%, black 48%, transparent 50%)`,\r\n opacity: 0.9,\r\n }}\r\n animate={{\r\n rotate: [0, 360],\r\n }}\r\n transition={{\r\n duration: 2.5,\r\n repeat: Infinity,\r\n ease: [0.4, 0, 0.6, 1],\r\n }}\r\n />\r\n\r\n <motion.div\r\n className=\"absolute inset-0 rounded-full dark:block hidden\"\r\n style={{\r\n background: `conic-gradient(from 0deg, transparent 0deg, rgb(255, 255, 255) 90deg, transparent 180deg)`,\r\n mask: `radial-gradient(circle at 50% 50%, transparent 35%, black 37%, black 39%, transparent 41%)`,\r\n WebkitMask: `radial-gradient(circle at 50% 50%, transparent 35%, black 37%, black 39%, transparent 41%)`,\r\n opacity: 0.8,\r\n }}\r\n animate={{\r\n rotate: [0, 360],\r\n }}\r\n transition={{\r\n duration: 3,\r\n repeat: Infinity,\r\n ease: \"linear\",\r\n }}\r\n />\r\n\r\n <motion.div\r\n className=\"absolute inset-0 rounded-full dark:block hidden\"\r\n style={{\r\n background: `conic-gradient(from 0deg, transparent 0deg, rgb(255, 255, 255) 120deg, rgba(255, 255, 255, 0.5) 240deg, transparent 360deg)`,\r\n mask: `radial-gradient(circle at 50% 50%, transparent 42%, black 44%, black 48%, transparent 50%)`,\r\n WebkitMask: `radial-gradient(circle at 50% 50%, transparent 42%, black 44%, black 48%, transparent 50%)`,\r\n opacity: 0.9,\r\n }}\r\n animate={{\r\n rotate: [0, 360],\r\n }}\r\n transition={{\r\n duration: 2.5,\r\n repeat: Infinity,\r\n ease: [0.4, 0, 0.6, 1],\r\n }}\r\n />\r\n </motion.div>\r\n\r\n <motion.div\r\n className={cn(\"text-center\", config.spacing, config.maxWidth)}\r\n initial={{ opacity: 0, y: 12 }}\r\n animate={{\r\n opacity: 1,\r\n y: 0,\r\n }}\r\n transition={{\r\n delay: 0.4,\r\n duration: 1,\r\n ease: [0.4, 0, 0.2, 1],\r\n }}\r\n >\r\n <motion.h1\r\n className={cn(\r\n config.titleClass,\r\n \"text-black/90 dark:text-white/90 font-medium tracking-[-0.02em] leading-[1.15] antialiased\"\r\n )}\r\n initial={{ opacity: 0, y: 12 }}\r\n animate={{\r\n opacity: 1,\r\n y: 0,\r\n }}\r\n transition={{\r\n delay: 0.6,\r\n duration: 0.8,\r\n ease: [0.4, 0, 0.2, 1],\r\n }}\r\n >\r\n <motion.span\r\n animate={{\r\n opacity: [0.9, 0.7, 0.9],\r\n }}\r\n transition={{\r\n duration: 3,\r\n repeat: Infinity,\r\n ease: [0.4, 0, 0.6, 1],\r\n }}\r\n >\r\n {title}\r\n </motion.span>\r\n </motion.h1>\r\n\r\n <motion.p\r\n className={cn(\r\n config.subtitleClass,\r\n \"text-black/60 dark:text-white/60 font-normal tracking-[-0.01em] leading-[1.45] antialiased\"\r\n )}\r\n initial={{ opacity: 0, y: 8 }}\r\n animate={{\r\n opacity: 1,\r\n y: 0,\r\n }}\r\n transition={{\r\n delay: 0.8,\r\n duration: 0.8,\r\n ease: [0.4, 0, 0.2, 1],\r\n }}\r\n >\r\n <motion.span\r\n animate={{\r\n opacity: [0.6, 0.4, 0.6],\r\n }}\r\n transition={{\r\n duration: 4,\r\n repeat: Infinity,\r\n ease: [0.4, 0, 0.6, 1],\r\n }}\r\n >\r\n {subtitle}\r\n </motion.span>\r\n </motion.p>\r\n </motion.div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Loader;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {motion}from'framer-motion';import {jsxs,jsx}from'react/jsx-runtime';function i(...n){return n.filter(Boolean).join(" ")}function c({title:n="Configuring your account...",subtitle:s="Please wait while we prepare everything for you",size:l="md",className:o,...d}){let e={sm:{container:"size-20",titleClass:"text-sm/tight font-medium",subtitleClass:"text-xs/relaxed",spacing:"space-y-2",maxWidth:"max-w-48"},md:{container:"size-32",titleClass:"text-base/snug font-medium",subtitleClass:"text-sm/relaxed",spacing:"space-y-3",maxWidth:"max-w-56"},lg:{container:"size-40",titleClass:"text-lg/tight font-semibold",subtitleClass:"text-base/relaxed",spacing:"space-y-4",maxWidth:"max-w-64"}}[l];return jsxs("div",{className:i("flex flex-col items-center justify-center gap-8 p-8",o),...d,children:[jsxs(motion.div,{className:i("relative",e.container),animate:{scale:[1,1.02,1]},transition:{duration:4,repeat:1/0,ease:[.4,0,.6,1]},children:[jsx(motion.div,{className:"absolute inset-0 rounded-full",style:{background:"conic-gradient(from 0deg, transparent 0deg, rgb(0, 0, 0) 90deg, transparent 180deg)",mask:"radial-gradient(circle at 50% 50%, transparent 35%, black 37%, black 39%, transparent 41%)",WebkitMask:"radial-gradient(circle at 50% 50%, transparent 35%, black 37%, black 39%, transparent 41%)",opacity:.8},animate:{rotate:[0,360]},transition:{duration:3,repeat:1/0,ease:"linear"}}),jsx(motion.div,{className:"absolute inset-0 rounded-full",style:{background:"conic-gradient(from 0deg, transparent 0deg, rgb(0, 0, 0) 120deg, rgba(0, 0, 0, 0.5) 240deg, transparent 360deg)",mask:"radial-gradient(circle at 50% 50%, transparent 42%, black 44%, black 48%, transparent 50%)",WebkitMask:"radial-gradient(circle at 50% 50%, transparent 42%, black 44%, black 48%, transparent 50%)",opacity:.9},animate:{rotate:[0,360]},transition:{duration:2.5,repeat:1/0,ease:[.4,0,.6,1]}}),jsx(motion.div,{className:"absolute inset-0 rounded-full dark:block hidden",style:{background:"conic-gradient(from 0deg, transparent 0deg, rgb(255, 255, 255) 90deg, transparent 180deg)",mask:"radial-gradient(circle at 50% 50%, transparent 35%, black 37%, black 39%, transparent 41%)",WebkitMask:"radial-gradient(circle at 50% 50%, transparent 35%, black 37%, black 39%, transparent 41%)",opacity:.8},animate:{rotate:[0,360]},transition:{duration:3,repeat:1/0,ease:"linear"}}),jsx(motion.div,{className:"absolute inset-0 rounded-full dark:block hidden",style:{background:"conic-gradient(from 0deg, transparent 0deg, rgb(255, 255, 255) 120deg, rgba(255, 255, 255, 0.5) 240deg, transparent 360deg)",mask:"radial-gradient(circle at 50% 50%, transparent 42%, black 44%, black 48%, transparent 50%)",WebkitMask:"radial-gradient(circle at 50% 50%, transparent 42%, black 44%, black 48%, transparent 50%)",opacity:.9},animate:{rotate:[0,360]},transition:{duration:2.5,repeat:1/0,ease:[.4,0,.6,1]}})]}),jsxs(motion.div,{className:i("text-center",e.spacing,e.maxWidth),initial:{opacity:0,y:12},animate:{opacity:1,y:0},transition:{delay:.4,duration:1,ease:[.4,0,.2,1]},children:[jsx(motion.h1,{className:i(e.titleClass,"text-black/90 dark:text-white/90 font-medium tracking-[-0.02em] leading-[1.15] antialiased"),initial:{opacity:0,y:12},animate:{opacity:1,y:0},transition:{delay:.6,duration:.8,ease:[.4,0,.2,1]},children:jsx(motion.span,{animate:{opacity:[.9,.7,.9]},transition:{duration:3,repeat:1/0,ease:[.4,0,.6,1]},children:n})}),jsx(motion.p,{className:i(e.subtitleClass,"text-black/60 dark:text-white/60 font-normal tracking-[-0.01em] leading-[1.45] antialiased"),initial:{opacity:0,y:8},animate:{opacity:1,y:0},transition:{delay:.8,duration:.8,ease:[.4,0,.2,1]},children:jsx(motion.span,{animate:{opacity:[.6,.4,.6]},transition:{duration:4,repeat:1/0,ease:[.4,0,.6,1]},children:s})})]})]})}var m=c;export{c as Loader,m as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/loader/index.tsx"],"names":["cn","classes","Loader","title","subtitle","size","className","props","config","jsxs","motion","jsx","loader_default"],"mappings":"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","file":"index.mjs","sourcesContent":["\"use client\";\r\n\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 LoaderProps extends React.HTMLAttributes<HTMLDivElement> {\r\n title?: string;\r\n subtitle?: string;\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n}\r\n\r\nexport function Loader({\r\n title = \"Configuring your account...\",\r\n subtitle = \"Please wait while we prepare everything for you\",\r\n size = \"md\",\r\n className,\r\n ...props\r\n}: LoaderProps) {\r\n const sizeConfig = {\r\n sm: {\r\n container: \"size-20\",\r\n titleClass: \"text-sm/tight font-medium\",\r\n subtitleClass: \"text-xs/relaxed\",\r\n spacing: \"space-y-2\",\r\n maxWidth: \"max-w-48\",\r\n },\r\n md: {\r\n container: \"size-32\",\r\n titleClass: \"text-base/snug font-medium\",\r\n subtitleClass: \"text-sm/relaxed\",\r\n spacing: \"space-y-3\",\r\n maxWidth: \"max-w-56\",\r\n },\r\n lg: {\r\n container: \"size-40\",\r\n titleClass: \"text-lg/tight font-semibold\",\r\n subtitleClass: \"text-base/relaxed\",\r\n spacing: \"space-y-4\",\r\n maxWidth: \"max-w-64\",\r\n },\r\n };\r\n\r\n const config = sizeConfig[size];\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"flex flex-col items-center justify-center gap-8 p-8\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <motion.div\r\n className={cn(\"relative\", config.container)}\r\n animate={{\r\n scale: [1, 1.02, 1],\r\n }}\r\n transition={{\r\n duration: 4,\r\n repeat: Infinity,\r\n ease: [0.4, 0, 0.6, 1],\r\n }}\r\n >\r\n <motion.div\r\n className=\"absolute inset-0 rounded-full\"\r\n style={{\r\n background: `conic-gradient(from 0deg, transparent 0deg, rgb(0, 0, 0) 90deg, transparent 180deg)`,\r\n mask: `radial-gradient(circle at 50% 50%, transparent 35%, black 37%, black 39%, transparent 41%)`,\r\n WebkitMask: `radial-gradient(circle at 50% 50%, transparent 35%, black 37%, black 39%, transparent 41%)`,\r\n opacity: 0.8,\r\n }}\r\n animate={{\r\n rotate: [0, 360],\r\n }}\r\n transition={{\r\n duration: 3,\r\n repeat: Infinity,\r\n ease: \"linear\",\r\n }}\r\n />\r\n\r\n <motion.div\r\n className=\"absolute inset-0 rounded-full\"\r\n style={{\r\n background: `conic-gradient(from 0deg, transparent 0deg, rgb(0, 0, 0) 120deg, rgba(0, 0, 0, 0.5) 240deg, transparent 360deg)`,\r\n mask: `radial-gradient(circle at 50% 50%, transparent 42%, black 44%, black 48%, transparent 50%)`,\r\n WebkitMask: `radial-gradient(circle at 50% 50%, transparent 42%, black 44%, black 48%, transparent 50%)`,\r\n opacity: 0.9,\r\n }}\r\n animate={{\r\n rotate: [0, 360],\r\n }}\r\n transition={{\r\n duration: 2.5,\r\n repeat: Infinity,\r\n ease: [0.4, 0, 0.6, 1],\r\n }}\r\n />\r\n\r\n <motion.div\r\n className=\"absolute inset-0 rounded-full dark:block hidden\"\r\n style={{\r\n background: `conic-gradient(from 0deg, transparent 0deg, rgb(255, 255, 255) 90deg, transparent 180deg)`,\r\n mask: `radial-gradient(circle at 50% 50%, transparent 35%, black 37%, black 39%, transparent 41%)`,\r\n WebkitMask: `radial-gradient(circle at 50% 50%, transparent 35%, black 37%, black 39%, transparent 41%)`,\r\n opacity: 0.8,\r\n }}\r\n animate={{\r\n rotate: [0, 360],\r\n }}\r\n transition={{\r\n duration: 3,\r\n repeat: Infinity,\r\n ease: \"linear\",\r\n }}\r\n />\r\n\r\n <motion.div\r\n className=\"absolute inset-0 rounded-full dark:block hidden\"\r\n style={{\r\n background: `conic-gradient(from 0deg, transparent 0deg, rgb(255, 255, 255) 120deg, rgba(255, 255, 255, 0.5) 240deg, transparent 360deg)`,\r\n mask: `radial-gradient(circle at 50% 50%, transparent 42%, black 44%, black 48%, transparent 50%)`,\r\n WebkitMask: `radial-gradient(circle at 50% 50%, transparent 42%, black 44%, black 48%, transparent 50%)`,\r\n opacity: 0.9,\r\n }}\r\n animate={{\r\n rotate: [0, 360],\r\n }}\r\n transition={{\r\n duration: 2.5,\r\n repeat: Infinity,\r\n ease: [0.4, 0, 0.6, 1],\r\n }}\r\n />\r\n </motion.div>\r\n\r\n <motion.div\r\n className={cn(\"text-center\", config.spacing, config.maxWidth)}\r\n initial={{ opacity: 0, y: 12 }}\r\n animate={{\r\n opacity: 1,\r\n y: 0,\r\n }}\r\n transition={{\r\n delay: 0.4,\r\n duration: 1,\r\n ease: [0.4, 0, 0.2, 1],\r\n }}\r\n >\r\n <motion.h1\r\n className={cn(\r\n config.titleClass,\r\n \"text-black/90 dark:text-white/90 font-medium tracking-[-0.02em] leading-[1.15] antialiased\"\r\n )}\r\n initial={{ opacity: 0, y: 12 }}\r\n animate={{\r\n opacity: 1,\r\n y: 0,\r\n }}\r\n transition={{\r\n delay: 0.6,\r\n duration: 0.8,\r\n ease: [0.4, 0, 0.2, 1],\r\n }}\r\n >\r\n <motion.span\r\n animate={{\r\n opacity: [0.9, 0.7, 0.9],\r\n }}\r\n transition={{\r\n duration: 3,\r\n repeat: Infinity,\r\n ease: [0.4, 0, 0.6, 1],\r\n }}\r\n >\r\n {title}\r\n </motion.span>\r\n </motion.h1>\r\n\r\n <motion.p\r\n className={cn(\r\n config.subtitleClass,\r\n \"text-black/60 dark:text-white/60 font-normal tracking-[-0.01em] leading-[1.45] antialiased\"\r\n )}\r\n initial={{ opacity: 0, y: 8 }}\r\n animate={{\r\n opacity: 1,\r\n y: 0,\r\n }}\r\n transition={{\r\n delay: 0.8,\r\n duration: 0.8,\r\n ease: [0.4, 0, 0.2, 1],\r\n }}\r\n >\r\n <motion.span\r\n animate={{\r\n opacity: [0.6, 0.4, 0.6],\r\n }}\r\n transition={{\r\n duration: 4,\r\n repeat: Infinity,\r\n ease: [0.4, 0, 0.6, 1],\r\n }}\r\n >\r\n {subtitle}\r\n </motion.span>\r\n </motion.p>\r\n </motion.div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Loader;\r\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var jsxRuntime=require('react/jsx-runtime');function n({text:t="Loading...",className:i=""}){return jsxRuntime.jsx("div",{className:`w-full h-full min-h-[400px] flex items-center justify-center ${i}`,children:jsxRuntime.jsxs("div",{className:"relative h-fit min-w-12 w-fit text-4xl font-bold tracking-wider text-black dark:text-white",children:[jsxRuntime.jsx("p",{className:"relative z-0",children:t}),jsxRuntime.jsx("div",{className:"absolute h-full aspect-square left-0 top-0 rounded-[20%] bg-foreground/10 backdrop-invert",style:{animation:"invert-move 2s ease-in-out infinite"}}),jsxRuntime.jsx("style",{dangerouslySetInnerHTML:{__html:`
|
|
2
|
+
@keyframes invert-move { 50% { left: calc(100% - 3rem); } }
|
|
3
|
+
`}})]})})}var r=n;exports.LoadingInvert=n;exports.default=r;//# sourceMappingURL=index.js.map
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/loading-invert/index.tsx"],"names":["LoadingInvert","text","className","jsx","jsxs","loading_invert_default"],"mappings":"kHAOO,SAASA,CAAAA,CAAc,CAAE,IAAA,CAAAC,CAAAA,CAAO,YAAA,CAAc,UAAAC,CAAAA,CAAY,EAAG,CAAA,CAAuB,CACzF,OACEC,cAAAA,CAAC,OAAI,SAAA,CAAW,CAAA,6DAAA,EAAgED,CAAS,CAAA,CAAA,CACvF,QAAA,CAAAE,eAAAA,CAAC,OAAI,SAAA,CAAU,4FAAA,CACb,UAAAD,cAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,cAAA,CAAgB,QAAA,CAAAF,CAAAA,CAAK,CAAA,CAClCE,cAAAA,CAAC,KAAA,CAAA,CACC,UAAU,2FAAA,CACV,KAAA,CAAO,CACL,SAAA,CAAW,qCACb,CAAA,CACF,EACAA,cAAAA,CAAC,OAAA,CAAA,CAAM,uBAAA,CAAyB,CAC9B,MAAA,CAAQ;AAAA;AAAA,UAAA,CAGV,EAAG,CAAA,CAAA,CACL,CAAA,CACF,CAEJ,KAEOE,CAAAA,CAAQL","file":"index.js","sourcesContent":["\"use client\";\r\n\r\ninterface LoadingInvertProps {\r\n text?: string;\r\n className?: string;\r\n}\r\n\r\nexport function LoadingInvert({ text = \"Loading...\", className = \"\" }: LoadingInvertProps) {\r\n return (\r\n <div className={`w-full h-full min-h-[400px] flex items-center justify-center ${className}`}>\r\n <div className=\"relative h-fit min-w-12 w-fit text-4xl font-bold tracking-wider text-black dark:text-white\">\r\n <p className=\"relative z-0\">{text}</p>\r\n <div \r\n className=\"absolute h-full aspect-square left-0 top-0 rounded-[20%] bg-foreground/10 backdrop-invert\"\r\n style={{\r\n animation: \"invert-move 2s ease-in-out infinite\"\r\n }}\r\n />\r\n <style dangerouslySetInnerHTML={{\r\n __html: `\r\n @keyframes invert-move { 50% { left: calc(100% - 3rem); } }\r\n `\r\n }} />\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default LoadingInvert;\r\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import {jsx,jsxs}from'react/jsx-runtime';function n({text:t="Loading...",className:i=""}){return jsx("div",{className:`w-full h-full min-h-[400px] flex items-center justify-center ${i}`,children:jsxs("div",{className:"relative h-fit min-w-12 w-fit text-4xl font-bold tracking-wider text-black dark:text-white",children:[jsx("p",{className:"relative z-0",children:t}),jsx("div",{className:"absolute h-full aspect-square left-0 top-0 rounded-[20%] bg-foreground/10 backdrop-invert",style:{animation:"invert-move 2s ease-in-out infinite"}}),jsx("style",{dangerouslySetInnerHTML:{__html:`
|
|
2
|
+
@keyframes invert-move { 50% { left: calc(100% - 3rem); } }
|
|
3
|
+
`}})]})})}var r=n;export{n as LoadingInvert,r as default};//# sourceMappingURL=index.mjs.map
|
|
4
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/loading-invert/index.tsx"],"names":["LoadingInvert","text","className","jsx","jsxs","loading_invert_default"],"mappings":"yCAOO,SAASA,CAAAA,CAAc,CAAE,IAAA,CAAAC,CAAAA,CAAO,YAAA,CAAc,UAAAC,CAAAA,CAAY,EAAG,CAAA,CAAuB,CACzF,OACEC,GAAAA,CAAC,OAAI,SAAA,CAAW,CAAA,6DAAA,EAAgED,CAAS,CAAA,CAAA,CACvF,QAAA,CAAAE,IAAAA,CAAC,OAAI,SAAA,CAAU,4FAAA,CACb,UAAAD,GAAAA,CAAC,GAAA,CAAA,CAAE,UAAU,cAAA,CAAgB,QAAA,CAAAF,CAAAA,CAAK,CAAA,CAClCE,GAAAA,CAAC,KAAA,CAAA,CACC,UAAU,2FAAA,CACV,KAAA,CAAO,CACL,SAAA,CAAW,qCACb,CAAA,CACF,EACAA,GAAAA,CAAC,OAAA,CAAA,CAAM,uBAAA,CAAyB,CAC9B,MAAA,CAAQ;AAAA;AAAA,UAAA,CAGV,EAAG,CAAA,CAAA,CACL,CAAA,CACF,CAEJ,KAEOE,CAAAA,CAAQL","file":"index.mjs","sourcesContent":["\"use client\";\r\n\r\ninterface LoadingInvertProps {\r\n text?: string;\r\n className?: string;\r\n}\r\n\r\nexport function LoadingInvert({ text = \"Loading...\", className = \"\" }: LoadingInvertProps) {\r\n return (\r\n <div className={`w-full h-full min-h-[400px] flex items-center justify-center ${className}`}>\r\n <div className=\"relative h-fit min-w-12 w-fit text-4xl font-bold tracking-wider text-black dark:text-white\">\r\n <p className=\"relative z-0\">{text}</p>\r\n <div \r\n className=\"absolute h-full aspect-square left-0 top-0 rounded-[20%] bg-foreground/10 backdrop-invert\"\r\n style={{\r\n animation: \"invert-move 2s ease-in-out infinite\"\r\n }}\r\n />\r\n <style dangerouslySetInnerHTML={{\r\n __html: `\r\n @keyframes invert-move { 50% { left: calc(100% - 3rem); } }\r\n `\r\n }} />\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default LoadingInvert;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function n(...t){return tailwindMerge.twMerge(clsx.clsx(t))}function v({loadingStates:t,loading:a,duration:o=2e3,loop:l=true,className:u}){let[r,s]=react.useState(0);return react.useEffect(()=>{if(!a){s(0);return}let c=setInterval(()=>{s(i=>i===t.length-1?l?0:i:i+1);},o/t.length);return ()=>clearInterval(c)},[a,t.length,o,l]),jsxRuntime.jsx(framerMotion.AnimatePresence,{children:a&&jsxRuntime.jsx(framerMotion.motion.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},className:n("fixed inset-0 z-[100] flex items-center justify-center bg-black/80 backdrop-blur-sm",u),children:jsxRuntime.jsx("div",{className:"bg-white dark:bg-zinc-900 rounded-lg p-8 shadow-2xl max-w-md w-full mx-4",children:jsxRuntime.jsxs("div",{className:"text-center",children:[jsxRuntime.jsx("div",{className:"mb-4",children:jsxRuntime.jsx("div",{className:"inline-flex items-center justify-center w-16 h-16 bg-blue-100 dark:bg-blue-900/20 rounded-full mb-4",children:jsxRuntime.jsx("div",{className:"w-8 h-8 border-4 border-blue-600 border-t-transparent rounded-full animate-spin"})})}),jsxRuntime.jsx(framerMotion.AnimatePresence,{mode:"wait",children:jsxRuntime.jsx(framerMotion.motion.p,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:.2},className:"text-lg font-medium text-zinc-900 dark:text-white",children:t[r]?.text},r)}),jsxRuntime.jsx("div",{className:"mt-6 flex justify-center",children:jsxRuntime.jsx("div",{className:"flex space-x-1",children:t.map((c,i)=>jsxRuntime.jsx("div",{className:n("h-2 w-2 rounded-full transition-colors duration-200",i===r?"bg-blue-600":i<r?"bg-green-500":"bg-zinc-300 dark:bg-zinc-600")},i))})})]})})})})}var L=v;exports.MultiStepLoader=v;exports.default=L;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/multi-step-loader/index.tsx"],"names":["cn","inputs","twMerge","clsx","MultiStepLoader","loadingStates","loading","duration","loop","className","currentState","setCurrentState","useState","useEffect","interval","prevState","jsx","AnimatePresence","motion","jsxs","_","index","multi_step_loader_default"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState, useEffect } from \"react\";\r\nimport { motion, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface LoadingState {\r\n text: string;\r\n}\r\n\r\ninterface MultiStepLoaderProps {\r\n loadingStates: LoadingState[];\r\n loading: boolean;\r\n duration?: number;\r\n loop?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport function MultiStepLoader({\r\n loadingStates,\r\n loading,\r\n duration = 2000,\r\n loop = true,\r\n className,\r\n}: MultiStepLoaderProps) {\r\n const [currentState, setCurrentState] = useState(0);\r\n\r\n useEffect(() => {\r\n if (!loading) {\r\n setCurrentState(0);\r\n return;\r\n }\r\n\r\n const interval = setInterval(() => {\r\n setCurrentState((prevState) => {\r\n if (prevState === loadingStates.length - 1) {\r\n return loop ? 0 : prevState;\r\n }\r\n return prevState + 1;\r\n });\r\n }, duration / loadingStates.length);\r\n\r\n return () => clearInterval(interval);\r\n }, [loading, loadingStates.length, duration, loop]);\r\n\r\n return (\r\n <AnimatePresence>\r\n {loading && (\r\n <motion.div\r\n initial={{ opacity: 0 }}\r\n animate={{ opacity: 1 }}\r\n exit={{ opacity: 0 }}\r\n className={cn(\r\n \"fixed inset-0 z-[100] flex items-center justify-center bg-black/80 backdrop-blur-sm\",\r\n className\r\n )}\r\n >\r\n <div className=\"bg-white dark:bg-zinc-900 rounded-lg p-8 shadow-2xl max-w-md w-full mx-4\">\r\n <div className=\"text-center\">\r\n <div className=\"mb-4\">\r\n <div className=\"inline-flex items-center justify-center w-16 h-16 bg-blue-100 dark:bg-blue-900/20 rounded-full mb-4\">\r\n <div className=\"w-8 h-8 border-4 border-blue-600 border-t-transparent rounded-full animate-spin\" />\r\n </div>\r\n </div>\r\n\r\n <AnimatePresence mode=\"wait\">\r\n <motion.p\r\n key={currentState}\r\n initial={{ opacity: 0, y: 10 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: -10 }}\r\n transition={{ duration: 0.2 }}\r\n className=\"text-lg font-medium text-zinc-900 dark:text-white\"\r\n >\r\n {loadingStates[currentState]?.text}\r\n </motion.p>\r\n </AnimatePresence>\r\n\r\n <div className=\"mt-6 flex justify-center\">\r\n <div className=\"flex space-x-1\">\r\n {loadingStates.map((_, index) => (\r\n <div\r\n key={index}\r\n className={cn(\r\n \"h-2 w-2 rounded-full transition-colors duration-200\",\r\n index === currentState\r\n ? \"bg-blue-600\"\r\n : index < currentState\r\n ? \"bg-green-500\"\r\n : \"bg-zinc-300 dark:bg-zinc-600\"\r\n )}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n );\r\n}\r\n\r\nexport default MultiStepLoader;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {useState,useEffect}from'react';import {AnimatePresence,motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx,jsxs}from'react/jsx-runtime';function n(...t){return twMerge(clsx(t))}function v({loadingStates:t,loading:a,duration:o=2e3,loop:l=true,className:u}){let[r,s]=useState(0);return useEffect(()=>{if(!a){s(0);return}let c=setInterval(()=>{s(i=>i===t.length-1?l?0:i:i+1);},o/t.length);return ()=>clearInterval(c)},[a,t.length,o,l]),jsx(AnimatePresence,{children:a&&jsx(motion.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},className:n("fixed inset-0 z-[100] flex items-center justify-center bg-black/80 backdrop-blur-sm",u),children:jsx("div",{className:"bg-white dark:bg-zinc-900 rounded-lg p-8 shadow-2xl max-w-md w-full mx-4",children:jsxs("div",{className:"text-center",children:[jsx("div",{className:"mb-4",children:jsx("div",{className:"inline-flex items-center justify-center w-16 h-16 bg-blue-100 dark:bg-blue-900/20 rounded-full mb-4",children:jsx("div",{className:"w-8 h-8 border-4 border-blue-600 border-t-transparent rounded-full animate-spin"})})}),jsx(AnimatePresence,{mode:"wait",children:jsx(motion.p,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:.2},className:"text-lg font-medium text-zinc-900 dark:text-white",children:t[r]?.text},r)}),jsx("div",{className:"mt-6 flex justify-center",children:jsx("div",{className:"flex space-x-1",children:t.map((c,i)=>jsx("div",{className:n("h-2 w-2 rounded-full transition-colors duration-200",i===r?"bg-blue-600":i<r?"bg-green-500":"bg-zinc-300 dark:bg-zinc-600")},i))})})]})})})})}var L=v;export{v as MultiStepLoader,L as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/multi-step-loader/index.tsx"],"names":["cn","inputs","twMerge","clsx","MultiStepLoader","loadingStates","loading","duration","loop","className","currentState","setCurrentState","useState","useEffect","interval","prevState","jsx","AnimatePresence","motion","jsxs","_","index","multi_step_loader_default"],"mappings":"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","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState, useEffect } from \"react\";\r\nimport { motion, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface LoadingState {\r\n text: string;\r\n}\r\n\r\ninterface MultiStepLoaderProps {\r\n loadingStates: LoadingState[];\r\n loading: boolean;\r\n duration?: number;\r\n loop?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport function MultiStepLoader({\r\n loadingStates,\r\n loading,\r\n duration = 2000,\r\n loop = true,\r\n className,\r\n}: MultiStepLoaderProps) {\r\n const [currentState, setCurrentState] = useState(0);\r\n\r\n useEffect(() => {\r\n if (!loading) {\r\n setCurrentState(0);\r\n return;\r\n }\r\n\r\n const interval = setInterval(() => {\r\n setCurrentState((prevState) => {\r\n if (prevState === loadingStates.length - 1) {\r\n return loop ? 0 : prevState;\r\n }\r\n return prevState + 1;\r\n });\r\n }, duration / loadingStates.length);\r\n\r\n return () => clearInterval(interval);\r\n }, [loading, loadingStates.length, duration, loop]);\r\n\r\n return (\r\n <AnimatePresence>\r\n {loading && (\r\n <motion.div\r\n initial={{ opacity: 0 }}\r\n animate={{ opacity: 1 }}\r\n exit={{ opacity: 0 }}\r\n className={cn(\r\n \"fixed inset-0 z-[100] flex items-center justify-center bg-black/80 backdrop-blur-sm\",\r\n className\r\n )}\r\n >\r\n <div className=\"bg-white dark:bg-zinc-900 rounded-lg p-8 shadow-2xl max-w-md w-full mx-4\">\r\n <div className=\"text-center\">\r\n <div className=\"mb-4\">\r\n <div className=\"inline-flex items-center justify-center w-16 h-16 bg-blue-100 dark:bg-blue-900/20 rounded-full mb-4\">\r\n <div className=\"w-8 h-8 border-4 border-blue-600 border-t-transparent rounded-full animate-spin\" />\r\n </div>\r\n </div>\r\n\r\n <AnimatePresence mode=\"wait\">\r\n <motion.p\r\n key={currentState}\r\n initial={{ opacity: 0, y: 10 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: -10 }}\r\n transition={{ duration: 0.2 }}\r\n className=\"text-lg font-medium text-zinc-900 dark:text-white\"\r\n >\r\n {loadingStates[currentState]?.text}\r\n </motion.p>\r\n </AnimatePresence>\r\n\r\n <div className=\"mt-6 flex justify-center\">\r\n <div className=\"flex space-x-1\">\r\n {loadingStates.map((_, index) => (\r\n <div\r\n key={index}\r\n className={cn(\r\n \"h-2 w-2 rounded-full transition-colors duration-200\",\r\n index === currentState\r\n ? \"bg-blue-600\"\r\n : index < currentState\r\n ? \"bg-green-500\"\r\n : \"bg-zinc-300 dark:bg-zinc-600\"\r\n )}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n );\r\n}\r\n\r\nexport default MultiStepLoader;\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 H(...s){return tailwindMerge.twMerge(clsx.clsx(s))}var M=class{constructor(t,l,p,g,S,w,o){this.width=t.width,this.height=t.height,this.ctx=l,this.x=p,this.y=g,this.color=S,this.speed=this.getRandomValue(.1,.9)*w,this.size=0,this.sizeStep=Math.random()*.4,this.minSize=.5,this.maxSizeInteger=2,this.maxSize=this.getRandomValue(this.minSize,this.maxSizeInteger),this.delay=o,this.counter=0,this.counterStep=Math.random()*4+(this.width+this.height)*.01,this.isIdle=false,this.isReverse=false,this.isShimmer=false;}getRandomValue(t,l){return Math.random()*(l-t)+t}draw(){let t=this.maxSizeInteger*.5-this.size*.5;this.ctx.fillStyle=this.color,this.ctx.fillRect(this.x+t,this.y+t,this.size,this.size);}appear(){if(this.isIdle=false,this.counter<=this.delay){this.counter+=this.counterStep;return}this.size>=this.maxSize&&(this.isShimmer=true),this.isShimmer?this.shimmer():this.size+=this.sizeStep,this.draw();}disappear(){if(this.isShimmer=false,this.counter=0,this.size<=0){this.isIdle=true;return}else this.size-=.1;this.draw();}shimmer(){this.size>=this.maxSize?this.isReverse=true:this.size<=this.minSize&&(this.isReverse=false),this.isReverse?this.size-=this.speed:this.size+=this.speed;}},L={default:{gap:5,speed:35,colors:"#71717a,#a1a1aa,#d4d4d8",noFocus:false},blue:{gap:10,speed:25,colors:"#0ea5e9,#38bdf8,#7dd3fc",noFocus:false},yellow:{gap:3,speed:20,colors:"#ca8a04,#eab308,#facc15",noFocus:false},pink:{gap:6,speed:80,colors:"#be123c,#e11d48,#f43f5e",noFocus:true}};function U(s,t){return s<=0||t?0:s>=100?100*.001:s*.001}function W({variant:s="default",gap:t,speed:l,colors:p,noFocus:g,className:S="",children:w}){let o=react.useRef(null),n=react.useRef(null),R=react.useRef([]),i=react.useRef(null),y=react.useRef(typeof performance<"u"?performance.now():0),F=react.useRef(typeof window<"u"?window.matchMedia("(prefers-reduced-motion: reduce)").matches:false).current,b=L[s]||L.default,C=t??b.gap,I=l??b.speed,A=p??b.colors,x=g??b.noFocus,E=()=>{if(!o.current||!n.current)return;let e=o.current.getBoundingClientRect(),a=Math.floor(e.width)||300,c=Math.floor(e.height)||400,d=n.current.getContext("2d");if(!d)return;n.current.width=a,n.current.height=c,n.current.style.width=`${a}px`,n.current.style.height=`${c}px`;let m=A.split(",").map(r=>r.trim()),f=[],u=Math.max(parseInt(C.toString(),10),3);for(let r=0;r<a;r+=u)for(let v=0;v<c;v+=u){let O=m[Math.floor(Math.random()*m.length)],N=r-a/2,P=v-c/2,$=Math.sqrt(N*N+P*P),G=F?0:$;f.push(new M(n.current,d,r,v,O,U(I,F),G));}R.current=f;},T=e=>{i.current=requestAnimationFrame(()=>T(e));let a=performance.now(),c=a-y.current,d=1e3/60;if(c<d)return;y.current=a-c%d;let m=n.current?.getContext("2d");if(!m||!n.current)return;m.clearRect(0,0,n.current.width,n.current.height);let f=true;for(let u=0;u<R.current.length;u++){let r=R.current[u];r[e](),r.isIdle||(f=false);}f&&i.current&&cancelAnimationFrame(i.current);},z=e=>{i.current!==null&&cancelAnimationFrame(i.current),i.current=requestAnimationFrame(()=>T(e));},D=()=>z("appear"),k=()=>z("disappear"),q=e=>{e.currentTarget.contains(e.relatedTarget)||z("appear");},B=e=>{e.currentTarget.contains(e.relatedTarget)||z("disappear");};return react.useEffect(()=>{E();let e=new ResizeObserver(()=>{E();});return o.current&&e.observe(o.current),()=>{e.disconnect(),i.current!==null&&cancelAnimationFrame(i.current);}},[C,I,A,x]),jsxRuntime.jsxs("div",{ref:o,className:H("relative overflow-hidden rounded-xl border border-zinc-200 dark:border-zinc-800 bg-zinc-100 dark:bg-zinc-900",S),onMouseEnter:D,onMouseLeave:k,onFocus:x?void 0:q,onBlur:x?void 0:B,tabIndex:x?-1:0,children:[jsxRuntime.jsx("canvas",{className:"absolute inset-0 w-full h-full pointer-events-none",ref:n}),jsxRuntime.jsx("div",{className:"relative z-10",children:w})]})}var ne=W;exports.PixelCard=W;exports.default=ne;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/pixel-card/index.tsx"],"names":["cn","inputs","twMerge","clsx","Pixel","canvas","context","x","y","color","speed","delay","min","max","centerOffset","VARIANTS","getEffectiveSpeed","value","reducedMotion","PixelCard","variant","gap","colors","noFocus","className","children","containerRef","useRef","canvasRef","pixelsRef","animationRef","timePreviousRef","variantCfg","finalGap","finalSpeed","finalColors","finalNoFocus","initPixels","rect","width","height","ctx","colorsArray","c","pxs","gapValue","dx","dy","distance","doAnimate","fnName","timeNow","timePassed","timeInterval","allIdle","i","pixel","handleAnimation","name","onMouseEnter","onMouseLeave","onFocus","onBlur","useEffect","observer","jsxs","jsx","pixel_card_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, ReactNode } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\nclass Pixel {\r\n width: number;\r\n height: number;\r\n ctx: CanvasRenderingContext2D;\r\n x: number;\r\n y: number;\r\n color: string;\r\n speed: number;\r\n size: number;\r\n sizeStep: number;\r\n minSize: number;\r\n maxSizeInteger: number;\r\n maxSize: number;\r\n delay: number;\r\n counter: number;\r\n counterStep: number;\r\n isIdle: boolean;\r\n isReverse: boolean;\r\n isShimmer: boolean;\r\n\r\n constructor(\r\n canvas: HTMLCanvasElement,\r\n context: CanvasRenderingContext2D,\r\n x: number,\r\n y: number,\r\n color: string,\r\n speed: number,\r\n delay: number\r\n ) {\r\n this.width = canvas.width;\r\n this.height = canvas.height;\r\n this.ctx = context;\r\n this.x = x;\r\n this.y = y;\r\n this.color = color;\r\n this.speed = this.getRandomValue(0.1, 0.9) * speed;\r\n this.size = 0;\r\n this.sizeStep = Math.random() * 0.4;\r\n this.minSize = 0.5;\r\n this.maxSizeInteger = 2;\r\n this.maxSize = this.getRandomValue(this.minSize, this.maxSizeInteger);\r\n this.delay = delay;\r\n this.counter = 0;\r\n this.counterStep = Math.random() * 4 + (this.width + this.height) * 0.01;\r\n this.isIdle = false;\r\n this.isReverse = false;\r\n this.isShimmer = false;\r\n }\r\n\r\n getRandomValue(min: number, max: number) {\r\n return Math.random() * (max - min) + min;\r\n }\r\n\r\n draw() {\r\n const centerOffset = this.maxSizeInteger * 0.5 - this.size * 0.5;\r\n this.ctx.fillStyle = this.color;\r\n this.ctx.fillRect(\r\n this.x + centerOffset,\r\n this.y + centerOffset,\r\n this.size,\r\n this.size\r\n );\r\n }\r\n\r\n appear() {\r\n this.isIdle = false;\r\n if (this.counter <= this.delay) {\r\n this.counter += this.counterStep;\r\n return;\r\n }\r\n if (this.size >= this.maxSize) {\r\n this.isShimmer = true;\r\n }\r\n if (this.isShimmer) {\r\n this.shimmer();\r\n } else {\r\n this.size += this.sizeStep;\r\n }\r\n this.draw();\r\n }\r\n\r\n disappear() {\r\n this.isShimmer = false;\r\n this.counter = 0;\r\n if (this.size <= 0) {\r\n this.isIdle = true;\r\n return;\r\n } else {\r\n this.size -= 0.1;\r\n }\r\n this.draw();\r\n }\r\n\r\n shimmer() {\r\n if (this.size >= this.maxSize) {\r\n this.isReverse = true;\r\n } else if (this.size <= this.minSize) {\r\n this.isReverse = false;\r\n }\r\n if (this.isReverse) {\r\n this.size -= this.speed;\r\n } else {\r\n this.size += this.speed;\r\n }\r\n }\r\n}\r\n\r\nconst VARIANTS = {\r\n default: {\r\n gap: 5,\r\n speed: 35,\r\n colors: \"#71717a,#a1a1aa,#d4d4d8\",\r\n noFocus: false,\r\n },\r\n blue: {\r\n gap: 10,\r\n speed: 25,\r\n colors: \"#0ea5e9,#38bdf8,#7dd3fc\",\r\n noFocus: false,\r\n },\r\n yellow: {\r\n gap: 3,\r\n speed: 20,\r\n colors: \"#ca8a04,#eab308,#facc15\",\r\n noFocus: false,\r\n },\r\n pink: {\r\n gap: 6,\r\n speed: 80,\r\n colors: \"#be123c,#e11d48,#f43f5e\",\r\n noFocus: true,\r\n },\r\n};\r\n\r\ninterface PixelCardProps {\r\n variant?: \"default\" | \"blue\" | \"yellow\" | \"pink\";\r\n gap?: number;\r\n speed?: number;\r\n colors?: string;\r\n noFocus?: boolean;\r\n className?: string;\r\n children: ReactNode;\r\n}\r\n\r\nfunction getEffectiveSpeed(value: number, reducedMotion: boolean) {\r\n const min = 0;\r\n const max = 100;\r\n const throttle = 0.001;\r\n\r\n if (value <= min || reducedMotion) {\r\n return min;\r\n } else if (value >= max) {\r\n return max * throttle;\r\n } else {\r\n return value * throttle;\r\n }\r\n}\r\n\r\nexport function PixelCard({\r\n variant = \"default\",\r\n gap,\r\n speed,\r\n colors,\r\n noFocus,\r\n className = \"\",\r\n children,\r\n}: PixelCardProps) {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const pixelsRef = useRef<Pixel[]>([]);\r\n const animationRef = useRef<ReturnType<typeof requestAnimationFrame> | null>(\r\n null\r\n );\r\n const timePreviousRef = useRef(\r\n typeof performance !== \"undefined\" ? performance.now() : 0\r\n );\r\n const reducedMotion = useRef(\r\n typeof window !== \"undefined\"\r\n ? window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\r\n : false\r\n ).current;\r\n\r\n const variantCfg = VARIANTS[variant] || VARIANTS.default;\r\n const finalGap = gap ?? variantCfg.gap;\r\n const finalSpeed = speed ?? variantCfg.speed;\r\n const finalColors = colors ?? variantCfg.colors;\r\n const finalNoFocus = noFocus ?? variantCfg.noFocus;\r\n\r\n const initPixels = () => {\r\n if (!containerRef.current || !canvasRef.current) return;\r\n\r\n const rect = containerRef.current.getBoundingClientRect();\r\n const width = Math.floor(rect.width) || 300;\r\n const height = Math.floor(rect.height) || 400;\r\n const ctx = canvasRef.current.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n canvasRef.current.width = width;\r\n canvasRef.current.height = height;\r\n canvasRef.current.style.width = `${width}px`;\r\n canvasRef.current.style.height = `${height}px`;\r\n\r\n const colorsArray = finalColors.split(\",\").map((c) => c.trim());\r\n const pxs: Pixel[] = [];\r\n const gapValue = Math.max(parseInt(finalGap.toString(), 10), 3);\r\n\r\n for (let x = 0; x < width; x += gapValue) {\r\n for (let y = 0; y < height; y += gapValue) {\r\n const color = colorsArray[Math.floor(Math.random() * colorsArray.length)];\r\n const dx = x - width / 2;\r\n const dy = y - height / 2;\r\n const distance = Math.sqrt(dx * dx + dy * dy);\r\n const delay = reducedMotion ? 0 : distance;\r\n pxs.push(\r\n new Pixel(\r\n canvasRef.current!,\r\n ctx,\r\n x,\r\n y,\r\n color,\r\n getEffectiveSpeed(finalSpeed, reducedMotion),\r\n delay\r\n )\r\n );\r\n }\r\n }\r\n pixelsRef.current = pxs;\r\n };\r\n\r\n const doAnimate = (fnName: \"appear\" | \"disappear\") => {\r\n animationRef.current = requestAnimationFrame(() => doAnimate(fnName));\r\n const timeNow = performance.now();\r\n const timePassed = timeNow - timePreviousRef.current;\r\n const timeInterval = 1000 / 60;\r\n\r\n if (timePassed < timeInterval) return;\r\n timePreviousRef.current = timeNow - (timePassed % timeInterval);\r\n\r\n const ctx = canvasRef.current?.getContext(\"2d\");\r\n if (!ctx || !canvasRef.current) return;\r\n\r\n ctx.clearRect(0, 0, canvasRef.current.width, canvasRef.current.height);\r\n\r\n let allIdle = true;\r\n for (let i = 0; i < pixelsRef.current.length; i++) {\r\n const pixel = pixelsRef.current[i];\r\n pixel[fnName]();\r\n if (!pixel.isIdle) {\r\n allIdle = false;\r\n }\r\n }\r\n if (allIdle && animationRef.current) {\r\n cancelAnimationFrame(animationRef.current);\r\n }\r\n };\r\n\r\n const handleAnimation = (name: \"appear\" | \"disappear\") => {\r\n if (animationRef.current !== null) {\r\n cancelAnimationFrame(animationRef.current);\r\n }\r\n animationRef.current = requestAnimationFrame(() => doAnimate(name));\r\n };\r\n\r\n const onMouseEnter = () => handleAnimation(\"appear\");\r\n const onMouseLeave = () => handleAnimation(\"disappear\");\r\n const onFocus: React.FocusEventHandler<HTMLDivElement> = (e) => {\r\n if (e.currentTarget.contains(e.relatedTarget as Node)) return;\r\n handleAnimation(\"appear\");\r\n };\r\n const onBlur: React.FocusEventHandler<HTMLDivElement> = (e) => {\r\n if (e.currentTarget.contains(e.relatedTarget as Node)) return;\r\n handleAnimation(\"disappear\");\r\n };\r\n\r\n useEffect(() => {\r\n initPixels();\r\n const observer = new ResizeObserver(() => {\r\n initPixels();\r\n });\r\n if (containerRef.current) {\r\n observer.observe(containerRef.current);\r\n }\r\n return () => {\r\n observer.disconnect();\r\n if (animationRef.current !== null) {\r\n cancelAnimationFrame(animationRef.current);\r\n }\r\n };\r\n }, [finalGap, finalSpeed, finalColors, finalNoFocus]);\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={cn(\r\n \"relative overflow-hidden rounded-xl border border-zinc-200 dark:border-zinc-800 bg-zinc-100 dark:bg-zinc-900\",\r\n className\r\n )}\r\n onMouseEnter={onMouseEnter}\r\n onMouseLeave={onMouseLeave}\r\n onFocus={finalNoFocus ? undefined : onFocus}\r\n onBlur={finalNoFocus ? undefined : onBlur}\r\n tabIndex={finalNoFocus ? -1 : 0}\r\n >\r\n <canvas\r\n className=\"absolute inset-0 w-full h-full pointer-events-none\"\r\n ref={canvasRef}\r\n />\r\n <div className=\"relative z-10\">{children}</div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default PixelCard;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {useRef,useEffect}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function H(...s){return twMerge(clsx(s))}var M=class{constructor(t,l,p,g,S,w,o){this.width=t.width,this.height=t.height,this.ctx=l,this.x=p,this.y=g,this.color=S,this.speed=this.getRandomValue(.1,.9)*w,this.size=0,this.sizeStep=Math.random()*.4,this.minSize=.5,this.maxSizeInteger=2,this.maxSize=this.getRandomValue(this.minSize,this.maxSizeInteger),this.delay=o,this.counter=0,this.counterStep=Math.random()*4+(this.width+this.height)*.01,this.isIdle=false,this.isReverse=false,this.isShimmer=false;}getRandomValue(t,l){return Math.random()*(l-t)+t}draw(){let t=this.maxSizeInteger*.5-this.size*.5;this.ctx.fillStyle=this.color,this.ctx.fillRect(this.x+t,this.y+t,this.size,this.size);}appear(){if(this.isIdle=false,this.counter<=this.delay){this.counter+=this.counterStep;return}this.size>=this.maxSize&&(this.isShimmer=true),this.isShimmer?this.shimmer():this.size+=this.sizeStep,this.draw();}disappear(){if(this.isShimmer=false,this.counter=0,this.size<=0){this.isIdle=true;return}else this.size-=.1;this.draw();}shimmer(){this.size>=this.maxSize?this.isReverse=true:this.size<=this.minSize&&(this.isReverse=false),this.isReverse?this.size-=this.speed:this.size+=this.speed;}},L={default:{gap:5,speed:35,colors:"#71717a,#a1a1aa,#d4d4d8",noFocus:false},blue:{gap:10,speed:25,colors:"#0ea5e9,#38bdf8,#7dd3fc",noFocus:false},yellow:{gap:3,speed:20,colors:"#ca8a04,#eab308,#facc15",noFocus:false},pink:{gap:6,speed:80,colors:"#be123c,#e11d48,#f43f5e",noFocus:true}};function U(s,t){return s<=0||t?0:s>=100?100*.001:s*.001}function W({variant:s="default",gap:t,speed:l,colors:p,noFocus:g,className:S="",children:w}){let o=useRef(null),n=useRef(null),R=useRef([]),i=useRef(null),y=useRef(typeof performance<"u"?performance.now():0),F=useRef(typeof window<"u"?window.matchMedia("(prefers-reduced-motion: reduce)").matches:false).current,b=L[s]||L.default,C=t??b.gap,I=l??b.speed,A=p??b.colors,x=g??b.noFocus,E=()=>{if(!o.current||!n.current)return;let e=o.current.getBoundingClientRect(),a=Math.floor(e.width)||300,c=Math.floor(e.height)||400,d=n.current.getContext("2d");if(!d)return;n.current.width=a,n.current.height=c,n.current.style.width=`${a}px`,n.current.style.height=`${c}px`;let m=A.split(",").map(r=>r.trim()),f=[],u=Math.max(parseInt(C.toString(),10),3);for(let r=0;r<a;r+=u)for(let v=0;v<c;v+=u){let O=m[Math.floor(Math.random()*m.length)],N=r-a/2,P=v-c/2,$=Math.sqrt(N*N+P*P),G=F?0:$;f.push(new M(n.current,d,r,v,O,U(I,F),G));}R.current=f;},T=e=>{i.current=requestAnimationFrame(()=>T(e));let a=performance.now(),c=a-y.current,d=1e3/60;if(c<d)return;y.current=a-c%d;let m=n.current?.getContext("2d");if(!m||!n.current)return;m.clearRect(0,0,n.current.width,n.current.height);let f=true;for(let u=0;u<R.current.length;u++){let r=R.current[u];r[e](),r.isIdle||(f=false);}f&&i.current&&cancelAnimationFrame(i.current);},z=e=>{i.current!==null&&cancelAnimationFrame(i.current),i.current=requestAnimationFrame(()=>T(e));},D=()=>z("appear"),k=()=>z("disappear"),q=e=>{e.currentTarget.contains(e.relatedTarget)||z("appear");},B=e=>{e.currentTarget.contains(e.relatedTarget)||z("disappear");};return useEffect(()=>{E();let e=new ResizeObserver(()=>{E();});return o.current&&e.observe(o.current),()=>{e.disconnect(),i.current!==null&&cancelAnimationFrame(i.current);}},[C,I,A,x]),jsxs("div",{ref:o,className:H("relative overflow-hidden rounded-xl border border-zinc-200 dark:border-zinc-800 bg-zinc-100 dark:bg-zinc-900",S),onMouseEnter:D,onMouseLeave:k,onFocus:x?void 0:q,onBlur:x?void 0:B,tabIndex:x?-1:0,children:[jsx("canvas",{className:"absolute inset-0 w-full h-full pointer-events-none",ref:n}),jsx("div",{className:"relative z-10",children:w})]})}var ne=W;export{W as PixelCard,ne as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/pixel-card/index.tsx"],"names":["cn","inputs","twMerge","clsx","Pixel","canvas","context","x","y","color","speed","delay","min","max","centerOffset","VARIANTS","getEffectiveSpeed","value","reducedMotion","PixelCard","variant","gap","colors","noFocus","className","children","containerRef","useRef","canvasRef","pixelsRef","animationRef","timePreviousRef","variantCfg","finalGap","finalSpeed","finalColors","finalNoFocus","initPixels","rect","width","height","ctx","colorsArray","c","pxs","gapValue","dx","dy","distance","doAnimate","fnName","timeNow","timePassed","timeInterval","allIdle","i","pixel","handleAnimation","name","onMouseEnter","onMouseLeave","onFocus","onBlur","useEffect","observer","jsxs","jsx","pixel_card_default"],"mappings":"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","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect, useRef, ReactNode } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\nclass Pixel {\r\n width: number;\r\n height: number;\r\n ctx: CanvasRenderingContext2D;\r\n x: number;\r\n y: number;\r\n color: string;\r\n speed: number;\r\n size: number;\r\n sizeStep: number;\r\n minSize: number;\r\n maxSizeInteger: number;\r\n maxSize: number;\r\n delay: number;\r\n counter: number;\r\n counterStep: number;\r\n isIdle: boolean;\r\n isReverse: boolean;\r\n isShimmer: boolean;\r\n\r\n constructor(\r\n canvas: HTMLCanvasElement,\r\n context: CanvasRenderingContext2D,\r\n x: number,\r\n y: number,\r\n color: string,\r\n speed: number,\r\n delay: number\r\n ) {\r\n this.width = canvas.width;\r\n this.height = canvas.height;\r\n this.ctx = context;\r\n this.x = x;\r\n this.y = y;\r\n this.color = color;\r\n this.speed = this.getRandomValue(0.1, 0.9) * speed;\r\n this.size = 0;\r\n this.sizeStep = Math.random() * 0.4;\r\n this.minSize = 0.5;\r\n this.maxSizeInteger = 2;\r\n this.maxSize = this.getRandomValue(this.minSize, this.maxSizeInteger);\r\n this.delay = delay;\r\n this.counter = 0;\r\n this.counterStep = Math.random() * 4 + (this.width + this.height) * 0.01;\r\n this.isIdle = false;\r\n this.isReverse = false;\r\n this.isShimmer = false;\r\n }\r\n\r\n getRandomValue(min: number, max: number) {\r\n return Math.random() * (max - min) + min;\r\n }\r\n\r\n draw() {\r\n const centerOffset = this.maxSizeInteger * 0.5 - this.size * 0.5;\r\n this.ctx.fillStyle = this.color;\r\n this.ctx.fillRect(\r\n this.x + centerOffset,\r\n this.y + centerOffset,\r\n this.size,\r\n this.size\r\n );\r\n }\r\n\r\n appear() {\r\n this.isIdle = false;\r\n if (this.counter <= this.delay) {\r\n this.counter += this.counterStep;\r\n return;\r\n }\r\n if (this.size >= this.maxSize) {\r\n this.isShimmer = true;\r\n }\r\n if (this.isShimmer) {\r\n this.shimmer();\r\n } else {\r\n this.size += this.sizeStep;\r\n }\r\n this.draw();\r\n }\r\n\r\n disappear() {\r\n this.isShimmer = false;\r\n this.counter = 0;\r\n if (this.size <= 0) {\r\n this.isIdle = true;\r\n return;\r\n } else {\r\n this.size -= 0.1;\r\n }\r\n this.draw();\r\n }\r\n\r\n shimmer() {\r\n if (this.size >= this.maxSize) {\r\n this.isReverse = true;\r\n } else if (this.size <= this.minSize) {\r\n this.isReverse = false;\r\n }\r\n if (this.isReverse) {\r\n this.size -= this.speed;\r\n } else {\r\n this.size += this.speed;\r\n }\r\n }\r\n}\r\n\r\nconst VARIANTS = {\r\n default: {\r\n gap: 5,\r\n speed: 35,\r\n colors: \"#71717a,#a1a1aa,#d4d4d8\",\r\n noFocus: false,\r\n },\r\n blue: {\r\n gap: 10,\r\n speed: 25,\r\n colors: \"#0ea5e9,#38bdf8,#7dd3fc\",\r\n noFocus: false,\r\n },\r\n yellow: {\r\n gap: 3,\r\n speed: 20,\r\n colors: \"#ca8a04,#eab308,#facc15\",\r\n noFocus: false,\r\n },\r\n pink: {\r\n gap: 6,\r\n speed: 80,\r\n colors: \"#be123c,#e11d48,#f43f5e\",\r\n noFocus: true,\r\n },\r\n};\r\n\r\ninterface PixelCardProps {\r\n variant?: \"default\" | \"blue\" | \"yellow\" | \"pink\";\r\n gap?: number;\r\n speed?: number;\r\n colors?: string;\r\n noFocus?: boolean;\r\n className?: string;\r\n children: ReactNode;\r\n}\r\n\r\nfunction getEffectiveSpeed(value: number, reducedMotion: boolean) {\r\n const min = 0;\r\n const max = 100;\r\n const throttle = 0.001;\r\n\r\n if (value <= min || reducedMotion) {\r\n return min;\r\n } else if (value >= max) {\r\n return max * throttle;\r\n } else {\r\n return value * throttle;\r\n }\r\n}\r\n\r\nexport function PixelCard({\r\n variant = \"default\",\r\n gap,\r\n speed,\r\n colors,\r\n noFocus,\r\n className = \"\",\r\n children,\r\n}: PixelCardProps) {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const canvasRef = useRef<HTMLCanvasElement>(null);\r\n const pixelsRef = useRef<Pixel[]>([]);\r\n const animationRef = useRef<ReturnType<typeof requestAnimationFrame> | null>(\r\n null\r\n );\r\n const timePreviousRef = useRef(\r\n typeof performance !== \"undefined\" ? performance.now() : 0\r\n );\r\n const reducedMotion = useRef(\r\n typeof window !== \"undefined\"\r\n ? window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\r\n : false\r\n ).current;\r\n\r\n const variantCfg = VARIANTS[variant] || VARIANTS.default;\r\n const finalGap = gap ?? variantCfg.gap;\r\n const finalSpeed = speed ?? variantCfg.speed;\r\n const finalColors = colors ?? variantCfg.colors;\r\n const finalNoFocus = noFocus ?? variantCfg.noFocus;\r\n\r\n const initPixels = () => {\r\n if (!containerRef.current || !canvasRef.current) return;\r\n\r\n const rect = containerRef.current.getBoundingClientRect();\r\n const width = Math.floor(rect.width) || 300;\r\n const height = Math.floor(rect.height) || 400;\r\n const ctx = canvasRef.current.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n canvasRef.current.width = width;\r\n canvasRef.current.height = height;\r\n canvasRef.current.style.width = `${width}px`;\r\n canvasRef.current.style.height = `${height}px`;\r\n\r\n const colorsArray = finalColors.split(\",\").map((c) => c.trim());\r\n const pxs: Pixel[] = [];\r\n const gapValue = Math.max(parseInt(finalGap.toString(), 10), 3);\r\n\r\n for (let x = 0; x < width; x += gapValue) {\r\n for (let y = 0; y < height; y += gapValue) {\r\n const color = colorsArray[Math.floor(Math.random() * colorsArray.length)];\r\n const dx = x - width / 2;\r\n const dy = y - height / 2;\r\n const distance = Math.sqrt(dx * dx + dy * dy);\r\n const delay = reducedMotion ? 0 : distance;\r\n pxs.push(\r\n new Pixel(\r\n canvasRef.current!,\r\n ctx,\r\n x,\r\n y,\r\n color,\r\n getEffectiveSpeed(finalSpeed, reducedMotion),\r\n delay\r\n )\r\n );\r\n }\r\n }\r\n pixelsRef.current = pxs;\r\n };\r\n\r\n const doAnimate = (fnName: \"appear\" | \"disappear\") => {\r\n animationRef.current = requestAnimationFrame(() => doAnimate(fnName));\r\n const timeNow = performance.now();\r\n const timePassed = timeNow - timePreviousRef.current;\r\n const timeInterval = 1000 / 60;\r\n\r\n if (timePassed < timeInterval) return;\r\n timePreviousRef.current = timeNow - (timePassed % timeInterval);\r\n\r\n const ctx = canvasRef.current?.getContext(\"2d\");\r\n if (!ctx || !canvasRef.current) return;\r\n\r\n ctx.clearRect(0, 0, canvasRef.current.width, canvasRef.current.height);\r\n\r\n let allIdle = true;\r\n for (let i = 0; i < pixelsRef.current.length; i++) {\r\n const pixel = pixelsRef.current[i];\r\n pixel[fnName]();\r\n if (!pixel.isIdle) {\r\n allIdle = false;\r\n }\r\n }\r\n if (allIdle && animationRef.current) {\r\n cancelAnimationFrame(animationRef.current);\r\n }\r\n };\r\n\r\n const handleAnimation = (name: \"appear\" | \"disappear\") => {\r\n if (animationRef.current !== null) {\r\n cancelAnimationFrame(animationRef.current);\r\n }\r\n animationRef.current = requestAnimationFrame(() => doAnimate(name));\r\n };\r\n\r\n const onMouseEnter = () => handleAnimation(\"appear\");\r\n const onMouseLeave = () => handleAnimation(\"disappear\");\r\n const onFocus: React.FocusEventHandler<HTMLDivElement> = (e) => {\r\n if (e.currentTarget.contains(e.relatedTarget as Node)) return;\r\n handleAnimation(\"appear\");\r\n };\r\n const onBlur: React.FocusEventHandler<HTMLDivElement> = (e) => {\r\n if (e.currentTarget.contains(e.relatedTarget as Node)) return;\r\n handleAnimation(\"disappear\");\r\n };\r\n\r\n useEffect(() => {\r\n initPixels();\r\n const observer = new ResizeObserver(() => {\r\n initPixels();\r\n });\r\n if (containerRef.current) {\r\n observer.observe(containerRef.current);\r\n }\r\n return () => {\r\n observer.disconnect();\r\n if (animationRef.current !== null) {\r\n cancelAnimationFrame(animationRef.current);\r\n }\r\n };\r\n }, [finalGap, finalSpeed, finalColors, finalNoFocus]);\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={cn(\r\n \"relative overflow-hidden rounded-xl border border-zinc-200 dark:border-zinc-800 bg-zinc-100 dark:bg-zinc-900\",\r\n className\r\n )}\r\n onMouseEnter={onMouseEnter}\r\n onMouseLeave={onMouseLeave}\r\n onFocus={finalNoFocus ? undefined : onFocus}\r\n onBlur={finalNoFocus ? undefined : onBlur}\r\n tabIndex={finalNoFocus ? -1 : 0}\r\n >\r\n <canvas\r\n className=\"absolute inset-0 w-full h-full pointer-events-none\"\r\n ref={canvasRef}\r\n />\r\n <div className=\"relative z-10\">{children}</div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default PixelCard;\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 j(t){let[u,r]=react.useState(0);return react.useLayoutEffect(()=>{function n(){t.current&&r(t.current.offsetWidth);}return n(),window.addEventListener("resize",n),()=>window.removeEventListener("resize",n)},[t]),u}function A({scrollContainerRef:t,texts:u=["Scroll Velocity","Bynana UI"],velocity:r=100,className:n="",damping:v=50,stiffness:w=400,numCopies:R=6,velocityMapping:d={input:[0,1e3],output:[0,5]}}){function x({children:l,baseVelocity:c}){let a=framerMotion.useMotionValue(0),S=t?{container:t}:{},{scrollY:T}=framerMotion.useScroll(S),E=framerMotion.useVelocity(T),L=framerMotion.useSpring(E,{damping:v,stiffness:w}),m=framerMotion.useTransform(L,d.input,d.output,{clamp:false}),y=react.useRef(null),b=j(y);function M(e,p,o){let f=p-e;return ((o-e)%f+f)%f+e}let N=framerMotion.useTransform(a,e=>b===0?"0px":`${M(-b,0,e)}px`),s=react.useRef(1);framerMotion.useAnimationFrame((e,p)=>{let o=s.current*c*(p/1e3);m.get()<0?s.current=-1:m.get()>0&&(s.current=1),o+=s.current*o*m.get(),a.set(a.get()+o);});let V=[];for(let e=0;e<R;e++)V.push(jsxRuntime.jsx("span",{className:n,ref:e===0?y:null,children:l},e));return jsxRuntime.jsx("div",{className:"overflow-hidden whitespace-nowrap",children:jsxRuntime.jsx(framerMotion.motion.div,{className:"flex",style:{x:N},children:V})})}return jsxRuntime.jsx("section",{children:u.map((l,c)=>jsxRuntime.jsxs(x,{baseVelocity:c%2!==0?-r:r,children:[l,"\xA0"]},c))})}var $=A;exports.ScrollVelocity=A;exports.default=$;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/scroll-velocity/index.tsx"],"names":["useElementWidth","ref","width","setWidth","useState","useLayoutEffect","updateWidth","ScrollVelocity","scrollContainerRef","texts","velocity","className","damping","stiffness","numCopies","velocityMapping","VelocityText","children","baseVelocity","baseX","useMotionValue","scrollOptions","scrollY","useScroll","scrollVelocity","useVelocity","smoothVelocity","useSpring","velocityFactor","useTransform","copyRef","useRef","copyWidth","wrap","min","max","v","range","x","directionFactor","useAnimationFrame","t","delta","moveBy","spans","i","jsx","motion","text","index","jsxs","scroll_velocity_default"],"mappings":"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","file":"index.js","sourcesContent":["\"use client\";\r\n\r\nimport React, { useRef, useLayoutEffect, useState } from \"react\";\r\nimport {\r\n motion,\r\n useScroll,\r\n useSpring,\r\n useTransform,\r\n useMotionValue,\r\n useVelocity,\r\n useAnimationFrame\r\n} from \"framer-motion\";\r\n\r\ninterface VelocityMapping {\r\n input: [number, number];\r\n output: [number, number];\r\n}\r\n\r\ninterface ScrollVelocityProps {\r\n scrollContainerRef?: React.RefObject<HTMLElement>;\r\n texts?: string[];\r\n velocity?: number;\r\n className?: string;\r\n damping?: number;\r\n stiffness?: number;\r\n numCopies?: number;\r\n velocityMapping?: VelocityMapping;\r\n}\r\n\r\nfunction useElementWidth<T extends HTMLElement>(ref: React.RefObject<T | null>): number {\r\n const [width, setWidth] = useState(0);\r\n\r\n useLayoutEffect(() => {\r\n function updateWidth() {\r\n if (ref.current) {\r\n setWidth(ref.current.offsetWidth);\r\n }\r\n }\r\n updateWidth();\r\n window.addEventListener(\"resize\", updateWidth);\r\n return () => window.removeEventListener(\"resize\", updateWidth);\r\n }, [ref]);\r\n\r\n return width;\r\n}\r\n\r\nexport function ScrollVelocity({\r\n scrollContainerRef,\r\n texts = [\"Scroll Velocity\", \"Bynana UI\"],\r\n velocity = 100,\r\n className = \"\",\r\n damping = 50,\r\n stiffness = 400,\r\n numCopies = 6,\r\n velocityMapping = { input: [0, 1000], output: [0, 5] },\r\n}: ScrollVelocityProps) {\r\n function VelocityText({\r\n children,\r\n baseVelocity,\r\n }: {\r\n children: React.ReactNode;\r\n baseVelocity: number;\r\n }) {\r\n const baseX = useMotionValue(0);\r\n const scrollOptions = scrollContainerRef ? { container: scrollContainerRef } : {};\r\n const { scrollY } = useScroll(scrollOptions);\r\n const scrollVelocity = useVelocity(scrollY);\r\n const smoothVelocity = useSpring(scrollVelocity, { damping, stiffness });\r\n const velocityFactor = useTransform(\r\n smoothVelocity,\r\n velocityMapping.input,\r\n velocityMapping.output,\r\n { clamp: false }\r\n );\r\n\r\n const copyRef = useRef<HTMLSpanElement>(null);\r\n const copyWidth = useElementWidth(copyRef);\r\n\r\n function wrap(min: number, max: number, v: number): number {\r\n const range = max - min;\r\n const mod = (((v - min) % range) + range) % range;\r\n return mod + min;\r\n }\r\n\r\n const x = useTransform(baseX, v => {\r\n if (copyWidth === 0) return \"0px\";\r\n return `${wrap(-copyWidth, 0, v)}px`;\r\n });\r\n\r\n const directionFactor = useRef<number>(1);\r\n useAnimationFrame((t, delta) => {\r\n let moveBy = directionFactor.current * baseVelocity * (delta / 1000);\r\n if (velocityFactor.get() < 0) directionFactor.current = -1;\r\n else if (velocityFactor.get() > 0) directionFactor.current = 1;\r\n moveBy += directionFactor.current * moveBy * velocityFactor.get();\r\n baseX.set(baseX.get() + moveBy);\r\n });\r\n\r\n const spans = [];\r\n for (let i = 0; i < numCopies; i++) {\r\n spans.push(\r\n <span className={className} key={i} ref={i === 0 ? copyRef : null}>\r\n {children}\r\n </span>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"overflow-hidden whitespace-nowrap\">\r\n <motion.div className=\"flex\" style={{ x }}>\r\n {spans}\r\n </motion.div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <section>\r\n {texts.map((text, index) => (\r\n <VelocityText key={index} baseVelocity={index % 2 !== 0 ? -velocity : velocity}>\r\n {text} \r\n </VelocityText>\r\n ))}\r\n </section>\r\n );\r\n}\r\n\r\nexport default ScrollVelocity;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {useRef,useState,useLayoutEffect}from'react';import {useMotionValue,useScroll,useVelocity,useSpring,useTransform,useAnimationFrame,motion}from'framer-motion';import {jsx,jsxs}from'react/jsx-runtime';function j(t){let[u,r]=useState(0);return useLayoutEffect(()=>{function n(){t.current&&r(t.current.offsetWidth);}return n(),window.addEventListener("resize",n),()=>window.removeEventListener("resize",n)},[t]),u}function A({scrollContainerRef:t,texts:u=["Scroll Velocity","Bynana UI"],velocity:r=100,className:n="",damping:v=50,stiffness:w=400,numCopies:R=6,velocityMapping:d={input:[0,1e3],output:[0,5]}}){function x({children:l,baseVelocity:c}){let a=useMotionValue(0),S=t?{container:t}:{},{scrollY:T}=useScroll(S),E=useVelocity(T),L=useSpring(E,{damping:v,stiffness:w}),m=useTransform(L,d.input,d.output,{clamp:false}),y=useRef(null),b=j(y);function M(e,p,o){let f=p-e;return ((o-e)%f+f)%f+e}let N=useTransform(a,e=>b===0?"0px":`${M(-b,0,e)}px`),s=useRef(1);useAnimationFrame((e,p)=>{let o=s.current*c*(p/1e3);m.get()<0?s.current=-1:m.get()>0&&(s.current=1),o+=s.current*o*m.get(),a.set(a.get()+o);});let V=[];for(let e=0;e<R;e++)V.push(jsx("span",{className:n,ref:e===0?y:null,children:l},e));return jsx("div",{className:"overflow-hidden whitespace-nowrap",children:jsx(motion.div,{className:"flex",style:{x:N},children:V})})}return jsx("section",{children:u.map((l,c)=>jsxs(x,{baseVelocity:c%2!==0?-r:r,children:[l,"\xA0"]},c))})}var $=A;export{A as ScrollVelocity,$ as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/scroll-velocity/index.tsx"],"names":["useElementWidth","ref","width","setWidth","useState","useLayoutEffect","updateWidth","ScrollVelocity","scrollContainerRef","texts","velocity","className","damping","stiffness","numCopies","velocityMapping","VelocityText","children","baseVelocity","baseX","useMotionValue","scrollOptions","scrollY","useScroll","scrollVelocity","useVelocity","smoothVelocity","useSpring","velocityFactor","useTransform","copyRef","useRef","copyWidth","wrap","min","max","v","range","x","directionFactor","useAnimationFrame","t","delta","moveBy","spans","i","jsx","motion","text","index","jsxs","scroll_velocity_default"],"mappings":"8MA6BA,SAASA,CAAAA,CAAuCC,CAAAA,CAAwC,CACtF,GAAM,CAACC,EAAOC,CAAQ,CAAA,CAAIC,SAAS,CAAC,CAAA,CAEpC,OAAAC,eAAAA,CAAgB,IAAM,CACpB,SAASC,CAAAA,EAAc,CACjBL,EAAI,OAAA,EACNE,CAAAA,CAASF,CAAAA,CAAI,OAAA,CAAQ,WAAW,EAEpC,CACA,OAAAK,CAAAA,EAAY,CACZ,OAAO,gBAAA,CAAiB,QAAA,CAAUA,CAAW,CAAA,CACtC,IAAM,MAAA,CAAO,mBAAA,CAAoB,SAAUA,CAAW,CAC/D,EAAG,CAACL,CAAG,CAAC,CAAA,CAEDC,CACT,CAEO,SAASK,EAAe,CAC7B,kBAAA,CAAAC,EACA,KAAA,CAAAC,CAAAA,CAAQ,CAAC,iBAAA,CAAmB,WAAW,CAAA,CACvC,QAAA,CAAAC,CAAAA,CAAW,GAAA,CACX,UAAAC,CAAAA,CAAY,EAAA,CACZ,OAAA,CAAAC,CAAAA,CAAU,GACV,SAAA,CAAAC,CAAAA,CAAY,IACZ,SAAA,CAAAC,CAAAA,CAAY,EACZ,eAAA,CAAAC,CAAAA,CAAkB,CAAE,KAAA,CAAO,CAAC,CAAA,CAAG,GAAI,EAAG,MAAA,CAAQ,CAAC,EAAG,CAAC,CAAE,CACvD,CAAA,CAAwB,CACtB,SAASC,CAAAA,CAAa,CACpB,QAAA,CAAAC,CAAAA,CACA,aAAAC,CACF,CAAA,CAGG,CACD,IAAMC,EAAQC,cAAAA,CAAe,CAAC,CAAA,CACxBC,CAAAA,CAAgBb,EAAqB,CAAE,SAAA,CAAWA,CAAmB,CAAA,CAAI,EAAC,CAC1E,CAAE,QAAAc,CAAQ,CAAA,CAAIC,UAAUF,CAAa,CAAA,CACrCG,CAAAA,CAAiBC,WAAAA,CAAYH,CAAO,CAAA,CACpCI,CAAAA,CAAiBC,UAAUH,CAAAA,CAAgB,CAAE,QAAAZ,CAAAA,CAAS,SAAA,CAAAC,CAAU,CAAC,EACjEe,CAAAA,CAAiBC,YAAAA,CACrBH,EACAX,CAAAA,CAAgB,KAAA,CAChBA,EAAgB,MAAA,CAChB,CAAE,KAAA,CAAO,KAAM,CACjB,CAAA,CAEMe,CAAAA,CAAUC,MAAAA,CAAwB,IAAI,EACtCC,CAAAA,CAAYhC,CAAAA,CAAgB8B,CAAO,CAAA,CAEzC,SAASG,CAAAA,CAAKC,CAAAA,CAAaC,EAAaC,CAAAA,CAAmB,CACzD,IAAMC,CAAAA,CAAQF,CAAAA,CAAMD,CAAAA,CAEpB,OAAA,CAAA,CADeE,EAAIF,CAAAA,EAAOG,CAAAA,CAASA,CAAAA,EAASA,CAAAA,CAC/BH,CACf,CAEA,IAAMI,CAAAA,CAAIT,YAAAA,CAAaV,EAAOiB,CAAAA,EACxBJ,CAAAA,GAAc,EAAU,KAAA,CACrB,CAAA,EAAGC,EAAK,CAACD,CAAAA,CAAW,CAAA,CAAGI,CAAC,CAAC,CAAA,EAAA,CACjC,CAAA,CAEKG,CAAAA,CAAkBR,MAAAA,CAAe,CAAC,CAAA,CACxCS,iBAAAA,CAAkB,CAACC,CAAAA,CAAGC,IAAU,CAC9B,IAAIC,EAASJ,CAAAA,CAAgB,OAAA,CAAUrB,GAAgBwB,CAAAA,CAAQ,GAAA,CAAA,CAC3Dd,CAAAA,CAAe,GAAA,GAAQ,CAAA,CAAGW,CAAAA,CAAgB,QAAU,EAAA,CAC/CX,CAAAA,CAAe,KAAI,CAAI,CAAA,GAAGW,CAAAA,CAAgB,OAAA,CAAU,GAC7DI,CAAAA,EAAUJ,CAAAA,CAAgB,QAAUI,CAAAA,CAASf,CAAAA,CAAe,KAAI,CAChET,CAAAA,CAAM,GAAA,CAAIA,CAAAA,CAAM,KAAI,CAAIwB,CAAM,EAChC,CAAC,EAED,IAAMC,CAAAA,CAAQ,EAAC,CACf,QAASC,CAAAA,CAAI,CAAA,CAAGA,EAAI/B,CAAAA,CAAW+B,CAAAA,EAAAA,CAC7BD,EAAM,IAAA,CACJE,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAWnC,EAAmB,GAAA,CAAKkC,CAAAA,GAAM,EAAIf,CAAAA,CAAU,IAAA,CAC1D,SAAAb,CAAAA,CAAAA,CAD8B4B,CAEjC,CACF,CAAA,CAGF,OACEC,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,mCAAA,CACb,QAAA,CAAAA,IAACC,MAAAA,CAAO,GAAA,CAAP,CAAW,SAAA,CAAU,OAAO,KAAA,CAAO,CAAE,CAAA,CAAAT,CAAE,EACrC,QAAA,CAAAM,CAAAA,CACH,CAAA,CACF,CAEJ,CAEA,OACEE,GAAAA,CAAC,WACE,QAAA,CAAArC,CAAAA,CAAM,IAAI,CAACuC,CAAAA,CAAMC,CAAAA,GAChBC,IAAAA,CAAClC,EAAA,CAAyB,YAAA,CAAciC,EAAQ,CAAA,GAAM,CAAA,CAAI,CAACvC,CAAAA,CAAWA,CAAAA,CACnE,QAAA,CAAA,CAAAsC,CAAAA,CAAK,SADWC,CAEnB,CACD,EACH,CAEJ,KAEOE,CAAAA,CAAQ5C","file":"index.mjs","sourcesContent":["\"use client\";\r\n\r\nimport React, { useRef, useLayoutEffect, useState } from \"react\";\r\nimport {\r\n motion,\r\n useScroll,\r\n useSpring,\r\n useTransform,\r\n useMotionValue,\r\n useVelocity,\r\n useAnimationFrame\r\n} from \"framer-motion\";\r\n\r\ninterface VelocityMapping {\r\n input: [number, number];\r\n output: [number, number];\r\n}\r\n\r\ninterface ScrollVelocityProps {\r\n scrollContainerRef?: React.RefObject<HTMLElement>;\r\n texts?: string[];\r\n velocity?: number;\r\n className?: string;\r\n damping?: number;\r\n stiffness?: number;\r\n numCopies?: number;\r\n velocityMapping?: VelocityMapping;\r\n}\r\n\r\nfunction useElementWidth<T extends HTMLElement>(ref: React.RefObject<T | null>): number {\r\n const [width, setWidth] = useState(0);\r\n\r\n useLayoutEffect(() => {\r\n function updateWidth() {\r\n if (ref.current) {\r\n setWidth(ref.current.offsetWidth);\r\n }\r\n }\r\n updateWidth();\r\n window.addEventListener(\"resize\", updateWidth);\r\n return () => window.removeEventListener(\"resize\", updateWidth);\r\n }, [ref]);\r\n\r\n return width;\r\n}\r\n\r\nexport function ScrollVelocity({\r\n scrollContainerRef,\r\n texts = [\"Scroll Velocity\", \"Bynana UI\"],\r\n velocity = 100,\r\n className = \"\",\r\n damping = 50,\r\n stiffness = 400,\r\n numCopies = 6,\r\n velocityMapping = { input: [0, 1000], output: [0, 5] },\r\n}: ScrollVelocityProps) {\r\n function VelocityText({\r\n children,\r\n baseVelocity,\r\n }: {\r\n children: React.ReactNode;\r\n baseVelocity: number;\r\n }) {\r\n const baseX = useMotionValue(0);\r\n const scrollOptions = scrollContainerRef ? { container: scrollContainerRef } : {};\r\n const { scrollY } = useScroll(scrollOptions);\r\n const scrollVelocity = useVelocity(scrollY);\r\n const smoothVelocity = useSpring(scrollVelocity, { damping, stiffness });\r\n const velocityFactor = useTransform(\r\n smoothVelocity,\r\n velocityMapping.input,\r\n velocityMapping.output,\r\n { clamp: false }\r\n );\r\n\r\n const copyRef = useRef<HTMLSpanElement>(null);\r\n const copyWidth = useElementWidth(copyRef);\r\n\r\n function wrap(min: number, max: number, v: number): number {\r\n const range = max - min;\r\n const mod = (((v - min) % range) + range) % range;\r\n return mod + min;\r\n }\r\n\r\n const x = useTransform(baseX, v => {\r\n if (copyWidth === 0) return \"0px\";\r\n return `${wrap(-copyWidth, 0, v)}px`;\r\n });\r\n\r\n const directionFactor = useRef<number>(1);\r\n useAnimationFrame((t, delta) => {\r\n let moveBy = directionFactor.current * baseVelocity * (delta / 1000);\r\n if (velocityFactor.get() < 0) directionFactor.current = -1;\r\n else if (velocityFactor.get() > 0) directionFactor.current = 1;\r\n moveBy += directionFactor.current * moveBy * velocityFactor.get();\r\n baseX.set(baseX.get() + moveBy);\r\n });\r\n\r\n const spans = [];\r\n for (let i = 0; i < numCopies; i++) {\r\n spans.push(\r\n <span className={className} key={i} ref={i === 0 ? copyRef : null}>\r\n {children}\r\n </span>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"overflow-hidden whitespace-nowrap\">\r\n <motion.div className=\"flex\" style={{ x }}>\r\n {spans}\r\n </motion.div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <section>\r\n {texts.map((text, index) => (\r\n <VelocityText key={index} baseVelocity={index % 2 !== 0 ? -velocity : velocity}>\r\n {text} \r\n </VelocityText>\r\n ))}\r\n </section>\r\n );\r\n}\r\n\r\nexport default ScrollVelocity;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var framerMotion=require('framer-motion'),jsxRuntime=require('react/jsx-runtime');function r(...t){return t.filter(Boolean).join(" ")}function s({children:t,className:i}){return jsxRuntime.jsxs("div",{className:r("relative w-full min-h-[500px] flex items-center justify-center overflow-hidden bg-white dark:bg-zinc-900 rounded-xl border border-zinc-200 dark:border-zinc-800",i),children:[jsxRuntime.jsx(framerMotion.motion.div,{className:"absolute inset-0",style:{background:"linear-gradient(90deg, transparent 0%, rgba(0,0,0,0.08) 50%, transparent 100%)"},animate:{x:["-200%","200%"]},transition:{duration:2.5,repeat:1/0,ease:"linear"}}),jsxRuntime.jsx(framerMotion.motion.div,{className:"absolute inset-0",style:{background:"linear-gradient(90deg, transparent 0%, rgba(0,0,0,0.05) 50%, transparent 100%)"},animate:{x:["-200%","200%"]},transition:{duration:3,delay:.5,repeat:1/0,ease:"linear"}}),jsxRuntime.jsx(framerMotion.motion.div,{className:"absolute inset-0",style:{background:"linear-gradient(90deg, transparent 0%, rgba(0,0,0,0.03) 50%, transparent 100%)"},animate:{x:["-200%","200%"]},transition:{duration:3.5,delay:1,repeat:1/0,ease:"linear"}}),jsxRuntime.jsx(framerMotion.motion.div,{className:"absolute inset-0 hidden dark:block",style:{background:"linear-gradient(90deg, transparent 0%, rgba(161,161,170,0.15) 50%, transparent 100%)"},animate:{x:["-200%","200%"]},transition:{duration:2.5,repeat:1/0,ease:"linear"}}),jsxRuntime.jsx("div",{className:"absolute inset-0 opacity-10 dark:opacity-5",style:{backgroundImage:"radial-gradient(circle at 2px 2px, #71717a 1px, transparent 0)",backgroundSize:"40px 40px"}}),jsxRuntime.jsx("div",{className:"relative z-10 text-center px-8",children:t||jsxRuntime.jsxs(framerMotion.motion.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.8},children:[jsxRuntime.jsx("h2",{className:"text-7xl font-bold text-zinc-900 dark:text-zinc-100 mb-4 tracking-tight",style:{fontFamily:"system-ui, -apple-system, sans-serif",letterSpacing:"-0.02em"},children:"SHIMMER WAVE"}),jsxRuntime.jsx("p",{className:"text-xl text-zinc-500 font-light tracking-wide",children:"Advanced Shimmer Effect"})]})})]})}var l=s;exports.ShimmerEffect=s;exports.default=l;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/shimmer-effect/index.tsx"],"names":["cn","classes","ShimmerEffect","children","className","jsxs","jsx","motion","shimmer_effect_default"],"mappings":"wJAIA,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAyC,CACtD,OAAOA,CAAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CACzC,CAOO,SAASC,CAAAA,CAAc,CAC5B,QAAA,CAAAC,CAAAA,CACA,UAAAC,CACF,CAAA,CAAuB,CACrB,OACEC,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAWL,CAAAA,CAAG,iKAAA,CAAmKI,CAAS,CAAA,CAC7L,QAAA,CAAA,CAAAE,cAAAA,CAACC,oBAAO,GAAA,CAAP,CACC,SAAA,CAAU,kBAAA,CACV,KAAA,CAAO,CACL,UAAA,CAAY,gFACd,CAAA,CACA,OAAA,CAAS,CACP,CAAA,CAAG,CAAC,OAAA,CAAS,MAAM,CACrB,CAAA,CACA,UAAA,CAAY,CACV,QAAA,CAAU,GAAA,CACV,OAAQ,CAAA,CAAA,CAAA,CACR,IAAA,CAAM,QACR,CAAA,CACF,CAAA,CAEAD,cAAAA,CAACC,oBAAO,GAAA,CAAP,CACC,SAAA,CAAU,kBAAA,CACV,KAAA,CAAO,CACL,WAAY,gFACd,CAAA,CACA,OAAA,CAAS,CACP,CAAA,CAAG,CAAC,QAAS,MAAM,CACrB,CAAA,CACA,UAAA,CAAY,CACV,QAAA,CAAU,EACV,KAAA,CAAO,EAAA,CACP,MAAA,CAAQ,CAAA,CAAA,CAAA,CACR,IAAA,CAAM,QACR,EACF,CAAA,CAEAD,cAAAA,CAACC,mBAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAU,kBAAA,CACV,KAAA,CAAO,CACL,UAAA,CAAY,gFACd,CAAA,CACA,OAAA,CAAS,CACP,EAAG,CAAC,OAAA,CAAS,MAAM,CACrB,CAAA,CACA,UAAA,CAAY,CACV,QAAA,CAAU,GAAA,CACV,KAAA,CAAO,CAAA,CACP,MAAA,CAAQ,CAAA,CAAA,CAAA,CACR,KAAM,QACR,CAAA,CACF,CAAA,CAEAD,cAAAA,CAACC,mBAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAU,oCAAA,CACV,KAAA,CAAO,CACL,UAAA,CAAY,sFACd,EACA,OAAA,CAAS,CACP,CAAA,CAAG,CAAC,OAAA,CAAS,MAAM,CACrB,CAAA,CACA,UAAA,CAAY,CACV,QAAA,CAAU,GAAA,CACV,MAAA,CAAQ,IACR,IAAA,CAAM,QACR,CAAA,CACF,CAAA,CAEAD,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4CAAA,CAA6C,KAAA,CAAO,CACjE,eAAA,CAAiB,gEAAA,CACjB,cAAA,CAAgB,WAClB,EAAG,CAAA,CAEHA,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gCAAA,CACZ,QAAA,CAAAH,GACCE,eAAAA,CAACE,mBAAAA,CAAO,GAAA,CAAP,CACC,OAAA,CAAS,CAAE,QAAS,CAAA,CAAG,CAAA,CAAG,EAAG,CAAA,CAC7B,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,CAAE,CAAA,CAC5B,UAAA,CAAY,CAAE,QAAA,CAAU,EAAI,CAAA,CAE5B,QAAA,CAAA,CAAAD,cAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,yEAAA,CAA0E,MAAO,CAC7F,UAAA,CAAY,sCAAA,CACZ,aAAA,CAAe,SACjB,CAAA,CAAG,wBAEH,CAAA,CACAA,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,gDAAA,CAAiD,QAAA,CAAA,yBAAA,CAE9D,CAAA,CAAA,CACF,CAAA,CAEJ,CAAA,CAAA,CACF,CAEJ,CAEA,IAAOE,CAAAA,CAAQN","file":"index.js","sourcesContent":["\"use client\";\r\n\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 ShimmerEffectProps {\r\n children?: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function ShimmerEffect({\r\n children,\r\n className,\r\n}: ShimmerEffectProps) {\r\n return (\r\n <div className={cn(\"relative w-full min-h-[500px] flex items-center justify-center overflow-hidden bg-white dark:bg-zinc-900 rounded-xl border border-zinc-200 dark:border-zinc-800\", className)}>\r\n <motion.div\r\n className=\"absolute inset-0\"\r\n style={{\r\n background: \"linear-gradient(90deg, transparent 0%, rgba(0,0,0,0.08) 50%, transparent 100%)\",\r\n }}\r\n animate={{\r\n x: [\"-200%\", \"200%\"],\r\n }}\r\n transition={{\r\n duration: 2.5,\r\n repeat: Infinity,\r\n ease: \"linear\",\r\n }}\r\n />\r\n \r\n <motion.div\r\n className=\"absolute inset-0\"\r\n style={{\r\n background: \"linear-gradient(90deg, transparent 0%, rgba(0,0,0,0.05) 50%, transparent 100%)\",\r\n }}\r\n animate={{\r\n x: [\"-200%\", \"200%\"],\r\n }}\r\n transition={{\r\n duration: 3,\r\n delay: 0.5,\r\n repeat: Infinity,\r\n ease: \"linear\",\r\n }}\r\n />\r\n \r\n <motion.div\r\n className=\"absolute inset-0\"\r\n style={{\r\n background: \"linear-gradient(90deg, transparent 0%, rgba(0,0,0,0.03) 50%, transparent 100%)\",\r\n }}\r\n animate={{\r\n x: [\"-200%\", \"200%\"],\r\n }}\r\n transition={{\r\n duration: 3.5,\r\n delay: 1,\r\n repeat: Infinity,\r\n ease: \"linear\",\r\n }}\r\n />\r\n \r\n <motion.div\r\n className=\"absolute inset-0 hidden dark:block\"\r\n style={{\r\n background: \"linear-gradient(90deg, transparent 0%, rgba(161,161,170,0.15) 50%, transparent 100%)\",\r\n }}\r\n animate={{\r\n x: [\"-200%\", \"200%\"],\r\n }}\r\n transition={{\r\n duration: 2.5,\r\n repeat: Infinity,\r\n ease: \"linear\",\r\n }}\r\n />\r\n \r\n <div className=\"absolute inset-0 opacity-10 dark:opacity-5\" style={{\r\n backgroundImage: \"radial-gradient(circle at 2px 2px, #71717a 1px, transparent 0)\",\r\n backgroundSize: \"40px 40px\"\r\n }} />\r\n \r\n <div className=\"relative z-10 text-center px-8\">\r\n {children || (\r\n <motion.div\r\n initial={{ opacity: 0, y: 20 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n transition={{ duration: 0.8 }}\r\n >\r\n <h2 className=\"text-7xl font-bold text-zinc-900 dark:text-zinc-100 mb-4 tracking-tight\" style={{\r\n fontFamily: \"system-ui, -apple-system, sans-serif\",\r\n letterSpacing: \"-0.02em\"\r\n }}>\r\n SHIMMER WAVE\r\n </h2>\r\n <p className=\"text-xl text-zinc-500 font-light tracking-wide\">\r\n Advanced Shimmer Effect\r\n </p>\r\n </motion.div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default ShimmerEffect;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {motion}from'framer-motion';import {jsxs,jsx}from'react/jsx-runtime';function r(...t){return t.filter(Boolean).join(" ")}function s({children:t,className:i}){return jsxs("div",{className:r("relative w-full min-h-[500px] flex items-center justify-center overflow-hidden bg-white dark:bg-zinc-900 rounded-xl border border-zinc-200 dark:border-zinc-800",i),children:[jsx(motion.div,{className:"absolute inset-0",style:{background:"linear-gradient(90deg, transparent 0%, rgba(0,0,0,0.08) 50%, transparent 100%)"},animate:{x:["-200%","200%"]},transition:{duration:2.5,repeat:1/0,ease:"linear"}}),jsx(motion.div,{className:"absolute inset-0",style:{background:"linear-gradient(90deg, transparent 0%, rgba(0,0,0,0.05) 50%, transparent 100%)"},animate:{x:["-200%","200%"]},transition:{duration:3,delay:.5,repeat:1/0,ease:"linear"}}),jsx(motion.div,{className:"absolute inset-0",style:{background:"linear-gradient(90deg, transparent 0%, rgba(0,0,0,0.03) 50%, transparent 100%)"},animate:{x:["-200%","200%"]},transition:{duration:3.5,delay:1,repeat:1/0,ease:"linear"}}),jsx(motion.div,{className:"absolute inset-0 hidden dark:block",style:{background:"linear-gradient(90deg, transparent 0%, rgba(161,161,170,0.15) 50%, transparent 100%)"},animate:{x:["-200%","200%"]},transition:{duration:2.5,repeat:1/0,ease:"linear"}}),jsx("div",{className:"absolute inset-0 opacity-10 dark:opacity-5",style:{backgroundImage:"radial-gradient(circle at 2px 2px, #71717a 1px, transparent 0)",backgroundSize:"40px 40px"}}),jsx("div",{className:"relative z-10 text-center px-8",children:t||jsxs(motion.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.8},children:[jsx("h2",{className:"text-7xl font-bold text-zinc-900 dark:text-zinc-100 mb-4 tracking-tight",style:{fontFamily:"system-ui, -apple-system, sans-serif",letterSpacing:"-0.02em"},children:"SHIMMER WAVE"}),jsx("p",{className:"text-xl text-zinc-500 font-light tracking-wide",children:"Advanced Shimmer Effect"})]})})]})}var l=s;export{s as ShimmerEffect,l as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/shimmer-effect/index.tsx"],"names":["cn","classes","ShimmerEffect","children","className","jsxs","jsx","motion","shimmer_effect_default"],"mappings":"4EAIA,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAyC,CACtD,OAAOA,CAAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CACzC,CAOO,SAASC,CAAAA,CAAc,CAC5B,QAAA,CAAAC,CAAAA,CACA,UAAAC,CACF,CAAA,CAAuB,CACrB,OACEC,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAWL,CAAAA,CAAG,iKAAA,CAAmKI,CAAS,CAAA,CAC7L,QAAA,CAAA,CAAAE,GAAAA,CAACC,OAAO,GAAA,CAAP,CACC,SAAA,CAAU,kBAAA,CACV,KAAA,CAAO,CACL,UAAA,CAAY,gFACd,CAAA,CACA,OAAA,CAAS,CACP,CAAA,CAAG,CAAC,OAAA,CAAS,MAAM,CACrB,CAAA,CACA,UAAA,CAAY,CACV,QAAA,CAAU,GAAA,CACV,OAAQ,CAAA,CAAA,CAAA,CACR,IAAA,CAAM,QACR,CAAA,CACF,CAAA,CAEAD,GAAAA,CAACC,OAAO,GAAA,CAAP,CACC,SAAA,CAAU,kBAAA,CACV,KAAA,CAAO,CACL,WAAY,gFACd,CAAA,CACA,OAAA,CAAS,CACP,CAAA,CAAG,CAAC,QAAS,MAAM,CACrB,CAAA,CACA,UAAA,CAAY,CACV,QAAA,CAAU,EACV,KAAA,CAAO,EAAA,CACP,MAAA,CAAQ,CAAA,CAAA,CAAA,CACR,IAAA,CAAM,QACR,EACF,CAAA,CAEAD,GAAAA,CAACC,MAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAU,kBAAA,CACV,KAAA,CAAO,CACL,UAAA,CAAY,gFACd,CAAA,CACA,OAAA,CAAS,CACP,EAAG,CAAC,OAAA,CAAS,MAAM,CACrB,CAAA,CACA,UAAA,CAAY,CACV,QAAA,CAAU,GAAA,CACV,KAAA,CAAO,CAAA,CACP,MAAA,CAAQ,CAAA,CAAA,CAAA,CACR,KAAM,QACR,CAAA,CACF,CAAA,CAEAD,GAAAA,CAACC,MAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAU,oCAAA,CACV,KAAA,CAAO,CACL,UAAA,CAAY,sFACd,EACA,OAAA,CAAS,CACP,CAAA,CAAG,CAAC,OAAA,CAAS,MAAM,CACrB,CAAA,CACA,UAAA,CAAY,CACV,QAAA,CAAU,GAAA,CACV,MAAA,CAAQ,IACR,IAAA,CAAM,QACR,CAAA,CACF,CAAA,CAEAD,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,4CAAA,CAA6C,KAAA,CAAO,CACjE,eAAA,CAAiB,gEAAA,CACjB,cAAA,CAAgB,WAClB,EAAG,CAAA,CAEHA,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,gCAAA,CACZ,QAAA,CAAAH,GACCE,IAAAA,CAACE,MAAAA,CAAO,GAAA,CAAP,CACC,OAAA,CAAS,CAAE,QAAS,CAAA,CAAG,CAAA,CAAG,EAAG,CAAA,CAC7B,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,CAAE,CAAA,CAC5B,UAAA,CAAY,CAAE,QAAA,CAAU,EAAI,CAAA,CAE5B,QAAA,CAAA,CAAAD,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,yEAAA,CAA0E,MAAO,CAC7F,UAAA,CAAY,sCAAA,CACZ,aAAA,CAAe,SACjB,CAAA,CAAG,wBAEH,CAAA,CACAA,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,gDAAA,CAAiD,QAAA,CAAA,yBAAA,CAE9D,CAAA,CAAA,CACF,CAAA,CAEJ,CAAA,CAAA,CACF,CAEJ,CAEA,IAAOE,CAAAA,CAAQN","file":"index.mjs","sourcesContent":["\"use client\";\r\n\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 ShimmerEffectProps {\r\n children?: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function ShimmerEffect({\r\n children,\r\n className,\r\n}: ShimmerEffectProps) {\r\n return (\r\n <div className={cn(\"relative w-full min-h-[500px] flex items-center justify-center overflow-hidden bg-white dark:bg-zinc-900 rounded-xl border border-zinc-200 dark:border-zinc-800\", className)}>\r\n <motion.div\r\n className=\"absolute inset-0\"\r\n style={{\r\n background: \"linear-gradient(90deg, transparent 0%, rgba(0,0,0,0.08) 50%, transparent 100%)\",\r\n }}\r\n animate={{\r\n x: [\"-200%\", \"200%\"],\r\n }}\r\n transition={{\r\n duration: 2.5,\r\n repeat: Infinity,\r\n ease: \"linear\",\r\n }}\r\n />\r\n \r\n <motion.div\r\n className=\"absolute inset-0\"\r\n style={{\r\n background: \"linear-gradient(90deg, transparent 0%, rgba(0,0,0,0.05) 50%, transparent 100%)\",\r\n }}\r\n animate={{\r\n x: [\"-200%\", \"200%\"],\r\n }}\r\n transition={{\r\n duration: 3,\r\n delay: 0.5,\r\n repeat: Infinity,\r\n ease: \"linear\",\r\n }}\r\n />\r\n \r\n <motion.div\r\n className=\"absolute inset-0\"\r\n style={{\r\n background: \"linear-gradient(90deg, transparent 0%, rgba(0,0,0,0.03) 50%, transparent 100%)\",\r\n }}\r\n animate={{\r\n x: [\"-200%\", \"200%\"],\r\n }}\r\n transition={{\r\n duration: 3.5,\r\n delay: 1,\r\n repeat: Infinity,\r\n ease: \"linear\",\r\n }}\r\n />\r\n \r\n <motion.div\r\n className=\"absolute inset-0 hidden dark:block\"\r\n style={{\r\n background: \"linear-gradient(90deg, transparent 0%, rgba(161,161,170,0.15) 50%, transparent 100%)\",\r\n }}\r\n animate={{\r\n x: [\"-200%\", \"200%\"],\r\n }}\r\n transition={{\r\n duration: 2.5,\r\n repeat: Infinity,\r\n ease: \"linear\",\r\n }}\r\n />\r\n \r\n <div className=\"absolute inset-0 opacity-10 dark:opacity-5\" style={{\r\n backgroundImage: \"radial-gradient(circle at 2px 2px, #71717a 1px, transparent 0)\",\r\n backgroundSize: \"40px 40px\"\r\n }} />\r\n \r\n <div className=\"relative z-10 text-center px-8\">\r\n {children || (\r\n <motion.div\r\n initial={{ opacity: 0, y: 20 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n transition={{ duration: 0.8 }}\r\n >\r\n <h2 className=\"text-7xl font-bold text-zinc-900 dark:text-zinc-100 mb-4 tracking-tight\" style={{\r\n fontFamily: \"system-ui, -apple-system, sans-serif\",\r\n letterSpacing: \"-0.02em\"\r\n }}>\r\n SHIMMER WAVE\r\n </h2>\r\n <p className=\"text-xl text-zinc-500 font-light tracking-wide\">\r\n Advanced Shimmer Effect\r\n </p>\r\n </motion.div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default ShimmerEffect;\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 c(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function S({className:e}){let[l,t]=react.useState(false),o=framerMotion.useMotionValue(-100),s=framerMotion.useMotionValue(-100),n={damping:25,stiffness:700},p=framerMotion.useSpring(o,n),a=framerMotion.useSpring(s,n);return react.useEffect(()=>{let r=u=>{o.set(u.clientX-16),s.set(u.clientY-16),t(true);},i=()=>{t(false);};return window.addEventListener("mousemove",r),window.addEventListener("mouseleave",i),()=>{window.removeEventListener("mousemove",r),window.removeEventListener("mouseleave",i);}},[o,s]),jsxRuntime.jsx(framerMotion.motion.div,{className:c("pointer-events-none fixed left-0 top-0 z-50 h-8 w-8 rounded-full bg-zinc-400 mix-blend-difference",l?"opacity-100":"opacity-0",e),style:{x:p,y:a},transition:{type:"spring",stiffness:500,damping:28}})}var M=S;exports.SmoothCursor=S;exports.default=M;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/smooth-cursor/index.tsx"],"names":["cn","inputs","twMerge","clsx","SmoothCursor","className","isVisible","setIsVisible","useState","cursorX","useMotionValue","cursorY","springConfig","cursorXSpring","useSpring","cursorYSpring","useEffect","moveCursor","e","hideCursor","jsx","motion","smooth_cursor_default"],"mappings":"4OAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,sBAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,CAAAA,CAAa,CAAE,SAAA,CAAAC,CAAU,CAAA,CAAsB,CAC7D,GAAM,CAACC,CAAAA,CAAWC,CAAY,CAAA,CAAIC,eAAS,KAAK,CAAA,CAC1CC,CAAAA,CAAUC,2BAAAA,CAAe,IAAI,CAAA,CAC7BC,CAAAA,CAAUD,4BAAe,IAAI,CAAA,CAE7BE,EAAe,CAAE,OAAA,CAAS,EAAA,CAAI,SAAA,CAAW,GAAI,CAAA,CAC7CC,CAAAA,CAAgBC,uBAAUL,CAAAA,CAASG,CAAY,EAC/CG,CAAAA,CAAgBD,sBAAAA,CAAUH,CAAAA,CAASC,CAAY,EAErD,OAAAI,eAAAA,CAAU,IAAM,CACd,IAAMC,EAAcC,CAAAA,EAAkB,CACpCT,CAAAA,CAAQ,GAAA,CAAIS,EAAE,OAAA,CAAU,EAAE,CAAA,CAC1BP,CAAAA,CAAQ,IAAIO,CAAAA,CAAE,OAAA,CAAU,EAAE,CAAA,CAC1BX,EAAa,IAAI,EACnB,EAEMY,CAAAA,CAAa,IAAM,CACvBZ,CAAAA,CAAa,KAAK,EACpB,CAAA,CAEA,cAAO,gBAAA,CAAiB,WAAA,CAAaU,CAAU,CAAA,CAC/C,OAAO,gBAAA,CAAiB,YAAA,CAAcE,CAAU,CAAA,CAEzC,IAAM,CACX,MAAA,CAAO,oBAAoB,WAAA,CAAaF,CAAU,EAClD,MAAA,CAAO,mBAAA,CAAoB,YAAA,CAAcE,CAAU,EACrD,CACF,CAAA,CAAG,CAACV,CAAAA,CAASE,CAAO,CAAC,CAAA,CAGnBS,cAAAA,CAACC,mBAAAA,CAAO,IAAP,CACC,SAAA,CAAWrB,EACT,mGAAA,CACAM,CAAAA,CAAY,cAAgB,WAAA,CAC5BD,CACF,CAAA,CACA,KAAA,CAAO,CACL,CAAA,CAAGQ,CAAAA,CACH,EAAGE,CACL,CAAA,CACA,WAAY,CACV,IAAA,CAAM,QAAA,CACN,SAAA,CAAW,IACX,OAAA,CAAS,EACX,EACF,CAEJ,KAEOO,CAAAA,CAAQlB","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { motion, useMotionValue, useSpring } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface SmoothCursorProps {\r\n className?: string;\r\n}\r\n\r\nexport function SmoothCursor({ className }: SmoothCursorProps) {\r\n const [isVisible, setIsVisible] = useState(false);\r\n const cursorX = useMotionValue(-100);\r\n const cursorY = useMotionValue(-100);\r\n\r\n const springConfig = { damping: 25, stiffness: 700 };\r\n const cursorXSpring = useSpring(cursorX, springConfig);\r\n const cursorYSpring = useSpring(cursorY, springConfig);\r\n\r\n useEffect(() => {\r\n const moveCursor = (e: MouseEvent) => {\r\n cursorX.set(e.clientX - 16);\r\n cursorY.set(e.clientY - 16);\r\n setIsVisible(true);\r\n };\r\n\r\n const hideCursor = () => {\r\n setIsVisible(false);\r\n };\r\n\r\n window.addEventListener(\"mousemove\", moveCursor);\r\n window.addEventListener(\"mouseleave\", hideCursor);\r\n\r\n return () => {\r\n window.removeEventListener(\"mousemove\", moveCursor);\r\n window.removeEventListener(\"mouseleave\", hideCursor);\r\n };\r\n }, [cursorX, cursorY]);\r\n\r\n return (\r\n <motion.div\r\n className={cn(\r\n \"pointer-events-none fixed left-0 top-0 z-50 h-8 w-8 rounded-full bg-zinc-400 mix-blend-difference\",\r\n isVisible ? \"opacity-100\" : \"opacity-0\",\r\n className\r\n )}\r\n style={{\r\n x: cursorXSpring,\r\n y: cursorYSpring,\r\n }}\r\n transition={{\r\n type: \"spring\",\r\n stiffness: 500,\r\n damping: 28,\r\n }}\r\n />\r\n );\r\n}\r\n\r\nexport default SmoothCursor;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {useState,useEffect}from'react';import {useMotionValue,useSpring,motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function c(...e){return twMerge(clsx(e))}function S({className:e}){let[l,t]=useState(false),o=useMotionValue(-100),s=useMotionValue(-100),n={damping:25,stiffness:700},p=useSpring(o,n),a=useSpring(s,n);return useEffect(()=>{let r=u=>{o.set(u.clientX-16),s.set(u.clientY-16),t(true);},i=()=>{t(false);};return window.addEventListener("mousemove",r),window.addEventListener("mouseleave",i),()=>{window.removeEventListener("mousemove",r),window.removeEventListener("mouseleave",i);}},[o,s]),jsx(motion.div,{className:c("pointer-events-none fixed left-0 top-0 z-50 h-8 w-8 rounded-full bg-zinc-400 mix-blend-difference",l?"opacity-100":"opacity-0",e),style:{x:p,y:a},transition:{type:"spring",stiffness:500,damping:28}})}var M=S;export{S as SmoothCursor,M as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/smooth-cursor/index.tsx"],"names":["cn","inputs","twMerge","clsx","SmoothCursor","className","isVisible","setIsVisible","useState","cursorX","useMotionValue","cursorY","springConfig","cursorXSpring","useSpring","cursorYSpring","useEffect","moveCursor","e","hideCursor","jsx","motion","smooth_cursor_default"],"mappings":"oMAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,QAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,CAAAA,CAAa,CAAE,SAAA,CAAAC,CAAU,CAAA,CAAsB,CAC7D,GAAM,CAACC,CAAAA,CAAWC,CAAY,CAAA,CAAIC,SAAS,KAAK,CAAA,CAC1CC,CAAAA,CAAUC,cAAAA,CAAe,IAAI,CAAA,CAC7BC,CAAAA,CAAUD,eAAe,IAAI,CAAA,CAE7BE,EAAe,CAAE,OAAA,CAAS,EAAA,CAAI,SAAA,CAAW,GAAI,CAAA,CAC7CC,CAAAA,CAAgBC,UAAUL,CAAAA,CAASG,CAAY,EAC/CG,CAAAA,CAAgBD,SAAAA,CAAUH,CAAAA,CAASC,CAAY,EAErD,OAAAI,SAAAA,CAAU,IAAM,CACd,IAAMC,EAAcC,CAAAA,EAAkB,CACpCT,CAAAA,CAAQ,GAAA,CAAIS,EAAE,OAAA,CAAU,EAAE,CAAA,CAC1BP,CAAAA,CAAQ,IAAIO,CAAAA,CAAE,OAAA,CAAU,EAAE,CAAA,CAC1BX,EAAa,IAAI,EACnB,EAEMY,CAAAA,CAAa,IAAM,CACvBZ,CAAAA,CAAa,KAAK,EACpB,CAAA,CAEA,cAAO,gBAAA,CAAiB,WAAA,CAAaU,CAAU,CAAA,CAC/C,OAAO,gBAAA,CAAiB,YAAA,CAAcE,CAAU,CAAA,CAEzC,IAAM,CACX,MAAA,CAAO,oBAAoB,WAAA,CAAaF,CAAU,EAClD,MAAA,CAAO,mBAAA,CAAoB,YAAA,CAAcE,CAAU,EACrD,CACF,CAAA,CAAG,CAACV,CAAAA,CAASE,CAAO,CAAC,CAAA,CAGnBS,GAAAA,CAACC,MAAAA,CAAO,IAAP,CACC,SAAA,CAAWrB,EACT,mGAAA,CACAM,CAAAA,CAAY,cAAgB,WAAA,CAC5BD,CACF,CAAA,CACA,KAAA,CAAO,CACL,CAAA,CAAGQ,CAAAA,CACH,EAAGE,CACL,CAAA,CACA,WAAY,CACV,IAAA,CAAM,QAAA,CACN,SAAA,CAAW,IACX,OAAA,CAAS,EACX,EACF,CAEJ,KAEOO,CAAAA,CAAQlB","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { motion, useMotionValue, useSpring } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface SmoothCursorProps {\r\n className?: string;\r\n}\r\n\r\nexport function SmoothCursor({ className }: SmoothCursorProps) {\r\n const [isVisible, setIsVisible] = useState(false);\r\n const cursorX = useMotionValue(-100);\r\n const cursorY = useMotionValue(-100);\r\n\r\n const springConfig = { damping: 25, stiffness: 700 };\r\n const cursorXSpring = useSpring(cursorX, springConfig);\r\n const cursorYSpring = useSpring(cursorY, springConfig);\r\n\r\n useEffect(() => {\r\n const moveCursor = (e: MouseEvent) => {\r\n cursorX.set(e.clientX - 16);\r\n cursorY.set(e.clientY - 16);\r\n setIsVisible(true);\r\n };\r\n\r\n const hideCursor = () => {\r\n setIsVisible(false);\r\n };\r\n\r\n window.addEventListener(\"mousemove\", moveCursor);\r\n window.addEventListener(\"mouseleave\", hideCursor);\r\n\r\n return () => {\r\n window.removeEventListener(\"mousemove\", moveCursor);\r\n window.removeEventListener(\"mouseleave\", hideCursor);\r\n };\r\n }, [cursorX, cursorY]);\r\n\r\n return (\r\n <motion.div\r\n className={cn(\r\n \"pointer-events-none fixed left-0 top-0 z-50 h-8 w-8 rounded-full bg-zinc-400 mix-blend-difference\",\r\n isVisible ? \"opacity-100\" : \"opacity-0\",\r\n className\r\n )}\r\n style={{\r\n x: cursorXSpring,\r\n y: cursorYSpring,\r\n }}\r\n transition={{\r\n type: \"spring\",\r\n stiffness: 500,\r\n damping: 28,\r\n }}\r\n />\r\n );\r\n}\r\n\r\nexport default SmoothCursor;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var framerMotion=require('framer-motion'),jsxRuntime=require('react/jsx-runtime');function s(...e){return e.filter(Boolean).join(" ")}function u({icon:e,label:t,href:n,onClick:i,className:r,variant:a="default"}){let c={default:"bg-zinc-900 dark:bg-zinc-100 text-white dark:text-zinc-900 hover:bg-zinc-800 dark:hover:bg-zinc-200",outline:"border border-zinc-300 dark:border-zinc-700 hover:bg-zinc-100 dark:hover:bg-zinc-800",ghost:"hover:bg-zinc-100 dark:hover:bg-zinc-800"},l=n?"a":"button";return jsxRuntime.jsx(framerMotion.motion.div,{whileHover:{scale:1.05},whileTap:{scale:.95},children:jsxRuntime.jsxs(l,{href:n,onClick:i,className:s("inline-flex items-center gap-2 px-4 py-2 rounded-lg font-medium transition-colors",c[a],r),target:n?"_blank":void 0,rel:n?"noopener noreferrer":void 0,children:[e,jsxRuntime.jsx("span",{children:t})]})})}var b=u;exports.SocialButton=u;exports.default=b;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/social-button/index.tsx"],"names":["cn","classes","SocialButton","icon","label","href","onClick","className","variant","variants","Component","jsx","motion","jsxs","social_button_default"],"mappings":"wJAIA,SAASA,CAAAA,CAAAA,GAAMC,EAAyC,CACtD,OAAOA,CAAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CACzC,CAWO,SAASC,CAAAA,CAAa,CAC3B,KAAAC,CAAAA,CACA,KAAA,CAAAC,EACA,IAAA,CAAAC,CAAAA,CACA,QAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CAAU,SACZ,EAAsB,CACpB,IAAMC,CAAAA,CAAW,CACf,OAAA,CAAS,qGAAA,CACT,QAAS,sFAAA,CACT,KAAA,CAAO,0CACT,CAAA,CAEMC,CAAAA,CAAYL,CAAAA,CAAO,IAAM,QAAA,CAE/B,OACEM,eAACC,mBAAAA,CAAO,GAAA,CAAP,CAAW,UAAA,CAAY,CAAE,KAAA,CAAO,IAAK,CAAA,CAAG,QAAA,CAAU,CAAE,KAAA,CAAO,GAAK,CAAA,CAC/D,QAAA,CAAAC,eAAAA,CAACH,CAAAA,CAAA,CACC,IAAA,CAAML,CAAAA,CACN,OAAA,CAASC,CAAAA,CACT,SAAA,CAAWN,CAAAA,CACT,oFACAS,CAAAA,CAASD,CAAO,EAChBD,CACF,CAAA,CACA,OAAQF,CAAAA,CAAO,QAAA,CAAW,MAAA,CAC1B,GAAA,CAAKA,CAAAA,CAAO,qBAAA,CAAwB,OAEnC,QAAA,CAAA,CAAAF,CAAAA,CACDQ,cAAAA,CAAC,MAAA,CAAA,CAAM,QAAA,CAAAP,CAAAA,CAAM,GACf,CAAA,CACF,CAEJ,CAEA,IAAOU,CAAAA,CAAQZ","file":"index.js","sourcesContent":["\"use client\";\r\n\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 SocialButtonProps {\r\n icon: React.ReactNode;\r\n label: string;\r\n href?: string;\r\n onClick?: () => void;\r\n className?: string;\r\n variant?: \"default\" | \"outline\" | \"ghost\";\r\n}\r\n\r\nexport function SocialButton({\r\n icon,\r\n label,\r\n href,\r\n onClick,\r\n className,\r\n variant = \"default\",\r\n}: SocialButtonProps) {\r\n const variants = {\r\n default: \"bg-zinc-900 dark:bg-zinc-100 text-white dark:text-zinc-900 hover:bg-zinc-800 dark:hover:bg-zinc-200\",\r\n outline: \"border border-zinc-300 dark:border-zinc-700 hover:bg-zinc-100 dark:hover:bg-zinc-800\",\r\n ghost: \"hover:bg-zinc-100 dark:hover:bg-zinc-800\",\r\n };\r\n\r\n const Component = href ? \"a\" : \"button\";\r\n\r\n return (\r\n <motion.div whileHover={{ scale: 1.05 }} whileTap={{ scale: 0.95 }}>\r\n <Component\r\n href={href}\r\n onClick={onClick}\r\n className={cn(\r\n \"inline-flex items-center gap-2 px-4 py-2 rounded-lg font-medium transition-colors\",\r\n variants[variant],\r\n className\r\n )}\r\n target={href ? \"_blank\" : undefined}\r\n rel={href ? \"noopener noreferrer\" : undefined}\r\n >\r\n {icon}\r\n <span>{label}</span>\r\n </Component>\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport default SocialButton;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {motion}from'framer-motion';import {jsx,jsxs}from'react/jsx-runtime';function s(...e){return e.filter(Boolean).join(" ")}function u({icon:e,label:t,href:n,onClick:i,className:r,variant:a="default"}){let c={default:"bg-zinc-900 dark:bg-zinc-100 text-white dark:text-zinc-900 hover:bg-zinc-800 dark:hover:bg-zinc-200",outline:"border border-zinc-300 dark:border-zinc-700 hover:bg-zinc-100 dark:hover:bg-zinc-800",ghost:"hover:bg-zinc-100 dark:hover:bg-zinc-800"},l=n?"a":"button";return jsx(motion.div,{whileHover:{scale:1.05},whileTap:{scale:.95},children:jsxs(l,{href:n,onClick:i,className:s("inline-flex items-center gap-2 px-4 py-2 rounded-lg font-medium transition-colors",c[a],r),target:n?"_blank":void 0,rel:n?"noopener noreferrer":void 0,children:[e,jsx("span",{children:t})]})})}var b=u;export{u as SocialButton,b as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|