bynana-ui 1.0.0 → 1.3.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/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/avatar/index.js +2 -0
- package/dist/avatar/index.js.map +1 -0
- package/dist/avatar/index.mjs +2 -0
- package/dist/avatar/index.mjs.map +1 -0
- package/dist/badge/index.js +2 -0
- package/dist/badge/index.js.map +1 -0
- package/dist/badge/index.mjs +2 -0
- package/dist/badge/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/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/count-up/index.js +2 -0
- package/dist/count-up/index.js.map +1 -0
- package/dist/count-up/index.mjs +2 -0
- package/dist/count-up/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/dynamic-text/index.js +2 -0
- package/dist/dynamic-text/index.js.map +1 -0
- package/dist/dynamic-text/index.mjs +2 -0
- package/dist/dynamic-text/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/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/fuzzy-text/index.js +2 -0
- package/dist/fuzzy-text/index.js.map +1 -0
- package/dist/fuzzy-text/index.mjs +2 -0
- package/dist/fuzzy-text/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/gradient-button/index.js +2 -0
- package/dist/gradient-button/index.js.map +1 -0
- package/dist/gradient-button/index.mjs +2 -0
- package/dist/gradient-button/index.mjs.map +1 -0
- package/dist/hold-button/index.js +2 -0
- package/dist/hold-button/index.js.map +1 -0
- package/dist/hold-button/index.mjs +2 -0
- package/dist/hold-button/index.mjs.map +1 -0
- package/dist/index.js +32 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +32 -1
- package/dist/index.mjs.map +1 -1
- 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/liquid-button/index.js +2 -0
- package/dist/liquid-button/index.js.map +1 -0
- package/dist/liquid-button/index.mjs +2 -0
- package/dist/liquid-button/index.mjs.map +1 -0
- package/dist/liquid-text/index.js +2 -0
- package/dist/liquid-text/index.js.map +1 -0
- package/dist/liquid-text/index.mjs +2 -0
- package/dist/liquid-text/index.mjs.map +1 -0
- package/dist/loading-bar/index.js +2 -0
- package/dist/loading-bar/index.js.map +1 -0
- package/dist/loading-bar/index.mjs +2 -0
- package/dist/loading-bar/index.mjs.map +1 -0
- package/dist/loading-bounce/index.js +2 -0
- package/dist/loading-bounce/index.js.map +1 -0
- package/dist/loading-bounce/index.mjs +2 -0
- package/dist/loading-bounce/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-pulse/index.js +2 -0
- package/dist/loading-pulse/index.js.map +1 -0
- package/dist/loading-pulse/index.mjs +2 -0
- package/dist/loading-pulse/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/magnetic-text/index.js +2 -0
- package/dist/magnetic-text/index.js.map +1 -0
- package/dist/magnetic-text/index.mjs +2 -0
- package/dist/magnetic-text/index.mjs.map +1 -0
- package/dist/matrix-text/index.js +2 -0
- package/dist/matrix-text/index.js.map +1 -0
- package/dist/matrix-text/index.mjs +2 -0
- package/dist/matrix-text/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/neon-button/index.js +2 -0
- package/dist/neon-button/index.js.map +1 -0
- package/dist/neon-button/index.mjs +2 -0
- package/dist/neon-button/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/progress/index.js +2 -0
- package/dist/progress/index.js.map +1 -0
- package/dist/progress/index.mjs +2 -0
- package/dist/progress/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/rainbow-text/index.js +7 -0
- package/dist/rainbow-text/index.js.map +1 -0
- package/dist/rainbow-text/index.mjs +7 -0
- package/dist/rainbow-text/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/rotating-text/index.js +2 -0
- package/dist/rotating-text/index.js.map +1 -0
- package/dist/rotating-text/index.mjs +2 -0
- package/dist/rotating-text/index.mjs.map +1 -0
- package/dist/scrambled-text/index.js +2 -0
- package/dist/scrambled-text/index.js.map +1 -0
- package/dist/scrambled-text/index.mjs +2 -0
- package/dist/scrambled-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/shiny-text/index.js +7 -0
- package/dist/shiny-text/index.js.map +1 -0
- package/dist/shiny-text/index.mjs +7 -0
- package/dist/shiny-text/index.mjs.map +1 -0
- package/dist/skeleton/index.js +2 -0
- package/dist/skeleton/index.js.map +1 -0
- package/dist/skeleton/index.mjs +2 -0
- package/dist/skeleton/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/slide-button/index.js +2 -0
- package/dist/slide-button/index.js.map +1 -0
- package/dist/slide-button/index.mjs +2 -0
- package/dist/slide-button/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/stagger-text/index.js +2 -0
- package/dist/stagger-text/index.js.map +1 -0
- package/dist/stagger-text/index.mjs +2 -0
- package/dist/stagger-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/switch/index.js +2 -0
- package/dist/switch/index.js.map +1 -0
- package/dist/switch/index.mjs +2 -0
- package/dist/switch/index.mjs.map +1 -0
- package/dist/swoosh-text/index.js +2 -0
- package/dist/swoosh-text/index.js.map +1 -0
- package/dist/swoosh-text/index.mjs +2 -0
- package/dist/swoosh-text/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/threed-button/index.js +2 -0
- package/dist/threed-button/index.js.map +1 -0
- package/dist/threed-button/index.mjs +2 -0
- package/dist/threed-button/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/index.js +2 -0
- package/dist/tooltip/index.js.map +1 -0
- package/dist/tooltip/index.mjs +2 -0
- package/dist/tooltip/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 +94 -140
|
@@ -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 a(...i){return tailwindMerge.twMerge(clsx.clsx(i))}function h({items:i,className:l,allowMultiple:m=false}){let[n,r]=react.useState([]),d=t=>{r(m?e=>e.includes(t)?e.filter(u=>u!==t):[...e,t]:e=>e.includes(t)?[]:[t]);};return jsxRuntime.jsx("div",{className:a("w-full space-y-2",l),children:i.map((t,e)=>jsxRuntime.jsxs("div",{className:"border border-zinc-200 dark:border-zinc-800 rounded-lg overflow-hidden",children:[jsxRuntime.jsxs("button",{onClick:()=>d(e),className:"w-full px-4 py-3 flex items-center justify-between text-left bg-zinc-50 dark:bg-zinc-900 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors",children:[jsxRuntime.jsx("span",{className:"font-medium",children:t.title}),jsxRuntime.jsx(framerMotion.motion.svg,{animate:{rotate:n.includes(e)?180:0},transition:{duration:.2},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:"M19 9l-7 7-7-7"})})]}),jsxRuntime.jsx(framerMotion.AnimatePresence,{children:n.includes(e)&&jsxRuntime.jsx(framerMotion.motion.div,{initial:{height:0,opacity:0},animate:{height:"auto",opacity:1},exit:{height:0,opacity:0},transition:{duration:.2},children:jsxRuntime.jsx("div",{className:"px-4 py-3 bg-white dark:bg-zinc-950",children:t.content})})})]},e))})}var A=h;exports.Accordion=h;exports.default=A;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/accordion/index.tsx"],"names":["cn","inputs","twMerge","clsx","Accordion","items","className","allowMultiple","openItems","setOpenItems","useState","toggleItem","index","prev","i","jsx","item","jsxs","motion","AnimatePresence","accordion_default"],"mappings":"4OAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCYO,SAASG,CAAAA,CAAU,CAAE,KAAA,CAAAC,CAAAA,CAAO,SAAA,CAAAC,EAAW,aAAA,CAAAC,CAAAA,CAAgB,KAAM,CAAA,CAAmB,CACrF,GAAM,CAACC,CAAAA,CAAWC,CAAY,CAAA,CAAIC,cAAAA,CAAmB,EAAE,EAEjDC,CAAAA,CAAcC,CAAAA,EAAkB,CAElCH,CAAAA,CADEF,CAAAA,CACYM,CAAAA,EACZA,EAAK,QAAA,CAASD,CAAK,CAAA,CAAIC,CAAAA,CAAK,MAAA,CAAQC,CAAAA,EAAMA,IAAMF,CAAK,CAAA,CAAI,CAAC,GAAGC,CAAAA,CAAMD,CAAK,EAG5DC,CAAAA,EAAUA,CAAAA,CAAK,QAAA,CAASD,CAAK,CAAA,CAAI,GAAK,CAACA,CAAK,CAF1D,EAIJ,CAAA,CAEA,OACEG,eAAC,KAAA,CAAA,CAAI,SAAA,CAAWf,CAAAA,CAAG,kBAAA,CAAoBM,CAAS,CAAA,CAC7C,SAAAD,CAAAA,CAAM,GAAA,CAAI,CAACW,CAAAA,CAAMJ,CAAAA,GAChBK,eAAAA,CAAC,OAEC,SAAA,CAAU,wEAAA,CAEV,QAAA,CAAA,CAAAA,eAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAMN,CAAAA,CAAWC,CAAK,CAAA,CAC/B,SAAA,CAAU,qJAAA,CAEV,QAAA,CAAA,CAAAG,eAAC,MAAA,CAAA,CAAK,SAAA,CAAU,aAAA,CAAe,QAAA,CAAAC,CAAAA,CAAK,KAAA,CAAM,EAC1CD,cAAAA,CAACG,mBAAAA,CAAO,GAAA,CAAP,CACC,OAAA,CAAS,CAAE,OAAQV,CAAAA,CAAU,QAAA,CAASI,CAAK,CAAA,CAAI,GAAA,CAAM,CAAE,EACvD,UAAA,CAAY,CAAE,QAAA,CAAU,EAAI,CAAA,CAC5B,SAAA,CAAU,UACV,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,OAAA,CAAQ,WAAA,CAER,SAAAG,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,YAAa,CAAA,CAAG,CAAA,CAAE,gBAAA,CAAiB,CAAA,CACxF,CAAA,CAAA,CACF,CAAA,CACAA,eAACI,4BAAAA,CAAA,CACE,QAAA,CAAAX,CAAAA,CAAU,QAAA,CAASI,CAAK,GACvBG,cAAAA,CAACG,mBAAAA,CAAO,GAAA,CAAP,CACC,OAAA,CAAS,CAAE,OAAQ,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CACjC,OAAA,CAAS,CAAE,OAAQ,MAAA,CAAQ,OAAA,CAAS,CAAE,CAAA,CACtC,IAAA,CAAM,CAAE,OAAQ,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CAC9B,UAAA,CAAY,CAAE,SAAU,EAAI,CAAA,CAE5B,QAAA,CAAAH,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sCAAuC,QAAA,CAAAC,CAAAA,CAAK,OAAA,CAAQ,CAAA,CACrE,CAAA,CAEJ,CAAA,CAAA,CAAA,CA9BKJ,CA+BP,CACD,CAAA,CACH,CAEJ,CAEA,IAAOQ,CAAAA,CAAQhB","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, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface AccordionItem {\r\n title: string;\r\n content: React.ReactNode;\r\n}\r\n\r\ninterface AccordionProps {\r\n items: AccordionItem[];\r\n className?: string;\r\n allowMultiple?: boolean;\r\n}\r\n\r\nexport function Accordion({ items, className, allowMultiple = false }: AccordionProps) {\r\n const [openItems, setOpenItems] = useState<number[]>([]);\r\n\r\n const toggleItem = (index: number) => {\r\n if (allowMultiple) {\r\n setOpenItems((prev) =>\r\n prev.includes(index) ? prev.filter((i) => i !== index) : [...prev, index]\r\n );\r\n } else {\r\n setOpenItems((prev) => (prev.includes(index) ? [] : [index]));\r\n }\r\n };\r\n\r\n return (\r\n <div className={cn(\"w-full space-y-2\", className)}>\r\n {items.map((item, index) => (\r\n <div\r\n key={index}\r\n className=\"border border-zinc-200 dark:border-zinc-800 rounded-lg overflow-hidden\"\r\n >\r\n <button\r\n onClick={() => toggleItem(index)}\r\n className=\"w-full px-4 py-3 flex items-center justify-between text-left bg-zinc-50 dark:bg-zinc-900 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors\"\r\n >\r\n <span className=\"font-medium\">{item.title}</span>\r\n <motion.svg\r\n animate={{ rotate: openItems.includes(index) ? 180 : 0 }}\r\n transition={{ duration: 0.2 }}\r\n className=\"w-5 h-5\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\r\n </motion.svg>\r\n </button>\r\n <AnimatePresence>\r\n {openItems.includes(index) && (\r\n <motion.div\r\n initial={{ height: 0, opacity: 0 }}\r\n animate={{ height: \"auto\", opacity: 1 }}\r\n exit={{ height: 0, opacity: 0 }}\r\n transition={{ duration: 0.2 }}\r\n >\r\n <div className=\"px-4 py-3 bg-white dark:bg-zinc-950\">{item.content}</div>\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default Accordion;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {useState}from'react';import {motion,AnimatePresence}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx,jsxs}from'react/jsx-runtime';function a(...i){return twMerge(clsx(i))}function h({items:i,className:l,allowMultiple:m=false}){let[n,r]=useState([]),d=t=>{r(m?e=>e.includes(t)?e.filter(u=>u!==t):[...e,t]:e=>e.includes(t)?[]:[t]);};return jsx("div",{className:a("w-full space-y-2",l),children:i.map((t,e)=>jsxs("div",{className:"border border-zinc-200 dark:border-zinc-800 rounded-lg overflow-hidden",children:[jsxs("button",{onClick:()=>d(e),className:"w-full px-4 py-3 flex items-center justify-between text-left bg-zinc-50 dark:bg-zinc-900 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors",children:[jsx("span",{className:"font-medium",children:t.title}),jsx(motion.svg,{animate:{rotate:n.includes(e)?180:0},transition:{duration:.2},className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]}),jsx(AnimatePresence,{children:n.includes(e)&&jsx(motion.div,{initial:{height:0,opacity:0},animate:{height:"auto",opacity:1},exit:{height:0,opacity:0},transition:{duration:.2},children:jsx("div",{className:"px-4 py-3 bg-white dark:bg-zinc-950",children:t.content})})})]},e))})}var A=h;export{h as Accordion,A as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/accordion/index.tsx"],"names":["cn","inputs","twMerge","clsx","Accordion","items","className","allowMultiple","openItems","setOpenItems","useState","toggleItem","index","prev","i","jsx","item","jsxs","motion","AnimatePresence","accordion_default"],"mappings":"sLAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCYO,SAASG,CAAAA,CAAU,CAAE,KAAA,CAAAC,CAAAA,CAAO,SAAA,CAAAC,EAAW,aAAA,CAAAC,CAAAA,CAAgB,KAAM,CAAA,CAAmB,CACrF,GAAM,CAACC,CAAAA,CAAWC,CAAY,CAAA,CAAIC,QAAAA,CAAmB,EAAE,EAEjDC,CAAAA,CAAcC,CAAAA,EAAkB,CAElCH,CAAAA,CADEF,CAAAA,CACYM,CAAAA,EACZA,EAAK,QAAA,CAASD,CAAK,CAAA,CAAIC,CAAAA,CAAK,MAAA,CAAQC,CAAAA,EAAMA,IAAMF,CAAK,CAAA,CAAI,CAAC,GAAGC,CAAAA,CAAMD,CAAK,EAG5DC,CAAAA,EAAUA,CAAAA,CAAK,QAAA,CAASD,CAAK,CAAA,CAAI,GAAK,CAACA,CAAK,CAF1D,EAIJ,CAAA,CAEA,OACEG,IAAC,KAAA,CAAA,CAAI,SAAA,CAAWf,CAAAA,CAAG,kBAAA,CAAoBM,CAAS,CAAA,CAC7C,SAAAD,CAAAA,CAAM,GAAA,CAAI,CAACW,CAAAA,CAAMJ,CAAAA,GAChBK,IAAAA,CAAC,OAEC,SAAA,CAAU,wEAAA,CAEV,QAAA,CAAA,CAAAA,IAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAMN,CAAAA,CAAWC,CAAK,CAAA,CAC/B,SAAA,CAAU,qJAAA,CAEV,QAAA,CAAA,CAAAG,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,aAAA,CAAe,QAAA,CAAAC,CAAAA,CAAK,KAAA,CAAM,EAC1CD,GAAAA,CAACG,MAAAA,CAAO,GAAA,CAAP,CACC,OAAA,CAAS,CAAE,OAAQV,CAAAA,CAAU,QAAA,CAASI,CAAK,CAAA,CAAI,GAAA,CAAM,CAAE,EACvD,UAAA,CAAY,CAAE,QAAA,CAAU,EAAI,CAAA,CAC5B,SAAA,CAAU,UACV,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,OAAA,CAAQ,WAAA,CAER,SAAAG,GAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,YAAa,CAAA,CAAG,CAAA,CAAE,gBAAA,CAAiB,CAAA,CACxF,CAAA,CAAA,CACF,CAAA,CACAA,IAACI,eAAAA,CAAA,CACE,QAAA,CAAAX,CAAAA,CAAU,QAAA,CAASI,CAAK,GACvBG,GAAAA,CAACG,MAAAA,CAAO,GAAA,CAAP,CACC,OAAA,CAAS,CAAE,OAAQ,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CACjC,OAAA,CAAS,CAAE,OAAQ,MAAA,CAAQ,OAAA,CAAS,CAAE,CAAA,CACtC,IAAA,CAAM,CAAE,OAAQ,CAAA,CAAG,OAAA,CAAS,CAAE,CAAA,CAC9B,UAAA,CAAY,CAAE,SAAU,EAAI,CAAA,CAE5B,QAAA,CAAAH,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,sCAAuC,QAAA,CAAAC,CAAAA,CAAK,OAAA,CAAQ,CAAA,CACrE,CAAA,CAEJ,CAAA,CAAA,CAAA,CA9BKJ,CA+BP,CACD,CAAA,CACH,CAEJ,CAEA,IAAOQ,CAAAA,CAAQhB","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, AnimatePresence } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface AccordionItem {\r\n title: string;\r\n content: React.ReactNode;\r\n}\r\n\r\ninterface AccordionProps {\r\n items: AccordionItem[];\r\n className?: string;\r\n allowMultiple?: boolean;\r\n}\r\n\r\nexport function Accordion({ items, className, allowMultiple = false }: AccordionProps) {\r\n const [openItems, setOpenItems] = useState<number[]>([]);\r\n\r\n const toggleItem = (index: number) => {\r\n if (allowMultiple) {\r\n setOpenItems((prev) =>\r\n prev.includes(index) ? prev.filter((i) => i !== index) : [...prev, index]\r\n );\r\n } else {\r\n setOpenItems((prev) => (prev.includes(index) ? [] : [index]));\r\n }\r\n };\r\n\r\n return (\r\n <div className={cn(\"w-full space-y-2\", className)}>\r\n {items.map((item, index) => (\r\n <div\r\n key={index}\r\n className=\"border border-zinc-200 dark:border-zinc-800 rounded-lg overflow-hidden\"\r\n >\r\n <button\r\n onClick={() => toggleItem(index)}\r\n className=\"w-full px-4 py-3 flex items-center justify-between text-left bg-zinc-50 dark:bg-zinc-900 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors\"\r\n >\r\n <span className=\"font-medium\">{item.title}</span>\r\n <motion.svg\r\n animate={{ rotate: openItems.includes(index) ? 180 : 0 }}\r\n transition={{ duration: 0.2 }}\r\n className=\"w-5 h-5\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\r\n </motion.svg>\r\n </button>\r\n <AnimatePresence>\r\n {openItems.includes(index) && (\r\n <motion.div\r\n initial={{ height: 0, opacity: 0 }}\r\n animate={{ height: \"auto\", opacity: 1 }}\r\n exit={{ height: 0, opacity: 0 }}\r\n transition={{ duration: 0.2 }}\r\n >\r\n <div className=\"px-4 py-3 bg-white dark:bg-zinc-950\">{item.content}</div>\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default Accordion;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var m=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 m__default=/*#__PURE__*/_interopDefault(m);function o(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function h({className:e="",close:r=false,children:l,onClose:s}){let[a,n]=m__default.default.useState(true);if(!a)return null;let i=()=>{n(false),s?.();};return jsxRuntime.jsx("div",{className:o("min-h-[400px] w-full flex items-center justify-center p-4",e),children:jsxRuntime.jsx("div",{className:"flex flex-col items-center w-full lg:max-w-[75%] gap-6",children:jsxRuntime.jsxs("div",{className:"relative flex items-center gap-3 rounded-lg border border-zinc-300 dark:border-zinc-700 bg-transparent px-4 py-3 shadow-sm w-full max-w-md transition-all duration-200",children:[l,r&&jsxRuntime.jsx("button",{onClick:i,className:"absolute top-2 right-2 text-gray-500 hover:text-gray-700 dark:text-white/60 dark:hover:text-white transition-colors",children:jsxRuntime.jsx("svg",{className:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]})})})}function N({children:e,className:r}){return jsxRuntime.jsx("div",{className:o("text-primary flex-shrink-0",r),children:e})}function b({children:e,className:r}){return jsxRuntime.jsx("span",{className:o("text-foreground font-medium text-sm flex-1",r),children:e})}function A({children:e,className:r}){return jsxRuntime.jsx("div",{className:o("flex items-center gap-2",r),children:e})}exports.Alert=h;exports.AlertIcon=N;exports.AlertTitle=b;exports.AlertToolbar=A;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/alert/index.tsx"],"names":["cn","inputs","twMerge","clsx","Alert","className","close","children","onClose","isVisible","setIsVisible","React","handleClose","jsx","jsxs","AlertIcon","AlertTitle","AlertToolbar"],"mappings":"yPAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,sBAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCsBO,SAASG,CAAAA,CAAM,CAAE,SAAA,CAAAC,CAAAA,CAAY,GAAI,KAAA,CAAAC,CAAAA,CAAQ,MAAO,QAAA,CAAAC,CAAAA,CAAU,QAAAC,CAAQ,CAAA,CAAe,CACtF,GAAM,CAACC,CAAAA,CAAWC,CAAY,EAAIC,kBAAAA,CAAM,QAAA,CAAS,IAAI,CAAA,CAErD,GAAI,CAACF,CAAAA,CAAW,OAAO,KAEvB,IAAMG,CAAAA,CAAc,IAAM,CACxBF,CAAAA,CAAa,KAAK,CAAA,CAClBF,CAAAA,KACF,CAAA,CAEA,OACEK,eAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,EAAG,2DAAA,CAA6DK,CAAS,EACvF,QAAA,CAAAQ,cAAAA,CAAC,OAAI,SAAA,CAAU,wDAAA,CACb,SAAAC,eAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,wKAAA,CACZ,QAAA,CAAA,CAAAP,EACAD,CAAAA,EACCO,cAAAA,CAAC,UACC,OAAA,CAASD,CAAAA,CACT,SAAA,CAAU,qHAAA,CAEV,SAAAC,cAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,SAAA,CAAU,IAAA,CAAK,OAAO,OAAA,CAAQ,WAAA,CAAY,OAAO,cAAA,CAC9D,QAAA,CAAAA,eAAC,MAAA,CAAA,CAAK,aAAA,CAAc,QAAQ,cAAA,CAAe,OAAA,CAAQ,YAAa,CAAA,CAAG,CAAA,CAAE,uBAAuB,CAAA,CAC9F,CAAA,CACF,GAEJ,CAAA,CACF,CAAA,CACF,CAEJ,CAEO,SAASE,EAAU,CAAE,QAAA,CAAAR,EAAU,SAAA,CAAAF,CAAU,EAAmB,CACjE,OAAOQ,eAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,EAAG,4BAAA,CAA8BK,CAAS,CAAA,CAAI,QAAA,CAAAE,EAAS,CAChF,CAEO,SAASS,CAAAA,CAAW,CAAE,SAAAT,CAAAA,CAAU,SAAA,CAAAF,CAAU,CAAA,CAAoB,CACnE,OAAOQ,cAAAA,CAAC,MAAA,CAAA,CAAK,UAAWb,CAAAA,CAAG,4CAAA,CAA8CK,CAAS,CAAA,CAAI,QAAA,CAAAE,EAAS,CACjG,CAEO,SAASU,CAAAA,CAAa,CAAE,SAAAV,CAAAA,CAAU,SAAA,CAAAF,CAAU,CAAA,CAAsB,CACvE,OAAOQ,cAAAA,CAAC,KAAA,CAAA,CAAI,UAAWb,CAAAA,CAAG,yBAAA,CAA2BK,CAAS,CAAA,CAAI,QAAA,CAAAE,EAAS,CAC7E","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 from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface AlertProps {\r\n className?: string;\r\n close?: boolean;\r\n children?: React.ReactNode;\r\n onClose?: () => void;\r\n}\r\n\r\ninterface AlertIconProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\ninterface AlertTitleProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\ninterface AlertToolbarProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function Alert({ className = \"\", close = false, children, onClose }: AlertProps) {\r\n const [isVisible, setIsVisible] = React.useState(true);\r\n\r\n if (!isVisible) return null;\r\n\r\n const handleClose = () => {\r\n setIsVisible(false);\r\n onClose?.();\r\n };\r\n\r\n return (\r\n <div className={cn(\"min-h-[400px] w-full flex items-center justify-center p-4\", className)}>\r\n <div className=\"flex flex-col items-center w-full lg:max-w-[75%] gap-6\">\r\n <div className=\"relative flex items-center gap-3 rounded-lg border border-zinc-300 dark:border-zinc-700 bg-transparent px-4 py-3 shadow-sm w-full max-w-md transition-all duration-200\">\r\n {children}\r\n {close && (\r\n <button\r\n onClick={handleClose}\r\n className=\"absolute top-2 right-2 text-gray-500 hover:text-gray-700 dark:text-white/60 dark:hover:text-white transition-colors\"\r\n >\r\n <svg className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport function AlertIcon({ children, className }: AlertIconProps) {\r\n return <div className={cn(\"text-primary flex-shrink-0\", className)}>{children}</div>;\r\n}\r\n\r\nexport function AlertTitle({ children, className }: AlertTitleProps) {\r\n return <span className={cn(\"text-foreground font-medium text-sm flex-1\", className)}>{children}</span>;\r\n}\r\n\r\nexport function AlertToolbar({ children, className }: AlertToolbarProps) {\r\n return <div className={cn(\"flex items-center gap-2\", className)}>{children}</div>;\r\n}\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import m from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx,jsxs}from'react/jsx-runtime';function o(...e){return twMerge(clsx(e))}function h({className:e="",close:r=false,children:l,onClose:s}){let[a,n]=m.useState(true);if(!a)return null;let i=()=>{n(false),s?.();};return jsx("div",{className:o("min-h-[400px] w-full flex items-center justify-center p-4",e),children:jsx("div",{className:"flex flex-col items-center w-full lg:max-w-[75%] gap-6",children:jsxs("div",{className:"relative flex items-center gap-3 rounded-lg border border-zinc-300 dark:border-zinc-700 bg-transparent px-4 py-3 shadow-sm w-full max-w-md transition-all duration-200",children:[l,r&&jsx("button",{onClick:i,className:"absolute top-2 right-2 text-gray-500 hover:text-gray-700 dark:text-white/60 dark:hover:text-white transition-colors",children:jsx("svg",{className:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]})})})}function N({children:e,className:r}){return jsx("div",{className:o("text-primary flex-shrink-0",r),children:e})}function b({children:e,className:r}){return jsx("span",{className:o("text-foreground font-medium text-sm flex-1",r),children:e})}function A({children:e,className:r}){return jsx("div",{className:o("flex items-center gap-2",r),children:e})}export{h as Alert,N as AlertIcon,b as AlertTitle,A as AlertToolbar};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/alert/index.tsx"],"names":["cn","inputs","twMerge","clsx","Alert","className","close","children","onClose","isVisible","setIsVisible","React","handleClose","jsx","jsxs","AlertIcon","AlertTitle","AlertToolbar"],"mappings":"2HAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,QAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCsBO,SAASG,CAAAA,CAAM,CAAE,SAAA,CAAAC,CAAAA,CAAY,GAAI,KAAA,CAAAC,CAAAA,CAAQ,MAAO,QAAA,CAAAC,CAAAA,CAAU,QAAAC,CAAQ,CAAA,CAAe,CACtF,GAAM,CAACC,CAAAA,CAAWC,CAAY,EAAIC,CAAAA,CAAM,QAAA,CAAS,IAAI,CAAA,CAErD,GAAI,CAACF,CAAAA,CAAW,OAAO,KAEvB,IAAMG,CAAAA,CAAc,IAAM,CACxBF,CAAAA,CAAa,KAAK,CAAA,CAClBF,CAAAA,KACF,CAAA,CAEA,OACEK,IAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,EAAG,2DAAA,CAA6DK,CAAS,EACvF,QAAA,CAAAQ,GAAAA,CAAC,OAAI,SAAA,CAAU,wDAAA,CACb,SAAAC,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,wKAAA,CACZ,QAAA,CAAA,CAAAP,EACAD,CAAAA,EACCO,GAAAA,CAAC,UACC,OAAA,CAASD,CAAAA,CACT,SAAA,CAAU,qHAAA,CAEV,SAAAC,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,SAAA,CAAU,IAAA,CAAK,OAAO,OAAA,CAAQ,WAAA,CAAY,OAAO,cAAA,CAC9D,QAAA,CAAAA,IAAC,MAAA,CAAA,CAAK,aAAA,CAAc,QAAQ,cAAA,CAAe,OAAA,CAAQ,YAAa,CAAA,CAAG,CAAA,CAAE,uBAAuB,CAAA,CAC9F,CAAA,CACF,GAEJ,CAAA,CACF,CAAA,CACF,CAEJ,CAEO,SAASE,EAAU,CAAE,QAAA,CAAAR,EAAU,SAAA,CAAAF,CAAU,EAAmB,CACjE,OAAOQ,IAAC,KAAA,CAAA,CAAI,SAAA,CAAWb,EAAG,4BAAA,CAA8BK,CAAS,CAAA,CAAI,QAAA,CAAAE,EAAS,CAChF,CAEO,SAASS,CAAAA,CAAW,CAAE,SAAAT,CAAAA,CAAU,SAAA,CAAAF,CAAU,CAAA,CAAoB,CACnE,OAAOQ,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAWb,CAAAA,CAAG,4CAAA,CAA8CK,CAAS,CAAA,CAAI,QAAA,CAAAE,EAAS,CACjG,CAEO,SAASU,CAAAA,CAAa,CAAE,SAAAV,CAAAA,CAAU,SAAA,CAAAF,CAAU,CAAA,CAAsB,CACvE,OAAOQ,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAWb,CAAAA,CAAG,yBAAA,CAA2BK,CAAS,CAAA,CAAI,QAAA,CAAAE,EAAS,CAC7E","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 from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface AlertProps {\r\n className?: string;\r\n close?: boolean;\r\n children?: React.ReactNode;\r\n onClose?: () => void;\r\n}\r\n\r\ninterface AlertIconProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\ninterface AlertTitleProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\ninterface AlertToolbarProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function Alert({ className = \"\", close = false, children, onClose }: AlertProps) {\r\n const [isVisible, setIsVisible] = React.useState(true);\r\n\r\n if (!isVisible) return null;\r\n\r\n const handleClose = () => {\r\n setIsVisible(false);\r\n onClose?.();\r\n };\r\n\r\n return (\r\n <div className={cn(\"min-h-[400px] w-full flex items-center justify-center p-4\", className)}>\r\n <div className=\"flex flex-col items-center w-full lg:max-w-[75%] gap-6\">\r\n <div className=\"relative flex items-center gap-3 rounded-lg border border-zinc-300 dark:border-zinc-700 bg-transparent px-4 py-3 shadow-sm w-full max-w-md transition-all duration-200\">\r\n {children}\r\n {close && (\r\n <button\r\n onClick={handleClose}\r\n className=\"absolute top-2 right-2 text-gray-500 hover:text-gray-700 dark:text-white/60 dark:hover:text-white transition-colors\"\r\n >\r\n <svg className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport function AlertIcon({ children, className }: AlertIconProps) {\r\n return <div className={cn(\"text-primary flex-shrink-0\", className)}>{children}</div>;\r\n}\r\n\r\nexport function AlertTitle({ children, className }: AlertTitleProps) {\r\n return <span className={cn(\"text-foreground font-medium text-sm flex-1\", className)}>{children}</span>;\r\n}\r\n\r\nexport function AlertToolbar({ children, className }: AlertToolbarProps) {\r\n return <div className={cn(\"flex items-center gap-2\", className)}>{children}</div>;\r\n}\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),framerMotion=require('framer-motion'),react=require('react'),jsxRuntime=require('react/jsx-runtime');function o(...n){return tailwindMerge.twMerge(clsx.clsx(n))}function w({className:n,particleCount:i=12,children:f,...b}){let[s,c]=react.useState(false),[t,y]=react.useState([]),e=framerMotion.useAnimation();react.useEffect(()=>{let a=Array.from({length:i},(r,v)=>({id:v,x:Math.random()*360-180,y:Math.random()*360-180}));y(a);},[i]);let l=react.useCallback(async()=>{c(true),await e.start({x:0,y:0,transition:{type:"spring",stiffness:50,damping:10}});},[e]),u=react.useCallback(async()=>{c(false),await e.start(a=>({x:t[a].x,y:t[a].y,transition:{type:"spring",stiffness:100,damping:15}}));},[e,t]);return jsxRuntime.jsxs("button",{className:o("min-w-40 relative touch-none px-4 py-2 rounded-md","bg-violet-100 dark:bg-violet-900","hover:bg-violet-200 dark:hover:bg-violet-800","text-violet-600 dark:text-violet-300","border border-violet-300 dark:border-violet-700","transition-all duration-300",n),onMouseEnter:l,onMouseLeave:u,onTouchStart:l,onTouchEnd:u,...b,children:[t.map((a,r)=>jsxRuntime.jsx(framerMotion.motion.div,{custom:r,initial:{x:t[r].x,y:t[r].y},animate:e,className:o("absolute w-1.5 h-1.5 rounded-full bg-violet-400 dark:bg-violet-300 transition-opacity duration-300",s?"opacity-100":"opacity-40")},r)),jsxRuntime.jsx("span",{className:"relative w-full flex items-center justify-center gap-2",children:f||(s?"Attracting":"Hover me")})]})}var T=w;exports.AttractButton=w;exports.default=T;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/attract-button/index.tsx"],"names":["cn","inputs","twMerge","clsx","AttractButton","className","particleCount","children","props","isAttracting","setIsAttracting","useState","particles","setParticles","particlesControl","useAnimation","useEffect","newParticles","_","i","handleInteractionStart","useCallback","handleInteractionEnd","jsxs","index","jsx","motion","attract_button_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 { cn } from \"../utils/cn\";\r\nimport { motion, useAnimation } from \"framer-motion\";\r\nimport { useEffect, useState, useCallback } from \"react\";\r\n\r\ninterface AttractButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n particleCount?: number;\r\n attractRadius?: number;\r\n children?: React.ReactNode;\r\n}\r\n\r\ninterface Particle {\r\n id: number;\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport function AttractButton({\r\n className,\r\n particleCount = 12,\r\n children,\r\n ...props\r\n}: AttractButtonProps) {\r\n const [isAttracting, setIsAttracting] = useState(false);\r\n const [particles, setParticles] = useState<Particle[]>([]);\r\n const particlesControl = useAnimation();\r\n\r\n useEffect(() => {\r\n const newParticles = Array.from({ length: particleCount }, (_, i) => ({\r\n id: i,\r\n x: Math.random() * 360 - 180,\r\n y: Math.random() * 360 - 180,\r\n }));\r\n setParticles(newParticles);\r\n }, [particleCount]);\r\n\r\n const handleInteractionStart = useCallback(async () => {\r\n setIsAttracting(true);\r\n await particlesControl.start({ x: 0, y: 0, transition: { type: \"spring\", stiffness: 50, damping: 10 } });\r\n }, [particlesControl]);\r\n\r\n const handleInteractionEnd = useCallback(async () => {\r\n setIsAttracting(false);\r\n await particlesControl.start((i) => ({\r\n x: particles[i].x,\r\n y: particles[i].y,\r\n transition: { type: \"spring\", stiffness: 100, damping: 15 },\r\n }));\r\n }, [particlesControl, particles]);\r\n\r\n return (\r\n <button\r\n className={cn(\r\n \"min-w-40 relative touch-none px-4 py-2 rounded-md\",\r\n \"bg-violet-100 dark:bg-violet-900\",\r\n \"hover:bg-violet-200 dark:hover:bg-violet-800\",\r\n \"text-violet-600 dark:text-violet-300\",\r\n \"border border-violet-300 dark:border-violet-700\",\r\n \"transition-all duration-300\",\r\n className\r\n )}\r\n onMouseEnter={handleInteractionStart}\r\n onMouseLeave={handleInteractionEnd}\r\n onTouchStart={handleInteractionStart}\r\n onTouchEnd={handleInteractionEnd}\r\n {...props}\r\n >\r\n {particles.map((_, index) => (\r\n <motion.div\r\n key={index}\r\n custom={index}\r\n initial={{ x: particles[index].x, y: particles[index].y }}\r\n animate={particlesControl}\r\n className={cn(\"absolute w-1.5 h-1.5 rounded-full bg-violet-400 dark:bg-violet-300 transition-opacity duration-300\", isAttracting ? \"opacity-100\" : \"opacity-40\")}\r\n />\r\n ))}\r\n <span className=\"relative w-full flex items-center justify-center gap-2\">\r\n {children || (isAttracting ? \"Attracting\" : \"Hover me\")}\r\n </span>\r\n </button>\r\n );\r\n}\r\n\r\nexport default AttractButton;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {useAnimation,motion}from'framer-motion';import {useState,useEffect,useCallback}from'react';import {jsxs,jsx}from'react/jsx-runtime';function o(...n){return twMerge(clsx(n))}function w({className:n,particleCount:i=12,children:f,...b}){let[s,c]=useState(false),[t,y]=useState([]),e=useAnimation();useEffect(()=>{let a=Array.from({length:i},(r,v)=>({id:v,x:Math.random()*360-180,y:Math.random()*360-180}));y(a);},[i]);let l=useCallback(async()=>{c(true),await e.start({x:0,y:0,transition:{type:"spring",stiffness:50,damping:10}});},[e]),u=useCallback(async()=>{c(false),await e.start(a=>({x:t[a].x,y:t[a].y,transition:{type:"spring",stiffness:100,damping:15}}));},[e,t]);return jsxs("button",{className:o("min-w-40 relative touch-none px-4 py-2 rounded-md","bg-violet-100 dark:bg-violet-900","hover:bg-violet-200 dark:hover:bg-violet-800","text-violet-600 dark:text-violet-300","border border-violet-300 dark:border-violet-700","transition-all duration-300",n),onMouseEnter:l,onMouseLeave:u,onTouchStart:l,onTouchEnd:u,...b,children:[t.map((a,r)=>jsx(motion.div,{custom:r,initial:{x:t[r].x,y:t[r].y},animate:e,className:o("absolute w-1.5 h-1.5 rounded-full bg-violet-400 dark:bg-violet-300 transition-opacity duration-300",s?"opacity-100":"opacity-40")},r)),jsx("span",{className:"relative w-full flex items-center justify-center gap-2",children:f||(s?"Attracting":"Hover me")})]})}var T=w;export{w as AttractButton,T as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/attract-button/index.tsx"],"names":["cn","inputs","twMerge","clsx","AttractButton","className","particleCount","children","props","isAttracting","setIsAttracting","useState","particles","setParticles","particlesControl","useAnimation","useEffect","newParticles","_","i","handleInteractionStart","useCallback","handleInteractionEnd","jsxs","index","jsx","motion","attract_button_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 { cn } from \"../utils/cn\";\r\nimport { motion, useAnimation } from \"framer-motion\";\r\nimport { useEffect, useState, useCallback } from \"react\";\r\n\r\ninterface AttractButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n particleCount?: number;\r\n attractRadius?: number;\r\n children?: React.ReactNode;\r\n}\r\n\r\ninterface Particle {\r\n id: number;\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport function AttractButton({\r\n className,\r\n particleCount = 12,\r\n children,\r\n ...props\r\n}: AttractButtonProps) {\r\n const [isAttracting, setIsAttracting] = useState(false);\r\n const [particles, setParticles] = useState<Particle[]>([]);\r\n const particlesControl = useAnimation();\r\n\r\n useEffect(() => {\r\n const newParticles = Array.from({ length: particleCount }, (_, i) => ({\r\n id: i,\r\n x: Math.random() * 360 - 180,\r\n y: Math.random() * 360 - 180,\r\n }));\r\n setParticles(newParticles);\r\n }, [particleCount]);\r\n\r\n const handleInteractionStart = useCallback(async () => {\r\n setIsAttracting(true);\r\n await particlesControl.start({ x: 0, y: 0, transition: { type: \"spring\", stiffness: 50, damping: 10 } });\r\n }, [particlesControl]);\r\n\r\n const handleInteractionEnd = useCallback(async () => {\r\n setIsAttracting(false);\r\n await particlesControl.start((i) => ({\r\n x: particles[i].x,\r\n y: particles[i].y,\r\n transition: { type: \"spring\", stiffness: 100, damping: 15 },\r\n }));\r\n }, [particlesControl, particles]);\r\n\r\n return (\r\n <button\r\n className={cn(\r\n \"min-w-40 relative touch-none px-4 py-2 rounded-md\",\r\n \"bg-violet-100 dark:bg-violet-900\",\r\n \"hover:bg-violet-200 dark:hover:bg-violet-800\",\r\n \"text-violet-600 dark:text-violet-300\",\r\n \"border border-violet-300 dark:border-violet-700\",\r\n \"transition-all duration-300\",\r\n className\r\n )}\r\n onMouseEnter={handleInteractionStart}\r\n onMouseLeave={handleInteractionEnd}\r\n onTouchStart={handleInteractionStart}\r\n onTouchEnd={handleInteractionEnd}\r\n {...props}\r\n >\r\n {particles.map((_, index) => (\r\n <motion.div\r\n key={index}\r\n custom={index}\r\n initial={{ x: particles[index].x, y: particles[index].y }}\r\n animate={particlesControl}\r\n className={cn(\"absolute w-1.5 h-1.5 rounded-full bg-violet-400 dark:bg-violet-300 transition-opacity duration-300\", isAttracting ? \"opacity-100\" : \"opacity-40\")}\r\n />\r\n ))}\r\n <span className=\"relative w-full flex items-center justify-center gap-2\">\r\n {children || (isAttracting ? \"Attracting\" : \"Hover me\")}\r\n </span>\r\n </button>\r\n );\r\n}\r\n\r\nexport default AttractButton;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function i(...t){return tailwindMerge.twMerge(clsx.clsx(t))}var f={sm:"w-8 h-8 text-xs",md:"w-10 h-10 text-sm",lg:"w-12 h-12 text-base",xl:"w-16 h-16 text-lg"};function p({src:t,alt:s="",fallback:l,size:r="md",className:a}){let n=l||s.split(" ").map(c=>c[0]).join("").slice(0,2).toUpperCase();return jsxRuntime.jsx("div",{className:i("relative inline-flex items-center justify-center rounded-full bg-zinc-200 dark:bg-zinc-800 overflow-hidden",f[r],a),children:t?jsxRuntime.jsx("img",{src:t,alt:s,className:"w-full h-full object-cover"}):jsxRuntime.jsx("span",{className:"font-medium text-zinc-600 dark:text-zinc-400",children:n})})}var v=p;exports.Avatar=p;exports.default=v;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/avatar/index.tsx"],"names":["cn","inputs","twMerge","clsx","sizes","Avatar","src","alt","fallback","size","className","initials","n","jsx","avatar_default"],"mappings":"+KAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCOA,IAAMG,CAAAA,CAAQ,CACZ,EAAA,CAAI,kBACJ,EAAA,CAAI,mBAAA,CACJ,GAAI,qBAAA,CACJ,EAAA,CAAI,mBACN,CAAA,CAEO,SAASC,CAAAA,CAAO,CACrB,GAAA,CAAAC,CAAAA,CACA,IAAAC,CAAAA,CAAM,EAAA,CACN,QAAA,CAAAC,CAAAA,CACA,IAAA,CAAAC,CAAAA,CAAO,KACP,SAAA,CAAAC,CACF,CAAA,CAAgB,CACd,IAAMC,CAAAA,CAAWH,GAAYD,CAAAA,CAAI,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAIK,GAAKA,CAAAA,CAAE,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,EAAE,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CAAE,WAAA,EAAY,CAE5F,OACEC,cAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,4GAAA,CACAI,CAAAA,CAAMK,CAAI,CAAA,CACVC,CACF,EAEC,QAAA,CAAAJ,CAAAA,CACCO,eAAC,KAAA,CAAA,CAAI,GAAA,CAAKP,CAAAA,CAAK,GAAA,CAAKC,CAAAA,CAAK,SAAA,CAAU,6BAA6B,CAAA,CAEhEM,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,8CAAA,CACb,QAAA,CAAAF,EACH,CAAA,CAEJ,CAEJ,CAEA,IAAOG,CAAAA,CAAQT","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 { cn } from \"../utils/cn\";\r\n\r\ninterface AvatarProps {\r\n src?: string;\r\n alt?: string;\r\n fallback?: string;\r\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n className?: string;\r\n}\r\n\r\nconst sizes = {\r\n sm: \"w-8 h-8 text-xs\",\r\n md: \"w-10 h-10 text-sm\",\r\n lg: \"w-12 h-12 text-base\",\r\n xl: \"w-16 h-16 text-lg\",\r\n};\r\n\r\nexport function Avatar({ \r\n src, \r\n alt = \"\", \r\n fallback,\r\n size = \"md\",\r\n className \r\n}: AvatarProps) {\r\n const initials = fallback || alt.split(\" \").map(n => n[0]).join(\"\").slice(0, 2).toUpperCase();\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"relative inline-flex items-center justify-center rounded-full bg-zinc-200 dark:bg-zinc-800 overflow-hidden\",\r\n sizes[size],\r\n className\r\n )}\r\n >\r\n {src ? (\r\n <img src={src} alt={alt} className=\"w-full h-full object-cover\" />\r\n ) : (\r\n <span className=\"font-medium text-zinc-600 dark:text-zinc-400\">\r\n {initials}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport default Avatar;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function i(...t){return twMerge(clsx(t))}var f={sm:"w-8 h-8 text-xs",md:"w-10 h-10 text-sm",lg:"w-12 h-12 text-base",xl:"w-16 h-16 text-lg"};function p({src:t,alt:s="",fallback:l,size:r="md",className:a}){let n=l||s.split(" ").map(c=>c[0]).join("").slice(0,2).toUpperCase();return jsx("div",{className:i("relative inline-flex items-center justify-center rounded-full bg-zinc-200 dark:bg-zinc-800 overflow-hidden",f[r],a),children:t?jsx("img",{src:t,alt:s,className:"w-full h-full object-cover"}):jsx("span",{className:"font-medium text-zinc-600 dark:text-zinc-400",children:n})})}var v=p;export{p as Avatar,v as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/avatar/index.tsx"],"names":["cn","inputs","twMerge","clsx","sizes","Avatar","src","alt","fallback","size","className","initials","n","jsx","avatar_default"],"mappings":"iGAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCOA,IAAMG,CAAAA,CAAQ,CACZ,EAAA,CAAI,kBACJ,EAAA,CAAI,mBAAA,CACJ,GAAI,qBAAA,CACJ,EAAA,CAAI,mBACN,CAAA,CAEO,SAASC,CAAAA,CAAO,CACrB,GAAA,CAAAC,CAAAA,CACA,IAAAC,CAAAA,CAAM,EAAA,CACN,QAAA,CAAAC,CAAAA,CACA,IAAA,CAAAC,CAAAA,CAAO,KACP,SAAA,CAAAC,CACF,CAAA,CAAgB,CACd,IAAMC,CAAAA,CAAWH,GAAYD,CAAAA,CAAI,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAIK,GAAKA,CAAAA,CAAE,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,EAAE,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CAAE,WAAA,EAAY,CAE5F,OACEC,GAAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAWb,CAAAA,CACT,4GAAA,CACAI,CAAAA,CAAMK,CAAI,CAAA,CACVC,CACF,EAEC,QAAA,CAAAJ,CAAAA,CACCO,IAAC,KAAA,CAAA,CAAI,GAAA,CAAKP,CAAAA,CAAK,GAAA,CAAKC,CAAAA,CAAK,SAAA,CAAU,6BAA6B,CAAA,CAEhEM,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,8CAAA,CACb,QAAA,CAAAF,EACH,CAAA,CAEJ,CAEJ,CAEA,IAAOG,CAAAA,CAAQT","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 { cn } from \"../utils/cn\";\r\n\r\ninterface AvatarProps {\r\n src?: string;\r\n alt?: string;\r\n fallback?: string;\r\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n className?: string;\r\n}\r\n\r\nconst sizes = {\r\n sm: \"w-8 h-8 text-xs\",\r\n md: \"w-10 h-10 text-sm\",\r\n lg: \"w-12 h-12 text-base\",\r\n xl: \"w-16 h-16 text-lg\",\r\n};\r\n\r\nexport function Avatar({ \r\n src, \r\n alt = \"\", \r\n fallback,\r\n size = \"md\",\r\n className \r\n}: AvatarProps) {\r\n const initials = fallback || alt.split(\" \").map(n => n[0]).join(\"\").slice(0, 2).toUpperCase();\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"relative inline-flex items-center justify-center rounded-full bg-zinc-200 dark:bg-zinc-800 overflow-hidden\",\r\n sizes[size],\r\n className\r\n )}\r\n >\r\n {src ? (\r\n <img src={src} alt={alt} className=\"w-full h-full object-cover\" />\r\n ) : (\r\n <span className=\"font-medium text-zinc-600 dark:text-zinc-400\">\r\n {initials}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport default Avatar;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function t(...e){return tailwindMerge.twMerge(clsx.clsx(e))}var l={default:"bg-zinc-100 text-zinc-900 dark:bg-zinc-800 dark:text-zinc-100",success:"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400",warning:"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400",danger:"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400",info:"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"},g={sm:"px-2 py-0.5 text-xs",md:"px-2.5 py-1 text-sm",lg:"px-3 py-1.5 text-base"};function i({children:e,variant:r="default",size:a="md",className:n}){return jsxRuntime.jsx("span",{className:t("inline-flex items-center font-medium rounded-full",l[r],g[a],n),children:e})}var m=i;exports.Badge=i;exports.default=m;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/badge/index.tsx"],"names":["cn","inputs","twMerge","clsx","variants","sizes","Badge","children","variant","size","className","jsx","badge_default"],"mappings":"+KAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCMA,IAAMG,CAAAA,CAAW,CACf,OAAA,CAAS,gEACT,OAAA,CAAS,sEAAA,CACT,OAAA,CAAS,0EAAA,CACT,OAAQ,8DAAA,CACR,IAAA,CAAM,kEACR,CAAA,CAEMC,CAAAA,CAAQ,CACZ,EAAA,CAAI,qBAAA,CACJ,EAAA,CAAI,qBAAA,CACJ,GAAI,uBACN,CAAA,CAEO,SAASC,CAAAA,CAAM,CACpB,QAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CAAU,UACV,IAAA,CAAAC,CAAAA,CAAO,IAAA,CACP,SAAA,CAAAC,CACF,CAAA,CAAe,CACb,OACEC,cAAAA,CAAC,QACC,SAAA,CAAWX,CAAAA,CACT,mDAAA,CACAI,CAAAA,CAASI,CAAO,CAAA,CAChBH,CAAAA,CAAMI,CAAI,CAAA,CACVC,CACF,CAAA,CAEC,QAAA,CAAAH,EACH,CAEJ,KAEOK,CAAAA,CAAQN","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 { cn } from \"../utils/cn\";\r\n\r\ninterface BadgeProps {\r\n children: React.ReactNode;\r\n variant?: \"default\" | \"success\" | \"warning\" | \"danger\" | \"info\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n className?: string;\r\n}\r\n\r\nconst variants = {\r\n default: \"bg-zinc-100 text-zinc-900 dark:bg-zinc-800 dark:text-zinc-100\",\r\n success: \"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400\",\r\n warning: \"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400\",\r\n danger: \"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400\",\r\n info: \"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400\",\r\n};\r\n\r\nconst sizes = {\r\n sm: \"px-2 py-0.5 text-xs\",\r\n md: \"px-2.5 py-1 text-sm\",\r\n lg: \"px-3 py-1.5 text-base\",\r\n};\r\n\r\nexport function Badge({ \r\n children, \r\n variant = \"default\", \r\n size = \"md\",\r\n className \r\n}: BadgeProps) {\r\n return (\r\n <span\r\n className={cn(\r\n \"inline-flex items-center font-medium rounded-full\",\r\n variants[variant],\r\n sizes[size],\r\n className\r\n )}\r\n >\r\n {children}\r\n </span>\r\n );\r\n}\r\n\r\nexport default Badge;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function t(...e){return twMerge(clsx(e))}var l={default:"bg-zinc-100 text-zinc-900 dark:bg-zinc-800 dark:text-zinc-100",success:"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400",warning:"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400",danger:"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400",info:"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"},g={sm:"px-2 py-0.5 text-xs",md:"px-2.5 py-1 text-sm",lg:"px-3 py-1.5 text-base"};function i({children:e,variant:r="default",size:a="md",className:n}){return jsx("span",{className:t("inline-flex items-center font-medium rounded-full",l[r],g[a],n),children:e})}var m=i;export{i as Badge,m as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/badge/index.tsx"],"names":["cn","inputs","twMerge","clsx","variants","sizes","Badge","children","variant","size","className","jsx","badge_default"],"mappings":"iGAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCMA,IAAMG,CAAAA,CAAW,CACf,OAAA,CAAS,gEACT,OAAA,CAAS,sEAAA,CACT,OAAA,CAAS,0EAAA,CACT,OAAQ,8DAAA,CACR,IAAA,CAAM,kEACR,CAAA,CAEMC,CAAAA,CAAQ,CACZ,EAAA,CAAI,qBAAA,CACJ,EAAA,CAAI,qBAAA,CACJ,GAAI,uBACN,CAAA,CAEO,SAASC,CAAAA,CAAM,CACpB,QAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CAAU,UACV,IAAA,CAAAC,CAAAA,CAAO,IAAA,CACP,SAAA,CAAAC,CACF,CAAA,CAAe,CACb,OACEC,GAAAA,CAAC,QACC,SAAA,CAAWX,CAAAA,CACT,mDAAA,CACAI,CAAAA,CAASI,CAAO,CAAA,CAChBH,CAAAA,CAAMI,CAAI,CAAA,CACVC,CACF,CAAA,CAEC,QAAA,CAAAH,EACH,CAEJ,KAEOK,CAAAA,CAAQN","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 { cn } from \"../utils/cn\";\r\n\r\ninterface BadgeProps {\r\n children: React.ReactNode;\r\n variant?: \"default\" | \"success\" | \"warning\" | \"danger\" | \"info\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n className?: string;\r\n}\r\n\r\nconst variants = {\r\n default: \"bg-zinc-100 text-zinc-900 dark:bg-zinc-800 dark:text-zinc-100\",\r\n success: \"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400\",\r\n warning: \"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400\",\r\n danger: \"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400\",\r\n info: \"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400\",\r\n};\r\n\r\nconst sizes = {\r\n sm: \"px-2 py-0.5 text-xs\",\r\n md: \"px-2.5 py-1 text-sm\",\r\n lg: \"px-3 py-1.5 text-base\",\r\n};\r\n\r\nexport function Badge({ \r\n children, \r\n variant = \"default\", \r\n size = \"md\",\r\n className \r\n}: BadgeProps) {\r\n return (\r\n <span\r\n className={cn(\r\n \"inline-flex items-center font-medium rounded-full\",\r\n variants[variant],\r\n sizes[size],\r\n className\r\n )}\r\n >\r\n {children}\r\n </span>\r\n );\r\n}\r\n\r\nexport default Badge;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function t(...r){return tailwindMerge.twMerge(clsx.clsx(r))}function i({children:r,className:e,hover:o=false}){return jsxRuntime.jsx("div",{className:t("rounded-xl p-6","bg-white dark:bg-zinc-900","border border-zinc-200 dark:border-zinc-800",o&&"transition-all duration-200 hover:shadow-lg hover:-translate-y-1",e),children:r})}function C({children:r,className:e}){return jsxRuntime.jsx("div",{className:t("mb-4",e),children:r})}function m({children:r,className:e}){return jsxRuntime.jsx("h3",{className:t("text-lg font-semibold",e),children:r})}function f({children:r,className:e}){return jsxRuntime.jsx("p",{className:t("text-sm text-zinc-500 dark:text-zinc-400",e),children:r})}function u({children:r,className:e}){return jsxRuntime.jsx("div",{className:t("",e),children:r})}function N({children:r,className:e}){return jsxRuntime.jsx("div",{className:t("mt-4 pt-4 border-t border-zinc-200 dark:border-zinc-800",e),children:r})}var h=i;exports.Card=i;exports.CardContent=u;exports.CardDescription=f;exports.CardFooter=N;exports.CardHeader=C;exports.CardTitle=m;exports.default=h;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/card/index.tsx"],"names":["cn","inputs","twMerge","clsx","Card","children","className","hover","jsx","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","card_default"],"mappings":"+KAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,CAAAA,CAAK,CAAE,SAAAC,CAAAA,CAAU,SAAA,CAAAC,CAAAA,CAAW,KAAA,CAAAC,EAAQ,KAAM,CAAA,CAAc,CACtE,OACEC,eAAC,KAAA,CAAA,CACC,SAAA,CAAWR,CAAAA,CACT,gBAAA,CACA,4BACA,6CAAA,CACAO,CAAAA,EAAS,kEAAA,CACTD,CACF,EAEC,QAAA,CAAAD,CAAAA,CACH,CAEJ,CAOO,SAASI,CAAAA,CAAW,CAAE,QAAA,CAAAJ,CAAAA,CAAU,UAAAC,CAAU,CAAA,CAAoB,CACnE,OAAOE,eAAC,KAAA,CAAA,CAAI,SAAA,CAAWR,CAAAA,CAAG,MAAA,CAAQM,CAAS,CAAA,CAAI,QAAA,CAAAD,CAAAA,CAAS,CAC1D,CAOO,SAASK,CAAAA,CAAU,CAAE,QAAA,CAAAL,EAAU,SAAA,CAAAC,CAAU,CAAA,CAAmB,CACjE,OAAOE,cAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAWR,CAAAA,CAAG,wBAAyBM,CAAS,CAAA,CAAI,QAAA,CAAAD,CAAAA,CAAS,CAC1E,CAOO,SAASM,CAAAA,CAAgB,CAAE,SAAAN,CAAAA,CAAU,SAAA,CAAAC,CAAU,CAAA,CAAyB,CAC7E,OAAOE,cAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAWR,EAAG,0CAAA,CAA4CM,CAAS,CAAA,CAAI,QAAA,CAAAD,EAAS,CAC5F,CAOO,SAASO,CAAAA,CAAY,CAAE,QAAA,CAAAP,CAAAA,CAAU,SAAA,CAAAC,CAAU,EAAqB,CACrE,OAAOE,cAAAA,CAAC,KAAA,CAAA,CAAI,UAAWR,CAAAA,CAAG,EAAA,CAAIM,CAAS,CAAA,CAAI,SAAAD,CAAAA,CAAS,CACtD,CAOO,SAASQ,EAAW,CAAE,QAAA,CAAAR,CAAAA,CAAU,SAAA,CAAAC,CAAU,CAAA,CAAoB,CACnE,OAAOE,cAAAA,CAAC,OAAI,SAAA,CAAWR,CAAAA,CAAG,yDAAA,CAA2DM,CAAS,EAAI,QAAA,CAAAD,CAAAA,CAAS,CAC7G,KAEOS,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 { cn } from \"../utils/cn\";\r\n\r\ninterface CardProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n hover?: boolean;\r\n}\r\n\r\nexport function Card({ children, className, hover = false }: CardProps) {\r\n return (\r\n <div\r\n className={cn(\r\n \"rounded-xl p-6\",\r\n \"bg-white dark:bg-zinc-900\",\r\n \"border border-zinc-200 dark:border-zinc-800\",\r\n hover && \"transition-all duration-200 hover:shadow-lg hover:-translate-y-1\",\r\n className\r\n )}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\ninterface CardHeaderProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function CardHeader({ children, className }: CardHeaderProps) {\r\n return <div className={cn(\"mb-4\", className)}>{children}</div>;\r\n}\r\n\r\ninterface CardTitleProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function CardTitle({ children, className }: CardTitleProps) {\r\n return <h3 className={cn(\"text-lg font-semibold\", className)}>{children}</h3>;\r\n}\r\n\r\ninterface CardDescriptionProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function CardDescription({ children, className }: CardDescriptionProps) {\r\n return <p className={cn(\"text-sm text-zinc-500 dark:text-zinc-400\", className)}>{children}</p>;\r\n}\r\n\r\ninterface CardContentProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function CardContent({ children, className }: CardContentProps) {\r\n return <div className={cn(\"\", className)}>{children}</div>;\r\n}\r\n\r\ninterface CardFooterProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function CardFooter({ children, className }: CardFooterProps) {\r\n return <div className={cn(\"mt-4 pt-4 border-t border-zinc-200 dark:border-zinc-800\", className)}>{children}</div>;\r\n}\r\n\r\nexport default Card;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function t(...r){return twMerge(clsx(r))}function i({children:r,className:e,hover:o=false}){return jsx("div",{className:t("rounded-xl p-6","bg-white dark:bg-zinc-900","border border-zinc-200 dark:border-zinc-800",o&&"transition-all duration-200 hover:shadow-lg hover:-translate-y-1",e),children:r})}function C({children:r,className:e}){return jsx("div",{className:t("mb-4",e),children:r})}function m({children:r,className:e}){return jsx("h3",{className:t("text-lg font-semibold",e),children:r})}function f({children:r,className:e}){return jsx("p",{className:t("text-sm text-zinc-500 dark:text-zinc-400",e),children:r})}function u({children:r,className:e}){return jsx("div",{className:t("",e),children:r})}function N({children:r,className:e}){return jsx("div",{className:t("mt-4 pt-4 border-t border-zinc-200 dark:border-zinc-800",e),children:r})}var h=i;export{i as Card,u as CardContent,f as CardDescription,N as CardFooter,C as CardHeader,m as CardTitle,h as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/card/index.tsx"],"names":["cn","inputs","twMerge","clsx","Card","children","className","hover","jsx","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","card_default"],"mappings":"iGAGO,SAASA,CAAAA,CAAAA,GAAMC,EAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCKO,SAASG,CAAAA,CAAK,CAAE,SAAAC,CAAAA,CAAU,SAAA,CAAAC,CAAAA,CAAW,KAAA,CAAAC,EAAQ,KAAM,CAAA,CAAc,CACtE,OACEC,IAAC,KAAA,CAAA,CACC,SAAA,CAAWR,CAAAA,CACT,gBAAA,CACA,4BACA,6CAAA,CACAO,CAAAA,EAAS,kEAAA,CACTD,CACF,EAEC,QAAA,CAAAD,CAAAA,CACH,CAEJ,CAOO,SAASI,CAAAA,CAAW,CAAE,QAAA,CAAAJ,CAAAA,CAAU,UAAAC,CAAU,CAAA,CAAoB,CACnE,OAAOE,IAAC,KAAA,CAAA,CAAI,SAAA,CAAWR,CAAAA,CAAG,MAAA,CAAQM,CAAS,CAAA,CAAI,QAAA,CAAAD,CAAAA,CAAS,CAC1D,CAOO,SAASK,CAAAA,CAAU,CAAE,QAAA,CAAAL,EAAU,SAAA,CAAAC,CAAU,CAAA,CAAmB,CACjE,OAAOE,GAAAA,CAAC,IAAA,CAAA,CAAG,SAAA,CAAWR,CAAAA,CAAG,wBAAyBM,CAAS,CAAA,CAAI,QAAA,CAAAD,CAAAA,CAAS,CAC1E,CAOO,SAASM,CAAAA,CAAgB,CAAE,SAAAN,CAAAA,CAAU,SAAA,CAAAC,CAAU,CAAA,CAAyB,CAC7E,OAAOE,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAWR,EAAG,0CAAA,CAA4CM,CAAS,CAAA,CAAI,QAAA,CAAAD,EAAS,CAC5F,CAOO,SAASO,CAAAA,CAAY,CAAE,QAAA,CAAAP,CAAAA,CAAU,SAAA,CAAAC,CAAU,EAAqB,CACrE,OAAOE,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAWR,CAAAA,CAAG,EAAA,CAAIM,CAAS,CAAA,CAAI,SAAAD,CAAAA,CAAS,CACtD,CAOO,SAASQ,EAAW,CAAE,QAAA,CAAAR,CAAAA,CAAU,SAAA,CAAAC,CAAU,CAAA,CAAoB,CACnE,OAAOE,GAAAA,CAAC,OAAI,SAAA,CAAWR,CAAAA,CAAG,yDAAA,CAA2DM,CAAS,EAAI,QAAA,CAAAD,CAAAA,CAAS,CAC7G,KAEOS,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 { cn } from \"../utils/cn\";\r\n\r\ninterface CardProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n hover?: boolean;\r\n}\r\n\r\nexport function Card({ children, className, hover = false }: CardProps) {\r\n return (\r\n <div\r\n className={cn(\r\n \"rounded-xl p-6\",\r\n \"bg-white dark:bg-zinc-900\",\r\n \"border border-zinc-200 dark:border-zinc-800\",\r\n hover && \"transition-all duration-200 hover:shadow-lg hover:-translate-y-1\",\r\n className\r\n )}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\ninterface CardHeaderProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function CardHeader({ children, className }: CardHeaderProps) {\r\n return <div className={cn(\"mb-4\", className)}>{children}</div>;\r\n}\r\n\r\ninterface CardTitleProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function CardTitle({ children, className }: CardTitleProps) {\r\n return <h3 className={cn(\"text-lg font-semibold\", className)}>{children}</h3>;\r\n}\r\n\r\ninterface CardDescriptionProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function CardDescription({ children, className }: CardDescriptionProps) {\r\n return <p className={cn(\"text-sm text-zinc-500 dark:text-zinc-400\", className)}>{children}</p>;\r\n}\r\n\r\ninterface CardContentProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function CardContent({ children, className }: CardContentProps) {\r\n return <div className={cn(\"\", className)}>{children}</div>;\r\n}\r\n\r\ninterface CardFooterProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function CardFooter({ children, className }: CardFooterProps) {\r\n return <div className={cn(\"mt-4 pt-4 border-t border-zinc-200 dark:border-zinc-800\", className)}>{children}</div>;\r\n}\r\n\r\nexport default Card;\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 b({checked:e=false,onChange:a,label:r,disabled:n=false,className:s}){return jsxRuntime.jsxs("label",{className:t("inline-flex items-center gap-2 cursor-pointer",n&&"opacity-50 cursor-not-allowed",s),children:[jsxRuntime.jsx("button",{type:"button",role:"checkbox","aria-checked":e,disabled:n,onClick:()=>a?.(!e),className:t("w-5 h-5 rounded border-2 flex items-center justify-center transition-colors",e?"bg-blue-500 border-blue-500":"bg-transparent border-zinc-300 dark:border-zinc-600"),children:jsxRuntime.jsx(framerMotion.motion.svg,{initial:false,animate:{scale:e?1:0,opacity:e?1:0},transition:{duration:.15},className:"w-3 h-3 text-white",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:3,d:"M5 13l4 4L19 7"})})}),r&&jsxRuntime.jsx("span",{className:"text-sm",children:r})]})}var g=b;exports.Checkbox=b;exports.default=g;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/checkbox/index.tsx"],"names":["cn","inputs","twMerge","clsx","Checkbox","checked","onChange","label","disabled","className","jsxs","jsx","motion","checkbox_default"],"mappings":"qNAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCQO,SAASG,EAAS,CAAE,OAAA,CAAAC,CAAAA,CAAU,KAAA,CAAO,QAAA,CAAAC,CAAAA,CAAU,KAAA,CAAAC,CAAAA,CAAO,QAAA,CAAAC,CAAAA,CAAW,KAAA,CAAO,SAAA,CAAAC,CAAU,CAAA,CAAkB,CACzG,OACEC,gBAAC,OAAA,CAAA,CACC,SAAA,CAAWV,CAAAA,CACT,+CAAA,CACAQ,CAAAA,EAAY,+BAAA,CACZC,CACF,CAAA,CAEA,UAAAE,cAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,IAAA,CAAK,UAAA,CACL,cAAA,CAAcN,CAAAA,CACd,SAAUG,CAAAA,CACV,OAAA,CAAS,IAAMF,CAAAA,GAAW,CAACD,CAAO,CAAA,CAClC,SAAA,CAAWL,CAAAA,CACT,6EAAA,CACAK,CAAAA,CACI,6BAAA,CACA,qDACN,CAAA,CAEA,QAAA,CAAAM,cAAAA,CAACC,oBAAO,GAAA,CAAP,CACC,OAAA,CAAS,KAAA,CACT,OAAA,CAAS,CAAE,KAAA,CAAOP,CAAAA,CAAU,EAAI,CAAA,CAAG,OAAA,CAASA,CAAAA,CAAU,CAAA,CAAI,CAAE,CAAA,CAC5D,UAAA,CAAY,CAAE,SAAU,GAAK,CAAA,CAC7B,SAAA,CAAU,oBAAA,CACV,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,OAAA,CAAQ,WAAA,CAER,QAAA,CAAAM,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,QAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,gBAAA,CAAiB,CAAA,CACxF,CAAA,CACF,CAAA,CACCJ,CAAAA,EAASI,eAAC,MAAA,CAAA,CAAK,SAAA,CAAU,SAAA,CAAW,QAAA,CAAAJ,CAAAA,CAAM,CAAA,CAAA,CAC7C,CAEJ,KAEOM,CAAAA,CAAQT","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 CheckboxProps {\r\n checked?: boolean;\r\n onChange?: (checked: boolean) => void;\r\n label?: string;\r\n disabled?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport function Checkbox({ checked = false, onChange, label, disabled = false, className }: CheckboxProps) {\r\n return (\r\n <label\r\n className={cn(\r\n \"inline-flex items-center gap-2 cursor-pointer\",\r\n disabled && \"opacity-50 cursor-not-allowed\",\r\n className\r\n )}\r\n >\r\n <button\r\n type=\"button\"\r\n role=\"checkbox\"\r\n aria-checked={checked}\r\n disabled={disabled}\r\n onClick={() => onChange?.(!checked)}\r\n className={cn(\r\n \"w-5 h-5 rounded border-2 flex items-center justify-center transition-colors\",\r\n checked\r\n ? \"bg-blue-500 border-blue-500\"\r\n : \"bg-transparent border-zinc-300 dark:border-zinc-600\"\r\n )}\r\n >\r\n <motion.svg\r\n initial={false}\r\n animate={{ scale: checked ? 1 : 0, opacity: checked ? 1 : 0 }}\r\n transition={{ duration: 0.15 }}\r\n className=\"w-3 h-3 text-white\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={3} d=\"M5 13l4 4L19 7\" />\r\n </motion.svg>\r\n </button>\r\n {label && <span className=\"text-sm\">{label}</span>}\r\n </label>\r\n );\r\n}\r\n\r\nexport default Checkbox;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function t(...e){return twMerge(clsx(e))}function b({checked:e=false,onChange:a,label:r,disabled:n=false,className:s}){return jsxs("label",{className:t("inline-flex items-center gap-2 cursor-pointer",n&&"opacity-50 cursor-not-allowed",s),children:[jsx("button",{type:"button",role:"checkbox","aria-checked":e,disabled:n,onClick:()=>a?.(!e),className:t("w-5 h-5 rounded border-2 flex items-center justify-center transition-colors",e?"bg-blue-500 border-blue-500":"bg-transparent border-zinc-300 dark:border-zinc-600"),children:jsx(motion.svg,{initial:false,animate:{scale:e?1:0,opacity:e?1:0},transition:{duration:.15},className:"w-3 h-3 text-white",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:3,d:"M5 13l4 4L19 7"})})}),r&&jsx("span",{className:"text-sm",children:r})]})}var g=b;export{b as Checkbox,g as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/checkbox/index.tsx"],"names":["cn","inputs","twMerge","clsx","Checkbox","checked","onChange","label","disabled","className","jsxs","jsx","motion","checkbox_default"],"mappings":"yIAGO,SAASA,KAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCQO,SAASG,EAAS,CAAE,OAAA,CAAAC,CAAAA,CAAU,KAAA,CAAO,QAAA,CAAAC,CAAAA,CAAU,KAAA,CAAAC,CAAAA,CAAO,QAAA,CAAAC,CAAAA,CAAW,KAAA,CAAO,SAAA,CAAAC,CAAU,CAAA,CAAkB,CACzG,OACEC,KAAC,OAAA,CAAA,CACC,SAAA,CAAWV,CAAAA,CACT,+CAAA,CACAQ,CAAAA,EAAY,+BAAA,CACZC,CACF,CAAA,CAEA,UAAAE,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,IAAA,CAAK,UAAA,CACL,cAAA,CAAcN,CAAAA,CACd,SAAUG,CAAAA,CACV,OAAA,CAAS,IAAMF,CAAAA,GAAW,CAACD,CAAO,CAAA,CAClC,SAAA,CAAWL,CAAAA,CACT,6EAAA,CACAK,CAAAA,CACI,6BAAA,CACA,qDACN,CAAA,CAEA,QAAA,CAAAM,GAAAA,CAACC,OAAO,GAAA,CAAP,CACC,OAAA,CAAS,KAAA,CACT,OAAA,CAAS,CAAE,KAAA,CAAOP,CAAAA,CAAU,EAAI,CAAA,CAAG,OAAA,CAASA,CAAAA,CAAU,CAAA,CAAI,CAAE,CAAA,CAC5D,UAAA,CAAY,CAAE,SAAU,GAAK,CAAA,CAC7B,SAAA,CAAU,oBAAA,CACV,IAAA,CAAK,MAAA,CACL,MAAA,CAAO,cAAA,CACP,OAAA,CAAQ,WAAA,CAER,QAAA,CAAAM,GAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,QAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,gBAAA,CAAiB,CAAA,CACxF,CAAA,CACF,CAAA,CACCJ,CAAAA,EAASI,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,SAAA,CAAW,QAAA,CAAAJ,CAAAA,CAAM,CAAA,CAAA,CAC7C,CAEJ,KAEOM,CAAAA,CAAQT","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 CheckboxProps {\r\n checked?: boolean;\r\n onChange?: (checked: boolean) => void;\r\n label?: string;\r\n disabled?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport function Checkbox({ checked = false, onChange, label, disabled = false, className }: CheckboxProps) {\r\n return (\r\n <label\r\n className={cn(\r\n \"inline-flex items-center gap-2 cursor-pointer\",\r\n disabled && \"opacity-50 cursor-not-allowed\",\r\n className\r\n )}\r\n >\r\n <button\r\n type=\"button\"\r\n role=\"checkbox\"\r\n aria-checked={checked}\r\n disabled={disabled}\r\n onClick={() => onChange?.(!checked)}\r\n className={cn(\r\n \"w-5 h-5 rounded border-2 flex items-center justify-center transition-colors\",\r\n checked\r\n ? \"bg-blue-500 border-blue-500\"\r\n : \"bg-transparent border-zinc-300 dark:border-zinc-600\"\r\n )}\r\n >\r\n <motion.svg\r\n initial={false}\r\n animate={{ scale: checked ? 1 : 0, opacity: checked ? 1 : 0 }}\r\n transition={{ duration: 0.15 }}\r\n className=\"w-3 h-3 text-white\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n viewBox=\"0 0 24 24\"\r\n >\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={3} d=\"M5 13l4 4L19 7\" />\r\n </motion.svg>\r\n </button>\r\n {label && <span className=\"text-sm\">{label}</span>}\r\n </label>\r\n );\r\n}\r\n\r\nexport default Checkbox;\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 f(...n){return tailwindMerge.twMerge(clsx.clsx(n))}function C({text:n,spinDuration:s=20,onHover:i="speedUp",className:u=""}){let l=Array.from(n),a=framerMotion.useAnimation(),r=framerMotion.useMotionValue(0);react.useEffect(()=>{let t=r.get();a.start({rotate:t+360,scale:1,transition:{rotate:{from:t,to:t+360,ease:"linear",duration:s,repeat:1/0},scale:{type:"spring",damping:20,stiffness:300}}});},[s,a,r]);let g=()=>{let t=r.get(),e=s,o=1;switch(i){case "slowDown":e=s*2;break;case "speedUp":e=s/4;break;case "pause":e=0;break;case "goBonkers":e=s/20,o=.8;break}i==="pause"?a.stop():a.start({rotate:t+360,scale:o,transition:{rotate:{from:t,to:t+360,ease:"linear",duration:e,repeat:1/0},scale:{type:"spring",damping:20,stiffness:300}}});},d=()=>{let t=r.get();a.start({rotate:t+360,scale:1,transition:{rotate:{from:t,to:t+360,ease:"linear",duration:s,repeat:1/0},scale:{type:"spring",damping:20,stiffness:300}}});};return jsxRuntime.jsx(framerMotion.motion.div,{className:f("relative w-32 h-32 cursor-pointer",u),style:{rotate:r},initial:{rotate:0},animate:a,onMouseEnter:g,onMouseLeave:d,children:l.map((t,e)=>{let o=360/l.length*e,c=60,p=o*Math.PI/180,y=Math.cos(p)*c,x=Math.sin(p)*c;return jsxRuntime.jsx("span",{className:"absolute text-lg font-bold",style:{transform:`translate(-50%, -50%) translate(${y}px, ${x}px) rotate(${o+90}deg)`,left:"50%",top:"50%"},children:t},e)})})}var V=C;exports.CircularText=C;exports.default=V;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/circular-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","CircularText","text","spinDuration","onHover","className","letters","controls","useAnimation","rotation","useMotionValue","useEffect","start","handleHoverStart","duration","scale","handleHoverEnd","jsx","motion","letter","i","rotationDeg","radius","angle","x","y","circular_text_default"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect } from \"react\";\r\nimport { motion, useAnimation, useMotionValue } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface CircularTextProps {\r\n text: string;\r\n spinDuration?: number;\r\n onHover?: \"slowDown\" | \"speedUp\" | \"pause\" | \"goBonkers\";\r\n className?: string;\r\n}\r\n\r\nexport function CircularText({\r\n text,\r\n spinDuration = 20,\r\n onHover = \"speedUp\",\r\n className = \"\",\r\n}: CircularTextProps) {\r\n const letters = Array.from(text);\r\n const controls = useAnimation();\r\n const rotation = useMotionValue(0);\r\n\r\n useEffect(() => {\r\n const start = rotation.get();\r\n controls.start({\r\n rotate: start + 360,\r\n scale: 1,\r\n transition: {\r\n rotate: { from: start, to: start + 360, ease: \"linear\", duration: spinDuration, repeat: Infinity },\r\n scale: { type: \"spring\", damping: 20, stiffness: 300 },\r\n },\r\n });\r\n }, [spinDuration, controls, rotation]);\r\n\r\n const handleHoverStart = () => {\r\n const start = rotation.get();\r\n let duration = spinDuration;\r\n let scale = 1;\r\n\r\n switch (onHover) {\r\n case \"slowDown\": duration = spinDuration * 2; break;\r\n case \"speedUp\": duration = spinDuration / 4; break;\r\n case \"pause\": duration = 0; break;\r\n case \"goBonkers\": duration = spinDuration / 20; scale = 0.8; break;\r\n }\r\n\r\n if (onHover === \"pause\") {\r\n controls.stop();\r\n } else {\r\n controls.start({\r\n rotate: start + 360,\r\n scale,\r\n transition: {\r\n rotate: { from: start, to: start + 360, ease: \"linear\", duration, repeat: Infinity },\r\n scale: { type: \"spring\", damping: 20, stiffness: 300 },\r\n },\r\n });\r\n }\r\n };\r\n\r\n const handleHoverEnd = () => {\r\n const start = rotation.get();\r\n controls.start({\r\n rotate: start + 360,\r\n scale: 1,\r\n transition: {\r\n rotate: { from: start, to: start + 360, ease: \"linear\", duration: spinDuration, repeat: Infinity },\r\n scale: { type: \"spring\", damping: 20, stiffness: 300 },\r\n },\r\n });\r\n };\r\n\r\n return (\r\n <motion.div\r\n className={cn(\"relative w-32 h-32 cursor-pointer\", className)}\r\n style={{ rotate: rotation }}\r\n initial={{ rotate: 0 }}\r\n animate={controls}\r\n onMouseEnter={handleHoverStart}\r\n onMouseLeave={handleHoverEnd}\r\n >\r\n {letters.map((letter, i) => {\r\n const rotationDeg = (360 / letters.length) * i;\r\n const radius = 60;\r\n const angle = (rotationDeg * Math.PI) / 180;\r\n const x = Math.cos(angle) * radius;\r\n const y = Math.sin(angle) * radius;\r\n\r\n return (\r\n <span\r\n key={i}\r\n className=\"absolute text-lg font-bold\"\r\n style={{\r\n transform: `translate(-50%, -50%) translate(${x}px, ${y}px) rotate(${rotationDeg + 90}deg)`,\r\n left: \"50%\",\r\n top: \"50%\",\r\n }}\r\n >\r\n {letter}\r\n </span>\r\n );\r\n })}\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport default CircularText;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {useEffect}from'react';import {useAnimation,useMotionValue,motion}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx}from'react/jsx-runtime';function f(...n){return twMerge(clsx(n))}function C({text:n,spinDuration:s=20,onHover:i="speedUp",className:u=""}){let l=Array.from(n),a=useAnimation(),r=useMotionValue(0);useEffect(()=>{let t=r.get();a.start({rotate:t+360,scale:1,transition:{rotate:{from:t,to:t+360,ease:"linear",duration:s,repeat:1/0},scale:{type:"spring",damping:20,stiffness:300}}});},[s,a,r]);let g=()=>{let t=r.get(),e=s,o=1;switch(i){case "slowDown":e=s*2;break;case "speedUp":e=s/4;break;case "pause":e=0;break;case "goBonkers":e=s/20,o=.8;break}i==="pause"?a.stop():a.start({rotate:t+360,scale:o,transition:{rotate:{from:t,to:t+360,ease:"linear",duration:e,repeat:1/0},scale:{type:"spring",damping:20,stiffness:300}}});},d=()=>{let t=r.get();a.start({rotate:t+360,scale:1,transition:{rotate:{from:t,to:t+360,ease:"linear",duration:s,repeat:1/0},scale:{type:"spring",damping:20,stiffness:300}}});};return jsx(motion.div,{className:f("relative w-32 h-32 cursor-pointer",u),style:{rotate:r},initial:{rotate:0},animate:a,onMouseEnter:g,onMouseLeave:d,children:l.map((t,e)=>{let o=360/l.length*e,c=60,p=o*Math.PI/180,y=Math.cos(p)*c,x=Math.sin(p)*c;return jsx("span",{className:"absolute text-lg font-bold",style:{transform:`translate(-50%, -50%) translate(${y}px, ${x}px) rotate(${o+90}deg)`,left:"50%",top:"50%"},children:t},e)})})}var V=C;export{C as CircularText,V as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/circular-text/index.tsx"],"names":["cn","inputs","twMerge","clsx","CircularText","text","spinDuration","onHover","className","letters","controls","useAnimation","rotation","useMotionValue","useEffect","start","handleHoverStart","duration","scale","handleHoverEnd","jsx","motion","letter","i","rotationDeg","radius","angle","x","y","circular_text_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, useAnimation, useMotionValue } from \"framer-motion\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface CircularTextProps {\r\n text: string;\r\n spinDuration?: number;\r\n onHover?: \"slowDown\" | \"speedUp\" | \"pause\" | \"goBonkers\";\r\n className?: string;\r\n}\r\n\r\nexport function CircularText({\r\n text,\r\n spinDuration = 20,\r\n onHover = \"speedUp\",\r\n className = \"\",\r\n}: CircularTextProps) {\r\n const letters = Array.from(text);\r\n const controls = useAnimation();\r\n const rotation = useMotionValue(0);\r\n\r\n useEffect(() => {\r\n const start = rotation.get();\r\n controls.start({\r\n rotate: start + 360,\r\n scale: 1,\r\n transition: {\r\n rotate: { from: start, to: start + 360, ease: \"linear\", duration: spinDuration, repeat: Infinity },\r\n scale: { type: \"spring\", damping: 20, stiffness: 300 },\r\n },\r\n });\r\n }, [spinDuration, controls, rotation]);\r\n\r\n const handleHoverStart = () => {\r\n const start = rotation.get();\r\n let duration = spinDuration;\r\n let scale = 1;\r\n\r\n switch (onHover) {\r\n case \"slowDown\": duration = spinDuration * 2; break;\r\n case \"speedUp\": duration = spinDuration / 4; break;\r\n case \"pause\": duration = 0; break;\r\n case \"goBonkers\": duration = spinDuration / 20; scale = 0.8; break;\r\n }\r\n\r\n if (onHover === \"pause\") {\r\n controls.stop();\r\n } else {\r\n controls.start({\r\n rotate: start + 360,\r\n scale,\r\n transition: {\r\n rotate: { from: start, to: start + 360, ease: \"linear\", duration, repeat: Infinity },\r\n scale: { type: \"spring\", damping: 20, stiffness: 300 },\r\n },\r\n });\r\n }\r\n };\r\n\r\n const handleHoverEnd = () => {\r\n const start = rotation.get();\r\n controls.start({\r\n rotate: start + 360,\r\n scale: 1,\r\n transition: {\r\n rotate: { from: start, to: start + 360, ease: \"linear\", duration: spinDuration, repeat: Infinity },\r\n scale: { type: \"spring\", damping: 20, stiffness: 300 },\r\n },\r\n });\r\n };\r\n\r\n return (\r\n <motion.div\r\n className={cn(\"relative w-32 h-32 cursor-pointer\", className)}\r\n style={{ rotate: rotation }}\r\n initial={{ rotate: 0 }}\r\n animate={controls}\r\n onMouseEnter={handleHoverStart}\r\n onMouseLeave={handleHoverEnd}\r\n >\r\n {letters.map((letter, i) => {\r\n const rotationDeg = (360 / letters.length) * i;\r\n const radius = 60;\r\n const angle = (rotationDeg * Math.PI) / 180;\r\n const x = Math.cos(angle) * radius;\r\n const y = Math.sin(angle) * radius;\r\n\r\n return (\r\n <span\r\n key={i}\r\n className=\"absolute text-lg font-bold\"\r\n style={{\r\n transform: `translate(-50%, -50%) translate(${x}px, ${y}px) rotate(${rotationDeg + 90}deg)`,\r\n left: \"50%\",\r\n top: \"50%\",\r\n }}\r\n >\r\n {letter}\r\n </span>\r\n );\r\n })}\r\n </motion.div>\r\n );\r\n}\r\n\r\nexport default CircularText;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime');function r(...o){return tailwindMerge.twMerge(clsx.clsx(o))}function d({className:o,children:e,shortcut:n="CMD + K",...a}){return jsxRuntime.jsxs("button",{...a,className:r("relative p-2 rounded-lg overflow-hidden","bg-gradient-to-b from-zinc-50 to-zinc-100 dark:from-zinc-800 dark:to-zinc-900","border border-zinc-200 dark:border-zinc-800","hover:border-zinc-300 dark:hover:border-zinc-700","transition-all duration-300 ease-out group","inline-flex items-center justify-center gap-2",o),children:[jsxRuntime.jsx("svg",{className:r("w-4 h-4 text-zinc-600 dark:text-zinc-400","transition-all duration-300","group-hover:scale-110 group-hover:rotate-[-4deg] group-active:scale-95"),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M18 3a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3H6a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3V6a3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3h12a3 3 0 0 0 3-3 3 3 0 0 0-3-3z"})}),jsxRuntime.jsx("span",{className:"text-sm text-zinc-600 dark:text-zinc-400",children:e||n}),jsxRuntime.jsx("span",{className:"absolute inset-0 bg-gradient-to-r from-indigo-500/0 via-indigo-500/10 to-indigo-500/0 translate-x-[-100%] group-hover:translate-x-[100%] transition-transform duration-500 ease-out"})]})}var g=d;exports.CommandButton=d;exports.default=g;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/command-button/index.tsx"],"names":["cn","inputs","twMerge","clsx","CommandButton","className","children","shortcut","props","jsxs","jsx","command_button_default"],"mappings":"+KAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,UAAKF,CAAM,CAAC,CAC7B,CCGO,SAASG,CAAAA,CAAc,CAAE,SAAA,CAAAC,CAAAA,CAAW,SAAAC,CAAAA,CAAU,QAAA,CAAAC,EAAW,SAAA,CAAW,GAAGC,CAAM,CAAA,CAAuB,CACzG,OACEC,eAAAA,CAAC,QAAA,CAAA,CACE,GAAGD,CAAAA,CACJ,SAAA,CAAWR,CAAAA,CACT,yCAAA,CACA,+EAAA,CACA,6CAAA,CACA,mDACA,4CAAA,CACA,+CAAA,CACAK,CACF,CAAA,CAEA,QAAA,CAAA,CAAAK,eAAC,KAAA,CAAA,CACC,SAAA,CAAWV,EACT,0CAAA,CACA,6BAAA,CACA,wEACF,CAAA,CACA,IAAA,CAAK,OACL,OAAA,CAAQ,WAAA,CACR,OAAO,cAAA,CAEP,QAAA,CAAAU,cAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,EAAG,CAAA,CAAE,0LAAA,CAA2L,EAClQ,CAAA,CACAA,cAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0CAAA,CAA4C,QAAA,CAAAJ,GAAYC,CAAAA,CAAS,CAAA,CACjFG,eAAC,MAAA,CAAA,CAAK,SAAA,CAAU,sLAAsL,CAAA,CAAA,CACxM,CAEJ,CAEA,IAAOC,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 { cn } from \"../utils/cn\";\r\n\r\ninterface CommandButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n shortcut?: string;\r\n}\r\n\r\nexport function CommandButton({ className, children, shortcut = \"CMD + K\", ...props }: CommandButtonProps) {\r\n return (\r\n <button\r\n {...props}\r\n className={cn(\r\n \"relative p-2 rounded-lg overflow-hidden\",\r\n \"bg-gradient-to-b from-zinc-50 to-zinc-100 dark:from-zinc-800 dark:to-zinc-900\",\r\n \"border border-zinc-200 dark:border-zinc-800\",\r\n \"hover:border-zinc-300 dark:hover:border-zinc-700\",\r\n \"transition-all duration-300 ease-out group\",\r\n \"inline-flex items-center justify-center gap-2\",\r\n className\r\n )}\r\n >\r\n <svg\r\n className={cn(\r\n \"w-4 h-4 text-zinc-600 dark:text-zinc-400\",\r\n \"transition-all duration-300\",\r\n \"group-hover:scale-110 group-hover:rotate-[-4deg] group-active:scale-95\"\r\n )}\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=\"M18 3a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3H6a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3V6a3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3h12a3 3 0 0 0 3-3 3 3 0 0 0-3-3z\" />\r\n </svg>\r\n <span className=\"text-sm text-zinc-600 dark:text-zinc-400\">{children || shortcut}</span>\r\n <span className=\"absolute inset-0 bg-gradient-to-r from-indigo-500/0 via-indigo-500/10 to-indigo-500/0 translate-x-[-100%] group-hover:translate-x-[100%] transition-transform duration-500 ease-out\" />\r\n </button>\r\n );\r\n}\r\n\r\nexport default CommandButton;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';function r(...o){return twMerge(clsx(o))}function d({className:o,children:e,shortcut:n="CMD + K",...a}){return jsxs("button",{...a,className:r("relative p-2 rounded-lg overflow-hidden","bg-gradient-to-b from-zinc-50 to-zinc-100 dark:from-zinc-800 dark:to-zinc-900","border border-zinc-200 dark:border-zinc-800","hover:border-zinc-300 dark:hover:border-zinc-700","transition-all duration-300 ease-out group","inline-flex items-center justify-center gap-2",o),children:[jsx("svg",{className:r("w-4 h-4 text-zinc-600 dark:text-zinc-400","transition-all duration-300","group-hover:scale-110 group-hover:rotate-[-4deg] group-active:scale-95"),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M18 3a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3H6a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3V6a3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3h12a3 3 0 0 0 3-3 3 3 0 0 0-3-3z"})}),jsx("span",{className:"text-sm text-zinc-600 dark:text-zinc-400",children:e||n}),jsx("span",{className:"absolute inset-0 bg-gradient-to-r from-indigo-500/0 via-indigo-500/10 to-indigo-500/0 translate-x-[-100%] group-hover:translate-x-[100%] transition-transform duration-500 ease-out"})]})}var g=d;export{d as CommandButton,g as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/command-button/index.tsx"],"names":["cn","inputs","twMerge","clsx","CommandButton","className","children","shortcut","props","jsxs","jsx","command_button_default"],"mappings":"sGAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,KAAKF,CAAM,CAAC,CAC7B,CCGO,SAASG,CAAAA,CAAc,CAAE,SAAA,CAAAC,CAAAA,CAAW,SAAAC,CAAAA,CAAU,QAAA,CAAAC,EAAW,SAAA,CAAW,GAAGC,CAAM,CAAA,CAAuB,CACzG,OACEC,IAAAA,CAAC,QAAA,CAAA,CACE,GAAGD,CAAAA,CACJ,SAAA,CAAWR,CAAAA,CACT,yCAAA,CACA,+EAAA,CACA,6CAAA,CACA,mDACA,4CAAA,CACA,+CAAA,CACAK,CACF,CAAA,CAEA,QAAA,CAAA,CAAAK,IAAC,KAAA,CAAA,CACC,SAAA,CAAWV,EACT,0CAAA,CACA,6BAAA,CACA,wEACF,CAAA,CACA,IAAA,CAAK,OACL,OAAA,CAAQ,WAAA,CACR,OAAO,cAAA,CAEP,QAAA,CAAAU,GAAAA,CAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,EAAG,CAAA,CAAE,0LAAA,CAA2L,EAClQ,CAAA,CACAA,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,0CAAA,CAA4C,QAAA,CAAAJ,GAAYC,CAAAA,CAAS,CAAA,CACjFG,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,sLAAsL,CAAA,CAAA,CACxM,CAEJ,CAEA,IAAOC,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 { cn } from \"../utils/cn\";\r\n\r\ninterface CommandButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n shortcut?: string;\r\n}\r\n\r\nexport function CommandButton({ className, children, shortcut = \"CMD + K\", ...props }: CommandButtonProps) {\r\n return (\r\n <button\r\n {...props}\r\n className={cn(\r\n \"relative p-2 rounded-lg overflow-hidden\",\r\n \"bg-gradient-to-b from-zinc-50 to-zinc-100 dark:from-zinc-800 dark:to-zinc-900\",\r\n \"border border-zinc-200 dark:border-zinc-800\",\r\n \"hover:border-zinc-300 dark:hover:border-zinc-700\",\r\n \"transition-all duration-300 ease-out group\",\r\n \"inline-flex items-center justify-center gap-2\",\r\n className\r\n )}\r\n >\r\n <svg\r\n className={cn(\r\n \"w-4 h-4 text-zinc-600 dark:text-zinc-400\",\r\n \"transition-all duration-300\",\r\n \"group-hover:scale-110 group-hover:rotate-[-4deg] group-active:scale-95\"\r\n )}\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=\"M18 3a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3H6a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3V6a3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3h12a3 3 0 0 0 3-3 3 3 0 0 0-3-3z\" />\r\n </svg>\r\n <span className=\"text-sm text-zinc-600 dark:text-zinc-400\">{children || shortcut}</span>\r\n <span className=\"absolute inset-0 bg-gradient-to-r from-indigo-500/0 via-indigo-500/10 to-indigo-500/0 translate-x-[-100%] group-hover:translate-x-[100%] transition-transform duration-500 ease-out\" />\r\n </button>\r\n );\r\n}\r\n\r\nexport default CommandButton;\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 n(...e){return tailwindMerge.twMerge(clsx.clsx(e))}function f({text:e="Copy",value:t,onCopy:s,className:c}){let[l,r]=react.useState(false);return jsxRuntime.jsx("button",{onClick:async()=>{try{t&&await navigator.clipboard.writeText(t),s?.(),r(!0),setTimeout(()=>r(!1),2e3);}catch(p){console.error("Failed to copy:",p);}},className:n("inline-flex items-center gap-2 px-4 py-2","bg-transparent hover:bg-zinc-100 dark:hover:bg-zinc-800","text-zinc-900 dark:text-zinc-100","border border-zinc-300 dark:border-zinc-700","rounded-md transition-all duration-200 font-medium text-sm",c),children:l?jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("svg",{className:"w-4 h-4 text-green-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})}),"Copied!"]}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"})}),e]})})}var y=f;exports.CopyButton=f;exports.default=y;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/copy-button/index.tsx"],"names":["cn","inputs","twMerge","clsx","CopyButton","text","value","onCopy","className","copied","setCopied","useState","jsx","error","jsxs","Fragment","copy_button_default"],"mappings":"sMAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCOO,SAASG,EAAW,CACzB,IAAA,CAAAC,EAAO,MAAA,CACP,KAAA,CAAAC,EACA,MAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CACF,EAAoB,CAClB,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIC,cAAAA,CAAS,KAAK,CAAA,CAe1C,OACEC,cAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAfe,SAAY,CAC7B,GAAI,CACEN,CAAAA,EACF,MAAM,UAAU,SAAA,CAAU,SAAA,CAAUA,CAAK,CAAA,CAE3CC,KAAS,CACTG,CAAAA,CAAU,CAAA,CAAI,CAAA,CACd,WAAW,IAAMA,CAAAA,CAAU,EAAK,CAAA,CAAG,GAAI,EACzC,CAAA,MAASG,CAAAA,CAAO,CACd,OAAA,CAAQ,MAAM,iBAAA,CAAmBA,CAAK,EACxC,CACF,EAKI,SAAA,CAAWb,CAAAA,CACT,0CAAA,CACA,yDAAA,CACA,mCACA,6CAAA,CACA,4DAAA,CACAQ,CACF,CAAA,CAEC,SAAAC,CAAAA,CACCK,eAAAA,CAAAC,mBAAAA,CAAA,CACE,UAAAH,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wBAAA,CAAyB,KAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,YAChF,QAAA,CAAAA,cAAAA,CAAC,QAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,iBAAiB,CAAA,CACxF,CAAA,CAAM,SAAA,CAAA,CAER,CAAA,CAEAE,gBAAAC,mBAAAA,CAAA,CACE,QAAA,CAAA,CAAAH,cAAAA,CAAC,OAAI,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,OAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACjE,QAAA,CAAAA,eAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,QAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,uHAAA,CAAwH,EAC/L,CAAA,CACCP,CAAAA,CAAAA,CACH,EAEJ,CAEJ,KAEOW,CAAAA,CAAQZ","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface CopyButtonProps {\r\n text?: string;\r\n value?: string;\r\n onCopy?: () => void;\r\n className?: string;\r\n}\r\n\r\nexport function CopyButton({ \r\n text = \"Copy\",\r\n value,\r\n onCopy,\r\n className \r\n}: CopyButtonProps) {\r\n const [copied, setCopied] = useState(false);\r\n\r\n const handleCopy = async () => {\r\n try {\r\n if (value) {\r\n await navigator.clipboard.writeText(value);\r\n }\r\n onCopy?.();\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), 2000);\r\n } catch (error) {\r\n console.error(\"Failed to copy:\", error);\r\n }\r\n };\r\n\r\n return (\r\n <button\r\n onClick={handleCopy}\r\n className={cn(\r\n \"inline-flex items-center gap-2 px-4 py-2\",\r\n \"bg-transparent hover:bg-zinc-100 dark:hover:bg-zinc-800\",\r\n \"text-zinc-900 dark:text-zinc-100\",\r\n \"border border-zinc-300 dark:border-zinc-700\",\r\n \"rounded-md transition-all duration-200 font-medium text-sm\",\r\n className\r\n )}\r\n >\r\n {copied ? (\r\n <>\r\n <svg className=\"w-4 h-4 text-green-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\r\n </svg>\r\n Copied!\r\n </>\r\n ) : (\r\n <>\r\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\" />\r\n </svg>\r\n {text}\r\n </>\r\n )}\r\n </button>\r\n );\r\n}\r\n\r\nexport default CopyButton;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {useState}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsx,jsxs,Fragment}from'react/jsx-runtime';function n(...e){return twMerge(clsx(e))}function f({text:e="Copy",value:t,onCopy:s,className:c}){let[l,r]=useState(false);return jsx("button",{onClick:async()=>{try{t&&await navigator.clipboard.writeText(t),s?.(),r(!0),setTimeout(()=>r(!1),2e3);}catch(p){console.error("Failed to copy:",p);}},className:n("inline-flex items-center gap-2 px-4 py-2","bg-transparent hover:bg-zinc-100 dark:hover:bg-zinc-800","text-zinc-900 dark:text-zinc-100","border border-zinc-300 dark:border-zinc-700","rounded-md transition-all duration-200 font-medium text-sm",c),children:l?jsxs(Fragment,{children:[jsx("svg",{className:"w-4 h-4 text-green-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})}),"Copied!"]}):jsxs(Fragment,{children:[jsx("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"})}),e]})})}var y=f;export{f as CopyButton,y as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/copy-button/index.tsx"],"names":["cn","inputs","twMerge","clsx","CopyButton","text","value","onCopy","className","copied","setCopied","useState","jsx","error","jsxs","Fragment","copy_button_default"],"mappings":"4IAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCOO,SAASG,EAAW,CACzB,IAAA,CAAAC,EAAO,MAAA,CACP,KAAA,CAAAC,EACA,MAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CACF,EAAoB,CAClB,GAAM,CAACC,CAAAA,CAAQC,CAAS,CAAA,CAAIC,QAAAA,CAAS,KAAK,CAAA,CAe1C,OACEC,GAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAfe,SAAY,CAC7B,GAAI,CACEN,CAAAA,EACF,MAAM,UAAU,SAAA,CAAU,SAAA,CAAUA,CAAK,CAAA,CAE3CC,KAAS,CACTG,CAAAA,CAAU,CAAA,CAAI,CAAA,CACd,WAAW,IAAMA,CAAAA,CAAU,EAAK,CAAA,CAAG,GAAI,EACzC,CAAA,MAASG,CAAAA,CAAO,CACd,OAAA,CAAQ,MAAM,iBAAA,CAAmBA,CAAK,EACxC,CACF,EAKI,SAAA,CAAWb,CAAAA,CACT,0CAAA,CACA,yDAAA,CACA,mCACA,6CAAA,CACA,4DAAA,CACAQ,CACF,CAAA,CAEC,SAAAC,CAAAA,CACCK,IAAAA,CAAAC,QAAAA,CAAA,CACE,UAAAH,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,wBAAA,CAAyB,KAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,YAChF,QAAA,CAAAA,GAAAA,CAAC,QAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,iBAAiB,CAAA,CACxF,CAAA,CAAM,SAAA,CAAA,CAER,CAAA,CAEAE,KAAAC,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAH,GAAAA,CAAC,OAAI,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,OAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACjE,QAAA,CAAAA,IAAC,MAAA,CAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,QAAQ,WAAA,CAAa,CAAA,CAAG,CAAA,CAAE,uHAAA,CAAwH,EAC/L,CAAA,CACCP,CAAAA,CAAAA,CACH,EAEJ,CAEJ,KAEOW,CAAAA,CAAQZ","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface CopyButtonProps {\r\n text?: string;\r\n value?: string;\r\n onCopy?: () => void;\r\n className?: string;\r\n}\r\n\r\nexport function CopyButton({ \r\n text = \"Copy\",\r\n value,\r\n onCopy,\r\n className \r\n}: CopyButtonProps) {\r\n const [copied, setCopied] = useState(false);\r\n\r\n const handleCopy = async () => {\r\n try {\r\n if (value) {\r\n await navigator.clipboard.writeText(value);\r\n }\r\n onCopy?.();\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), 2000);\r\n } catch (error) {\r\n console.error(\"Failed to copy:\", error);\r\n }\r\n };\r\n\r\n return (\r\n <button\r\n onClick={handleCopy}\r\n className={cn(\r\n \"inline-flex items-center gap-2 px-4 py-2\",\r\n \"bg-transparent hover:bg-zinc-100 dark:hover:bg-zinc-800\",\r\n \"text-zinc-900 dark:text-zinc-100\",\r\n \"border border-zinc-300 dark:border-zinc-700\",\r\n \"rounded-md transition-all duration-200 font-medium text-sm\",\r\n className\r\n )}\r\n >\r\n {copied ? (\r\n <>\r\n <svg className=\"w-4 h-4 text-green-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\r\n </svg>\r\n Copied!\r\n </>\r\n ) : (\r\n <>\r\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\" />\r\n </svg>\r\n {text}\r\n </>\r\n )}\r\n </button>\r\n );\r\n}\r\n\r\nexport default CopyButton;\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 m(...n){return tailwindMerge.twMerge(clsx.clsx(n))}function M({end:n,start:e=0,duration:o=2e3,className:i,prefix:c="",suffix:l="",decimals:p=0}){let[f,b]=react.useState(e);return react.useEffect(()=>{let t=null,r,u=s=>{t||(t=s);let a=Math.min((s-t)/o,1),C=1-Math.pow(1-a,4),x=e+(n-e)*C;b(x),a<1&&(r=requestAnimationFrame(u));};return r=requestAnimationFrame(u),()=>cancelAnimationFrame(r)},[e,n,o]),jsxRuntime.jsxs("span",{className:m("tabular-nums",i),children:[c,f.toFixed(p),l]})}var V=M;exports.CountUp=M;exports.default=V;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/count-up/index.tsx"],"names":["cn","inputs","twMerge","clsx","CountUp","end","start","duration","className","prefix","suffix","decimals","count","setCount","useState","useEffect","startTime","animationFrame","animate","timestamp","progress","easeOutQuart","currentCount","jsxs","count_up_default"],"mappings":"sMAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CCUO,SAASG,CAAAA,CAAQ,CACtB,IAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CAAQ,CAAA,CACR,QAAA,CAAAC,CAAAA,CAAW,GAAA,CACX,SAAA,CAAAC,EACA,MAAA,CAAAC,CAAAA,CAAS,EAAA,CACT,MAAA,CAAAC,CAAAA,CAAS,EAAA,CACT,QAAA,CAAAC,CAAAA,CAAW,CACb,CAAA,CAAiB,CACf,GAAM,CAACC,CAAAA,CAAOC,CAAQ,CAAA,CAAIC,cAAAA,CAASR,CAAK,CAAA,CAExC,OAAAS,eAAAA,CAAU,IAAM,CACd,IAAIC,CAAAA,CAA2B,IAAA,CAC3BC,EAEEC,CAAAA,CAAWC,CAAAA,EAAsB,CAChCH,CAAAA,GAAWA,CAAAA,CAAYG,CAAAA,CAAAA,CAC5B,IAAMC,CAAAA,CAAW,IAAA,CAAK,GAAA,CAAA,CAAKD,CAAAA,CAAYH,CAAAA,EAAaT,CAAAA,CAAU,CAAC,CAAA,CAEzDc,CAAAA,CAAe,EAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAID,CAAAA,CAAU,CAAC,CAAA,CAC3CE,CAAAA,CAAehB,CAAAA,CAAAA,CAASD,EAAMC,CAAAA,EAASe,CAAAA,CAE7CR,CAAAA,CAASS,CAAY,CAAA,CAEjBF,CAAAA,CAAW,CAAA,GACbH,CAAAA,CAAiB,sBAAsBC,CAAO,CAAA,EAElD,CAAA,CAEA,OAAAD,CAAAA,CAAiB,qBAAA,CAAsBC,CAAO,CAAA,CAEvC,IAAM,oBAAA,CAAqBD,CAAc,CAClD,CAAA,CAAG,CAACX,CAAAA,CAAOD,CAAAA,CAAKE,CAAQ,CAAC,CAAA,CAGvBgB,eAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAWvB,CAAAA,CAAG,cAAA,CAAgBQ,CAAS,CAAA,CAC1C,UAAAC,CAAAA,CACAG,CAAAA,CAAM,OAAA,CAAQD,CAAQ,CAAA,CACtBD,CAAAA,CAAAA,CACH,CAEJ,KAEOc,CAAAA,CAAQpB","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface CountUpProps {\r\n end: number;\r\n start?: number;\r\n duration?: number;\r\n className?: string;\r\n prefix?: string;\r\n suffix?: string;\r\n decimals?: number;\r\n}\r\n\r\nexport function CountUp({\r\n end,\r\n start = 0,\r\n duration = 2000,\r\n className,\r\n prefix = \"\",\r\n suffix = \"\",\r\n decimals = 0,\r\n}: CountUpProps) {\r\n const [count, setCount] = useState(start);\r\n\r\n useEffect(() => {\r\n let startTime: number | null = null;\r\n let animationFrame: number;\r\n\r\n const animate = (timestamp: number) => {\r\n if (!startTime) startTime = timestamp;\r\n const progress = Math.min((timestamp - startTime) / duration, 1);\r\n \r\n const easeOutQuart = 1 - Math.pow(1 - progress, 4);\r\n const currentCount = start + (end - start) * easeOutQuart;\r\n \r\n setCount(currentCount);\r\n\r\n if (progress < 1) {\r\n animationFrame = requestAnimationFrame(animate);\r\n }\r\n };\r\n\r\n animationFrame = requestAnimationFrame(animate);\r\n\r\n return () => cancelAnimationFrame(animationFrame);\r\n }, [start, end, duration]);\r\n\r\n return (\r\n <span className={cn(\"tabular-nums\", className)}>\r\n {prefix}\r\n {count.toFixed(decimals)}\r\n {suffix}\r\n </span>\r\n );\r\n}\r\n\r\nexport default CountUp;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {useState,useEffect}from'react';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs}from'react/jsx-runtime';function m(...n){return twMerge(clsx(n))}function M({end:n,start:e=0,duration:o=2e3,className:i,prefix:c="",suffix:l="",decimals:p=0}){let[f,b]=useState(e);return useEffect(()=>{let t=null,r,u=s=>{t||(t=s);let a=Math.min((s-t)/o,1),C=1-Math.pow(1-a,4),x=e+(n-e)*C;b(x),a<1&&(r=requestAnimationFrame(u));};return r=requestAnimationFrame(u),()=>cancelAnimationFrame(r)},[e,n,o]),jsxs("span",{className:m("tabular-nums",i),children:[c,f.toFixed(p),l]})}var V=M;export{M as CountUp,V as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/count-up/index.tsx"],"names":["cn","inputs","twMerge","clsx","CountUp","end","start","duration","className","prefix","suffix","decimals","count","setCount","useState","useEffect","startTime","animationFrame","animate","timestamp","progress","easeOutQuart","currentCount","jsxs","count_up_default"],"mappings":"yIAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B,CCUO,SAASG,CAAAA,CAAQ,CACtB,IAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CAAQ,CAAA,CACR,QAAA,CAAAC,CAAAA,CAAW,GAAA,CACX,SAAA,CAAAC,EACA,MAAA,CAAAC,CAAAA,CAAS,EAAA,CACT,MAAA,CAAAC,CAAAA,CAAS,EAAA,CACT,QAAA,CAAAC,CAAAA,CAAW,CACb,CAAA,CAAiB,CACf,GAAM,CAACC,CAAAA,CAAOC,CAAQ,CAAA,CAAIC,QAAAA,CAASR,CAAK,CAAA,CAExC,OAAAS,SAAAA,CAAU,IAAM,CACd,IAAIC,CAAAA,CAA2B,IAAA,CAC3BC,EAEEC,CAAAA,CAAWC,CAAAA,EAAsB,CAChCH,CAAAA,GAAWA,CAAAA,CAAYG,CAAAA,CAAAA,CAC5B,IAAMC,CAAAA,CAAW,IAAA,CAAK,GAAA,CAAA,CAAKD,CAAAA,CAAYH,CAAAA,EAAaT,CAAAA,CAAU,CAAC,CAAA,CAEzDc,CAAAA,CAAe,EAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAID,CAAAA,CAAU,CAAC,CAAA,CAC3CE,CAAAA,CAAehB,CAAAA,CAAAA,CAASD,EAAMC,CAAAA,EAASe,CAAAA,CAE7CR,CAAAA,CAASS,CAAY,CAAA,CAEjBF,CAAAA,CAAW,CAAA,GACbH,CAAAA,CAAiB,sBAAsBC,CAAO,CAAA,EAElD,CAAA,CAEA,OAAAD,CAAAA,CAAiB,qBAAA,CAAsBC,CAAO,CAAA,CAEvC,IAAM,oBAAA,CAAqBD,CAAc,CAClD,CAAA,CAAG,CAACX,CAAAA,CAAOD,CAAAA,CAAKE,CAAQ,CAAC,CAAA,CAGvBgB,IAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAWvB,CAAAA,CAAG,cAAA,CAAgBQ,CAAS,CAAA,CAC1C,UAAAC,CAAAA,CACAG,CAAAA,CAAM,OAAA,CAAQD,CAAQ,CAAA,CACtBD,CAAAA,CAAAA,CACH,CAEJ,KAEOc,CAAAA,CAAQpB","file":"index.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","\"use client\";\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { cn } from \"../utils/cn\";\r\n\r\ninterface CountUpProps {\r\n end: number;\r\n start?: number;\r\n duration?: number;\r\n className?: string;\r\n prefix?: string;\r\n suffix?: string;\r\n decimals?: number;\r\n}\r\n\r\nexport function CountUp({\r\n end,\r\n start = 0,\r\n duration = 2000,\r\n className,\r\n prefix = \"\",\r\n suffix = \"\",\r\n decimals = 0,\r\n}: CountUpProps) {\r\n const [count, setCount] = useState(start);\r\n\r\n useEffect(() => {\r\n let startTime: number | null = null;\r\n let animationFrame: number;\r\n\r\n const animate = (timestamp: number) => {\r\n if (!startTime) startTime = timestamp;\r\n const progress = Math.min((timestamp - startTime) / duration, 1);\r\n \r\n const easeOutQuart = 1 - Math.pow(1 - progress, 4);\r\n const currentCount = start + (end - start) * easeOutQuart;\r\n \r\n setCount(currentCount);\r\n\r\n if (progress < 1) {\r\n animationFrame = requestAnimationFrame(animate);\r\n }\r\n };\r\n\r\n animationFrame = requestAnimationFrame(animate);\r\n\r\n return () => cancelAnimationFrame(animationFrame);\r\n }, [start, end, duration]);\r\n\r\n return (\r\n <span className={cn(\"tabular-nums\", className)}>\r\n {prefix}\r\n {count.toFixed(decimals)}\r\n {suffix}\r\n </span>\r\n );\r\n}\r\n\r\nexport default CountUp;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var framerMotion=require('framer-motion'),react=require('react'),jsxRuntime=require('react/jsx-runtime');function b({mv:i,number:e,height:t}){let u=framerMotion.useTransform(i,r=>{let n=r%10,s=(10+e-n)%10,o=s*t;return s>5&&(o-=10*t),o});return jsxRuntime.jsx(framerMotion.motion.span,{style:{y:u,position:"absolute",inset:0,display:"flex",justifyContent:"center"},children:e})}function y({place:i,value:e,height:t,digitStyle:u}){let r=Math.floor(e/i),n=framerMotion.useSpring(r,{stiffness:200,damping:25});return react.useEffect(()=>{n.set(r);},[n,r]),jsxRuntime.jsx("div",{style:{height:t,position:"relative",overflow:"hidden",...u},children:Array.from({length:10},(s,o)=>jsxRuntime.jsx(b,{mv:n,number:o,height:t},o))})}function S({value:i,fontSize:e=100,padding:t=0,places:u=[100,10,1],gap:r=8,textColor:n="#000000",fontWeight:s=900,containerStyle:o,digitStyle:m}){let p=e+t;return jsxRuntime.jsx("div",{style:{display:"flex",gap:r,fontSize:e,color:n,fontWeight:s,...o},children:u.map(l=>jsxRuntime.jsx(y,{place:l,value:i,height:p,digitStyle:m},l))})}var C=S;exports.Counter=S;exports.default=C;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/counter/index.tsx"],"names":["Number","mv","number","height","y","useTransform","latest","placeValue","offset","memo","jsx","motion","Digit","place","value","digitStyle","valueRoundedToPlace","animatedValue","useSpring","useEffect","_","i","Counter","fontSize","padding","places","gap","textColor","fontWeight","containerStyle","counter_default"],"mappings":"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","file":"index.js","sourcesContent":["\"use client\";\r\n\r\nimport { MotionValue, motion, useSpring, useTransform } from \"framer-motion\";\r\nimport { useEffect } from \"react\";\r\n\r\ninterface NumberProps {\r\n mv: MotionValue<number>;\r\n number: number;\r\n height: number;\r\n}\r\n\r\nfunction Number({ mv, number, height }: NumberProps) {\r\n const y = useTransform(mv, (latest) => {\r\n const placeValue = latest % 10;\r\n let offset = (10 + number - placeValue) % 10;\r\n let memo = offset * height;\r\n if (offset > 5) {\r\n memo -= 10 * height;\r\n }\r\n return memo;\r\n });\r\n\r\n return (\r\n <motion.span style={{ y, position: \"absolute\", inset: 0, display: \"flex\", justifyContent: \"center\" }}>\r\n {number}\r\n </motion.span>\r\n );\r\n}\r\n\r\ninterface DigitProps {\r\n place: number;\r\n value: number;\r\n height: number;\r\n digitStyle?: React.CSSProperties;\r\n}\r\n\r\nfunction Digit({ place, value, height, digitStyle }: DigitProps) {\r\n const valueRoundedToPlace = Math.floor(value / place);\r\n const animatedValue = useSpring(valueRoundedToPlace, { stiffness: 200, damping: 25 });\r\n\r\n useEffect(() => {\r\n animatedValue.set(valueRoundedToPlace);\r\n }, [animatedValue, valueRoundedToPlace]);\r\n\r\n return (\r\n <div style={{ height, position: \"relative\", overflow: \"hidden\", ...digitStyle }}>\r\n {Array.from({ length: 10 }, (_, i) => (\r\n <Number key={i} mv={animatedValue} number={i} height={height} />\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport interface CounterProps {\r\n value: number;\r\n fontSize?: number;\r\n padding?: number;\r\n places?: number[];\r\n gap?: number;\r\n textColor?: string;\r\n fontWeight?: React.CSSProperties[\"fontWeight\"];\r\n containerStyle?: React.CSSProperties;\r\n digitStyle?: React.CSSProperties;\r\n}\r\n\r\nexport function Counter({\r\n value,\r\n fontSize = 100,\r\n padding = 0,\r\n places = [100, 10, 1],\r\n gap = 8,\r\n textColor = \"#000000\",\r\n fontWeight = 900,\r\n containerStyle,\r\n digitStyle,\r\n}: CounterProps) {\r\n const height = fontSize + padding;\r\n\r\n return (\r\n <div style={{ display: \"flex\", gap, fontSize, color: textColor, fontWeight, ...containerStyle }}>\r\n {places.map((place) => (\r\n <Digit key={place} place={place} value={value} height={height} digitStyle={digitStyle} />\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default Counter;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {useSpring,useTransform,motion}from'framer-motion';import {useEffect}from'react';import {jsx}from'react/jsx-runtime';function b({mv:i,number:e,height:t}){let u=useTransform(i,r=>{let n=r%10,s=(10+e-n)%10,o=s*t;return s>5&&(o-=10*t),o});return jsx(motion.span,{style:{y:u,position:"absolute",inset:0,display:"flex",justifyContent:"center"},children:e})}function y({place:i,value:e,height:t,digitStyle:u}){let r=Math.floor(e/i),n=useSpring(r,{stiffness:200,damping:25});return useEffect(()=>{n.set(r);},[n,r]),jsx("div",{style:{height:t,position:"relative",overflow:"hidden",...u},children:Array.from({length:10},(s,o)=>jsx(b,{mv:n,number:o,height:t},o))})}function S({value:i,fontSize:e=100,padding:t=0,places:u=[100,10,1],gap:r=8,textColor:n="#000000",fontWeight:s=900,containerStyle:o,digitStyle:m}){let p=e+t;return jsx("div",{style:{display:"flex",gap:r,fontSize:e,color:n,fontWeight:s,...o},children:u.map(l=>jsx(y,{place:l,value:i,height:p,digitStyle:m},l))})}var C=S;export{S as Counter,C as default};//# sourceMappingURL=index.mjs.map
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/counter/index.tsx"],"names":["Number","mv","number","height","y","useTransform","latest","placeValue","offset","memo","jsx","motion","Digit","place","value","digitStyle","valueRoundedToPlace","animatedValue","useSpring","useEffect","_","i","Counter","fontSize","padding","places","gap","textColor","fontWeight","containerStyle","counter_default"],"mappings":"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","file":"index.mjs","sourcesContent":["\"use client\";\r\n\r\nimport { MotionValue, motion, useSpring, useTransform } from \"framer-motion\";\r\nimport { useEffect } from \"react\";\r\n\r\ninterface NumberProps {\r\n mv: MotionValue<number>;\r\n number: number;\r\n height: number;\r\n}\r\n\r\nfunction Number({ mv, number, height }: NumberProps) {\r\n const y = useTransform(mv, (latest) => {\r\n const placeValue = latest % 10;\r\n let offset = (10 + number - placeValue) % 10;\r\n let memo = offset * height;\r\n if (offset > 5) {\r\n memo -= 10 * height;\r\n }\r\n return memo;\r\n });\r\n\r\n return (\r\n <motion.span style={{ y, position: \"absolute\", inset: 0, display: \"flex\", justifyContent: \"center\" }}>\r\n {number}\r\n </motion.span>\r\n );\r\n}\r\n\r\ninterface DigitProps {\r\n place: number;\r\n value: number;\r\n height: number;\r\n digitStyle?: React.CSSProperties;\r\n}\r\n\r\nfunction Digit({ place, value, height, digitStyle }: DigitProps) {\r\n const valueRoundedToPlace = Math.floor(value / place);\r\n const animatedValue = useSpring(valueRoundedToPlace, { stiffness: 200, damping: 25 });\r\n\r\n useEffect(() => {\r\n animatedValue.set(valueRoundedToPlace);\r\n }, [animatedValue, valueRoundedToPlace]);\r\n\r\n return (\r\n <div style={{ height, position: \"relative\", overflow: \"hidden\", ...digitStyle }}>\r\n {Array.from({ length: 10 }, (_, i) => (\r\n <Number key={i} mv={animatedValue} number={i} height={height} />\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport interface CounterProps {\r\n value: number;\r\n fontSize?: number;\r\n padding?: number;\r\n places?: number[];\r\n gap?: number;\r\n textColor?: string;\r\n fontWeight?: React.CSSProperties[\"fontWeight\"];\r\n containerStyle?: React.CSSProperties;\r\n digitStyle?: React.CSSProperties;\r\n}\r\n\r\nexport function Counter({\r\n value,\r\n fontSize = 100,\r\n padding = 0,\r\n places = [100, 10, 1],\r\n gap = 8,\r\n textColor = \"#000000\",\r\n fontWeight = 900,\r\n containerStyle,\r\n digitStyle,\r\n}: CounterProps) {\r\n const height = fontSize + padding;\r\n\r\n return (\r\n <div style={{ display: \"flex\", gap, fontSize, color: textColor, fontWeight, ...containerStyle }}>\r\n {places.map((place) => (\r\n <Digit key={place} place={place} value={value} height={height} digitStyle={digitStyle} />\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default Counter;\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var react=require('react'),framerMotion=require('framer-motion'),jsxRuntime=require('react/jsx-runtime');function 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]=react.useState(r),[g,M]=react.useState(false),[A,m]=react.useState(false),[R,z]=react.useState(new Set),[H,j]=react.useState(false),D=react.useRef(null);react.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]),react.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 jsxRuntime.jsxs(framerMotion.motion.span,{className:P,ref:D,style:{display:"inline-block",whiteSpace:"pre-wrap"},...J,...k,children:[jsxRuntime.jsx("span",{className:"sr-only",children:T}),jsxRuntime.jsx("span",{"aria-hidden":"true",children:T.split("").map((o,i)=>{let l=R.has(i)||!A||!g;return jsxRuntime.jsx("span",{className:l?L:C,children:o},i)})})]})}var V=F;exports.DecryptedText=F;exports.default=V;//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.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.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
|