@cleen/ui-core 0.1.12 → 0.1.13
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.d.ts +5 -6
- package/dist/index.js +1 -1
- package/package.json +2 -1
package/dist/index.d.ts
CHANGED
|
@@ -13,6 +13,8 @@ interface UseAnimateNumberProps {
|
|
|
13
13
|
}
|
|
14
14
|
declare const useAnimateNumber: ({ targetNumber, defaultNumber, duration, disabled, easeOut, }: UseAnimateNumberProps) => number;
|
|
15
15
|
|
|
16
|
+
declare const useBodyScrollLock: (isLocked: boolean) => void;
|
|
17
|
+
|
|
16
18
|
interface UseControlledProps<T> {
|
|
17
19
|
value?: T;
|
|
18
20
|
defaultValue?: T;
|
|
@@ -82,17 +84,14 @@ interface UsePositionCloseProps {
|
|
|
82
84
|
}
|
|
83
85
|
/**
|
|
84
86
|
* Hook to calculate fixed positioning for overlays relative to trigger elements.
|
|
85
|
-
*
|
|
87
|
+
* Keeps position in sync with viewport and layout changes.
|
|
86
88
|
*/
|
|
87
89
|
declare const usePositionClose: ({ triggerRef, targetRef, position, offset, isOpen, }: UsePositionCloseProps) => {
|
|
88
90
|
positionStyles: {
|
|
89
91
|
top: number;
|
|
90
92
|
left: number;
|
|
91
|
-
} | {
|
|
92
|
-
top: number;
|
|
93
|
-
left: number;
|
|
94
93
|
};
|
|
95
|
-
optimalPosition: Position
|
|
94
|
+
optimalPosition: Position;
|
|
96
95
|
isMounted: boolean;
|
|
97
96
|
};
|
|
98
97
|
|
|
@@ -255,4 +254,4 @@ declare const formatFileSize: (bytes?: number) => string;
|
|
|
255
254
|
declare const formatAudioTime: (seconds: number) => string;
|
|
256
255
|
declare const getCreatedDate: (date: string) => string;
|
|
257
256
|
|
|
258
|
-
export { type ArrayElement, ColorHelpers, type ColorVar, type ComponentClassnames, type ComponentStyles, type HintedString, type PartialDeep, type Position, applyDefaults, calculateOptimalPosition, calculatePositionValues, cn, encodeWav, formatAudioTime, formatFileSize, getCreatedDate, getRandomImageUrl, trimBlob, useAnimateNumber, useCleenColors, useCleenOverlays, useControlled, useDebounce, useDisclosure, useForm, useOutsideClick, usePaginationState, usePositionClose, useValidation, useWidthDynamicResize };
|
|
257
|
+
export { type ArrayElement, ColorHelpers, type ColorVar, type ComponentClassnames, type ComponentStyles, type HintedString, type PartialDeep, type Position, applyDefaults, calculateOptimalPosition, calculatePositionValues, cn, encodeWav, formatAudioTime, formatFileSize, getCreatedDate, getRandomImageUrl, trimBlob, useAnimateNumber, useBodyScrollLock, useCleenColors, useCleenOverlays, useControlled, useDebounce, useDisclosure, useForm, useOutsideClick, usePaginationState, usePositionClose, useValidation, useWidthDynamicResize };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useEffect as M,useState as A}from"react";var E=n=>1-(1-n)*(1-n),ae=({targetNumber:n,defaultNumber:r=0,duration:t=1e3,disabled:e=!1,easeOut:o=!0})=>{let[s,i]=A(r);return M(()=>{if(e)return;let a=null,l=c=>{a||(a=c);let u=c-a,f=Math.min(u/t,1);o&&(f=E(f));let m=f*n;i(m),m<n&&requestAnimationFrame(l)};requestAnimationFrame(l)},[n,t,e,o]),e?n:s};import{useEffect as U,useState as B}from"react";var ue=({value:n,defaultValue:r,onChange:t})=>{let e=n!==void 0,[o,s]=B(r),i=e?n:o,a=l=>{e||s(l),t?.(l)};return U(()=>{e||s(n??r??void 0)},[n,r,e]),{value:i,isControlled:e,handleChange:a}};import{useEffect as D,useState as V}from"react";var de=(n,r)=>{let[t,e]=V(n);return D(()=>{let o=setTimeout(()=>{e(n)},r);return()=>{clearTimeout(o)}},[n,r]),t};import{useState as L}from"react";var ge=n=>{let[r,t]=L(!1),e=n?.value!==void 0?n.value:r;return{isOpen:e,open:()=>{t(!0),n?.setValue?.(!0)},close:()=>{t(!1),n?.setValue?.(!1)},toggle:()=>{t(a=>!a),n?.setValue?.(!e)}}};import{useEffect as R,useMemo as $,useState as j}from"react";var Ce=({defaultValue:n,resetOnDefaultValueChange:r=!0})=>{let[t,e]=j(n),o=()=>e(n),s=(a,l)=>{e(c=>({...c,[a]:l}))},i=$(()=>JSON.stringify(t)!==JSON.stringify(n),[t,n]);return R(()=>{n&&r&&e(n)},[n,r]),{form:t,isDirty:i,setForm:e,setField:s,reset:o}};import{useEffect as W}from"react";function Te({refs:n,handler:r,enabled:t=!0}){W(()=>{if(!t)return;let e=o=>{n.some(i=>{let a=i.current;return a?a.contains(o.target):!1})||setTimeout(()=>r(o),0)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e)}},[n,r,t])}import{useState as P}from"react";function ke(n={}){let{initialPage:r=1,initialPageSize:t=10}=n,[e,o]=P(r),[s,i]=P(t);return{page:e,setPage:o,pageSize:s,setPageSize:i,handleNextPage:u=>o(u),handlePreviousPage:u=>o(u),handlePageChange:u=>o(u)}}var T=(n,r,t)=>{let e={width:window.innerWidth,height:window.innerHeight},o=t;if(t==="left"||t==="right"){let l=t==="left",c=r.left,u=e.width-r.right;return l&&c<n.width&&u>n.width?"right":!l&&u<n.width&&c>n.width?"left":o}let s=t.startsWith("bottom"),i=e.height-r.bottom,a=r.top;if(s&&i<n.height&&a>n.height?o=t.replace("bottom","top"):!s&&t.startsWith("top")&&a<n.height&&i>n.height&&(o=t.replace("top","bottom")),t.includes("-")){let l=t.endsWith("left"),c=e.width-r.right,u=r.left;l&&c<n.width&&u>n.width?o=o.replace("left","right"):!l&&c<n.width&&u>n.width&&(o=o.replace("right","left"))}return o},x=(n,r,t,e)=>{if(!r)return{top:0,left:0};let o=window.scrollY,s=window.scrollX,i=e||0,a=0;t.startsWith("bottom")?a=r.bottom+o+i:t.startsWith("top")?a=r.top+o-(n?.height||0)-i:a=r.top+o+r.height/2-(n?.height||0)/2;let l=0;return t==="left"?l=r.left+s-(n?.width||0)-i:t==="right"?l=r.right+s+i:t.endsWith("left")||t==="bottom"||t==="top"?l=r.left+s:t.endsWith("right")&&(l=r.right+s-(n?.width||0)),(t==="bottom"||t==="top")&&(l=r.left+s+r.width/2-(n?.width||0)/2),{top:a,left:l}};import{useEffect as z,useMemo as F,useState as I}from"react";var Ee=({triggerRef:n,targetRef:r,position:t="bottom-left",offset:e=8,isOpen:o})=>{let[s,i]=I(!1),{positionStyles:a,optimalPosition:l}=F(()=>{if(s&&r.current&&n.current){let c=r.current.getBoundingClientRect(),u=n.current.getBoundingClientRect(),f=T(c,u,t);return{positionStyles:x(c,u,f,e),optimalPosition:f}}return{positionStyles:{top:0,left:0},optimal:t}},[n,r,t,e,s]);return z(()=>{i(!!o)},[o]),{positionStyles:a,optimalPosition:l,isMounted:s}};import{useCallback as h,useState as N}from"react";var De=n=>{let[r,t]=N(n),e=h((i,a)=>{t(l=>(l[i]=a,{...l}))},[]),o=h(()=>{t(n)},[n]),s=h(i=>{t(a=>(delete a[i],{...a}))},[]);return{errors:r,setError:e,setErrors:t,clearError:s,clearErrors:o}};import{useEffect as H}from"react";var Re=({ref:n,skip:r},t)=>{H(()=>{let e=n.current;if(!e||r)return;let o=e.offsetWidth;e.style.width=`${o}px`,requestAnimationFrame(()=>{e.style.width="auto";let s=e.offsetWidth;e.style.width=`${o}px`,e.offsetHeight,e.style.width=`${s}px`;let i=()=>{e&&(e.style.width="auto"),e?.removeEventListener("transitionend",i)};e.addEventListener("transitionend",i)})},t)};import{create as G}from"zustand";import{persist as q}from"zustand/middleware";var S="--cleen-",K=["white","black","gray","pink","purple","indigo","blue","primary","success","warning","error","brand","sidebar","background"],ze=G()(q((n,r)=>({colors:{},getColors:()=>{let t=r().colors;return K.reduce((e,o)=>(t[o]?e[o]=t[o]:e[o]=getComputedStyle(document.documentElement).getPropertyValue(`${S}${o}`),e),{})},getColor:t=>{let e=r().colors;return e[t]?e[t]:getComputedStyle(document.documentElement).getPropertyValue(`${S}${t}`)},setColors:t=>Object.entries(t).map(([e,o])=>n(s=>({colors:{...s.colors,[e]:o}}))),setColor:(t,e)=>{n(o=>({colors:{...o.colors,[t]:e}}))},resetColors:()=>{n({colors:{}})},resetColor:t=>{let e=r().colors;delete e[t],n({colors:e})}}),{name:"cleen-colors"}));import{create as X}from"zustand";import{persist as J}from"zustand/middleware";var He=X()(J(n=>({overlays:[],addOverlay:r=>{n(t=>({overlays:[...t.overlays,r]}))},removeOverlay:r=>{n(t=>({overlays:t.overlays.filter(e=>e!==r)}))},clearOverlays:()=>{n({overlays:[]})}}),{name:"cleen-overlays"}));var Y=n=>{let{numberOfChannels:r,sampleRate:t,length:e}=n,o=16,s=r*o/8,i=t*s,a=e*s,l=new ArrayBuffer(44+a),c=new DataView(l),u=(m,p)=>{for(let d=0;d<p.length;d++)c.setUint8(m+d,p.charCodeAt(d))};u(0,"RIFF"),c.setUint32(4,36+a,!0),u(8,"WAVE"),u(12,"fmt "),c.setUint32(16,16,!0),c.setUint16(20,1,!0),c.setUint16(22,r,!0),c.setUint32(24,t,!0),c.setUint32(28,i,!0),c.setUint16(32,s,!0),c.setUint16(34,o,!0),u(36,"data"),c.setUint32(40,a,!0);let f=44;for(let m=0;m<e;m++)for(let p=0;p<r;p++){let d=Math.max(-1,Math.min(1,n.getChannelData(p)[m]));c.setInt16(f,d<0?d*32768:d*32767,!0),f+=2}return new Blob([l],{type:"audio/wav"})},qe=async(n,r,t)=>{let e=new AudioContext,o=await e.decodeAudioData(await n.arrayBuffer());await e.close();let{sampleRate:s,numberOfChannels:i}=o,a=Math.round(r*s),l=Math.round(t*s),c=l-a,u=new AudioContext().createBuffer(i,c,s);for(let f=0;f<i;f++)u.copyToChannel(o.getChannelData(f).subarray(a,l),f);return Y(u)};import Q from"clsx";import{createTailwindMerge as Z,getDefaultConfig as _}from"tailwind-merge";var ee=()=>({..._(),prefix:"cleen-"}),te=Z(ee),Ye=(...n)=>te(Q(n));import{darken as ne,getLuminance as k,lighten as oe,parseToRgba as g,toHex as re,toRgba as O}from"color2k";var v=class n{static deltaE(r,t){let e=n.rgb2lab(r),o=n.rgb2lab(t),s=e[0]-o[0],i=e[1]-o[1],a=e[2]-o[2],l=Math.sqrt(e[1]*e[1]+e[2]*e[2]),c=Math.sqrt(o[1]*o[1]+o[2]*o[2]),u=l-c,f=i*i+a*a-u*u;f=f<0?0:Math.sqrt(f);let m=1+.045*l,p=1+.015*l,d=s/1,w=u/m,C=f/p,y=d*d+w*w+C*C;return y<0?0:Math.sqrt(y)}static rgb2lab(r){let t=r[0]/255,e=r[1]/255,o=r[2]/255,s,i,a;return t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92,e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92,o=o>.04045?Math.pow((o+.055)/1.055,2.4):o/12.92,s=(t*.4124+e*.3576+o*.1805)/.95047,i=(t*.2126+e*.7152+o*.0722)/1,a=(t*.0193+e*.1192+o*.9505)/1.08883,s=s>.008856?Math.pow(s,1/3):7.787*s+16/116,i=i>.008856?Math.pow(i,1/3):7.787*i+16/116,a=a>.008856?Math.pow(a,1/3):7.787*a+16/116,[116*i-16,500*(s-i),200*(i-a)]}static isSimilar(r,t,e=24){return n.deltaE(g(r),g(t))<e}static adjustColorForContrast(r,t=.25){let e=re(r),o=r;try{if((e.match(/^#f{2,}e{0,2}$/i)||k(e)>.98)&&(e="#ffffff"),k(e)>.6){let s=ne(e,t);o=O(s)}else{let s=oe(e,t);o=O(s)}return o}catch{return"rgba(var(--cleen-white)"}}static getComputedColor(r){if(!r?.includes("var("))return r;let t=r.match(/var\((--[^,)]+)/)?.[1];if(t&&typeof window<"u"){let e=getComputedStyle(document.documentElement).getPropertyValue(t).trim();return e?`rgb(${e})`:void 0}}static getComputedRgb(r){if(!r)return;if(!r?.includes("var(")){let[e,o,s]=g(r);return`${e}, ${o}, ${s}`}let t=r.match(/var\((--[^,)]+)/)?.[1];if(t&&typeof window<"u")return getComputedStyle(document.documentElement).getPropertyValue(t).trim()}static trasparentize(r,t=0){return`color-mix(in srgb, ${r} ${(1-t)*100}%, transparent)`}};var se="https://picsum.photos",et=n=>{let{width:r,height:t,grayscale:e,blur:o,seed:s}=n,i=se;s&&(i+=`/seed/${encodeURIComponent(s)}`),i+=`/${r}/${t||r}`;let a=new URLSearchParams;e&&a.append("grayscale",""),o&&a.append("blur",o.toString()),s&&a.append("seed",s);let l=a.toString();return l&&(i+=`?${l}`),i};function b(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)&&Object.prototype.toString.call(n)==="[object Object]"}function nt(n,r){let t=(o,s)=>{if(s===void 0)return e(o);if(b(o)&&b(s)){let i={};return new Set([...Object.keys(o),...Object.keys(s)]).forEach(l=>{let c=o[l],u=s[l];i[l]=t(c,u)}),i}return Array.isArray(o)||Array.isArray(s)?e(s===void 0?o:s):e(s!==void 0?s:o)},e=o=>{if(o!==void 0){if(o===null)return null;if(Array.isArray(o))return o.map(s=>e(s));if(b(o)){let s={};return Object.keys(o).forEach(i=>{s[i]=e(o[i])}),s}return o}};return t(n,r)}var rt=n=>{if(n===0||!n)return"0 B";let r=1024,t=["B","KB","MB","GB","TB"],e=Math.floor(Math.log(n)/Math.log(r));return Math.round(n/Math.pow(r,e))+" "+t[e]},st=n=>{let r=Math.floor(n/60),t=Math.floor(n%60);return`${String(r).padStart(2,"0")}:${String(t).padStart(2,"0")}`},it=n=>{let r=new Date(n),e=Math.abs(new Date().getTime()-r.getTime());return`Created ${Math.ceil(e/(1e3*60*60*24))} days ago`};export{v as ColorHelpers,nt as applyDefaults,T as calculateOptimalPosition,x as calculatePositionValues,Ye as cn,Y as encodeWav,st as formatAudioTime,rt as formatFileSize,it as getCreatedDate,et as getRandomImageUrl,qe as trimBlob,ae as useAnimateNumber,ze as useCleenColors,He as useCleenOverlays,ue as useControlled,de as useDebounce,ge as useDisclosure,Ce as useForm,Te as useOutsideClick,ke as usePaginationState,Ee as usePositionClose,De as useValidation,Re as useWidthDynamicResize};
|
|
1
|
+
import{useEffect as U,useState as L}from"react";var V=e=>1-(1-e)*(1-e),fe=({targetNumber:e,defaultNumber:n=0,duration:o=1e3,disabled:t=!1,easeOut:r=!0})=>{let[s,i]=L(n);return U(()=>{if(t)return;let a=null,l=c=>{a||(a=c);let u=c-a,f=Math.min(u/o,1);r&&(f=V(f));let m=f*e;i(m),m<e&&requestAnimationFrame(l)};requestAnimationFrame(l)},[e,o,t,r]),t?e:s};import{useEffect as D}from"react";var b=0,g=null,R=()=>{if(typeof window>"u")return;let{body:e,documentElement:n}=document;if(!(!e||!n)){if(b===0){let o=window.innerWidth-n.clientWidth;g={bodyOverflow:e.style.overflow,bodyPaddingRight:e.style.paddingRight,bodyTouchAction:e.style.touchAction,htmlOverflow:n.style.overflow,htmlOverscrollBehavior:n.style.overscrollBehavior},e.style.overflow="hidden",e.style.touchAction="none",n.style.overflow="hidden",n.style.overscrollBehavior="none",o>0&&(e.style.paddingRight=`${o}px`)}b+=1}},$=()=>{if(typeof window>"u"||b===0||(b-=1,b>0))return;let{body:e,documentElement:n}=document;if(!e||!n||!g){g=null;return}e.style.overflow=g.bodyOverflow,e.style.paddingRight=g.bodyPaddingRight,e.style.touchAction=g.bodyTouchAction,n.style.overflow=g.htmlOverflow,n.style.overscrollBehavior=g.htmlOverscrollBehavior,g=null},he=e=>{D(()=>{if(e)return R(),()=>{$()}},[e])};import{useEffect as z,useState as W}from"react";var be=({value:e,defaultValue:n,onChange:o})=>{let t=e!==void 0,[r,s]=W(n),i=t?e:r,a=l=>{t||s(l),o?.(l)};return z(()=>{t||s(e??n??void 0)},[e,n,t]),{value:i,isControlled:t,handleChange:a}};import{useEffect as j,useState as F}from"react";var Ce=(e,n)=>{let[o,t]=F(e);return j(()=>{let r=setTimeout(()=>{t(e)},n);return()=>{clearTimeout(r)}},[e,n]),o};import{useState as I}from"react";var Te=e=>{let[n,o]=I(!1),t=e?.value!==void 0?e.value:n;return{isOpen:t,open:()=>{o(!0),e?.setValue?.(!0)},close:()=>{o(!1),e?.setValue?.(!1)},toggle:()=>{o(a=>!a),e?.setValue?.(!t)}}};import{useEffect as N,useMemo as H,useState as q}from"react";var ke=({defaultValue:e,resetOnDefaultValueChange:n=!0})=>{let[o,t]=q(e),r=()=>t(e),s=(a,l)=>{t(c=>({...c,[a]:l}))},i=H(()=>JSON.stringify(o)!==JSON.stringify(e),[o,e]);return N(()=>{e&&n&&t(e)},[e,n]),{form:o,isDirty:i,setForm:t,setField:s,reset:r}};import{useEffect as G}from"react";function Be({refs:e,handler:n,enabled:o=!0}){G(()=>{if(!o)return;let t=r=>{e.some(i=>{let a=i.current;return a?a.contains(r.target):!1})||setTimeout(()=>n(r),0)};return document.addEventListener("mousedown",t),document.addEventListener("touchstart",t),()=>{document.removeEventListener("mousedown",t),document.removeEventListener("touchstart",t)}},[e,n,o])}import{useState as T}from"react";function Le(e={}){let{initialPage:n=1,initialPageSize:o=10}=e,[t,r]=T(n),[s,i]=T(o);return{page:t,setPage:r,pageSize:s,setPageSize:i,handleNextPage:u=>r(u),handlePreviousPage:u=>r(u),handlePageChange:u=>r(u)}}var S=(e,n,o)=>{let t={width:window.innerWidth,height:window.innerHeight},r=o;if(o==="left"||o==="right"){let l=o==="left",c=n.left,u=t.width-n.right;return l&&c<e.width&&u>e.width?"right":!l&&u<e.width&&c>e.width?"left":r}let s=o.startsWith("bottom"),i=t.height-n.bottom,a=n.top;if(s&&i<e.height&&a>e.height?r=o.replace("bottom","top"):!s&&o.startsWith("top")&&a<e.height&&i>e.height&&(r=o.replace("top","bottom")),o.includes("-")){let l=o.endsWith("left"),c=t.width-n.right,u=n.left;l&&c<e.width&&u>e.width?r=r.replace("left","right"):!l&&c<e.width&&u>e.width&&(r=r.replace("right","left"))}return r},O=(e,n,o,t)=>{if(!n)return{top:0,left:0};let r=window.scrollY,s=window.scrollX,i=t||0,a=0;o.startsWith("bottom")?a=n.bottom+r+i:o.startsWith("top")?a=n.top+r-(e?.height||0)-i:a=n.top+r+n.height/2-(e?.height||0)/2;let l=0;return o==="left"?l=n.left+s-(e?.width||0)-i:o==="right"?l=n.right+s+i:o.endsWith("left")||o==="bottom"||o==="top"?l=n.left+s:o.endsWith("right")&&(l=n.right+s-(e?.width||0)),(o==="bottom"||o==="top")&&(l=n.left+s+n.width/2-(e?.width||0)/2),{top:a,left:l}};import{useCallback as K,useEffect as k,useState as y}from"react";var ze=({triggerRef:e,targetRef:n,position:o="bottom-left",offset:t=8,isOpen:r})=>{let[s,i]=y(!1),[a,l]=y({top:0,left:0}),[c,u]=y(o),f=K(()=>{if(!e.current||!n.current)return;let m=n.current.getBoundingClientRect(),d=e.current.getBoundingClientRect(),p=S(m,d,o),w=O(m,d,p,t);u(h=>h===p?h:p),l(h=>h.top===w.top&&h.left===w.left?h:w)},[e,n,o,t]);return k(()=>{i(r)},[r]),k(()=>{if(!r){u(o),l({top:0,left:0});return}let m=null,d=()=>{m===null&&(m=window.requestAnimationFrame(()=>{m=null,f()}))},p=new ResizeObserver(()=>{d()});return e.current&&p.observe(e.current),n.current&&p.observe(n.current),window.addEventListener("resize",d),window.addEventListener("scroll",d,!0),window.visualViewport&&(window.visualViewport.addEventListener("resize",d),window.visualViewport.addEventListener("scroll",d)),f(),d(),()=>{m!==null&&window.cancelAnimationFrame(m),p.disconnect(),window.removeEventListener("resize",d),window.removeEventListener("scroll",d,!0),window.visualViewport&&(window.visualViewport.removeEventListener("resize",d),window.visualViewport.removeEventListener("scroll",d))}},[r,o,f,e,n]),{positionStyles:a,optimalPosition:c,isMounted:s}};import{useCallback as v,useState as X}from"react";var Fe=e=>{let[n,o]=X(e),t=v((i,a)=>{o(l=>(l[i]=a,{...l}))},[]),r=v(()=>{o(e)},[e]),s=v(i=>{o(a=>(delete a[i],{...a}))},[]);return{errors:n,setError:t,setErrors:o,clearError:s,clearErrors:r}};import{useEffect as J}from"react";var He=({ref:e,skip:n},o)=>{J(()=>{let t=e.current;if(!t||n)return;let r=t.offsetWidth;t.style.width=`${r}px`,requestAnimationFrame(()=>{t.style.width="auto";let s=t.offsetWidth;t.style.width=`${r}px`,t.offsetHeight,t.style.width=`${s}px`;let i=()=>{t&&(t.style.width="auto"),t?.removeEventListener("transitionend",i)};t.addEventListener("transitionend",i)})},o)};import{create as Y}from"zustand";import{persist as Q}from"zustand/middleware";var A="--cleen-",Z=["white","black","gray","pink","purple","indigo","blue","primary","success","warning","error","brand","sidebar","background"],Xe=Y()(Q((e,n)=>({colors:{},getColors:()=>{let o=n().colors;return Z.reduce((t,r)=>(o[r]?t[r]=o[r]:t[r]=getComputedStyle(document.documentElement).getPropertyValue(`${A}${r}`),t),{})},getColor:o=>{let t=n().colors;return t[o]?t[o]:getComputedStyle(document.documentElement).getPropertyValue(`${A}${o}`)},setColors:o=>Object.entries(o).map(([t,r])=>e(s=>({colors:{...s.colors,[t]:r}}))),setColor:(o,t)=>{e(r=>({colors:{...r.colors,[o]:t}}))},resetColors:()=>{e({colors:{}})},resetColor:o=>{let t=n().colors;delete t[o],e({colors:t})}}),{name:"cleen-colors"}));import{create as _}from"zustand";import{persist as ee}from"zustand/middleware";var Ze=_()(ee(e=>({overlays:[],addOverlay:n=>{e(o=>({overlays:[...o.overlays,n]}))},removeOverlay:n=>{e(o=>({overlays:o.overlays.filter(t=>t!==n)}))},clearOverlays:()=>{e({overlays:[]})}}),{name:"cleen-overlays"}));var te=e=>{let{numberOfChannels:n,sampleRate:o,length:t}=e,r=16,s=n*r/8,i=o*s,a=t*s,l=new ArrayBuffer(44+a),c=new DataView(l),u=(m,d)=>{for(let p=0;p<d.length;p++)c.setUint8(m+p,d.charCodeAt(p))};u(0,"RIFF"),c.setUint32(4,36+a,!0),u(8,"WAVE"),u(12,"fmt "),c.setUint32(16,16,!0),c.setUint16(20,1,!0),c.setUint16(22,n,!0),c.setUint32(24,o,!0),c.setUint32(28,i,!0),c.setUint16(32,s,!0),c.setUint16(34,r,!0),u(36,"data"),c.setUint32(40,a,!0);let f=44;for(let m=0;m<t;m++)for(let d=0;d<n;d++){let p=Math.max(-1,Math.min(1,e.getChannelData(d)[m]));c.setInt16(f,p<0?p*32768:p*32767,!0),f+=2}return new Blob([l],{type:"audio/wav"})},et=async(e,n,o)=>{let t=new AudioContext,r=await t.decodeAudioData(await e.arrayBuffer());await t.close();let{sampleRate:s,numberOfChannels:i}=r,a=Math.round(n*s),l=Math.round(o*s),c=l-a,u=new AudioContext().createBuffer(i,c,s);for(let f=0;f<i;f++)u.copyToChannel(r.getChannelData(f).subarray(a,l),f);return te(u)};import oe from"clsx";import{createTailwindMerge as ne,getDefaultConfig as re}from"tailwind-merge";var se=()=>({...re(),prefix:"cleen-"}),ie=ne(se),rt=(...e)=>ie(oe(e));import{darken as ae,getLuminance as E,lighten as le,parseToRgba as C,toHex as ce,toRgba as B}from"color2k";var M=class e{static deltaE(n,o){let t=e.rgb2lab(n),r=e.rgb2lab(o),s=t[0]-r[0],i=t[1]-r[1],a=t[2]-r[2],l=Math.sqrt(t[1]*t[1]+t[2]*t[2]),c=Math.sqrt(r[1]*r[1]+r[2]*r[2]),u=l-c,f=i*i+a*a-u*u;f=f<0?0:Math.sqrt(f);let m=1+.045*l,d=1+.015*l,p=s/1,w=u/m,h=f/d,x=p*p+w*w+h*h;return x<0?0:Math.sqrt(x)}static rgb2lab(n){let o=n[0]/255,t=n[1]/255,r=n[2]/255,s,i,a;return o=o>.04045?Math.pow((o+.055)/1.055,2.4):o/12.92,t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92,r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92,s=(o*.4124+t*.3576+r*.1805)/.95047,i=(o*.2126+t*.7152+r*.0722)/1,a=(o*.0193+t*.1192+r*.9505)/1.08883,s=s>.008856?Math.pow(s,1/3):7.787*s+16/116,i=i>.008856?Math.pow(i,1/3):7.787*i+16/116,a=a>.008856?Math.pow(a,1/3):7.787*a+16/116,[116*i-16,500*(s-i),200*(i-a)]}static isSimilar(n,o,t=24){return e.deltaE(C(n),C(o))<t}static adjustColorForContrast(n,o=.25){let t=ce(n),r=n;try{if((t.match(/^#f{2,}e{0,2}$/i)||E(t)>.98)&&(t="#ffffff"),E(t)>.6){let s=ae(t,o);r=B(s)}else{let s=le(t,o);r=B(s)}return r}catch{return"rgba(var(--cleen-white)"}}static getComputedColor(n){if(!n?.includes("var("))return n;let o=n.match(/var\((--[^,)]+)/)?.[1];if(o&&typeof window<"u"){let t=getComputedStyle(document.documentElement).getPropertyValue(o).trim();return t?`rgb(${t})`:void 0}}static getComputedRgb(n){if(!n)return;if(!n?.includes("var(")){let[t,r,s]=C(n);return`${t}, ${r}, ${s}`}let o=n.match(/var\((--[^,)]+)/)?.[1];if(o&&typeof window<"u")return getComputedStyle(document.documentElement).getPropertyValue(o).trim()}static trasparentize(n,o=0){return`color-mix(in srgb, ${n} ${(1-o)*100}%, transparent)`}};var ue="https://picsum.photos",lt=e=>{let{width:n,height:o,grayscale:t,blur:r,seed:s}=e,i=ue;s&&(i+=`/seed/${encodeURIComponent(s)}`),i+=`/${n}/${o||n}`;let a=new URLSearchParams;t&&a.append("grayscale",""),r&&a.append("blur",r.toString()),s&&a.append("seed",s);let l=a.toString();return l&&(i+=`?${l}`),i};function P(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.prototype.toString.call(e)==="[object Object]"}function ut(e,n){let o=(r,s)=>{if(s===void 0)return t(r);if(P(r)&&P(s)){let i={};return new Set([...Object.keys(r),...Object.keys(s)]).forEach(l=>{let c=r[l],u=s[l];i[l]=o(c,u)}),i}return Array.isArray(r)||Array.isArray(s)?t(s===void 0?r:s):t(s!==void 0?s:r)},t=r=>{if(r!==void 0){if(r===null)return null;if(Array.isArray(r))return r.map(s=>t(s));if(P(r)){let s={};return Object.keys(r).forEach(i=>{s[i]=t(r[i])}),s}return r}};return o(e,n)}var ft=e=>{if(e===0||!e)return"0 B";let n=1024,o=["B","KB","MB","GB","TB"],t=Math.floor(Math.log(e)/Math.log(n));return Math.round(e/Math.pow(n,t))+" "+o[t]},mt=e=>{let n=Math.floor(e/60),o=Math.floor(e%60);return`${String(n).padStart(2,"0")}:${String(o).padStart(2,"0")}`},pt=e=>{let n=new Date(e),t=Math.abs(new Date().getTime()-n.getTime());return`Created ${Math.ceil(t/(1e3*60*60*24))} days ago`};export{M as ColorHelpers,ut as applyDefaults,S as calculateOptimalPosition,O as calculatePositionValues,rt as cn,te as encodeWav,mt as formatAudioTime,ft as formatFileSize,pt as getCreatedDate,lt as getRandomImageUrl,et as trimBlob,fe as useAnimateNumber,he as useBodyScrollLock,Xe as useCleenColors,Ze as useCleenOverlays,be as useControlled,Ce as useDebounce,Te as useDisclosure,ke as useForm,Be as useOutsideClick,Le as usePaginationState,ze as usePositionClose,Fe as useValidation,He as useWidthDynamicResize};
|