bynana-ui 1.1.0 → 1.4.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/accordion/index.js +2 -0
- package/dist/accordion/index.js.map +1 -0
- package/dist/accordion/index.mjs +2 -0
- package/dist/accordion/index.mjs.map +1 -0
- package/dist/alert/index.js +2 -0
- package/dist/alert/index.js.map +1 -0
- package/dist/alert/index.mjs +2 -0
- package/dist/alert/index.mjs.map +1 -0
- package/dist/ascii-text/index.js +3 -0
- package/dist/ascii-text/index.js.map +1 -0
- package/dist/ascii-text/index.mjs +3 -0
- package/dist/ascii-text/index.mjs.map +1 -0
- package/dist/attract-button/index.js +2 -0
- package/dist/attract-button/index.js.map +1 -0
- package/dist/attract-button/index.mjs +2 -0
- package/dist/attract-button/index.mjs.map +1 -0
- package/dist/blur-fade/index.js +2 -0
- package/dist/blur-fade/index.js.map +1 -0
- package/dist/blur-fade/index.mjs +2 -0
- package/dist/blur-fade/index.mjs.map +1 -0
- package/dist/card/index.js +2 -0
- package/dist/card/index.js.map +1 -0
- package/dist/card/index.mjs +2 -0
- package/dist/card/index.mjs.map +1 -0
- package/dist/checkbox/index.js +2 -0
- package/dist/checkbox/index.js.map +1 -0
- package/dist/checkbox/index.mjs +2 -0
- package/dist/checkbox/index.mjs.map +1 -0
- package/dist/circular-text/index.js +2 -0
- package/dist/circular-text/index.js.map +1 -0
- package/dist/circular-text/index.mjs +2 -0
- package/dist/circular-text/index.mjs.map +1 -0
- package/dist/click-spark/index.js +2 -0
- package/dist/click-spark/index.js.map +1 -0
- package/dist/click-spark/index.mjs +2 -0
- package/dist/click-spark/index.mjs.map +1 -0
- package/dist/command-button/index.js +2 -0
- package/dist/command-button/index.js.map +1 -0
- package/dist/command-button/index.mjs +2 -0
- package/dist/command-button/index.mjs.map +1 -0
- package/dist/copy-button/index.js +2 -0
- package/dist/copy-button/index.js.map +1 -0
- package/dist/copy-button/index.mjs +2 -0
- package/dist/copy-button/index.mjs.map +1 -0
- package/dist/counter/index.js +2 -0
- package/dist/counter/index.js.map +1 -0
- package/dist/counter/index.mjs +2 -0
- package/dist/counter/index.mjs.map +1 -0
- package/dist/decrypted-text/index.js +2 -0
- package/dist/decrypted-text/index.js.map +1 -0
- package/dist/decrypted-text/index.mjs +2 -0
- package/dist/decrypted-text/index.mjs.map +1 -0
- package/dist/dock/index.js +2 -0
- package/dist/dock/index.js.map +1 -0
- package/dist/dock/index.mjs +2 -0
- package/dist/dock/index.mjs.map +1 -0
- package/dist/drawer/index.js +2 -0
- package/dist/drawer/index.js.map +1 -0
- package/dist/drawer/index.mjs +2 -0
- package/dist/drawer/index.mjs.map +1 -0
- package/dist/elastic-text/index.js +2 -0
- package/dist/elastic-text/index.js.map +1 -0
- package/dist/elastic-text/index.mjs +2 -0
- package/dist/elastic-text/index.mjs.map +1 -0
- package/dist/falling-text/index.js +2 -0
- package/dist/falling-text/index.js.map +1 -0
- package/dist/falling-text/index.mjs +2 -0
- package/dist/falling-text/index.mjs.map +1 -0
- package/dist/file-tree/index.js +2 -0
- package/dist/file-tree/index.js.map +1 -0
- package/dist/file-tree/index.mjs +2 -0
- package/dist/file-tree/index.mjs.map +1 -0
- package/dist/float-effect/index.js +2 -0
- package/dist/float-effect/index.js.map +1 -0
- package/dist/float-effect/index.mjs +2 -0
- package/dist/float-effect/index.mjs.map +1 -0
- package/dist/glow-effect/index.js +2 -0
- package/dist/glow-effect/index.js.map +1 -0
- package/dist/glow-effect/index.mjs +2 -0
- package/dist/glow-effect/index.mjs.map +1 -0
- package/dist/glowing-text/index.js +2 -0
- package/dist/glowing-text/index.js.map +1 -0
- package/dist/glowing-text/index.mjs +2 -0
- package/dist/glowing-text/index.mjs.map +1 -0
- package/dist/hamburger-basic/index.js +2 -0
- package/dist/hamburger-basic/index.js.map +1 -0
- package/dist/hamburger-basic/index.mjs +2 -0
- package/dist/hamburger-basic/index.mjs.map +1 -0
- package/dist/hamburger-spin/index.js +2 -0
- package/dist/hamburger-spin/index.js.map +1 -0
- package/dist/hamburger-spin/index.mjs +2 -0
- package/dist/hamburger-spin/index.mjs.map +1 -0
- package/dist/index.js +34 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +34 -3
- package/dist/index.mjs.map +1 -1
- package/dist/infinite-scroll/index.js +11 -0
- package/dist/infinite-scroll/index.js.map +1 -0
- package/dist/infinite-scroll/index.mjs +11 -0
- package/dist/infinite-scroll/index.mjs.map +1 -0
- package/dist/input/index.js +2 -0
- package/dist/input/index.js.map +1 -0
- package/dist/input/index.mjs +2 -0
- package/dist/input/index.mjs.map +1 -0
- package/dist/input-otp/index.js +2 -0
- package/dist/input-otp/index.js.map +1 -0
- package/dist/input-otp/index.mjs +2 -0
- package/dist/input-otp/index.mjs.map +1 -0
- package/dist/loading-flower/index.js +7 -0
- package/dist/loading-flower/index.js.map +1 -0
- package/dist/loading-flower/index.mjs +7 -0
- package/dist/loading-flower/index.mjs.map +1 -0
- package/dist/loading-geometric/index.js +7 -0
- package/dist/loading-geometric/index.js.map +1 -0
- package/dist/loading-geometric/index.mjs +7 -0
- package/dist/loading-geometric/index.mjs.map +1 -0
- package/dist/loading-morph/index.js +5 -0
- package/dist/loading-morph/index.js.map +1 -0
- package/dist/loading-morph/index.mjs +5 -0
- package/dist/loading-morph/index.mjs.map +1 -0
- package/dist/loading-rings/index.js +4 -0
- package/dist/loading-rings/index.js.map +1 -0
- package/dist/loading-rings/index.mjs +4 -0
- package/dist/loading-rings/index.mjs.map +1 -0
- package/dist/loading-text/index.js +6 -0
- package/dist/loading-text/index.js.map +1 -0
- package/dist/loading-text/index.mjs +6 -0
- package/dist/loading-text/index.mjs.map +1 -0
- package/dist/loading-words/index.js +4 -0
- package/dist/loading-words/index.js.map +1 -0
- package/dist/loading-words/index.mjs +4 -0
- package/dist/loading-words/index.mjs.map +1 -0
- package/dist/modal/index.js +2 -0
- package/dist/modal/index.js.map +1 -0
- package/dist/modal/index.mjs +2 -0
- package/dist/modal/index.mjs.map +1 -0
- package/dist/morph-text/index.js +2 -0
- package/dist/morph-text/index.js.map +1 -0
- package/dist/morph-text/index.mjs +2 -0
- package/dist/morph-text/index.mjs.map +1 -0
- package/dist/multi-step-loader/index.js +2 -0
- package/dist/multi-step-loader/index.js.map +1 -0
- package/dist/multi-step-loader/index.mjs +2 -0
- package/dist/multi-step-loader/index.mjs.map +1 -0
- package/dist/particle-button/index.js +2 -0
- package/dist/particle-button/index.js.map +1 -0
- package/dist/particle-button/index.mjs +2 -0
- package/dist/particle-button/index.mjs.map +1 -0
- package/dist/perspective-text/index.js +2 -0
- package/dist/perspective-text/index.js.map +1 -0
- package/dist/perspective-text/index.mjs +2 -0
- package/dist/perspective-text/index.mjs.map +1 -0
- package/dist/pixel-card/index.js +2 -0
- package/dist/pixel-card/index.js.map +1 -0
- package/dist/pixel-card/index.mjs +2 -0
- package/dist/pixel-card/index.mjs.map +1 -0
- package/dist/radio/index.js +2 -0
- package/dist/radio/index.js.map +1 -0
- package/dist/radio/index.mjs +2 -0
- package/dist/radio/index.mjs.map +1 -0
- package/dist/reveal-text/index.js +2 -0
- package/dist/reveal-text/index.js.map +1 -0
- package/dist/reveal-text/index.mjs +2 -0
- package/dist/reveal-text/index.mjs.map +1 -0
- package/dist/select/index.js +2 -0
- package/dist/select/index.js.map +1 -0
- package/dist/select/index.mjs +2 -0
- package/dist/select/index.mjs.map +1 -0
- package/dist/sliced-text/index.js +2 -0
- package/dist/sliced-text/index.js.map +1 -0
- package/dist/sliced-text/index.mjs +2 -0
- package/dist/sliced-text/index.mjs.map +1 -0
- package/dist/smooth-cursor/index.js +2 -0
- package/dist/smooth-cursor/index.js.map +1 -0
- package/dist/smooth-cursor/index.mjs +2 -0
- package/dist/smooth-cursor/index.mjs.map +1 -0
- package/dist/split-text/index.js +2 -0
- package/dist/split-text/index.js.map +1 -0
- package/dist/split-text/index.mjs +2 -0
- package/dist/split-text/index.mjs.map +1 -0
- package/dist/stepper/index.js +2 -0
- package/dist/stepper/index.js.map +1 -0
- package/dist/stepper/index.mjs +2 -0
- package/dist/stepper/index.mjs.map +1 -0
- package/dist/tabs/index.js +2 -0
- package/dist/tabs/index.js.map +1 -0
- package/dist/tabs/index.mjs +2 -0
- package/dist/tabs/index.mjs.map +1 -0
- package/dist/terminal/index.js +2 -0
- package/dist/terminal/index.js.map +1 -0
- package/dist/terminal/index.mjs +2 -0
- package/dist/terminal/index.mjs.map +1 -0
- package/dist/textarea/index.js +2 -0
- package/dist/textarea/index.js.map +1 -0
- package/dist/textarea/index.mjs +2 -0
- package/dist/textarea/index.mjs.map +1 -0
- package/dist/tilted-card/index.js +2 -0
- package/dist/tilted-card/index.js.map +1 -0
- package/dist/tilted-card/index.mjs +2 -0
- package/dist/tilted-card/index.mjs.map +1 -0
- package/dist/toolbar/index.js +2 -0
- package/dist/toolbar/index.js.map +1 -0
- package/dist/toolbar/index.mjs +2 -0
- package/dist/toolbar/index.mjs.map +1 -0
- package/dist/tooltip-animated/index.js +2 -0
- package/dist/tooltip-animated/index.js.map +1 -0
- package/dist/tooltip-animated/index.mjs +2 -0
- package/dist/tooltip-animated/index.mjs.map +1 -0
- package/dist/tooltip-minimal/index.js +2 -0
- package/dist/tooltip-minimal/index.js.map +1 -0
- package/dist/tooltip-minimal/index.mjs +2 -0
- package/dist/tooltip-minimal/index.mjs.map +1 -0
- package/dist/true-focus/index.js +2 -0
- package/dist/true-focus/index.js.map +1 -0
- package/dist/true-focus/index.mjs +2 -0
- package/dist/true-focus/index.mjs.map +1 -0
- package/package.json +108 -275
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/decrypted-text/index.tsx"],"names":["DecryptedText","text","speed","maxIterations","sequential","revealDirection","useOriginalCharsOnly","characters","className","parentClassName","encryptedClassName","animateOn","props","displayText","setDisplayText","useState","isHovering","setIsHovering","isScrambling","setIsScrambling","revealedIndices","setRevealedIndices","hasAnimated","setHasAnimated","containerRef","useRef","useEffect","interval","currentIteration","getNextIndex","revealedSet","textLength","middle","offset","nextIndex","i","availableChars","char","shuffleText","originalText","currentRevealed","positions","nonSpaceChars","p","j","charIndex","prevRevealed","newRevealed","observerCallback","entries","entry","observer","currentRef","hoverProps","jsxs","motion","jsx","index","isRevealedOrDone","decrypted_text_default"],"mappings":"+KAmBO,SAASA,CAAAA,CAAc,CAC5B,IAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,EAAQ,EAAA,CACR,aAAA,CAAAC,CAAAA,CAAgB,EAAA,CAChB,WAAAC,CAAAA,CAAa,KAAA,CACb,eAAA,CAAAC,CAAAA,CAAkB,QAClB,oBAAA,CAAAC,CAAAA,CAAuB,KAAA,CACvB,UAAA,CAAAC,CAAAA,CAAa,kEAAA,CACb,SAAA,CAAAC,CAAAA,CAAY,GACZ,eAAA,CAAAC,CAAAA,CAAkB,EAAA,CAClB,kBAAA,CAAAC,EAAqB,EAAA,CACrB,SAAA,CAAAC,CAAAA,CAAY,OAAA,CACZ,GAAGC,CACL,CAAA,CAAuB,CACrB,GAAM,CAACC,CAAAA,CAAaC,CAAc,CAAA,CAAIC,eAAiBd,CAAI,CAAA,CACrD,CAACe,CAAAA,CAAYC,CAAa,CAAA,CAAIF,cAAAA,CAAkB,KAAK,CAAA,CACrD,CAACG,CAAAA,CAAcC,CAAe,CAAA,CAAIJ,cAAAA,CAAkB,KAAK,CAAA,CACzD,CAACK,CAAAA,CAAiBC,CAAkB,CAAA,CAAIN,cAAAA,CAAsB,IAAI,GAAK,EACvE,CAACO,CAAAA,CAAaC,CAAc,CAAA,CAAIR,eAAkB,KAAK,CAAA,CACvDS,CAAAA,CAAeC,YAAAA,CAAwB,IAAI,CAAA,CAEjDC,eAAAA,CAAU,IAAM,CACd,IAAIC,CAAAA,CACAC,CAAAA,CAAmB,CAAA,CAEjBC,EAAgBC,CAAAA,EAAqC,CACzD,IAAMC,CAAAA,CAAa9B,EAAK,MAAA,CACxB,OAAQI,CAAAA,EACN,KAAK,OAAA,CACH,OAAOyB,CAAAA,CAAY,KACrB,KAAK,KAAA,CACH,OAAOC,CAAAA,CAAa,EAAID,CAAAA,CAAY,IAAA,CACtC,KAAK,QAAA,CAAU,CACb,IAAME,CAAAA,CAAS,IAAA,CAAK,KAAA,CAAMD,CAAAA,CAAa,CAAC,CAAA,CAClCE,CAAAA,CAAS,KAAK,KAAA,CAAMH,CAAAA,CAAY,IAAA,CAAO,CAAC,EACxCI,CAAAA,CAAYJ,CAAAA,CAAY,IAAA,CAAO,CAAA,GAAM,EAAIE,CAAAA,CAASC,CAAAA,CAASD,CAAAA,CAASC,CAAAA,CAAS,CAAA,CACnF,GAAIC,CAAAA,EAAa,CAAA,EAAKA,EAAYH,CAAAA,EAAc,CAACD,CAAAA,CAAY,GAAA,CAAII,CAAS,CAAA,CACxE,OAAOA,CAAAA,CAET,IAAA,IAASC,EAAI,CAAA,CAAGA,CAAAA,CAAIJ,CAAAA,CAAYI,CAAAA,EAAAA,CAC9B,GAAI,CAACL,CAAAA,CAAY,GAAA,CAAIK,CAAC,CAAA,CAAG,OAAOA,CAAAA,CAElC,QACF,CACA,QACE,OAAOL,CAAAA,CAAY,IACvB,CACF,CAAA,CAEMM,CAAAA,CAAiB9B,CAAAA,CACnB,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,CAAIL,EAAK,KAAA,CAAM,EAAE,CAAC,CAAC,EAAE,MAAA,CAAQoC,CAAAA,EAASA,CAAAA,GAAS,GAAG,EACjE9B,CAAAA,CAAW,KAAA,CAAM,EAAE,CAAA,CAEjB+B,CAAAA,CAAc,CAACC,CAAAA,CAAsBC,CAAAA,GAAyC,CAClF,GAAIlC,CAAAA,CAAsB,CACxB,IAAMmC,EAAYF,CAAAA,CAAa,KAAA,CAAM,EAAE,CAAA,CAAE,IAAI,CAACF,CAAAA,CAAMF,CAAAA,IAAO,CACzD,IAAA,CAAAE,CAAAA,CACA,OAAA,CAASA,CAAAA,GAAS,IAClB,KAAA,CAAOF,CAAAA,CACP,UAAA,CAAYK,CAAAA,CAAgB,IAAIL,CAAC,CACnC,CAAA,CAAE,CAAA,CAEIO,EAAgBD,CAAAA,CAAU,MAAA,CAAQE,CAAAA,EAAM,CAACA,CAAAA,CAAE,OAAA,EAAW,CAACA,CAAAA,CAAE,UAAU,CAAA,CAAE,GAAA,CAAKA,CAAAA,EAAMA,CAAAA,CAAE,IAAI,CAAA,CAE5F,IAAA,IAASR,CAAAA,CAAIO,CAAAA,CAAc,OAAS,CAAA,CAAGP,CAAAA,CAAI,CAAA,CAAGA,CAAAA,EAAAA,CAAK,CACjD,IAAMS,CAAAA,CAAI,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA,EAAO,EAAKT,CAAAA,CAAI,EAAE,CAAA,CAC5C,CAACO,CAAAA,CAAcP,CAAC,EAAGO,CAAAA,CAAcE,CAAC,CAAC,CAAA,CAAI,CAACF,CAAAA,CAAcE,CAAC,CAAA,CAAGF,CAAAA,CAAcP,CAAC,CAAC,EAC5E,CAEA,IAAIU,EAAY,CAAA,CAChB,OAAOJ,CAAAA,CACJ,GAAA,CAAKE,GACAA,CAAAA,CAAE,OAAA,CAAgB,GAAA,CAClBA,CAAAA,CAAE,UAAA,CAAmBJ,CAAAA,CAAaI,CAAAA,CAAE,KAAK,EACtCD,CAAAA,CAAcG,CAAAA,EAAW,CACjC,CAAA,CACA,KAAK,EAAE,CACZ,CAAA,KACE,OAAON,EACJ,KAAA,CAAM,EAAE,CAAA,CACR,GAAA,CAAI,CAACF,CAAAA,CAAMF,CAAAA,GACNE,CAAAA,GAAS,IAAY,GAAA,CACrBG,CAAAA,CAAgB,GAAA,CAAIL,CAAC,EAAUI,CAAAA,CAAaJ,CAAC,CAAA,CAC1CC,CAAAA,CAAe,KAAK,KAAA,CAAM,IAAA,CAAK,MAAA,EAAO,CAAIA,CAAAA,CAAe,MAAM,CAAC,CACxE,EACA,IAAA,CAAK,EAAE,CAEd,CAAA,CAEA,OAAIpB,CAAAA,EACFG,CAAAA,CAAgB,IAAI,CAAA,CACpBQ,EAAW,WAAA,CAAY,IAAM,CAC3BN,CAAAA,CAAoByB,CAAAA,EAAiB,CACnC,GAAI1C,CAAAA,CACF,GAAI0C,CAAAA,CAAa,IAAA,CAAO7C,CAAAA,CAAK,MAAA,CAAQ,CACnC,IAAMiC,CAAAA,CAAYL,CAAAA,CAAaiB,CAAY,EACrCC,CAAAA,CAAc,IAAI,GAAA,CAAID,CAAY,CAAA,CACxC,OAAAC,CAAAA,CAAY,GAAA,CAAIb,CAAS,CAAA,CACzBpB,CAAAA,CAAewB,CAAAA,CAAYrC,CAAAA,CAAM8C,CAAW,CAAC,CAAA,CACtCA,CACT,CAAA,0BACgBpB,CAAQ,CAAA,CACtBR,CAAAA,CAAgB,KAAK,CAAA,CACd2B,CAAAA,CAAAA,KAGT,OAAAhC,CAAAA,CAAewB,EAAYrC,CAAAA,CAAM6C,CAAY,CAAC,CAAA,CAC9ClB,IACIA,CAAAA,EAAoBzB,CAAAA,GACtB,aAAA,CAAcwB,CAAQ,EACtBR,CAAAA,CAAgB,KAAK,CAAA,CACrBL,CAAAA,CAAeb,CAAI,CAAA,CAAA,CAEd6C,CAEX,CAAC,EACH,CAAA,CAAG5C,CAAK,CAAA,GAERY,CAAAA,CAAeb,CAAI,CAAA,CACnBoB,CAAAA,CAAmB,IAAI,GAAK,EAC5BF,CAAAA,CAAgB,KAAK,CAAA,CAAA,CAGhB,IAAM,CACPQ,CAAAA,EAAU,aAAA,CAAcA,CAAQ,EACtC,CACF,CAAA,CAAG,CAACX,CAAAA,CAAYf,CAAAA,CAAMC,EAAOC,CAAAA,CAAeC,CAAAA,CAAYC,CAAAA,CAAiBE,CAAAA,CAAYD,CAAoB,CAAC,CAAA,CAE1GoB,eAAAA,CAAU,IAAM,CACd,GAAIf,CAAAA,GAAc,MAAA,EAAUA,IAAc,MAAA,CAAQ,OAElD,IAAMqC,CAAAA,CAAoBC,GAAyC,CACjEA,CAAAA,CAAQ,OAAA,CAASC,CAAAA,EAAU,CACrBA,CAAAA,CAAM,cAAA,EAAkB,CAAC5B,CAAAA,GAC3BL,CAAAA,CAAc,IAAI,CAAA,CAClBM,CAAAA,CAAe,IAAI,CAAA,EAEvB,CAAC,EACH,CAAA,CAEM4B,EAAW,IAAI,oBAAA,CAAqBH,CAAAA,CAAkB,CAAE,UAAW,EAAI,CAAC,CAAA,CACxEI,CAAAA,CAAa5B,CAAAA,CAAa,OAAA,CAChC,OAAI4B,CAAAA,EACFD,EAAS,OAAA,CAAQC,CAAU,CAAA,CAGtB,IAAM,CACPA,CAAAA,EACFD,CAAAA,CAAS,SAAA,CAAUC,CAAU,EAEjC,CACF,CAAA,CAAG,CAACzC,CAAAA,CAAWW,CAAW,CAAC,CAAA,CAE3B,IAAM+B,EACJ1C,CAAAA,GAAc,OAAA,EAAWA,CAAAA,GAAc,MAAA,CACnC,CACE,YAAA,CAAc,IAAMM,CAAAA,CAAc,IAAI,EACtC,YAAA,CAAc,IAAMA,CAAAA,CAAc,KAAK,CACzC,CAAA,CACA,EAAC,CAEP,OACEqC,eAAAA,CAACC,mBAAAA,CAAO,IAAA,CAAP,CACC,UAAW9C,CAAAA,CACX,GAAA,CAAKe,CAAAA,CACL,KAAA,CAAO,CAAE,OAAA,CAAS,cAAA,CAAgB,UAAA,CAAY,UAAW,CAAA,CACxD,GAAG6B,CAAAA,CACH,GAAGzC,EAEJ,QAAA,CAAA,CAAA4C,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,UAAW,QAAA,CAAA3C,CAAAA,CAAY,CAAA,CACvC2C,cAAAA,CAAC,QAAK,aAAA,CAAY,MAAA,CACf,QAAA,CAAA3C,CAAAA,CAAY,KAAA,CAAM,EAAE,CAAA,CAAE,GAAA,CAAI,CAACwB,CAAAA,CAAMoB,CAAAA,GAAU,CAC1C,IAAMC,EAAmBtC,CAAAA,CAAgB,GAAA,CAAIqC,CAAK,CAAA,EAAK,CAACvC,CAAAA,EAAgB,CAACF,CAAAA,CACzE,OACEwC,eAAC,MAAA,CAAA,CAAiB,SAAA,CAAWE,CAAAA,CAAmBlD,CAAAA,CAAYE,EACzD,QAAA,CAAA2B,CAAAA,CAAAA,CADQoB,CAEX,CAEJ,CAAC,CAAA,CACH,CAAA,CAAA,CACF,CAEJ,KAEOE,CAAAA,CAAQ3D","file":"index.js","sourcesContent":["\"use client\";\r\n\r\nimport { useEffect, useState, useRef } from \"react\";\r\nimport { motion, HTMLMotionProps } from \"framer-motion\";\r\n\r\ninterface DecryptedTextProps extends HTMLMotionProps<\"span\"> {\r\n text: string;\r\n speed?: number;\r\n maxIterations?: number;\r\n sequential?: boolean;\r\n revealDirection?: \"start\" | \"end\" | \"center\";\r\n useOriginalCharsOnly?: boolean;\r\n characters?: string;\r\n className?: string;\r\n parentClassName?: string;\r\n encryptedClassName?: string;\r\n animateOn?: \"view\" | \"hover\" | \"both\";\r\n}\r\n\r\nexport function DecryptedText({\r\n text,\r\n speed = 50,\r\n maxIterations = 10,\r\n sequential = false,\r\n revealDirection = \"start\",\r\n useOriginalCharsOnly = false,\r\n characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()_+\",\r\n className = \"\",\r\n parentClassName = \"\",\r\n encryptedClassName = \"\",\r\n animateOn = \"hover\",\r\n ...props\r\n}: DecryptedTextProps) {\r\n const [displayText, setDisplayText] = useState<string>(text);\r\n const [isHovering, setIsHovering] = useState<boolean>(false);\r\n const [isScrambling, setIsScrambling] = useState<boolean>(false);\r\n const [revealedIndices, setRevealedIndices] = useState<Set<number>>(new Set());\r\n const [hasAnimated, setHasAnimated] = useState<boolean>(false);\r\n const containerRef = useRef<HTMLSpanElement>(null);\r\n\r\n useEffect(() => {\r\n let interval: NodeJS.Timeout;\r\n let currentIteration = 0;\r\n\r\n const getNextIndex = (revealedSet: Set<number>): number => {\r\n const textLength = text.length;\r\n switch (revealDirection) {\r\n case \"start\":\r\n return revealedSet.size;\r\n case \"end\":\r\n return textLength - 1 - revealedSet.size;\r\n case \"center\": {\r\n const middle = Math.floor(textLength / 2);\r\n const offset = Math.floor(revealedSet.size / 2);\r\n const nextIndex = revealedSet.size % 2 === 0 ? middle + offset : middle - offset - 1;\r\n if (nextIndex >= 0 && nextIndex < textLength && !revealedSet.has(nextIndex)) {\r\n return nextIndex;\r\n }\r\n for (let i = 0; i < textLength; i++) {\r\n if (!revealedSet.has(i)) return i;\r\n }\r\n return 0;\r\n }\r\n default:\r\n return revealedSet.size;\r\n }\r\n };\r\n\r\n const availableChars = useOriginalCharsOnly\r\n ? Array.from(new Set(text.split(\"\"))).filter((char) => char !== \" \")\r\n : characters.split(\"\");\r\n\r\n const shuffleText = (originalText: string, currentRevealed: Set<number>): string => {\r\n if (useOriginalCharsOnly) {\r\n const positions = originalText.split(\"\").map((char, i) => ({\r\n char,\r\n isSpace: char === \" \",\r\n index: i,\r\n isRevealed: currentRevealed.has(i),\r\n }));\r\n\r\n const nonSpaceChars = positions.filter((p) => !p.isSpace && !p.isRevealed).map((p) => p.char);\r\n\r\n for (let i = nonSpaceChars.length - 1; i > 0; i--) {\r\n const j = Math.floor(Math.random() * (i + 1));\r\n [nonSpaceChars[i], nonSpaceChars[j]] = [nonSpaceChars[j], nonSpaceChars[i]];\r\n }\r\n\r\n let charIndex = 0;\r\n return positions\r\n .map((p) => {\r\n if (p.isSpace) return \" \";\r\n if (p.isRevealed) return originalText[p.index];\r\n return nonSpaceChars[charIndex++];\r\n })\r\n .join(\"\");\r\n } else {\r\n return originalText\r\n .split(\"\")\r\n .map((char, i) => {\r\n if (char === \" \") return \" \";\r\n if (currentRevealed.has(i)) return originalText[i];\r\n return availableChars[Math.floor(Math.random() * availableChars.length)];\r\n })\r\n .join(\"\");\r\n }\r\n };\r\n\r\n if (isHovering) {\r\n setIsScrambling(true);\r\n interval = setInterval(() => {\r\n setRevealedIndices((prevRevealed) => {\r\n if (sequential) {\r\n if (prevRevealed.size < text.length) {\r\n const nextIndex = getNextIndex(prevRevealed);\r\n const newRevealed = new Set(prevRevealed);\r\n newRevealed.add(nextIndex);\r\n setDisplayText(shuffleText(text, newRevealed));\r\n return newRevealed;\r\n } else {\r\n clearInterval(interval);\r\n setIsScrambling(false);\r\n return prevRevealed;\r\n }\r\n } else {\r\n setDisplayText(shuffleText(text, prevRevealed));\r\n currentIteration++;\r\n if (currentIteration >= maxIterations) {\r\n clearInterval(interval);\r\n setIsScrambling(false);\r\n setDisplayText(text);\r\n }\r\n return prevRevealed;\r\n }\r\n });\r\n }, speed);\r\n } else {\r\n setDisplayText(text);\r\n setRevealedIndices(new Set());\r\n setIsScrambling(false);\r\n }\r\n\r\n return () => {\r\n if (interval) clearInterval(interval);\r\n };\r\n }, [isHovering, text, speed, maxIterations, sequential, revealDirection, characters, useOriginalCharsOnly]);\r\n\r\n useEffect(() => {\r\n if (animateOn !== \"view\" && animateOn !== \"both\") return;\r\n\r\n const observerCallback = (entries: IntersectionObserverEntry[]) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting && !hasAnimated) {\r\n setIsHovering(true);\r\n setHasAnimated(true);\r\n }\r\n });\r\n };\r\n\r\n const observer = new IntersectionObserver(observerCallback, { threshold: 0.1 });\r\n const currentRef = containerRef.current;\r\n if (currentRef) {\r\n observer.observe(currentRef);\r\n }\r\n\r\n return () => {\r\n if (currentRef) {\r\n observer.unobserve(currentRef);\r\n }\r\n };\r\n }, [animateOn, hasAnimated]);\r\n\r\n const hoverProps =\r\n animateOn === \"hover\" || animateOn === \"both\"\r\n ? {\r\n onMouseEnter: () => setIsHovering(true),\r\n onMouseLeave: () => setIsHovering(false),\r\n }\r\n : {};\r\n\r\n return (\r\n <motion.span\r\n className={parentClassName}\r\n ref={containerRef}\r\n style={{ display: \"inline-block\", whiteSpace: \"pre-wrap\" }}\r\n {...hoverProps}\r\n {...props}\r\n >\r\n <span className=\"sr-only\">{displayText}</span>\r\n <span aria-hidden=\"true\">\r\n {displayText.split(\"\").map((char, index) => {\r\n const isRevealedOrDone = revealedIndices.has(index) || !isScrambling || !isHovering;\r\n return (\r\n <span key={index} className={isRevealedOrDone ? className : encryptedClassName}>\r\n {char}\r\n </span>\r\n );\r\n })}\r\n </span>\r\n </motion.span>\r\n );\r\n}\r\n\r\nexport default DecryptedText;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {useState,useRef,useEffect}from'react';import {motion}from'framer-motion';import {jsxs,jsx}from'react/jsx-runtime';function F({text:r,speed:w=50,maxIterations:y=10,sequential:S=false,revealDirection:N="start",useOriginalCharsOnly:I=false,characters:x="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()_+",className:L="",parentClassName:P="",encryptedClassName:C="",animateOn:f="hover",...k}){let[T,h]=useState(r),[g,M]=useState(false),[A,m]=useState(false),[R,z]=useState(new Set),[H,j]=useState(false),D=useRef(null);useEffect(()=>{let o,i=0,l=s=>{let a=r.length;switch(N){case "start":return s.size;case "end":return a-1-s.size;case "center":{let n=Math.floor(a/2),t=Math.floor(s.size/2),c=s.size%2===0?n+t:n-t-1;if(c>=0&&c<a&&!s.has(c))return c;for(let e=0;e<a;e++)if(!s.has(e))return e;return 0}default:return s.size}},b=I?Array.from(new Set(r.split(""))).filter(s=>s!==" "):x.split(""),d=(s,a)=>{if(I){let n=s.split("").map((e,u)=>({char:e,isSpace:e===" ",index:u,isRevealed:a.has(u)})),t=n.filter(e=>!e.isSpace&&!e.isRevealed).map(e=>e.char);for(let e=t.length-1;e>0;e--){let u=Math.floor(Math.random()*(e+1));[t[e],t[u]]=[t[u],t[e]];}let c=0;return n.map(e=>e.isSpace?" ":e.isRevealed?s[e.index]:t[c++]).join("")}else return s.split("").map((n,t)=>n===" "?" ":a.has(t)?s[t]:b[Math.floor(Math.random()*b.length)]).join("")};return g?(m(true),o=setInterval(()=>{z(s=>{if(S)if(s.size<r.length){let a=l(s),n=new Set(s);return n.add(a),h(d(r,n)),n}else return clearInterval(o),m(false),s;else return h(d(r,s)),i++,i>=y&&(clearInterval(o),m(false),h(r)),s});},w)):(h(r),z(new Set),m(false)),()=>{o&&clearInterval(o);}},[g,r,w,y,S,N,x,I]),useEffect(()=>{if(f!=="view"&&f!=="both")return;let o=b=>{b.forEach(d=>{d.isIntersecting&&!H&&(M(true),j(true));});},i=new IntersectionObserver(o,{threshold:.1}),l=D.current;return l&&i.observe(l),()=>{l&&i.unobserve(l);}},[f,H]);let J=f==="hover"||f==="both"?{onMouseEnter:()=>M(true),onMouseLeave:()=>M(false)}:{};return jsxs(motion.span,{className:P,ref:D,style:{display:"inline-block",whiteSpace:"pre-wrap"},...J,...k,children:[jsx("span",{className:"sr-only",children:T}),jsx("span",{"aria-hidden":"true",children:T.split("").map((o,i)=>{let l=R.has(i)||!A||!g;return jsx("span",{className:l?L:C,children:o},i)})})]})}var V=F;export{F as DecryptedText,V as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/decrypted-text/index.tsx"],"names":["DecryptedText","text","speed","maxIterations","sequential","revealDirection","useOriginalCharsOnly","characters","className","parentClassName","encryptedClassName","animateOn","props","displayText","setDisplayText","useState","isHovering","setIsHovering","isScrambling","setIsScrambling","revealedIndices","setRevealedIndices","hasAnimated","setHasAnimated","containerRef","useRef","useEffect","interval","currentIteration","getNextIndex","revealedSet","textLength","middle","offset","nextIndex","i","availableChars","char","shuffleText","originalText","currentRevealed","positions","nonSpaceChars","p","j","charIndex","prevRevealed","newRevealed","observerCallback","entries","entry","observer","currentRef","hoverProps","jsxs","motion","jsx","index","isRevealedOrDone","decrypted_text_default"],"mappings":"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","file":"index.mjs","sourcesContent":["\"use client\";\r\n\r\nimport { useEffect, useState, useRef } from \"react\";\r\nimport { motion, HTMLMotionProps } from \"framer-motion\";\r\n\r\ninterface DecryptedTextProps extends HTMLMotionProps<\"span\"> {\r\n text: string;\r\n speed?: number;\r\n maxIterations?: number;\r\n sequential?: boolean;\r\n revealDirection?: \"start\" | \"end\" | \"center\";\r\n useOriginalCharsOnly?: boolean;\r\n characters?: string;\r\n className?: string;\r\n parentClassName?: string;\r\n encryptedClassName?: string;\r\n animateOn?: \"view\" | \"hover\" | \"both\";\r\n}\r\n\r\nexport function DecryptedText({\r\n text,\r\n speed = 50,\r\n maxIterations = 10,\r\n sequential = false,\r\n revealDirection = \"start\",\r\n useOriginalCharsOnly = false,\r\n characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()_+\",\r\n className = \"\",\r\n parentClassName = \"\",\r\n encryptedClassName = \"\",\r\n animateOn = \"hover\",\r\n ...props\r\n}: DecryptedTextProps) {\r\n const [displayText, setDisplayText] = useState<string>(text);\r\n const [isHovering, setIsHovering] = useState<boolean>(false);\r\n const [isScrambling, setIsScrambling] = useState<boolean>(false);\r\n const [revealedIndices, setRevealedIndices] = useState<Set<number>>(new Set());\r\n const [hasAnimated, setHasAnimated] = useState<boolean>(false);\r\n const containerRef = useRef<HTMLSpanElement>(null);\r\n\r\n useEffect(() => {\r\n let interval: NodeJS.Timeout;\r\n let currentIteration = 0;\r\n\r\n const getNextIndex = (revealedSet: Set<number>): number => {\r\n const textLength = text.length;\r\n switch (revealDirection) {\r\n case \"start\":\r\n return revealedSet.size;\r\n case \"end\":\r\n return textLength - 1 - revealedSet.size;\r\n case \"center\": {\r\n const middle = Math.floor(textLength / 2);\r\n const offset = Math.floor(revealedSet.size / 2);\r\n const nextIndex = revealedSet.size % 2 === 0 ? middle + offset : middle - offset - 1;\r\n if (nextIndex >= 0 && nextIndex < textLength && !revealedSet.has(nextIndex)) {\r\n return nextIndex;\r\n }\r\n for (let i = 0; i < textLength; i++) {\r\n if (!revealedSet.has(i)) return i;\r\n }\r\n return 0;\r\n }\r\n default:\r\n return revealedSet.size;\r\n }\r\n };\r\n\r\n const availableChars = useOriginalCharsOnly\r\n ? Array.from(new Set(text.split(\"\"))).filter((char) => char !== \" \")\r\n : characters.split(\"\");\r\n\r\n const shuffleText = (originalText: string, currentRevealed: Set<number>): string => {\r\n if (useOriginalCharsOnly) {\r\n const positions = originalText.split(\"\").map((char, i) => ({\r\n char,\r\n isSpace: char === \" \",\r\n index: i,\r\n isRevealed: currentRevealed.has(i),\r\n }));\r\n\r\n const nonSpaceChars = positions.filter((p) => !p.isSpace && !p.isRevealed).map((p) => p.char);\r\n\r\n for (let i = nonSpaceChars.length - 1; i > 0; i--) {\r\n const j = Math.floor(Math.random() * (i + 1));\r\n [nonSpaceChars[i], nonSpaceChars[j]] = [nonSpaceChars[j], nonSpaceChars[i]];\r\n }\r\n\r\n let charIndex = 0;\r\n return positions\r\n .map((p) => {\r\n if (p.isSpace) return \" \";\r\n if (p.isRevealed) return originalText[p.index];\r\n return nonSpaceChars[charIndex++];\r\n })\r\n .join(\"\");\r\n } else {\r\n return originalText\r\n .split(\"\")\r\n .map((char, i) => {\r\n if (char === \" \") return \" \";\r\n if (currentRevealed.has(i)) return originalText[i];\r\n return availableChars[Math.floor(Math.random() * availableChars.length)];\r\n })\r\n .join(\"\");\r\n }\r\n };\r\n\r\n if (isHovering) {\r\n setIsScrambling(true);\r\n interval = setInterval(() => {\r\n setRevealedIndices((prevRevealed) => {\r\n if (sequential) {\r\n if (prevRevealed.size < text.length) {\r\n const nextIndex = getNextIndex(prevRevealed);\r\n const newRevealed = new Set(prevRevealed);\r\n newRevealed.add(nextIndex);\r\n setDisplayText(shuffleText(text, newRevealed));\r\n return newRevealed;\r\n } else {\r\n clearInterval(interval);\r\n setIsScrambling(false);\r\n return prevRevealed;\r\n }\r\n } else {\r\n setDisplayText(shuffleText(text, prevRevealed));\r\n currentIteration++;\r\n if (currentIteration >= maxIterations) {\r\n clearInterval(interval);\r\n setIsScrambling(false);\r\n setDisplayText(text);\r\n }\r\n return prevRevealed;\r\n }\r\n });\r\n }, speed);\r\n } else {\r\n setDisplayText(text);\r\n setRevealedIndices(new Set());\r\n setIsScrambling(false);\r\n }\r\n\r\n return () => {\r\n if (interval) clearInterval(interval);\r\n };\r\n }, [isHovering, text, speed, maxIterations, sequential, revealDirection, characters, useOriginalCharsOnly]);\r\n\r\n useEffect(() => {\r\n if (animateOn !== \"view\" && animateOn !== \"both\") return;\r\n\r\n const observerCallback = (entries: IntersectionObserverEntry[]) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting && !hasAnimated) {\r\n setIsHovering(true);\r\n setHasAnimated(true);\r\n }\r\n });\r\n };\r\n\r\n const observer = new IntersectionObserver(observerCallback, { threshold: 0.1 });\r\n const currentRef = containerRef.current;\r\n if (currentRef) {\r\n observer.observe(currentRef);\r\n }\r\n\r\n return () => {\r\n if (currentRef) {\r\n observer.unobserve(currentRef);\r\n }\r\n };\r\n }, [animateOn, hasAnimated]);\r\n\r\n const hoverProps =\r\n animateOn === \"hover\" || animateOn === \"both\"\r\n ? {\r\n onMouseEnter: () => setIsHovering(true),\r\n onMouseLeave: () => setIsHovering(false),\r\n }\r\n : {};\r\n\r\n return (\r\n <motion.span\r\n className={parentClassName}\r\n ref={containerRef}\r\n style={{ display: \"inline-block\", whiteSpace: \"pre-wrap\" }}\r\n {...hoverProps}\r\n {...props}\r\n >\r\n <span className=\"sr-only\">{displayText}</span>\r\n <span aria-hidden=\"true\">\r\n {displayText.split(\"\").map((char, index) => {\r\n const isRevealedOrDone = revealedIndices.has(index) || !isScrambling || !isHovering;\r\n return (\r\n <span key={index} className={isRevealedOrDone ? className : encryptedClassName}>\r\n {char}\r\n </span>\r\n );\r\n })}\r\n </span>\r\n </motion.span>\r\n );\r\n}\r\n\r\nexport default DecryptedText;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var react=require('react'),framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function n(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function h({className:e,children:r,direction:o="middle"}){let t={top:"items-start",middle:"items-center",bottom:"items-end"};return jsxRuntime.jsx(framerMotion.motion.div,{className:n("mx-auto w-max mt-8 h-[58px] p-2 flex gap-2 rounded-2xl border","supports-backdrop-blur:bg-white/10 supports-backdrop-blur:dark:bg-black/10 backdrop-blur-md","border-gray-200 bg-gray-50/80 dark:border-gray-800 dark:bg-gray-900/80",t[o],e),children:r})}function I({size:e=40,magnification:r=60,distance:o=140,children:t,className:d}){let i=react.useRef(null),s=framerMotion.useMotionValue(1/0),c=framerMotion.useSpring(framerMotion.useTransform(s,[-o,0,o],[e,r,e]),{mass:.1,stiffness:150,damping:12});return jsxRuntime.jsx(framerMotion.motion.div,{ref:i,style:{width:c},onMouseMove:u=>s.set(u.pageX-i.current.offsetLeft-c.get()/2),onMouseLeave:()=>s.set(1/0),className:n("flex aspect-square cursor-pointer items-center justify-center rounded-full",d),children:t})}exports.Dock=h;exports.DockIcon=I;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/dock/index.tsx"],"names":["cn","inputs","twMerge","clsx","Dock","className","children","direction","directionClasses","jsx","motion","DockIcon","size","magnification","distance","ref","useRef","mouseX","useMotionValue","width","useSpring","useTransform","e"],"mappings":"mLAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,sBAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCOO,SAASG,CAAAA,CAAK,CAAE,SAAA,CAAAC,CAAAA,CAAW,QAAA,CAAAC,CAAAA,CAAU,UAAAC,CAAAA,CAAY,QAAS,CAAA,CAAc,CAC7E,IAAMC,CAAAA,CAAmB,CACvB,GAAA,CAAK,aAAA,CACL,OAAQ,cAAA,CACR,MAAA,CAAQ,WACV,CAAA,CAEA,OACEC,eAACC,mBAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAWV,EACT,+DAAA,CACA,6FAAA,CACA,yEACAQ,CAAAA,CAAiBD,CAAS,EAC1BF,CACF,CAAA,CAEC,QAAA,CAAAC,CAAAA,CACH,CAEJ,CAUO,SAASK,EAAS,CACvB,IAAA,CAAAC,EAAO,EAAA,CACP,aAAA,CAAAC,CAAAA,CAAgB,EAAA,CAChB,SAAAC,CAAAA,CAAW,GAAA,CACX,QAAA,CAAAR,CAAAA,CACA,UAAAD,CACF,CAAA,CAAkB,CAChB,IAAMU,EAAMC,YAAAA,CAAuB,IAAI,EACjCC,CAAAA,CAASC,2BAAAA,CAAe,GAAQ,CAAA,CAEhCC,CAAAA,CAAQC,sBAAAA,CACZC,yBAAAA,CAAaJ,EAAQ,CAAC,CAACH,EAAU,CAAA,CAAGA,CAAQ,EAAG,CAACF,CAAAA,CAAMC,CAAAA,CAAeD,CAAI,CAAC,CAAA,CAC1E,CAAE,KAAM,EAAA,CAAK,SAAA,CAAW,IAAK,OAAA,CAAS,EAAG,CAC3C,CAAA,CAEA,OACEH,cAAAA,CAACC,mBAAAA,CAAO,GAAA,CAAP,CACC,IAAKK,CAAAA,CACL,KAAA,CAAO,CAAE,KAAA,CAAAI,CAAM,CAAA,CACf,WAAA,CAAcG,GAAML,CAAAA,CAAO,GAAA,CAAIK,EAAE,KAAA,CAAQP,CAAAA,CAAI,OAAA,CAAS,UAAA,CAAaI,EAAM,GAAA,EAAI,CAAI,CAAC,CAAA,CAClF,YAAA,CAAc,IAAMF,CAAAA,CAAO,GAAA,CAAI,CAAA,CAAA,CAAQ,CAAA,CACvC,UAAWjB,CAAAA,CAAG,4EAAA,CAA8EK,CAAS,CAAA,CAEpG,QAAA,CAAAC,EACH,CAEJ","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 } from \"react\";\r\nimport { motion, useMotionValue, useSpring, useTransform } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\nexport interface DockProps {\r\n className?: string;\r\n children: React.ReactNode;\r\n direction?: \"top\" | \"middle\" | \"bottom\";\r\n}\r\n\r\nexport function Dock({ className, children, direction = \"middle\" }: DockProps) {\r\n const directionClasses = {\r\n top: \"items-start\",\r\n middle: \"items-center\",\r\n bottom: \"items-end\",\r\n };\r\n\r\n return (\r\n <motion.div\r\n className={cn(\r\n \"mx-auto w-max mt-8 h-[58px] p-2 flex gap-2 rounded-2xl border\",\r\n \"supports-backdrop-blur:bg-white/10 supports-backdrop-blur:dark:bg-black/10 backdrop-blur-md\",\r\n \"border-gray-200 bg-gray-50/80 dark:border-gray-800 dark:bg-gray-900/80\",\r\n directionClasses[direction],\r\n className\r\n )}\r\n >\r\n {children}\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport interface DockIconProps {\r\n size?: number;\r\n magnification?: number;\r\n distance?: number;\r\n children?: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function DockIcon({\r\n size = 40,\r\n magnification = 60,\r\n distance = 140,\r\n children,\r\n className,\r\n}: DockIconProps) {\r\n const ref = useRef<HTMLDivElement>(null);\r\n const mouseX = useMotionValue(Infinity);\r\n\r\n const width = useSpring(\r\n useTransform(mouseX, [-distance, 0, distance], [size, magnification, size]),\r\n { mass: 0.1, stiffness: 150, damping: 12 }\r\n );\r\n\r\n return (\r\n <motion.div\r\n ref={ref}\r\n style={{ width }}\r\n onMouseMove={(e) => mouseX.set(e.pageX - ref.current!.offsetLeft - width.get() / 2)}\r\n onMouseLeave={() => mouseX.set(Infinity)}\r\n className={cn(\"flex aspect-square cursor-pointer items-center justify-center rounded-full\", className)}\r\n >\r\n {children}\r\n </motion.div>\r\n );\r\n}\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {useRef}from'react';import {motion,useMotionValue,useSpring,useTransform}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function n(...e){return twMerge(clsx(e))}function h({className:e,children:r,direction:o="middle"}){let t={top:"items-start",middle:"items-center",bottom:"items-end"};return jsx(motion.div,{className:n("mx-auto w-max mt-8 h-[58px] p-2 flex gap-2 rounded-2xl border","supports-backdrop-blur:bg-white/10 supports-backdrop-blur:dark:bg-black/10 backdrop-blur-md","border-gray-200 bg-gray-50/80 dark:border-gray-800 dark:bg-gray-900/80",t[o],e),children:r})}function I({size:e=40,magnification:r=60,distance:o=140,children:t,className:d}){let i=useRef(null),s=useMotionValue(1/0),c=useSpring(useTransform(s,[-o,0,o],[e,r,e]),{mass:.1,stiffness:150,damping:12});return jsx(motion.div,{ref:i,style:{width:c},onMouseMove:u=>s.set(u.pageX-i.current.offsetLeft-c.get()/2),onMouseLeave:()=>s.set(1/0),className:n("flex aspect-square cursor-pointer items-center justify-center rounded-full",d),children:t})}export{h as Dock,I as DockIcon};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/dock/index.tsx"],"names":["cn","inputs","twMerge","clsx","Dock","className","children","direction","directionClasses","jsx","motion","DockIcon","size","magnification","distance","ref","useRef","mouseX","useMotionValue","width","useSpring","useTransform","e"],"mappings":"qMAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,QAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCOO,SAASG,CAAAA,CAAK,CAAE,SAAA,CAAAC,CAAAA,CAAW,QAAA,CAAAC,CAAAA,CAAU,UAAAC,CAAAA,CAAY,QAAS,CAAA,CAAc,CAC7E,IAAMC,CAAAA,CAAmB,CACvB,GAAA,CAAK,aAAA,CACL,OAAQ,cAAA,CACR,MAAA,CAAQ,WACV,CAAA,CAEA,OACEC,IAACC,MAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAWV,EACT,+DAAA,CACA,6FAAA,CACA,yEACAQ,CAAAA,CAAiBD,CAAS,EAC1BF,CACF,CAAA,CAEC,QAAA,CAAAC,CAAAA,CACH,CAEJ,CAUO,SAASK,EAAS,CACvB,IAAA,CAAAC,EAAO,EAAA,CACP,aAAA,CAAAC,CAAAA,CAAgB,EAAA,CAChB,SAAAC,CAAAA,CAAW,GAAA,CACX,QAAA,CAAAR,CAAAA,CACA,UAAAD,CACF,CAAA,CAAkB,CAChB,IAAMU,EAAMC,MAAAA,CAAuB,IAAI,EACjCC,CAAAA,CAASC,cAAAA,CAAe,GAAQ,CAAA,CAEhCC,CAAAA,CAAQC,SAAAA,CACZC,YAAAA,CAAaJ,EAAQ,CAAC,CAACH,EAAU,CAAA,CAAGA,CAAQ,EAAG,CAACF,CAAAA,CAAMC,CAAAA,CAAeD,CAAI,CAAC,CAAA,CAC1E,CAAE,KAAM,EAAA,CAAK,SAAA,CAAW,IAAK,OAAA,CAAS,EAAG,CAC3C,CAAA,CAEA,OACEH,GAAAA,CAACC,MAAAA,CAAO,GAAA,CAAP,CACC,IAAKK,CAAAA,CACL,KAAA,CAAO,CAAE,KAAA,CAAAI,CAAM,CAAA,CACf,WAAA,CAAcG,GAAML,CAAAA,CAAO,GAAA,CAAIK,EAAE,KAAA,CAAQP,CAAAA,CAAI,OAAA,CAAS,UAAA,CAAaI,EAAM,GAAA,EAAI,CAAI,CAAC,CAAA,CAClF,YAAA,CAAc,IAAMF,CAAAA,CAAO,GAAA,CAAI,CAAA,CAAA,CAAQ,CAAA,CACvC,UAAWjB,CAAAA,CAAG,4EAAA,CAA8EK,CAAS,CAAA,CAEpG,QAAA,CAAAC,EACH,CAEJ","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 } from \"react\";\r\nimport { motion, useMotionValue, useSpring, useTransform } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\nexport interface DockProps {\r\n className?: string;\r\n children: React.ReactNode;\r\n direction?: \"top\" | \"middle\" | \"bottom\";\r\n}\r\n\r\nexport function Dock({ className, children, direction = \"middle\" }: DockProps) {\r\n const directionClasses = {\r\n top: \"items-start\",\r\n middle: \"items-center\",\r\n bottom: \"items-end\",\r\n };\r\n\r\n return (\r\n <motion.div\r\n className={cn(\r\n \"mx-auto w-max mt-8 h-[58px] p-2 flex gap-2 rounded-2xl border\",\r\n \"supports-backdrop-blur:bg-white/10 supports-backdrop-blur:dark:bg-black/10 backdrop-blur-md\",\r\n \"border-gray-200 bg-gray-50/80 dark:border-gray-800 dark:bg-gray-900/80\",\r\n directionClasses[direction],\r\n className\r\n )}\r\n >\r\n {children}\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport interface DockIconProps {\r\n size?: number;\r\n magnification?: number;\r\n distance?: number;\r\n children?: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function DockIcon({\r\n size = 40,\r\n magnification = 60,\r\n distance = 140,\r\n children,\r\n className,\r\n}: DockIconProps) {\r\n const ref = useRef<HTMLDivElement>(null);\r\n const mouseX = useMotionValue(Infinity);\r\n\r\n const width = useSpring(\r\n useTransform(mouseX, [-distance, 0, distance], [size, magnification, size]),\r\n { mass: 0.1, stiffness: 150, damping: 12 }\r\n );\r\n\r\n return (\r\n <motion.div\r\n ref={ref}\r\n style={{ width }}\r\n onMouseMove={(e) => mouseX.set(e.pageX - ref.current!.offsetLeft - width.get() / 2)}\r\n onMouseLeave={() => mouseX.set(Infinity)}\r\n className={cn(\"flex aspect-square cursor-pointer items-center justify-center rounded-full\", className)}\r\n >\r\n {children}\r\n </motion.div>\r\n );\r\n}\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function r(...t){return tailwindMerge.twMerge(clsx.clsx(t))}function g({isOpen:t,onClose:i,children:c,className:m,position:o="right"}){react.useEffect(()=>{let a=f=>{f.key==="Escape"&&i();};return t&&(document.addEventListener("keydown",a),document.body.style.overflow="hidden"),()=>{document.removeEventListener("keydown",a),document.body.style.overflow="unset";}},[t,i]);let n={left:{initial:{x:"-100%"},animate:{x:0},exit:{x:"-100%"}},right:{initial:{x:"100%"},animate:{x:0},exit:{x:"100%"}},bottom:{initial:{y:"100%"},animate:{y:0},exit:{y:"100%"}}},d={left:"left-0 top-0 h-full w-80",right:"right-0 top-0 h-full w-80",bottom:"bottom-0 left-0 right-0 h-auto max-h-[80vh]"};return jsxRuntime.jsx(framerMotion.AnimatePresence,{children:t&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(framerMotion.motion.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},onClick:i,className:"fixed inset-0 bg-black/50 z-50"}),jsxRuntime.jsxs(framerMotion.motion.div,{initial:n[o].initial,animate:n[o].animate,exit:n[o].exit,transition:{type:"spring",damping:25,stiffness:300},className:r("fixed z-50 p-6","bg-white dark:bg-zinc-900","shadow-xl",d[o],m),children:[jsxRuntime.jsx("button",{onClick:i,className:"absolute top-4 right-4 p-1 rounded-lg hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors",children:jsxRuntime.jsx("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})}),c]})]})})}var z=g;exports.Drawer=g;exports.default=z;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/drawer/index.tsx"],"names":["cn","inputs","twMerge","clsx","Drawer","isOpen","onClose","children","className","position","useEffect","handleEscape","e","variants","positionClasses","jsx","AnimatePresence","jsxs","Fragment","motion","drawer_default"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect } from \"react\";\r\nimport { motion, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface DrawerProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n children: React.ReactNode;\r\n className?: string;\r\n position?: \"left\" | \"right\" | \"bottom\";\r\n}\r\n\r\nexport function Drawer({ isOpen, onClose, children, className, position = \"right\" }: DrawerProps) {\r\n useEffect(() => {\r\n const handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") onClose();\r\n };\r\n if (isOpen) {\r\n document.addEventListener(\"keydown\", handleEscape);\r\n document.body.style.overflow = \"hidden\";\r\n }\r\n return () => {\r\n document.removeEventListener(\"keydown\", handleEscape);\r\n document.body.style.overflow = \"unset\";\r\n };\r\n }, [isOpen, onClose]);\r\n\r\n const variants = {\r\n left: { initial: { x: \"-100%\" }, animate: { x: 0 }, exit: { x: \"-100%\" } },\r\n right: { initial: { x: \"100%\" }, animate: { x: 0 }, exit: { x: \"100%\" } },\r\n bottom: { initial: { y: \"100%\" }, animate: { y: 0 }, exit: { y: \"100%\" } },\r\n };\r\n\r\n const positionClasses = {\r\n left: \"left-0 top-0 h-full w-80\",\r\n right: \"right-0 top-0 h-full w-80\",\r\n bottom: \"bottom-0 left-0 right-0 h-auto max-h-[80vh]\",\r\n };\r\n\r\n return (\r\n <AnimatePresence>\r\n {isOpen && (\r\n <>\r\n <motion.div\r\n initial={{ opacity: 0 }}\r\n animate={{ opacity: 1 }}\r\n exit={{ opacity: 0 }}\r\n onClick={onClose}\r\n className=\"fixed inset-0 bg-black/50 z-50\"\r\n />\r\n <motion.div\r\n initial={variants[position].initial}\r\n animate={variants[position].animate}\r\n exit={variants[position].exit}\r\n transition={{ type: \"spring\", damping: 25, stiffness: 300 }}\r\n className={cn(\r\n \"fixed z-50 p-6\",\r\n \"bg-white dark:bg-zinc-900\",\r\n \"shadow-xl\",\r\n positionClasses[position],\r\n className\r\n )}\r\n >\r\n <button\r\n onClick={onClose}\r\n className=\"absolute top-4 right-4 p-1 rounded-lg hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors\"\r\n >\r\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n {children}\r\n </motion.div>\r\n </>\r\n )}\r\n </AnimatePresence>\r\n );\r\n}\r\n\r\nexport default Drawer;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {useEffect}from'react';import {AnimatePresence,motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx,jsxs,Fragment}from'react/jsx-runtime';function r(...t){return twMerge(clsx(t))}function g({isOpen:t,onClose:i,children:c,className:m,position:o="right"}){useEffect(()=>{let a=f=>{f.key==="Escape"&&i();};return t&&(document.addEventListener("keydown",a),document.body.style.overflow="hidden"),()=>{document.removeEventListener("keydown",a),document.body.style.overflow="unset";}},[t,i]);let n={left:{initial:{x:"-100%"},animate:{x:0},exit:{x:"-100%"}},right:{initial:{x:"100%"},animate:{x:0},exit:{x:"100%"}},bottom:{initial:{y:"100%"},animate:{y:0},exit:{y:"100%"}}},d={left:"left-0 top-0 h-full w-80",right:"right-0 top-0 h-full w-80",bottom:"bottom-0 left-0 right-0 h-auto max-h-[80vh]"};return jsx(AnimatePresence,{children:t&&jsxs(Fragment,{children:[jsx(motion.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},onClick:i,className:"fixed inset-0 bg-black/50 z-50"}),jsxs(motion.div,{initial:n[o].initial,animate:n[o].animate,exit:n[o].exit,transition:{type:"spring",damping:25,stiffness:300},className:r("fixed z-50 p-6","bg-white dark:bg-zinc-900","shadow-xl",d[o],m),children:[jsx("button",{onClick:i,className:"absolute top-4 right-4 p-1 rounded-lg hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors",children:jsx("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})}),c]})]})})}var z=g;export{g as Drawer,z as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/drawer/index.tsx"],"names":["cn","inputs","twMerge","clsx","Drawer","isOpen","onClose","children","className","position","useEffect","handleEscape","e","variants","positionClasses","jsx","AnimatePresence","jsxs","Fragment","motion","drawer_default"],"mappings":"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","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect } from \"react\";\r\nimport { motion, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface DrawerProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n children: React.ReactNode;\r\n className?: string;\r\n position?: \"left\" | \"right\" | \"bottom\";\r\n}\r\n\r\nexport function Drawer({ isOpen, onClose, children, className, position = \"right\" }: DrawerProps) {\r\n useEffect(() => {\r\n const handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") onClose();\r\n };\r\n if (isOpen) {\r\n document.addEventListener(\"keydown\", handleEscape);\r\n document.body.style.overflow = \"hidden\";\r\n }\r\n return () => {\r\n document.removeEventListener(\"keydown\", handleEscape);\r\n document.body.style.overflow = \"unset\";\r\n };\r\n }, [isOpen, onClose]);\r\n\r\n const variants = {\r\n left: { initial: { x: \"-100%\" }, animate: { x: 0 }, exit: { x: \"-100%\" } },\r\n right: { initial: { x: \"100%\" }, animate: { x: 0 }, exit: { x: \"100%\" } },\r\n bottom: { initial: { y: \"100%\" }, animate: { y: 0 }, exit: { y: \"100%\" } },\r\n };\r\n\r\n const positionClasses = {\r\n left: \"left-0 top-0 h-full w-80\",\r\n right: \"right-0 top-0 h-full w-80\",\r\n bottom: \"bottom-0 left-0 right-0 h-auto max-h-[80vh]\",\r\n };\r\n\r\n return (\r\n <AnimatePresence>\r\n {isOpen && (\r\n <>\r\n <motion.div\r\n initial={{ opacity: 0 }}\r\n animate={{ opacity: 1 }}\r\n exit={{ opacity: 0 }}\r\n onClick={onClose}\r\n className=\"fixed inset-0 bg-black/50 z-50\"\r\n />\r\n <motion.div\r\n initial={variants[position].initial}\r\n animate={variants[position].animate}\r\n exit={variants[position].exit}\r\n transition={{ type: \"spring\", damping: 25, stiffness: 300 }}\r\n className={cn(\r\n \"fixed z-50 p-6\",\r\n \"bg-white dark:bg-zinc-900\",\r\n \"shadow-xl\",\r\n positionClasses[position],\r\n className\r\n )}\r\n >\r\n <button\r\n onClick={onClose}\r\n className=\"absolute top-4 right-4 p-1 rounded-lg hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors\"\r\n >\r\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n {children}\r\n </motion.div>\r\n </>\r\n )}\r\n </AnimatePresence>\r\n );\r\n}\r\n\r\nexport default Drawer;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function o(...t){return tailwindMerge.twMerge(clsx.clsx(t))}function p({text:t,className:s}){let a=Array.from(t);return jsxRuntime.jsx("div",{className:o("flex",s),children:a.map((e,i)=>jsxRuntime.jsx(framerMotion.motion.span,{className:"inline-block cursor-pointer",style:{whiteSpace:e===" "?"pre":"normal"},whileHover:{scale:[1,1.5,.8,1.2,1],rotate:[0,10,-10,0],transition:{duration:.6,ease:"easeInOut"}},children:e===" "?"\xA0":e},`${e}-${i}`))})}var y=p;exports.ElasticText=p;exports.default=y;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/elastic-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","ElasticText","text","className","letters","jsx","letter","index","motion","elastic_text_default"],"mappings":"qNAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,EAAY,CAAE,IAAA,CAAAC,CAAAA,CAAM,SAAA,CAAAC,CAAU,CAAA,CAAqB,CACjE,IAAMC,CAAAA,CAAU,KAAA,CAAM,IAAA,CAAKF,CAAI,CAAA,CAE/B,OACEG,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWR,CAAAA,CAAG,MAAA,CAAQM,CAAS,EACjC,QAAA,CAAAC,CAAAA,CAAQ,GAAA,CAAI,CAACE,CAAAA,CAAQC,CAAAA,GACpBF,eAACG,mBAAAA,CAAO,IAAA,CAAP,CAEC,SAAA,CAAU,6BAAA,CACV,KAAA,CAAO,CAAE,UAAA,CAAYF,CAAAA,GAAW,GAAA,CAAM,KAAA,CAAQ,QAAS,CAAA,CACvD,WAAY,CACV,KAAA,CAAO,CAAC,CAAA,CAAG,GAAA,CAAK,EAAA,CAAK,IAAK,CAAC,CAAA,CAC3B,MAAA,CAAQ,CAAC,CAAA,CAAG,EAAA,CAAI,IAAK,CAAC,CAAA,CACtB,UAAA,CAAY,CAAE,QAAA,CAAU,EAAA,CAAK,KAAM,WAAY,CACjD,CAAA,CAEC,QAAA,CAAAA,CAAAA,GAAW,GAAA,CAAM,OAAWA,CAAAA,CAAAA,CATxB,CAAA,EAAGA,CAAM,CAAA,CAAA,EAAIC,CAAK,CAAA,CAUzB,CACD,CAAA,CACH,CAEJ,CAEA,IAAOE,CAAAA,CAAQR","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface ElasticTextProps {\r\n text: string;\r\n className?: string;\r\n}\r\n\r\nexport function ElasticText({ text, className }: ElasticTextProps) {\r\n const letters = Array.from(text);\r\n\r\n return (\r\n <div className={cn(\"flex\", className)}>\r\n {letters.map((letter, index) => (\r\n <motion.span\r\n key={`${letter}-${index}`}\r\n className=\"inline-block cursor-pointer\"\r\n style={{ whiteSpace: letter === \" \" ? \"pre\" : \"normal\" }}\r\n whileHover={{\r\n scale: [1, 1.5, 0.8, 1.2, 1],\r\n rotate: [0, 10, -10, 0],\r\n transition: { duration: 0.6, ease: \"easeInOut\" },\r\n }}\r\n >\r\n {letter === \" \" ? \"\\u00A0\" : letter}\r\n </motion.span>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default ElasticText;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function o(...t){return twMerge(clsx(t))}function p({text:t,className:s}){let a=Array.from(t);return jsx("div",{className:o("flex",s),children:a.map((e,i)=>jsx(motion.span,{className:"inline-block cursor-pointer",style:{whiteSpace:e===" "?"pre":"normal"},whileHover:{scale:[1,1.5,.8,1.2,1],rotate:[0,10,-10,0],transition:{duration:.6,ease:"easeInOut"}},children:e===" "?"\xA0":e},`${e}-${i}`))})}var y=p;export{p as ElasticText,y as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/elastic-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","ElasticText","text","className","letters","jsx","letter","index","motion","elastic_text_default"],"mappings":"oIAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,EAAY,CAAE,IAAA,CAAAC,CAAAA,CAAM,SAAA,CAAAC,CAAU,CAAA,CAAqB,CACjE,IAAMC,CAAAA,CAAU,KAAA,CAAM,IAAA,CAAKF,CAAI,CAAA,CAE/B,OACEG,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWR,CAAAA,CAAG,MAAA,CAAQM,CAAS,EACjC,QAAA,CAAAC,CAAAA,CAAQ,GAAA,CAAI,CAACE,CAAAA,CAAQC,CAAAA,GACpBF,IAACG,MAAAA,CAAO,IAAA,CAAP,CAEC,SAAA,CAAU,6BAAA,CACV,KAAA,CAAO,CAAE,UAAA,CAAYF,CAAAA,GAAW,GAAA,CAAM,KAAA,CAAQ,QAAS,CAAA,CACvD,WAAY,CACV,KAAA,CAAO,CAAC,CAAA,CAAG,GAAA,CAAK,EAAA,CAAK,IAAK,CAAC,CAAA,CAC3B,MAAA,CAAQ,CAAC,CAAA,CAAG,EAAA,CAAI,IAAK,CAAC,CAAA,CACtB,UAAA,CAAY,CAAE,QAAA,CAAU,EAAA,CAAK,KAAM,WAAY,CACjD,CAAA,CAEC,QAAA,CAAAA,CAAAA,GAAW,GAAA,CAAM,OAAWA,CAAAA,CAAAA,CATxB,CAAA,EAAGA,CAAM,CAAA,CAAA,EAAIC,CAAK,CAAA,CAUzB,CACD,CAAA,CACH,CAEJ,CAEA,IAAOE,CAAAA,CAAQR","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface ElasticTextProps {\r\n text: string;\r\n className?: string;\r\n}\r\n\r\nexport function ElasticText({ text, className }: ElasticTextProps) {\r\n const letters = Array.from(text);\r\n\r\n return (\r\n <div className={cn(\"flex\", className)}>\r\n {letters.map((letter, index) => (\r\n <motion.span\r\n key={`${letter}-${index}`}\r\n className=\"inline-block cursor-pointer\"\r\n style={{ whiteSpace: letter === \" \" ? \"pre\" : \"normal\" }}\r\n whileHover={{\r\n scale: [1, 1.5, 0.8, 1.2, 1],\r\n rotate: [0, 10, -10, 0],\r\n transition: { duration: 0.6, ease: \"easeInOut\" },\r\n }}\r\n >\r\n {letter === \" \" ? \"\\u00A0\" : letter}\r\n </motion.span>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default ElasticText;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function o(...s){return tailwindMerge.twMerge(clsx.clsx(s))}function P({text:s,highlightWords:c=[],highlightClass:u="text-primary",trigger:e="auto",delay:m=0,staggerDelay:f=.05,className:p}){let[d,a]=react.useState(e==="auto"),i=react.useRef(null),h=s.split(" ");react.useEffect(()=>{if(e==="scroll"&&i.current){let t=new IntersectionObserver(([n])=>{n.isIntersecting&&a(true);},{threshold:.1});return t.observe(i.current),()=>t.disconnect()}},[e]);let l=()=>{(e==="hover"||e==="click")&&a(true);};return jsxRuntime.jsx("div",{ref:i,className:o("flex flex-wrap gap-2",p),onMouseEnter:e==="hover"?l:void 0,onClick:e==="click"?l:void 0,children:jsxRuntime.jsx(framerMotion.AnimatePresence,{children:h.map((t,n)=>{let y=c.includes(t.toLowerCase());return jsxRuntime.jsx(framerMotion.motion.span,{initial:{opacity:0,y:-50,rotateX:-90},animate:d?{opacity:1,y:0,rotateX:0}:{opacity:0,y:-50,rotateX:-90},transition:{duration:.5,delay:m+n*f,ease:[.25,.46,.45,.94]},className:o(y&&u),children:t},`${t}-${n}`)})})})}var N=P;exports.FallingText=P;exports.default=N;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/falling-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","FallingText","text","highlightWords","highlightClass","trigger","delay","staggerDelay","className","isVisible","setIsVisible","useState","containerRef","useRef","words","useEffect","observer","entry","handleInteraction","jsx","AnimatePresence","word","index","isHighlighted","motion","falling_text_default"],"mappings":"4OAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCWO,SAASG,CAAAA,CAAY,CAC1B,IAAA,CAAAC,CAAAA,CACA,cAAA,CAAAC,CAAAA,CAAiB,EAAC,CAClB,cAAA,CAAAC,CAAAA,CAAiB,cAAA,CACjB,OAAA,CAAAC,CAAAA,CAAU,MAAA,CACV,KAAA,CAAAC,CAAAA,CAAQ,CAAA,CACR,YAAA,CAAAC,CAAAA,CAAe,GAAA,CACf,SAAA,CAAAC,CACF,CAAA,CAAqB,CACnB,GAAM,CAACC,CAAAA,CAAWC,CAAY,CAAA,CAAIC,cAAAA,CAASN,CAAAA,GAAY,MAAM,CAAA,CACvDO,CAAAA,CAAeC,YAAAA,CAAuB,IAAI,CAAA,CAC1CC,CAAAA,CAAQZ,EAAK,KAAA,CAAM,GAAG,CAAA,CAE5Ba,eAAAA,CAAU,IAAM,CACd,GAAIV,CAAAA,GAAY,QAAA,EAAYO,CAAAA,CAAa,OAAA,CAAS,CAChD,IAAMI,CAAAA,CAAW,IAAI,oBAAA,CACnB,CAAC,CAACC,CAAK,CAAA,GAAM,CACPA,CAAAA,CAAM,cAAA,EACRP,CAAAA,CAAa,IAAI,EAErB,CAAA,CACA,CAAE,SAAA,CAAW,EAAI,CACnB,CAAA,CACA,OAAAM,CAAAA,CAAS,OAAA,CAAQJ,CAAAA,CAAa,OAAO,CAAA,CAC9B,IAAMI,CAAAA,CAAS,UAAA,EACxB,CACF,CAAA,CAAG,CAACX,CAAO,CAAC,CAAA,CAEZ,IAAMa,CAAAA,CAAoB,IAAM,CAAA,CAC1Bb,CAAAA,GAAY,OAAA,EAAWA,CAAAA,GAAY,OAAA,GACrCK,CAAAA,CAAa,IAAI,EAErB,CAAA,CAEA,OACES,cAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKP,CAAAA,CACL,SAAA,CAAWf,CAAAA,CAAG,sBAAA,CAAwBW,CAAS,CAAA,CAC/C,YAAA,CAAcH,CAAAA,GAAY,OAAA,CAAUa,CAAAA,CAAoB,MAAA,CACxD,QAASb,CAAAA,GAAY,OAAA,CAAUa,CAAAA,CAAoB,MAAA,CAEnD,QAAA,CAAAC,cAAAA,CAACC,4BAAAA,CAAA,CACE,QAAA,CAAAN,CAAAA,CAAM,GAAA,CAAI,CAACO,CAAAA,CAAMC,CAAAA,GAAU,CAC1B,IAAMC,CAAAA,CAAgBpB,CAAAA,CAAe,QAAA,CAASkB,CAAAA,CAAK,WAAA,EAAa,CAAA,CAChE,OACEF,cAAAA,CAACK,mBAAAA,CAAO,IAAA,CAAP,CAEC,OAAA,CAAS,CAAE,QAAS,CAAA,CAAG,CAAA,CAAG,GAAA,CAAK,OAAA,CAAS,GAAI,CAAA,CAC5C,OAAA,CACEf,CAAAA,CACI,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CAC/B,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,GAAA,CAAK,OAAA,CAAS,GAAI,CAAA,CAEzC,UAAA,CAAY,CACV,QAAA,CAAU,EAAA,CACV,KAAA,CAAOH,CAAAA,CAAQgB,EAAQf,CAAAA,CACvB,IAAA,CAAM,CAAC,GAAA,CAAM,GAAA,CAAM,GAAA,CAAM,GAAI,CAC/B,CAAA,CACA,SAAA,CAAWV,CAAAA,CAAG0B,CAAAA,EAAiBnB,CAAc,CAAA,CAE5C,QAAA,CAAAiB,CAAAA,CAAAA,CAdI,CAAA,EAAGA,CAAI,CAAA,CAAA,EAAIC,CAAK,CAAA,CAevB,CAEJ,CAAC,CAAA,CACH,CAAA,CACF,CAEJ,CAEA,IAAOG,CAAAA,CAAQxB","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { motion, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface FallingTextProps {\r\n text: string;\r\n highlightWords?: string[];\r\n highlightClass?: string;\r\n trigger?: \"auto\" | \"hover\" | \"click\" | \"scroll\";\r\n delay?: number;\r\n staggerDelay?: number;\r\n className?: string;\r\n}\r\n\r\nexport function FallingText({\r\n text,\r\n highlightWords = [],\r\n highlightClass = \"text-primary\",\r\n trigger = \"auto\",\r\n delay = 0,\r\n staggerDelay = 0.05,\r\n className,\r\n}: FallingTextProps) {\r\n const [isVisible, setIsVisible] = useState(trigger === \"auto\");\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const words = text.split(\" \");\r\n\r\n useEffect(() => {\r\n if (trigger === \"scroll\" && containerRef.current) {\r\n const observer = new IntersectionObserver(\r\n ([entry]) => {\r\n if (entry.isIntersecting) {\r\n setIsVisible(true);\r\n }\r\n },\r\n { threshold: 0.1 }\r\n );\r\n observer.observe(containerRef.current);\r\n return () => observer.disconnect();\r\n }\r\n }, [trigger]);\r\n\r\n const handleInteraction = () => {\r\n if (trigger === \"hover\" || trigger === \"click\") {\r\n setIsVisible(true);\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={cn(\"flex flex-wrap gap-2\", className)}\r\n onMouseEnter={trigger === \"hover\" ? handleInteraction : undefined}\r\n onClick={trigger === \"click\" ? handleInteraction : undefined}\r\n >\r\n <AnimatePresence>\r\n {words.map((word, index) => {\r\n const isHighlighted = highlightWords.includes(word.toLowerCase());\r\n return (\r\n <motion.span\r\n key={`${word}-${index}`}\r\n initial={{ opacity: 0, y: -50, rotateX: -90 }}\r\n animate={\r\n isVisible\r\n ? { opacity: 1, y: 0, rotateX: 0 }\r\n : { opacity: 0, y: -50, rotateX: -90 }\r\n }\r\n transition={{\r\n duration: 0.5,\r\n delay: delay + index * staggerDelay,\r\n ease: [0.25, 0.46, 0.45, 0.94],\r\n }}\r\n className={cn(isHighlighted && highlightClass)}\r\n >\r\n {word}\r\n </motion.span>\r\n );\r\n })}\r\n </AnimatePresence>\r\n </div>\r\n );\r\n}\r\n\r\nexport default FallingText;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {useState,useRef,useEffect}from'react';import {AnimatePresence,motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function o(...s){return twMerge(clsx(s))}function P({text:s,highlightWords:c=[],highlightClass:u="text-primary",trigger:e="auto",delay:m=0,staggerDelay:f=.05,className:p}){let[d,a]=useState(e==="auto"),i=useRef(null),h=s.split(" ");useEffect(()=>{if(e==="scroll"&&i.current){let t=new IntersectionObserver(([n])=>{n.isIntersecting&&a(true);},{threshold:.1});return t.observe(i.current),()=>t.disconnect()}},[e]);let l=()=>{(e==="hover"||e==="click")&&a(true);};return jsx("div",{ref:i,className:o("flex flex-wrap gap-2",p),onMouseEnter:e==="hover"?l:void 0,onClick:e==="click"?l:void 0,children:jsx(AnimatePresence,{children:h.map((t,n)=>{let y=c.includes(t.toLowerCase());return jsx(motion.span,{initial:{opacity:0,y:-50,rotateX:-90},animate:d?{opacity:1,y:0,rotateX:0}:{opacity:0,y:-50,rotateX:-90},transition:{duration:.5,delay:m+n*f,ease:[.25,.46,.45,.94]},className:o(y&&u),children:t},`${t}-${n}`)})})})}var N=P;export{P as FallingText,N as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/falling-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","FallingText","text","highlightWords","highlightClass","trigger","delay","staggerDelay","className","isVisible","setIsVisible","useState","containerRef","useRef","words","useEffect","observer","entry","handleInteraction","jsx","AnimatePresence","word","index","isHighlighted","motion","falling_text_default"],"mappings":"kMAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCWO,SAASG,CAAAA,CAAY,CAC1B,IAAA,CAAAC,CAAAA,CACA,cAAA,CAAAC,CAAAA,CAAiB,EAAC,CAClB,cAAA,CAAAC,CAAAA,CAAiB,cAAA,CACjB,OAAA,CAAAC,CAAAA,CAAU,MAAA,CACV,KAAA,CAAAC,CAAAA,CAAQ,CAAA,CACR,YAAA,CAAAC,CAAAA,CAAe,GAAA,CACf,SAAA,CAAAC,CACF,CAAA,CAAqB,CACnB,GAAM,CAACC,CAAAA,CAAWC,CAAY,CAAA,CAAIC,QAAAA,CAASN,CAAAA,GAAY,MAAM,CAAA,CACvDO,CAAAA,CAAeC,MAAAA,CAAuB,IAAI,CAAA,CAC1CC,CAAAA,CAAQZ,EAAK,KAAA,CAAM,GAAG,CAAA,CAE5Ba,SAAAA,CAAU,IAAM,CACd,GAAIV,CAAAA,GAAY,QAAA,EAAYO,CAAAA,CAAa,OAAA,CAAS,CAChD,IAAMI,CAAAA,CAAW,IAAI,oBAAA,CACnB,CAAC,CAACC,CAAK,CAAA,GAAM,CACPA,CAAAA,CAAM,cAAA,EACRP,CAAAA,CAAa,IAAI,EAErB,CAAA,CACA,CAAE,SAAA,CAAW,EAAI,CACnB,CAAA,CACA,OAAAM,CAAAA,CAAS,OAAA,CAAQJ,CAAAA,CAAa,OAAO,CAAA,CAC9B,IAAMI,CAAAA,CAAS,UAAA,EACxB,CACF,CAAA,CAAG,CAACX,CAAO,CAAC,CAAA,CAEZ,IAAMa,CAAAA,CAAoB,IAAM,CAAA,CAC1Bb,CAAAA,GAAY,OAAA,EAAWA,CAAAA,GAAY,OAAA,GACrCK,CAAAA,CAAa,IAAI,EAErB,CAAA,CAEA,OACES,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKP,CAAAA,CACL,SAAA,CAAWf,CAAAA,CAAG,sBAAA,CAAwBW,CAAS,CAAA,CAC/C,YAAA,CAAcH,CAAAA,GAAY,OAAA,CAAUa,CAAAA,CAAoB,MAAA,CACxD,QAASb,CAAAA,GAAY,OAAA,CAAUa,CAAAA,CAAoB,MAAA,CAEnD,QAAA,CAAAC,GAAAA,CAACC,eAAAA,CAAA,CACE,QAAA,CAAAN,CAAAA,CAAM,GAAA,CAAI,CAACO,CAAAA,CAAMC,CAAAA,GAAU,CAC1B,IAAMC,CAAAA,CAAgBpB,CAAAA,CAAe,QAAA,CAASkB,CAAAA,CAAK,WAAA,EAAa,CAAA,CAChE,OACEF,GAAAA,CAACK,MAAAA,CAAO,IAAA,CAAP,CAEC,OAAA,CAAS,CAAE,QAAS,CAAA,CAAG,CAAA,CAAG,GAAA,CAAK,OAAA,CAAS,GAAI,CAAA,CAC5C,OAAA,CACEf,CAAAA,CACI,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CAC/B,CAAE,OAAA,CAAS,CAAA,CAAG,CAAA,CAAG,GAAA,CAAK,OAAA,CAAS,GAAI,CAAA,CAEzC,UAAA,CAAY,CACV,QAAA,CAAU,EAAA,CACV,KAAA,CAAOH,CAAAA,CAAQgB,EAAQf,CAAAA,CACvB,IAAA,CAAM,CAAC,GAAA,CAAM,GAAA,CAAM,GAAA,CAAM,GAAI,CAC/B,CAAA,CACA,SAAA,CAAWV,CAAAA,CAAG0B,CAAAA,EAAiBnB,CAAc,CAAA,CAE5C,QAAA,CAAAiB,CAAAA,CAAAA,CAdI,CAAA,EAAGA,CAAI,CAAA,CAAA,EAAIC,CAAK,CAAA,CAevB,CAEJ,CAAC,CAAA,CACH,CAAA,CACF,CAEJ,CAEA,IAAOG,CAAAA,CAAQxB","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { motion, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface FallingTextProps {\r\n text: string;\r\n highlightWords?: string[];\r\n highlightClass?: string;\r\n trigger?: \"auto\" | \"hover\" | \"click\" | \"scroll\";\r\n delay?: number;\r\n staggerDelay?: number;\r\n className?: string;\r\n}\r\n\r\nexport function FallingText({\r\n text,\r\n highlightWords = [],\r\n highlightClass = \"text-primary\",\r\n trigger = \"auto\",\r\n delay = 0,\r\n staggerDelay = 0.05,\r\n className,\r\n}: FallingTextProps) {\r\n const [isVisible, setIsVisible] = useState(trigger === \"auto\");\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const words = text.split(\" \");\r\n\r\n useEffect(() => {\r\n if (trigger === \"scroll\" && containerRef.current) {\r\n const observer = new IntersectionObserver(\r\n ([entry]) => {\r\n if (entry.isIntersecting) {\r\n setIsVisible(true);\r\n }\r\n },\r\n { threshold: 0.1 }\r\n );\r\n observer.observe(containerRef.current);\r\n return () => observer.disconnect();\r\n }\r\n }, [trigger]);\r\n\r\n const handleInteraction = () => {\r\n if (trigger === \"hover\" || trigger === \"click\") {\r\n setIsVisible(true);\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={cn(\"flex flex-wrap gap-2\", className)}\r\n onMouseEnter={trigger === \"hover\" ? handleInteraction : undefined}\r\n onClick={trigger === \"click\" ? handleInteraction : undefined}\r\n >\r\n <AnimatePresence>\r\n {words.map((word, index) => {\r\n const isHighlighted = highlightWords.includes(word.toLowerCase());\r\n return (\r\n <motion.span\r\n key={`${word}-${index}`}\r\n initial={{ opacity: 0, y: -50, rotateX: -90 }}\r\n animate={\r\n isVisible\r\n ? { opacity: 1, y: 0, rotateX: 0 }\r\n : { opacity: 0, y: -50, rotateX: -90 }\r\n }\r\n transition={{\r\n duration: 0.5,\r\n delay: delay + index * staggerDelay,\r\n ease: [0.25, 0.46, 0.45, 0.94],\r\n }}\r\n className={cn(isHighlighted && highlightClass)}\r\n >\r\n {word}\r\n </motion.span>\r\n );\r\n })}\r\n </AnimatePresence>\r\n </div>\r\n );\r\n}\r\n\r\nexport default FallingText;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var R=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 R__default=/*#__PURE__*/_interopDefault(R);function m(...e){return tailwindMerge.twMerge(clsx.clsx(e))}var L=R.createContext(null),N=()=>{let e=R.useContext(L);if(!e)throw new Error("useTree must be used within a TreeProvider");return e},V=R.forwardRef(({data:e,initialSelectedId:s,onSelectChange:r,initialExpandedItems:d=[],elements:a,className:l,...o},c)=>{let[u,v]=R.useState(s),[f,C]=R.useState(d),M=R.useCallback(n=>{C(i=>i.includes(n)?i.filter(h=>h!==n):[...i,n]);},[]),w=R.useCallback(n=>{let i=e||a||[],h=Array.isArray(i)?i:[i],x=y=>{for(let p of y){if(p.id===n)return p;if(p.children){let b=x(p.children);if(b)return b}}},I=x(h);I?.isSelectable&&(v(n),r?.(I));},[e,a,r]),E={selectedId:u,expandedItems:f,handleExpand:M,handleSelect:w,data:e||a||[]};return jsxRuntime.jsx(L.Provider,{value:E,children:jsxRuntime.jsx("div",{className:m("relative overflow-hidden",l),ref:c,...o,children:R__default.default.Children.map(o.children,n=>n)})})});V.displayName="Tree";var F=R.forwardRef(({className:e,element:s,value:r,isSelectable:d=true,children:a,...l},o)=>{let{selectedId:c,expandedItems:u,handleExpand:v,handleSelect:f}=N();return jsxRuntime.jsxs("div",{ref:o,className:"relative",...l,children:[jsxRuntime.jsxs("div",{className:m("flex cursor-pointer items-center gap-1 rounded-md px-2 py-1 text-sm hover:bg-muted",c===r&&"bg-muted",e),onClick:()=>{v(r),d&&f(r);},children:[jsxRuntime.jsx("svg",{className:m("h-4 w-4 shrink-0 transition-transform duration-200",u.includes(r)&&"rotate-90"),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"})}),jsxRuntime.jsx("svg",{className:"h-4 w-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z"})}),jsxRuntime.jsx("span",{className:"truncate",children:s})]}),u.includes(r)&&jsxRuntime.jsx("div",{className:"ml-4 border-l border-muted pl-2",children:a})]})});F.displayName="Folder";var B=R.forwardRef(({className:e,value:s,isSelectable:r=true,children:d,...a},l)=>{let{selectedId:o,handleSelect:c}=N();return jsxRuntime.jsxs("div",{ref:l,className:m("flex cursor-pointer items-center gap-1 rounded-md px-2 py-1 text-sm hover:bg-muted",o===s&&"bg-muted",e),onClick:()=>r&&c(s),...a,children:[jsxRuntime.jsx("svg",{className:"h-4 w-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),jsxRuntime.jsx("div",{className:"truncate",children:d})]})});B.displayName="File";exports.File=B;exports.Folder=F;exports.Tree=V;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/file-tree/index.tsx"],"names":["cn","inputs","twMerge","clsx","TreeContext","createContext","useTree","context","useContext","Tree","forwardRef","data","initialSelectedId","onSelectChange","initialExpandedItems","elements","className","props","ref","selectedId","setSelectedId","useState","expandedItems","setExpandedItems","handleExpand","useCallback","id","prev","item","handleSelect","treeData","dataArray","findItem","items","found","selectedItem","value","jsx","React","child","Folder","element","isSelectable","children","jsxs","File"],"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, { createContext, forwardRef, useCallback, useContext, useState } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface TreeDataItem {\r\n id: string;\r\n name: string;\r\n icon?: React.ReactNode;\r\n children?: TreeDataItem[];\r\n isSelectable?: boolean;\r\n}\r\n\r\ntype TreeProps = React.HTMLAttributes<HTMLDivElement> & {\r\n data?: TreeDataItem[] | TreeDataItem;\r\n initialSelectedId?: string;\r\n onSelectChange?: (item: TreeDataItem | undefined) => void;\r\n initialExpandedItems?: string[];\r\n elements?: TreeDataItem[];\r\n};\r\n\r\nconst TreeContext = createContext<{\r\n selectedId: string | undefined;\r\n expandedItems: string[];\r\n handleExpand: (id: string) => void;\r\n handleSelect: (id: string) => void;\r\n data: TreeDataItem[] | TreeDataItem;\r\n} | null>(null);\r\n\r\nconst useTree = () => {\r\n const context = useContext(TreeContext);\r\n if (!context) {\r\n throw new Error(\"useTree must be used within a TreeProvider\");\r\n }\r\n return context;\r\n};\r\n\r\nconst Tree = forwardRef<HTMLDivElement, TreeProps>(\r\n ({ data, initialSelectedId, onSelectChange, initialExpandedItems = [], elements, className, ...props }, ref) => {\r\n const [selectedId, setSelectedId] = useState<string | undefined>(initialSelectedId);\r\n const [expandedItems, setExpandedItems] = useState<string[]>(initialExpandedItems);\r\n\r\n const handleExpand = useCallback((id: string) => {\r\n setExpandedItems((prev) => {\r\n if (prev.includes(id)) {\r\n return prev.filter((item) => item !== id);\r\n }\r\n return [...prev, id];\r\n });\r\n }, []);\r\n\r\n const handleSelect = useCallback(\r\n (id: string) => {\r\n const treeData = data || elements || [];\r\n const dataArray = Array.isArray(treeData) ? treeData : [treeData];\r\n\r\n const findItem = (items: TreeDataItem[]): TreeDataItem | undefined => {\r\n for (const item of items) {\r\n if (item.id === id) return item;\r\n if (item.children) {\r\n const found = findItem(item.children);\r\n if (found) return found;\r\n }\r\n }\r\n };\r\n\r\n const selectedItem = findItem(dataArray);\r\n if (selectedItem?.isSelectable) {\r\n setSelectedId(id);\r\n onSelectChange?.(selectedItem);\r\n }\r\n },\r\n [data, elements, onSelectChange]\r\n );\r\n\r\n const value = {\r\n selectedId,\r\n expandedItems,\r\n handleExpand,\r\n handleSelect,\r\n data: data || elements || [],\r\n };\r\n\r\n return (\r\n <TreeContext.Provider value={value}>\r\n <div className={cn(\"relative overflow-hidden\", className)} ref={ref} {...props}>\r\n {React.Children.map(props.children, (child) => child)}\r\n </div>\r\n </TreeContext.Provider>\r\n );\r\n }\r\n);\r\n\r\nTree.displayName = \"Tree\";\r\n\r\nconst Folder = forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement> & {\r\n element: string;\r\n value: string;\r\n isSelectable?: boolean;\r\n }\r\n>(({ className, element, value, isSelectable = true, children, ...props }, ref) => {\r\n const { selectedId, expandedItems, handleExpand, handleSelect } = useTree();\r\n\r\n return (\r\n <div ref={ref} className=\"relative\" {...props}>\r\n <div\r\n className={cn(\r\n \"flex cursor-pointer items-center gap-1 rounded-md px-2 py-1 text-sm hover:bg-muted\",\r\n selectedId === value && \"bg-muted\",\r\n className\r\n )}\r\n onClick={() => {\r\n handleExpand(value);\r\n if (isSelectable) {\r\n handleSelect(value);\r\n }\r\n }}\r\n >\r\n <svg\r\n className={cn(\"h-4 w-4 shrink-0 transition-transform duration-200\", expandedItems.includes(value) && \"rotate-90\")}\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\r\n </svg>\r\n <svg className=\"h-4 w-4 shrink-0\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z\"\r\n />\r\n </svg>\r\n <span className=\"truncate\">{element}</span>\r\n </div>\r\n {expandedItems.includes(value) && <div className=\"ml-4 border-l border-muted pl-2\">{children}</div>}\r\n </div>\r\n );\r\n});\r\n\r\nFolder.displayName = \"Folder\";\r\n\r\nconst File = forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement> & {\r\n value: string;\r\n isSelectable?: boolean;\r\n }\r\n>(({ className, value, isSelectable = true, children, ...props }, ref) => {\r\n const { selectedId, handleSelect } = useTree();\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\r\n \"flex cursor-pointer items-center gap-1 rounded-md px-2 py-1 text-sm hover:bg-muted\",\r\n selectedId === value && \"bg-muted\",\r\n className\r\n )}\r\n onClick={() => isSelectable && handleSelect(value)}\r\n {...props}\r\n >\r\n <svg className=\"h-4 w-4 shrink-0\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\r\n />\r\n </svg>\r\n <div className=\"truncate\">{children}</div>\r\n </div>\r\n );\r\n});\r\n\r\nFile.displayName = \"File\";\r\n\r\nexport { Tree, Folder, File, type TreeDataItem };\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import R,{createContext,forwardRef,useState,useCallback,useContext}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx,jsxs}from'react/jsx-runtime';function m(...e){return twMerge(clsx(e))}var L=createContext(null),N=()=>{let e=useContext(L);if(!e)throw new Error("useTree must be used within a TreeProvider");return e},V=forwardRef(({data:e,initialSelectedId:s,onSelectChange:r,initialExpandedItems:d=[],elements:a,className:l,...o},c)=>{let[u,v]=useState(s),[f,C]=useState(d),M=useCallback(n=>{C(i=>i.includes(n)?i.filter(h=>h!==n):[...i,n]);},[]),w=useCallback(n=>{let i=e||a||[],h=Array.isArray(i)?i:[i],x=y=>{for(let p of y){if(p.id===n)return p;if(p.children){let b=x(p.children);if(b)return b}}},I=x(h);I?.isSelectable&&(v(n),r?.(I));},[e,a,r]),E={selectedId:u,expandedItems:f,handleExpand:M,handleSelect:w,data:e||a||[]};return jsx(L.Provider,{value:E,children:jsx("div",{className:m("relative overflow-hidden",l),ref:c,...o,children:R.Children.map(o.children,n=>n)})})});V.displayName="Tree";var F=forwardRef(({className:e,element:s,value:r,isSelectable:d=true,children:a,...l},o)=>{let{selectedId:c,expandedItems:u,handleExpand:v,handleSelect:f}=N();return jsxs("div",{ref:o,className:"relative",...l,children:[jsxs("div",{className:m("flex cursor-pointer items-center gap-1 rounded-md px-2 py-1 text-sm hover:bg-muted",c===r&&"bg-muted",e),onClick:()=>{v(r),d&&f(r);},children:[jsx("svg",{className:m("h-4 w-4 shrink-0 transition-transform duration-200",u.includes(r)&&"rotate-90"),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 5l7 7-7 7"})}),jsx("svg",{className:"h-4 w-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z"})}),jsx("span",{className:"truncate",children:s})]}),u.includes(r)&&jsx("div",{className:"ml-4 border-l border-muted pl-2",children:a})]})});F.displayName="Folder";var B=forwardRef(({className:e,value:s,isSelectable:r=true,children:d,...a},l)=>{let{selectedId:o,handleSelect:c}=N();return jsxs("div",{ref:l,className:m("flex cursor-pointer items-center gap-1 rounded-md px-2 py-1 text-sm hover:bg-muted",o===s&&"bg-muted",e),onClick:()=>r&&c(s),...a,children:[jsx("svg",{className:"h-4 w-4 shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})}),jsx("div",{className:"truncate",children:d})]})});B.displayName="File";export{B as File,F as Folder,V as Tree};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/file-tree/index.tsx"],"names":["cn","inputs","twMerge","clsx","TreeContext","createContext","useTree","context","useContext","Tree","forwardRef","data","initialSelectedId","onSelectChange","initialExpandedItems","elements","className","props","ref","selectedId","setSelectedId","useState","expandedItems","setExpandedItems","handleExpand","useCallback","id","prev","item","handleSelect","treeData","dataArray","findItem","items","found","selectedItem","value","jsx","React","child","Folder","element","isSelectable","children","jsxs","File"],"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, { createContext, forwardRef, useCallback, useContext, useState } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface TreeDataItem {\r\n id: string;\r\n name: string;\r\n icon?: React.ReactNode;\r\n children?: TreeDataItem[];\r\n isSelectable?: boolean;\r\n}\r\n\r\ntype TreeProps = React.HTMLAttributes<HTMLDivElement> & {\r\n data?: TreeDataItem[] | TreeDataItem;\r\n initialSelectedId?: string;\r\n onSelectChange?: (item: TreeDataItem | undefined) => void;\r\n initialExpandedItems?: string[];\r\n elements?: TreeDataItem[];\r\n};\r\n\r\nconst TreeContext = createContext<{\r\n selectedId: string | undefined;\r\n expandedItems: string[];\r\n handleExpand: (id: string) => void;\r\n handleSelect: (id: string) => void;\r\n data: TreeDataItem[] | TreeDataItem;\r\n} | null>(null);\r\n\r\nconst useTree = () => {\r\n const context = useContext(TreeContext);\r\n if (!context) {\r\n throw new Error(\"useTree must be used within a TreeProvider\");\r\n }\r\n return context;\r\n};\r\n\r\nconst Tree = forwardRef<HTMLDivElement, TreeProps>(\r\n ({ data, initialSelectedId, onSelectChange, initialExpandedItems = [], elements, className, ...props }, ref) => {\r\n const [selectedId, setSelectedId] = useState<string | undefined>(initialSelectedId);\r\n const [expandedItems, setExpandedItems] = useState<string[]>(initialExpandedItems);\r\n\r\n const handleExpand = useCallback((id: string) => {\r\n setExpandedItems((prev) => {\r\n if (prev.includes(id)) {\r\n return prev.filter((item) => item !== id);\r\n }\r\n return [...prev, id];\r\n });\r\n }, []);\r\n\r\n const handleSelect = useCallback(\r\n (id: string) => {\r\n const treeData = data || elements || [];\r\n const dataArray = Array.isArray(treeData) ? treeData : [treeData];\r\n\r\n const findItem = (items: TreeDataItem[]): TreeDataItem | undefined => {\r\n for (const item of items) {\r\n if (item.id === id) return item;\r\n if (item.children) {\r\n const found = findItem(item.children);\r\n if (found) return found;\r\n }\r\n }\r\n };\r\n\r\n const selectedItem = findItem(dataArray);\r\n if (selectedItem?.isSelectable) {\r\n setSelectedId(id);\r\n onSelectChange?.(selectedItem);\r\n }\r\n },\r\n [data, elements, onSelectChange]\r\n );\r\n\r\n const value = {\r\n selectedId,\r\n expandedItems,\r\n handleExpand,\r\n handleSelect,\r\n data: data || elements || [],\r\n };\r\n\r\n return (\r\n <TreeContext.Provider value={value}>\r\n <div className={cn(\"relative overflow-hidden\", className)} ref={ref} {...props}>\r\n {React.Children.map(props.children, (child) => child)}\r\n </div>\r\n </TreeContext.Provider>\r\n );\r\n }\r\n);\r\n\r\nTree.displayName = \"Tree\";\r\n\r\nconst Folder = forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement> & {\r\n element: string;\r\n value: string;\r\n isSelectable?: boolean;\r\n }\r\n>(({ className, element, value, isSelectable = true, children, ...props }, ref) => {\r\n const { selectedId, expandedItems, handleExpand, handleSelect } = useTree();\r\n\r\n return (\r\n <div ref={ref} className=\"relative\" {...props}>\r\n <div\r\n className={cn(\r\n \"flex cursor-pointer items-center gap-1 rounded-md px-2 py-1 text-sm hover:bg-muted\",\r\n selectedId === value && \"bg-muted\",\r\n className\r\n )}\r\n onClick={() => {\r\n handleExpand(value);\r\n if (isSelectable) {\r\n handleSelect(value);\r\n }\r\n }}\r\n >\r\n <svg\r\n className={cn(\"h-4 w-4 shrink-0 transition-transform duration-200\", expandedItems.includes(value) && \"rotate-90\")}\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\r\n </svg>\r\n <svg className=\"h-4 w-4 shrink-0\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z\"\r\n />\r\n </svg>\r\n <span className=\"truncate\">{element}</span>\r\n </div>\r\n {expandedItems.includes(value) && <div className=\"ml-4 border-l border-muted pl-2\">{children}</div>}\r\n </div>\r\n );\r\n});\r\n\r\nFolder.displayName = \"Folder\";\r\n\r\nconst File = forwardRef<\r\n HTMLDivElement,\r\n React.HTMLAttributes<HTMLDivElement> & {\r\n value: string;\r\n isSelectable?: boolean;\r\n }\r\n>(({ className, value, isSelectable = true, children, ...props }, ref) => {\r\n const { selectedId, handleSelect } = useTree();\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\r\n \"flex cursor-pointer items-center gap-1 rounded-md px-2 py-1 text-sm hover:bg-muted\",\r\n selectedId === value && \"bg-muted\",\r\n className\r\n )}\r\n onClick={() => isSelectable && handleSelect(value)}\r\n {...props}\r\n >\r\n <svg className=\"h-4 w-4 shrink-0\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n strokeWidth={2}\r\n d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\r\n />\r\n </svg>\r\n <div className=\"truncate\">{children}</div>\r\n </div>\r\n );\r\n});\r\n\r\nFile.displayName = \"File\";\r\n\r\nexport { Tree, Folder, File, type TreeDataItem };\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function t(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function m({children:e,className:o,duration:r=5,distance:a=50}){return jsxRuntime.jsx(framerMotion.motion.div,{className:t("relative",o),animate:{y:[0,-a,0]},transition:{duration:r,repeat:1/0,ease:"easeInOut"},children:e})}var N=m;exports.FloatEffect=m;exports.default=N;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/float-effect/index.tsx"],"names":["cn","inputs","twMerge","clsx","FloatEffect","children","className","duration","distance","jsx","motion","float_effect_default"],"mappings":"qNAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCQO,SAASG,CAAAA,CAAY,CAC1B,QAAA,CAAAC,EACA,SAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CAAW,EACX,QAAA,CAAAC,CAAAA,CAAW,EACb,CAAA,CAAqB,CACnB,OACEC,cAAAA,CAACC,mBAAAA,CAAO,IAAP,CACC,SAAA,CAAWV,CAAAA,CAAG,UAAA,CAAYM,CAAS,CAAA,CACnC,OAAA,CAAS,CACP,CAAA,CAAG,CAAC,CAAA,CAAG,CAACE,CAAAA,CAAU,CAAC,CACrB,CAAA,CACA,UAAA,CAAY,CACV,QAAA,CAAAD,EACA,MAAA,CAAQ,CAAA,CAAA,CAAA,CACR,IAAA,CAAM,WACR,EAEC,QAAA,CAAAF,CAAAA,CACH,CAEJ,KAEOM,CAAAA,CAAQP","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { ReactNode } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface FloatEffectProps {\r\n children?: ReactNode;\r\n className?: string;\r\n duration?: number;\r\n distance?: number;\r\n}\r\n\r\nexport function FloatEffect({\r\n children,\r\n className,\r\n duration = 5,\r\n distance = 50,\r\n}: FloatEffectProps) {\r\n return (\r\n <motion.div\r\n className={cn(\"relative\", className)}\r\n animate={{\r\n y: [0, -distance, 0],\r\n }}\r\n transition={{\r\n duration,\r\n repeat: Infinity,\r\n ease: \"easeInOut\",\r\n }}\r\n >\r\n {children}\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport default FloatEffect;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function t(...e){return twMerge(clsx(e))}function m({children:e,className:o,duration:r=5,distance:a=50}){return jsx(motion.div,{className:t("relative",o),animate:{y:[0,-a,0]},transition:{duration:r,repeat:1/0,ease:"easeInOut"},children:e})}var N=m;export{m as FloatEffect,N as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/float-effect/index.tsx"],"names":["cn","inputs","twMerge","clsx","FloatEffect","children","className","duration","distance","jsx","motion","float_effect_default"],"mappings":"oIAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCQO,SAASG,CAAAA,CAAY,CAC1B,QAAA,CAAAC,EACA,SAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CAAW,EACX,QAAA,CAAAC,CAAAA,CAAW,EACb,CAAA,CAAqB,CACnB,OACEC,GAAAA,CAACC,MAAAA,CAAO,IAAP,CACC,SAAA,CAAWV,CAAAA,CAAG,UAAA,CAAYM,CAAS,CAAA,CACnC,OAAA,CAAS,CACP,CAAA,CAAG,CAAC,CAAA,CAAG,CAACE,CAAAA,CAAU,CAAC,CACrB,CAAA,CACA,UAAA,CAAY,CACV,QAAA,CAAAD,EACA,MAAA,CAAQ,CAAA,CAAA,CAAA,CACR,IAAA,CAAM,WACR,EAEC,QAAA,CAAAF,CAAAA,CACH,CAEJ,KAEOM,CAAAA,CAAQP","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { ReactNode } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface FloatEffectProps {\r\n children?: ReactNode;\r\n className?: string;\r\n duration?: number;\r\n distance?: number;\r\n}\r\n\r\nexport function FloatEffect({\r\n children,\r\n className,\r\n duration = 5,\r\n distance = 50,\r\n}: FloatEffectProps) {\r\n return (\r\n <motion.div\r\n className={cn(\"relative\", className)}\r\n animate={{\r\n y: [0, -distance, 0],\r\n }}\r\n transition={{\r\n duration,\r\n repeat: Infinity,\r\n ease: \"easeInOut\",\r\n }}\r\n >\r\n {children}\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport default FloatEffect;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function t(...r){return tailwindMerge.twMerge(clsx.clsx(r))}function c({children:r,className:a,glowColor:e="rgba(255, 255, 255, 0.4)",duration:n=3}){return jsxRuntime.jsx(framerMotion.motion.div,{className:t("relative p-8 rounded-3xl border-2 border-white/30",a),style:{background:"radial-gradient(circle at center, rgba(255,255,255,0.05) 0%, transparent 70%)"},animate:{boxShadow:[`0 0 40px ${e}, 0 0 80px ${e.replace("0.4","0.2")}`,`0 0 80px ${e.replace("0.4","0.8")}, 0 0 160px ${e.replace("0.4","0.5")}`,`0 0 40px ${e}, 0 0 80px ${e.replace("0.4","0.2")}`],borderColor:["rgba(255, 255, 255, 0.3)","rgba(255, 255, 255, 0.6)","rgba(255, 255, 255, 0.3)"]},transition:{duration:n,repeat:1/0,ease:"easeInOut"},children:r})}var b=c;exports.GlowEffect=c;exports.default=b;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/glow-effect/index.tsx"],"names":["cn","inputs","twMerge","clsx","GlowEffect","children","className","glowColor","duration","jsx","motion","glow_effect_default"],"mappings":"qNAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCQO,SAASG,CAAAA,CAAW,CACzB,QAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CAAY,2BACZ,QAAA,CAAAC,CAAAA,CAAW,CACb,CAAA,CAAoB,CAClB,OACEC,eAACC,mBAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAWV,CAAAA,CACT,mDAAA,CACAM,CACF,CAAA,CACA,KAAA,CAAO,CACL,UAAA,CACE,+EACJ,CAAA,CACA,OAAA,CAAS,CACP,SAAA,CAAW,CACT,CAAA,SAAA,EAAYC,CAAS,CAAA,WAAA,EAAcA,CAAAA,CAAU,QAAQ,KAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAClE,CAAA,SAAA,EAAYA,CAAAA,CAAU,QAAQ,KAAA,CAAO,KAAK,CAAC,CAAA,YAAA,EAAeA,CAAAA,CAAU,OAAA,CAAQ,KAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CACzF,CAAA,SAAA,EAAYA,CAAS,CAAA,WAAA,EAAcA,CAAAA,CAAU,QAAQ,KAAA,CAAO,KAAK,CAAC,CAAA,CACpE,CAAA,CACA,WAAA,CAAa,CACX,0BAAA,CACA,0BAAA,CACA,0BACF,CACF,CAAA,CACA,UAAA,CAAY,CACV,QAAA,CAAAC,CAAAA,CACA,MAAA,CAAQ,CAAA,CAAA,CAAA,CACR,IAAA,CAAM,WACR,CAAA,CAEC,QAAA,CAAAH,CAAAA,CACH,CAEJ,CAEA,IAAOM,CAAAA,CAAQP","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { ReactNode } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface GlowEffectProps {\r\n children?: ReactNode;\r\n className?: string;\r\n glowColor?: string;\r\n duration?: number;\r\n}\r\n\r\nexport function GlowEffect({\r\n children,\r\n className,\r\n glowColor = \"rgba(255, 255, 255, 0.4)\",\r\n duration = 3,\r\n}: GlowEffectProps) {\r\n return (\r\n <motion.div\r\n className={cn(\r\n \"relative p-8 rounded-3xl border-2 border-white/30\",\r\n className\r\n )}\r\n style={{\r\n background:\r\n \"radial-gradient(circle at center, rgba(255,255,255,0.05) 0%, transparent 70%)\",\r\n }}\r\n animate={{\r\n boxShadow: [\r\n `0 0 40px ${glowColor}, 0 0 80px ${glowColor.replace(\"0.4\", \"0.2\")}`,\r\n `0 0 80px ${glowColor.replace(\"0.4\", \"0.8\")}, 0 0 160px ${glowColor.replace(\"0.4\", \"0.5\")}`,\r\n `0 0 40px ${glowColor}, 0 0 80px ${glowColor.replace(\"0.4\", \"0.2\")}`,\r\n ],\r\n borderColor: [\r\n \"rgba(255, 255, 255, 0.3)\",\r\n \"rgba(255, 255, 255, 0.6)\",\r\n \"rgba(255, 255, 255, 0.3)\",\r\n ],\r\n }}\r\n transition={{\r\n duration,\r\n repeat: Infinity,\r\n ease: \"easeInOut\",\r\n }}\r\n >\r\n {children}\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport default GlowEffect;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function t(...r){return twMerge(clsx(r))}function c({children:r,className:a,glowColor:e="rgba(255, 255, 255, 0.4)",duration:n=3}){return jsx(motion.div,{className:t("relative p-8 rounded-3xl border-2 border-white/30",a),style:{background:"radial-gradient(circle at center, rgba(255,255,255,0.05) 0%, transparent 70%)"},animate:{boxShadow:[`0 0 40px ${e}, 0 0 80px ${e.replace("0.4","0.2")}`,`0 0 80px ${e.replace("0.4","0.8")}, 0 0 160px ${e.replace("0.4","0.5")}`,`0 0 40px ${e}, 0 0 80px ${e.replace("0.4","0.2")}`],borderColor:["rgba(255, 255, 255, 0.3)","rgba(255, 255, 255, 0.6)","rgba(255, 255, 255, 0.3)"]},transition:{duration:n,repeat:1/0,ease:"easeInOut"},children:r})}var b=c;export{c as GlowEffect,b as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/glow-effect/index.tsx"],"names":["cn","inputs","twMerge","clsx","GlowEffect","children","className","glowColor","duration","jsx","motion","glow_effect_default"],"mappings":"oIAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCQO,SAASG,CAAAA,CAAW,CACzB,QAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CAAY,2BACZ,QAAA,CAAAC,CAAAA,CAAW,CACb,CAAA,CAAoB,CAClB,OACEC,IAACC,MAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAWV,CAAAA,CACT,mDAAA,CACAM,CACF,CAAA,CACA,KAAA,CAAO,CACL,UAAA,CACE,+EACJ,CAAA,CACA,OAAA,CAAS,CACP,SAAA,CAAW,CACT,CAAA,SAAA,EAAYC,CAAS,CAAA,WAAA,EAAcA,CAAAA,CAAU,QAAQ,KAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAClE,CAAA,SAAA,EAAYA,CAAAA,CAAU,QAAQ,KAAA,CAAO,KAAK,CAAC,CAAA,YAAA,EAAeA,CAAAA,CAAU,OAAA,CAAQ,KAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CACzF,CAAA,SAAA,EAAYA,CAAS,CAAA,WAAA,EAAcA,CAAAA,CAAU,QAAQ,KAAA,CAAO,KAAK,CAAC,CAAA,CACpE,CAAA,CACA,WAAA,CAAa,CACX,0BAAA,CACA,0BAAA,CACA,0BACF,CACF,CAAA,CACA,UAAA,CAAY,CACV,QAAA,CAAAC,CAAAA,CACA,MAAA,CAAQ,CAAA,CAAA,CAAA,CACR,IAAA,CAAM,WACR,CAAA,CAEC,QAAA,CAAAH,CAAAA,CACH,CAEJ,CAEA,IAAOM,CAAAA,CAAQP","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { ReactNode } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface GlowEffectProps {\r\n children?: ReactNode;\r\n className?: string;\r\n glowColor?: string;\r\n duration?: number;\r\n}\r\n\r\nexport function GlowEffect({\r\n children,\r\n className,\r\n glowColor = \"rgba(255, 255, 255, 0.4)\",\r\n duration = 3,\r\n}: GlowEffectProps) {\r\n return (\r\n <motion.div\r\n className={cn(\r\n \"relative p-8 rounded-3xl border-2 border-white/30\",\r\n className\r\n )}\r\n style={{\r\n background:\r\n \"radial-gradient(circle at center, rgba(255,255,255,0.05) 0%, transparent 70%)\",\r\n }}\r\n animate={{\r\n boxShadow: [\r\n `0 0 40px ${glowColor}, 0 0 80px ${glowColor.replace(\"0.4\", \"0.2\")}`,\r\n `0 0 80px ${glowColor.replace(\"0.4\", \"0.8\")}, 0 0 160px ${glowColor.replace(\"0.4\", \"0.5\")}`,\r\n `0 0 40px ${glowColor}, 0 0 80px ${glowColor.replace(\"0.4\", \"0.2\")}`,\r\n ],\r\n borderColor: [\r\n \"rgba(255, 255, 255, 0.3)\",\r\n \"rgba(255, 255, 255, 0.6)\",\r\n \"rgba(255, 255, 255, 0.3)\",\r\n ],\r\n }}\r\n transition={{\r\n duration,\r\n repeat: Infinity,\r\n ease: \"easeInOut\",\r\n }}\r\n >\r\n {children}\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport default GlowEffect;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function r(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function m({text:e,className:n,glowColor:s="#3b82f6",hoverColor:i="#ec4899"}){let[l,t]=react.useState(false),o=l?i:s;return jsxRuntime.jsx(framerMotion.motion.div,{className:r("font-bold cursor-pointer select-none",n),onMouseEnter:()=>t(true),onMouseLeave:()=>t(false),animate:{color:o,textShadow:`0 0 10px ${o}, 0 0 20px ${o}, 0 0 30px ${o}, 0 0 50px ${o}`},transition:{duration:.4,ease:"easeInOut"},children:e})}var $=m;exports.GlowingText=m;exports.default=$;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/glowing-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","GlowingText","text","className","glowColor","hoverColor","isHovered","setIsHovered","useState","currentColor","jsx","motion","glowing_text_default"],"mappings":"4OAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCQO,SAASG,EAAY,CAC1B,IAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,EAAY,SAAA,CACZ,UAAA,CAAAC,CAAAA,CAAa,SACf,CAAA,CAAqB,CACnB,GAAM,CAACC,CAAAA,CAAWC,CAAY,CAAA,CAAIC,cAAAA,CAAS,KAAK,EAC1CC,CAAAA,CAAeH,CAAAA,CAAYD,EAAaD,CAAAA,CAE9C,OACEM,eAACC,mBAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAWd,CAAAA,CAAG,sCAAA,CAAwCM,CAAS,CAAA,CAC/D,YAAA,CAAc,IAAMI,CAAAA,CAAa,IAAI,CAAA,CACrC,aAAc,IAAMA,CAAAA,CAAa,KAAK,CAAA,CACtC,OAAA,CAAS,CACP,MAAOE,CAAAA,CACP,UAAA,CAAY,YAAYA,CAAY,CAAA,WAAA,EAAcA,CAAY,CAAA,WAAA,EAAcA,CAAY,CAAA,WAAA,EAAcA,CAAY,CAAA,CACpH,CAAA,CACA,WAAY,CAAE,QAAA,CAAU,EAAA,CAAK,IAAA,CAAM,WAAY,CAAA,CAE9C,SAAAP,CAAAA,CACH,CAEJ,CAEA,IAAOU,CAAAA,CAAQX","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface GlowingTextProps {\r\n text: string;\r\n className?: string;\r\n glowColor?: string;\r\n hoverColor?: string;\r\n}\r\n\r\nexport function GlowingText({\r\n text,\r\n className,\r\n glowColor = \"#3b82f6\",\r\n hoverColor = \"#ec4899\",\r\n}: GlowingTextProps) {\r\n const [isHovered, setIsHovered] = useState(false);\r\n const currentColor = isHovered ? hoverColor : glowColor;\r\n\r\n return (\r\n <motion.div\r\n className={cn(\"font-bold cursor-pointer select-none\", className)}\r\n onMouseEnter={() => setIsHovered(true)}\r\n onMouseLeave={() => setIsHovered(false)}\r\n animate={{\r\n color: currentColor,\r\n textShadow: `0 0 10px ${currentColor}, 0 0 20px ${currentColor}, 0 0 30px ${currentColor}, 0 0 50px ${currentColor}`,\r\n }}\r\n transition={{ duration: 0.4, ease: \"easeInOut\" }}\r\n >\r\n {text}\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport default GlowingText;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {useState}from'react';import {motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function r(...e){return twMerge(clsx(e))}function m({text:e,className:n,glowColor:s="#3b82f6",hoverColor:i="#ec4899"}){let[l,t]=useState(false),o=l?i:s;return jsx(motion.div,{className:r("font-bold cursor-pointer select-none",n),onMouseEnter:()=>t(true),onMouseLeave:()=>t(false),animate:{color:o,textShadow:`0 0 10px ${o}, 0 0 20px ${o}, 0 0 30px ${o}, 0 0 50px ${o}`},transition:{duration:.4,ease:"easeInOut"},children:e})}var $=m;export{m as GlowingText,$ as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/glowing-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","GlowingText","text","className","glowColor","hoverColor","isHovered","setIsHovered","useState","currentColor","jsx","motion","glowing_text_default"],"mappings":"iKAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCQO,SAASG,EAAY,CAC1B,IAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,EAAY,SAAA,CACZ,UAAA,CAAAC,CAAAA,CAAa,SACf,CAAA,CAAqB,CACnB,GAAM,CAACC,CAAAA,CAAWC,CAAY,CAAA,CAAIC,QAAAA,CAAS,KAAK,EAC1CC,CAAAA,CAAeH,CAAAA,CAAYD,EAAaD,CAAAA,CAE9C,OACEM,IAACC,MAAAA,CAAO,GAAA,CAAP,CACC,SAAA,CAAWd,CAAAA,CAAG,sCAAA,CAAwCM,CAAS,CAAA,CAC/D,YAAA,CAAc,IAAMI,CAAAA,CAAa,IAAI,CAAA,CACrC,aAAc,IAAMA,CAAAA,CAAa,KAAK,CAAA,CACtC,OAAA,CAAS,CACP,MAAOE,CAAAA,CACP,UAAA,CAAY,YAAYA,CAAY,CAAA,WAAA,EAAcA,CAAY,CAAA,WAAA,EAAcA,CAAY,CAAA,WAAA,EAAcA,CAAY,CAAA,CACpH,CAAA,CACA,WAAY,CAAE,QAAA,CAAU,EAAA,CAAK,IAAA,CAAM,WAAY,CAAA,CAE9C,SAAAP,CAAAA,CACH,CAEJ,CAEA,IAAOU,CAAAA,CAAQX","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface GlowingTextProps {\r\n text: string;\r\n className?: string;\r\n glowColor?: string;\r\n hoverColor?: string;\r\n}\r\n\r\nexport function GlowingText({\r\n text,\r\n className,\r\n glowColor = \"#3b82f6\",\r\n hoverColor = \"#ec4899\",\r\n}: GlowingTextProps) {\r\n const [isHovered, setIsHovered] = useState(false);\r\n const currentColor = isHovered ? hoverColor : glowColor;\r\n\r\n return (\r\n <motion.div\r\n className={cn(\"font-bold cursor-pointer select-none\", className)}\r\n onMouseEnter={() => setIsHovered(true)}\r\n onMouseLeave={() => setIsHovered(false)}\r\n animate={{\r\n color: currentColor,\r\n textShadow: `0 0 10px ${currentColor}, 0 0 20px ${currentColor}, 0 0 30px ${currentColor}, 0 0 50px ${currentColor}`,\r\n }}\r\n transition={{ duration: 0.4, ease: \"easeInOut\" }}\r\n >\r\n {text}\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport default GlowingText;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function t(...l){return tailwindMerge.twMerge(clsx.clsx(l))}function p({className:l,onChange:r}){let[e,n]=react.useState(false),s=()=>{let o=!e;n(o),r?.(o);};return jsxRuntime.jsxs("label",{className:t("relative w-10 h-8 bg-transparent cursor-pointer block",l),htmlFor:"burger-basic",children:[jsxRuntime.jsx("input",{type:"checkbox",id:"burger-basic",className:"hidden",checked:e,onChange:s}),jsxRuntime.jsx("span",{className:t("block absolute h-1 w-full bg-black dark:bg-white rounded-lg opacity-100 left-0 transition-all duration-250 ease-in-out","top-0 origin-left",e&&"rotate-45 top-0 left-1.5")}),jsxRuntime.jsx("span",{className:t("block absolute h-1 w-full bg-black dark:bg-white rounded-lg opacity-100 left-0 transition-all duration-250 ease-in-out","top-1/2 -translate-y-1/2 origin-left",e&&"w-0 opacity-0")}),jsxRuntime.jsx("span",{className:t("block absolute h-1 w-full bg-black dark:bg-white rounded-lg opacity-100 left-0 transition-all duration-250 ease-in-out","top-full -translate-y-full origin-left",e&&"-rotate-45 top-7 left-1.5")})]})}var k=p;exports.HamburgerBasic=p;exports.default=k;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/hamburger-basic/index.tsx"],"names":["cn","inputs","twMerge","clsx","HamburgerBasic","className","onChange","isOpen","setIsOpen","useState","handleToggle","newState","jsxs","jsx","hamburger_basic_default"],"mappings":"sMAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,CAAAA,CAAe,CAAE,SAAA,CAAAC,CAAAA,CAAW,QAAA,CAAAC,CAAS,CAAA,CAAwB,CAC3E,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIC,cAAAA,CAAS,KAAK,CAAA,CAEpCC,CAAAA,CAAe,IAAM,CACzB,IAAMC,CAAAA,CAAW,CAACJ,CAAAA,CAClBC,CAAAA,CAAUG,CAAQ,CAAA,CAClBL,CAAAA,GAAWK,CAAQ,EACrB,EAEA,OACEC,eAAAA,CAAC,OAAA,CAAA,CACC,SAAA,CAAWZ,CAAAA,CACT,uDAAA,CACAK,CACF,CAAA,CACA,OAAA,CAAQ,cAAA,CAER,QAAA,CAAA,CAAAQ,cAAAA,CAAC,OAAA,CAAA,CACC,IAAA,CAAK,WACL,EAAA,CAAG,cAAA,CACH,SAAA,CAAU,QAAA,CACV,OAAA,CAASN,CAAAA,CACT,QAAA,CAAUG,CAAAA,CACZ,CAAA,CACAG,cAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,wHAAA,CACA,oBACAO,CAAAA,EAAU,0BACZ,CAAA,CACF,CAAA,CACAM,cAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,wHAAA,CACA,sCAAA,CACAO,CAAAA,EAAU,eACZ,CAAA,CACF,CAAA,CACAM,eAAC,MAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,wHAAA,CACA,wCAAA,CACAO,CAAAA,EAAU,2BACZ,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CAEA,IAAOO,CAAAA,CAAQV","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface HamburgerBasicProps {\r\n className?: string;\r\n onChange?: (isOpen: boolean) => void;\r\n}\r\n\r\nexport function HamburgerBasic({ className, onChange }: HamburgerBasicProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const handleToggle = () => {\r\n const newState = !isOpen;\r\n setIsOpen(newState);\r\n onChange?.(newState);\r\n };\r\n\r\n return (\r\n <label\r\n className={cn(\r\n \"relative w-10 h-8 bg-transparent cursor-pointer block\",\r\n className\r\n )}\r\n htmlFor=\"burger-basic\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n id=\"burger-basic\"\r\n className=\"hidden\"\r\n checked={isOpen}\r\n onChange={handleToggle}\r\n />\r\n <span\r\n className={cn(\r\n \"block absolute h-1 w-full bg-black dark:bg-white rounded-lg opacity-100 left-0 transition-all duration-250 ease-in-out\",\r\n \"top-0 origin-left\",\r\n isOpen && \"rotate-45 top-0 left-1.5\"\r\n )}\r\n />\r\n <span\r\n className={cn(\r\n \"block absolute h-1 w-full bg-black dark:bg-white rounded-lg opacity-100 left-0 transition-all duration-250 ease-in-out\",\r\n \"top-1/2 -translate-y-1/2 origin-left\",\r\n isOpen && \"w-0 opacity-0\"\r\n )}\r\n />\r\n <span\r\n className={cn(\r\n \"block absolute h-1 w-full bg-black dark:bg-white rounded-lg opacity-100 left-0 transition-all duration-250 ease-in-out\",\r\n \"top-full -translate-y-full origin-left\",\r\n isOpen && \"-rotate-45 top-7 left-1.5\"\r\n )}\r\n />\r\n </label>\r\n );\r\n}\r\n\r\nexport default HamburgerBasic;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {useState}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function t(...l){return twMerge(clsx(l))}function p({className:l,onChange:r}){let[e,n]=useState(false),s=()=>{let o=!e;n(o),r?.(o);};return jsxs("label",{className:t("relative w-10 h-8 bg-transparent cursor-pointer block",l),htmlFor:"burger-basic",children:[jsx("input",{type:"checkbox",id:"burger-basic",className:"hidden",checked:e,onChange:s}),jsx("span",{className:t("block absolute h-1 w-full bg-black dark:bg-white rounded-lg opacity-100 left-0 transition-all duration-250 ease-in-out","top-0 origin-left",e&&"rotate-45 top-0 left-1.5")}),jsx("span",{className:t("block absolute h-1 w-full bg-black dark:bg-white rounded-lg opacity-100 left-0 transition-all duration-250 ease-in-out","top-1/2 -translate-y-1/2 origin-left",e&&"w-0 opacity-0")}),jsx("span",{className:t("block absolute h-1 w-full bg-black dark:bg-white rounded-lg opacity-100 left-0 transition-all duration-250 ease-in-out","top-full -translate-y-full origin-left",e&&"-rotate-45 top-7 left-1.5")})]})}var k=p;export{p as HamburgerBasic,k as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/hamburger-basic/index.tsx"],"names":["cn","inputs","twMerge","clsx","HamburgerBasic","className","onChange","isOpen","setIsOpen","useState","handleToggle","newState","jsxs","jsx","hamburger_basic_default"],"mappings":"mIAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,CAAAA,CAAe,CAAE,SAAA,CAAAC,CAAAA,CAAW,QAAA,CAAAC,CAAS,CAAA,CAAwB,CAC3E,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIC,QAAAA,CAAS,KAAK,CAAA,CAEpCC,CAAAA,CAAe,IAAM,CACzB,IAAMC,CAAAA,CAAW,CAACJ,CAAAA,CAClBC,CAAAA,CAAUG,CAAQ,CAAA,CAClBL,CAAAA,GAAWK,CAAQ,EACrB,EAEA,OACEC,IAAAA,CAAC,OAAA,CAAA,CACC,SAAA,CAAWZ,CAAAA,CACT,uDAAA,CACAK,CACF,CAAA,CACA,OAAA,CAAQ,cAAA,CAER,QAAA,CAAA,CAAAQ,GAAAA,CAAC,OAAA,CAAA,CACC,IAAA,CAAK,WACL,EAAA,CAAG,cAAA,CACH,SAAA,CAAU,QAAA,CACV,OAAA,CAASN,CAAAA,CACT,QAAA,CAAUG,CAAAA,CACZ,CAAA,CACAG,GAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,wHAAA,CACA,oBACAO,CAAAA,EAAU,0BACZ,CAAA,CACF,CAAA,CACAM,GAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,wHAAA,CACA,sCAAA,CACAO,CAAAA,EAAU,eACZ,CAAA,CACF,CAAA,CACAM,IAAC,MAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,wHAAA,CACA,wCAAA,CACAO,CAAAA,EAAU,2BACZ,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CAEA,IAAOO,CAAAA,CAAQV","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface HamburgerBasicProps {\r\n className?: string;\r\n onChange?: (isOpen: boolean) => void;\r\n}\r\n\r\nexport function HamburgerBasic({ className, onChange }: HamburgerBasicProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const handleToggle = () => {\r\n const newState = !isOpen;\r\n setIsOpen(newState);\r\n onChange?.(newState);\r\n };\r\n\r\n return (\r\n <label\r\n className={cn(\r\n \"relative w-10 h-8 bg-transparent cursor-pointer block\",\r\n className\r\n )}\r\n htmlFor=\"burger-basic\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n id=\"burger-basic\"\r\n className=\"hidden\"\r\n checked={isOpen}\r\n onChange={handleToggle}\r\n />\r\n <span\r\n className={cn(\r\n \"block absolute h-1 w-full bg-black dark:bg-white rounded-lg opacity-100 left-0 transition-all duration-250 ease-in-out\",\r\n \"top-0 origin-left\",\r\n isOpen && \"rotate-45 top-0 left-1.5\"\r\n )}\r\n />\r\n <span\r\n className={cn(\r\n \"block absolute h-1 w-full bg-black dark:bg-white rounded-lg opacity-100 left-0 transition-all duration-250 ease-in-out\",\r\n \"top-1/2 -translate-y-1/2 origin-left\",\r\n isOpen && \"w-0 opacity-0\"\r\n )}\r\n />\r\n <span\r\n className={cn(\r\n \"block absolute h-1 w-full bg-black dark:bg-white rounded-lg opacity-100 left-0 transition-all duration-250 ease-in-out\",\r\n \"top-full -translate-y-full origin-left\",\r\n isOpen && \"-rotate-45 top-7 left-1.5\"\r\n )}\r\n />\r\n </label>\r\n );\r\n}\r\n\r\nexport default HamburgerBasic;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function a(...t){return tailwindMerge.twMerge(clsx.clsx(t))}function u({className:t,onChange:l}){let[e,o]=react.useState(false),s=()=>{let r=!e;o(r),l?.(r);};return jsxRuntime.jsxs("div",{className:a("inline-block",t),children:[jsxRuntime.jsx("input",{type:"checkbox",id:"checkbox-spin",className:"hidden",checked:e,onChange:s}),jsxRuntime.jsxs("label",{htmlFor:"checkbox-spin",className:a("relative w-10 h-10 cursor-pointer flex flex-col items-center justify-center gap-2.5 transition-all duration-500",e&&"rotate-180"),children:[jsxRuntime.jsx("div",{className:a("w-full h-1 bg-black dark:bg-white rounded-md transition-all duration-500 origin-center",e&&"scale-x-[0.6] translate-y-[1px]")}),jsxRuntime.jsx("div",{className:a("w-full h-1 bg-black dark:bg-white rounded-md transition-all duration-500 origin-center",e&&"rotate-90 scale-x-[1.2]")}),jsxRuntime.jsx("div",{className:a("w-full h-1 bg-black dark:bg-white rounded-md transition-all duration-500 origin-center",e&&"scale-x-[0.6] -translate-y-[1px]")})]})]})}var x=u;exports.HamburgerSpin=u;exports.default=x;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/hamburger-spin/index.tsx"],"names":["cn","inputs","twMerge","clsx","HamburgerSpin","className","onChange","isOpen","setIsOpen","useState","handleToggle","newState","jsxs","jsx","hamburger_spin_default"],"mappings":"sMAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,CAAAA,CAAc,CAAE,SAAA,CAAAC,CAAAA,CAAW,QAAA,CAAAC,CAAS,CAAA,CAAuB,CACzE,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIC,cAAAA,CAAS,KAAK,CAAA,CAEpCC,CAAAA,CAAe,IAAM,CACzB,IAAMC,CAAAA,CAAW,CAACJ,CAAAA,CAClBC,CAAAA,CAAUG,CAAQ,CAAA,CAClBL,CAAAA,GAAWK,CAAQ,EACrB,CAAA,CAEA,OACEC,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAWZ,CAAAA,CAAG,cAAA,CAAgBK,CAAS,CAAA,CAC1C,QAAA,CAAA,CAAAQ,cAAAA,CAAC,OAAA,CAAA,CACC,IAAA,CAAK,UAAA,CACL,EAAA,CAAG,eAAA,CACH,SAAA,CAAU,QAAA,CACV,OAAA,CAASN,CAAAA,CACT,QAAA,CAAUG,CAAAA,CACZ,CAAA,CACAE,eAAAA,CAAC,OAAA,CAAA,CACC,OAAA,CAAQ,eAAA,CACR,SAAA,CAAWZ,CAAAA,CACT,iHAAA,CACAO,CAAAA,EAAU,YACZ,CAAA,CAEA,QAAA,CAAA,CAAAM,cAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,wFAAA,CACAO,CAAAA,EAAU,iCACZ,CAAA,CACF,CAAA,CACAM,cAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,wFAAA,CACAO,CAAAA,EAAU,yBACZ,CAAA,CACF,CAAA,CACAM,cAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,wFAAA,CACAO,CAAAA,EAAU,kCACZ,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CAEA,IAAOO,CAAAA,CAAQV","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface HamburgerSpinProps {\r\n className?: string;\r\n onChange?: (isOpen: boolean) => void;\r\n}\r\n\r\nexport function HamburgerSpin({ className, onChange }: HamburgerSpinProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const handleToggle = () => {\r\n const newState = !isOpen;\r\n setIsOpen(newState);\r\n onChange?.(newState);\r\n };\r\n\r\n return (\r\n <div className={cn(\"inline-block\", className)}>\r\n <input\r\n type=\"checkbox\"\r\n id=\"checkbox-spin\"\r\n className=\"hidden\"\r\n checked={isOpen}\r\n onChange={handleToggle}\r\n />\r\n <label\r\n htmlFor=\"checkbox-spin\"\r\n className={cn(\r\n \"relative w-10 h-10 cursor-pointer flex flex-col items-center justify-center gap-2.5 transition-all duration-500\",\r\n isOpen && \"rotate-180\"\r\n )}\r\n >\r\n <div\r\n className={cn(\r\n \"w-full h-1 bg-black dark:bg-white rounded-md transition-all duration-500 origin-center\",\r\n isOpen && \"scale-x-[0.6] translate-y-[1px]\"\r\n )}\r\n />\r\n <div\r\n className={cn(\r\n \"w-full h-1 bg-black dark:bg-white rounded-md transition-all duration-500 origin-center\",\r\n isOpen && \"rotate-90 scale-x-[1.2]\"\r\n )}\r\n />\r\n <div\r\n className={cn(\r\n \"w-full h-1 bg-black dark:bg-white rounded-md transition-all duration-500 origin-center\",\r\n isOpen && \"scale-x-[0.6] -translate-y-[1px]\"\r\n )}\r\n />\r\n </label>\r\n </div>\r\n );\r\n}\r\n\r\nexport default HamburgerSpin;\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(...t){return twMerge(clsx(t))}function u({className:t,onChange:l}){let[e,o]=useState(false),s=()=>{let r=!e;o(r),l?.(r);};return jsxs("div",{className:a("inline-block",t),children:[jsx("input",{type:"checkbox",id:"checkbox-spin",className:"hidden",checked:e,onChange:s}),jsxs("label",{htmlFor:"checkbox-spin",className:a("relative w-10 h-10 cursor-pointer flex flex-col items-center justify-center gap-2.5 transition-all duration-500",e&&"rotate-180"),children:[jsx("div",{className:a("w-full h-1 bg-black dark:bg-white rounded-md transition-all duration-500 origin-center",e&&"scale-x-[0.6] translate-y-[1px]")}),jsx("div",{className:a("w-full h-1 bg-black dark:bg-white rounded-md transition-all duration-500 origin-center",e&&"rotate-90 scale-x-[1.2]")}),jsx("div",{className:a("w-full h-1 bg-black dark:bg-white rounded-md transition-all duration-500 origin-center",e&&"scale-x-[0.6] -translate-y-[1px]")})]})]})}var x=u;export{u as HamburgerSpin,x as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/hamburger-spin/index.tsx"],"names":["cn","inputs","twMerge","clsx","HamburgerSpin","className","onChange","isOpen","setIsOpen","useState","handleToggle","newState","jsxs","jsx","hamburger_spin_default"],"mappings":"mIAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,CAAAA,CAAc,CAAE,SAAA,CAAAC,CAAAA,CAAW,QAAA,CAAAC,CAAS,CAAA,CAAuB,CACzE,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIC,QAAAA,CAAS,KAAK,CAAA,CAEpCC,CAAAA,CAAe,IAAM,CACzB,IAAMC,CAAAA,CAAW,CAACJ,CAAAA,CAClBC,CAAAA,CAAUG,CAAQ,CAAA,CAClBL,CAAAA,GAAWK,CAAQ,EACrB,CAAA,CAEA,OACEC,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAWZ,CAAAA,CAAG,cAAA,CAAgBK,CAAS,CAAA,CAC1C,QAAA,CAAA,CAAAQ,GAAAA,CAAC,OAAA,CAAA,CACC,IAAA,CAAK,UAAA,CACL,EAAA,CAAG,eAAA,CACH,SAAA,CAAU,QAAA,CACV,OAAA,CAASN,CAAAA,CACT,QAAA,CAAUG,CAAAA,CACZ,CAAA,CACAE,IAAAA,CAAC,OAAA,CAAA,CACC,OAAA,CAAQ,eAAA,CACR,SAAA,CAAWZ,CAAAA,CACT,iHAAA,CACAO,CAAAA,EAAU,YACZ,CAAA,CAEA,QAAA,CAAA,CAAAM,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,wFAAA,CACAO,CAAAA,EAAU,iCACZ,CAAA,CACF,CAAA,CACAM,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,wFAAA,CACAO,CAAAA,EAAU,yBACZ,CAAA,CACF,CAAA,CACAM,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,wFAAA,CACAO,CAAAA,EAAU,kCACZ,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CAEA,IAAOO,CAAAA,CAAQV","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface HamburgerSpinProps {\r\n className?: string;\r\n onChange?: (isOpen: boolean) => void;\r\n}\r\n\r\nexport function HamburgerSpin({ className, onChange }: HamburgerSpinProps) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const handleToggle = () => {\r\n const newState = !isOpen;\r\n setIsOpen(newState);\r\n onChange?.(newState);\r\n };\r\n\r\n return (\r\n <div className={cn(\"inline-block\", className)}>\r\n <input\r\n type=\"checkbox\"\r\n id=\"checkbox-spin\"\r\n className=\"hidden\"\r\n checked={isOpen}\r\n onChange={handleToggle}\r\n />\r\n <label\r\n htmlFor=\"checkbox-spin\"\r\n className={cn(\r\n \"relative w-10 h-10 cursor-pointer flex flex-col items-center justify-center gap-2.5 transition-all duration-500\",\r\n isOpen && \"rotate-180\"\r\n )}\r\n >\r\n <div\r\n className={cn(\r\n \"w-full h-1 bg-black dark:bg-white rounded-md transition-all duration-500 origin-center\",\r\n isOpen && \"scale-x-[0.6] translate-y-[1px]\"\r\n )}\r\n />\r\n <div\r\n className={cn(\r\n \"w-full h-1 bg-black dark:bg-white rounded-md transition-all duration-500 origin-center\",\r\n isOpen && \"rotate-90 scale-x-[1.2]\"\r\n )}\r\n />\r\n <div\r\n className={cn(\r\n \"w-full h-1 bg-black dark:bg-white rounded-md transition-all duration-500 origin-center\",\r\n isOpen && \"scale-x-[0.6] -translate-y-[1px]\"\r\n )}\r\n />\r\n </label>\r\n </div>\r\n );\r\n}\r\n\r\nexport default HamburgerSpin;\r\n"]}
|