@tuwaio/nova-core 1.0.0-fix-integrate-orbit-alpha.27.5a66ae1 → 1.0.0-fix-integrate-orbit-alpha.28.5540261
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/index.cjs +3 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +30 -1
- package/dist/index.d.cts +32 -13
- package/dist/index.d.ts +32 -13
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/package.json +8 -8
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';var framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime'),l=require('react'),r=require('@radix-ui/react-dialog');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var l__namespace=/*#__PURE__*/_interopNamespace(l);var r__namespace=/*#__PURE__*/_interopNamespace(r);var
|
|
1
|
+
'use strict';var framerMotion=require('framer-motion'),clsx=require('clsx'),tailwindMerge=require('tailwind-merge'),jsxRuntime=require('react/jsx-runtime'),l=require('react'),r=require('@radix-ui/react-dialog');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var l__namespace=/*#__PURE__*/_interopNamespace(l);var r__namespace=/*#__PURE__*/_interopNamespace(r);var J="novacore:cursor-pointer novacore:rounded-md novacore:bg-[var(--tuwa-standart-button-bg)] novacore:px-3 novacore:py-2 novacore:flex novacore:items-center novacore:gap-1 novacore:text-sm novacore:font-semibold novacore:text-[var(--tuwa-text-primary)] novacore:transition-colors novacore:hover:bg-[var(--tuwa-standart-button-hover)] novacore:disabled:cursor-not-allowed novacore:disabled:opacity-50";function i(...o){return tailwindMerge.twMerge(clsx.clsx(o))}var v=o=>o&&typeof o=="object"&&!Array.isArray(o);function R(o,e){let a={...o};return v(o)&&v(e)&&Object.keys(e).forEach(n=>{let t=o[n],s=e[n];v(t)&&v(s)?a[n]=R(t,s):a[n]=s;}),a}function q(o,e,a){if(!o)return "";if(o.length<=e+a)return o;let n=o.slice(0,e),t=o.slice(o.length-a);return `${n}...${t}`}function co({className:o,strokeWidth:e,isOpen:a}){return jsxRuntime.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:e??2,stroke:"currentColor",className:i("novacore:w-4 novacore:h-4 novacore:text-[var(--tuwa-text-secondary)]",o),children:[jsxRuntime.jsx(framerMotion.AnimatePresence,{children:a&&jsxRuntime.jsx(framerMotion.motion.path,{strokeLinecap:"round",strokeLinejoin:"round",d:"m4.5 15.75 7.5-7.5 7.5 7.5",variants:{hidden:{translateY:3,scaleY:.8,opacity:0},visible:{translateY:0,scaleY:1,opacity:1}},initial:"hidden",animate:"visible",transition:{duration:.4}})}),jsxRuntime.jsx(framerMotion.AnimatePresence,{children:!a&&jsxRuntime.jsx(framerMotion.motion.path,{strokeLinecap:"round",strokeLinejoin:"round",d:"m19.5 8.25-7.5 7.5-7.5-7.5",className:"novacore:relative",variants:{hidden:{translateY:-3,scaleY:.8,opacity:0},visible:{translateY:0,scaleY:1,opacity:1}},initial:"hidden",animate:"visible",transition:{duration:.4}})})]})}var T=l__namespace.forwardRef(({className:o,...e},a)=>jsxRuntime.jsxs("svg",{ref:a,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:i("novacore:h-5 novacore:w-5 novacore:text-[var(--tuwa-text-primary)] novacore:transition-colors",o),...e,children:[jsxRuntime.jsx("path",{d:"M18 6 6 18"}),jsxRuntime.jsx("path",{d:"m6 6 12 12"})]}));T.displayName="CloseIcon";var wo=r__namespace.Root,bo=r__namespace.Trigger,A=r__namespace.Portal,xo=r__namespace.Close,L={initial:{opacity:0,scale:.9,y:20},animate:{opacity:1,scale:1,y:0},exit:{opacity:0,scale:.9,transition:{duration:.2}}},S={initial:{opacity:0},animate:{opacity:1},exit:{opacity:0}},N=({className:o,backdropAnimation:e})=>(l__namespace.useEffect(()=>(typeof window<"u"&&window.document.body.classList.add("NovaModalOpen"),()=>{typeof window<"u"&&window.document.body.classList.remove("NovaModalOpen");}),[]),jsxRuntime.jsx(framerMotion.AnimatePresence,{children:jsxRuntime.jsx(framerMotion.motion.div,{variants:e??S,transition:{duration:.2,ease:"easeInOut"},animate:"animate",initial:"initial",exit:"exit",className:"novacore:relative novacore:rounded-t-2xl novacore:sm:rounded-2xl novacore:overflow-hidden",children:jsxRuntime.jsx("div",{className:i("novacore:fixed novacore:inset-0 novacore:z-50 novacore:bg-black/55 novacore:backdrop-blur-sm novacore:backdrop-saturate-150",o)})})}));N.displayName=r__namespace.Overlay.displayName;var V=l__namespace.forwardRef(({className:o,children:e,modalAnimation:a,backdropAnimation:n,...t},s)=>jsxRuntime.jsxs(A,{children:[jsxRuntime.jsx(N,{backdropAnimation:n}),jsxRuntime.jsx(r__namespace.Content,{"aria-describedby":"tuwa:modal-content",ref:s,className:i("NovaNoScrolling novacore:fixed novacore:bottom-0 novacore:left-0 novacore:p-0 novacore:sm:bottom-auto novacore:sm:left-[50%] novacore:sm:top-[50%] novacore:sm:translate-x-[-50%] novacore:sm:translate-y-[-50%] novacore:z-50 novacore:sm:p-4 novacore:outline-none",o),...t,children:jsxRuntime.jsx(framerMotion.motion.div,{layout:true,className:"NovaNoScrolling novacore:relative novacore:overflow-hidden",transition:{layout:{duration:.2,ease:[.1,.1,.2,1]}},children:jsxRuntime.jsx(framerMotion.AnimatePresence,{children:jsxRuntime.jsx(framerMotion.motion.div,{variants:a??L,transition:{duration:.2,ease:"easeInOut"},animate:"animate",initial:"initial",exit:"exit",className:"NovaNoScrolling novacore:relative novacore:rounded-t-2xl novacore:sm:rounded-2xl novacore:overflow-hidden",children:jsxRuntime.jsx("div",{className:i("NovaNoScrolling novacore:relative novacore:flex novacore:max-h-[98dvh] novacore:w-full novacore:flex-col novacore:gap-3 novacore:overflow-y-auto novacore:rounded-t-2xl novacore:sm:rounded-2xl novacore:shadow-2xl","novacore:border novacore:border-[var(--tuwa-border-primary)] novacore:bg-[var(--tuwa-bg-primary)]"),children:e})})})})})]}));V.displayName=r__namespace.Content.displayName;var B=({className:o,...e})=>jsxRuntime.jsx("div",{"aria-describedby":"tuwa:modal-header",className:i("novacore:sticky novacore:flex novacore:top-0 novacore:z-11 novacore:w-full novacore:flex-row novacore:items-center novacore:justify-between","novacore:border-b novacore:border-[var(--tuwa-border-primary)] novacore:bg-[var(--tuwa-bg-primary)] novacore:p-4",o),...e});B.displayName="DialogHeader";var W=({className:o,...e})=>jsxRuntime.jsx("div",{"aria-describedby":"tuwa:modal-footer",className:i("novacore:flex novacore:flex-col-reverse novacore:sm:flex-row novacore:sm:justify-end novacore:sm:space-x-2",o),...e});W.displayName="DialogFooter";var H=l__namespace.forwardRef(({className:o,...e},a)=>jsxRuntime.jsx(r__namespace.Title,{ref:a,"aria-describedby":"tuwa:modal-title",className:i("novacore:text-lg novacore:font-bold novacore:leading-none novacore:tracking-tight novacore:text-[var(--tuwa-text-primary)] novacore:m-0",o),...e}));H.displayName=r__namespace.Title.displayName;var O=l__namespace.forwardRef(({className:o,...e},a)=>jsxRuntime.jsx(r__namespace.Description,{"aria-describedby":"tuwa:modal-description",ref:a,className:i("novacore:text-sm novacore:text-[var(--tuwa-text-secondary)]",o),...e}));O.displayName=r__namespace.Description.displayName;function Po({starsCount:o}){let[e,a]=l.useState(false);l.useEffect(()=>a(true),[]);let n=l.useMemo(()=>{if(!e)return [];let t=o??200;return Array.from({length:t}).map(()=>({x:Math.random()*window.innerWidth,y:Math.random()*window.innerHeight,r:Math.random()*1+.5,isSupernova:Math.random()<.1,delay:Math.random()*10,duration:5+Math.random()*5}))},[e]);return jsxRuntime.jsx("div",{className:"novacore:absolute novacore:inset-0 novacore:z-1 novacore:h-full novacore:w-full novacore:overflow-hidden",children:jsxRuntime.jsxs("svg",{width:"100%",height:"100%",xmlns:"http://www.w3.org/2000/svg",children:[jsxRuntime.jsx("defs",{children:jsxRuntime.jsx("style",{children:`
|
|
2
2
|
/* Pulse animation now includes scale for a more organic feel. */
|
|
3
3
|
@keyframes pulse {
|
|
4
4
|
0%, 100% {
|
|
@@ -44,5 +44,6 @@
|
|
|
44
44
|
transform-origin: center;
|
|
45
45
|
stroke-width: 2;
|
|
46
46
|
}
|
|
47
|
-
`})}),n.map((t,
|
|
47
|
+
`})}),n.map((t,s)=>jsxRuntime.jsx("circle",{cx:t.x,cy:t.y,r:t.r,fill:"rgba(var(--tuwa-bg-primary), 0.7)",className:t.isSupernova?"supernova":"pulsar",style:{animationDelay:`${t.delay}s`,animationDuration:`${t.duration}s`}},s))]})})}function Mo({closeToast:o}){return jsxRuntime.jsx("button",{type:"button",onClick:o,"aria-label":"Close toast notification",title:"Close toast notification",className:i("novacore:absolute novacore:top-2 novacore:right-2 novacore:cursor-pointer novacore:rounded-full novacore:p-1","novacore:text-[var(--tuwa-text-tertiary)] novacore:transition-colors","novacore:hover:bg-[var(--tuwa-bg-muted)] novacore:hover:text-[var(--tuwa-text-primary)]"),children:jsxRuntime.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor",className:"novacore:h-5 novatx:w-5",children:jsxRuntime.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18 18 6M6 6l12 12"})})})}function Lo(o=2e3){let[e,a]=l.useState(false),[n,t]=l.useState(null),s=l.useCallback(async f=>{if(f)try{await navigator.clipboard.writeText(f),a(!0),t(null),setTimeout(()=>a(!1),o);}catch(g){let y=g instanceof Error?g:new Error("Failed to copy text.");console.error(y),t(y),setTimeout(()=>t(null),o);}},[o]);return {isCopied:e,copy:s,error:n}}function Bo(o){let e=t=>typeof window<"u"?window.matchMedia(t).matches:false,[a,n]=l.useState(e(o));return l.useEffect(()=>{let t=window.matchMedia(o),s=()=>n(t.matches);return s(),window.addEventListener("resize",s),()=>window.removeEventListener("resize",s)},[o]),a}
|
|
48
|
+
exports.ChevronArrowWithAnim=co;exports.CloseIcon=T;exports.Dialog=wo;exports.DialogClose=xo;exports.DialogContent=V;exports.DialogDescription=O;exports.DialogFooter=W;exports.DialogHeader=B;exports.DialogOverlay=N;exports.DialogPortal=A;exports.DialogTitle=H;exports.DialogTrigger=bo;exports.StarsBackground=Po;exports.ToastCloseButton=Mo;exports.cn=i;exports.deepMerge=R;exports.standardButtonClasses=J;exports.textCenterEllipsis=q;exports.useCopyToClipboard=Lo;exports.useMediaQuery=Bo;//# sourceMappingURL=index.cjs.map
|
|
48
49
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/classes.ts","../src/utils/cn.ts","../src/utils/deepMerge.ts","../src/utils/textCenterEllipsis.ts","../src/components/ChevronArrowWithAnim.tsx","../src/components/CloseIcon.tsx","../src/components/Modal.tsx","../src/components/StarsBackground.tsx","../src/hooks/useCopyToClipboard.ts","../src/hooks/useMediaQuery.ts"],"names":["standardButtonClasses","cn","inputs","twMerge","clsx","isObject","item","deepMerge","target","source","output","key","targetValue","sourceValue","textCenterEllipsis","str","from","to","start","end","ChevronArrowWithAnim","className","strokeWidth","isOpen","jsxs","jsx","AnimatePresence","motion","CloseIcon","x","props","ref","Dialog","r","DialogTrigger","DialogPortal","DialogClose","defaultModalAnimation","defaultModalBackdropAnimation","DialogOverlay","backdropAnimation","l","DialogContent","children","modalAnimation","DialogHeader","DialogFooter","DialogTitle","DialogDescription","StarsBackground","starsCount","isMounted","setIsMounted","useState","useEffect","stars","useMemo","numStars","star","useCopyToClipboard","timeout","isCopied","setIsCopied","error","setError","copy","useCallback","text","e","copyError","useMediaQuery","query","getMatches","q","matches","setMatches","media","listener"],"mappings":"4mBAAO,IAAMA,CAAAA,CACX,8YCuBK,SAASC,KAAMC,CAAAA,CAA8B,CAClD,OAAOC,qBAAAA,CAAQC,SAAAA,CAAKF,CAAM,CAAC,CAC7B,CChBA,IAAMG,CAAAA,CAAYC,CAAAA,EACTA,GAAQ,OAAOA,CAAAA,EAAS,QAAA,EAAY,CAAC,KAAA,CAAM,OAAA,CAAQA,CAAI,CAAA,CAkBzD,SAASC,EAA4BC,CAAAA,CAAWC,CAAAA,CAAuB,CAE5E,IAAMC,CAAAA,CAAS,CAAE,GAAGF,CAAO,CAAA,CAE3B,OAAIH,CAAAA,CAASG,CAAM,GAAKH,CAAAA,CAASI,CAAM,GAErC,MAAA,CAAO,IAAA,CAAKA,CAAM,CAAA,CAAE,OAAA,CAASE,CAAAA,EAAQ,CACnC,IAAMC,CAAAA,CAAcJ,EAAOG,CAAc,CAAA,CACnCE,EAAcJ,CAAAA,CAAOE,CAAc,CAAA,CAGrCN,CAAAA,CAASO,CAAW,CAAA,EAAKP,EAASQ,CAAW,CAAA,CAG9CH,EAA+BC,CAAG,CAAA,CAAIJ,EAAUK,CAAAA,CAAaC,CAAW,CAAA,CAGxEH,CAAAA,CAA+BC,CAAG,CAAA,CAAIE,EAE3C,CAAC,CAAA,CAGIH,CACT,CCjCO,SAASI,EAAmBC,CAAAA,CAAgCC,CAAAA,CAAcC,CAAAA,CAAoB,CACnG,GAAI,CAACF,EACH,OAAO,EAAA,CAIT,GAAIA,CAAAA,CAAI,MAAA,EAAUC,EAAOC,CAAAA,CACvB,OAAOF,CAAAA,CAGT,IAAMG,CAAAA,CAAQH,CAAAA,CAAI,MAAM,CAAA,CAAGC,CAAI,EACzBG,CAAAA,CAAMJ,CAAAA,CAAI,MAAMA,CAAAA,CAAI,MAAA,CAASE,CAAE,CAAA,CAErC,OAAO,CAAA,EAAGC,CAAK,CAAA,GAAA,EAAMC,CAAG,EAC1B,CC7BO,SAASC,EAAAA,CAAqB,CACnC,SAAA,CAAAC,CAAAA,CACA,YAAAC,CAAAA,CACA,MAAA,CAAAC,CACF,CAAA,CAIG,CACD,OACEC,eAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAM,6BACN,IAAA,CAAK,MAAA,CACL,QAAQ,WAAA,CACR,WAAA,CAAaF,GAAe,CAAA,CAC5B,MAAA,CAAO,cAAA,CACP,SAAA,CAAWrB,CAAAA,CAAG,sEAAA,CAAwEoB,CAAS,CAAA,CAE/F,QAAA,CAAA,CAAAI,eAACC,4BAAAA,CAAA,CACE,SAAAH,CAAAA,EACCE,cAAAA,CAACE,mBAAAA,CAAO,IAAA,CAAP,CACC,aAAA,CAAc,QACd,cAAA,CAAe,OAAA,CACf,EAAE,4BAAA,CACF,QAAA,CAAU,CACR,MAAA,CAAQ,CAAE,UAAA,CAAY,CAAA,CAAG,MAAA,CAAQ,EAAA,CAAK,QAAS,CAAE,CAAA,CACjD,QAAS,CAAE,UAAA,CAAY,EAAG,MAAA,CAAQ,CAAA,CAAG,OAAA,CAAS,CAAE,CAClD,CAAA,CACA,QAAQ,QAAA,CACR,OAAA,CAAQ,UACR,UAAA,CAAY,CAAE,SAAU,EAAI,CAAA,CAC9B,CAAA,CAEJ,CAAA,CAEAF,cAAAA,CAACC,4BAAAA,CAAA,CACE,QAAA,CAAA,CAACH,CAAAA,EACAE,eAACE,mBAAAA,CAAO,IAAA,CAAP,CACC,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,CAAA,CAAE,4BAAA,CACF,UAAU,mBAAA,CACV,QAAA,CAAU,CACR,MAAA,CAAQ,CAAE,WAAY,EAAA,CAAI,MAAA,CAAQ,EAAA,CAAK,OAAA,CAAS,CAAE,CAAA,CAClD,QAAS,CAAE,UAAA,CAAY,EAAG,MAAA,CAAQ,CAAA,CAAG,QAAS,CAAE,CAClD,CAAA,CACA,OAAA,CAAQ,QAAA,CACR,OAAA,CAAQ,UACR,UAAA,CAAY,CAAE,SAAU,EAAI,CAAA,CAC9B,EAEJ,CAAA,CAAA,CACF,CAEJ,KCnDaC,CAAAA,CAAkBC,YAAA,CAAA,UAAA,CAC7B,CAAC,CAAE,SAAA,CAAAR,CAAAA,CAAW,GAAGS,CAAM,CAAA,CAAGC,IACxBP,eAAAA,CAAC,KAAA,CAAA,CACC,IAAKO,CAAAA,CACL,KAAA,CAAM,4BAAA,CACN,OAAA,CAAQ,WAAA,CACR,IAAA,CAAK,OACL,MAAA,CAAO,cAAA,CACP,YAAY,GAAA,CACZ,aAAA,CAAc,QACd,cAAA,CAAe,OAAA,CACf,SAAA,CAAW9B,CAAAA,CACT,+FAAA,CACAoB,CACF,EACC,GAAGS,CAAAA,CAEJ,UAAAL,cAAAA,CAAC,MAAA,CAAA,CAAK,EAAE,YAAA,CAAa,CAAA,CACrBA,cAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,YAAA,CAAa,GACvB,CAEJ,EACAG,EAAU,WAAA,CAAc,WAAA,CCvBxB,IAAMI,EAAAA,CAAyBC,YAAA,CAAA,IAAA,CACzBC,GAAgCD,YAAA,CAAA,OAAA,CAChCE,CAAAA,CAA+BF,oBAC/BG,EAAAA,CAA8BH,YAAA,CAAA,KAAA,CAE9BI,EAAkC,CACtC,OAAA,CAAS,CAAE,OAAA,CAAS,CAAA,CAAG,KAAA,CAAO,GAAK,CAAA,CAAG,EAAG,EACzC,OAAA,CAAS,CAAE,QAAS,CAAA,CAAG,KAAA,CAAO,CAAA,CAAG,CAAA,CAAG,CAAE,CAAA,CACtC,KAAM,CACJ,OAAA,CAAS,EACT,KAAA,CAAO,EAAA,CACP,WAAY,CACV,QAAA,CAAU,EACZ,CACF,CACF,CAAA,CAEMC,EAA0C,CAC9C,OAAA,CAAS,CAAE,OAAA,CAAS,CAAE,EACtB,OAAA,CAAS,CAAE,OAAA,CAAS,CAAE,CAAA,CACtB,IAAA,CAAM,CAAE,OAAA,CAAS,CAAE,CACrB,CAAA,CAEMC,CAAAA,CAAgB,CAAC,CAAE,SAAA,CAAAlB,CAAAA,CAAW,iBAAA,CAAAmB,CAAkB,CAAA,IAC9CC,YAAA,CAAA,SAAA,CAAU,KACV,OAAO,MAAA,CAAW,KACpB,MAAA,CAAO,QAAA,CAAS,KAAK,SAAA,CAAU,GAAA,CAAI,eAAe,CAAA,CAE7C,IAAM,CACP,OAAO,MAAA,CAAW,GAAA,EACpB,OAAO,QAAA,CAAS,IAAA,CAAK,UAAU,MAAA,CAAO,eAAe,EAEzD,CAAA,CAAA,CACC,EAAE,EAEHhB,cAAAA,CAACC,4BAAAA,CAAA,CACC,QAAA,CAAAD,cAAAA,CAACE,oBAAO,GAAA,CAAP,CACC,QAAA,CAAUa,CAAAA,EAAqBF,CAAAA,CAC/B,UAAA,CAAY,CAAE,QAAA,CAAU,EAAA,CAAK,KAAM,WAAY,CAAA,CAC/C,QAAQ,SAAA,CACR,OAAA,CAAQ,SAAA,CACR,IAAA,CAAK,MAAA,CACL,SAAA,CAAU,4FAEV,QAAA,CAAAb,cAAAA,CAAC,OACC,SAAA,CAAWxB,CAAAA,CACT,8HACAoB,CACF,CAAA,CACF,CAAA,CACF,CAAA,CACF,CAAA,EAGJkB,CAAAA,CAAc,YAA8BN,YAAA,CAAA,OAAA,CAAQ,WAAA,KAE9CS,CAAAA,CAAsBD,YAAA,CAAA,UAAA,CAM1B,CAAC,CAAE,SAAA,CAAApB,CAAAA,CAAW,QAAA,CAAAsB,CAAAA,CAAU,cAAA,CAAAC,EAAgB,iBAAA,CAAAJ,CAAAA,CAAmB,GAAGV,CAAM,CAAA,CAAGC,IACvEP,eAAAA,CAACW,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAV,cAAAA,CAACc,CAAAA,CAAA,CAAc,iBAAA,CAAmBC,CAAAA,CAAmB,EAErDf,cAAAA,CAAiBQ,YAAA,CAAA,OAAA,CAAhB,CACC,kBAAA,CAAiB,oBAAA,CACjB,GAAA,CAAKF,CAAAA,CACL,SAAA,CAAW9B,CAAAA,CACT,uQACAoB,CACF,CAAA,CACC,GAAGS,CAAAA,CAEJ,QAAA,CAAAL,eAACE,mBAAAA,CAAO,GAAA,CAAP,CACC,MAAA,CAAM,IAAA,CACN,SAAA,CAAU,6DACV,UAAA,CAAY,CACV,OAAQ,CACN,QAAA,CAAU,GACV,IAAA,CAAM,CAAC,EAAA,CAAK,EAAA,CAAK,EAAA,CAAK,CAAC,CACzB,CACF,CAAA,CAEA,SAAAF,cAAAA,CAACC,4BAAAA,CAAA,CACC,QAAA,CAAAD,cAAAA,CAACE,mBAAAA,CAAO,GAAA,CAAP,CACC,QAAA,CAAUiB,GAAkBP,CAAAA,CAC5B,UAAA,CAAY,CAAE,QAAA,CAAU,EAAA,CAAK,KAAM,WAAY,CAAA,CAC/C,OAAA,CAAQ,SAAA,CACR,OAAA,CAAQ,SAAA,CACR,KAAK,MAAA,CACL,SAAA,CAAU,4GAEV,QAAA,CAAAZ,cAAAA,CAAC,OACC,SAAA,CAAWxB,CAAAA,CACT,qNAAA,CACA,mGACF,CAAA,CAEC,QAAA,CAAA0C,EACH,CAAA,CACF,CAAA,CACF,EACF,CAAA,CACF,CAAA,CAAA,CACF,CACD,EACDD,CAAAA,CAAc,WAAA,CAA8BT,YAAA,CAAA,OAAA,CAAQ,WAAA,CAEpD,IAAMY,EAAe,CAAC,CAAE,UAAAxB,CAAAA,CAAW,GAAGS,CAAM,CAAA,GAC1CL,cAAAA,CAAC,KAAA,CAAA,CACC,kBAAA,CAAiB,mBAAA,CACjB,SAAA,CAAWxB,EACT,6IAAA,CACA,kHAAA,CACAoB,CACF,CAAA,CACC,GAAGS,EACN,EAEFe,CAAAA,CAAa,WAAA,CAAc,cAAA,CAE3B,IAAMC,CAAAA,CAAe,CAAC,CAAE,SAAA,CAAAzB,EAAW,GAAGS,CAAM,IAC1CL,cAAAA,CAAC,KAAA,CAAA,CACC,kBAAA,CAAiB,mBAAA,CACjB,SAAA,CAAWxB,CAAAA,CACT,6GACAoB,CACF,CAAA,CACC,GAAGS,CAAAA,CACN,EAEFgB,EAAa,WAAA,CAAc,cAAA,CAE3B,IAAMC,CAAAA,CAAoBN,YAAA,CAAA,UAAA,CAGxB,CAAC,CAAE,SAAA,CAAApB,CAAAA,CAAW,GAAGS,CAAM,CAAA,CAAGC,IAC1BN,cAAAA,CAAiBQ,YAAA,CAAA,KAAA,CAAhB,CACC,GAAA,CAAKF,CAAAA,CACL,kBAAA,CAAiB,mBACjB,SAAA,CAAW9B,CAAAA,CACT,0IACAoB,CACF,CAAA,CACC,GAAGS,CAAAA,CACN,CACD,EACDiB,CAAAA,CAAY,WAAA,CAA8Bd,YAAA,CAAA,KAAA,CAAM,YAEhD,IAAMe,CAAAA,CAA0BP,wBAG9B,CAAC,CAAE,UAAApB,CAAAA,CAAW,GAAGS,CAAM,CAAA,CAAGC,CAAAA,GAC1BN,cAAAA,CAAiBQ,yBAAhB,CACC,kBAAA,CAAiB,yBACjB,GAAA,CAAKF,CAAAA,CACL,UAAW9B,CAAAA,CAAG,6DAAA,CAA+DoB,CAAS,CAAA,CACrF,GAAGS,CAAAA,CACN,CACD,EACDkB,CAAAA,CAAkB,YAA8Bf,YAAA,CAAA,WAAA,CAAY,WAAA,CCtKrD,SAASgB,EAAAA,CAAgB,CAAE,UAAA,CAAAC,CAAW,CAAA,CAA4B,CACvE,GAAM,CAACC,EAAWC,CAAY,CAAA,CAAIC,WAAS,KAAK,CAAA,CAChDC,WAAAA,CAAU,IAAMF,CAAAA,CAAa,IAAI,EAAG,EAAE,EAEtC,IAAMG,CAAAA,CAAQC,UAAQ,IAAM,CAC1B,GAAI,CAACL,CAAAA,CACH,OAAO,EAAC,CAGV,IAAMM,EAAWP,CAAAA,EAAc,GAAA,CAC/B,OAAO,KAAA,CAAM,IAAA,CAAK,CAAE,MAAA,CAAQO,CAAS,CAAC,EAAE,GAAA,CAAI,KAAO,CACjD,CAAA,CAAG,IAAA,CAAK,QAAO,CAAI,MAAA,CAAO,UAAA,CAC1B,CAAA,CAAG,IAAA,CAAK,MAAA,GAAW,MAAA,CAAO,WAAA,CAC1B,EAAG,IAAA,CAAK,MAAA,GAAW,CAAA,CAAI,EAAA,CACvB,WAAA,CAAa,IAAA,CAAK,MAAA,EAAO,CAAI,GAC7B,KAAA,CAAO,IAAA,CAAK,QAAO,CAAI,EAAA,CACvB,SAAU,CAAA,CAAI,IAAA,CAAK,MAAA,EAAO,CAAI,CAChC,CAAA,CAAE,CAEJ,CAAA,CAAG,CAACN,CAAS,CAAC,CAAA,CAEd,OACE1B,cAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,0GAAA,CACb,QAAA,CAAAD,eAAAA,CAAC,OAAI,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,4BAAA,CACpC,UAAAC,cAAAA,CAAC,MAAA,CAAA,CACC,QAAA,CAAAA,cAAAA,CAAC,OAAA,CAAA,CACE,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAA,CAAA,CA+CH,CAAA,CACF,EAEC8B,CAAAA,CAAM,GAAA,CAAI,CAACG,CAAAA,CAAM,CAAA,GAChBjC,cAAAA,CAAC,QAAA,CAAA,CAEC,EAAA,CAAIiC,CAAAA,CAAK,EACT,EAAA,CAAIA,CAAAA,CAAK,EACT,CAAA,CAAGA,CAAAA,CAAK,EACR,IAAA,CAAM,mCAAA,CACN,SAAA,CAAWA,CAAAA,CAAK,WAAA,CAAc,WAAA,CAAc,SAC5C,KAAA,CAAO,CACL,eAAgB,CAAA,EAAGA,CAAAA,CAAK,KAAK,CAAA,CAAA,CAAA,CAC7B,iBAAA,CAAmB,CAAA,EAAGA,CAAAA,CAAK,QAAQ,CAAA,CAAA,CACrC,GATK,CAUP,CACD,GACH,CAAA,CACF,CAEJ,CClEO,SAASC,EAAAA,CAAmBC,CAAAA,CAAU,IAI3C,CACA,GAAM,CAACC,CAAAA,CAAUC,CAAW,CAAA,CAAIT,UAAAA,CAAS,KAAK,CAAA,CACxC,CAACU,CAAAA,CAAOC,CAAQ,EAAIX,UAAAA,CAAuB,IAAI,EAE/CY,CAAAA,CAAOC,aAAAA,CACX,MAAOC,CAAAA,EAAiB,CACtB,GAAKA,EAEL,GAAI,CACF,MAAM,SAAA,CAAU,SAAA,CAAU,UAAUA,CAAI,CAAA,CACxCL,CAAAA,CAAY,CAAA,CAAI,CAAA,CAChBE,CAAAA,CAAS,IAAI,CAAA,CAEb,UAAA,CAAW,IAAMF,CAAAA,CAAY,CAAA,CAAK,CAAA,CAAGF,CAAO,EAC9C,CAAA,MAASQ,CAAAA,CAAG,CACV,IAAMC,CAAAA,CAAYD,aAAa,KAAA,CAAQA,CAAAA,CAAI,IAAI,KAAA,CAAM,sBAAsB,EAC3E,OAAA,CAAQ,KAAA,CAAMC,CAAS,CAAA,CACvBL,CAAAA,CAASK,CAAS,EAGlB,UAAA,CAAW,IAAML,EAAS,IAAI,CAAA,CAAGJ,CAAO,EAC1C,CACF,CAAA,CACA,CAACA,CAAO,CACV,EAEA,OAAO,CAAE,SAAAC,CAAAA,CAAU,IAAA,CAAAI,EAAM,KAAA,CAAAF,CAAM,CACjC,CCpDO,SAASO,EAAAA,CAAcC,EAAwB,CACpD,IAAMC,CAAAA,CAAcC,CAAAA,EACd,OAAO,MAAA,CAAW,IACb,MAAA,CAAO,UAAA,CAAWA,CAAC,CAAA,CAAE,OAAA,CAEvB,MAGH,CAACC,CAAAA,CAASC,CAAU,CAAA,CAAItB,UAAAA,CAAkBmB,CAAAA,CAAWD,CAAK,CAAC,CAAA,CAEjE,OAAAjB,WAAAA,CAAU,IAAM,CACd,IAAMsB,CAAAA,CAAQ,MAAA,CAAO,UAAA,CAAWL,CAAK,CAAA,CAC/BM,EAAW,IAAMF,CAAAA,CAAWC,EAAM,OAAO,CAAA,CAG/C,OAAAC,CAAAA,EAAS,CACT,MAAA,CAAO,gBAAA,CAAiB,QAAA,CAAUA,CAAQ,EAEnC,IAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUA,CAAQ,CAC5D,EAAG,CAACN,CAAK,CAAC,CAAA,CAEHG,CACT","file":"index.cjs","sourcesContent":["export const standardButtonClasses =\n 'novacore:cursor-pointer novacore:rounded-md novacore:bg-[var(--tuwa-standart-button-bg)] novacore:px-3 novacore:py-2 novacore:flex novacore:items-center novacore:gap-1 novacore:text-sm novacore:font-semibold novacore:text-[var(--tuwa-text-primary)] novacore:transition-colors novacore:hover:bg-[var(--tuwa-standart-button-hover)] novacore:disabled:cursor-not-allowed novacore:disabled:opacity-50';\n","/**\n * @file This file contains a utility function for conditionally merging Tailwind CSS classes.\n */\n\nimport { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * A utility function to conditionally join class names together and resolve\n * conflicting Tailwind CSS classes.\n *\n * It combines the functionality of `clsx` and `tailwind-merge`.\n *\n * @param {...ClassValue[]} inputs - A list of class values to be combined.\n * This can include strings, numbers, objects, arrays, and booleans.\n * @returns {string} The final, merged class name string.\n *\n * @example\n * cn('p-4', 'bg-red-500', { 'font-bold': true }); // => 'p-4 bg-red-500 font-bold'\n * cn('p-2', 'p-4'); // => 'p-4' (tailwind-merge resolves the conflict)\n *\n * @see https://github.com/dcastil/tailwind-merge\n * @see https://github.com/lukeed/clsx\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","/**\n * @file This file contains a utility for performing a deep (recursive) merge of two objects.\n */\n\n/**\n * Checks if the provided item is a plain object (i.e., not null and not an array).\n *\n * @param {any} item - The item to check.\n * @returns {item is Record<string, any>} True if the item is a plain object, otherwise false.\n */\nconst isObject = (item: any): item is Record<string, any> => {\n return item && typeof item === 'object' && !Array.isArray(item);\n};\n\n/**\n * Recursively merges the properties of a source object into a target object.\n * This function creates a new object and does not mutate the original target.\n *\n * @template T - The type of the objects being merged.\n * @param {T} target - The base object.\n * @param {Partial<T>} source - The object with properties to merge into the target.\n * @returns {T} A new object representing the merged result.\n *\n * @example\n * const defaults = { a: 1, b: { c: 2, d: 3 } };\n * const custom = { b: { c: 99 } };\n * const result = deepMerge(defaults, custom);\n * // result will be { a: 1, b: { c: 99, d: 3 } }\n */\nexport function deepMerge<T extends object>(target: T, source: Partial<T>): T {\n // Start with a shallow copy of the target to avoid mutation.\n const output = { ...target };\n\n if (isObject(target) && isObject(source)) {\n // Iterate over the keys in the source object.\n Object.keys(source).forEach((key) => {\n const targetValue = target[key as keyof T];\n const sourceValue = source[key as keyof T];\n\n // If the value is an object in both target and source, merge them recursively.\n if (isObject(targetValue) && isObject(sourceValue)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n (output as Record<string, any>)[key] = deepMerge(targetValue, sourceValue);\n } else {\n // Otherwise, the source value overwrites the target value.\n (output as Record<string, any>)[key] = sourceValue;\n }\n });\n }\n\n return output;\n}\n","/**\n * @file This file contains a utility function for truncating a string with a center ellipsis.\n */\n\n/**\n * Truncates a string by showing a specified number of characters from the start and end,\n * with an ellipsis in the middle. If the string is too short to be truncated, it's returned as is.\n *\n * @param {string} str - The string to truncate.\n * @param {number} from - The number of characters to show from the beginning of the string.\n * @param {number} to - The number of characters to show from the end of the string.\n * @returns {string} The truncated string, or the original string if it's too short.\n *\n * @example\n * const hash = '0x1234567890abcdef1234567890abcdef';\n * textCenterEllipsis(hash, 6, 4); // => \"0x1234...cdef\"\n *\n * textCenterEllipsis('short', 6, 4); // => \"short\"\n */\nexport function textCenterEllipsis(str: string | undefined | null, from: number, to: number): string {\n if (!str) {\n return '';\n }\n\n // If the string is short enough, don't truncate it.\n if (str.length <= from + to) {\n return str;\n }\n\n const start = str.slice(0, from);\n const end = str.slice(str.length - to);\n\n return `${start}...${end}`;\n}\n","import { AnimatePresence, motion } from 'framer-motion';\n\nimport { cn } from '../utils';\n\nexport function ChevronArrowWithAnim({\n className,\n strokeWidth,\n isOpen,\n}: {\n className?: string;\n strokeWidth?: number;\n isOpen?: boolean;\n}) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={strokeWidth ?? 2}\n stroke=\"currentColor\"\n className={cn('novacore:w-4 novacore:h-4 novacore:text-[var(--tuwa-text-secondary)]', className)}\n >\n <AnimatePresence>\n {isOpen && (\n <motion.path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"m4.5 15.75 7.5-7.5 7.5 7.5\"\n variants={{\n hidden: { translateY: 3, scaleY: 0.8, opacity: 0 },\n visible: { translateY: 0, scaleY: 1, opacity: 1 },\n }}\n initial=\"hidden\"\n animate=\"visible\"\n transition={{ duration: 0.4 }}\n />\n )}\n </AnimatePresence>\n\n <AnimatePresence>\n {!isOpen && (\n <motion.path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"m19.5 8.25-7.5 7.5-7.5-7.5\"\n className=\"novacore:relative\"\n variants={{\n hidden: { translateY: -3, scaleY: 0.8, opacity: 0 },\n visible: { translateY: 0, scaleY: 1, opacity: 1 },\n }}\n initial=\"hidden\"\n animate=\"visible\"\n transition={{ duration: 0.4 }}\n />\n )}\n </AnimatePresence>\n </svg>\n );\n}\n","import * as React from 'react';\n\nimport { cn } from '../utils';\n\n/**\n * A reusable close button icon (X mark) styled with TUWA color scheme.\n */\nexport const CloseIcon = React.forwardRef<SVGSVGElement, React.SVGAttributes<SVGSVGElement>>(\n ({ className, ...props }, ref) => (\n <svg\n ref={ref}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cn(\n 'novacore:h-5 novacore:w-5 novacore:text-[var(--tuwa-text-primary)] novacore:transition-colors',\n className,\n )}\n {...props}\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n ),\n);\nCloseIcon.displayName = 'CloseIcon';\n","import * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { AnimatePresence, motion, Variants } from 'framer-motion';\nimport * as React from 'react';\n\nimport { cn } from '../utils';\n\nconst Dialog = DialogPrimitive.Root;\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogPortal = DialogPrimitive.Portal;\nconst DialogClose = DialogPrimitive.Close;\n\nconst defaultModalAnimation: Variants = {\n initial: { opacity: 0, scale: 0.9, y: 20 },\n animate: { opacity: 1, scale: 1, y: 0 },\n exit: {\n opacity: 0,\n scale: 0.9,\n transition: {\n duration: 0.2,\n },\n },\n};\n\nconst defaultModalBackdropAnimation: Variants = {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n exit: { opacity: 0 },\n};\n\nconst DialogOverlay = ({ className, backdropAnimation }: { backdropAnimation?: Variants; className?: string }) => {\n React.useEffect(() => {\n if (typeof window !== 'undefined') {\n window.document.body.classList.add('NovaModalOpen');\n }\n return () => {\n if (typeof window !== 'undefined') {\n window.document.body.classList.remove('NovaModalOpen');\n }\n };\n }, []);\n return (\n <AnimatePresence>\n <motion.div\n variants={backdropAnimation ?? defaultModalBackdropAnimation}\n transition={{ duration: 0.2, ease: 'easeInOut' }}\n animate=\"animate\"\n initial=\"initial\"\n exit=\"exit\"\n className=\"novacore:relative novacore:rounded-t-2xl novacore:sm:rounded-2xl novacore:overflow-hidden\"\n >\n <div\n className={cn(\n 'novacore:fixed novacore:inset-0 novacore:z-50 novacore:bg-black/55 novacore:backdrop-blur-sm novacore:backdrop-saturate-150',\n className,\n )}\n />\n </motion.div>\n </AnimatePresence>\n );\n};\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n modalAnimation?: Variants;\n backdropAnimation?: Variants;\n }\n>(({ className, children, modalAnimation, backdropAnimation, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay backdropAnimation={backdropAnimation} />\n\n <DialogPrimitive.Content\n aria-describedby=\"tuwa:modal-content\"\n ref={ref}\n className={cn(\n 'NovaNoScrolling novacore:fixed novacore:bottom-0 novacore:left-0 novacore:p-0 novacore:sm:bottom-auto novacore:sm:left-[50%] novacore:sm:top-[50%] novacore:sm:translate-x-[-50%] novacore:sm:translate-y-[-50%] novacore:z-50 novacore:sm:p-4 novacore:outline-none',\n className,\n )}\n {...props}\n >\n <motion.div\n layout\n className=\"NovaNoScrolling novacore:relative novacore:overflow-hidden\"\n transition={{\n layout: {\n duration: 0.2,\n ease: [0.1, 0.1, 0.2, 1],\n },\n }}\n >\n <AnimatePresence>\n <motion.div\n variants={modalAnimation ?? defaultModalAnimation}\n transition={{ duration: 0.2, ease: 'easeInOut' }}\n animate=\"animate\"\n initial=\"initial\"\n exit=\"exit\"\n className=\"NovaNoScrolling novacore:relative novacore:rounded-t-2xl novacore:sm:rounded-2xl novacore:overflow-hidden\"\n >\n <div\n className={cn(\n 'NovaNoScrolling novacore:relative novacore:flex novacore:max-h-[98dvh] novacore:w-full novacore:flex-col novacore:gap-3 novacore:overflow-y-auto novacore:rounded-t-2xl novacore:sm:rounded-2xl novacore:shadow-2xl',\n 'novacore:border novacore:border-[var(--tuwa-border-primary)] novacore:bg-[var(--tuwa-bg-primary)]',\n )}\n >\n {children}\n </div>\n </motion.div>\n </AnimatePresence>\n </motion.div>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n aria-describedby=\"tuwa:modal-header\"\n className={cn(\n 'novacore:sticky novacore:flex novacore:top-0 novacore:z-11 novacore:w-full novacore:flex-row novacore:items-center novacore:justify-between',\n 'novacore:border-b novacore:border-[var(--tuwa-border-primary)] novacore:bg-[var(--tuwa-bg-primary)] novacore:p-4',\n className,\n )}\n {...props}\n />\n);\nDialogHeader.displayName = 'DialogHeader';\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n aria-describedby=\"tuwa:modal-footer\"\n className={cn(\n 'novacore:flex novacore:flex-col-reverse novacore:sm:flex-row novacore:sm:justify-end novacore:sm:space-x-2',\n className,\n )}\n {...props}\n />\n);\nDialogFooter.displayName = 'DialogFooter';\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n aria-describedby=\"tuwa:modal-title\"\n className={cn(\n 'novacore:text-lg novacore:font-bold novacore:leading-none novacore:tracking-tight novacore:text-[var(--tuwa-text-primary)] novacore:m-0',\n className,\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n aria-describedby=\"tuwa:modal-description\"\n ref={ref}\n className={cn('novacore:text-sm novacore:text-[var(--tuwa-text-secondary)]', className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","import { useEffect, useMemo, useState } from 'react';\n\nexport function StarsBackground({ starsCount }: { starsCount?: number }) {\n const [isMounted, setIsMounted] = useState(false);\n useEffect(() => setIsMounted(true), []);\n\n const stars = useMemo(() => {\n if (!isMounted) {\n return [];\n }\n\n const numStars = starsCount ?? 200;\n return Array.from({ length: numStars }).map(() => ({\n x: Math.random() * window.innerWidth,\n y: Math.random() * window.innerHeight,\n r: Math.random() * 1 + 0.5,\n isSupernova: Math.random() < 0.1,\n delay: Math.random() * 10,\n duration: 5 + Math.random() * 5,\n }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isMounted]);\n\n return (\n <div className=\"novacore:absolute novacore:inset-0 novacore:z-1 novacore:h-full novacore:w-full novacore:overflow-hidden\">\n <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\">\n <defs>\n <style>\n {`\n /* Pulse animation now includes scale for a more organic feel. */\n @keyframes pulse {\n 0%, 100% { \n opacity: 0.2;\n transform: scale(0.9);\n }\n 50% {\n opacity: 0.8;\n transform: scale(1.2);\n }\n }\n \n /* Supernova animation remains impactful. */\n @keyframes supernova {\n 0% { \n transform: scale(1);\n stroke: rgba(var(--tuwa-bg-primary), 0.5);\n opacity: 0.8;\n }\n 20% { \n transform: scale(3);\n stroke: var(--tuwa-button-gradient-from);\n opacity: 1;\n }\n 100% { \n transform: scale(0.8);\n stroke: var(--tuwa-button-gradient-to);\n opacity: 0;\n }\n }\n\n .pulsar {\n animation-name: pulse;\n animation-timing-function: ease-in-out;\n animation-iteration-count: infinite;\n transform-origin: center;\n }\n\n .supernova {\n animation-name: supernova;\n animation-timing-function: ease-out;\n animation-iteration-count: infinite;\n transform-origin: center;\n stroke-width: 2;\n }\n `}\n </style>\n </defs>\n\n {stars.map((star, i) => (\n <circle\n key={i}\n cx={star.x}\n cy={star.y}\n r={star.r}\n fill={`rgba(var(--tuwa-bg-primary), 0.7)`}\n className={star.isSupernova ? 'supernova' : 'pulsar'}\n style={{\n animationDelay: `${star.delay}s`,\n animationDuration: `${star.duration}s`,\n }}\n />\n ))}\n </svg>\n </div>\n );\n}\n","/**\n * @file This file contains a custom React hook for copying text to the clipboard.\n */\n\nimport { useCallback, useState } from 'react';\n\n/**\n * A custom React hook that provides functionality to copy text to the clipboard.\n * It also manages a \"copied\" state with a timeout for user feedback.\n *\n * @param {number} [timeout=2000] - The duration in milliseconds to keep the `isCopied` state as true.\n * @returns {{\n * isCopied: boolean;\n * copy: (text: string) => Promise<void>;\n * error: Error | null;\n * }} An object containing the `isCopied` state, the `copy` function, and any potential error.\n *\n * @example\n * const MyComponent = () => {\n * const { isCopied, copy } = useCopyToClipboard();\n * const textToCopy = '0x123...';\n *\n * return (\n * <button onClick={() => copy(textToCopy)}>\n * {isCopied ? 'Copied!' : 'Copy Address'}\n * </button>\n * );\n * }\n */\nexport function useCopyToClipboard(timeout = 2000): {\n isCopied: boolean;\n copy: (text: string) => Promise<void>;\n error: Error | null;\n} {\n const [isCopied, setIsCopied] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const copy = useCallback(\n async (text: string) => {\n if (!text) return;\n\n try {\n await navigator.clipboard.writeText(text);\n setIsCopied(true);\n setError(null);\n\n setTimeout(() => setIsCopied(false), timeout);\n } catch (e) {\n const copyError = e instanceof Error ? e : new Error('Failed to copy text.');\n console.error(copyError);\n setError(copyError);\n\n // Reset error state after timeout as well\n setTimeout(() => setError(null), timeout);\n }\n },\n [timeout],\n );\n\n return { isCopied, copy, error };\n}\n","import { useEffect, useState } from 'react';\n\n/**\n * A custom hook to detect if a media query matches the current screen dimensions.\n * Handles SSR gracefully.\n * @param {string} query - The media query string (e.g., '(max-width: 767px)').\n * @returns {boolean} Whether the query matches or not.\n */\nexport function useMediaQuery(query: string): boolean {\n const getMatches = (q: string): boolean => {\n if (typeof window !== 'undefined') {\n return window.matchMedia(q).matches;\n }\n return false;\n };\n\n const [matches, setMatches] = useState<boolean>(getMatches(query));\n\n useEffect(() => {\n const media = window.matchMedia(query);\n const listener = () => setMatches(media.matches);\n\n // Re-check on mount and subscribe to changes\n listener();\n window.addEventListener('resize', listener);\n\n return () => window.removeEventListener('resize', listener);\n }, [query]);\n\n return matches;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/classes.ts","../src/utils/cn.ts","../src/utils/deepMerge.ts","../src/utils/textCenterEllipsis.ts","../src/components/ChevronArrowWithAnim.tsx","../src/components/CloseIcon.tsx","../src/components/Modal.tsx","../src/components/StarsBackground.tsx","../src/components/ToastCloseButton.tsx","../src/hooks/useCopyToClipboard.ts","../src/hooks/useMediaQuery.ts"],"names":["standardButtonClasses","cn","inputs","twMerge","clsx","isObject","item","deepMerge","target","source","output","key","targetValue","sourceValue","textCenterEllipsis","str","from","to","start","end","ChevronArrowWithAnim","className","strokeWidth","isOpen","jsxs","jsx","AnimatePresence","motion","CloseIcon","h","props","ref","Dialog","r","DialogTrigger","DialogPortal","DialogClose","defaultModalAnimation","defaultModalBackdropAnimation","DialogOverlay","backdropAnimation","l","DialogContent","children","modalAnimation","DialogHeader","DialogFooter","DialogTitle","DialogDescription","StarsBackground","starsCount","isMounted","setIsMounted","useState","useEffect","stars","useMemo","numStars","star","i","ToastCloseButton","closeToast","useCopyToClipboard","timeout","isCopied","setIsCopied","error","setError","copy","useCallback","text","e","copyError","useMediaQuery","query","getMatches","q","matches","setMatches","media","listener"],"mappings":"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","file":"index.cjs","sourcesContent":["export const standardButtonClasses =\n 'novacore:cursor-pointer novacore:rounded-md novacore:bg-[var(--tuwa-standart-button-bg)] novacore:px-3 novacore:py-2 novacore:flex novacore:items-center novacore:gap-1 novacore:text-sm novacore:font-semibold novacore:text-[var(--tuwa-text-primary)] novacore:transition-colors novacore:hover:bg-[var(--tuwa-standart-button-hover)] novacore:disabled:cursor-not-allowed novacore:disabled:opacity-50';\n","/**\n * @file This file contains a utility function for conditionally merging Tailwind CSS classes.\n */\n\nimport { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * A utility function to conditionally join class names together and resolve\n * conflicting Tailwind CSS classes.\n *\n * It combines the functionality of `clsx` and `tailwind-merge`.\n *\n * @param {...ClassValue[]} inputs - A list of class values to be combined.\n * This can include strings, numbers, objects, arrays, and booleans.\n * @returns {string} The final, merged class name string.\n *\n * @example\n * cn('p-4', 'bg-red-500', { 'font-bold': true }); // => 'p-4 bg-red-500 font-bold'\n * cn('p-2', 'p-4'); // => 'p-4' (tailwind-merge resolves the conflict)\n *\n * @see https://github.com/dcastil/tailwind-merge\n * @see https://github.com/lukeed/clsx\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","/**\n * @file This file contains a utility for performing a deep (recursive) merge of two objects.\n */\n\n/**\n * Checks if the provided item is a plain object (i.e., not null and not an array).\n *\n * @param {any} item - The item to check.\n * @returns {item is Record<string, any>} True if the item is a plain object, otherwise false.\n */\nconst isObject = (item: any): item is Record<string, any> => {\n return item && typeof item === 'object' && !Array.isArray(item);\n};\n\n/**\n * Recursively merges the properties of a source object into a target object.\n * This function creates a new object and does not mutate the original target.\n *\n * @template T - The type of the objects being merged.\n * @param {T} target - The base object.\n * @param {Partial<T>} source - The object with properties to merge into the target.\n * @returns {T} A new object representing the merged result.\n *\n * @example\n * const defaults = { a: 1, b: { c: 2, d: 3 } };\n * const custom = { b: { c: 99 } };\n * const result = deepMerge(defaults, custom);\n * // result will be { a: 1, b: { c: 99, d: 3 } }\n */\nexport function deepMerge<T extends object>(target: T, source: Partial<T>): T {\n // Start with a shallow copy of the target to avoid mutation.\n const output = { ...target };\n\n if (isObject(target) && isObject(source)) {\n // Iterate over the keys in the source object.\n Object.keys(source).forEach((key) => {\n const targetValue = target[key as keyof T];\n const sourceValue = source[key as keyof T];\n\n // If the value is an object in both target and source, merge them recursively.\n if (isObject(targetValue) && isObject(sourceValue)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n (output as Record<string, any>)[key] = deepMerge(targetValue, sourceValue);\n } else {\n // Otherwise, the source value overwrites the target value.\n (output as Record<string, any>)[key] = sourceValue;\n }\n });\n }\n\n return output;\n}\n","/**\n * @file This file contains a utility function for truncating a string with a center ellipsis.\n */\n\n/**\n * Truncates a string by showing a specified number of characters from the start and end,\n * with an ellipsis in the middle. If the string is too short to be truncated, it's returned as is.\n *\n * @param {string} str - The string to truncate.\n * @param {number} from - The number of characters to show from the beginning of the string.\n * @param {number} to - The number of characters to show from the end of the string.\n * @returns {string} The truncated string, or the original string if it's too short.\n *\n * @example\n * const hash = '0x1234567890abcdef1234567890abcdef';\n * textCenterEllipsis(hash, 6, 4); // => \"0x1234...cdef\"\n *\n * textCenterEllipsis('short', 6, 4); // => \"short\"\n */\nexport function textCenterEllipsis(str: string | undefined | null, from: number, to: number): string {\n if (!str) {\n return '';\n }\n\n // If the string is short enough, don't truncate it.\n if (str.length <= from + to) {\n return str;\n }\n\n const start = str.slice(0, from);\n const end = str.slice(str.length - to);\n\n return `${start}...${end}`;\n}\n","import { AnimatePresence, motion } from 'framer-motion';\n\nimport { cn } from '../utils';\n\nexport function ChevronArrowWithAnim({\n className,\n strokeWidth,\n isOpen,\n}: {\n className?: string;\n strokeWidth?: number;\n isOpen?: boolean;\n}) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={strokeWidth ?? 2}\n stroke=\"currentColor\"\n className={cn('novacore:w-4 novacore:h-4 novacore:text-[var(--tuwa-text-secondary)]', className)}\n >\n <AnimatePresence>\n {isOpen && (\n <motion.path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"m4.5 15.75 7.5-7.5 7.5 7.5\"\n variants={{\n hidden: { translateY: 3, scaleY: 0.8, opacity: 0 },\n visible: { translateY: 0, scaleY: 1, opacity: 1 },\n }}\n initial=\"hidden\"\n animate=\"visible\"\n transition={{ duration: 0.4 }}\n />\n )}\n </AnimatePresence>\n\n <AnimatePresence>\n {!isOpen && (\n <motion.path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"m19.5 8.25-7.5 7.5-7.5-7.5\"\n className=\"novacore:relative\"\n variants={{\n hidden: { translateY: -3, scaleY: 0.8, opacity: 0 },\n visible: { translateY: 0, scaleY: 1, opacity: 1 },\n }}\n initial=\"hidden\"\n animate=\"visible\"\n transition={{ duration: 0.4 }}\n />\n )}\n </AnimatePresence>\n </svg>\n );\n}\n","import * as React from 'react';\n\nimport { cn } from '../utils';\n\n/**\n * A reusable close button icon (X mark) styled with TUWA color scheme.\n */\nexport const CloseIcon = React.forwardRef<SVGSVGElement, React.SVGAttributes<SVGSVGElement>>(\n ({ className, ...props }, ref) => (\n <svg\n ref={ref}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cn(\n 'novacore:h-5 novacore:w-5 novacore:text-[var(--tuwa-text-primary)] novacore:transition-colors',\n className,\n )}\n {...props}\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n ),\n);\nCloseIcon.displayName = 'CloseIcon';\n","import * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { AnimatePresence, motion, Variants } from 'framer-motion';\nimport * as React from 'react';\n\nimport { cn } from '../utils';\n\nconst Dialog = DialogPrimitive.Root;\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogPortal = DialogPrimitive.Portal;\nconst DialogClose = DialogPrimitive.Close;\n\nconst defaultModalAnimation: Variants = {\n initial: { opacity: 0, scale: 0.9, y: 20 },\n animate: { opacity: 1, scale: 1, y: 0 },\n exit: {\n opacity: 0,\n scale: 0.9,\n transition: {\n duration: 0.2,\n },\n },\n};\n\nconst defaultModalBackdropAnimation: Variants = {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n exit: { opacity: 0 },\n};\n\nconst DialogOverlay = ({ className, backdropAnimation }: { backdropAnimation?: Variants; className?: string }) => {\n React.useEffect(() => {\n if (typeof window !== 'undefined') {\n window.document.body.classList.add('NovaModalOpen');\n }\n return () => {\n if (typeof window !== 'undefined') {\n window.document.body.classList.remove('NovaModalOpen');\n }\n };\n }, []);\n return (\n <AnimatePresence>\n <motion.div\n variants={backdropAnimation ?? defaultModalBackdropAnimation}\n transition={{ duration: 0.2, ease: 'easeInOut' }}\n animate=\"animate\"\n initial=\"initial\"\n exit=\"exit\"\n className=\"novacore:relative novacore:rounded-t-2xl novacore:sm:rounded-2xl novacore:overflow-hidden\"\n >\n <div\n className={cn(\n 'novacore:fixed novacore:inset-0 novacore:z-50 novacore:bg-black/55 novacore:backdrop-blur-sm novacore:backdrop-saturate-150',\n className,\n )}\n />\n </motion.div>\n </AnimatePresence>\n );\n};\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n modalAnimation?: Variants;\n backdropAnimation?: Variants;\n }\n>(({ className, children, modalAnimation, backdropAnimation, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay backdropAnimation={backdropAnimation} />\n\n <DialogPrimitive.Content\n aria-describedby=\"tuwa:modal-content\"\n ref={ref}\n className={cn(\n 'NovaNoScrolling novacore:fixed novacore:bottom-0 novacore:left-0 novacore:p-0 novacore:sm:bottom-auto novacore:sm:left-[50%] novacore:sm:top-[50%] novacore:sm:translate-x-[-50%] novacore:sm:translate-y-[-50%] novacore:z-50 novacore:sm:p-4 novacore:outline-none',\n className,\n )}\n {...props}\n >\n <motion.div\n layout\n className=\"NovaNoScrolling novacore:relative novacore:overflow-hidden\"\n transition={{\n layout: {\n duration: 0.2,\n ease: [0.1, 0.1, 0.2, 1],\n },\n }}\n >\n <AnimatePresence>\n <motion.div\n variants={modalAnimation ?? defaultModalAnimation}\n transition={{ duration: 0.2, ease: 'easeInOut' }}\n animate=\"animate\"\n initial=\"initial\"\n exit=\"exit\"\n className=\"NovaNoScrolling novacore:relative novacore:rounded-t-2xl novacore:sm:rounded-2xl novacore:overflow-hidden\"\n >\n <div\n className={cn(\n 'NovaNoScrolling novacore:relative novacore:flex novacore:max-h-[98dvh] novacore:w-full novacore:flex-col novacore:gap-3 novacore:overflow-y-auto novacore:rounded-t-2xl novacore:sm:rounded-2xl novacore:shadow-2xl',\n 'novacore:border novacore:border-[var(--tuwa-border-primary)] novacore:bg-[var(--tuwa-bg-primary)]',\n )}\n >\n {children}\n </div>\n </motion.div>\n </AnimatePresence>\n </motion.div>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n aria-describedby=\"tuwa:modal-header\"\n className={cn(\n 'novacore:sticky novacore:flex novacore:top-0 novacore:z-11 novacore:w-full novacore:flex-row novacore:items-center novacore:justify-between',\n 'novacore:border-b novacore:border-[var(--tuwa-border-primary)] novacore:bg-[var(--tuwa-bg-primary)] novacore:p-4',\n className,\n )}\n {...props}\n />\n);\nDialogHeader.displayName = 'DialogHeader';\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n aria-describedby=\"tuwa:modal-footer\"\n className={cn(\n 'novacore:flex novacore:flex-col-reverse novacore:sm:flex-row novacore:sm:justify-end novacore:sm:space-x-2',\n className,\n )}\n {...props}\n />\n);\nDialogFooter.displayName = 'DialogFooter';\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n aria-describedby=\"tuwa:modal-title\"\n className={cn(\n 'novacore:text-lg novacore:font-bold novacore:leading-none novacore:tracking-tight novacore:text-[var(--tuwa-text-primary)] novacore:m-0',\n className,\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n aria-describedby=\"tuwa:modal-description\"\n ref={ref}\n className={cn('novacore:text-sm novacore:text-[var(--tuwa-text-secondary)]', className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","import { useEffect, useMemo, useState } from 'react';\n\nexport function StarsBackground({ starsCount }: { starsCount?: number }) {\n const [isMounted, setIsMounted] = useState(false);\n useEffect(() => setIsMounted(true), []);\n\n const stars = useMemo(() => {\n if (!isMounted) {\n return [];\n }\n\n const numStars = starsCount ?? 200;\n return Array.from({ length: numStars }).map(() => ({\n x: Math.random() * window.innerWidth,\n y: Math.random() * window.innerHeight,\n r: Math.random() * 1 + 0.5,\n isSupernova: Math.random() < 0.1,\n delay: Math.random() * 10,\n duration: 5 + Math.random() * 5,\n }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isMounted]);\n\n return (\n <div className=\"novacore:absolute novacore:inset-0 novacore:z-1 novacore:h-full novacore:w-full novacore:overflow-hidden\">\n <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\">\n <defs>\n <style>\n {`\n /* Pulse animation now includes scale for a more organic feel. */\n @keyframes pulse {\n 0%, 100% { \n opacity: 0.2;\n transform: scale(0.9);\n }\n 50% {\n opacity: 0.8;\n transform: scale(1.2);\n }\n }\n \n /* Supernova animation remains impactful. */\n @keyframes supernova {\n 0% { \n transform: scale(1);\n stroke: rgba(var(--tuwa-bg-primary), 0.5);\n opacity: 0.8;\n }\n 20% { \n transform: scale(3);\n stroke: var(--tuwa-button-gradient-from);\n opacity: 1;\n }\n 100% { \n transform: scale(0.8);\n stroke: var(--tuwa-button-gradient-to);\n opacity: 0;\n }\n }\n\n .pulsar {\n animation-name: pulse;\n animation-timing-function: ease-in-out;\n animation-iteration-count: infinite;\n transform-origin: center;\n }\n\n .supernova {\n animation-name: supernova;\n animation-timing-function: ease-out;\n animation-iteration-count: infinite;\n transform-origin: center;\n stroke-width: 2;\n }\n `}\n </style>\n </defs>\n\n {stars.map((star, i) => (\n <circle\n key={i}\n cx={star.x}\n cy={star.y}\n r={star.r}\n fill={`rgba(var(--tuwa-bg-primary), 0.7)`}\n className={star.isSupernova ? 'supernova' : 'pulsar'}\n style={{\n animationDelay: `${star.delay}s`,\n animationDuration: `${star.duration}s`,\n }}\n />\n ))}\n </svg>\n </div>\n );\n}\n","/**\n * @file This file contains a reusable close button component, designed primarily for toast notifications.\n */\n\nimport { cn } from '../utils';\n\n/**\n * Defines the props for the ToastCloseButton component.\n */\nexport type ToastCloseButtonProps = {\n /**\n * The function to call when the button is clicked. This is typically provided by the\n * toast library (e.g., react-toastify) to dismiss the notification.\n */\n closeToast?: (e: React.MouseEvent<HTMLElement>) => void;\n};\n\n/**\n * A simple, styled close button component ('X' icon) intended for use within toast notifications.\n * It uses theme-aware CSS variables for styling and i18n labels for accessibility.\n */\nexport function ToastCloseButton({ closeToast }: ToastCloseButtonProps) {\n return (\n <button\n type=\"button\"\n onClick={closeToast}\n aria-label=\"Close toast notification\"\n title=\"Close toast notification\"\n className={cn(\n 'novacore:absolute novacore:top-2 novacore:right-2 novacore:cursor-pointer novacore:rounded-full novacore:p-1',\n 'novacore:text-[var(--tuwa-text-tertiary)] novacore:transition-colors',\n 'novacore:hover:bg-[var(--tuwa-bg-muted)] novacore:hover:text-[var(--tuwa-text-primary)]',\n )}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className=\"novacore:h-5 novatx:w-5\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18 18 6M6 6l12 12\" />\n </svg>\n </button>\n );\n}\n","/**\n * @file This file contains a custom React hook for copying text to the clipboard.\n */\n\nimport { useCallback, useState } from 'react';\n\n/**\n * A custom React hook that provides functionality to copy text to the clipboard.\n * It also manages a \"copied\" state with a timeout for user feedback.\n *\n * @param {number} [timeout=2000] - The duration in milliseconds to keep the `isCopied` state as true.\n * @returns {{\n * isCopied: boolean;\n * copy: (text: string) => Promise<void>;\n * error: Error | null;\n * }} An object containing the `isCopied` state, the `copy` function, and any potential error.\n *\n * @example\n * const MyComponent = () => {\n * const { isCopied, copy } = useCopyToClipboard();\n * const textToCopy = '0x123...';\n *\n * return (\n * <button onClick={() => copy(textToCopy)}>\n * {isCopied ? 'Copied!' : 'Copy Address'}\n * </button>\n * );\n * }\n */\nexport function useCopyToClipboard(timeout = 2000): {\n isCopied: boolean;\n copy: (text: string) => Promise<void>;\n error: Error | null;\n} {\n const [isCopied, setIsCopied] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const copy = useCallback(\n async (text: string) => {\n if (!text) return;\n\n try {\n await navigator.clipboard.writeText(text);\n setIsCopied(true);\n setError(null);\n\n setTimeout(() => setIsCopied(false), timeout);\n } catch (e) {\n const copyError = e instanceof Error ? e : new Error('Failed to copy text.');\n console.error(copyError);\n setError(copyError);\n\n // Reset error state after timeout as well\n setTimeout(() => setError(null), timeout);\n }\n },\n [timeout],\n );\n\n return { isCopied, copy, error };\n}\n","import { useEffect, useState } from 'react';\n\n/**\n * A custom hook to detect if a media query matches the current screen dimensions.\n * Handles SSR gracefully.\n * @param {string} query - The media query string (e.g., '(max-width: 767px)').\n * @returns {boolean} Whether the query matches or not.\n */\nexport function useMediaQuery(query: string): boolean {\n const getMatches = (q: string): boolean => {\n if (typeof window !== 'undefined') {\n return window.matchMedia(q).matches;\n }\n return false;\n };\n\n const [matches, setMatches] = useState<boolean>(getMatches(query));\n\n useEffect(() => {\n const media = window.matchMedia(query);\n const listener = () => setMatches(media.matches);\n\n // Re-check on mount and subscribe to changes\n listener();\n window.addEventListener('resize', listener);\n\n return () => window.removeEventListener('resize', listener);\n }, [query]);\n\n return matches;\n}\n"]}
|
package/dist/index.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! tailwindcss v4.1.
|
|
1
|
+
/*! tailwindcss v4.1.14 | MIT License | https://tailwindcss.com */
|
|
2
2
|
@layer properties;
|
|
3
3
|
@layer theme, base, components, utilities;
|
|
4
4
|
@layer theme {
|
|
@@ -38,6 +38,12 @@
|
|
|
38
38
|
.novacore\:top-0 {
|
|
39
39
|
top: calc(var(--novacore-spacing) * 0);
|
|
40
40
|
}
|
|
41
|
+
.novacore\:top-2 {
|
|
42
|
+
top: calc(var(--novacore-spacing) * 2);
|
|
43
|
+
}
|
|
44
|
+
.novacore\:right-2 {
|
|
45
|
+
right: calc(var(--novacore-spacing) * 2);
|
|
46
|
+
}
|
|
41
47
|
.novacore\:bottom-0 {
|
|
42
48
|
bottom: calc(var(--novacore-spacing) * 0);
|
|
43
49
|
}
|
|
@@ -110,6 +116,9 @@
|
|
|
110
116
|
.novacore\:overflow-y-auto {
|
|
111
117
|
overflow-y: auto;
|
|
112
118
|
}
|
|
119
|
+
.novacore\:rounded-full {
|
|
120
|
+
border-radius: calc(infinity * 1px);
|
|
121
|
+
}
|
|
113
122
|
.novacore\:rounded-md {
|
|
114
123
|
border-radius: var(--novacore-radius-md);
|
|
115
124
|
}
|
|
@@ -143,6 +152,9 @@
|
|
|
143
152
|
.novacore\:p-0 {
|
|
144
153
|
padding: calc(var(--novacore-spacing) * 0);
|
|
145
154
|
}
|
|
155
|
+
.novacore\:p-1 {
|
|
156
|
+
padding: calc(var(--novacore-spacing) * 1);
|
|
157
|
+
}
|
|
146
158
|
.novacore\:p-4 {
|
|
147
159
|
padding: calc(var(--novacore-spacing) * 4);
|
|
148
160
|
}
|
|
@@ -182,6 +194,9 @@
|
|
|
182
194
|
.novacore\:text-\[var\(--tuwa-text-secondary\)\] {
|
|
183
195
|
color: var(--tuwa-text-secondary);
|
|
184
196
|
}
|
|
197
|
+
.novacore\:text-\[var\(--tuwa-text-tertiary\)\] {
|
|
198
|
+
color: var(--tuwa-text-tertiary);
|
|
199
|
+
}
|
|
185
200
|
.novacore\:shadow-2xl {
|
|
186
201
|
--tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));
|
|
187
202
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
@@ -203,6 +218,13 @@
|
|
|
203
218
|
--tw-outline-style: none;
|
|
204
219
|
outline-style: none;
|
|
205
220
|
}
|
|
221
|
+
.novacore\:hover\:bg-\[var\(--tuwa-bg-muted\)\] {
|
|
222
|
+
&:hover {
|
|
223
|
+
@media (hover: hover) {
|
|
224
|
+
background-color: var(--tuwa-bg-muted);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
206
228
|
.novacore\:hover\:bg-\[var\(--tuwa-standart-button-hover\)\] {
|
|
207
229
|
&:hover {
|
|
208
230
|
@media (hover: hover) {
|
|
@@ -210,6 +232,13 @@
|
|
|
210
232
|
}
|
|
211
233
|
}
|
|
212
234
|
}
|
|
235
|
+
.novacore\:hover\:text-\[var\(--tuwa-text-primary\)\] {
|
|
236
|
+
&:hover {
|
|
237
|
+
@media (hover: hover) {
|
|
238
|
+
color: var(--tuwa-text-primary);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
213
242
|
.novacore\:disabled\:cursor-not-allowed {
|
|
214
243
|
&:disabled {
|
|
215
244
|
cursor: not-allowed;
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import * as React from 'react';
|
|
2
|
+
import * as React$1 from 'react';
|
|
3
3
|
import * as DialogPrimitive from '@radix-ui/react-dialog';
|
|
4
4
|
import { Variants } from 'framer-motion';
|
|
5
5
|
import { ClassValue } from 'clsx';
|
|
@@ -13,12 +13,12 @@ declare function ChevronArrowWithAnim({ className, strokeWidth, isOpen, }: {
|
|
|
13
13
|
/**
|
|
14
14
|
* A reusable close button icon (X mark) styled with TUWA color scheme.
|
|
15
15
|
*/
|
|
16
|
-
declare const CloseIcon: React.ForwardRefExoticComponent<React.SVGAttributes<SVGSVGElement> & React.RefAttributes<SVGSVGElement>>;
|
|
16
|
+
declare const CloseIcon: React$1.ForwardRefExoticComponent<React$1.SVGAttributes<SVGSVGElement> & React$1.RefAttributes<SVGSVGElement>>;
|
|
17
17
|
|
|
18
|
-
declare const Dialog: React.FC<DialogPrimitive.DialogProps>;
|
|
19
|
-
declare const DialogTrigger: React.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
20
|
-
declare const DialogPortal: React.FC<DialogPrimitive.DialogPortalProps>;
|
|
21
|
-
declare const DialogClose: React.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
|
|
18
|
+
declare const Dialog: React$1.FC<DialogPrimitive.DialogProps>;
|
|
19
|
+
declare const DialogTrigger: React$1.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
20
|
+
declare const DialogPortal: React$1.FC<DialogPrimitive.DialogPortalProps>;
|
|
21
|
+
declare const DialogClose: React$1.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
22
22
|
declare const DialogOverlay: {
|
|
23
23
|
({ className, backdropAnimation }: {
|
|
24
24
|
backdropAnimation?: Variants;
|
|
@@ -26,25 +26,44 @@ declare const DialogOverlay: {
|
|
|
26
26
|
}): react_jsx_runtime.JSX.Element;
|
|
27
27
|
displayName: string | undefined;
|
|
28
28
|
};
|
|
29
|
-
declare const DialogContent: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
29
|
+
declare const DialogContent: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
30
30
|
modalAnimation?: Variants;
|
|
31
31
|
backdropAnimation?: Variants;
|
|
32
|
-
} & React.RefAttributes<HTMLDivElement>>;
|
|
32
|
+
} & React$1.RefAttributes<HTMLDivElement>>;
|
|
33
33
|
declare const DialogHeader: {
|
|
34
|
-
({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
34
|
+
({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
35
35
|
displayName: string;
|
|
36
36
|
};
|
|
37
37
|
declare const DialogFooter: {
|
|
38
|
-
({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
38
|
+
({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
39
39
|
displayName: string;
|
|
40
40
|
};
|
|
41
|
-
declare const DialogTitle: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
|
|
42
|
-
declare const DialogDescription: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
|
|
41
|
+
declare const DialogTitle: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & React$1.RefAttributes<HTMLHeadingElement>, "ref"> & React$1.RefAttributes<HTMLHeadingElement>>;
|
|
42
|
+
declare const DialogDescription: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React$1.RefAttributes<HTMLParagraphElement>, "ref"> & React$1.RefAttributes<HTMLParagraphElement>>;
|
|
43
43
|
|
|
44
44
|
declare function StarsBackground({ starsCount }: {
|
|
45
45
|
starsCount?: number;
|
|
46
46
|
}): react_jsx_runtime.JSX.Element;
|
|
47
47
|
|
|
48
|
+
/**
|
|
49
|
+
* @file This file contains a reusable close button component, designed primarily for toast notifications.
|
|
50
|
+
*/
|
|
51
|
+
/**
|
|
52
|
+
* Defines the props for the ToastCloseButton component.
|
|
53
|
+
*/
|
|
54
|
+
type ToastCloseButtonProps = {
|
|
55
|
+
/**
|
|
56
|
+
* The function to call when the button is clicked. This is typically provided by the
|
|
57
|
+
* toast library (e.g., react-toastify) to dismiss the notification.
|
|
58
|
+
*/
|
|
59
|
+
closeToast?: (e: React.MouseEvent<HTMLElement>) => void;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* A simple, styled close button component ('X' icon) intended for use within toast notifications.
|
|
63
|
+
* It uses theme-aware CSS variables for styling and i18n labels for accessibility.
|
|
64
|
+
*/
|
|
65
|
+
declare function ToastCloseButton({ closeToast }: ToastCloseButtonProps): react_jsx_runtime.JSX.Element;
|
|
66
|
+
|
|
48
67
|
/**
|
|
49
68
|
* @file This file contains a custom React hook for copying text to the clipboard.
|
|
50
69
|
*/
|
|
@@ -150,4 +169,4 @@ declare function deepMerge<T extends object>(target: T, source: Partial<T>): T;
|
|
|
150
169
|
*/
|
|
151
170
|
declare function textCenterEllipsis(str: string | undefined | null, from: number, to: number): string;
|
|
152
171
|
|
|
153
|
-
export { ChevronArrowWithAnim, CloseIcon, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, StarsBackground, cn, deepMerge, standardButtonClasses, textCenterEllipsis, useCopyToClipboard, useMediaQuery };
|
|
172
|
+
export { ChevronArrowWithAnim, CloseIcon, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, StarsBackground, ToastCloseButton, type ToastCloseButtonProps, cn, deepMerge, standardButtonClasses, textCenterEllipsis, useCopyToClipboard, useMediaQuery };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import * as React from 'react';
|
|
2
|
+
import * as React$1 from 'react';
|
|
3
3
|
import * as DialogPrimitive from '@radix-ui/react-dialog';
|
|
4
4
|
import { Variants } from 'framer-motion';
|
|
5
5
|
import { ClassValue } from 'clsx';
|
|
@@ -13,12 +13,12 @@ declare function ChevronArrowWithAnim({ className, strokeWidth, isOpen, }: {
|
|
|
13
13
|
/**
|
|
14
14
|
* A reusable close button icon (X mark) styled with TUWA color scheme.
|
|
15
15
|
*/
|
|
16
|
-
declare const CloseIcon: React.ForwardRefExoticComponent<React.SVGAttributes<SVGSVGElement> & React.RefAttributes<SVGSVGElement>>;
|
|
16
|
+
declare const CloseIcon: React$1.ForwardRefExoticComponent<React$1.SVGAttributes<SVGSVGElement> & React$1.RefAttributes<SVGSVGElement>>;
|
|
17
17
|
|
|
18
|
-
declare const Dialog: React.FC<DialogPrimitive.DialogProps>;
|
|
19
|
-
declare const DialogTrigger: React.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
20
|
-
declare const DialogPortal: React.FC<DialogPrimitive.DialogPortalProps>;
|
|
21
|
-
declare const DialogClose: React.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
|
|
18
|
+
declare const Dialog: React$1.FC<DialogPrimitive.DialogProps>;
|
|
19
|
+
declare const DialogTrigger: React$1.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
20
|
+
declare const DialogPortal: React$1.FC<DialogPrimitive.DialogPortalProps>;
|
|
21
|
+
declare const DialogClose: React$1.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
22
22
|
declare const DialogOverlay: {
|
|
23
23
|
({ className, backdropAnimation }: {
|
|
24
24
|
backdropAnimation?: Variants;
|
|
@@ -26,25 +26,44 @@ declare const DialogOverlay: {
|
|
|
26
26
|
}): react_jsx_runtime.JSX.Element;
|
|
27
27
|
displayName: string | undefined;
|
|
28
28
|
};
|
|
29
|
-
declare const DialogContent: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
29
|
+
declare const DialogContent: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
30
30
|
modalAnimation?: Variants;
|
|
31
31
|
backdropAnimation?: Variants;
|
|
32
|
-
} & React.RefAttributes<HTMLDivElement>>;
|
|
32
|
+
} & React$1.RefAttributes<HTMLDivElement>>;
|
|
33
33
|
declare const DialogHeader: {
|
|
34
|
-
({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
34
|
+
({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
35
35
|
displayName: string;
|
|
36
36
|
};
|
|
37
37
|
declare const DialogFooter: {
|
|
38
|
-
({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
38
|
+
({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
39
39
|
displayName: string;
|
|
40
40
|
};
|
|
41
|
-
declare const DialogTitle: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
|
|
42
|
-
declare const DialogDescription: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
|
|
41
|
+
declare const DialogTitle: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & React$1.RefAttributes<HTMLHeadingElement>, "ref"> & React$1.RefAttributes<HTMLHeadingElement>>;
|
|
42
|
+
declare const DialogDescription: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React$1.RefAttributes<HTMLParagraphElement>, "ref"> & React$1.RefAttributes<HTMLParagraphElement>>;
|
|
43
43
|
|
|
44
44
|
declare function StarsBackground({ starsCount }: {
|
|
45
45
|
starsCount?: number;
|
|
46
46
|
}): react_jsx_runtime.JSX.Element;
|
|
47
47
|
|
|
48
|
+
/**
|
|
49
|
+
* @file This file contains a reusable close button component, designed primarily for toast notifications.
|
|
50
|
+
*/
|
|
51
|
+
/**
|
|
52
|
+
* Defines the props for the ToastCloseButton component.
|
|
53
|
+
*/
|
|
54
|
+
type ToastCloseButtonProps = {
|
|
55
|
+
/**
|
|
56
|
+
* The function to call when the button is clicked. This is typically provided by the
|
|
57
|
+
* toast library (e.g., react-toastify) to dismiss the notification.
|
|
58
|
+
*/
|
|
59
|
+
closeToast?: (e: React.MouseEvent<HTMLElement>) => void;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* A simple, styled close button component ('X' icon) intended for use within toast notifications.
|
|
63
|
+
* It uses theme-aware CSS variables for styling and i18n labels for accessibility.
|
|
64
|
+
*/
|
|
65
|
+
declare function ToastCloseButton({ closeToast }: ToastCloseButtonProps): react_jsx_runtime.JSX.Element;
|
|
66
|
+
|
|
48
67
|
/**
|
|
49
68
|
* @file This file contains a custom React hook for copying text to the clipboard.
|
|
50
69
|
*/
|
|
@@ -150,4 +169,4 @@ declare function deepMerge<T extends object>(target: T, source: Partial<T>): T;
|
|
|
150
169
|
*/
|
|
151
170
|
declare function textCenterEllipsis(str: string | undefined | null, from: number, to: number): string;
|
|
152
171
|
|
|
153
|
-
export { ChevronArrowWithAnim, CloseIcon, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, StarsBackground, cn, deepMerge, standardButtonClasses, textCenterEllipsis, useCopyToClipboard, useMediaQuery };
|
|
172
|
+
export { ChevronArrowWithAnim, CloseIcon, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, StarsBackground, ToastCloseButton, type ToastCloseButtonProps, cn, deepMerge, standardButtonClasses, textCenterEllipsis, useCopyToClipboard, useMediaQuery };
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {motion,AnimatePresence}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';import*as l from'react';import {useState,useEffect,useMemo,useCallback}from'react';import*as r from'@radix-ui/react-dialog';var
|
|
1
|
+
import {motion,AnimatePresence}from'framer-motion';import {clsx}from'clsx';import {twMerge}from'tailwind-merge';import {jsxs,jsx}from'react/jsx-runtime';import*as l from'react';import {useState,useEffect,useMemo,useCallback}from'react';import*as r from'@radix-ui/react-dialog';var J="novacore:cursor-pointer novacore:rounded-md novacore:bg-[var(--tuwa-standart-button-bg)] novacore:px-3 novacore:py-2 novacore:flex novacore:items-center novacore:gap-1 novacore:text-sm novacore:font-semibold novacore:text-[var(--tuwa-text-primary)] novacore:transition-colors novacore:hover:bg-[var(--tuwa-standart-button-hover)] novacore:disabled:cursor-not-allowed novacore:disabled:opacity-50";function i(...o){return twMerge(clsx(o))}var v=o=>o&&typeof o=="object"&&!Array.isArray(o);function R(o,e){let a={...o};return v(o)&&v(e)&&Object.keys(e).forEach(n=>{let t=o[n],s=e[n];v(t)&&v(s)?a[n]=R(t,s):a[n]=s;}),a}function q(o,e,a){if(!o)return "";if(o.length<=e+a)return o;let n=o.slice(0,e),t=o.slice(o.length-a);return `${n}...${t}`}function co({className:o,strokeWidth:e,isOpen:a}){return jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:e??2,stroke:"currentColor",className:i("novacore:w-4 novacore:h-4 novacore:text-[var(--tuwa-text-secondary)]",o),children:[jsx(AnimatePresence,{children:a&&jsx(motion.path,{strokeLinecap:"round",strokeLinejoin:"round",d:"m4.5 15.75 7.5-7.5 7.5 7.5",variants:{hidden:{translateY:3,scaleY:.8,opacity:0},visible:{translateY:0,scaleY:1,opacity:1}},initial:"hidden",animate:"visible",transition:{duration:.4}})}),jsx(AnimatePresence,{children:!a&&jsx(motion.path,{strokeLinecap:"round",strokeLinejoin:"round",d:"m19.5 8.25-7.5 7.5-7.5-7.5",className:"novacore:relative",variants:{hidden:{translateY:-3,scaleY:.8,opacity:0},visible:{translateY:0,scaleY:1,opacity:1}},initial:"hidden",animate:"visible",transition:{duration:.4}})})]})}var T=l.forwardRef(({className:o,...e},a)=>jsxs("svg",{ref:a,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:i("novacore:h-5 novacore:w-5 novacore:text-[var(--tuwa-text-primary)] novacore:transition-colors",o),...e,children:[jsx("path",{d:"M18 6 6 18"}),jsx("path",{d:"m6 6 12 12"})]}));T.displayName="CloseIcon";var wo=r.Root,bo=r.Trigger,A=r.Portal,xo=r.Close,L={initial:{opacity:0,scale:.9,y:20},animate:{opacity:1,scale:1,y:0},exit:{opacity:0,scale:.9,transition:{duration:.2}}},S={initial:{opacity:0},animate:{opacity:1},exit:{opacity:0}},N=({className:o,backdropAnimation:e})=>(l.useEffect(()=>(typeof window<"u"&&window.document.body.classList.add("NovaModalOpen"),()=>{typeof window<"u"&&window.document.body.classList.remove("NovaModalOpen");}),[]),jsx(AnimatePresence,{children:jsx(motion.div,{variants:e??S,transition:{duration:.2,ease:"easeInOut"},animate:"animate",initial:"initial",exit:"exit",className:"novacore:relative novacore:rounded-t-2xl novacore:sm:rounded-2xl novacore:overflow-hidden",children:jsx("div",{className:i("novacore:fixed novacore:inset-0 novacore:z-50 novacore:bg-black/55 novacore:backdrop-blur-sm novacore:backdrop-saturate-150",o)})})}));N.displayName=r.Overlay.displayName;var V=l.forwardRef(({className:o,children:e,modalAnimation:a,backdropAnimation:n,...t},s)=>jsxs(A,{children:[jsx(N,{backdropAnimation:n}),jsx(r.Content,{"aria-describedby":"tuwa:modal-content",ref:s,className:i("NovaNoScrolling novacore:fixed novacore:bottom-0 novacore:left-0 novacore:p-0 novacore:sm:bottom-auto novacore:sm:left-[50%] novacore:sm:top-[50%] novacore:sm:translate-x-[-50%] novacore:sm:translate-y-[-50%] novacore:z-50 novacore:sm:p-4 novacore:outline-none",o),...t,children:jsx(motion.div,{layout:true,className:"NovaNoScrolling novacore:relative novacore:overflow-hidden",transition:{layout:{duration:.2,ease:[.1,.1,.2,1]}},children:jsx(AnimatePresence,{children:jsx(motion.div,{variants:a??L,transition:{duration:.2,ease:"easeInOut"},animate:"animate",initial:"initial",exit:"exit",className:"NovaNoScrolling novacore:relative novacore:rounded-t-2xl novacore:sm:rounded-2xl novacore:overflow-hidden",children:jsx("div",{className:i("NovaNoScrolling novacore:relative novacore:flex novacore:max-h-[98dvh] novacore:w-full novacore:flex-col novacore:gap-3 novacore:overflow-y-auto novacore:rounded-t-2xl novacore:sm:rounded-2xl novacore:shadow-2xl","novacore:border novacore:border-[var(--tuwa-border-primary)] novacore:bg-[var(--tuwa-bg-primary)]"),children:e})})})})})]}));V.displayName=r.Content.displayName;var B=({className:o,...e})=>jsx("div",{"aria-describedby":"tuwa:modal-header",className:i("novacore:sticky novacore:flex novacore:top-0 novacore:z-11 novacore:w-full novacore:flex-row novacore:items-center novacore:justify-between","novacore:border-b novacore:border-[var(--tuwa-border-primary)] novacore:bg-[var(--tuwa-bg-primary)] novacore:p-4",o),...e});B.displayName="DialogHeader";var W=({className:o,...e})=>jsx("div",{"aria-describedby":"tuwa:modal-footer",className:i("novacore:flex novacore:flex-col-reverse novacore:sm:flex-row novacore:sm:justify-end novacore:sm:space-x-2",o),...e});W.displayName="DialogFooter";var H=l.forwardRef(({className:o,...e},a)=>jsx(r.Title,{ref:a,"aria-describedby":"tuwa:modal-title",className:i("novacore:text-lg novacore:font-bold novacore:leading-none novacore:tracking-tight novacore:text-[var(--tuwa-text-primary)] novacore:m-0",o),...e}));H.displayName=r.Title.displayName;var O=l.forwardRef(({className:o,...e},a)=>jsx(r.Description,{"aria-describedby":"tuwa:modal-description",ref:a,className:i("novacore:text-sm novacore:text-[var(--tuwa-text-secondary)]",o),...e}));O.displayName=r.Description.displayName;function Po({starsCount:o}){let[e,a]=useState(false);useEffect(()=>a(true),[]);let n=useMemo(()=>{if(!e)return [];let t=o??200;return Array.from({length:t}).map(()=>({x:Math.random()*window.innerWidth,y:Math.random()*window.innerHeight,r:Math.random()*1+.5,isSupernova:Math.random()<.1,delay:Math.random()*10,duration:5+Math.random()*5}))},[e]);return jsx("div",{className:"novacore:absolute novacore:inset-0 novacore:z-1 novacore:h-full novacore:w-full novacore:overflow-hidden",children:jsxs("svg",{width:"100%",height:"100%",xmlns:"http://www.w3.org/2000/svg",children:[jsx("defs",{children:jsx("style",{children:`
|
|
2
2
|
/* Pulse animation now includes scale for a more organic feel. */
|
|
3
3
|
@keyframes pulse {
|
|
4
4
|
0%, 100% {
|
|
@@ -44,5 +44,6 @@ import {motion,AnimatePresence}from'framer-motion';import {clsx}from'clsx';impor
|
|
|
44
44
|
transform-origin: center;
|
|
45
45
|
stroke-width: 2;
|
|
46
46
|
}
|
|
47
|
-
`})}),n.map((t,
|
|
47
|
+
`})}),n.map((t,s)=>jsx("circle",{cx:t.x,cy:t.y,r:t.r,fill:"rgba(var(--tuwa-bg-primary), 0.7)",className:t.isSupernova?"supernova":"pulsar",style:{animationDelay:`${t.delay}s`,animationDuration:`${t.duration}s`}},s))]})})}function Mo({closeToast:o}){return jsx("button",{type:"button",onClick:o,"aria-label":"Close toast notification",title:"Close toast notification",className:i("novacore:absolute novacore:top-2 novacore:right-2 novacore:cursor-pointer novacore:rounded-full novacore:p-1","novacore:text-[var(--tuwa-text-tertiary)] novacore:transition-colors","novacore:hover:bg-[var(--tuwa-bg-muted)] novacore:hover:text-[var(--tuwa-text-primary)]"),children:jsx("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor",className:"novacore:h-5 novatx:w-5",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18 18 6M6 6l12 12"})})})}function Lo(o=2e3){let[e,a]=useState(false),[n,t]=useState(null),s=useCallback(async f=>{if(f)try{await navigator.clipboard.writeText(f),a(!0),t(null),setTimeout(()=>a(!1),o);}catch(g){let y=g instanceof Error?g:new Error("Failed to copy text.");console.error(y),t(y),setTimeout(()=>t(null),o);}},[o]);return {isCopied:e,copy:s,error:n}}function Bo(o){let e=t=>typeof window<"u"?window.matchMedia(t).matches:false,[a,n]=useState(e(o));return useEffect(()=>{let t=window.matchMedia(o),s=()=>n(t.matches);return s(),window.addEventListener("resize",s),()=>window.removeEventListener("resize",s)},[o]),a}
|
|
48
|
+
export{co as ChevronArrowWithAnim,T as CloseIcon,wo as Dialog,xo as DialogClose,V as DialogContent,O as DialogDescription,W as DialogFooter,B as DialogHeader,N as DialogOverlay,A as DialogPortal,H as DialogTitle,bo as DialogTrigger,Po as StarsBackground,Mo as ToastCloseButton,i as cn,R as deepMerge,J as standardButtonClasses,q as textCenterEllipsis,Lo as useCopyToClipboard,Bo as useMediaQuery};//# sourceMappingURL=index.js.map
|
|
48
49
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/classes.ts","../src/utils/cn.ts","../src/utils/deepMerge.ts","../src/utils/textCenterEllipsis.ts","../src/components/ChevronArrowWithAnim.tsx","../src/components/CloseIcon.tsx","../src/components/Modal.tsx","../src/components/StarsBackground.tsx","../src/hooks/useCopyToClipboard.ts","../src/hooks/useMediaQuery.ts"],"names":["standardButtonClasses","cn","inputs","twMerge","clsx","isObject","item","deepMerge","target","source","output","key","targetValue","sourceValue","textCenterEllipsis","str","from","to","start","end","ChevronArrowWithAnim","className","strokeWidth","isOpen","jsxs","jsx","AnimatePresence","motion","CloseIcon","x","props","ref","Dialog","DialogTrigger","DialogPortal","DialogClose","defaultModalAnimation","defaultModalBackdropAnimation","DialogOverlay","backdropAnimation","DialogContent","children","modalAnimation","DialogHeader","DialogFooter","DialogTitle","DialogDescription","StarsBackground","starsCount","isMounted","setIsMounted","useState","useEffect","stars","useMemo","numStars","star","useCopyToClipboard","timeout","isCopied","setIsCopied","error","setError","copy","useCallback","text","e","copyError","useMediaQuery","query","getMatches","q","matches","setMatches","media","listener"],"mappings":"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","file":"index.js","sourcesContent":["export const standardButtonClasses =\n 'novacore:cursor-pointer novacore:rounded-md novacore:bg-[var(--tuwa-standart-button-bg)] novacore:px-3 novacore:py-2 novacore:flex novacore:items-center novacore:gap-1 novacore:text-sm novacore:font-semibold novacore:text-[var(--tuwa-text-primary)] novacore:transition-colors novacore:hover:bg-[var(--tuwa-standart-button-hover)] novacore:disabled:cursor-not-allowed novacore:disabled:opacity-50';\n","/**\n * @file This file contains a utility function for conditionally merging Tailwind CSS classes.\n */\n\nimport { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * A utility function to conditionally join class names together and resolve\n * conflicting Tailwind CSS classes.\n *\n * It combines the functionality of `clsx` and `tailwind-merge`.\n *\n * @param {...ClassValue[]} inputs - A list of class values to be combined.\n * This can include strings, numbers, objects, arrays, and booleans.\n * @returns {string} The final, merged class name string.\n *\n * @example\n * cn('p-4', 'bg-red-500', { 'font-bold': true }); // => 'p-4 bg-red-500 font-bold'\n * cn('p-2', 'p-4'); // => 'p-4' (tailwind-merge resolves the conflict)\n *\n * @see https://github.com/dcastil/tailwind-merge\n * @see https://github.com/lukeed/clsx\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","/**\n * @file This file contains a utility for performing a deep (recursive) merge of two objects.\n */\n\n/**\n * Checks if the provided item is a plain object (i.e., not null and not an array).\n *\n * @param {any} item - The item to check.\n * @returns {item is Record<string, any>} True if the item is a plain object, otherwise false.\n */\nconst isObject = (item: any): item is Record<string, any> => {\n return item && typeof item === 'object' && !Array.isArray(item);\n};\n\n/**\n * Recursively merges the properties of a source object into a target object.\n * This function creates a new object and does not mutate the original target.\n *\n * @template T - The type of the objects being merged.\n * @param {T} target - The base object.\n * @param {Partial<T>} source - The object with properties to merge into the target.\n * @returns {T} A new object representing the merged result.\n *\n * @example\n * const defaults = { a: 1, b: { c: 2, d: 3 } };\n * const custom = { b: { c: 99 } };\n * const result = deepMerge(defaults, custom);\n * // result will be { a: 1, b: { c: 99, d: 3 } }\n */\nexport function deepMerge<T extends object>(target: T, source: Partial<T>): T {\n // Start with a shallow copy of the target to avoid mutation.\n const output = { ...target };\n\n if (isObject(target) && isObject(source)) {\n // Iterate over the keys in the source object.\n Object.keys(source).forEach((key) => {\n const targetValue = target[key as keyof T];\n const sourceValue = source[key as keyof T];\n\n // If the value is an object in both target and source, merge them recursively.\n if (isObject(targetValue) && isObject(sourceValue)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n (output as Record<string, any>)[key] = deepMerge(targetValue, sourceValue);\n } else {\n // Otherwise, the source value overwrites the target value.\n (output as Record<string, any>)[key] = sourceValue;\n }\n });\n }\n\n return output;\n}\n","/**\n * @file This file contains a utility function for truncating a string with a center ellipsis.\n */\n\n/**\n * Truncates a string by showing a specified number of characters from the start and end,\n * with an ellipsis in the middle. If the string is too short to be truncated, it's returned as is.\n *\n * @param {string} str - The string to truncate.\n * @param {number} from - The number of characters to show from the beginning of the string.\n * @param {number} to - The number of characters to show from the end of the string.\n * @returns {string} The truncated string, or the original string if it's too short.\n *\n * @example\n * const hash = '0x1234567890abcdef1234567890abcdef';\n * textCenterEllipsis(hash, 6, 4); // => \"0x1234...cdef\"\n *\n * textCenterEllipsis('short', 6, 4); // => \"short\"\n */\nexport function textCenterEllipsis(str: string | undefined | null, from: number, to: number): string {\n if (!str) {\n return '';\n }\n\n // If the string is short enough, don't truncate it.\n if (str.length <= from + to) {\n return str;\n }\n\n const start = str.slice(0, from);\n const end = str.slice(str.length - to);\n\n return `${start}...${end}`;\n}\n","import { AnimatePresence, motion } from 'framer-motion';\n\nimport { cn } from '../utils';\n\nexport function ChevronArrowWithAnim({\n className,\n strokeWidth,\n isOpen,\n}: {\n className?: string;\n strokeWidth?: number;\n isOpen?: boolean;\n}) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={strokeWidth ?? 2}\n stroke=\"currentColor\"\n className={cn('novacore:w-4 novacore:h-4 novacore:text-[var(--tuwa-text-secondary)]', className)}\n >\n <AnimatePresence>\n {isOpen && (\n <motion.path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"m4.5 15.75 7.5-7.5 7.5 7.5\"\n variants={{\n hidden: { translateY: 3, scaleY: 0.8, opacity: 0 },\n visible: { translateY: 0, scaleY: 1, opacity: 1 },\n }}\n initial=\"hidden\"\n animate=\"visible\"\n transition={{ duration: 0.4 }}\n />\n )}\n </AnimatePresence>\n\n <AnimatePresence>\n {!isOpen && (\n <motion.path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"m19.5 8.25-7.5 7.5-7.5-7.5\"\n className=\"novacore:relative\"\n variants={{\n hidden: { translateY: -3, scaleY: 0.8, opacity: 0 },\n visible: { translateY: 0, scaleY: 1, opacity: 1 },\n }}\n initial=\"hidden\"\n animate=\"visible\"\n transition={{ duration: 0.4 }}\n />\n )}\n </AnimatePresence>\n </svg>\n );\n}\n","import * as React from 'react';\n\nimport { cn } from '../utils';\n\n/**\n * A reusable close button icon (X mark) styled with TUWA color scheme.\n */\nexport const CloseIcon = React.forwardRef<SVGSVGElement, React.SVGAttributes<SVGSVGElement>>(\n ({ className, ...props }, ref) => (\n <svg\n ref={ref}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cn(\n 'novacore:h-5 novacore:w-5 novacore:text-[var(--tuwa-text-primary)] novacore:transition-colors',\n className,\n )}\n {...props}\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n ),\n);\nCloseIcon.displayName = 'CloseIcon';\n","import * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { AnimatePresence, motion, Variants } from 'framer-motion';\nimport * as React from 'react';\n\nimport { cn } from '../utils';\n\nconst Dialog = DialogPrimitive.Root;\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogPortal = DialogPrimitive.Portal;\nconst DialogClose = DialogPrimitive.Close;\n\nconst defaultModalAnimation: Variants = {\n initial: { opacity: 0, scale: 0.9, y: 20 },\n animate: { opacity: 1, scale: 1, y: 0 },\n exit: {\n opacity: 0,\n scale: 0.9,\n transition: {\n duration: 0.2,\n },\n },\n};\n\nconst defaultModalBackdropAnimation: Variants = {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n exit: { opacity: 0 },\n};\n\nconst DialogOverlay = ({ className, backdropAnimation }: { backdropAnimation?: Variants; className?: string }) => {\n React.useEffect(() => {\n if (typeof window !== 'undefined') {\n window.document.body.classList.add('NovaModalOpen');\n }\n return () => {\n if (typeof window !== 'undefined') {\n window.document.body.classList.remove('NovaModalOpen');\n }\n };\n }, []);\n return (\n <AnimatePresence>\n <motion.div\n variants={backdropAnimation ?? defaultModalBackdropAnimation}\n transition={{ duration: 0.2, ease: 'easeInOut' }}\n animate=\"animate\"\n initial=\"initial\"\n exit=\"exit\"\n className=\"novacore:relative novacore:rounded-t-2xl novacore:sm:rounded-2xl novacore:overflow-hidden\"\n >\n <div\n className={cn(\n 'novacore:fixed novacore:inset-0 novacore:z-50 novacore:bg-black/55 novacore:backdrop-blur-sm novacore:backdrop-saturate-150',\n className,\n )}\n />\n </motion.div>\n </AnimatePresence>\n );\n};\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n modalAnimation?: Variants;\n backdropAnimation?: Variants;\n }\n>(({ className, children, modalAnimation, backdropAnimation, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay backdropAnimation={backdropAnimation} />\n\n <DialogPrimitive.Content\n aria-describedby=\"tuwa:modal-content\"\n ref={ref}\n className={cn(\n 'NovaNoScrolling novacore:fixed novacore:bottom-0 novacore:left-0 novacore:p-0 novacore:sm:bottom-auto novacore:sm:left-[50%] novacore:sm:top-[50%] novacore:sm:translate-x-[-50%] novacore:sm:translate-y-[-50%] novacore:z-50 novacore:sm:p-4 novacore:outline-none',\n className,\n )}\n {...props}\n >\n <motion.div\n layout\n className=\"NovaNoScrolling novacore:relative novacore:overflow-hidden\"\n transition={{\n layout: {\n duration: 0.2,\n ease: [0.1, 0.1, 0.2, 1],\n },\n }}\n >\n <AnimatePresence>\n <motion.div\n variants={modalAnimation ?? defaultModalAnimation}\n transition={{ duration: 0.2, ease: 'easeInOut' }}\n animate=\"animate\"\n initial=\"initial\"\n exit=\"exit\"\n className=\"NovaNoScrolling novacore:relative novacore:rounded-t-2xl novacore:sm:rounded-2xl novacore:overflow-hidden\"\n >\n <div\n className={cn(\n 'NovaNoScrolling novacore:relative novacore:flex novacore:max-h-[98dvh] novacore:w-full novacore:flex-col novacore:gap-3 novacore:overflow-y-auto novacore:rounded-t-2xl novacore:sm:rounded-2xl novacore:shadow-2xl',\n 'novacore:border novacore:border-[var(--tuwa-border-primary)] novacore:bg-[var(--tuwa-bg-primary)]',\n )}\n >\n {children}\n </div>\n </motion.div>\n </AnimatePresence>\n </motion.div>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n aria-describedby=\"tuwa:modal-header\"\n className={cn(\n 'novacore:sticky novacore:flex novacore:top-0 novacore:z-11 novacore:w-full novacore:flex-row novacore:items-center novacore:justify-between',\n 'novacore:border-b novacore:border-[var(--tuwa-border-primary)] novacore:bg-[var(--tuwa-bg-primary)] novacore:p-4',\n className,\n )}\n {...props}\n />\n);\nDialogHeader.displayName = 'DialogHeader';\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n aria-describedby=\"tuwa:modal-footer\"\n className={cn(\n 'novacore:flex novacore:flex-col-reverse novacore:sm:flex-row novacore:sm:justify-end novacore:sm:space-x-2',\n className,\n )}\n {...props}\n />\n);\nDialogFooter.displayName = 'DialogFooter';\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n aria-describedby=\"tuwa:modal-title\"\n className={cn(\n 'novacore:text-lg novacore:font-bold novacore:leading-none novacore:tracking-tight novacore:text-[var(--tuwa-text-primary)] novacore:m-0',\n className,\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n aria-describedby=\"tuwa:modal-description\"\n ref={ref}\n className={cn('novacore:text-sm novacore:text-[var(--tuwa-text-secondary)]', className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","import { useEffect, useMemo, useState } from 'react';\n\nexport function StarsBackground({ starsCount }: { starsCount?: number }) {\n const [isMounted, setIsMounted] = useState(false);\n useEffect(() => setIsMounted(true), []);\n\n const stars = useMemo(() => {\n if (!isMounted) {\n return [];\n }\n\n const numStars = starsCount ?? 200;\n return Array.from({ length: numStars }).map(() => ({\n x: Math.random() * window.innerWidth,\n y: Math.random() * window.innerHeight,\n r: Math.random() * 1 + 0.5,\n isSupernova: Math.random() < 0.1,\n delay: Math.random() * 10,\n duration: 5 + Math.random() * 5,\n }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isMounted]);\n\n return (\n <div className=\"novacore:absolute novacore:inset-0 novacore:z-1 novacore:h-full novacore:w-full novacore:overflow-hidden\">\n <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\">\n <defs>\n <style>\n {`\n /* Pulse animation now includes scale for a more organic feel. */\n @keyframes pulse {\n 0%, 100% { \n opacity: 0.2;\n transform: scale(0.9);\n }\n 50% {\n opacity: 0.8;\n transform: scale(1.2);\n }\n }\n \n /* Supernova animation remains impactful. */\n @keyframes supernova {\n 0% { \n transform: scale(1);\n stroke: rgba(var(--tuwa-bg-primary), 0.5);\n opacity: 0.8;\n }\n 20% { \n transform: scale(3);\n stroke: var(--tuwa-button-gradient-from);\n opacity: 1;\n }\n 100% { \n transform: scale(0.8);\n stroke: var(--tuwa-button-gradient-to);\n opacity: 0;\n }\n }\n\n .pulsar {\n animation-name: pulse;\n animation-timing-function: ease-in-out;\n animation-iteration-count: infinite;\n transform-origin: center;\n }\n\n .supernova {\n animation-name: supernova;\n animation-timing-function: ease-out;\n animation-iteration-count: infinite;\n transform-origin: center;\n stroke-width: 2;\n }\n `}\n </style>\n </defs>\n\n {stars.map((star, i) => (\n <circle\n key={i}\n cx={star.x}\n cy={star.y}\n r={star.r}\n fill={`rgba(var(--tuwa-bg-primary), 0.7)`}\n className={star.isSupernova ? 'supernova' : 'pulsar'}\n style={{\n animationDelay: `${star.delay}s`,\n animationDuration: `${star.duration}s`,\n }}\n />\n ))}\n </svg>\n </div>\n );\n}\n","/**\n * @file This file contains a custom React hook for copying text to the clipboard.\n */\n\nimport { useCallback, useState } from 'react';\n\n/**\n * A custom React hook that provides functionality to copy text to the clipboard.\n * It also manages a \"copied\" state with a timeout for user feedback.\n *\n * @param {number} [timeout=2000] - The duration in milliseconds to keep the `isCopied` state as true.\n * @returns {{\n * isCopied: boolean;\n * copy: (text: string) => Promise<void>;\n * error: Error | null;\n * }} An object containing the `isCopied` state, the `copy` function, and any potential error.\n *\n * @example\n * const MyComponent = () => {\n * const { isCopied, copy } = useCopyToClipboard();\n * const textToCopy = '0x123...';\n *\n * return (\n * <button onClick={() => copy(textToCopy)}>\n * {isCopied ? 'Copied!' : 'Copy Address'}\n * </button>\n * );\n * }\n */\nexport function useCopyToClipboard(timeout = 2000): {\n isCopied: boolean;\n copy: (text: string) => Promise<void>;\n error: Error | null;\n} {\n const [isCopied, setIsCopied] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const copy = useCallback(\n async (text: string) => {\n if (!text) return;\n\n try {\n await navigator.clipboard.writeText(text);\n setIsCopied(true);\n setError(null);\n\n setTimeout(() => setIsCopied(false), timeout);\n } catch (e) {\n const copyError = e instanceof Error ? e : new Error('Failed to copy text.');\n console.error(copyError);\n setError(copyError);\n\n // Reset error state after timeout as well\n setTimeout(() => setError(null), timeout);\n }\n },\n [timeout],\n );\n\n return { isCopied, copy, error };\n}\n","import { useEffect, useState } from 'react';\n\n/**\n * A custom hook to detect if a media query matches the current screen dimensions.\n * Handles SSR gracefully.\n * @param {string} query - The media query string (e.g., '(max-width: 767px)').\n * @returns {boolean} Whether the query matches or not.\n */\nexport function useMediaQuery(query: string): boolean {\n const getMatches = (q: string): boolean => {\n if (typeof window !== 'undefined') {\n return window.matchMedia(q).matches;\n }\n return false;\n };\n\n const [matches, setMatches] = useState<boolean>(getMatches(query));\n\n useEffect(() => {\n const media = window.matchMedia(query);\n const listener = () => setMatches(media.matches);\n\n // Re-check on mount and subscribe to changes\n listener();\n window.addEventListener('resize', listener);\n\n return () => window.removeEventListener('resize', listener);\n }, [query]);\n\n return matches;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/classes.ts","../src/utils/cn.ts","../src/utils/deepMerge.ts","../src/utils/textCenterEllipsis.ts","../src/components/ChevronArrowWithAnim.tsx","../src/components/CloseIcon.tsx","../src/components/Modal.tsx","../src/components/StarsBackground.tsx","../src/components/ToastCloseButton.tsx","../src/hooks/useCopyToClipboard.ts","../src/hooks/useMediaQuery.ts"],"names":["standardButtonClasses","cn","inputs","twMerge","clsx","isObject","item","deepMerge","target","source","output","key","targetValue","sourceValue","textCenterEllipsis","str","from","to","start","end","ChevronArrowWithAnim","className","strokeWidth","isOpen","jsxs","jsx","AnimatePresence","motion","CloseIcon","h","props","ref","Dialog","DialogTrigger","DialogPortal","DialogClose","defaultModalAnimation","defaultModalBackdropAnimation","DialogOverlay","backdropAnimation","DialogContent","children","modalAnimation","DialogHeader","DialogFooter","DialogTitle","DialogDescription","StarsBackground","starsCount","isMounted","setIsMounted","useState","useEffect","stars","useMemo","numStars","star","i","ToastCloseButton","closeToast","useCopyToClipboard","timeout","isCopied","setIsCopied","error","setError","copy","useCallback","text","e","copyError","useMediaQuery","query","getMatches","q","matches","setMatches","media","listener"],"mappings":"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","file":"index.js","sourcesContent":["export const standardButtonClasses =\n 'novacore:cursor-pointer novacore:rounded-md novacore:bg-[var(--tuwa-standart-button-bg)] novacore:px-3 novacore:py-2 novacore:flex novacore:items-center novacore:gap-1 novacore:text-sm novacore:font-semibold novacore:text-[var(--tuwa-text-primary)] novacore:transition-colors novacore:hover:bg-[var(--tuwa-standart-button-hover)] novacore:disabled:cursor-not-allowed novacore:disabled:opacity-50';\n","/**\n * @file This file contains a utility function for conditionally merging Tailwind CSS classes.\n */\n\nimport { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * A utility function to conditionally join class names together and resolve\n * conflicting Tailwind CSS classes.\n *\n * It combines the functionality of `clsx` and `tailwind-merge`.\n *\n * @param {...ClassValue[]} inputs - A list of class values to be combined.\n * This can include strings, numbers, objects, arrays, and booleans.\n * @returns {string} The final, merged class name string.\n *\n * @example\n * cn('p-4', 'bg-red-500', { 'font-bold': true }); // => 'p-4 bg-red-500 font-bold'\n * cn('p-2', 'p-4'); // => 'p-4' (tailwind-merge resolves the conflict)\n *\n * @see https://github.com/dcastil/tailwind-merge\n * @see https://github.com/lukeed/clsx\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","/**\n * @file This file contains a utility for performing a deep (recursive) merge of two objects.\n */\n\n/**\n * Checks if the provided item is a plain object (i.e., not null and not an array).\n *\n * @param {any} item - The item to check.\n * @returns {item is Record<string, any>} True if the item is a plain object, otherwise false.\n */\nconst isObject = (item: any): item is Record<string, any> => {\n return item && typeof item === 'object' && !Array.isArray(item);\n};\n\n/**\n * Recursively merges the properties of a source object into a target object.\n * This function creates a new object and does not mutate the original target.\n *\n * @template T - The type of the objects being merged.\n * @param {T} target - The base object.\n * @param {Partial<T>} source - The object with properties to merge into the target.\n * @returns {T} A new object representing the merged result.\n *\n * @example\n * const defaults = { a: 1, b: { c: 2, d: 3 } };\n * const custom = { b: { c: 99 } };\n * const result = deepMerge(defaults, custom);\n * // result will be { a: 1, b: { c: 99, d: 3 } }\n */\nexport function deepMerge<T extends object>(target: T, source: Partial<T>): T {\n // Start with a shallow copy of the target to avoid mutation.\n const output = { ...target };\n\n if (isObject(target) && isObject(source)) {\n // Iterate over the keys in the source object.\n Object.keys(source).forEach((key) => {\n const targetValue = target[key as keyof T];\n const sourceValue = source[key as keyof T];\n\n // If the value is an object in both target and source, merge them recursively.\n if (isObject(targetValue) && isObject(sourceValue)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n (output as Record<string, any>)[key] = deepMerge(targetValue, sourceValue);\n } else {\n // Otherwise, the source value overwrites the target value.\n (output as Record<string, any>)[key] = sourceValue;\n }\n });\n }\n\n return output;\n}\n","/**\n * @file This file contains a utility function for truncating a string with a center ellipsis.\n */\n\n/**\n * Truncates a string by showing a specified number of characters from the start and end,\n * with an ellipsis in the middle. If the string is too short to be truncated, it's returned as is.\n *\n * @param {string} str - The string to truncate.\n * @param {number} from - The number of characters to show from the beginning of the string.\n * @param {number} to - The number of characters to show from the end of the string.\n * @returns {string} The truncated string, or the original string if it's too short.\n *\n * @example\n * const hash = '0x1234567890abcdef1234567890abcdef';\n * textCenterEllipsis(hash, 6, 4); // => \"0x1234...cdef\"\n *\n * textCenterEllipsis('short', 6, 4); // => \"short\"\n */\nexport function textCenterEllipsis(str: string | undefined | null, from: number, to: number): string {\n if (!str) {\n return '';\n }\n\n // If the string is short enough, don't truncate it.\n if (str.length <= from + to) {\n return str;\n }\n\n const start = str.slice(0, from);\n const end = str.slice(str.length - to);\n\n return `${start}...${end}`;\n}\n","import { AnimatePresence, motion } from 'framer-motion';\n\nimport { cn } from '../utils';\n\nexport function ChevronArrowWithAnim({\n className,\n strokeWidth,\n isOpen,\n}: {\n className?: string;\n strokeWidth?: number;\n isOpen?: boolean;\n}) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={strokeWidth ?? 2}\n stroke=\"currentColor\"\n className={cn('novacore:w-4 novacore:h-4 novacore:text-[var(--tuwa-text-secondary)]', className)}\n >\n <AnimatePresence>\n {isOpen && (\n <motion.path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"m4.5 15.75 7.5-7.5 7.5 7.5\"\n variants={{\n hidden: { translateY: 3, scaleY: 0.8, opacity: 0 },\n visible: { translateY: 0, scaleY: 1, opacity: 1 },\n }}\n initial=\"hidden\"\n animate=\"visible\"\n transition={{ duration: 0.4 }}\n />\n )}\n </AnimatePresence>\n\n <AnimatePresence>\n {!isOpen && (\n <motion.path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"m19.5 8.25-7.5 7.5-7.5-7.5\"\n className=\"novacore:relative\"\n variants={{\n hidden: { translateY: -3, scaleY: 0.8, opacity: 0 },\n visible: { translateY: 0, scaleY: 1, opacity: 1 },\n }}\n initial=\"hidden\"\n animate=\"visible\"\n transition={{ duration: 0.4 }}\n />\n )}\n </AnimatePresence>\n </svg>\n );\n}\n","import * as React from 'react';\n\nimport { cn } from '../utils';\n\n/**\n * A reusable close button icon (X mark) styled with TUWA color scheme.\n */\nexport const CloseIcon = React.forwardRef<SVGSVGElement, React.SVGAttributes<SVGSVGElement>>(\n ({ className, ...props }, ref) => (\n <svg\n ref={ref}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cn(\n 'novacore:h-5 novacore:w-5 novacore:text-[var(--tuwa-text-primary)] novacore:transition-colors',\n className,\n )}\n {...props}\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n ),\n);\nCloseIcon.displayName = 'CloseIcon';\n","import * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { AnimatePresence, motion, Variants } from 'framer-motion';\nimport * as React from 'react';\n\nimport { cn } from '../utils';\n\nconst Dialog = DialogPrimitive.Root;\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogPortal = DialogPrimitive.Portal;\nconst DialogClose = DialogPrimitive.Close;\n\nconst defaultModalAnimation: Variants = {\n initial: { opacity: 0, scale: 0.9, y: 20 },\n animate: { opacity: 1, scale: 1, y: 0 },\n exit: {\n opacity: 0,\n scale: 0.9,\n transition: {\n duration: 0.2,\n },\n },\n};\n\nconst defaultModalBackdropAnimation: Variants = {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n exit: { opacity: 0 },\n};\n\nconst DialogOverlay = ({ className, backdropAnimation }: { backdropAnimation?: Variants; className?: string }) => {\n React.useEffect(() => {\n if (typeof window !== 'undefined') {\n window.document.body.classList.add('NovaModalOpen');\n }\n return () => {\n if (typeof window !== 'undefined') {\n window.document.body.classList.remove('NovaModalOpen');\n }\n };\n }, []);\n return (\n <AnimatePresence>\n <motion.div\n variants={backdropAnimation ?? defaultModalBackdropAnimation}\n transition={{ duration: 0.2, ease: 'easeInOut' }}\n animate=\"animate\"\n initial=\"initial\"\n exit=\"exit\"\n className=\"novacore:relative novacore:rounded-t-2xl novacore:sm:rounded-2xl novacore:overflow-hidden\"\n >\n <div\n className={cn(\n 'novacore:fixed novacore:inset-0 novacore:z-50 novacore:bg-black/55 novacore:backdrop-blur-sm novacore:backdrop-saturate-150',\n className,\n )}\n />\n </motion.div>\n </AnimatePresence>\n );\n};\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n modalAnimation?: Variants;\n backdropAnimation?: Variants;\n }\n>(({ className, children, modalAnimation, backdropAnimation, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay backdropAnimation={backdropAnimation} />\n\n <DialogPrimitive.Content\n aria-describedby=\"tuwa:modal-content\"\n ref={ref}\n className={cn(\n 'NovaNoScrolling novacore:fixed novacore:bottom-0 novacore:left-0 novacore:p-0 novacore:sm:bottom-auto novacore:sm:left-[50%] novacore:sm:top-[50%] novacore:sm:translate-x-[-50%] novacore:sm:translate-y-[-50%] novacore:z-50 novacore:sm:p-4 novacore:outline-none',\n className,\n )}\n {...props}\n >\n <motion.div\n layout\n className=\"NovaNoScrolling novacore:relative novacore:overflow-hidden\"\n transition={{\n layout: {\n duration: 0.2,\n ease: [0.1, 0.1, 0.2, 1],\n },\n }}\n >\n <AnimatePresence>\n <motion.div\n variants={modalAnimation ?? defaultModalAnimation}\n transition={{ duration: 0.2, ease: 'easeInOut' }}\n animate=\"animate\"\n initial=\"initial\"\n exit=\"exit\"\n className=\"NovaNoScrolling novacore:relative novacore:rounded-t-2xl novacore:sm:rounded-2xl novacore:overflow-hidden\"\n >\n <div\n className={cn(\n 'NovaNoScrolling novacore:relative novacore:flex novacore:max-h-[98dvh] novacore:w-full novacore:flex-col novacore:gap-3 novacore:overflow-y-auto novacore:rounded-t-2xl novacore:sm:rounded-2xl novacore:shadow-2xl',\n 'novacore:border novacore:border-[var(--tuwa-border-primary)] novacore:bg-[var(--tuwa-bg-primary)]',\n )}\n >\n {children}\n </div>\n </motion.div>\n </AnimatePresence>\n </motion.div>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n aria-describedby=\"tuwa:modal-header\"\n className={cn(\n 'novacore:sticky novacore:flex novacore:top-0 novacore:z-11 novacore:w-full novacore:flex-row novacore:items-center novacore:justify-between',\n 'novacore:border-b novacore:border-[var(--tuwa-border-primary)] novacore:bg-[var(--tuwa-bg-primary)] novacore:p-4',\n className,\n )}\n {...props}\n />\n);\nDialogHeader.displayName = 'DialogHeader';\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n aria-describedby=\"tuwa:modal-footer\"\n className={cn(\n 'novacore:flex novacore:flex-col-reverse novacore:sm:flex-row novacore:sm:justify-end novacore:sm:space-x-2',\n className,\n )}\n {...props}\n />\n);\nDialogFooter.displayName = 'DialogFooter';\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n aria-describedby=\"tuwa:modal-title\"\n className={cn(\n 'novacore:text-lg novacore:font-bold novacore:leading-none novacore:tracking-tight novacore:text-[var(--tuwa-text-primary)] novacore:m-0',\n className,\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n aria-describedby=\"tuwa:modal-description\"\n ref={ref}\n className={cn('novacore:text-sm novacore:text-[var(--tuwa-text-secondary)]', className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","import { useEffect, useMemo, useState } from 'react';\n\nexport function StarsBackground({ starsCount }: { starsCount?: number }) {\n const [isMounted, setIsMounted] = useState(false);\n useEffect(() => setIsMounted(true), []);\n\n const stars = useMemo(() => {\n if (!isMounted) {\n return [];\n }\n\n const numStars = starsCount ?? 200;\n return Array.from({ length: numStars }).map(() => ({\n x: Math.random() * window.innerWidth,\n y: Math.random() * window.innerHeight,\n r: Math.random() * 1 + 0.5,\n isSupernova: Math.random() < 0.1,\n delay: Math.random() * 10,\n duration: 5 + Math.random() * 5,\n }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isMounted]);\n\n return (\n <div className=\"novacore:absolute novacore:inset-0 novacore:z-1 novacore:h-full novacore:w-full novacore:overflow-hidden\">\n <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\">\n <defs>\n <style>\n {`\n /* Pulse animation now includes scale for a more organic feel. */\n @keyframes pulse {\n 0%, 100% { \n opacity: 0.2;\n transform: scale(0.9);\n }\n 50% {\n opacity: 0.8;\n transform: scale(1.2);\n }\n }\n \n /* Supernova animation remains impactful. */\n @keyframes supernova {\n 0% { \n transform: scale(1);\n stroke: rgba(var(--tuwa-bg-primary), 0.5);\n opacity: 0.8;\n }\n 20% { \n transform: scale(3);\n stroke: var(--tuwa-button-gradient-from);\n opacity: 1;\n }\n 100% { \n transform: scale(0.8);\n stroke: var(--tuwa-button-gradient-to);\n opacity: 0;\n }\n }\n\n .pulsar {\n animation-name: pulse;\n animation-timing-function: ease-in-out;\n animation-iteration-count: infinite;\n transform-origin: center;\n }\n\n .supernova {\n animation-name: supernova;\n animation-timing-function: ease-out;\n animation-iteration-count: infinite;\n transform-origin: center;\n stroke-width: 2;\n }\n `}\n </style>\n </defs>\n\n {stars.map((star, i) => (\n <circle\n key={i}\n cx={star.x}\n cy={star.y}\n r={star.r}\n fill={`rgba(var(--tuwa-bg-primary), 0.7)`}\n className={star.isSupernova ? 'supernova' : 'pulsar'}\n style={{\n animationDelay: `${star.delay}s`,\n animationDuration: `${star.duration}s`,\n }}\n />\n ))}\n </svg>\n </div>\n );\n}\n","/**\n * @file This file contains a reusable close button component, designed primarily for toast notifications.\n */\n\nimport { cn } from '../utils';\n\n/**\n * Defines the props for the ToastCloseButton component.\n */\nexport type ToastCloseButtonProps = {\n /**\n * The function to call when the button is clicked. This is typically provided by the\n * toast library (e.g., react-toastify) to dismiss the notification.\n */\n closeToast?: (e: React.MouseEvent<HTMLElement>) => void;\n};\n\n/**\n * A simple, styled close button component ('X' icon) intended for use within toast notifications.\n * It uses theme-aware CSS variables for styling and i18n labels for accessibility.\n */\nexport function ToastCloseButton({ closeToast }: ToastCloseButtonProps) {\n return (\n <button\n type=\"button\"\n onClick={closeToast}\n aria-label=\"Close toast notification\"\n title=\"Close toast notification\"\n className={cn(\n 'novacore:absolute novacore:top-2 novacore:right-2 novacore:cursor-pointer novacore:rounded-full novacore:p-1',\n 'novacore:text-[var(--tuwa-text-tertiary)] novacore:transition-colors',\n 'novacore:hover:bg-[var(--tuwa-bg-muted)] novacore:hover:text-[var(--tuwa-text-primary)]',\n )}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n className=\"novacore:h-5 novatx:w-5\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18 18 6M6 6l12 12\" />\n </svg>\n </button>\n );\n}\n","/**\n * @file This file contains a custom React hook for copying text to the clipboard.\n */\n\nimport { useCallback, useState } from 'react';\n\n/**\n * A custom React hook that provides functionality to copy text to the clipboard.\n * It also manages a \"copied\" state with a timeout for user feedback.\n *\n * @param {number} [timeout=2000] - The duration in milliseconds to keep the `isCopied` state as true.\n * @returns {{\n * isCopied: boolean;\n * copy: (text: string) => Promise<void>;\n * error: Error | null;\n * }} An object containing the `isCopied` state, the `copy` function, and any potential error.\n *\n * @example\n * const MyComponent = () => {\n * const { isCopied, copy } = useCopyToClipboard();\n * const textToCopy = '0x123...';\n *\n * return (\n * <button onClick={() => copy(textToCopy)}>\n * {isCopied ? 'Copied!' : 'Copy Address'}\n * </button>\n * );\n * }\n */\nexport function useCopyToClipboard(timeout = 2000): {\n isCopied: boolean;\n copy: (text: string) => Promise<void>;\n error: Error | null;\n} {\n const [isCopied, setIsCopied] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const copy = useCallback(\n async (text: string) => {\n if (!text) return;\n\n try {\n await navigator.clipboard.writeText(text);\n setIsCopied(true);\n setError(null);\n\n setTimeout(() => setIsCopied(false), timeout);\n } catch (e) {\n const copyError = e instanceof Error ? e : new Error('Failed to copy text.');\n console.error(copyError);\n setError(copyError);\n\n // Reset error state after timeout as well\n setTimeout(() => setError(null), timeout);\n }\n },\n [timeout],\n );\n\n return { isCopied, copy, error };\n}\n","import { useEffect, useState } from 'react';\n\n/**\n * A custom hook to detect if a media query matches the current screen dimensions.\n * Handles SSR gracefully.\n * @param {string} query - The media query string (e.g., '(max-width: 767px)').\n * @returns {boolean} Whether the query matches or not.\n */\nexport function useMediaQuery(query: string): boolean {\n const getMatches = (q: string): boolean => {\n if (typeof window !== 'undefined') {\n return window.matchMedia(q).matches;\n }\n return false;\n };\n\n const [matches, setMatches] = useState<boolean>(getMatches(query));\n\n useEffect(() => {\n const media = window.matchMedia(query);\n const listener = () => setMatches(media.matches);\n\n // Re-check on mount and subscribe to changes\n listener();\n window.addEventListener('resize', listener);\n\n return () => window.removeEventListener('resize', listener);\n }, [query]);\n\n return matches;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tuwaio/nova-core",
|
|
3
|
-
"version": "1.0.0-fix-integrate-orbit-alpha.
|
|
3
|
+
"version": "1.0.0-fix-integrate-orbit-alpha.28.5540261",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": "Oleksandr Tkach",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -55,20 +55,20 @@
|
|
|
55
55
|
"tailwind-merge": "3.x.x"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
|
-
"@tailwindcss/postcss": "^4.1.
|
|
59
|
-
"@tailwindcss/vite": "^4.1.
|
|
60
|
-
"@types/react": "^19.
|
|
58
|
+
"@tailwindcss/postcss": "^4.1.14",
|
|
59
|
+
"@tailwindcss/vite": "^4.1.14",
|
|
60
|
+
"@types/react": "^19.2.2",
|
|
61
61
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
62
62
|
"autoprefixer": "^10.4.21",
|
|
63
63
|
"clsx": "^2.1.1",
|
|
64
|
-
"framer-motion": "^12.23.
|
|
64
|
+
"framer-motion": "^12.23.24",
|
|
65
65
|
"postcss": "^8.5.6",
|
|
66
66
|
"postcss-cli": "^11.0.1",
|
|
67
|
-
"react": "^19.
|
|
68
|
-
"tailwindcss": "^4.1.
|
|
67
|
+
"react": "^19.2.0",
|
|
68
|
+
"tailwindcss": "^4.1.14",
|
|
69
69
|
"tailwind-merge": "^3.3.1",
|
|
70
70
|
"tsup": "^8.5.0",
|
|
71
|
-
"typescript": "^5.9.
|
|
71
|
+
"typescript": "^5.9.3"
|
|
72
72
|
},
|
|
73
73
|
"scripts": {
|
|
74
74
|
"build": "tsup && pnpm exec postcss ./src/styles/variables.css -o ./dist/index.css"
|