@alkimi.org/ui-kit 0.11.5 → 0.12.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.
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import{a as D}from"./chunk-S5TKCF6T.mjs";import N,{useState as k,useEffect as q,useMemo as B,useRef as p}from"react";import{jsx as h,jsxs as P}from"react/jsx-runtime";var H="!<>-_\\/[]{}\u2014=+*^?#________",L=e=>e[Math.floor(Math.random()*e.length)],v=e=>{if(typeof e=="string"||typeof e=="number")return String(e);if(Array.isArray(e))return e.map(v).join("");if(N.isValidElement(e)){let c=e.props;return(c.text||"")+(c.label||"")+(c.title||"")+v(c.children)}return""},x=(e,c,i)=>{if(typeof e=="string"||typeof e=="number"){let l=String(e),s=[];for(let m=0;m<l.length;m++)s.push(h(N.Fragment,{children:c[i.current]||""},`char-${i.current}`)),i.current++;return s}if(Array.isArray(e))return e.map((l,s)=>h(N.Fragment,{children:x(l,c,i)},`arr-${s}-${i.current}`));if(N.isValidElement(e)){let l=e.props,s={};return l.children&&(s.children=x(l.children,c,i)),N.cloneElement(e,s)}return e};function Y({children:e,className:c,duration:i=40,symbols:l=H,delay:s=0,isLoading:m=!1,speed:w=.28,hoverContent:b}){let[$,E]=k(null),[j,A]=k(!1),[d,O]=k(e),T=p(null),g=p(0),y=p([]),t=p(null),F=p(!1),f=B(()=>v(d),[d]),S=()=>{let r=[];for(let u=0;u<f.length;u++){let n=f[u],o=Math.floor(Math.random()*(i*.5)),a=o+Math.floor(Math.random()*(i*.5));r.push({to:n,start:o,end:a})}y.current=r,g.current=0,A(!1)},R=p([]),C=()=>{let r=[];R.current.length!==f.length&&(R.current=new Array(f.length).fill(void 0));for(let n=0;n<f.length;n++){let o=f[n];o===" "?r.push(" "):((!R.current[n]||Math.random()<w)&&(R.current[n]=L(l)),r.push(P("span",{className:"relative inline-block",children:[h("span",{className:"invisible select-none","aria-hidden":"true",children:o}),h("span",{className:"absolute inset-0 flex items-center justify-center opacity-50 font-mono leading-none",children:R.current[n]})]},n)))}E(x(d,r,{current:0})),t.current=requestAnimationFrame(C)},M=()=>{let r=0,u=[];for(let o=0;o<y.current.length;o++){let a=y.current[o];g.current>=a.end?(r++,u.push(a.to)):(g.current>=a.start&&(!a.char||Math.random()<w)&&(a.char=L(l)),u.push(P("span",{className:"relative inline-block",children:[h("span",{className:"invisible select-none","aria-hidden":"true",children:a.to===" "?"\xA0":a.to}),g.current>=a.start&&h("span",{className:"absolute inset-0 flex items-center justify-center opacity-50 font-mono leading-none",children:a.char})]},o)))}E(x(d,u,{current:0})),r===y.current.length?A(!0):(g.current++,t.current=requestAnimationFrame(M))},I=r=>{t.current&&cancelAnimationFrame(t.current),O(r),A(!1)},_=p(!1);q(()=>{if(m)return _.current=!0,F.current=!0,A(!1),t.current&&cancelAnimationFrame(t.current),t.current=requestAnimationFrame(C),()=>{t.current&&cancelAnimationFrame(t.current)};if(_.current)return _.current=!1,S(),t.current=requestAnimationFrame(M),()=>{t.current&&cancelAnimationFrame(t.current)}},[m,f]),q(()=>{if(m)return;let r=new IntersectionObserver(u=>{if(u[0].isIntersecting&&!F.current){F.current=!0;let n=setTimeout(()=>{S(),t.current=requestAnimationFrame(M)},s);return()=>clearTimeout(n)}},{threshold:.1});return T.current&&r.observe(T.current),()=>{r.disconnect(),t.current&&cancelAnimationFrame(t.current)}},[f,s,m]),q(()=>{if(!(!b||m||!F.current))return S(),t.current=requestAnimationFrame(M),()=>{t.current&&cancelAnimationFrame(t.current)}},[d]);let Q=()=>{b&&I(b)},V=()=>{b&&I(e)};return h("span",{ref:T,className:D("inline-block whitespace-pre-wrap",c),onMouseEnter:Q,onMouseLeave:V,children:j?d:$})}export{Y as a};
3
+ //# sourceMappingURL=chunk-23ZKDWV4.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/TextDecoder.tsx"],"sourcesContent":["\"use client\"\nimport { cn } from \"@/lib/utils\"\nimport React, {\n useState,\n useEffect,\n useMemo,\n useRef,\n ReactNode,\n} from \"react\"\n\nconst SYMBOLS = \"!<>-_\\\\/[]{}—=+*^?#________\"\n\nconst randomChar = (symbols: string) =>\n symbols[Math.floor(Math.random() * symbols.length)]\n\nconst extractText = (node: ReactNode): string => {\n if (typeof node === \"string\" || typeof node === \"number\") return String(node)\n if (Array.isArray(node)) return node.map(extractText).join(\"\")\n if (React.isValidElement(node)) {\n const props = node.props as any\n return (\n (props.text || \"\") +\n (props.label || \"\") +\n (props.title || \"\") +\n extractText(props.children)\n )\n }\n return \"\"\n}\n\nconst injectScrambledText = (\n node: ReactNode,\n scrambledChars: (string | ReactNode)[],\n indexObj: { current: number }\n): ReactNode => {\n if (typeof node === \"string\" || typeof node === \"number\") {\n const text = String(node)\n const result: (string | ReactNode)[] = []\n for (let i = 0; i < text.length; i++) {\n result.push(\n <React.Fragment key={`char-${indexObj.current}`}>\n {scrambledChars[indexObj.current] || \"\"}\n </React.Fragment>\n )\n indexObj.current++\n }\n return result\n }\n\n if (Array.isArray(node)) {\n return node.map((child, idx) => (\n <React.Fragment key={`arr-${idx}-${indexObj.current}`}>\n {injectScrambledText(child, scrambledChars, indexObj)}\n </React.Fragment>\n ))\n }\n\n if (React.isValidElement(node)) {\n const props = node.props as any\n const newProps: any = {}\n\n if (props.children) {\n newProps.children = injectScrambledText(\n props.children,\n scrambledChars,\n indexObj\n )\n }\n return React.cloneElement(node, newProps)\n }\n return node\n}\n\nexport interface TextDecoderProps {\n children: ReactNode\n className?: string\n duration?: number\n symbols?: string\n delay?: number\n isLoading?: boolean\n speed?: number\n hoverContent?: ReactNode\n}\n\nexport default function TextDecoder ({\n children,\n className,\n duration = 40,\n symbols = SYMBOLS,\n delay = 0,\n isLoading = false,\n speed = 0.28,\n hoverContent,\n}: TextDecoderProps) {\n const [outputNodes, setOutputNodes] = useState<ReactNode>(null)\n const [isComplete, setIsComplete] = useState(false)\n const [targetContent, setTargetContent] = useState<ReactNode>(children)\n const elementRef = useRef<HTMLSpanElement>(null)\n const frameRef = useRef(0)\n const queueRef = useRef<\n { to: string; start: number; end: number; char?: string }[]\n >([])\n const rafRef = useRef<number | null>(null)\n const hasAnimatedRef = useRef(false)\n\n const fullText = useMemo(() => extractText(targetContent), [targetContent])\n\n const setupQueue = () => {\n const newQueue = []\n for (let i = 0; i < fullText.length; i++) {\n const to = fullText[i]\n const start = Math.floor(Math.random() * (duration * 0.5))\n const end = start + Math.floor(Math.random() * (duration * 0.5))\n newQueue.push({ to, start, end })\n }\n queueRef.current = newQueue\n frameRef.current = 0\n setIsComplete(false)\n }\n\n const loadingCharsRef = useRef<(string | undefined)[]>([])\n\n const updateLoading = () => {\n const currentScrambledChars: (string | ReactNode)[] = []\n\n if (loadingCharsRef.current.length !== fullText.length) {\n loadingCharsRef.current = new Array(fullText.length).fill(undefined)\n }\n\n for (let i = 0; i < fullText.length; i++) {\n const char = fullText[i]\n\n if (char === \" \") {\n currentScrambledChars.push(\" \")\n } else {\n if (!loadingCharsRef.current[i] || Math.random() < speed) {\n loadingCharsRef.current[i] = randomChar(symbols)\n }\n\n currentScrambledChars.push(\n <span key={i} className=\"relative inline-block\">\n <span className=\"invisible select-none\" aria-hidden=\"true\">\n {char}\n </span>\n <span className=\"absolute inset-0 flex items-center justify-center opacity-50 font-mono leading-none\">\n {loadingCharsRef.current[i]}\n </span>\n </span>\n )\n }\n }\n\n const indexObj = { current: 0 }\n setOutputNodes(\n injectScrambledText(targetContent, currentScrambledChars, indexObj)\n )\n\n rafRef.current = requestAnimationFrame(updateLoading)\n }\n\n const update = () => {\n let complete = 0\n const currentScrambledChars: (string | ReactNode)[] = []\n\n for (let i = 0; i < queueRef.current.length; i++) {\n const item = queueRef.current[i]\n\n if (frameRef.current >= item.end) {\n complete++\n currentScrambledChars.push(item.to)\n } else {\n if (frameRef.current >= item.start) {\n if (!item.char || Math.random() < speed) {\n item.char = randomChar(symbols)\n }\n }\n\n currentScrambledChars.push(\n <span key={i} className=\"relative inline-block\">\n <span className=\"invisible select-none\" aria-hidden=\"true\">\n {item.to === \" \" ? \"\\u00A0\" : item.to}\n </span>\n {frameRef.current >= item.start && (\n <span className=\"absolute inset-0 flex items-center justify-center opacity-50 font-mono leading-none\">\n {item.char}\n </span>\n )}\n </span>\n )\n }\n }\n\n const indexObj = { current: 0 }\n setOutputNodes(\n injectScrambledText(targetContent, currentScrambledChars, indexObj)\n )\n\n if (complete === queueRef.current.length) {\n setIsComplete(true)\n } else {\n frameRef.current++\n rafRef.current = requestAnimationFrame(update)\n }\n }\n\n const triggerAnimation = (content: ReactNode) => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n setTargetContent(content)\n setIsComplete(false)\n }\n\n const wasLoadingRef = useRef(false)\n\n useEffect(() => {\n if (isLoading) {\n wasLoadingRef.current = true\n hasAnimatedRef.current = true\n setIsComplete(false)\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n rafRef.current = requestAnimationFrame(updateLoading)\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n }\n }\n\n if (wasLoadingRef.current) {\n wasLoadingRef.current = false\n setupQueue()\n rafRef.current = requestAnimationFrame(update)\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n }\n }\n }, [isLoading, fullText])\n\n useEffect(() => {\n if (isLoading) return\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting && !hasAnimatedRef.current) {\n hasAnimatedRef.current = true\n const timeoutId = setTimeout(() => {\n setupQueue()\n rafRef.current = requestAnimationFrame(update)\n }, delay)\n return () => clearTimeout(timeoutId)\n }\n },\n { threshold: 0.1 }\n )\n\n if (elementRef.current) observer.observe(elementRef.current)\n\n return () => {\n observer.disconnect()\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n }\n }, [fullText, delay, isLoading])\n\n // Handle hover mode animation triggers\n useEffect(() => {\n if (!hoverContent || isLoading || !hasAnimatedRef.current) return\n\n setupQueue()\n rafRef.current = requestAnimationFrame(update)\n\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n }\n }, [targetContent])\n\n const handleMouseEnter = () => {\n if (!hoverContent) return\n triggerAnimation(hoverContent)\n }\n\n const handleMouseLeave = () => {\n if (!hoverContent) return\n triggerAnimation(children)\n }\n\n return (\n <span\n ref={elementRef}\n className={cn(\"inline-block whitespace-pre-wrap\", className)}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {isComplete ? targetContent : outputNodes}\n </span>\n )\n}\n"],"mappings":";yCAEA,OAAOA,GACL,YAAAC,EACA,aAAAC,EACA,WAAAC,EACA,UAAAC,MAEK,QAgCC,cAAAC,EAoGE,QAAAC,MApGF,oBA9BR,IAAMC,EAAU,mCAEVC,EAAcC,GAClBA,EAAQ,KAAK,MAAM,KAAK,OAAO,EAAIA,EAAQ,MAAM,CAAC,EAE9CC,EAAeC,GAA4B,CAC/C,GAAI,OAAOA,GAAS,UAAY,OAAOA,GAAS,SAAU,OAAO,OAAOA,CAAI,EAC5E,GAAI,MAAM,QAAQA,CAAI,EAAG,OAAOA,EAAK,IAAID,CAAW,EAAE,KAAK,EAAE,EAC7D,GAAIV,EAAM,eAAeW,CAAI,EAAG,CAC9B,IAAMC,EAAQD,EAAK,MACnB,OACGC,EAAM,MAAQ,KACdA,EAAM,OAAS,KACfA,EAAM,OAAS,IAChBF,EAAYE,EAAM,QAAQ,CAE9B,CACA,MAAO,EACT,EAEMC,EAAsB,CAC1BF,EACAG,EACAC,IACc,CACd,GAAI,OAAOJ,GAAS,UAAY,OAAOA,GAAS,SAAU,CACxD,IAAMK,EAAO,OAAOL,CAAI,EAClBM,EAAiC,CAAC,EACxC,QAASC,EAAI,EAAGA,EAAIF,EAAK,OAAQE,IAC/BD,EAAO,KACLZ,EAACL,EAAM,SAAN,CACE,SAAAc,EAAeC,EAAS,OAAO,GAAK,IADlB,QAAQA,EAAS,OAAO,EAE7C,CACF,EACAA,EAAS,UAEX,OAAOE,CACT,CAEA,GAAI,MAAM,QAAQN,CAAI,EACpB,OAAOA,EAAK,IAAI,CAACQ,EAAOC,IACtBf,EAACL,EAAM,SAAN,CACE,SAAAa,EAAoBM,EAAOL,EAAgBC,CAAQ,GADjC,OAAOK,CAAG,IAAIL,EAAS,OAAO,EAEnD,CACD,EAGH,GAAIf,EAAM,eAAeW,CAAI,EAAG,CAC9B,IAAMC,EAAQD,EAAK,MACbU,EAAgB,CAAC,EAEvB,OAAIT,EAAM,WACRS,EAAS,SAAWR,EAClBD,EAAM,SACNE,EACAC,CACF,GAEKf,EAAM,aAAaW,EAAMU,CAAQ,CAC1C,CACA,OAAOV,CACT,EAae,SAARW,EAA8B,CACnC,SAAAC,EACA,UAAAC,EACA,SAAAC,EAAW,GACX,QAAAhB,EAAUF,EACV,MAAAmB,EAAQ,EACR,UAAAC,EAAY,GACZ,MAAAC,EAAQ,IACR,aAAAC,CACF,EAAqB,CACnB,GAAM,CAACC,EAAaC,CAAc,EAAI9B,EAAoB,IAAI,EACxD,CAAC+B,EAAYC,CAAa,EAAIhC,EAAS,EAAK,EAC5C,CAACiC,EAAeC,CAAgB,EAAIlC,EAAoBsB,CAAQ,EAChEa,EAAahC,EAAwB,IAAI,EACzCiC,EAAWjC,EAAO,CAAC,EACnBkC,EAAWlC,EAEf,CAAC,CAAC,EACEmC,EAASnC,EAAsB,IAAI,EACnCoC,EAAiBpC,EAAO,EAAK,EAE7BqC,EAAWtC,EAAQ,IAAMO,EAAYwB,CAAa,EAAG,CAACA,CAAa,CAAC,EAEpEQ,EAAa,IAAM,CACvB,IAAMC,EAAW,CAAC,EAClB,QAASzB,EAAI,EAAGA,EAAIuB,EAAS,OAAQvB,IAAK,CACxC,IAAM0B,EAAKH,EAASvB,CAAC,EACf2B,EAAQ,KAAK,MAAM,KAAK,OAAO,GAAKpB,EAAW,GAAI,EACnDqB,EAAMD,EAAQ,KAAK,MAAM,KAAK,OAAO,GAAKpB,EAAW,GAAI,EAC/DkB,EAAS,KAAK,CAAE,GAAAC,EAAI,MAAAC,EAAO,IAAAC,CAAI,CAAC,CAClC,CACAR,EAAS,QAAUK,EACnBN,EAAS,QAAU,EACnBJ,EAAc,EAAK,CACrB,EAEMc,EAAkB3C,EAA+B,CAAC,CAAC,EAEnD4C,EAAgB,IAAM,CAC1B,IAAMC,EAAgD,CAAC,EAEnDF,EAAgB,QAAQ,SAAWN,EAAS,SAC9CM,EAAgB,QAAU,IAAI,MAAMN,EAAS,MAAM,EAAE,KAAK,MAAS,GAGrE,QAASvB,EAAI,EAAGA,EAAIuB,EAAS,OAAQvB,IAAK,CACxC,IAAMgC,EAAOT,EAASvB,CAAC,EAEnBgC,IAAS,IACXD,EAAsB,KAAK,GAAG,IAE1B,CAACF,EAAgB,QAAQ7B,CAAC,GAAK,KAAK,OAAO,EAAIU,KACjDmB,EAAgB,QAAQ7B,CAAC,EAAIV,EAAWC,CAAO,GAGjDwC,EAAsB,KACpB3C,EAAC,QAAa,UAAU,wBACtB,UAAAD,EAAC,QAAK,UAAU,wBAAwB,cAAY,OACjD,SAAA6C,EACH,EACA7C,EAAC,QAAK,UAAU,sFACb,SAAA0C,EAAgB,QAAQ7B,CAAC,EAC5B,IANSA,CAOX,CACF,EAEJ,CAGAa,EACElB,EAAoBqB,EAAee,EAFpB,CAAE,QAAS,CAAE,CAEsC,CACpE,EAEAV,EAAO,QAAU,sBAAsBS,CAAa,CACtD,EAEMG,EAAS,IAAM,CACnB,IAAIC,EAAW,EACTH,EAAgD,CAAC,EAEvD,QAAS/B,EAAI,EAAGA,EAAIoB,EAAS,QAAQ,OAAQpB,IAAK,CAChD,IAAMmC,EAAOf,EAAS,QAAQpB,CAAC,EAE3BmB,EAAS,SAAWgB,EAAK,KAC3BD,IACAH,EAAsB,KAAKI,EAAK,EAAE,IAE9BhB,EAAS,SAAWgB,EAAK,QACvB,CAACA,EAAK,MAAQ,KAAK,OAAO,EAAIzB,KAChCyB,EAAK,KAAO7C,EAAWC,CAAO,GAIlCwC,EAAsB,KACpB3C,EAAC,QAAa,UAAU,wBACtB,UAAAD,EAAC,QAAK,UAAU,wBAAwB,cAAY,OACjD,SAAAgD,EAAK,KAAO,IAAM,OAAWA,EAAK,GACrC,EACChB,EAAS,SAAWgB,EAAK,OACxBhD,EAAC,QAAK,UAAU,sFACb,SAAAgD,EAAK,KACR,IAPOnC,CASX,CACF,EAEJ,CAGAa,EACElB,EAAoBqB,EAAee,EAFpB,CAAE,QAAS,CAAE,CAEsC,CACpE,EAEIG,IAAad,EAAS,QAAQ,OAChCL,EAAc,EAAI,GAElBI,EAAS,UACTE,EAAO,QAAU,sBAAsBY,CAAM,EAEjD,EAEMG,EAAoBC,GAAuB,CAC3ChB,EAAO,SAAS,qBAAqBA,EAAO,OAAO,EACvDJ,EAAiBoB,CAAO,EACxBtB,EAAc,EAAK,CACrB,EAEMuB,EAAgBpD,EAAO,EAAK,EAElCF,EAAU,IAAM,CACd,GAAIyB,EACF,OAAA6B,EAAc,QAAU,GACxBhB,EAAe,QAAU,GACzBP,EAAc,EAAK,EACfM,EAAO,SAAS,qBAAqBA,EAAO,OAAO,EACvDA,EAAO,QAAU,sBAAsBS,CAAa,EAC7C,IAAM,CACPT,EAAO,SAAS,qBAAqBA,EAAO,OAAO,CACzD,EAGF,GAAIiB,EAAc,QAChB,OAAAA,EAAc,QAAU,GACxBd,EAAW,EACXH,EAAO,QAAU,sBAAsBY,CAAM,EACtC,IAAM,CACPZ,EAAO,SAAS,qBAAqBA,EAAO,OAAO,CACzD,CAEJ,EAAG,CAACZ,EAAWc,CAAQ,CAAC,EAExBvC,EAAU,IAAM,CACd,GAAIyB,EAAW,OAEf,IAAM8B,EAAW,IAAI,qBAClBC,GAAY,CACX,GAAIA,EAAQ,CAAC,EAAE,gBAAkB,CAAClB,EAAe,QAAS,CACxDA,EAAe,QAAU,GACzB,IAAMmB,EAAY,WAAW,IAAM,CACjCjB,EAAW,EACXH,EAAO,QAAU,sBAAsBY,CAAM,CAC/C,EAAGzB,CAAK,EACR,MAAO,IAAM,aAAaiC,CAAS,CACrC,CACF,EACA,CAAE,UAAW,EAAI,CACnB,EAEA,OAAIvB,EAAW,SAASqB,EAAS,QAAQrB,EAAW,OAAO,EAEpD,IAAM,CACXqB,EAAS,WAAW,EAChBlB,EAAO,SAAS,qBAAqBA,EAAO,OAAO,CACzD,CACF,EAAG,CAACE,EAAUf,EAAOC,CAAS,CAAC,EAG/BzB,EAAU,IAAM,CACd,GAAI,GAAC2B,GAAgBF,GAAa,CAACa,EAAe,SAElD,OAAAE,EAAW,EACXH,EAAO,QAAU,sBAAsBY,CAAM,EAEtC,IAAM,CACPZ,EAAO,SAAS,qBAAqBA,EAAO,OAAO,CACzD,CACF,EAAG,CAACL,CAAa,CAAC,EAElB,IAAM0B,EAAmB,IAAM,CACxB/B,GACLyB,EAAiBzB,CAAY,CAC/B,EAEMgC,EAAmB,IAAM,CACxBhC,GACLyB,EAAiB/B,CAAQ,CAC3B,EAEA,OACElB,EAAC,QACC,IAAK+B,EACL,UAAW0B,EAAG,mCAAoCtC,CAAS,EAC3D,aAAcoC,EACd,aAAcC,EAEb,SAAA7B,EAAaE,EAAgBJ,EAChC,CAEJ","names":["React","useState","useEffect","useMemo","useRef","jsx","jsxs","SYMBOLS","randomChar","symbols","extractText","node","props","injectScrambledText","scrambledChars","indexObj","text","result","i","child","idx","newProps","TextDecoder","children","className","duration","delay","isLoading","speed","hoverContent","outputNodes","setOutputNodes","isComplete","setIsComplete","targetContent","setTargetContent","elementRef","frameRef","queueRef","rafRef","hasAnimatedRef","fullText","setupQueue","newQueue","to","start","end","loadingCharsRef","updateLoading","currentScrambledChars","char","update","complete","item","triggerAnimation","content","wasLoadingRef","observer","entries","timeoutId","handleMouseEnter","handleMouseLeave","cn"]}
@@ -0,0 +1,3 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }"use client";
2
+ var _chunkFUYXCJOQjs = require('./chunk-FUYXCJOQ.js');var _react = require('react'); var _react2 = _interopRequireDefault(_react);var _jsxruntime = require('react/jsx-runtime');var H="!<>-_\\/[]{}\u2014=+*^?#________",L=e=>e[Math.floor(Math.random()*e.length)],v=e=>{if(typeof e=="string"||typeof e=="number")return String(e);if(Array.isArray(e))return e.map(v).join("");if(_react2.default.isValidElement(e)){let c=e.props;return(c.text||"")+(c.label||"")+(c.title||"")+v(c.children)}return""},x=(e,c,i)=>{if(typeof e=="string"||typeof e=="number"){let l=String(e),s=[];for(let m=0;m<l.length;m++)s.push(_jsxruntime.jsx.call(void 0, _react2.default.Fragment,{children:c[i.current]||""},`char-${i.current}`)),i.current++;return s}if(Array.isArray(e))return e.map((l,s)=>_jsxruntime.jsx.call(void 0, _react2.default.Fragment,{children:x(l,c,i)},`arr-${s}-${i.current}`));if(_react2.default.isValidElement(e)){let l=e.props,s={};return l.children&&(s.children=x(l.children,c,i)),_react2.default.cloneElement(e,s)}return e};function Y({children:e,className:c,duration:i=40,symbols:l=H,delay:s=0,isLoading:m=!1,speed:w=.28,hoverContent:b}){let[$,E]=_react.useState.call(void 0, null),[j,A]=_react.useState.call(void 0, !1),[d,O]=_react.useState.call(void 0, e),T=_react.useRef.call(void 0, null),g=_react.useRef.call(void 0, 0),y=_react.useRef.call(void 0, []),t=_react.useRef.call(void 0, null),F=_react.useRef.call(void 0, !1),f=_react.useMemo.call(void 0, ()=>v(d),[d]),S=()=>{let r=[];for(let u=0;u<f.length;u++){let n=f[u],o=Math.floor(Math.random()*(i*.5)),a=o+Math.floor(Math.random()*(i*.5));r.push({to:n,start:o,end:a})}y.current=r,g.current=0,A(!1)},R=_react.useRef.call(void 0, []),C=()=>{let r=[];R.current.length!==f.length&&(R.current=new Array(f.length).fill(void 0));for(let n=0;n<f.length;n++){let o=f[n];o===" "?r.push(" "):((!R.current[n]||Math.random()<w)&&(R.current[n]=L(l)),r.push(_jsxruntime.jsxs.call(void 0, "span",{className:"relative inline-block",children:[_jsxruntime.jsx.call(void 0, "span",{className:"invisible select-none","aria-hidden":"true",children:o}),_jsxruntime.jsx.call(void 0, "span",{className:"absolute inset-0 flex items-center justify-center opacity-50 font-mono leading-none",children:R.current[n]})]},n)))}E(x(d,r,{current:0})),t.current=requestAnimationFrame(C)},M=()=>{let r=0,u=[];for(let o=0;o<y.current.length;o++){let a=y.current[o];g.current>=a.end?(r++,u.push(a.to)):(g.current>=a.start&&(!a.char||Math.random()<w)&&(a.char=L(l)),u.push(_jsxruntime.jsxs.call(void 0, "span",{className:"relative inline-block",children:[_jsxruntime.jsx.call(void 0, "span",{className:"invisible select-none","aria-hidden":"true",children:a.to===" "?"\xA0":a.to}),g.current>=a.start&&_jsxruntime.jsx.call(void 0, "span",{className:"absolute inset-0 flex items-center justify-center opacity-50 font-mono leading-none",children:a.char})]},o)))}E(x(d,u,{current:0})),r===y.current.length?A(!0):(g.current++,t.current=requestAnimationFrame(M))},I=r=>{t.current&&cancelAnimationFrame(t.current),O(r),A(!1)},_=_react.useRef.call(void 0, !1);_react.useEffect.call(void 0, ()=>{if(m)return _.current=!0,F.current=!0,A(!1),t.current&&cancelAnimationFrame(t.current),t.current=requestAnimationFrame(C),()=>{t.current&&cancelAnimationFrame(t.current)};if(_.current)return _.current=!1,S(),t.current=requestAnimationFrame(M),()=>{t.current&&cancelAnimationFrame(t.current)}},[m,f]),_react.useEffect.call(void 0, ()=>{if(m)return;let r=new IntersectionObserver(u=>{if(u[0].isIntersecting&&!F.current){F.current=!0;let n=setTimeout(()=>{S(),t.current=requestAnimationFrame(M)},s);return()=>clearTimeout(n)}},{threshold:.1});return T.current&&r.observe(T.current),()=>{r.disconnect(),t.current&&cancelAnimationFrame(t.current)}},[f,s,m]),_react.useEffect.call(void 0, ()=>{if(!(!b||m||!F.current))return S(),t.current=requestAnimationFrame(M),()=>{t.current&&cancelAnimationFrame(t.current)}},[d]);let Q=()=>{b&&I(b)},V=()=>{b&&I(e)};return _jsxruntime.jsx.call(void 0, "span",{ref:T,className:_chunkFUYXCJOQjs.a.call(void 0, "inline-block whitespace-pre-wrap",c),onMouseEnter:Q,onMouseLeave:V,children:j?d:$})}exports.a = Y;
3
+ //# sourceMappingURL=chunk-EBNJXPHG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/aktoriukas/Documents/Projects/alkimi/alkimi-ui-kit/dist/chunk-EBNJXPHG.js","../src/components/TextDecoder.tsx"],"names":["SYMBOLS","randomChar","symbols","extractText","node","React","props","injectScrambledText","scrambledChars","indexObj","text","result","i","jsx"],"mappings":"AAAA,qLAAY;AACZ,sDAAuC,4ECOhC,+CAgCC,IA9BFA,CAAAA,CAAU,kCAAA,CAEVC,CAAAA,CAAcC,CAAAA,EAClBA,CAAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,CAAA,CAAIA,CAAAA,CAAQ,MAAM,CAAC,CAAA,CAE9CC,CAAAA,CAAeC,CAAAA,EAA4B,CAC/C,EAAA,CAAI,OAAOA,CAAAA,EAAS,QAAA,EAAY,OAAOA,CAAAA,EAAS,QAAA,CAAU,OAAO,MAAA,CAAOA,CAAI,CAAA,CAC5E,EAAA,CAAI,KAAA,CAAM,OAAA,CAAQA,CAAI,CAAA,CAAG,OAAOA,CAAAA,CAAK,GAAA,CAAID,CAAW,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA,CAC7D,EAAA,CAAIE,eAAAA,CAAM,cAAA,CAAeD,CAAI,CAAA,CAAG,CAC9B,IAAME,CAAAA,CAAQF,CAAAA,CAAK,KAAA,CACnB,MAAA,CACGE,CAAAA,CAAM,IAAA,EAAQ,EAAA,CAAA,CAAA,CACdA,CAAAA,CAAM,KAAA,EAAS,EAAA,CAAA,CAAA,CACfA,CAAAA,CAAM,KAAA,EAAS,EAAA,CAAA,CAChBH,CAAAA,CAAYG,CAAAA,CAAM,QAAQ,CAE9B,CACA,MAAO,EACT,CAAA,CAEMC,CAAAA,CAAsB,CAC1BH,CAAAA,CACAI,CAAAA,CACAC,CAAAA,CAAAA,EACc,CACd,EAAA,CAAI,OAAOL,CAAAA,EAAS,QAAA,EAAY,OAAOA,CAAAA,EAAS,QAAA,CAAU,CACxD,IAAMM,CAAAA,CAAO,MAAA,CAAON,CAAI,CAAA,CAClBO,CAAAA,CAAiC,CAAC,CAAA,CACxC,GAAA,CAAA,IAASC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIF,CAAAA,CAAK,MAAA,CAAQE,CAAAA,EAAAA,CAC/BD,CAAAA,CAAO,IAAA,CACLE,6BAAAA,eAACR,CAAM,QAAA,CAAN,CACE,QAAA,CAAAG,CAAAA,CAAeC,CAAAA,CAAS,OAAO,CAAA,EAAK,EAAA,CAAA,CADlB,CAAA,KAAA,EAAQA,CAAAA,CAAS,OAAO,CAAA,CAAA","file":"/Users/aktoriukas/Documents/Projects/alkimi/alkimi-ui-kit/dist/chunk-EBNJXPHG.js","sourcesContent":[null,"\"use client\"\nimport { cn } from \"@/lib/utils\"\nimport React, {\n useState,\n useEffect,\n useMemo,\n useRef,\n ReactNode,\n} from \"react\"\n\nconst SYMBOLS = \"!<>-_\\\\/[]{}—=+*^?#________\"\n\nconst randomChar = (symbols: string) =>\n symbols[Math.floor(Math.random() * symbols.length)]\n\nconst extractText = (node: ReactNode): string => {\n if (typeof node === \"string\" || typeof node === \"number\") return String(node)\n if (Array.isArray(node)) return node.map(extractText).join(\"\")\n if (React.isValidElement(node)) {\n const props = node.props as any\n return (\n (props.text || \"\") +\n (props.label || \"\") +\n (props.title || \"\") +\n extractText(props.children)\n )\n }\n return \"\"\n}\n\nconst injectScrambledText = (\n node: ReactNode,\n scrambledChars: (string | ReactNode)[],\n indexObj: { current: number }\n): ReactNode => {\n if (typeof node === \"string\" || typeof node === \"number\") {\n const text = String(node)\n const result: (string | ReactNode)[] = []\n for (let i = 0; i < text.length; i++) {\n result.push(\n <React.Fragment key={`char-${indexObj.current}`}>\n {scrambledChars[indexObj.current] || \"\"}\n </React.Fragment>\n )\n indexObj.current++\n }\n return result\n }\n\n if (Array.isArray(node)) {\n return node.map((child, idx) => (\n <React.Fragment key={`arr-${idx}-${indexObj.current}`}>\n {injectScrambledText(child, scrambledChars, indexObj)}\n </React.Fragment>\n ))\n }\n\n if (React.isValidElement(node)) {\n const props = node.props as any\n const newProps: any = {}\n\n if (props.children) {\n newProps.children = injectScrambledText(\n props.children,\n scrambledChars,\n indexObj\n )\n }\n return React.cloneElement(node, newProps)\n }\n return node\n}\n\nexport interface TextDecoderProps {\n children: ReactNode\n className?: string\n duration?: number\n symbols?: string\n delay?: number\n isLoading?: boolean\n speed?: number\n hoverContent?: ReactNode\n}\n\nexport default function TextDecoder ({\n children,\n className,\n duration = 40,\n symbols = SYMBOLS,\n delay = 0,\n isLoading = false,\n speed = 0.28,\n hoverContent,\n}: TextDecoderProps) {\n const [outputNodes, setOutputNodes] = useState<ReactNode>(null)\n const [isComplete, setIsComplete] = useState(false)\n const [targetContent, setTargetContent] = useState<ReactNode>(children)\n const elementRef = useRef<HTMLSpanElement>(null)\n const frameRef = useRef(0)\n const queueRef = useRef<\n { to: string; start: number; end: number; char?: string }[]\n >([])\n const rafRef = useRef<number | null>(null)\n const hasAnimatedRef = useRef(false)\n\n const fullText = useMemo(() => extractText(targetContent), [targetContent])\n\n const setupQueue = () => {\n const newQueue = []\n for (let i = 0; i < fullText.length; i++) {\n const to = fullText[i]\n const start = Math.floor(Math.random() * (duration * 0.5))\n const end = start + Math.floor(Math.random() * (duration * 0.5))\n newQueue.push({ to, start, end })\n }\n queueRef.current = newQueue\n frameRef.current = 0\n setIsComplete(false)\n }\n\n const loadingCharsRef = useRef<(string | undefined)[]>([])\n\n const updateLoading = () => {\n const currentScrambledChars: (string | ReactNode)[] = []\n\n if (loadingCharsRef.current.length !== fullText.length) {\n loadingCharsRef.current = new Array(fullText.length).fill(undefined)\n }\n\n for (let i = 0; i < fullText.length; i++) {\n const char = fullText[i]\n\n if (char === \" \") {\n currentScrambledChars.push(\" \")\n } else {\n if (!loadingCharsRef.current[i] || Math.random() < speed) {\n loadingCharsRef.current[i] = randomChar(symbols)\n }\n\n currentScrambledChars.push(\n <span key={i} className=\"relative inline-block\">\n <span className=\"invisible select-none\" aria-hidden=\"true\">\n {char}\n </span>\n <span className=\"absolute inset-0 flex items-center justify-center opacity-50 font-mono leading-none\">\n {loadingCharsRef.current[i]}\n </span>\n </span>\n )\n }\n }\n\n const indexObj = { current: 0 }\n setOutputNodes(\n injectScrambledText(targetContent, currentScrambledChars, indexObj)\n )\n\n rafRef.current = requestAnimationFrame(updateLoading)\n }\n\n const update = () => {\n let complete = 0\n const currentScrambledChars: (string | ReactNode)[] = []\n\n for (let i = 0; i < queueRef.current.length; i++) {\n const item = queueRef.current[i]\n\n if (frameRef.current >= item.end) {\n complete++\n currentScrambledChars.push(item.to)\n } else {\n if (frameRef.current >= item.start) {\n if (!item.char || Math.random() < speed) {\n item.char = randomChar(symbols)\n }\n }\n\n currentScrambledChars.push(\n <span key={i} className=\"relative inline-block\">\n <span className=\"invisible select-none\" aria-hidden=\"true\">\n {item.to === \" \" ? \"\\u00A0\" : item.to}\n </span>\n {frameRef.current >= item.start && (\n <span className=\"absolute inset-0 flex items-center justify-center opacity-50 font-mono leading-none\">\n {item.char}\n </span>\n )}\n </span>\n )\n }\n }\n\n const indexObj = { current: 0 }\n setOutputNodes(\n injectScrambledText(targetContent, currentScrambledChars, indexObj)\n )\n\n if (complete === queueRef.current.length) {\n setIsComplete(true)\n } else {\n frameRef.current++\n rafRef.current = requestAnimationFrame(update)\n }\n }\n\n const triggerAnimation = (content: ReactNode) => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n setTargetContent(content)\n setIsComplete(false)\n }\n\n const wasLoadingRef = useRef(false)\n\n useEffect(() => {\n if (isLoading) {\n wasLoadingRef.current = true\n hasAnimatedRef.current = true\n setIsComplete(false)\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n rafRef.current = requestAnimationFrame(updateLoading)\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n }\n }\n\n if (wasLoadingRef.current) {\n wasLoadingRef.current = false\n setupQueue()\n rafRef.current = requestAnimationFrame(update)\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n }\n }\n }, [isLoading, fullText])\n\n useEffect(() => {\n if (isLoading) return\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting && !hasAnimatedRef.current) {\n hasAnimatedRef.current = true\n const timeoutId = setTimeout(() => {\n setupQueue()\n rafRef.current = requestAnimationFrame(update)\n }, delay)\n return () => clearTimeout(timeoutId)\n }\n },\n { threshold: 0.1 }\n )\n\n if (elementRef.current) observer.observe(elementRef.current)\n\n return () => {\n observer.disconnect()\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n }\n }, [fullText, delay, isLoading])\n\n // Handle hover mode animation triggers\n useEffect(() => {\n if (!hoverContent || isLoading || !hasAnimatedRef.current) return\n\n setupQueue()\n rafRef.current = requestAnimationFrame(update)\n\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n }\n }, [targetContent])\n\n const handleMouseEnter = () => {\n if (!hoverContent) return\n triggerAnimation(hoverContent)\n }\n\n const handleMouseLeave = () => {\n if (!hoverContent) return\n triggerAnimation(children)\n }\n\n return (\n <span\n ref={elementRef}\n className={cn(\"inline-block whitespace-pre-wrap\", className)}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {isComplete ? targetContent : outputNodes}\n </span>\n )\n}\n"]}
@@ -9,7 +9,8 @@ interface TextDecoderProps {
9
9
  delay?: number;
10
10
  isLoading?: boolean;
11
11
  speed?: number;
12
+ hoverContent?: ReactNode;
12
13
  }
13
- declare function TextDecoder({ children, className, duration, symbols, delay, isLoading, speed, }: TextDecoderProps): react_jsx_runtime.JSX.Element;
14
+ declare function TextDecoder({ children, className, duration, symbols, delay, isLoading, speed, hoverContent, }: TextDecoderProps): react_jsx_runtime.JSX.Element;
14
15
 
15
16
  export { type TextDecoderProps, TextDecoder as default };
@@ -9,7 +9,8 @@ interface TextDecoderProps {
9
9
  delay?: number;
10
10
  isLoading?: boolean;
11
11
  speed?: number;
12
+ hoverContent?: ReactNode;
12
13
  }
13
- declare function TextDecoder({ children, className, duration, symbols, delay, isLoading, speed, }: TextDecoderProps): react_jsx_runtime.JSX.Element;
14
+ declare function TextDecoder({ children, className, duration, symbols, delay, isLoading, speed, hoverContent, }: TextDecoderProps): react_jsx_runtime.JSX.Element;
14
15
 
15
16
  export { type TextDecoderProps, TextDecoder as default };
@@ -1,3 +1,3 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
- "use client";var _chunkEWRKHBIVjs = require('../chunk-EWRKHBIV.js');require('../chunk-FUYXCJOQ.js');require('../chunk-XYO4VLMF.js');exports.default = _chunkEWRKHBIVjs.a;
2
+ "use client";var _chunkEBNJXPHGjs = require('../chunk-EBNJXPHG.js');require('../chunk-FUYXCJOQ.js');require('../chunk-XYO4VLMF.js');exports.default = _chunkEBNJXPHGjs.a;
3
3
  //# sourceMappingURL=TextDecoder.js.map
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- "use client";import{a}from"../chunk-CMV76O4U.mjs";import"../chunk-S5TKCF6T.mjs";import"../chunk-KPAOPUY2.mjs";export{a as default};
2
+ "use client";import{a}from"../chunk-23ZKDWV4.mjs";import"../chunk-S5TKCF6T.mjs";import"../chunk-KPAOPUY2.mjs";export{a as default};
3
3
  //# sourceMappingURL=TextDecoder.mjs.map
@@ -3,7 +3,7 @@ import * as React from 'react';
3
3
  import { VariantProps } from 'class-variance-authority';
4
4
 
5
5
  declare const buttonVariants: (props?: ({
6
- variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link" | null | undefined;
6
+ variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
7
7
  size?: "default" | "sm" | "lg" | "icon" | "none" | null | undefined;
8
8
  } & class_variance_authority_types.ClassProp) | undefined) => string;
9
9
  interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
@@ -3,7 +3,7 @@ import * as React from 'react';
3
3
  import { VariantProps } from 'class-variance-authority';
4
4
 
5
5
  declare const buttonVariants: (props?: ({
6
- variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link" | null | undefined;
6
+ variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
7
7
  size?: "default" | "sm" | "lg" | "icon" | "none" | null | undefined;
8
8
  } & class_variance_authority_types.ClassProp) | undefined) => string;
9
9
  interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
@@ -26,7 +26,7 @@ declare const CommandInput: React.ForwardRefExoticComponent<Omit<Omit<Pick<Pick<
26
26
  ref?: React.Ref<HTMLInputElement>;
27
27
  } & {
28
28
  asChild?: boolean;
29
- }, "asChild" | "key" | keyof React.InputHTMLAttributes<HTMLInputElement>>, "type" | "value" | "onChange"> & {
29
+ }, "asChild" | "key" | keyof React.InputHTMLAttributes<HTMLInputElement>>, "type" | "onChange" | "value"> & {
30
30
  value?: string;
31
31
  onValueChange?: (search: string) => void;
32
32
  } & React.RefAttributes<HTMLInputElement>, "ref"> & React.RefAttributes<HTMLInputElement>>;
@@ -70,7 +70,7 @@ declare const CommandItem: React.ForwardRefExoticComponent<Omit<{
70
70
  ref?: React.Ref<HTMLDivElement>;
71
71
  } & {
72
72
  asChild?: boolean;
73
- }, "asChild" | "key" | keyof React.HTMLAttributes<HTMLDivElement>>, "disabled" | "value" | "onSelect"> & {
73
+ }, "asChild" | "key" | keyof React.HTMLAttributes<HTMLDivElement>>, "onSelect" | "disabled" | "value"> & {
74
74
  disabled?: boolean;
75
75
  onSelect?: (value: string) => void;
76
76
  value?: string;
@@ -26,7 +26,7 @@ declare const CommandInput: React.ForwardRefExoticComponent<Omit<Omit<Pick<Pick<
26
26
  ref?: React.Ref<HTMLInputElement>;
27
27
  } & {
28
28
  asChild?: boolean;
29
- }, "asChild" | "key" | keyof React.InputHTMLAttributes<HTMLInputElement>>, "type" | "value" | "onChange"> & {
29
+ }, "asChild" | "key" | keyof React.InputHTMLAttributes<HTMLInputElement>>, "type" | "onChange" | "value"> & {
30
30
  value?: string;
31
31
  onValueChange?: (search: string) => void;
32
32
  } & React.RefAttributes<HTMLInputElement>, "ref"> & React.RefAttributes<HTMLInputElement>>;
@@ -70,7 +70,7 @@ declare const CommandItem: React.ForwardRefExoticComponent<Omit<{
70
70
  ref?: React.Ref<HTMLDivElement>;
71
71
  } & {
72
72
  asChild?: boolean;
73
- }, "asChild" | "key" | keyof React.HTMLAttributes<HTMLDivElement>>, "disabled" | "value" | "onSelect"> & {
73
+ }, "asChild" | "key" | keyof React.HTMLAttributes<HTMLDivElement>>, "onSelect" | "disabled" | "value"> & {
74
74
  disabled?: boolean;
75
75
  onSelect?: (value: string) => void;
76
76
  value?: string;
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
- var _chunk5X26XR44js = require('./chunk-5X26XR44.js');var _chunkVBPIXXIAjs = require('./chunk-VBPIXXIA.js');var _chunkTDMRUCR6js = require('./chunk-TDMRUCR6.js');var _chunkEKCAULFPjs = require('./chunk-EKCAULFP.js');var _chunkLQMOWEA7js = require('./chunk-LQMOWEA7.js');var _chunkZ5V4P3ECjs = require('./chunk-Z5V4P3EC.js');var _chunkDMMKR6TYjs = require('./chunk-DMMKR6TY.js');var _chunkRRAIGAHUjs = require('./chunk-RRAIGAHU.js');var _chunk7SOZ6MOVjs = require('./chunk-7SOZ6MOV.js');var _chunkUNR6ATUHjs = require('./chunk-UNR6ATUH.js');var _chunk5L5DM2X5js = require('./chunk-5L5DM2X5.js');var _chunk3TLCOZ5Rjs = require('./chunk-3TLCOZ5R.js');var _chunkRKRTEMMZjs = require('./chunk-RKRTEMMZ.js');var _chunkRJMIOBXZjs = require('./chunk-RJMIOBXZ.js');var _chunkEIM5R7AJjs = require('./chunk-EIM5R7AJ.js');var _chunkCT2CRYC2js = require('./chunk-CT2CRYC2.js');var _chunkUSPGZYMVjs = require('./chunk-USPGZYMV.js');var _chunkK4GMCVHOjs = require('./chunk-K4GMCVHO.js');var _chunkI5INE4KGjs = require('./chunk-I5INE4KG.js');var _chunkWYRD4UAKjs = require('./chunk-WYRD4UAK.js');var _chunkBANQNQD6js = require('./chunk-BANQNQD6.js');var _chunkULIOO55Ijs = require('./chunk-ULIOO55I.js');var _chunk7J2ETVGKjs = require('./chunk-7J2ETVGK.js');var _chunkBV7RXRSLjs = require('./chunk-BV7RXRSL.js');require('./chunk-3BVMHDYA.js');var _chunkDHHZMQ72js = require('./chunk-DHHZMQ72.js');var _chunkGRXC46JCjs = require('./chunk-GRXC46JC.js');var _chunkXQILGD5Bjs = require('./chunk-XQILGD5B.js');var _chunk3PEPOFYUjs = require('./chunk-3PEPOFYU.js');var _chunkEJTY2ABYjs = require('./chunk-EJTY2ABY.js');var _chunkWFD523CVjs = require('./chunk-WFD523CV.js');var _chunkEWRKHBIVjs = require('./chunk-EWRKHBIV.js');var _chunkUJZP6L4Sjs = require('./chunk-UJZP6L4S.js');var _chunk372VUZFEjs = require('./chunk-372VUZFE.js');var _chunkFUYXCJOQjs = require('./chunk-FUYXCJOQ.js');require('./chunk-XYO4VLMF.js');exports.Accordion = _chunkUJZP6L4Sjs.a; exports.AccordionContent = _chunkUJZP6L4Sjs.d; exports.AccordionItem = _chunkUJZP6L4Sjs.b; exports.AccordionTrigger = _chunkUJZP6L4Sjs.c; exports.Button = _chunkXQILGD5Bjs.b; exports.Calendar = _chunkGRXC46JCjs.a; exports.Checkbox = _chunkWYRD4UAKjs.a; exports.Combobox = _chunkBANQNQD6js.a; exports.Command = _chunk7J2ETVGKjs.a; exports.CommandDialog = _chunk7J2ETVGKjs.b; exports.CommandEmpty = _chunk7J2ETVGKjs.e; exports.CommandGroup = _chunk7J2ETVGKjs.f; exports.CommandInput = _chunk7J2ETVGKjs.c; exports.CommandItem = _chunk7J2ETVGKjs.h; exports.CommandList = _chunk7J2ETVGKjs.d; exports.CommandSeparator = _chunk7J2ETVGKjs.g; exports.CommandShortcut = _chunk7J2ETVGKjs.i; exports.DatePicker = _chunkDHHZMQ72js.a; exports.DateRangePicker = _chunk3TLCOZ5Rjs.a; exports.Dialog = _chunkBV7RXRSLjs.a; exports.DialogClose = _chunkBV7RXRSLjs.d; exports.DialogContent = _chunkBV7RXRSLjs.f; exports.DialogDescription = _chunkBV7RXRSLjs.j; exports.DialogFooter = _chunkBV7RXRSLjs.h; exports.DialogHeader = _chunkBV7RXRSLjs.g; exports.DialogOverlay = _chunkBV7RXRSLjs.e; exports.DialogPortal = _chunkBV7RXRSLjs.c; exports.DialogTitle = _chunkBV7RXRSLjs.i; exports.DialogTrigger = _chunkBV7RXRSLjs.b; exports.Drawer = _chunkRKRTEMMZjs.b; exports.DrawerBody = _chunkRKRTEMMZjs.e; exports.DrawerFooter = _chunkRKRTEMMZjs.f; exports.DrawerHeader = _chunkRKRTEMMZjs.c; exports.DrawerTitle = _chunkRKRTEMMZjs.d; exports.DropdownMenu = _chunkEIM5R7AJjs.a; exports.DropdownMenuCheckboxItem = _chunkEIM5R7AJjs.k; exports.DropdownMenuContent = _chunkEIM5R7AJjs.i; exports.DropdownMenuGroup = _chunkEIM5R7AJjs.c; exports.DropdownMenuItem = _chunkEIM5R7AJjs.j; exports.DropdownMenuLabel = _chunkEIM5R7AJjs.m; exports.DropdownMenuPortal = _chunkEIM5R7AJjs.d; exports.DropdownMenuRadioGroup = _chunkEIM5R7AJjs.f; exports.DropdownMenuRadioItem = _chunkEIM5R7AJjs.l; exports.DropdownMenuSeparator = _chunkEIM5R7AJjs.n; exports.DropdownMenuShortcut = _chunkEIM5R7AJjs.o; exports.DropdownMenuSub = _chunkEIM5R7AJjs.e; exports.DropdownMenuSubContent = _chunkEIM5R7AJjs.h; exports.DropdownMenuSubTrigger = _chunkEIM5R7AJjs.g; exports.DropdownMenuTrigger = _chunkEIM5R7AJjs.b; exports.Field = _chunkCT2CRYC2js.a; exports.FieldDescription = _chunkCT2CRYC2js.c; exports.FieldLabel = _chunkCT2CRYC2js.b; exports.FileUpload = _chunkUSPGZYMVjs.a; exports.GeometricFluidGrid = _chunk3PEPOFYUjs.a; exports.GlitchLink = _chunkEJTY2ABYjs.b; exports.Input = _chunkK4GMCVHOjs.a; exports.Label = _chunkI5INE4KGjs.a; exports.PixelLoad = _chunkWFD523CVjs.a; exports.Popover = _chunkULIOO55Ijs.a; exports.PopoverContent = _chunkULIOO55Ijs.c; exports.PopoverTrigger = _chunkULIOO55Ijs.b; exports.RadioGroup = _chunkZ5V4P3ECjs.a; exports.RadioGroupItem = _chunkZ5V4P3ECjs.b; exports.ScrollArea = _chunkRJMIOBXZjs.a; exports.ScrollBar = _chunkRJMIOBXZjs.b; exports.Separator = _chunk7SOZ6MOVjs.a; exports.Sheet = _chunkUNR6ATUHjs.a; exports.SheetClose = _chunkUNR6ATUHjs.c; exports.SheetContent = _chunkUNR6ATUHjs.f; exports.SheetDescription = _chunkUNR6ATUHjs.j; exports.SheetFooter = _chunkUNR6ATUHjs.h; exports.SheetHeader = _chunkUNR6ATUHjs.g; exports.SheetOverlay = _chunkUNR6ATUHjs.e; exports.SheetPortal = _chunkUNR6ATUHjs.d; exports.SheetTitle = _chunkUNR6ATUHjs.i; exports.SheetTrigger = _chunkUNR6ATUHjs.b; exports.Sidebar = _chunkDMMKR6TYjs.d; exports.SidebarBanner = _chunkDMMKR6TYjs.c; exports.SidebarContent = _chunkDMMKR6TYjs.l; exports.SidebarFooter = _chunkDMMKR6TYjs.j; exports.SidebarGroup = _chunkDMMKR6TYjs.m; exports.SidebarGroupAction = _chunkDMMKR6TYjs.o; exports.SidebarGroupContent = _chunkDMMKR6TYjs.p; exports.SidebarGroupLabel = _chunkDMMKR6TYjs.n; exports.SidebarHeader = _chunkDMMKR6TYjs.i; exports.SidebarInput = _chunkDMMKR6TYjs.h; exports.SidebarInset = _chunkDMMKR6TYjs.g; exports.SidebarMenu = _chunkDMMKR6TYjs.q; exports.SidebarMenuAction = _chunkDMMKR6TYjs.t; exports.SidebarMenuBadge = _chunkDMMKR6TYjs.u; exports.SidebarMenuButton = _chunkDMMKR6TYjs.s; exports.SidebarMenuItem = _chunkDMMKR6TYjs.r; exports.SidebarMenuSkeleton = _chunkDMMKR6TYjs.v; exports.SidebarMenuSub = _chunkDMMKR6TYjs.w; exports.SidebarMenuSubButton = _chunkDMMKR6TYjs.y; exports.SidebarMenuSubItem = _chunkDMMKR6TYjs.x; exports.SidebarProvider = _chunkDMMKR6TYjs.b; exports.SidebarRail = _chunkDMMKR6TYjs.f; exports.SidebarSeparator = _chunkDMMKR6TYjs.k; exports.SidebarTrigger = _chunkDMMKR6TYjs.e; exports.Skeleton = _chunk5L5DM2X5js.a; exports.Table = _chunk5X26XR44js.a; exports.TableBody = _chunk5X26XR44js.c; exports.TableCaption = _chunk5X26XR44js.i; exports.TableCell = _chunk5X26XR44js.g; exports.TableCellAction = _chunk5X26XR44js.h; exports.TableFooter = _chunk5X26XR44js.d; exports.TableHead = _chunk5X26XR44js.f; exports.TableHeader = _chunk5X26XR44js.b; exports.TableRow = _chunk5X26XR44js.e; exports.Tabs = _chunkVBPIXXIAjs.a; exports.TabsContent = _chunkVBPIXXIAjs.d; exports.TabsList = _chunkVBPIXXIAjs.b; exports.TabsTrigger = _chunkVBPIXXIAjs.c; exports.TextDecoder = _chunkEWRKHBIVjs.a; exports.Textarea = _chunkTDMRUCR6js.a; exports.Toaster = _chunkEKCAULFPjs.b; exports.Tooltip = _chunkRRAIGAHUjs.b; exports.TooltipContent = _chunkRRAIGAHUjs.d; exports.TooltipProvider = _chunkRRAIGAHUjs.a; exports.TooltipTrigger = _chunkRRAIGAHUjs.c; exports.TreeSelect = _chunkLQMOWEA7js.a; exports.buttonVariants = _chunkXQILGD5Bjs.a; exports.cn = _chunkFUYXCJOQjs.a; exports.getSeedColor = _chunk372VUZFEjs.b; exports.getSphericalGradient = _chunk372VUZFEjs.a; exports.toast = _chunkEKCAULFPjs.a; exports.useDrawer = _chunkRKRTEMMZjs.a; exports.useSidebar = _chunkDMMKR6TYjs.a;
2
+ var _chunk5X26XR44js = require('./chunk-5X26XR44.js');var _chunkVBPIXXIAjs = require('./chunk-VBPIXXIA.js');var _chunkTDMRUCR6js = require('./chunk-TDMRUCR6.js');var _chunkEKCAULFPjs = require('./chunk-EKCAULFP.js');var _chunkLQMOWEA7js = require('./chunk-LQMOWEA7.js');var _chunkZ5V4P3ECjs = require('./chunk-Z5V4P3EC.js');var _chunkDMMKR6TYjs = require('./chunk-DMMKR6TY.js');var _chunkRRAIGAHUjs = require('./chunk-RRAIGAHU.js');var _chunk7SOZ6MOVjs = require('./chunk-7SOZ6MOV.js');var _chunkUNR6ATUHjs = require('./chunk-UNR6ATUH.js');var _chunk5L5DM2X5js = require('./chunk-5L5DM2X5.js');var _chunk3TLCOZ5Rjs = require('./chunk-3TLCOZ5R.js');var _chunkRKRTEMMZjs = require('./chunk-RKRTEMMZ.js');var _chunkRJMIOBXZjs = require('./chunk-RJMIOBXZ.js');var _chunkEIM5R7AJjs = require('./chunk-EIM5R7AJ.js');var _chunkCT2CRYC2js = require('./chunk-CT2CRYC2.js');var _chunkUSPGZYMVjs = require('./chunk-USPGZYMV.js');var _chunkK4GMCVHOjs = require('./chunk-K4GMCVHO.js');var _chunkI5INE4KGjs = require('./chunk-I5INE4KG.js');var _chunkWYRD4UAKjs = require('./chunk-WYRD4UAK.js');var _chunkBANQNQD6js = require('./chunk-BANQNQD6.js');var _chunkULIOO55Ijs = require('./chunk-ULIOO55I.js');var _chunk7J2ETVGKjs = require('./chunk-7J2ETVGK.js');var _chunkBV7RXRSLjs = require('./chunk-BV7RXRSL.js');require('./chunk-3BVMHDYA.js');var _chunkDHHZMQ72js = require('./chunk-DHHZMQ72.js');var _chunkGRXC46JCjs = require('./chunk-GRXC46JC.js');var _chunkXQILGD5Bjs = require('./chunk-XQILGD5B.js');var _chunk3PEPOFYUjs = require('./chunk-3PEPOFYU.js');var _chunkEJTY2ABYjs = require('./chunk-EJTY2ABY.js');var _chunkWFD523CVjs = require('./chunk-WFD523CV.js');var _chunkEBNJXPHGjs = require('./chunk-EBNJXPHG.js');var _chunkUJZP6L4Sjs = require('./chunk-UJZP6L4S.js');var _chunk372VUZFEjs = require('./chunk-372VUZFE.js');var _chunkFUYXCJOQjs = require('./chunk-FUYXCJOQ.js');require('./chunk-XYO4VLMF.js');exports.Accordion = _chunkUJZP6L4Sjs.a; exports.AccordionContent = _chunkUJZP6L4Sjs.d; exports.AccordionItem = _chunkUJZP6L4Sjs.b; exports.AccordionTrigger = _chunkUJZP6L4Sjs.c; exports.Button = _chunkXQILGD5Bjs.b; exports.Calendar = _chunkGRXC46JCjs.a; exports.Checkbox = _chunkWYRD4UAKjs.a; exports.Combobox = _chunkBANQNQD6js.a; exports.Command = _chunk7J2ETVGKjs.a; exports.CommandDialog = _chunk7J2ETVGKjs.b; exports.CommandEmpty = _chunk7J2ETVGKjs.e; exports.CommandGroup = _chunk7J2ETVGKjs.f; exports.CommandInput = _chunk7J2ETVGKjs.c; exports.CommandItem = _chunk7J2ETVGKjs.h; exports.CommandList = _chunk7J2ETVGKjs.d; exports.CommandSeparator = _chunk7J2ETVGKjs.g; exports.CommandShortcut = _chunk7J2ETVGKjs.i; exports.DatePicker = _chunkDHHZMQ72js.a; exports.DateRangePicker = _chunk3TLCOZ5Rjs.a; exports.Dialog = _chunkBV7RXRSLjs.a; exports.DialogClose = _chunkBV7RXRSLjs.d; exports.DialogContent = _chunkBV7RXRSLjs.f; exports.DialogDescription = _chunkBV7RXRSLjs.j; exports.DialogFooter = _chunkBV7RXRSLjs.h; exports.DialogHeader = _chunkBV7RXRSLjs.g; exports.DialogOverlay = _chunkBV7RXRSLjs.e; exports.DialogPortal = _chunkBV7RXRSLjs.c; exports.DialogTitle = _chunkBV7RXRSLjs.i; exports.DialogTrigger = _chunkBV7RXRSLjs.b; exports.Drawer = _chunkRKRTEMMZjs.b; exports.DrawerBody = _chunkRKRTEMMZjs.e; exports.DrawerFooter = _chunkRKRTEMMZjs.f; exports.DrawerHeader = _chunkRKRTEMMZjs.c; exports.DrawerTitle = _chunkRKRTEMMZjs.d; exports.DropdownMenu = _chunkEIM5R7AJjs.a; exports.DropdownMenuCheckboxItem = _chunkEIM5R7AJjs.k; exports.DropdownMenuContent = _chunkEIM5R7AJjs.i; exports.DropdownMenuGroup = _chunkEIM5R7AJjs.c; exports.DropdownMenuItem = _chunkEIM5R7AJjs.j; exports.DropdownMenuLabel = _chunkEIM5R7AJjs.m; exports.DropdownMenuPortal = _chunkEIM5R7AJjs.d; exports.DropdownMenuRadioGroup = _chunkEIM5R7AJjs.f; exports.DropdownMenuRadioItem = _chunkEIM5R7AJjs.l; exports.DropdownMenuSeparator = _chunkEIM5R7AJjs.n; exports.DropdownMenuShortcut = _chunkEIM5R7AJjs.o; exports.DropdownMenuSub = _chunkEIM5R7AJjs.e; exports.DropdownMenuSubContent = _chunkEIM5R7AJjs.h; exports.DropdownMenuSubTrigger = _chunkEIM5R7AJjs.g; exports.DropdownMenuTrigger = _chunkEIM5R7AJjs.b; exports.Field = _chunkCT2CRYC2js.a; exports.FieldDescription = _chunkCT2CRYC2js.c; exports.FieldLabel = _chunkCT2CRYC2js.b; exports.FileUpload = _chunkUSPGZYMVjs.a; exports.GeometricFluidGrid = _chunk3PEPOFYUjs.a; exports.GlitchLink = _chunkEJTY2ABYjs.b; exports.Input = _chunkK4GMCVHOjs.a; exports.Label = _chunkI5INE4KGjs.a; exports.PixelLoad = _chunkWFD523CVjs.a; exports.Popover = _chunkULIOO55Ijs.a; exports.PopoverContent = _chunkULIOO55Ijs.c; exports.PopoverTrigger = _chunkULIOO55Ijs.b; exports.RadioGroup = _chunkZ5V4P3ECjs.a; exports.RadioGroupItem = _chunkZ5V4P3ECjs.b; exports.ScrollArea = _chunkRJMIOBXZjs.a; exports.ScrollBar = _chunkRJMIOBXZjs.b; exports.Separator = _chunk7SOZ6MOVjs.a; exports.Sheet = _chunkUNR6ATUHjs.a; exports.SheetClose = _chunkUNR6ATUHjs.c; exports.SheetContent = _chunkUNR6ATUHjs.f; exports.SheetDescription = _chunkUNR6ATUHjs.j; exports.SheetFooter = _chunkUNR6ATUHjs.h; exports.SheetHeader = _chunkUNR6ATUHjs.g; exports.SheetOverlay = _chunkUNR6ATUHjs.e; exports.SheetPortal = _chunkUNR6ATUHjs.d; exports.SheetTitle = _chunkUNR6ATUHjs.i; exports.SheetTrigger = _chunkUNR6ATUHjs.b; exports.Sidebar = _chunkDMMKR6TYjs.d; exports.SidebarBanner = _chunkDMMKR6TYjs.c; exports.SidebarContent = _chunkDMMKR6TYjs.l; exports.SidebarFooter = _chunkDMMKR6TYjs.j; exports.SidebarGroup = _chunkDMMKR6TYjs.m; exports.SidebarGroupAction = _chunkDMMKR6TYjs.o; exports.SidebarGroupContent = _chunkDMMKR6TYjs.p; exports.SidebarGroupLabel = _chunkDMMKR6TYjs.n; exports.SidebarHeader = _chunkDMMKR6TYjs.i; exports.SidebarInput = _chunkDMMKR6TYjs.h; exports.SidebarInset = _chunkDMMKR6TYjs.g; exports.SidebarMenu = _chunkDMMKR6TYjs.q; exports.SidebarMenuAction = _chunkDMMKR6TYjs.t; exports.SidebarMenuBadge = _chunkDMMKR6TYjs.u; exports.SidebarMenuButton = _chunkDMMKR6TYjs.s; exports.SidebarMenuItem = _chunkDMMKR6TYjs.r; exports.SidebarMenuSkeleton = _chunkDMMKR6TYjs.v; exports.SidebarMenuSub = _chunkDMMKR6TYjs.w; exports.SidebarMenuSubButton = _chunkDMMKR6TYjs.y; exports.SidebarMenuSubItem = _chunkDMMKR6TYjs.x; exports.SidebarProvider = _chunkDMMKR6TYjs.b; exports.SidebarRail = _chunkDMMKR6TYjs.f; exports.SidebarSeparator = _chunkDMMKR6TYjs.k; exports.SidebarTrigger = _chunkDMMKR6TYjs.e; exports.Skeleton = _chunk5L5DM2X5js.a; exports.Table = _chunk5X26XR44js.a; exports.TableBody = _chunk5X26XR44js.c; exports.TableCaption = _chunk5X26XR44js.i; exports.TableCell = _chunk5X26XR44js.g; exports.TableCellAction = _chunk5X26XR44js.h; exports.TableFooter = _chunk5X26XR44js.d; exports.TableHead = _chunk5X26XR44js.f; exports.TableHeader = _chunk5X26XR44js.b; exports.TableRow = _chunk5X26XR44js.e; exports.Tabs = _chunkVBPIXXIAjs.a; exports.TabsContent = _chunkVBPIXXIAjs.d; exports.TabsList = _chunkVBPIXXIAjs.b; exports.TabsTrigger = _chunkVBPIXXIAjs.c; exports.TextDecoder = _chunkEBNJXPHGjs.a; exports.Textarea = _chunkTDMRUCR6js.a; exports.Toaster = _chunkEKCAULFPjs.b; exports.Tooltip = _chunkRRAIGAHUjs.b; exports.TooltipContent = _chunkRRAIGAHUjs.d; exports.TooltipProvider = _chunkRRAIGAHUjs.a; exports.TooltipTrigger = _chunkRRAIGAHUjs.c; exports.TreeSelect = _chunkLQMOWEA7js.a; exports.buttonVariants = _chunkXQILGD5Bjs.a; exports.cn = _chunkFUYXCJOQjs.a; exports.getSeedColor = _chunk372VUZFEjs.b; exports.getSphericalGradient = _chunk372VUZFEjs.a; exports.toast = _chunkEKCAULFPjs.a; exports.useDrawer = _chunkRKRTEMMZjs.a; exports.useSidebar = _chunkDMMKR6TYjs.a;
3
3
  //# sourceMappingURL=index.js.map
package/dist/index.mjs CHANGED
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import{a as It,b as jt,c as Ft,d as Gt,e as Lt,f as Ht,g as Rt,h as At,i as Nt}from"./chunk-C7GTPYMH.mjs";import{a as e,b as o,c as i,d as n}from"./chunk-WZ5F5VT3.mjs";import{a as ct}from"./chunk-MQMO7DMT.mjs";import{a as ma,b as fa}from"./chunk-NEY5JU5Z.mjs";import{a as la}from"./chunk-574USYNO.mjs";import{a as pa,b as ha}from"./chunk-IKJ4QRNB.mjs";import{a as T,b as M,c as P,d as I,e as j,f as F,g as G,h as L,i as H,j as R,k as A,l as N,m as B,n as E,o as U,p as O,q,r as V,s as J,t as K,u as Q,v as W,w as X,x as Y,y as Z}from"./chunk-TYRJ7CQV.mjs";import{a as _,b as S,c as D,d as C}from"./chunk-QC5MA4WL.mjs";import{a as h}from"./chunk-YBV4CPVD.mjs";import{a as g,b as v,c as w,d as u,e as m,f,g as b,h as x,i as y,j as k}from"./chunk-QVMQ55JW.mjs";import{a as z}from"./chunk-CNRZOMR4.mjs";import{a as ht}from"./chunk-UAUSYTY4.mjs";import{a as at,b as rt,c as et,d as ot,e as it,f as nt}from"./chunk-DKMCJGI4.mjs";import{a as $,b as tt}from"./chunk-5TVDBV74.mjs";import{a as ut,b as mt,c as ft,d as bt,e as xt,f as yt,g as kt,h as zt,i as _t,j as St,k as Dt,l as Ct,m as Tt,n as Mt,o as Pt}from"./chunk-NKLBPY3T.mjs";import{a as gt,b as vt,c as wt}from"./chunk-L36V45FD.mjs";import{a as st}from"./chunk-PD43W3YN.mjs";import{a as p}from"./chunk-NEOUFWZN.mjs";import{a as dt}from"./chunk-WY4HCUAP.mjs";import{a as da}from"./chunk-NKELJSLY.mjs";import{a as sa}from"./chunk-FFYMV22V.mjs";import{a as Bt,b as Et,c as Ut}from"./chunk-FZ3NXOFK.mjs";import{a as $t,b as ta,c as aa,d as ra,e as ea,f as oa,g as ia,h as na,i as ca}from"./chunk-DATWXRPT.mjs";import{a as Ot,b as qt,c as Vt,d as Jt,e as Kt,f as Qt,g as Wt,h as Xt,i as Yt,j as Zt}from"./chunk-KLU33CJI.mjs";import"./chunk-4LR7SOCY.mjs";import{a as pt}from"./chunk-7FUNOEYE.mjs";import{a as lt}from"./chunk-QMJVRGPB.mjs";import{a,b as r}from"./chunk-BLHKJHNV.mjs";import{a as l}from"./chunk-Z6RAFZ3C.mjs";import{b as s}from"./chunk-AEZ5XKKG.mjs";import{a as d}from"./chunk-7ONK6HHN.mjs";import{a as c}from"./chunk-CMV76O4U.mjs";import{a as ga,b as va,c as wa,d as ua}from"./chunk-4PTRLHCB.mjs";import{a as ba,b as xa}from"./chunk-4LUOGI24.mjs";import{a as t}from"./chunk-S5TKCF6T.mjs";import"./chunk-KPAOPUY2.mjs";export{ga as Accordion,ua as AccordionContent,va as AccordionItem,wa as AccordionTrigger,r as Button,lt as Calendar,da as Checkbox,sa as Combobox,$t as Command,ta as CommandDialog,ea as CommandEmpty,oa as CommandGroup,aa as CommandInput,na as CommandItem,ra as CommandList,ia as CommandSeparator,ca as CommandShortcut,pt as DatePicker,ht as DateRangePicker,Ot as Dialog,Jt as DialogClose,Qt as DialogContent,Zt as DialogDescription,Xt as DialogFooter,Wt as DialogHeader,Kt as DialogOverlay,Vt as DialogPortal,Yt as DialogTitle,qt as DialogTrigger,rt as Drawer,it as DrawerBody,nt as DrawerFooter,et as DrawerHeader,ot as DrawerTitle,ut as DropdownMenu,Dt as DropdownMenuCheckboxItem,_t as DropdownMenuContent,ft as DropdownMenuGroup,St as DropdownMenuItem,Tt as DropdownMenuLabel,bt as DropdownMenuPortal,yt as DropdownMenuRadioGroup,Ct as DropdownMenuRadioItem,Mt as DropdownMenuSeparator,Pt as DropdownMenuShortcut,xt as DropdownMenuSub,zt as DropdownMenuSubContent,kt as DropdownMenuSubTrigger,mt as DropdownMenuTrigger,gt as Field,wt as FieldDescription,vt as FieldLabel,st as FileUpload,l as GeometricFluidGrid,s as GlitchLink,p as Input,dt as Label,d as PixelLoad,Bt as Popover,Ut as PopoverContent,Et as PopoverTrigger,pa as RadioGroup,ha as RadioGroupItem,$ as ScrollArea,tt as ScrollBar,h as Separator,g as Sheet,w as SheetClose,f as SheetContent,k as SheetDescription,x as SheetFooter,b as SheetHeader,m as SheetOverlay,u as SheetPortal,y as SheetTitle,v as SheetTrigger,I as Sidebar,P as SidebarBanner,N as SidebarContent,R as SidebarFooter,B as SidebarGroup,U as SidebarGroupAction,O as SidebarGroupContent,E as SidebarGroupLabel,H as SidebarHeader,L as SidebarInput,G as SidebarInset,q as SidebarMenu,K as SidebarMenuAction,Q as SidebarMenuBadge,J as SidebarMenuButton,V as SidebarMenuItem,W as SidebarMenuSkeleton,X as SidebarMenuSub,Z as SidebarMenuSubButton,Y as SidebarMenuSubItem,M as SidebarProvider,F as SidebarRail,A as SidebarSeparator,j as SidebarTrigger,z as Skeleton,It as Table,Ft as TableBody,Nt as TableCaption,Rt as TableCell,At as TableCellAction,Gt as TableFooter,Ht as TableHead,jt as TableHeader,Lt as TableRow,e as Tabs,n as TabsContent,o as TabsList,i as TabsTrigger,c as TextDecoder,ct as Textarea,fa as Toaster,S as Tooltip,C as TooltipContent,_ as TooltipProvider,D as TooltipTrigger,la as TreeSelect,a as buttonVariants,t as cn,xa as getSeedColor,ba as getSphericalGradient,ma as toast,at as useDrawer,T as useSidebar};
2
+ import{a as It,b as jt,c as Ft,d as Gt,e as Lt,f as Ht,g as Rt,h as At,i as Nt}from"./chunk-C7GTPYMH.mjs";import{a as e,b as o,c as i,d as n}from"./chunk-WZ5F5VT3.mjs";import{a as ct}from"./chunk-MQMO7DMT.mjs";import{a as ma,b as fa}from"./chunk-NEY5JU5Z.mjs";import{a as la}from"./chunk-574USYNO.mjs";import{a as pa,b as ha}from"./chunk-IKJ4QRNB.mjs";import{a as T,b as M,c as P,d as I,e as j,f as F,g as G,h as L,i as H,j as R,k as A,l as N,m as B,n as E,o as U,p as O,q,r as V,s as J,t as K,u as Q,v as W,w as X,x as Y,y as Z}from"./chunk-TYRJ7CQV.mjs";import{a as _,b as S,c as D,d as C}from"./chunk-QC5MA4WL.mjs";import{a as h}from"./chunk-YBV4CPVD.mjs";import{a as g,b as v,c as w,d as u,e as m,f,g as b,h as x,i as y,j as k}from"./chunk-QVMQ55JW.mjs";import{a as z}from"./chunk-CNRZOMR4.mjs";import{a as ht}from"./chunk-UAUSYTY4.mjs";import{a as at,b as rt,c as et,d as ot,e as it,f as nt}from"./chunk-DKMCJGI4.mjs";import{a as $,b as tt}from"./chunk-5TVDBV74.mjs";import{a as ut,b as mt,c as ft,d as bt,e as xt,f as yt,g as kt,h as zt,i as _t,j as St,k as Dt,l as Ct,m as Tt,n as Mt,o as Pt}from"./chunk-NKLBPY3T.mjs";import{a as gt,b as vt,c as wt}from"./chunk-L36V45FD.mjs";import{a as st}from"./chunk-PD43W3YN.mjs";import{a as p}from"./chunk-NEOUFWZN.mjs";import{a as dt}from"./chunk-WY4HCUAP.mjs";import{a as da}from"./chunk-NKELJSLY.mjs";import{a as sa}from"./chunk-FFYMV22V.mjs";import{a as Bt,b as Et,c as Ut}from"./chunk-FZ3NXOFK.mjs";import{a as $t,b as ta,c as aa,d as ra,e as ea,f as oa,g as ia,h as na,i as ca}from"./chunk-DATWXRPT.mjs";import{a as Ot,b as qt,c as Vt,d as Jt,e as Kt,f as Qt,g as Wt,h as Xt,i as Yt,j as Zt}from"./chunk-KLU33CJI.mjs";import"./chunk-4LR7SOCY.mjs";import{a as pt}from"./chunk-7FUNOEYE.mjs";import{a as lt}from"./chunk-QMJVRGPB.mjs";import{a,b as r}from"./chunk-BLHKJHNV.mjs";import{a as l}from"./chunk-Z6RAFZ3C.mjs";import{b as s}from"./chunk-AEZ5XKKG.mjs";import{a as d}from"./chunk-7ONK6HHN.mjs";import{a as c}from"./chunk-23ZKDWV4.mjs";import{a as ga,b as va,c as wa,d as ua}from"./chunk-4PTRLHCB.mjs";import{a as ba,b as xa}from"./chunk-4LUOGI24.mjs";import{a as t}from"./chunk-S5TKCF6T.mjs";import"./chunk-KPAOPUY2.mjs";export{ga as Accordion,ua as AccordionContent,va as AccordionItem,wa as AccordionTrigger,r as Button,lt as Calendar,da as Checkbox,sa as Combobox,$t as Command,ta as CommandDialog,ea as CommandEmpty,oa as CommandGroup,aa as CommandInput,na as CommandItem,ra as CommandList,ia as CommandSeparator,ca as CommandShortcut,pt as DatePicker,ht as DateRangePicker,Ot as Dialog,Jt as DialogClose,Qt as DialogContent,Zt as DialogDescription,Xt as DialogFooter,Wt as DialogHeader,Kt as DialogOverlay,Vt as DialogPortal,Yt as DialogTitle,qt as DialogTrigger,rt as Drawer,it as DrawerBody,nt as DrawerFooter,et as DrawerHeader,ot as DrawerTitle,ut as DropdownMenu,Dt as DropdownMenuCheckboxItem,_t as DropdownMenuContent,ft as DropdownMenuGroup,St as DropdownMenuItem,Tt as DropdownMenuLabel,bt as DropdownMenuPortal,yt as DropdownMenuRadioGroup,Ct as DropdownMenuRadioItem,Mt as DropdownMenuSeparator,Pt as DropdownMenuShortcut,xt as DropdownMenuSub,zt as DropdownMenuSubContent,kt as DropdownMenuSubTrigger,mt as DropdownMenuTrigger,gt as Field,wt as FieldDescription,vt as FieldLabel,st as FileUpload,l as GeometricFluidGrid,s as GlitchLink,p as Input,dt as Label,d as PixelLoad,Bt as Popover,Ut as PopoverContent,Et as PopoverTrigger,pa as RadioGroup,ha as RadioGroupItem,$ as ScrollArea,tt as ScrollBar,h as Separator,g as Sheet,w as SheetClose,f as SheetContent,k as SheetDescription,x as SheetFooter,b as SheetHeader,m as SheetOverlay,u as SheetPortal,y as SheetTitle,v as SheetTrigger,I as Sidebar,P as SidebarBanner,N as SidebarContent,R as SidebarFooter,B as SidebarGroup,U as SidebarGroupAction,O as SidebarGroupContent,E as SidebarGroupLabel,H as SidebarHeader,L as SidebarInput,G as SidebarInset,q as SidebarMenu,K as SidebarMenuAction,Q as SidebarMenuBadge,J as SidebarMenuButton,V as SidebarMenuItem,W as SidebarMenuSkeleton,X as SidebarMenuSub,Z as SidebarMenuSubButton,Y as SidebarMenuSubItem,M as SidebarProvider,F as SidebarRail,A as SidebarSeparator,j as SidebarTrigger,z as Skeleton,It as Table,Ft as TableBody,Nt as TableCaption,Rt as TableCell,At as TableCellAction,Gt as TableFooter,Ht as TableHead,jt as TableHeader,Lt as TableRow,e as Tabs,n as TabsContent,o as TabsList,i as TabsTrigger,c as TextDecoder,ct as Textarea,fa as Toaster,S as Tooltip,C as TooltipContent,_ as TooltipProvider,D as TooltipTrigger,la as TreeSelect,a as buttonVariants,t as cn,xa as getSeedColor,ba as getSphericalGradient,ma as toast,at as useDrawer,T as useSidebar};
3
3
  //# sourceMappingURL=index.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alkimi.org/ui-kit",
3
- "version": "0.11.5",
3
+ "version": "0.12.0",
4
4
  "packageManager": "pnpm@10.26.0",
5
5
  "description": "A React component library built with shadcn/ui and Tailwind CSS",
6
6
  "main": "./dist/index.js",
@@ -1,3 +0,0 @@
1
- "use client";
2
- import{a as w}from"./chunk-S5TKCF6T.mjs";import R,{useState as q,useEffect as E,useMemo as $,useRef as p}from"react";import{jsx as h,jsxs as I}from"react/jsx-runtime";var j="!<>-_\\/[]{}\u2014=+*^?#________",C=e=>e[Math.floor(Math.random()*e.length)],S=e=>{if(typeof e=="string"||typeof e=="number")return String(e);if(Array.isArray(e))return e.map(S).join("");if(R.isValidElement(e)){let s=e.props;return(s.text||"")+(s.label||"")+(s.title||"")+S(s.children)}return""},N=(e,s,i)=>{if(typeof e=="string"||typeof e=="number"){let l=String(e),c=[];for(let m=0;m<l.length;m++)c.push(h(R.Fragment,{children:s[i.current]||""},`char-${i.current}`)),i.current++;return c}if(Array.isArray(e))return e.map((l,c)=>h(R.Fragment,{children:N(l,s,i)},`arr-${c}-${i.current}`));if(R.isValidElement(e)){let l=e.props,c={};return l.children&&(c.children=N(l.children,s,i)),R.cloneElement(e,c)}return e};function L({children:e,className:s,duration:i=40,symbols:l=j,delay:c=0,isLoading:m=!1,speed:T=.28}){let[D,_]=q(null),[P,y]=q(!1),A=p(null),g=p(0),b=p([]),t=p(null),F=p(!1),f=$(()=>S(e),[e]),k=()=>{let r=[];for(let u=0;u<f.length;u++){let n=f[u],o=Math.floor(Math.random()*(i*.5)),a=o+Math.floor(Math.random()*(i*.5));r.push({to:n,start:o,end:a})}b.current=r,g.current=0,y(!1)},d=p([]),v=()=>{let r=[];d.current.length!==f.length&&(d.current=new Array(f.length).fill(void 0));for(let n=0;n<f.length;n++){let o=f[n];o===" "?r.push(" "):((!d.current[n]||Math.random()<T)&&(d.current[n]=C(l)),r.push(I("span",{className:"relative inline-block",children:[h("span",{className:"invisible select-none","aria-hidden":"true",children:o}),h("span",{className:"absolute inset-0 flex items-center justify-center opacity-50 font-mono leading-none",children:d.current[n]})]},n)))}_(N(e,r,{current:0})),t.current=requestAnimationFrame(v)},x=()=>{let r=0,u=[];for(let o=0;o<b.current.length;o++){let a=b.current[o];g.current>=a.end?(r++,u.push(a.to)):(g.current>=a.start&&(!a.char||Math.random()<T)&&(a.char=C(l)),u.push(I("span",{className:"relative inline-block",children:[h("span",{className:"invisible select-none","aria-hidden":"true",children:a.to===" "?"\xA0":a.to}),g.current>=a.start&&h("span",{className:"absolute inset-0 flex items-center justify-center opacity-50 font-mono leading-none",children:a.char})]},o)))}_(N(e,u,{current:0})),r===b.current.length?y(!0):(g.current++,t.current=requestAnimationFrame(x))},M=p(!1);return E(()=>{if(m)return M.current=!0,F.current=!0,y(!1),t.current&&cancelAnimationFrame(t.current),t.current=requestAnimationFrame(v),()=>{t.current&&cancelAnimationFrame(t.current)};if(M.current)return M.current=!1,k(),t.current=requestAnimationFrame(x),()=>{t.current&&cancelAnimationFrame(t.current)}},[m,f]),E(()=>{if(m)return;let r=new IntersectionObserver(u=>{if(u[0].isIntersecting&&!F.current){F.current=!0;let n=setTimeout(()=>{k(),t.current=requestAnimationFrame(x)},c);return()=>clearTimeout(n)}},{threshold:.1});return A.current&&r.observe(A.current),()=>{r.disconnect(),t.current&&cancelAnimationFrame(t.current)}},[f,c,m]),h("span",{ref:A,className:w("inline-block whitespace-pre-wrap",s),children:P?e:D})}export{L as a};
3
- //# sourceMappingURL=chunk-CMV76O4U.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/TextDecoder.tsx"],"sourcesContent":["\"use client\"\nimport { cn } from \"@/lib/utils\"\nimport React, {\n useState,\n useEffect,\n useMemo,\n useRef,\n ReactNode,\n} from \"react\"\n\nconst SYMBOLS = \"!<>-_\\\\/[]{}—=+*^?#________\"\n\nconst randomChar = (symbols: string) =>\n symbols[Math.floor(Math.random() * symbols.length)]\n\nconst extractText = (node: ReactNode): string => {\n if (typeof node === \"string\" || typeof node === \"number\") return String(node)\n if (Array.isArray(node)) return node.map(extractText).join(\"\")\n if (React.isValidElement(node)) {\n const props = node.props as any\n return (\n (props.text || \"\") +\n (props.label || \"\") +\n (props.title || \"\") +\n extractText(props.children)\n )\n }\n return \"\"\n}\n\nconst injectScrambledText = (\n node: ReactNode,\n scrambledChars: (string | ReactNode)[],\n indexObj: { current: number }\n): ReactNode => {\n if (typeof node === \"string\" || typeof node === \"number\") {\n const text = String(node)\n const result: (string | ReactNode)[] = []\n for (let i = 0; i < text.length; i++) {\n result.push(\n <React.Fragment key={`char-${indexObj.current}`}>\n {scrambledChars[indexObj.current] || \"\"}\n </React.Fragment>\n )\n indexObj.current++\n }\n return result\n }\n\n if (Array.isArray(node)) {\n return node.map((child, idx) => (\n <React.Fragment key={`arr-${idx}-${indexObj.current}`}>\n {injectScrambledText(child, scrambledChars, indexObj)}\n </React.Fragment>\n ))\n }\n\n if (React.isValidElement(node)) {\n const props = node.props as any\n const newProps: any = {}\n\n if (props.children) {\n newProps.children = injectScrambledText(\n props.children,\n scrambledChars,\n indexObj\n )\n }\n return React.cloneElement(node, newProps)\n }\n return node\n}\n\nexport interface TextDecoderProps {\n children: ReactNode\n className?: string\n duration?: number\n symbols?: string\n delay?: number\n isLoading?: boolean\n speed?: number\n}\n\nexport default function TextDecoder ({\n children,\n className,\n duration = 40,\n symbols = SYMBOLS,\n delay = 0,\n isLoading = false,\n speed = 0.28,\n}: TextDecoderProps) {\n const [outputNodes, setOutputNodes] = useState<ReactNode>(null)\n const [isComplete, setIsComplete] = useState(false)\n const elementRef = useRef<HTMLSpanElement>(null)\n const frameRef = useRef(0)\n const queueRef = useRef<\n { to: string; start: number; end: number; char?: string }[]\n >([])\n const rafRef = useRef<number | null>(null)\n const hasAnimatedRef = useRef(false)\n\n const fullText = useMemo(() => extractText(children), [children])\n\n const setupQueue = () => {\n const newQueue = []\n for (let i = 0; i < fullText.length; i++) {\n const to = fullText[i]\n const start = Math.floor(Math.random() * (duration * 0.5))\n const end = start + Math.floor(Math.random() * (duration * 0.5))\n newQueue.push({ to, start, end })\n }\n queueRef.current = newQueue\n frameRef.current = 0\n setIsComplete(false)\n }\n\n const loadingCharsRef = useRef<(string | undefined)[]>([])\n\n const updateLoading = () => {\n const currentScrambledChars: (string | ReactNode)[] = []\n\n if (loadingCharsRef.current.length !== fullText.length) {\n loadingCharsRef.current = new Array(fullText.length).fill(undefined)\n }\n\n for (let i = 0; i < fullText.length; i++) {\n const char = fullText[i]\n\n if (char === \" \") {\n currentScrambledChars.push(\" \")\n } else {\n if (!loadingCharsRef.current[i] || Math.random() < speed) {\n loadingCharsRef.current[i] = randomChar(symbols)\n }\n\n currentScrambledChars.push(\n <span key={i} className=\"relative inline-block\">\n <span className=\"invisible select-none\" aria-hidden=\"true\">\n {char}\n </span>\n <span className=\"absolute inset-0 flex items-center justify-center opacity-50 font-mono leading-none\">\n {loadingCharsRef.current[i]}\n </span>\n </span>\n )\n }\n }\n\n const indexObj = { current: 0 }\n setOutputNodes(\n injectScrambledText(children, currentScrambledChars, indexObj)\n )\n\n rafRef.current = requestAnimationFrame(updateLoading)\n }\n\n const update = () => {\n let complete = 0\n const currentScrambledChars: (string | ReactNode)[] = []\n\n for (let i = 0; i < queueRef.current.length; i++) {\n const item = queueRef.current[i]\n\n if (frameRef.current >= item.end) {\n complete++\n currentScrambledChars.push(item.to)\n } else {\n if (frameRef.current >= item.start) {\n if (!item.char || Math.random() < speed) {\n item.char = randomChar(symbols)\n }\n }\n\n currentScrambledChars.push(\n <span key={i} className=\"relative inline-block\">\n <span className=\"invisible select-none\" aria-hidden=\"true\">\n {item.to === \" \" ? \"\\u00A0\" : item.to}\n </span>\n {frameRef.current >= item.start && (\n <span className=\"absolute inset-0 flex items-center justify-center opacity-50 font-mono leading-none\">\n {item.char}\n </span>\n )}\n </span>\n )\n }\n }\n\n const indexObj = { current: 0 }\n setOutputNodes(\n injectScrambledText(children, currentScrambledChars, indexObj)\n )\n\n if (complete === queueRef.current.length) {\n setIsComplete(true)\n } else {\n frameRef.current++\n rafRef.current = requestAnimationFrame(update)\n }\n }\n\n const wasLoadingRef = useRef(false)\n\n useEffect(() => {\n if (isLoading) {\n wasLoadingRef.current = true\n hasAnimatedRef.current = true\n setIsComplete(false)\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n rafRef.current = requestAnimationFrame(updateLoading)\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n }\n }\n\n if (wasLoadingRef.current) {\n wasLoadingRef.current = false\n setupQueue()\n rafRef.current = requestAnimationFrame(update)\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n }\n }\n }, [isLoading, fullText])\n\n useEffect(() => {\n if (isLoading) return\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting && !hasAnimatedRef.current) {\n hasAnimatedRef.current = true\n const timeoutId = setTimeout(() => {\n setupQueue()\n rafRef.current = requestAnimationFrame(update)\n }, delay)\n return () => clearTimeout(timeoutId)\n }\n },\n { threshold: 0.1 }\n )\n\n if (elementRef.current) observer.observe(elementRef.current)\n\n return () => {\n observer.disconnect()\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n }\n }, [fullText, delay, isLoading])\n\n return (\n <span\n ref={elementRef}\n className={cn(\"inline-block whitespace-pre-wrap\", className)}\n >\n {isComplete ? children : outputNodes}\n </span>\n )\n}\n"],"mappings":"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","names":["React","useState","useEffect","useMemo","useRef","jsx","jsxs","SYMBOLS","randomChar","symbols","extractText","node","props","injectScrambledText","scrambledChars","indexObj","text","result","i","child","idx","newProps","TextDecoder","children","className","duration","delay","isLoading","speed","outputNodes","setOutputNodes","isComplete","setIsComplete","elementRef","frameRef","queueRef","rafRef","hasAnimatedRef","fullText","setupQueue","newQueue","to","start","end","loadingCharsRef","updateLoading","currentScrambledChars","char","update","complete","item","wasLoadingRef","observer","entries","timeoutId","cn"]}
@@ -1,3 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }"use client";
2
- var _chunkFUYXCJOQjs = require('./chunk-FUYXCJOQ.js');var _react = require('react'); var _react2 = _interopRequireDefault(_react);var _jsxruntime = require('react/jsx-runtime');var j="!<>-_\\/[]{}\u2014=+*^?#________",C=e=>e[Math.floor(Math.random()*e.length)],S=e=>{if(typeof e=="string"||typeof e=="number")return String(e);if(Array.isArray(e))return e.map(S).join("");if(_react2.default.isValidElement(e)){let s=e.props;return(s.text||"")+(s.label||"")+(s.title||"")+S(s.children)}return""},N=(e,s,i)=>{if(typeof e=="string"||typeof e=="number"){let l=String(e),c=[];for(let m=0;m<l.length;m++)c.push(_jsxruntime.jsx.call(void 0, _react2.default.Fragment,{children:s[i.current]||""},`char-${i.current}`)),i.current++;return c}if(Array.isArray(e))return e.map((l,c)=>_jsxruntime.jsx.call(void 0, _react2.default.Fragment,{children:N(l,s,i)},`arr-${c}-${i.current}`));if(_react2.default.isValidElement(e)){let l=e.props,c={};return l.children&&(c.children=N(l.children,s,i)),_react2.default.cloneElement(e,c)}return e};function L({children:e,className:s,duration:i=40,symbols:l=j,delay:c=0,isLoading:m=!1,speed:T=.28}){let[D,_]=_react.useState.call(void 0, null),[P,y]=_react.useState.call(void 0, !1),A=_react.useRef.call(void 0, null),g=_react.useRef.call(void 0, 0),b=_react.useRef.call(void 0, []),t=_react.useRef.call(void 0, null),F=_react.useRef.call(void 0, !1),f=_react.useMemo.call(void 0, ()=>S(e),[e]),k=()=>{let r=[];for(let u=0;u<f.length;u++){let n=f[u],o=Math.floor(Math.random()*(i*.5)),a=o+Math.floor(Math.random()*(i*.5));r.push({to:n,start:o,end:a})}b.current=r,g.current=0,y(!1)},d=_react.useRef.call(void 0, []),v=()=>{let r=[];d.current.length!==f.length&&(d.current=new Array(f.length).fill(void 0));for(let n=0;n<f.length;n++){let o=f[n];o===" "?r.push(" "):((!d.current[n]||Math.random()<T)&&(d.current[n]=C(l)),r.push(_jsxruntime.jsxs.call(void 0, "span",{className:"relative inline-block",children:[_jsxruntime.jsx.call(void 0, "span",{className:"invisible select-none","aria-hidden":"true",children:o}),_jsxruntime.jsx.call(void 0, "span",{className:"absolute inset-0 flex items-center justify-center opacity-50 font-mono leading-none",children:d.current[n]})]},n)))}_(N(e,r,{current:0})),t.current=requestAnimationFrame(v)},x=()=>{let r=0,u=[];for(let o=0;o<b.current.length;o++){let a=b.current[o];g.current>=a.end?(r++,u.push(a.to)):(g.current>=a.start&&(!a.char||Math.random()<T)&&(a.char=C(l)),u.push(_jsxruntime.jsxs.call(void 0, "span",{className:"relative inline-block",children:[_jsxruntime.jsx.call(void 0, "span",{className:"invisible select-none","aria-hidden":"true",children:a.to===" "?"\xA0":a.to}),g.current>=a.start&&_jsxruntime.jsx.call(void 0, "span",{className:"absolute inset-0 flex items-center justify-center opacity-50 font-mono leading-none",children:a.char})]},o)))}_(N(e,u,{current:0})),r===b.current.length?y(!0):(g.current++,t.current=requestAnimationFrame(x))},M=_react.useRef.call(void 0, !1);return _react.useEffect.call(void 0, ()=>{if(m)return M.current=!0,F.current=!0,y(!1),t.current&&cancelAnimationFrame(t.current),t.current=requestAnimationFrame(v),()=>{t.current&&cancelAnimationFrame(t.current)};if(M.current)return M.current=!1,k(),t.current=requestAnimationFrame(x),()=>{t.current&&cancelAnimationFrame(t.current)}},[m,f]),_react.useEffect.call(void 0, ()=>{if(m)return;let r=new IntersectionObserver(u=>{if(u[0].isIntersecting&&!F.current){F.current=!0;let n=setTimeout(()=>{k(),t.current=requestAnimationFrame(x)},c);return()=>clearTimeout(n)}},{threshold:.1});return A.current&&r.observe(A.current),()=>{r.disconnect(),t.current&&cancelAnimationFrame(t.current)}},[f,c,m]),_jsxruntime.jsx.call(void 0, "span",{ref:A,className:_chunkFUYXCJOQjs.a.call(void 0, "inline-block whitespace-pre-wrap",s),children:P?e:D})}exports.a = L;
3
- //# sourceMappingURL=chunk-EWRKHBIV.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/aktoriukas/Documents/Projects/alkimi/alkimi-ui-kit/dist/chunk-EWRKHBIV.js","../src/components/TextDecoder.tsx"],"names":["SYMBOLS","randomChar","symbols","extractText","node","React","props","injectScrambledText","scrambledChars","indexObj","text","result","i","jsx"],"mappings":"AAAA,qLAAY;AACZ,sDAAuC,4ECOhC,+CAgCC,IA9BFA,CAAAA,CAAU,kCAAA,CAEVC,CAAAA,CAAcC,CAAAA,EAClBA,CAAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,CAAA,CAAIA,CAAAA,CAAQ,MAAM,CAAC,CAAA,CAE9CC,CAAAA,CAAeC,CAAAA,EAA4B,CAC/C,EAAA,CAAI,OAAOA,CAAAA,EAAS,QAAA,EAAY,OAAOA,CAAAA,EAAS,QAAA,CAAU,OAAO,MAAA,CAAOA,CAAI,CAAA,CAC5E,EAAA,CAAI,KAAA,CAAM,OAAA,CAAQA,CAAI,CAAA,CAAG,OAAOA,CAAAA,CAAK,GAAA,CAAID,CAAW,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA,CAC7D,EAAA,CAAIE,eAAAA,CAAM,cAAA,CAAeD,CAAI,CAAA,CAAG,CAC9B,IAAME,CAAAA,CAAQF,CAAAA,CAAK,KAAA,CACnB,MAAA,CACGE,CAAAA,CAAM,IAAA,EAAQ,EAAA,CAAA,CAAA,CACdA,CAAAA,CAAM,KAAA,EAAS,EAAA,CAAA,CAAA,CACfA,CAAAA,CAAM,KAAA,EAAS,EAAA,CAAA,CAChBH,CAAAA,CAAYG,CAAAA,CAAM,QAAQ,CAE9B,CACA,MAAO,EACT,CAAA,CAEMC,CAAAA,CAAsB,CAC1BH,CAAAA,CACAI,CAAAA,CACAC,CAAAA,CAAAA,EACc,CACd,EAAA,CAAI,OAAOL,CAAAA,EAAS,QAAA,EAAY,OAAOA,CAAAA,EAAS,QAAA,CAAU,CACxD,IAAMM,CAAAA,CAAO,MAAA,CAAON,CAAI,CAAA,CAClBO,CAAAA,CAAiC,CAAC,CAAA,CACxC,GAAA,CAAA,IAASC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIF,CAAAA,CAAK,MAAA,CAAQE,CAAAA,EAAAA,CAC/BD,CAAAA,CAAO,IAAA,CACLE,6BAAAA,eAACR,CAAM,QAAA,CAAN,CACE,QAAA,CAAAG,CAAAA,CAAeC,CAAAA,CAAS,OAAO,CAAA,EAAK,EAAA,CAAA,CADlB,CAAA,KAAA,EAAQA,CAAAA,CAAS,OAAO,CAAA,CAAA","file":"/Users/aktoriukas/Documents/Projects/alkimi/alkimi-ui-kit/dist/chunk-EWRKHBIV.js","sourcesContent":[null,"\"use client\"\nimport { cn } from \"@/lib/utils\"\nimport React, {\n useState,\n useEffect,\n useMemo,\n useRef,\n ReactNode,\n} from \"react\"\n\nconst SYMBOLS = \"!<>-_\\\\/[]{}—=+*^?#________\"\n\nconst randomChar = (symbols: string) =>\n symbols[Math.floor(Math.random() * symbols.length)]\n\nconst extractText = (node: ReactNode): string => {\n if (typeof node === \"string\" || typeof node === \"number\") return String(node)\n if (Array.isArray(node)) return node.map(extractText).join(\"\")\n if (React.isValidElement(node)) {\n const props = node.props as any\n return (\n (props.text || \"\") +\n (props.label || \"\") +\n (props.title || \"\") +\n extractText(props.children)\n )\n }\n return \"\"\n}\n\nconst injectScrambledText = (\n node: ReactNode,\n scrambledChars: (string | ReactNode)[],\n indexObj: { current: number }\n): ReactNode => {\n if (typeof node === \"string\" || typeof node === \"number\") {\n const text = String(node)\n const result: (string | ReactNode)[] = []\n for (let i = 0; i < text.length; i++) {\n result.push(\n <React.Fragment key={`char-${indexObj.current}`}>\n {scrambledChars[indexObj.current] || \"\"}\n </React.Fragment>\n )\n indexObj.current++\n }\n return result\n }\n\n if (Array.isArray(node)) {\n return node.map((child, idx) => (\n <React.Fragment key={`arr-${idx}-${indexObj.current}`}>\n {injectScrambledText(child, scrambledChars, indexObj)}\n </React.Fragment>\n ))\n }\n\n if (React.isValidElement(node)) {\n const props = node.props as any\n const newProps: any = {}\n\n if (props.children) {\n newProps.children = injectScrambledText(\n props.children,\n scrambledChars,\n indexObj\n )\n }\n return React.cloneElement(node, newProps)\n }\n return node\n}\n\nexport interface TextDecoderProps {\n children: ReactNode\n className?: string\n duration?: number\n symbols?: string\n delay?: number\n isLoading?: boolean\n speed?: number\n}\n\nexport default function TextDecoder ({\n children,\n className,\n duration = 40,\n symbols = SYMBOLS,\n delay = 0,\n isLoading = false,\n speed = 0.28,\n}: TextDecoderProps) {\n const [outputNodes, setOutputNodes] = useState<ReactNode>(null)\n const [isComplete, setIsComplete] = useState(false)\n const elementRef = useRef<HTMLSpanElement>(null)\n const frameRef = useRef(0)\n const queueRef = useRef<\n { to: string; start: number; end: number; char?: string }[]\n >([])\n const rafRef = useRef<number | null>(null)\n const hasAnimatedRef = useRef(false)\n\n const fullText = useMemo(() => extractText(children), [children])\n\n const setupQueue = () => {\n const newQueue = []\n for (let i = 0; i < fullText.length; i++) {\n const to = fullText[i]\n const start = Math.floor(Math.random() * (duration * 0.5))\n const end = start + Math.floor(Math.random() * (duration * 0.5))\n newQueue.push({ to, start, end })\n }\n queueRef.current = newQueue\n frameRef.current = 0\n setIsComplete(false)\n }\n\n const loadingCharsRef = useRef<(string | undefined)[]>([])\n\n const updateLoading = () => {\n const currentScrambledChars: (string | ReactNode)[] = []\n\n if (loadingCharsRef.current.length !== fullText.length) {\n loadingCharsRef.current = new Array(fullText.length).fill(undefined)\n }\n\n for (let i = 0; i < fullText.length; i++) {\n const char = fullText[i]\n\n if (char === \" \") {\n currentScrambledChars.push(\" \")\n } else {\n if (!loadingCharsRef.current[i] || Math.random() < speed) {\n loadingCharsRef.current[i] = randomChar(symbols)\n }\n\n currentScrambledChars.push(\n <span key={i} className=\"relative inline-block\">\n <span className=\"invisible select-none\" aria-hidden=\"true\">\n {char}\n </span>\n <span className=\"absolute inset-0 flex items-center justify-center opacity-50 font-mono leading-none\">\n {loadingCharsRef.current[i]}\n </span>\n </span>\n )\n }\n }\n\n const indexObj = { current: 0 }\n setOutputNodes(\n injectScrambledText(children, currentScrambledChars, indexObj)\n )\n\n rafRef.current = requestAnimationFrame(updateLoading)\n }\n\n const update = () => {\n let complete = 0\n const currentScrambledChars: (string | ReactNode)[] = []\n\n for (let i = 0; i < queueRef.current.length; i++) {\n const item = queueRef.current[i]\n\n if (frameRef.current >= item.end) {\n complete++\n currentScrambledChars.push(item.to)\n } else {\n if (frameRef.current >= item.start) {\n if (!item.char || Math.random() < speed) {\n item.char = randomChar(symbols)\n }\n }\n\n currentScrambledChars.push(\n <span key={i} className=\"relative inline-block\">\n <span className=\"invisible select-none\" aria-hidden=\"true\">\n {item.to === \" \" ? \"\\u00A0\" : item.to}\n </span>\n {frameRef.current >= item.start && (\n <span className=\"absolute inset-0 flex items-center justify-center opacity-50 font-mono leading-none\">\n {item.char}\n </span>\n )}\n </span>\n )\n }\n }\n\n const indexObj = { current: 0 }\n setOutputNodes(\n injectScrambledText(children, currentScrambledChars, indexObj)\n )\n\n if (complete === queueRef.current.length) {\n setIsComplete(true)\n } else {\n frameRef.current++\n rafRef.current = requestAnimationFrame(update)\n }\n }\n\n const wasLoadingRef = useRef(false)\n\n useEffect(() => {\n if (isLoading) {\n wasLoadingRef.current = true\n hasAnimatedRef.current = true\n setIsComplete(false)\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n rafRef.current = requestAnimationFrame(updateLoading)\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n }\n }\n\n if (wasLoadingRef.current) {\n wasLoadingRef.current = false\n setupQueue()\n rafRef.current = requestAnimationFrame(update)\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n }\n }\n }, [isLoading, fullText])\n\n useEffect(() => {\n if (isLoading) return\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting && !hasAnimatedRef.current) {\n hasAnimatedRef.current = true\n const timeoutId = setTimeout(() => {\n setupQueue()\n rafRef.current = requestAnimationFrame(update)\n }, delay)\n return () => clearTimeout(timeoutId)\n }\n },\n { threshold: 0.1 }\n )\n\n if (elementRef.current) observer.observe(elementRef.current)\n\n return () => {\n observer.disconnect()\n if (rafRef.current) cancelAnimationFrame(rafRef.current)\n }\n }, [fullText, delay, isLoading])\n\n return (\n <span\n ref={elementRef}\n className={cn(\"inline-block whitespace-pre-wrap\", className)}\n >\n {isComplete ? children : outputNodes}\n </span>\n )\n}\n"]}