bynana-ui 1.4.0 → 1.6.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/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/crosshair/index.js +2 -0
- package/dist/crosshair/index.js.map +1 -0
- package/dist/crosshair/index.mjs +2 -0
- package/dist/crosshair/index.mjs.map +1 -0
- package/dist/decay-card/index.js +3 -0
- package/dist/decay-card/index.js.map +1 -0
- package/dist/decay-card/index.mjs +3 -0
- package/dist/decay-card/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/flowing-menu/index.js +3 -0
- package/dist/flowing-menu/index.js.map +1 -0
- package/dist/flowing-menu/index.mjs +3 -0
- package/dist/flowing-menu/index.mjs.map +1 -0
- package/dist/gooey-nav/index.js +2 -0
- package/dist/gooey-nav/index.js.map +1 -0
- package/dist/gooey-nav/index.mjs +2 -0
- package/dist/gooey-nav/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-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-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 +14 -11
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +14 -11
- package/dist/index.mjs.map +1 -1
- package/dist/liquid-glass-card/index.js +2 -0
- package/dist/liquid-glass-card/index.js.map +1 -0
- package/dist/liquid-glass-card/index.mjs +2 -0
- package/dist/liquid-glass-card/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/pill-nav/index.js +2 -0
- package/dist/pill-nav/index.js.map +1 -0
- package/dist/pill-nav/index.mjs +2 -0
- package/dist/pill-nav/index.mjs.map +1 -0
- package/dist/scroll-text/index.js +2 -0
- package/dist/scroll-text/index.js.map +1 -0
- package/dist/scroll-text/index.mjs +2 -0
- package/dist/scroll-text/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-drawer/index.js +2 -0
- package/dist/smooth-drawer/index.js.map +1 -0
- package/dist/smooth-drawer/index.mjs +2 -0
- package/dist/smooth-drawer/index.mjs.map +1 -0
- package/dist/smooth-tab/index.js +2 -0
- package/dist/smooth-tab/index.js.map +1 -0
- package/dist/smooth-tab/index.mjs +2 -0
- package/dist/smooth-tab/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/target-cursor/index.js +2 -0
- package/dist/target-cursor/index.js.map +1 -0
- package/dist/target-cursor/index.mjs +2 -0
- package/dist/target-cursor/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/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 +29 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var b=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var b__default=/*#__PURE__*/_interopDefault(b);function s(...t){return tailwindMerge.twMerge(clsx.clsx(t))}var u="shadow-[0_0_6px_rgba(0,0,0,0.03),0_2px_6px_rgba(0,0,0,0.08),inset_3px_3px_0.5px_-3px_rgba(0,0,0,0.9),inset_-3px_-3px_0.5px_-3px_rgba(0,0,0,0.85),inset_1px_1px_1px_-0.5px_rgba(0,0,0,0.6),inset_-1px_-1px_1px_-0.5px_rgba(0,0,0,0.6),inset_0_0_6px_6px_rgba(0,0,0,0.12),inset_0_0_2px_2px_rgba(0,0,0,0.06),0_0_12px_rgba(255,255,255,0.15)] dark:shadow-[0_0_8px_rgba(0,0,0,0.03),0_2px_6px_rgba(0,0,0,0.08),inset_3px_3px_0.5px_-3.5px_rgba(255,255,255,0.09),inset_-3px_-3px_0.5px_-3.5px_rgba(255,255,255,0.85),inset_1px_1px_1px_-0.5px_rgba(255,255,255,0.6),inset_-1px_-1px_1px_-0.5px_rgba(255,255,255,0.6),inset_0_0_6px_6px_rgba(255,255,255,0.12),inset_0_0_2px_2px_rgba(255,255,255,0.06),0_0_12px_rgba(0,0,0,0.15)]",o=b__default.default.memo(({id:t,scale:r=30})=>jsxRuntime.jsxs("svg",{className:"hidden",children:[jsxRuntime.jsx("title",{children:"Glass Effect Filter"}),jsxRuntime.jsx("defs",{children:jsxRuntime.jsxs("filter",{colorInterpolationFilters:"sRGB",height:"200%",id:t,width:"200%",x:"-50%",y:"-50%",children:[jsxRuntime.jsx("feTurbulence",{baseFrequency:"0.05 0.05",numOctaves:"1",result:"turbulence",seed:"1",type:"fractalNoise"}),jsxRuntime.jsx("feGaussianBlur",{in:"turbulence",result:"blurredNoise",stdDeviation:"2"}),jsxRuntime.jsx("feDisplacementMap",{in:"SourceGraphic",in2:"blurredNoise",result:"displaced",scale:r,xChannelSelector:"R",yChannelSelector:"B"}),jsxRuntime.jsx("feGaussianBlur",{in:"displaced",result:"finalBlur",stdDeviation:"4"}),jsxRuntime.jsx("feComposite",{in:"finalBlur",in2:"finalBlur",operator:"over"})]})})]}));o.displayName="GlassFilter";function f({className:t,glassSize:r="default",glassEffect:n=true,children:l,...i}){let p=b.useId();return jsxRuntime.jsxs("div",{className:s("group relative overflow-hidden rounded-lg border border-zinc-200 dark:border-zinc-800","bg-white/20 dark:bg-zinc-900/20 backdrop-blur-[2px]","transition-all duration-300",{sm:"p-4",default:"p-6",lg:"p-8"}[r],t),...i,children:[jsxRuntime.jsx("div",{className:s("pointer-events-none absolute inset-0 rounded-lg transition-all",u)}),n&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{className:"-z-10 pointer-events-none absolute inset-0 overflow-hidden rounded-lg",style:{backdropFilter:`url("#${p}")`}}),jsxRuntime.jsx(o,{id:p,scale:30})]}),jsxRuntime.jsx("div",{className:"relative z-10",children:l}),jsxRuntime.jsx("div",{className:"pointer-events-none absolute inset-0 z-20 rounded-lg bg-gradient-to-r from-transparent via-black/5 to-transparent opacity-0 transition-opacity duration-200 group-hover:opacity-100 dark:via-white/5"})]})}function G({className:t,variant:r="default",children:n,...l}){let i=b.useId();return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("button",{className:s("relative px-4 py-2 rounded-full font-medium transition-transform duration-300 hover:scale-105",r==="default"&&"bg-zinc-900 dark:bg-white text-white dark:text-zinc-900",r==="ghost"&&"bg-transparent text-zinc-700 dark:text-zinc-300 hover:bg-zinc-200/80 dark:hover:bg-zinc-800/80",t),...l,children:[jsxRuntime.jsx("div",{className:s("pointer-events-none absolute inset-0 rounded-full transition-all",u)}),jsxRuntime.jsx("div",{className:"-z-10 pointer-events-none absolute inset-0 isolate overflow-hidden rounded-full",style:{backdropFilter:`url("#${i}")`}}),jsxRuntime.jsx("span",{className:"relative z-10",children:n})]}),jsxRuntime.jsx(o,{id:i,scale:70})]})}var k=f;exports.LiquidButton=G;exports.LiquidGlassCard=f;exports.default=k;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/liquid-glass-card/index.tsx"],"names":["cn","inputs","twMerge","clsx","GLASS_SHADOW","GlassFilter","React","id","scale","jsxs","jsx","LiquidGlassCard","className","glassSize","glassEffect","children","props","filterId","useId","Fragment","LiquidButton","variant","liquid_glass_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 React, { useId } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\nconst GLASS_SHADOW =\r\n \"shadow-[0_0_6px_rgba(0,0,0,0.03),0_2px_6px_rgba(0,0,0,0.08),inset_3px_3px_0.5px_-3px_rgba(0,0,0,0.9),inset_-3px_-3px_0.5px_-3px_rgba(0,0,0,0.85),inset_1px_1px_1px_-0.5px_rgba(0,0,0,0.6),inset_-1px_-1px_1px_-0.5px_rgba(0,0,0,0.6),inset_0_0_6px_6px_rgba(0,0,0,0.12),inset_0_0_2px_2px_rgba(0,0,0,0.06),0_0_12px_rgba(255,255,255,0.15)] dark:shadow-[0_0_8px_rgba(0,0,0,0.03),0_2px_6px_rgba(0,0,0,0.08),inset_3px_3px_0.5px_-3.5px_rgba(255,255,255,0.09),inset_-3px_-3px_0.5px_-3.5px_rgba(255,255,255,0.85),inset_1px_1px_1px_-0.5px_rgba(255,255,255,0.6),inset_-1px_-1px_1px_-0.5px_rgba(255,255,255,0.6),inset_0_0_6px_6px_rgba(255,255,255,0.12),inset_0_0_2px_2px_rgba(255,255,255,0.06),0_0_12px_rgba(0,0,0,0.15)]\";\r\n\r\ninterface GlassFilterProps {\r\n id: string;\r\n scale?: number;\r\n}\r\n\r\nconst GlassFilter = React.memo(({ id, scale = 30 }: GlassFilterProps) => (\r\n <svg className=\"hidden\">\r\n <title>Glass Effect Filter</title>\r\n <defs>\r\n <filter\r\n colorInterpolationFilters=\"sRGB\"\r\n height=\"200%\"\r\n id={id}\r\n width=\"200%\"\r\n x=\"-50%\"\r\n y=\"-50%\"\r\n >\r\n <feTurbulence\r\n baseFrequency=\"0.05 0.05\"\r\n numOctaves=\"1\"\r\n result=\"turbulence\"\r\n seed=\"1\"\r\n type=\"fractalNoise\"\r\n />\r\n <feGaussianBlur in=\"turbulence\" result=\"blurredNoise\" stdDeviation=\"2\" />\r\n <feDisplacementMap\r\n in=\"SourceGraphic\"\r\n in2=\"blurredNoise\"\r\n result=\"displaced\"\r\n scale={scale}\r\n xChannelSelector=\"R\"\r\n yChannelSelector=\"B\"\r\n />\r\n <feGaussianBlur in=\"displaced\" result=\"finalBlur\" stdDeviation=\"4\" />\r\n <feComposite in=\"finalBlur\" in2=\"finalBlur\" operator=\"over\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n));\r\nGlassFilter.displayName = \"GlassFilter\";\r\n\r\ninterface LiquidGlassCardProps extends React.HTMLAttributes<HTMLDivElement> {\r\n glassSize?: \"sm\" | \"default\" | \"lg\";\r\n glassEffect?: boolean;\r\n}\r\n\r\nexport function LiquidGlassCard({\r\n className,\r\n glassSize = \"default\",\r\n glassEffect = true,\r\n children,\r\n ...props\r\n}: LiquidGlassCardProps) {\r\n const filterId = useId();\r\n\r\n const sizeClasses = {\r\n sm: \"p-4\",\r\n default: \"p-6\",\r\n lg: \"p-8\",\r\n };\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"group relative overflow-hidden rounded-lg border border-zinc-200 dark:border-zinc-800\",\r\n \"bg-white/20 dark:bg-zinc-900/20 backdrop-blur-[2px]\",\r\n \"transition-all duration-300\",\r\n sizeClasses[glassSize],\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div\r\n className={cn(\r\n \"pointer-events-none absolute inset-0 rounded-lg transition-all\",\r\n GLASS_SHADOW\r\n )}\r\n />\r\n\r\n {glassEffect && (\r\n <>\r\n <div\r\n className=\"-z-10 pointer-events-none absolute inset-0 overflow-hidden rounded-lg\"\r\n style={{ backdropFilter: `url(\"#${filterId}\")` }}\r\n />\r\n <GlassFilter id={filterId} scale={30} />\r\n </>\r\n )}\r\n\r\n <div className=\"relative z-10\">{children}</div>\r\n\r\n <div className=\"pointer-events-none absolute inset-0 z-20 rounded-lg bg-gradient-to-r from-transparent via-black/5 to-transparent opacity-0 transition-opacity duration-200 group-hover:opacity-100 dark:via-white/5\" />\r\n </div>\r\n );\r\n}\r\n\r\ninterface LiquidButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n variant?: \"default\" | \"ghost\";\r\n}\r\n\r\nexport function LiquidButton({\r\n className,\r\n variant = \"default\",\r\n children,\r\n ...props\r\n}: LiquidButtonProps) {\r\n const filterId = useId();\r\n\r\n return (\r\n <>\r\n <button\r\n className={cn(\r\n \"relative px-4 py-2 rounded-full font-medium transition-transform duration-300 hover:scale-105\",\r\n variant === \"default\" &&\r\n \"bg-zinc-900 dark:bg-white text-white dark:text-zinc-900\",\r\n variant === \"ghost\" &&\r\n \"bg-transparent text-zinc-700 dark:text-zinc-300 hover:bg-zinc-200/80 dark:hover:bg-zinc-800/80\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div\r\n className={cn(\r\n \"pointer-events-none absolute inset-0 rounded-full transition-all\",\r\n GLASS_SHADOW\r\n )}\r\n />\r\n <div\r\n className=\"-z-10 pointer-events-none absolute inset-0 isolate overflow-hidden rounded-full\"\r\n style={{ backdropFilter: `url(\"#${filterId}\")` }}\r\n />\r\n <span className=\"relative z-10\">{children}</span>\r\n </button>\r\n <GlassFilter id={filterId} scale={70} />\r\n </>\r\n );\r\n}\r\n\r\nexport default LiquidGlassCard;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import b,{useId}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx,Fragment}from'react/jsx-runtime';function s(...t){return twMerge(clsx(t))}var u="shadow-[0_0_6px_rgba(0,0,0,0.03),0_2px_6px_rgba(0,0,0,0.08),inset_3px_3px_0.5px_-3px_rgba(0,0,0,0.9),inset_-3px_-3px_0.5px_-3px_rgba(0,0,0,0.85),inset_1px_1px_1px_-0.5px_rgba(0,0,0,0.6),inset_-1px_-1px_1px_-0.5px_rgba(0,0,0,0.6),inset_0_0_6px_6px_rgba(0,0,0,0.12),inset_0_0_2px_2px_rgba(0,0,0,0.06),0_0_12px_rgba(255,255,255,0.15)] dark:shadow-[0_0_8px_rgba(0,0,0,0.03),0_2px_6px_rgba(0,0,0,0.08),inset_3px_3px_0.5px_-3.5px_rgba(255,255,255,0.09),inset_-3px_-3px_0.5px_-3.5px_rgba(255,255,255,0.85),inset_1px_1px_1px_-0.5px_rgba(255,255,255,0.6),inset_-1px_-1px_1px_-0.5px_rgba(255,255,255,0.6),inset_0_0_6px_6px_rgba(255,255,255,0.12),inset_0_0_2px_2px_rgba(255,255,255,0.06),0_0_12px_rgba(0,0,0,0.15)]",o=b.memo(({id:t,scale:r=30})=>jsxs("svg",{className:"hidden",children:[jsx("title",{children:"Glass Effect Filter"}),jsx("defs",{children:jsxs("filter",{colorInterpolationFilters:"sRGB",height:"200%",id:t,width:"200%",x:"-50%",y:"-50%",children:[jsx("feTurbulence",{baseFrequency:"0.05 0.05",numOctaves:"1",result:"turbulence",seed:"1",type:"fractalNoise"}),jsx("feGaussianBlur",{in:"turbulence",result:"blurredNoise",stdDeviation:"2"}),jsx("feDisplacementMap",{in:"SourceGraphic",in2:"blurredNoise",result:"displaced",scale:r,xChannelSelector:"R",yChannelSelector:"B"}),jsx("feGaussianBlur",{in:"displaced",result:"finalBlur",stdDeviation:"4"}),jsx("feComposite",{in:"finalBlur",in2:"finalBlur",operator:"over"})]})})]}));o.displayName="GlassFilter";function f({className:t,glassSize:r="default",glassEffect:n=true,children:l,...i}){let p=useId();return jsxs("div",{className:s("group relative overflow-hidden rounded-lg border border-zinc-200 dark:border-zinc-800","bg-white/20 dark:bg-zinc-900/20 backdrop-blur-[2px]","transition-all duration-300",{sm:"p-4",default:"p-6",lg:"p-8"}[r],t),...i,children:[jsx("div",{className:s("pointer-events-none absolute inset-0 rounded-lg transition-all",u)}),n&&jsxs(Fragment,{children:[jsx("div",{className:"-z-10 pointer-events-none absolute inset-0 overflow-hidden rounded-lg",style:{backdropFilter:`url("#${p}")`}}),jsx(o,{id:p,scale:30})]}),jsx("div",{className:"relative z-10",children:l}),jsx("div",{className:"pointer-events-none absolute inset-0 z-20 rounded-lg bg-gradient-to-r from-transparent via-black/5 to-transparent opacity-0 transition-opacity duration-200 group-hover:opacity-100 dark:via-white/5"})]})}function G({className:t,variant:r="default",children:n,...l}){let i=useId();return jsxs(Fragment,{children:[jsxs("button",{className:s("relative px-4 py-2 rounded-full font-medium transition-transform duration-300 hover:scale-105",r==="default"&&"bg-zinc-900 dark:bg-white text-white dark:text-zinc-900",r==="ghost"&&"bg-transparent text-zinc-700 dark:text-zinc-300 hover:bg-zinc-200/80 dark:hover:bg-zinc-800/80",t),...l,children:[jsx("div",{className:s("pointer-events-none absolute inset-0 rounded-full transition-all",u)}),jsx("div",{className:"-z-10 pointer-events-none absolute inset-0 isolate overflow-hidden rounded-full",style:{backdropFilter:`url("#${i}")`}}),jsx("span",{className:"relative z-10",children:n})]}),jsx(o,{id:i,scale:70})]})}var k=f;export{G as LiquidButton,f as LiquidGlassCard,k as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/liquid-glass-card/index.tsx"],"names":["cn","inputs","twMerge","clsx","GLASS_SHADOW","GlassFilter","React","id","scale","jsxs","jsx","LiquidGlassCard","className","glassSize","glassEffect","children","props","filterId","useId","Fragment","LiquidButton","variant","liquid_glass_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 React, { useId } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\nconst GLASS_SHADOW =\r\n \"shadow-[0_0_6px_rgba(0,0,0,0.03),0_2px_6px_rgba(0,0,0,0.08),inset_3px_3px_0.5px_-3px_rgba(0,0,0,0.9),inset_-3px_-3px_0.5px_-3px_rgba(0,0,0,0.85),inset_1px_1px_1px_-0.5px_rgba(0,0,0,0.6),inset_-1px_-1px_1px_-0.5px_rgba(0,0,0,0.6),inset_0_0_6px_6px_rgba(0,0,0,0.12),inset_0_0_2px_2px_rgba(0,0,0,0.06),0_0_12px_rgba(255,255,255,0.15)] dark:shadow-[0_0_8px_rgba(0,0,0,0.03),0_2px_6px_rgba(0,0,0,0.08),inset_3px_3px_0.5px_-3.5px_rgba(255,255,255,0.09),inset_-3px_-3px_0.5px_-3.5px_rgba(255,255,255,0.85),inset_1px_1px_1px_-0.5px_rgba(255,255,255,0.6),inset_-1px_-1px_1px_-0.5px_rgba(255,255,255,0.6),inset_0_0_6px_6px_rgba(255,255,255,0.12),inset_0_0_2px_2px_rgba(255,255,255,0.06),0_0_12px_rgba(0,0,0,0.15)]\";\r\n\r\ninterface GlassFilterProps {\r\n id: string;\r\n scale?: number;\r\n}\r\n\r\nconst GlassFilter = React.memo(({ id, scale = 30 }: GlassFilterProps) => (\r\n <svg className=\"hidden\">\r\n <title>Glass Effect Filter</title>\r\n <defs>\r\n <filter\r\n colorInterpolationFilters=\"sRGB\"\r\n height=\"200%\"\r\n id={id}\r\n width=\"200%\"\r\n x=\"-50%\"\r\n y=\"-50%\"\r\n >\r\n <feTurbulence\r\n baseFrequency=\"0.05 0.05\"\r\n numOctaves=\"1\"\r\n result=\"turbulence\"\r\n seed=\"1\"\r\n type=\"fractalNoise\"\r\n />\r\n <feGaussianBlur in=\"turbulence\" result=\"blurredNoise\" stdDeviation=\"2\" />\r\n <feDisplacementMap\r\n in=\"SourceGraphic\"\r\n in2=\"blurredNoise\"\r\n result=\"displaced\"\r\n scale={scale}\r\n xChannelSelector=\"R\"\r\n yChannelSelector=\"B\"\r\n />\r\n <feGaussianBlur in=\"displaced\" result=\"finalBlur\" stdDeviation=\"4\" />\r\n <feComposite in=\"finalBlur\" in2=\"finalBlur\" operator=\"over\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n));\r\nGlassFilter.displayName = \"GlassFilter\";\r\n\r\ninterface LiquidGlassCardProps extends React.HTMLAttributes<HTMLDivElement> {\r\n glassSize?: \"sm\" | \"default\" | \"lg\";\r\n glassEffect?: boolean;\r\n}\r\n\r\nexport function LiquidGlassCard({\r\n className,\r\n glassSize = \"default\",\r\n glassEffect = true,\r\n children,\r\n ...props\r\n}: LiquidGlassCardProps) {\r\n const filterId = useId();\r\n\r\n const sizeClasses = {\r\n sm: \"p-4\",\r\n default: \"p-6\",\r\n lg: \"p-8\",\r\n };\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"group relative overflow-hidden rounded-lg border border-zinc-200 dark:border-zinc-800\",\r\n \"bg-white/20 dark:bg-zinc-900/20 backdrop-blur-[2px]\",\r\n \"transition-all duration-300\",\r\n sizeClasses[glassSize],\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div\r\n className={cn(\r\n \"pointer-events-none absolute inset-0 rounded-lg transition-all\",\r\n GLASS_SHADOW\r\n )}\r\n />\r\n\r\n {glassEffect && (\r\n <>\r\n <div\r\n className=\"-z-10 pointer-events-none absolute inset-0 overflow-hidden rounded-lg\"\r\n style={{ backdropFilter: `url(\"#${filterId}\")` }}\r\n />\r\n <GlassFilter id={filterId} scale={30} />\r\n </>\r\n )}\r\n\r\n <div className=\"relative z-10\">{children}</div>\r\n\r\n <div className=\"pointer-events-none absolute inset-0 z-20 rounded-lg bg-gradient-to-r from-transparent via-black/5 to-transparent opacity-0 transition-opacity duration-200 group-hover:opacity-100 dark:via-white/5\" />\r\n </div>\r\n );\r\n}\r\n\r\ninterface LiquidButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n variant?: \"default\" | \"ghost\";\r\n}\r\n\r\nexport function LiquidButton({\r\n className,\r\n variant = \"default\",\r\n children,\r\n ...props\r\n}: LiquidButtonProps) {\r\n const filterId = useId();\r\n\r\n return (\r\n <>\r\n <button\r\n className={cn(\r\n \"relative px-4 py-2 rounded-full font-medium transition-transform duration-300 hover:scale-105\",\r\n variant === \"default\" &&\r\n \"bg-zinc-900 dark:bg-white text-white dark:text-zinc-900\",\r\n variant === \"ghost\" &&\r\n \"bg-transparent text-zinc-700 dark:text-zinc-300 hover:bg-zinc-200/80 dark:hover:bg-zinc-800/80\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div\r\n className={cn(\r\n \"pointer-events-none absolute inset-0 rounded-full transition-all\",\r\n GLASS_SHADOW\r\n )}\r\n />\r\n <div\r\n className=\"-z-10 pointer-events-none absolute inset-0 isolate overflow-hidden rounded-full\"\r\n style={{ backdropFilter: `url(\"#${filterId}\")` }}\r\n />\r\n <span className=\"relative z-10\">{children}</span>\r\n </button>\r\n <GlassFilter id={filterId} scale={70} />\r\n </>\r\n );\r\n}\r\n\r\nexport default LiquidGlassCard;\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'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function a(...o){return tailwindMerge.twMerge(clsx.clsx(o))}function M({logo:o,logoAlt:b="Logo",items:n,activeHref:f,className:x="",baseColor:r="#fff",pillColor:u="#000000",hoveredPillTextColor:h="#ffffff",pillTextColor:v,onMobileMenuClick:N}){let c=v??r,[t,d]=react.useState(false),[m,p]=react.useState(null),y=()=>{d(!t),N?.();};return jsxRuntime.jsxs("div",{className:a("relative",x),children:[jsxRuntime.jsxs("nav",{className:"flex items-center gap-4 px-4 py-2 rounded-full",style:{backgroundColor:u},"aria-label":"Primary",children:[o&&jsxRuntime.jsx("a",{href:n?.[0]?.href||"#","aria-label":"Home",className:"flex-shrink-0",children:jsxRuntime.jsx("img",{src:o,alt:b,className:"h-8 w-8 object-contain"})}),jsxRuntime.jsx("div",{className:"hidden md:flex items-center gap-1",children:jsxRuntime.jsx("ul",{className:"flex items-center gap-1",role:"menubar",children:n.map((l,s)=>jsxRuntime.jsx("li",{role:"none",children:jsxRuntime.jsx("a",{role:"menuitem",href:l.href,className:a("relative px-4 py-2 rounded-full text-sm font-medium transition-all duration-300",f===l.href&&"font-semibold"),style:{color:m===s?h:c,backgroundColor:m===s?r:"transparent"},"aria-label":l.ariaLabel||l.label,onMouseEnter:()=>p(s),onMouseLeave:()=>p(null),children:l.label})},l.href))})}),jsxRuntime.jsxs("button",{className:"md:hidden flex flex-col gap-1 p-2",onClick:y,"aria-label":"Toggle menu",children:[jsxRuntime.jsx("span",{className:a("w-5 h-0.5 transition-all duration-300",t&&"rotate-45 translate-y-1.5"),style:{backgroundColor:r}}),jsxRuntime.jsx("span",{className:a("w-5 h-0.5 transition-all duration-300",t&&"-rotate-45 -translate-y-1"),style:{backgroundColor:r}})]})]}),t&&jsxRuntime.jsx("div",{className:"md:hidden absolute top-full left-0 right-0 mt-2 rounded-xl p-4 shadow-lg",style:{backgroundColor:u},children:jsxRuntime.jsx("ul",{className:"flex flex-col gap-2",children:n.map(l=>jsxRuntime.jsx("li",{children:jsxRuntime.jsx("a",{href:l.href,className:a("block px-4 py-2 rounded-lg text-sm font-medium transition-colors",f===l.href&&"font-semibold"),style:{color:c},onClick:()=>d(false),children:l.label})},l.href))})})]})}var R=M;exports.PillNav=M;exports.default=R;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/pill-nav/index.tsx"],"names":["cn","inputs","twMerge","clsx","PillNav","logo","logoAlt","items","activeHref","className","baseColor","pillColor","hoveredPillTextColor","pillTextColor","onMobileMenuClick","resolvedPillTextColor","isMobileMenuOpen","setIsMobileMenuOpen","useState","hoveredIndex","setHoveredIndex","toggleMobileMenu","jsxs","jsx","item","i","pill_nav_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 React, { useEffect, useRef, useState } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\nexport type PillNavItem = {\r\n label: string;\r\n href: string;\r\n ariaLabel?: string;\r\n};\r\n\r\nexport interface PillNavProps {\r\n logo?: string;\r\n logoAlt?: string;\r\n items: PillNavItem[];\r\n activeHref?: string;\r\n className?: string;\r\n baseColor?: string;\r\n pillColor?: string;\r\n hoveredPillTextColor?: string;\r\n pillTextColor?: string;\r\n onMobileMenuClick?: () => void;\r\n}\r\n\r\nexport function PillNav({\r\n logo,\r\n logoAlt = \"Logo\",\r\n items,\r\n activeHref,\r\n className = \"\",\r\n baseColor = \"#fff\",\r\n pillColor = \"#000000\",\r\n hoveredPillTextColor = \"#ffffff\",\r\n pillTextColor,\r\n onMobileMenuClick,\r\n}: PillNavProps) {\r\n const resolvedPillTextColor = pillTextColor ?? baseColor;\r\n const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);\r\n const [hoveredIndex, setHoveredIndex] = useState<number | null>(null);\r\n\r\n const toggleMobileMenu = () => {\r\n setIsMobileMenuOpen(!isMobileMenuOpen);\r\n onMobileMenuClick?.();\r\n };\r\n\r\n return (\r\n <div className={cn(\"relative\", className)}>\r\n <nav\r\n className=\"flex items-center gap-4 px-4 py-2 rounded-full\"\r\n style={{ backgroundColor: pillColor }}\r\n aria-label=\"Primary\"\r\n >\r\n {logo && (\r\n <a href={items?.[0]?.href || \"#\"} aria-label=\"Home\" className=\"flex-shrink-0\">\r\n <img src={logo} alt={logoAlt} className=\"h-8 w-8 object-contain\" />\r\n </a>\r\n )}\r\n\r\n {/* Desktop Navigation */}\r\n <div className=\"hidden md:flex items-center gap-1\">\r\n <ul className=\"flex items-center gap-1\" role=\"menubar\">\r\n {items.map((item, i) => (\r\n <li key={item.href} role=\"none\">\r\n <a\r\n role=\"menuitem\"\r\n href={item.href}\r\n className={cn(\r\n \"relative px-4 py-2 rounded-full text-sm font-medium transition-all duration-300\",\r\n activeHref === item.href && \"font-semibold\"\r\n )}\r\n style={{\r\n color: hoveredIndex === i ? hoveredPillTextColor : resolvedPillTextColor,\r\n backgroundColor: hoveredIndex === i ? baseColor : \"transparent\",\r\n }}\r\n aria-label={item.ariaLabel || item.label}\r\n onMouseEnter={() => setHoveredIndex(i)}\r\n onMouseLeave={() => setHoveredIndex(null)}\r\n >\r\n {item.label}\r\n </a>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n\r\n {/* Mobile Menu Button */}\r\n <button\r\n className=\"md:hidden flex flex-col gap-1 p-2\"\r\n onClick={toggleMobileMenu}\r\n aria-label=\"Toggle menu\"\r\n >\r\n <span\r\n className={cn(\r\n \"w-5 h-0.5 transition-all duration-300\",\r\n isMobileMenuOpen && \"rotate-45 translate-y-1.5\"\r\n )}\r\n style={{ backgroundColor: baseColor }}\r\n />\r\n <span\r\n className={cn(\r\n \"w-5 h-0.5 transition-all duration-300\",\r\n isMobileMenuOpen && \"-rotate-45 -translate-y-1\"\r\n )}\r\n style={{ backgroundColor: baseColor }}\r\n />\r\n </button>\r\n </nav>\r\n\r\n {/* Mobile Menu */}\r\n {isMobileMenuOpen && (\r\n <div\r\n className=\"md:hidden absolute top-full left-0 right-0 mt-2 rounded-xl p-4 shadow-lg\"\r\n style={{ backgroundColor: pillColor }}\r\n >\r\n <ul className=\"flex flex-col gap-2\">\r\n {items.map((item) => (\r\n <li key={item.href}>\r\n <a\r\n href={item.href}\r\n className={cn(\r\n \"block px-4 py-2 rounded-lg text-sm font-medium transition-colors\",\r\n activeHref === item.href && \"font-semibold\"\r\n )}\r\n style={{ color: resolvedPillTextColor }}\r\n onClick={() => setIsMobileMenuOpen(false)}\r\n >\r\n {item.label}\r\n </a>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport default PillNav;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {useState}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function a(...o){return twMerge(clsx(o))}function M({logo:o,logoAlt:b="Logo",items:n,activeHref:f,className:x="",baseColor:r="#fff",pillColor:u="#000000",hoveredPillTextColor:h="#ffffff",pillTextColor:v,onMobileMenuClick:N}){let c=v??r,[t,d]=useState(false),[m,p]=useState(null),y=()=>{d(!t),N?.();};return jsxs("div",{className:a("relative",x),children:[jsxs("nav",{className:"flex items-center gap-4 px-4 py-2 rounded-full",style:{backgroundColor:u},"aria-label":"Primary",children:[o&&jsx("a",{href:n?.[0]?.href||"#","aria-label":"Home",className:"flex-shrink-0",children:jsx("img",{src:o,alt:b,className:"h-8 w-8 object-contain"})}),jsx("div",{className:"hidden md:flex items-center gap-1",children:jsx("ul",{className:"flex items-center gap-1",role:"menubar",children:n.map((l,s)=>jsx("li",{role:"none",children:jsx("a",{role:"menuitem",href:l.href,className:a("relative px-4 py-2 rounded-full text-sm font-medium transition-all duration-300",f===l.href&&"font-semibold"),style:{color:m===s?h:c,backgroundColor:m===s?r:"transparent"},"aria-label":l.ariaLabel||l.label,onMouseEnter:()=>p(s),onMouseLeave:()=>p(null),children:l.label})},l.href))})}),jsxs("button",{className:"md:hidden flex flex-col gap-1 p-2",onClick:y,"aria-label":"Toggle menu",children:[jsx("span",{className:a("w-5 h-0.5 transition-all duration-300",t&&"rotate-45 translate-y-1.5"),style:{backgroundColor:r}}),jsx("span",{className:a("w-5 h-0.5 transition-all duration-300",t&&"-rotate-45 -translate-y-1"),style:{backgroundColor:r}})]})]}),t&&jsx("div",{className:"md:hidden absolute top-full left-0 right-0 mt-2 rounded-xl p-4 shadow-lg",style:{backgroundColor:u},children:jsx("ul",{className:"flex flex-col gap-2",children:n.map(l=>jsx("li",{children:jsx("a",{href:l.href,className:a("block px-4 py-2 rounded-lg text-sm font-medium transition-colors",f===l.href&&"font-semibold"),style:{color:c},onClick:()=>d(false),children:l.label})},l.href))})})]})}var R=M;export{M as PillNav,R as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/pill-nav/index.tsx"],"names":["cn","inputs","twMerge","clsx","PillNav","logo","logoAlt","items","activeHref","className","baseColor","pillColor","hoveredPillTextColor","pillTextColor","onMobileMenuClick","resolvedPillTextColor","isMobileMenuOpen","setIsMobileMenuOpen","useState","hoveredIndex","setHoveredIndex","toggleMobileMenu","jsxs","jsx","item","i","pill_nav_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 React, { useEffect, useRef, useState } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\nexport type PillNavItem = {\r\n label: string;\r\n href: string;\r\n ariaLabel?: string;\r\n};\r\n\r\nexport interface PillNavProps {\r\n logo?: string;\r\n logoAlt?: string;\r\n items: PillNavItem[];\r\n activeHref?: string;\r\n className?: string;\r\n baseColor?: string;\r\n pillColor?: string;\r\n hoveredPillTextColor?: string;\r\n pillTextColor?: string;\r\n onMobileMenuClick?: () => void;\r\n}\r\n\r\nexport function PillNav({\r\n logo,\r\n logoAlt = \"Logo\",\r\n items,\r\n activeHref,\r\n className = \"\",\r\n baseColor = \"#fff\",\r\n pillColor = \"#000000\",\r\n hoveredPillTextColor = \"#ffffff\",\r\n pillTextColor,\r\n onMobileMenuClick,\r\n}: PillNavProps) {\r\n const resolvedPillTextColor = pillTextColor ?? baseColor;\r\n const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);\r\n const [hoveredIndex, setHoveredIndex] = useState<number | null>(null);\r\n\r\n const toggleMobileMenu = () => {\r\n setIsMobileMenuOpen(!isMobileMenuOpen);\r\n onMobileMenuClick?.();\r\n };\r\n\r\n return (\r\n <div className={cn(\"relative\", className)}>\r\n <nav\r\n className=\"flex items-center gap-4 px-4 py-2 rounded-full\"\r\n style={{ backgroundColor: pillColor }}\r\n aria-label=\"Primary\"\r\n >\r\n {logo && (\r\n <a href={items?.[0]?.href || \"#\"} aria-label=\"Home\" className=\"flex-shrink-0\">\r\n <img src={logo} alt={logoAlt} className=\"h-8 w-8 object-contain\" />\r\n </a>\r\n )}\r\n\r\n {/* Desktop Navigation */}\r\n <div className=\"hidden md:flex items-center gap-1\">\r\n <ul className=\"flex items-center gap-1\" role=\"menubar\">\r\n {items.map((item, i) => (\r\n <li key={item.href} role=\"none\">\r\n <a\r\n role=\"menuitem\"\r\n href={item.href}\r\n className={cn(\r\n \"relative px-4 py-2 rounded-full text-sm font-medium transition-all duration-300\",\r\n activeHref === item.href && \"font-semibold\"\r\n )}\r\n style={{\r\n color: hoveredIndex === i ? hoveredPillTextColor : resolvedPillTextColor,\r\n backgroundColor: hoveredIndex === i ? baseColor : \"transparent\",\r\n }}\r\n aria-label={item.ariaLabel || item.label}\r\n onMouseEnter={() => setHoveredIndex(i)}\r\n onMouseLeave={() => setHoveredIndex(null)}\r\n >\r\n {item.label}\r\n </a>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n\r\n {/* Mobile Menu Button */}\r\n <button\r\n className=\"md:hidden flex flex-col gap-1 p-2\"\r\n onClick={toggleMobileMenu}\r\n aria-label=\"Toggle menu\"\r\n >\r\n <span\r\n className={cn(\r\n \"w-5 h-0.5 transition-all duration-300\",\r\n isMobileMenuOpen && \"rotate-45 translate-y-1.5\"\r\n )}\r\n style={{ backgroundColor: baseColor }}\r\n />\r\n <span\r\n className={cn(\r\n \"w-5 h-0.5 transition-all duration-300\",\r\n isMobileMenuOpen && \"-rotate-45 -translate-y-1\"\r\n )}\r\n style={{ backgroundColor: baseColor }}\r\n />\r\n </button>\r\n </nav>\r\n\r\n {/* Mobile Menu */}\r\n {isMobileMenuOpen && (\r\n <div\r\n className=\"md:hidden absolute top-full left-0 right-0 mt-2 rounded-xl p-4 shadow-lg\"\r\n style={{ backgroundColor: pillColor }}\r\n >\r\n <ul className=\"flex flex-col gap-2\">\r\n {items.map((item) => (\r\n <li key={item.href}>\r\n <a\r\n href={item.href}\r\n className={cn(\r\n \"block px-4 py-2 rounded-lg text-sm font-medium transition-colors\",\r\n activeHref === item.href && \"font-semibold\"\r\n )}\r\n style={{ color: resolvedPillTextColor }}\r\n onClick={() => setIsMobileMenuOpen(false)}\r\n >\r\n {item.label}\r\n </a>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport default PillNav;\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 c(...n){return tailwindMerge.twMerge(clsx.clsx(n))}function h({texts:n=["TailwindCSS","React","Next.js","TypeScript","Vercel","Motion"],className:f}){let[x,d]=react.useState(0),l=react.useRef(null),i=react.useRef([]);return react.useEffect(()=>{if(!l.current)return;let t=new IntersectionObserver(e=>{e.forEach(o=>{if(o.isIntersecting){let s=i.current.findIndex(p=>p===o.target);s!==-1&&d(s);}});},{threshold:.7,root:l.current,rootMargin:"-45% 0px -45% 0px"});return i.current.forEach(e=>{e&&t.observe(e);}),()=>t.disconnect()},[n]),jsxRuntime.jsx("div",{className:c("w-full max-w-3xl mx-auto",f),children:jsxRuntime.jsxs("div",{ref:l,className:c("h-[300px] overflow-y-auto","relative flex flex-col items-center","[&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] [scrollbar-width:none]"),children:[jsxRuntime.jsx("div",{className:"h-[150px]"}),jsxRuntime.jsx("div",{className:"flex flex-col items-center w-full",children:n.map((t,e)=>jsxRuntime.jsx("div",{ref:o=>{i.current[e]=o;},className:c("text-5xl font-bold py-8 px-4 whitespace-nowrap","transition-all duration-300",x===e?"text-zinc-900 dark:text-white scale-100 opacity-100":"text-zinc-400/50 dark:text-zinc-600 scale-95 opacity-50"),children:t},`${t}-${e}`))}),jsxRuntime.jsx("div",{className:"h-[150px]"})]})})}var I=h;exports.ScrollText=h;exports.default=I;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/scroll-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","ScrollText","texts","className","activeIndex","setActiveIndex","useState","containerRef","useRef","itemsRef","useEffect","observer","entries","entry","index","item","jsx","jsxs","text","el","scroll_text_default"],"mappings":"sMAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,CAAAA,CAAW,CACzB,KAAA,CAAAC,CAAAA,CAAQ,CACN,cACA,OAAA,CACA,SAAA,CACA,YAAA,CACA,QAAA,CACA,QACF,CAAA,CACA,UAAAC,CACF,CAAA,CAAoB,CAClB,GAAM,CAACC,CAAAA,CAAaC,CAAc,CAAA,CAAIC,cAAAA,CAAS,CAAC,CAAA,CAC1CC,CAAAA,CAAeC,aAAuB,IAAI,CAAA,CAC1CC,CAAAA,CAAWD,YAAAA,CAAkC,EAAE,EAErD,OAAAE,eAAAA,CAAU,IAAM,CACd,GAAI,CAACH,EAAa,OAAA,CAAS,OAE3B,IAAMI,CAAAA,CAAW,IAAI,oBAAA,CAClBC,GAAY,CACXA,CAAAA,CAAQ,QAASC,CAAAA,EAAU,CACzB,GAAIA,CAAAA,CAAM,cAAA,CAAgB,CACxB,IAAMC,CAAAA,CAAQL,CAAAA,CAAS,QAAQ,SAAA,CAC5BM,CAAAA,EAASA,CAAAA,GAASF,CAAAA,CAAM,MAC3B,CAAA,CACIC,IAAU,EAAA,EACZT,CAAAA,CAAeS,CAAK,EAExB,CACF,CAAC,EACH,CAAA,CACA,CACE,UAAW,EAAA,CACX,IAAA,CAAMP,EAAa,OAAA,CACnB,UAAA,CAAY,mBACd,CACF,CAAA,CAEA,OAAAE,EAAS,OAAA,CAAQ,OAAA,CAASM,CAAAA,EAAS,CAC7BA,CAAAA,EAAMJ,CAAAA,CAAS,QAAQI,CAAI,EACjC,CAAC,CAAA,CAEM,IAAMJ,CAAAA,CAAS,YACxB,CAAA,CAAG,CAACT,CAAK,CAAC,EAGRc,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWnB,CAAAA,CAAG,0BAAA,CAA4BM,CAAS,EACtD,QAAA,CAAAc,eAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKV,CAAAA,CACL,SAAA,CAAWV,EACT,2BAAA,CACA,qCAAA,CACA,gFACF,CAAA,CAEA,QAAA,CAAA,CAAAmB,cAAAA,CAAC,OAAI,SAAA,CAAU,WAAA,CAAY,EAC3BA,cAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,mCAAA,CACZ,QAAA,CAAAd,CAAAA,CAAM,GAAA,CAAI,CAACgB,CAAAA,CAAMJ,IAChBE,cAAAA,CAAC,KAAA,CAAA,CAEC,GAAA,CAAMG,CAAAA,EAAO,CACXV,CAAAA,CAAS,QAAQK,CAAK,CAAA,CAAIK,EAC5B,CAAA,CACA,SAAA,CAAWtB,CAAAA,CACT,iDACA,6BAAA,CACAO,CAAAA,GAAgBU,CAAAA,CACZ,qDAAA,CACA,yDACN,CAAA,CAEC,SAAAI,CAAAA,CAAAA,CAZI,CAAA,EAAGA,CAAI,CAAA,CAAA,EAAIJ,CAAK,CAAA,CAavB,CACD,CAAA,CACH,CAAA,CACAE,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CAAY,GAC7B,CAAA,CACF,CAEJ,CAEA,IAAOI,CAAAA,CAAQnB","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useRef, useState, useEffect } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface ScrollTextProps {\r\n texts?: string[];\r\n className?: string;\r\n}\r\n\r\nexport function ScrollText({\r\n texts = [\r\n \"TailwindCSS\",\r\n \"React\",\r\n \"Next.js\",\r\n \"TypeScript\",\r\n \"Vercel\",\r\n \"Motion\",\r\n ],\r\n className,\r\n}: ScrollTextProps) {\r\n const [activeIndex, setActiveIndex] = useState(0);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const itemsRef = useRef<(HTMLDivElement | null)[]>([]);\r\n\r\n useEffect(() => {\r\n if (!containerRef.current) return;\r\n\r\n const observer = new IntersectionObserver(\r\n (entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n const index = itemsRef.current.findIndex(\r\n (item) => item === entry.target\r\n );\r\n if (index !== -1) {\r\n setActiveIndex(index);\r\n }\r\n }\r\n });\r\n },\r\n {\r\n threshold: 0.7,\r\n root: containerRef.current,\r\n rootMargin: \"-45% 0px -45% 0px\",\r\n }\r\n );\r\n\r\n itemsRef.current.forEach((item) => {\r\n if (item) observer.observe(item);\r\n });\r\n\r\n return () => observer.disconnect();\r\n }, [texts]);\r\n\r\n return (\r\n <div className={cn(\"w-full max-w-3xl mx-auto\", className)}>\r\n <div\r\n ref={containerRef}\r\n className={cn(\r\n \"h-[300px] overflow-y-auto\",\r\n \"relative flex flex-col items-center\",\r\n \"[&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] [scrollbar-width:none]\"\r\n )}\r\n >\r\n <div className=\"h-[150px]\" />\r\n <div className=\"flex flex-col items-center w-full\">\r\n {texts.map((text, index) => (\r\n <div\r\n key={`${text}-${index}`}\r\n ref={(el) => {\r\n itemsRef.current[index] = el;\r\n }}\r\n className={cn(\r\n \"text-5xl font-bold py-8 px-4 whitespace-nowrap\",\r\n \"transition-all duration-300\",\r\n activeIndex === index\r\n ? \"text-zinc-900 dark:text-white scale-100 opacity-100\"\r\n : \"text-zinc-400/50 dark:text-zinc-600 scale-95 opacity-50\"\r\n )}\r\n >\r\n {text}\r\n </div>\r\n ))}\r\n </div>\r\n <div className=\"h-[150px]\" />\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default ScrollText;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {useState,useRef,useEffect}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx,jsxs}from'react/jsx-runtime';function c(...n){return twMerge(clsx(n))}function h({texts:n=["TailwindCSS","React","Next.js","TypeScript","Vercel","Motion"],className:f}){let[x,d]=useState(0),l=useRef(null),i=useRef([]);return useEffect(()=>{if(!l.current)return;let t=new IntersectionObserver(e=>{e.forEach(o=>{if(o.isIntersecting){let s=i.current.findIndex(p=>p===o.target);s!==-1&&d(s);}});},{threshold:.7,root:l.current,rootMargin:"-45% 0px -45% 0px"});return i.current.forEach(e=>{e&&t.observe(e);}),()=>t.disconnect()},[n]),jsx("div",{className:c("w-full max-w-3xl mx-auto",f),children:jsxs("div",{ref:l,className:c("h-[300px] overflow-y-auto","relative flex flex-col items-center","[&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] [scrollbar-width:none]"),children:[jsx("div",{className:"h-[150px]"}),jsx("div",{className:"flex flex-col items-center w-full",children:n.map((t,e)=>jsx("div",{ref:o=>{i.current[e]=o;},className:c("text-5xl font-bold py-8 px-4 whitespace-nowrap","transition-all duration-300",x===e?"text-zinc-900 dark:text-white scale-100 opacity-100":"text-zinc-400/50 dark:text-zinc-600 scale-95 opacity-50"),children:t},`${t}-${e}`))}),jsx("div",{className:"h-[150px]"})]})})}var I=h;export{h as ScrollText,I as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/scroll-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","ScrollText","texts","className","activeIndex","setActiveIndex","useState","containerRef","useRef","itemsRef","useEffect","observer","entries","entry","index","item","jsx","jsxs","text","el","scroll_text_default"],"mappings":"oJAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,CAAAA,CAAW,CACzB,KAAA,CAAAC,CAAAA,CAAQ,CACN,cACA,OAAA,CACA,SAAA,CACA,YAAA,CACA,QAAA,CACA,QACF,CAAA,CACA,UAAAC,CACF,CAAA,CAAoB,CAClB,GAAM,CAACC,CAAAA,CAAaC,CAAc,CAAA,CAAIC,QAAAA,CAAS,CAAC,CAAA,CAC1CC,CAAAA,CAAeC,OAAuB,IAAI,CAAA,CAC1CC,CAAAA,CAAWD,MAAAA,CAAkC,EAAE,EAErD,OAAAE,SAAAA,CAAU,IAAM,CACd,GAAI,CAACH,EAAa,OAAA,CAAS,OAE3B,IAAMI,CAAAA,CAAW,IAAI,oBAAA,CAClBC,GAAY,CACXA,CAAAA,CAAQ,QAASC,CAAAA,EAAU,CACzB,GAAIA,CAAAA,CAAM,cAAA,CAAgB,CACxB,IAAMC,CAAAA,CAAQL,CAAAA,CAAS,QAAQ,SAAA,CAC5BM,CAAAA,EAASA,CAAAA,GAASF,CAAAA,CAAM,MAC3B,CAAA,CACIC,IAAU,EAAA,EACZT,CAAAA,CAAeS,CAAK,EAExB,CACF,CAAC,EACH,CAAA,CACA,CACE,UAAW,EAAA,CACX,IAAA,CAAMP,EAAa,OAAA,CACnB,UAAA,CAAY,mBACd,CACF,CAAA,CAEA,OAAAE,EAAS,OAAA,CAAQ,OAAA,CAASM,CAAAA,EAAS,CAC7BA,CAAAA,EAAMJ,CAAAA,CAAS,QAAQI,CAAI,EACjC,CAAC,CAAA,CAEM,IAAMJ,CAAAA,CAAS,YACxB,CAAA,CAAG,CAACT,CAAK,CAAC,EAGRc,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWnB,CAAAA,CAAG,0BAAA,CAA4BM,CAAS,EACtD,QAAA,CAAAc,IAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKV,CAAAA,CACL,SAAA,CAAWV,EACT,2BAAA,CACA,qCAAA,CACA,gFACF,CAAA,CAEA,QAAA,CAAA,CAAAmB,GAAAA,CAAC,OAAI,SAAA,CAAU,WAAA,CAAY,EAC3BA,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,mCAAA,CACZ,QAAA,CAAAd,CAAAA,CAAM,GAAA,CAAI,CAACgB,CAAAA,CAAMJ,IAChBE,GAAAA,CAAC,KAAA,CAAA,CAEC,GAAA,CAAMG,CAAAA,EAAO,CACXV,CAAAA,CAAS,QAAQK,CAAK,CAAA,CAAIK,EAC5B,CAAA,CACA,SAAA,CAAWtB,CAAAA,CACT,iDACA,6BAAA,CACAO,CAAAA,GAAgBU,CAAAA,CACZ,qDAAA,CACA,yDACN,CAAA,CAEC,SAAAI,CAAAA,CAAAA,CAZI,CAAA,EAAGA,CAAI,CAAA,CAAA,EAAIJ,CAAK,CAAA,CAavB,CACD,CAAA,CACH,CAAA,CACAE,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,WAAA,CAAY,GAC7B,CAAA,CACF,CAEJ,CAEA,IAAOI,CAAAA,CAAQnB","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useRef, useState, useEffect } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface ScrollTextProps {\r\n texts?: string[];\r\n className?: string;\r\n}\r\n\r\nexport function ScrollText({\r\n texts = [\r\n \"TailwindCSS\",\r\n \"React\",\r\n \"Next.js\",\r\n \"TypeScript\",\r\n \"Vercel\",\r\n \"Motion\",\r\n ],\r\n className,\r\n}: ScrollTextProps) {\r\n const [activeIndex, setActiveIndex] = useState(0);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const itemsRef = useRef<(HTMLDivElement | null)[]>([]);\r\n\r\n useEffect(() => {\r\n if (!containerRef.current) return;\r\n\r\n const observer = new IntersectionObserver(\r\n (entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n const index = itemsRef.current.findIndex(\r\n (item) => item === entry.target\r\n );\r\n if (index !== -1) {\r\n setActiveIndex(index);\r\n }\r\n }\r\n });\r\n },\r\n {\r\n threshold: 0.7,\r\n root: containerRef.current,\r\n rootMargin: \"-45% 0px -45% 0px\",\r\n }\r\n );\r\n\r\n itemsRef.current.forEach((item) => {\r\n if (item) observer.observe(item);\r\n });\r\n\r\n return () => observer.disconnect();\r\n }, [texts]);\r\n\r\n return (\r\n <div className={cn(\"w-full max-w-3xl mx-auto\", className)}>\r\n <div\r\n ref={containerRef}\r\n className={cn(\r\n \"h-[300px] overflow-y-auto\",\r\n \"relative flex flex-col items-center\",\r\n \"[&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] [scrollbar-width:none]\"\r\n )}\r\n >\r\n <div className=\"h-[150px]\" />\r\n <div className=\"flex flex-col items-center w-full\">\r\n {texts.map((text, index) => (\r\n <div\r\n key={`${text}-${index}`}\r\n ref={(el) => {\r\n itemsRef.current[index] = el;\r\n }}\r\n className={cn(\r\n \"text-5xl font-bold py-8 px-4 whitespace-nowrap\",\r\n \"transition-all duration-300\",\r\n activeIndex === index\r\n ? \"text-zinc-900 dark:text-white scale-100 opacity-100\"\r\n : \"text-zinc-400/50 dark:text-zinc-600 scale-95 opacity-50\"\r\n )}\r\n >\r\n {text}\r\n </div>\r\n ))}\r\n </div>\r\n <div className=\"h-[150px]\" />\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default ScrollText;\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":"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","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'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function i(...r){return tailwindMerge.twMerge(clsx.clsx(r))}function b({trigger:r,title:s="Drawer Title",description:l,children:n,className:d,side:c="right"}){let[e,a]=react.useState(false);return react.useEffect(()=>(e?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow="";}),[e]),jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("div",{onClick:()=>a(true),className:"cursor-pointer",children:r||jsxRuntime.jsx("button",{className:"px-4 py-2 bg-zinc-900 dark:bg-white text-white dark:text-zinc-900 rounded-lg font-medium hover:opacity-90 transition-opacity",children:"Open Drawer"})}),e&&jsxRuntime.jsx("div",{className:"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm transition-opacity duration-300",onClick:()=>a(false)}),jsxRuntime.jsx("div",{"data-open":e,className:i("fixed z-50 bg-white dark:bg-zinc-900 shadow-xl transition-transform duration-300 ease-out",{left:"left-0 top-0 h-full w-80 -translate-x-full data-[open=true]:translate-x-0",right:"right-0 top-0 h-full w-80 translate-x-full data-[open=true]:translate-x-0",top:"top-0 left-0 w-full h-80 -translate-y-full data-[open=true]:translate-y-0",bottom:"bottom-0 left-0 w-full h-80 translate-y-full data-[open=true]:translate-y-0"}[c],d),children:jsxRuntime.jsxs("div",{className:"flex flex-col h-full",children:[jsxRuntime.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-zinc-200 dark:border-zinc-800",children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("h2",{className:"text-lg font-semibold text-zinc-900 dark:text-white",children:s}),l&&jsxRuntime.jsx("p",{className:"text-sm text-zinc-500 dark:text-zinc-400",children:l})]}),jsxRuntime.jsx("button",{onClick:()=>a(false),className:"p-2 rounded-lg hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors","aria-label":"Close drawer",children:jsxRuntime.jsx("svg",{className:"w-5 h-5 text-zinc-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),jsxRuntime.jsx("div",{className:"flex-1 overflow-auto p-4",children:n})]})})]})}var z=b;exports.SmoothDrawer=b;exports.default=z;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/smooth-drawer/index.tsx"],"names":["cn","inputs","twMerge","clsx","SmoothDrawer","trigger","title","description","children","className","side","isOpen","setIsOpen","useState","useEffect","jsxs","Fragment","jsx","smooth_drawer_default"],"mappings":"sMAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,sBAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCSO,SAASG,EAAa,CAC3B,OAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CAAQ,cAAA,CACR,YAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,IAAA,CAAAC,EAAO,OACT,CAAA,CAAsB,CACpB,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIC,cAAAA,CAAS,KAAK,CAAA,CAE1C,OAAAC,gBAAU,KACJH,CAAAA,CACF,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAW,SAE/B,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAW,EAAA,CAE1B,IAAM,CACX,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAW,GACjC,CAAA,CAAA,CACC,CAACA,CAAM,CAAC,CAAA,CAUTI,eAAAA,CAAAC,mBAAAA,CAAA,CAEE,UAAAC,cAAAA,CAAC,KAAA,CAAA,CAAI,OAAA,CAAS,IAAML,CAAAA,CAAU,IAAI,EAAG,SAAA,CAAU,gBAAA,CAC5C,QAAA,CAAAP,CAAAA,EACCY,cAAAA,CAAC,QAAA,CAAA,CAAO,UAAU,8HAAA,CAA+H,QAAA,CAAA,aAAA,CAEjJ,CAAA,CAEJ,CAAA,CAGCN,CAAAA,EACCM,cAAAA,CAAC,OACC,SAAA,CAAU,iFAAA,CACV,QAAS,IAAML,CAAAA,CAAU,KAAK,CAAA,CAChC,CAAA,CAIFK,cAAAA,CAAC,KAAA,CAAA,CACC,WAAA,CAAWN,CAAAA,CACX,UAAWX,CAAAA,CACT,2FAAA,CA9BW,CACjB,IAAA,CAAM,2EAAA,CACN,KAAA,CAAO,4EACP,GAAA,CAAK,2EAAA,CACL,MAAA,CAAQ,6EACV,CAAA,CA0BmBU,CAAI,EACfD,CACF,CAAA,CAEA,QAAA,CAAAM,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uBAEb,QAAA,CAAA,CAAAA,eAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qFAAA,CACb,QAAA,CAAA,CAAAA,gBAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAAE,cAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,qDAAA,CACX,SAAAX,CAAAA,CACH,CAAA,CACCC,CAAAA,EACCU,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,2CACV,QAAA,CAAAV,CAAAA,CACH,CAAA,CAAA,CAEJ,CAAA,CACAU,cAAAA,CAAC,QAAA,CAAA,CACC,QAAS,IAAML,CAAAA,CAAU,KAAK,CAAA,CAC9B,SAAA,CAAU,2EAAA,CACV,aAAW,cAAA,CAEX,QAAA,CAAAK,cAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,uBAAA,CACV,KAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,OAAA,CAAQ,WAAA,CAER,QAAA,CAAAA,eAAC,MAAA,CAAA,CACC,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,WAAA,CAAa,EACb,CAAA,CAAE,sBAAA,CACJ,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAGAA,eAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BAAA,CAA4B,QAAA,CAAAT,CAAAA,CAAS,CAAA,CAAA,CACtD,EACF,CAAA,CAAA,CACF,CAEJ,CAEA,IAAOU,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 React, { useState, useEffect } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface SmoothDrawerProps {\r\n trigger?: React.ReactNode;\r\n title?: string;\r\n description?: string;\r\n children?: React.ReactNode;\r\n className?: string;\r\n side?: \"left\" | \"right\" | \"top\" | \"bottom\";\r\n}\r\n\r\nexport function SmoothDrawer({\r\n trigger,\r\n title = \"Drawer Title\",\r\n description,\r\n children,\r\n className,\r\n side = \"right\",\r\n}: SmoothDrawerProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n document.body.style.overflow = \"hidden\";\r\n } else {\r\n document.body.style.overflow = \"\";\r\n }\r\n return () => {\r\n document.body.style.overflow = \"\";\r\n };\r\n }, [isOpen]);\r\n\r\n const sideStyles = {\r\n left: \"left-0 top-0 h-full w-80 -translate-x-full data-[open=true]:translate-x-0\",\r\n right: \"right-0 top-0 h-full w-80 translate-x-full data-[open=true]:translate-x-0\",\r\n top: \"top-0 left-0 w-full h-80 -translate-y-full data-[open=true]:translate-y-0\",\r\n bottom: \"bottom-0 left-0 w-full h-80 translate-y-full data-[open=true]:translate-y-0\",\r\n };\r\n\r\n return (\r\n <>\r\n {/* Trigger */}\r\n <div onClick={() => setIsOpen(true)} className=\"cursor-pointer\">\r\n {trigger || (\r\n <button className=\"px-4 py-2 bg-zinc-900 dark:bg-white text-white dark:text-zinc-900 rounded-lg font-medium hover:opacity-90 transition-opacity\">\r\n Open Drawer\r\n </button>\r\n )}\r\n </div>\r\n\r\n {/* Overlay */}\r\n {isOpen && (\r\n <div\r\n className=\"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm transition-opacity duration-300\"\r\n onClick={() => setIsOpen(false)}\r\n />\r\n )}\r\n\r\n {/* Drawer */}\r\n <div\r\n data-open={isOpen}\r\n className={cn(\r\n \"fixed z-50 bg-white dark:bg-zinc-900 shadow-xl transition-transform duration-300 ease-out\",\r\n sideStyles[side],\r\n className\r\n )}\r\n >\r\n <div className=\"flex flex-col h-full\">\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between p-4 border-b border-zinc-200 dark:border-zinc-800\">\r\n <div>\r\n <h2 className=\"text-lg font-semibold text-zinc-900 dark:text-white\">\r\n {title}\r\n </h2>\r\n {description && (\r\n <p className=\"text-sm text-zinc-500 dark:text-zinc-400\">\r\n {description}\r\n </p>\r\n )}\r\n </div>\r\n <button\r\n onClick={() => setIsOpen(false)}\r\n className=\"p-2 rounded-lg hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors\"\r\n aria-label=\"Close drawer\"\r\n >\r\n <svg\r\n className=\"w-5 h-5 text-zinc-500\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M6 18L18 6M6 6l12 12\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"flex-1 overflow-auto p-4\">{children}</div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n\r\nexport default SmoothDrawer;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {useState,useEffect}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,Fragment,jsx}from'react/jsx-runtime';function i(...r){return twMerge(clsx(r))}function b({trigger:r,title:s="Drawer Title",description:l,children:n,className:d,side:c="right"}){let[e,a]=useState(false);return useEffect(()=>(e?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow="";}),[e]),jsxs(Fragment,{children:[jsx("div",{onClick:()=>a(true),className:"cursor-pointer",children:r||jsx("button",{className:"px-4 py-2 bg-zinc-900 dark:bg-white text-white dark:text-zinc-900 rounded-lg font-medium hover:opacity-90 transition-opacity",children:"Open Drawer"})}),e&&jsx("div",{className:"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm transition-opacity duration-300",onClick:()=>a(false)}),jsx("div",{"data-open":e,className:i("fixed z-50 bg-white dark:bg-zinc-900 shadow-xl transition-transform duration-300 ease-out",{left:"left-0 top-0 h-full w-80 -translate-x-full data-[open=true]:translate-x-0",right:"right-0 top-0 h-full w-80 translate-x-full data-[open=true]:translate-x-0",top:"top-0 left-0 w-full h-80 -translate-y-full data-[open=true]:translate-y-0",bottom:"bottom-0 left-0 w-full h-80 translate-y-full data-[open=true]:translate-y-0"}[c],d),children:jsxs("div",{className:"flex flex-col h-full",children:[jsxs("div",{className:"flex items-center justify-between p-4 border-b border-zinc-200 dark:border-zinc-800",children:[jsxs("div",{children:[jsx("h2",{className:"text-lg font-semibold text-zinc-900 dark:text-white",children:s}),l&&jsx("p",{className:"text-sm text-zinc-500 dark:text-zinc-400",children:l})]}),jsx("button",{onClick:()=>a(false),className:"p-2 rounded-lg hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors","aria-label":"Close drawer",children:jsx("svg",{className:"w-5 h-5 text-zinc-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),jsx("div",{className:"flex-1 overflow-auto p-4",children:n})]})})]})}var z=b;export{b as SmoothDrawer,z as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/smooth-drawer/index.tsx"],"names":["cn","inputs","twMerge","clsx","SmoothDrawer","trigger","title","description","children","className","side","isOpen","setIsOpen","useState","useEffect","jsxs","Fragment","jsx","smooth_drawer_default"],"mappings":"sJAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,QAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCSO,SAASG,EAAa,CAC3B,OAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CAAQ,cAAA,CACR,YAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,IAAA,CAAAC,EAAO,OACT,CAAA,CAAsB,CACpB,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIC,QAAAA,CAAS,KAAK,CAAA,CAE1C,OAAAC,UAAU,KACJH,CAAAA,CACF,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAW,SAE/B,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAW,EAAA,CAE1B,IAAM,CACX,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAW,GACjC,CAAA,CAAA,CACC,CAACA,CAAM,CAAC,CAAA,CAUTI,IAAAA,CAAAC,QAAAA,CAAA,CAEE,UAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,OAAA,CAAS,IAAML,CAAAA,CAAU,IAAI,EAAG,SAAA,CAAU,gBAAA,CAC5C,QAAA,CAAAP,CAAAA,EACCY,GAAAA,CAAC,QAAA,CAAA,CAAO,UAAU,8HAAA,CAA+H,QAAA,CAAA,aAAA,CAEjJ,CAAA,CAEJ,CAAA,CAGCN,CAAAA,EACCM,GAAAA,CAAC,OACC,SAAA,CAAU,iFAAA,CACV,QAAS,IAAML,CAAAA,CAAU,KAAK,CAAA,CAChC,CAAA,CAIFK,GAAAA,CAAC,KAAA,CAAA,CACC,WAAA,CAAWN,CAAAA,CACX,UAAWX,CAAAA,CACT,2FAAA,CA9BW,CACjB,IAAA,CAAM,2EAAA,CACN,KAAA,CAAO,4EACP,GAAA,CAAK,2EAAA,CACL,MAAA,CAAQ,6EACV,CAAA,CA0BmBU,CAAI,EACfD,CACF,CAAA,CAEA,QAAA,CAAAM,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,uBAEb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qFAAA,CACb,QAAA,CAAA,CAAAA,KAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAAE,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAU,qDAAA,CACX,SAAAX,CAAAA,CACH,CAAA,CACCC,CAAAA,EACCU,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,2CACV,QAAA,CAAAV,CAAAA,CACH,CAAA,CAAA,CAEJ,CAAA,CACAU,GAAAA,CAAC,QAAA,CAAA,CACC,QAAS,IAAML,CAAAA,CAAU,KAAK,CAAA,CAC9B,SAAA,CAAU,2EAAA,CACV,aAAW,cAAA,CAEX,QAAA,CAAAK,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,uBAAA,CACV,KAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,OAAA,CAAQ,WAAA,CAER,QAAA,CAAAA,IAAC,MAAA,CAAA,CACC,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,WAAA,CAAa,EACb,CAAA,CAAE,sBAAA,CACJ,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAGAA,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0BAAA,CAA4B,QAAA,CAAAT,CAAAA,CAAS,CAAA,CAAA,CACtD,EACF,CAAA,CAAA,CACF,CAEJ,CAEA,IAAOU,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 React, { useState, useEffect } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface SmoothDrawerProps {\r\n trigger?: React.ReactNode;\r\n title?: string;\r\n description?: string;\r\n children?: React.ReactNode;\r\n className?: string;\r\n side?: \"left\" | \"right\" | \"top\" | \"bottom\";\r\n}\r\n\r\nexport function SmoothDrawer({\r\n trigger,\r\n title = \"Drawer Title\",\r\n description,\r\n children,\r\n className,\r\n side = \"right\",\r\n}: SmoothDrawerProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n document.body.style.overflow = \"hidden\";\r\n } else {\r\n document.body.style.overflow = \"\";\r\n }\r\n return () => {\r\n document.body.style.overflow = \"\";\r\n };\r\n }, [isOpen]);\r\n\r\n const sideStyles = {\r\n left: \"left-0 top-0 h-full w-80 -translate-x-full data-[open=true]:translate-x-0\",\r\n right: \"right-0 top-0 h-full w-80 translate-x-full data-[open=true]:translate-x-0\",\r\n top: \"top-0 left-0 w-full h-80 -translate-y-full data-[open=true]:translate-y-0\",\r\n bottom: \"bottom-0 left-0 w-full h-80 translate-y-full data-[open=true]:translate-y-0\",\r\n };\r\n\r\n return (\r\n <>\r\n {/* Trigger */}\r\n <div onClick={() => setIsOpen(true)} className=\"cursor-pointer\">\r\n {trigger || (\r\n <button className=\"px-4 py-2 bg-zinc-900 dark:bg-white text-white dark:text-zinc-900 rounded-lg font-medium hover:opacity-90 transition-opacity\">\r\n Open Drawer\r\n </button>\r\n )}\r\n </div>\r\n\r\n {/* Overlay */}\r\n {isOpen && (\r\n <div\r\n className=\"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm transition-opacity duration-300\"\r\n onClick={() => setIsOpen(false)}\r\n />\r\n )}\r\n\r\n {/* Drawer */}\r\n <div\r\n data-open={isOpen}\r\n className={cn(\r\n \"fixed z-50 bg-white dark:bg-zinc-900 shadow-xl transition-transform duration-300 ease-out\",\r\n sideStyles[side],\r\n className\r\n )}\r\n >\r\n <div className=\"flex flex-col h-full\">\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between p-4 border-b border-zinc-200 dark:border-zinc-800\">\r\n <div>\r\n <h2 className=\"text-lg font-semibold text-zinc-900 dark:text-white\">\r\n {title}\r\n </h2>\r\n {description && (\r\n <p className=\"text-sm text-zinc-500 dark:text-zinc-400\">\r\n {description}\r\n </p>\r\n )}\r\n </div>\r\n <button\r\n onClick={() => setIsOpen(false)}\r\n className=\"p-2 rounded-lg hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors\"\r\n aria-label=\"Close drawer\"\r\n >\r\n <svg\r\n className=\"w-5 h-5 text-zinc-500\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M6 18L18 6M6 6l12 12\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"flex-1 overflow-auto p-4\">{children}</div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n\r\nexport default SmoothDrawer;\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 o(...t){return tailwindMerge.twMerge(clsx.clsx(t))}var N=[{id:"tab1",title:"Tab 1",color:"bg-blue-500"},{id:"tab2",title:"Tab 2",color:"bg-purple-500"},{id:"tab3",title:"Tab 3",color:"bg-emerald-500"},{id:"tab4",title:"Tab 4",color:"bg-amber-500"}];function S({items:t=N,defaultTabId:m,className:p,activeColor:v="bg-blue-500",onChange:x}){let[r,h]=react.useState(m||t[0]?.id||""),[a,T]=react.useState({width:0,left:0}),s=react.useRef(new Map),d=react.useRef(null);react.useLayoutEffect(()=>{let e=()=>{let n=s.current.get(r),i=d.current;if(n&&i){let u=n.getBoundingClientRect(),w=i.getBoundingClientRect();T({width:u.width,left:u.left-w.left});}};return requestAnimationFrame(e),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[r]);let z=e=>{h(e),x?.(e);},l=t.find(e=>e.id===r);return jsxRuntime.jsxs("div",{className:o("flex flex-col",p),children:[l?.content&&jsxRuntime.jsx("div",{className:"mb-4 p-6 bg-zinc-100 dark:bg-zinc-900 rounded-lg min-h-[200px]",children:l.content}),jsxRuntime.jsxs("div",{ref:d,role:"tablist",className:o("relative flex items-center gap-1 p-1","bg-zinc-100 dark:bg-zinc-900 rounded-xl","border border-zinc-200 dark:border-zinc-800"),children:[jsxRuntime.jsx("div",{className:o("absolute rounded-lg transition-all duration-300 ease-out",l?.color||v),style:{width:a.width-8,left:a.left+4,height:"calc(100% - 8px)",top:"4px"}}),t.map(e=>{let n=r===e.id;return jsxRuntime.jsx("button",{ref:i=>{i?s.current.set(e.id,i):s.current.delete(e.id);},type:"button",role:"tab","aria-selected":n,onClick:()=>z(e.id),className:o("relative z-10 flex-1 px-4 py-2 rounded-lg","text-sm font-medium transition-colors duration-300","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500",n?"text-white":"text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-zinc-100"),children:e.title},e.id)})]})]})}var D=S;exports.SmoothTab=S;exports.default=D;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/smooth-tab/index.tsx"],"names":["cn","inputs","twMerge","clsx","DEFAULT_TABS","SmoothTab","items","defaultTabId","className","activeColor","onChange","selected","setSelected","useState","dimensions","setDimensions","buttonRefs","useRef","containerRef","useLayoutEffect","updateDimensions","selectedButton","container","rect","containerRect","handleTabClick","tabId","selectedItem","item","jsxs","jsx","isSelected","el","smooth_tab_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 React, { useState, useRef, useLayoutEffect } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface TabItem {\r\n id: string;\r\n title: string;\r\n content?: React.ReactNode;\r\n color?: string;\r\n}\r\n\r\ninterface SmoothTabProps {\r\n items?: TabItem[];\r\n defaultTabId?: string;\r\n className?: string;\r\n activeColor?: string;\r\n onChange?: (tabId: string) => void;\r\n}\r\n\r\nconst DEFAULT_TABS: TabItem[] = [\r\n { id: \"tab1\", title: \"Tab 1\", color: \"bg-blue-500\" },\r\n { id: \"tab2\", title: \"Tab 2\", color: \"bg-purple-500\" },\r\n { id: \"tab3\", title: \"Tab 3\", color: \"bg-emerald-500\" },\r\n { id: \"tab4\", title: \"Tab 4\", color: \"bg-amber-500\" },\r\n];\r\n\r\nexport function SmoothTab({\r\n items = DEFAULT_TABS,\r\n defaultTabId,\r\n className,\r\n activeColor = \"bg-blue-500\",\r\n onChange,\r\n}: SmoothTabProps) {\r\n const [selected, setSelected] = useState<string>(defaultTabId || items[0]?.id || \"\");\r\n const [dimensions, setDimensions] = useState({ width: 0, left: 0 });\r\n const buttonRefs = useRef<Map<string, HTMLButtonElement>>(new Map());\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n\r\n useLayoutEffect(() => {\r\n const updateDimensions = () => {\r\n const selectedButton = buttonRefs.current.get(selected);\r\n const container = containerRef.current;\r\n\r\n if (selectedButton && container) {\r\n const rect = selectedButton.getBoundingClientRect();\r\n const containerRect = container.getBoundingClientRect();\r\n\r\n setDimensions({\r\n width: rect.width,\r\n left: rect.left - containerRect.left,\r\n });\r\n }\r\n };\r\n\r\n requestAnimationFrame(updateDimensions);\r\n window.addEventListener(\"resize\", updateDimensions);\r\n return () => window.removeEventListener(\"resize\", updateDimensions);\r\n }, [selected]);\r\n\r\n const handleTabClick = (tabId: string) => {\r\n setSelected(tabId);\r\n onChange?.(tabId);\r\n };\r\n\r\n const selectedItem = items.find((item) => item.id === selected);\r\n\r\n return (\r\n <div className={cn(\"flex flex-col\", className)}>\r\n {/* Content Area */}\r\n {selectedItem?.content && (\r\n <div className=\"mb-4 p-6 bg-zinc-100 dark:bg-zinc-900 rounded-lg min-h-[200px]\">\r\n {selectedItem.content}\r\n </div>\r\n )}\r\n\r\n {/* Tab Bar */}\r\n <div\r\n ref={containerRef}\r\n role=\"tablist\"\r\n className={cn(\r\n \"relative flex items-center gap-1 p-1\",\r\n \"bg-zinc-100 dark:bg-zinc-900 rounded-xl\",\r\n \"border border-zinc-200 dark:border-zinc-800\"\r\n )}\r\n >\r\n {/* Sliding Background */}\r\n <div\r\n className={cn(\r\n \"absolute rounded-lg transition-all duration-300 ease-out\",\r\n selectedItem?.color || activeColor\r\n )}\r\n style={{\r\n width: dimensions.width - 8,\r\n left: dimensions.left + 4,\r\n height: \"calc(100% - 8px)\",\r\n top: \"4px\",\r\n }}\r\n />\r\n\r\n {/* Tab Buttons */}\r\n {items.map((item) => {\r\n const isSelected = selected === item.id;\r\n return (\r\n <button\r\n key={item.id}\r\n ref={(el) => {\r\n if (el) buttonRefs.current.set(item.id, el);\r\n else buttonRefs.current.delete(item.id);\r\n }}\r\n type=\"button\"\r\n role=\"tab\"\r\n aria-selected={isSelected}\r\n onClick={() => handleTabClick(item.id)}\r\n className={cn(\r\n \"relative z-10 flex-1 px-4 py-2 rounded-lg\",\r\n \"text-sm font-medium transition-colors duration-300\",\r\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500\",\r\n isSelected\r\n ? \"text-white\"\r\n : \"text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-zinc-100\"\r\n )}\r\n >\r\n {item.title}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default SmoothTab;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {useState,useRef,useLayoutEffect}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function o(...t){return twMerge(clsx(t))}var N=[{id:"tab1",title:"Tab 1",color:"bg-blue-500"},{id:"tab2",title:"Tab 2",color:"bg-purple-500"},{id:"tab3",title:"Tab 3",color:"bg-emerald-500"},{id:"tab4",title:"Tab 4",color:"bg-amber-500"}];function S({items:t=N,defaultTabId:m,className:p,activeColor:v="bg-blue-500",onChange:x}){let[r,h]=useState(m||t[0]?.id||""),[a,T]=useState({width:0,left:0}),s=useRef(new Map),d=useRef(null);useLayoutEffect(()=>{let e=()=>{let n=s.current.get(r),i=d.current;if(n&&i){let u=n.getBoundingClientRect(),w=i.getBoundingClientRect();T({width:u.width,left:u.left-w.left});}};return requestAnimationFrame(e),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[r]);let z=e=>{h(e),x?.(e);},l=t.find(e=>e.id===r);return jsxs("div",{className:o("flex flex-col",p),children:[l?.content&&jsx("div",{className:"mb-4 p-6 bg-zinc-100 dark:bg-zinc-900 rounded-lg min-h-[200px]",children:l.content}),jsxs("div",{ref:d,role:"tablist",className:o("relative flex items-center gap-1 p-1","bg-zinc-100 dark:bg-zinc-900 rounded-xl","border border-zinc-200 dark:border-zinc-800"),children:[jsx("div",{className:o("absolute rounded-lg transition-all duration-300 ease-out",l?.color||v),style:{width:a.width-8,left:a.left+4,height:"calc(100% - 8px)",top:"4px"}}),t.map(e=>{let n=r===e.id;return jsx("button",{ref:i=>{i?s.current.set(e.id,i):s.current.delete(e.id);},type:"button",role:"tab","aria-selected":n,onClick:()=>z(e.id),className:o("relative z-10 flex-1 px-4 py-2 rounded-lg","text-sm font-medium transition-colors duration-300","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500",n?"text-white":"text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-zinc-100"),children:e.title},e.id)})]})]})}var D=S;export{S as SmoothTab,D as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/smooth-tab/index.tsx"],"names":["cn","inputs","twMerge","clsx","DEFAULT_TABS","SmoothTab","items","defaultTabId","className","activeColor","onChange","selected","setSelected","useState","dimensions","setDimensions","buttonRefs","useRef","containerRef","useLayoutEffect","updateDimensions","selectedButton","container","rect","containerRect","handleTabClick","tabId","selectedItem","item","jsxs","jsx","isSelected","el","smooth_tab_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 React, { useState, useRef, useLayoutEffect } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface TabItem {\r\n id: string;\r\n title: string;\r\n content?: React.ReactNode;\r\n color?: string;\r\n}\r\n\r\ninterface SmoothTabProps {\r\n items?: TabItem[];\r\n defaultTabId?: string;\r\n className?: string;\r\n activeColor?: string;\r\n onChange?: (tabId: string) => void;\r\n}\r\n\r\nconst DEFAULT_TABS: TabItem[] = [\r\n { id: \"tab1\", title: \"Tab 1\", color: \"bg-blue-500\" },\r\n { id: \"tab2\", title: \"Tab 2\", color: \"bg-purple-500\" },\r\n { id: \"tab3\", title: \"Tab 3\", color: \"bg-emerald-500\" },\r\n { id: \"tab4\", title: \"Tab 4\", color: \"bg-amber-500\" },\r\n];\r\n\r\nexport function SmoothTab({\r\n items = DEFAULT_TABS,\r\n defaultTabId,\r\n className,\r\n activeColor = \"bg-blue-500\",\r\n onChange,\r\n}: SmoothTabProps) {\r\n const [selected, setSelected] = useState<string>(defaultTabId || items[0]?.id || \"\");\r\n const [dimensions, setDimensions] = useState({ width: 0, left: 0 });\r\n const buttonRefs = useRef<Map<string, HTMLButtonElement>>(new Map());\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n\r\n useLayoutEffect(() => {\r\n const updateDimensions = () => {\r\n const selectedButton = buttonRefs.current.get(selected);\r\n const container = containerRef.current;\r\n\r\n if (selectedButton && container) {\r\n const rect = selectedButton.getBoundingClientRect();\r\n const containerRect = container.getBoundingClientRect();\r\n\r\n setDimensions({\r\n width: rect.width,\r\n left: rect.left - containerRect.left,\r\n });\r\n }\r\n };\r\n\r\n requestAnimationFrame(updateDimensions);\r\n window.addEventListener(\"resize\", updateDimensions);\r\n return () => window.removeEventListener(\"resize\", updateDimensions);\r\n }, [selected]);\r\n\r\n const handleTabClick = (tabId: string) => {\r\n setSelected(tabId);\r\n onChange?.(tabId);\r\n };\r\n\r\n const selectedItem = items.find((item) => item.id === selected);\r\n\r\n return (\r\n <div className={cn(\"flex flex-col\", className)}>\r\n {/* Content Area */}\r\n {selectedItem?.content && (\r\n <div className=\"mb-4 p-6 bg-zinc-100 dark:bg-zinc-900 rounded-lg min-h-[200px]\">\r\n {selectedItem.content}\r\n </div>\r\n )}\r\n\r\n {/* Tab Bar */}\r\n <div\r\n ref={containerRef}\r\n role=\"tablist\"\r\n className={cn(\r\n \"relative flex items-center gap-1 p-1\",\r\n \"bg-zinc-100 dark:bg-zinc-900 rounded-xl\",\r\n \"border border-zinc-200 dark:border-zinc-800\"\r\n )}\r\n >\r\n {/* Sliding Background */}\r\n <div\r\n className={cn(\r\n \"absolute rounded-lg transition-all duration-300 ease-out\",\r\n selectedItem?.color || activeColor\r\n )}\r\n style={{\r\n width: dimensions.width - 8,\r\n left: dimensions.left + 4,\r\n height: \"calc(100% - 8px)\",\r\n top: \"4px\",\r\n }}\r\n />\r\n\r\n {/* Tab Buttons */}\r\n {items.map((item) => {\r\n const isSelected = selected === item.id;\r\n return (\r\n <button\r\n key={item.id}\r\n ref={(el) => {\r\n if (el) buttonRefs.current.set(item.id, el);\r\n else buttonRefs.current.delete(item.id);\r\n }}\r\n type=\"button\"\r\n role=\"tab\"\r\n aria-selected={isSelected}\r\n onClick={() => handleTabClick(item.id)}\r\n className={cn(\r\n \"relative z-10 flex-1 px-4 py-2 rounded-lg\",\r\n \"text-sm font-medium transition-colors duration-300\",\r\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500\",\r\n isSelected\r\n ? \"text-white\"\r\n : \"text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-zinc-100\"\r\n )}\r\n >\r\n {item.title}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default SmoothTab;\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
|