@cleen/ui-core 0.1.257 → 0.1.259

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 CHANGED
@@ -1,8 +1,9 @@
1
1
  export { NumericFormat, PatternFormat, removeNumericFormat, removePatternFormat, useNumericFormat, usePatternFormat } from 'react-number-format';
2
2
  import * as react from 'react';
3
- import { RefObject, CSSProperties } from 'react';
3
+ import { RefObject, ReactNode, CSSProperties } from 'react';
4
4
  import * as zustand_middleware from 'zustand/middleware';
5
5
  import * as zustand from 'zustand';
6
+ import * as react_jsx_runtime from 'react/jsx-runtime';
6
7
  import { ClassValue } from 'clsx';
7
8
 
8
9
  declare const ZIndex: {
@@ -172,6 +173,10 @@ interface UseCleenColorsStore {
172
173
  resetColors: () => void;
173
174
  resetColor: (color: ColorVar) => void;
174
175
  }
176
+ /**
177
+ * @deprecated Values are only stored per browser and are never applied to the
178
+ * page. Use `useCleenTheme` and `useThemeColor` instead.
179
+ */
175
180
  declare const useCleenColors: zustand.UseBoundStore<Omit<zustand.StoreApi<UseCleenColorsStore>, "setState" | "persist"> & {
176
181
  setState(partial: UseCleenColorsStore | Partial<UseCleenColorsStore> | ((state: UseCleenColorsStore) => UseCleenColorsStore | Partial<UseCleenColorsStore>), replace?: false | undefined): unknown;
177
182
  setState(state: UseCleenColorsStore | ((state: UseCleenColorsStore) => UseCleenColorsStore), replace: true): unknown;
@@ -206,6 +211,255 @@ declare const useCleenOverlays: zustand.UseBoundStore<Omit<zustand.StoreApi<UseC
206
211
  };
207
212
  }>;
208
213
 
214
+ /** Mode chosen by the user. `system` follows `prefers-color-scheme`. */
215
+ type CleenThemeMode = 'light' | 'dark' | 'system';
216
+ /** Mode actually applied to the document. */
217
+ type CleenResolvedThemeMode = 'light' | 'dark';
218
+ /**
219
+ * Token overrides keyed by token name without the `--cleen-` prefix,
220
+ * e.g. `{ primary: '30, 36, 74' }`. Values are `R, G, B` channels.
221
+ */
222
+ type CleenThemeTokenValues = Record<string, string>;
223
+ interface CleenThemeOverrides {
224
+ light?: CleenThemeTokenValues;
225
+ dark?: CleenThemeTokenValues;
226
+ }
227
+ /** Serializable theme: a base palette plus optional per-mode overrides. */
228
+ interface CleenThemeDefinition extends CleenThemeOverrides {
229
+ palette: string;
230
+ }
231
+
232
+ interface InitCleenThemeOptions {
233
+ /** Palette used when nothing is persisted yet */
234
+ defaultPalette?: string;
235
+ /** Mode used when nothing is persisted yet */
236
+ defaultMode?: CleenThemeMode;
237
+ /** Id of the generated overrides `<style>` tag */
238
+ styleId?: string;
239
+ /** Element receiving `data-palette`/`data-mode`. Default `<html>`. */
240
+ target?: HTMLElement;
241
+ }
242
+ /**
243
+ * Applies the `useCleenTheme` store to the document and keeps it in sync,
244
+ * including OS light/dark changes for `system` mode. Returns a cleanup function.
245
+ */
246
+ declare const initCleenTheme: ({ defaultPalette, defaultMode, styleId, target, }?: InitCleenThemeOptions) => () => void;
247
+
248
+ interface CleenThemeProviderProps extends InitCleenThemeOptions {
249
+ children?: ReactNode;
250
+ }
251
+ /**
252
+ * Optional React wrapper around `initCleenTheme()`: applies the `useCleenTheme`
253
+ * store to the document while mounted. `defaultPalette`/`defaultMode` are read
254
+ * on mount only.
255
+ */
256
+ declare function CleenThemeProvider({ children, styleId, target, ...defaults }: CleenThemeProviderProps): react_jsx_runtime.JSX.Element;
257
+
258
+ type RgbTuple = [number, number, number];
259
+ /** Parses `R, G, B` channels. Returns `null` unless each channel is 0-255. */
260
+ declare const parseRgbChannels: (value: string) => RgbTuple | null;
261
+ declare const isRgbChannels: (value: string) => boolean;
262
+ declare const formatRgbChannels: ([r, g, b]: RgbTuple) => string;
263
+ /**
264
+ * Converts any CSS color (`#1e244a`, `rgb(...)`, `hsl(...)`, a named color)
265
+ * or `R, G, B` channels to `R, G, B` channels. Returns `null` when invalid.
266
+ */
267
+ declare const toRgbChannels: (color: string) => string | null;
268
+ /** Converts `R, G, B` channels (or any CSS color) to `#rrggbb`. */
269
+ declare const rgbChannelsToHex: (color: string) => string | null;
270
+ /** WCAG contrast ratio (1-21) between two colors, or `null` when invalid. */
271
+ declare const getContrastRatio: (foreground: string, background: string) => number | null;
272
+ interface ContrastRequirement {
273
+ level?: 'AA' | 'AAA';
274
+ /** Large text: 18px+ or 14px+ bold */
275
+ largeText?: boolean;
276
+ }
277
+ declare const getMinContrastRatio: ({ level, largeText, }?: ContrastRequirement) => 3 | 3.5 | 7;
278
+ declare const meetsContrast: (ratio: number | null, requirement?: ContrastRequirement) => boolean;
279
+
280
+ interface CleenThemeContrastIssue {
281
+ token: string;
282
+ against: string;
283
+ ratio: number;
284
+ minRatio: number;
285
+ }
286
+ /**
287
+ * Checks every token pair declared in `CLEEN_THEME_TOKENS[].contrastWith`
288
+ * against the given resolved values (`R, G, B` per token).
289
+ * Pairs with a missing value are skipped.
290
+ */
291
+ declare const getThemeContrastIssues: (values: CleenThemeTokenValues, requirement?: ContrastRequirement) => CleenThemeContrastIssue[];
292
+
293
+ declare const CLEEN_THEME_MAX_SIZE: number;
294
+ type CleenThemeValidationCode = 'INVALID_JSON' | 'TOO_LARGE' | 'INVALID_TYPE' | 'UNKNOWN_PALETTE' | 'INVALID_TOKEN_NAME' | 'UNKNOWN_TOKEN' | 'INVALID_COLOR';
295
+ interface CleenThemeValidationError {
296
+ /** Location of the problem, e.g. `light.primary` */
297
+ path: string;
298
+ code: CleenThemeValidationCode;
299
+ message: string;
300
+ }
301
+ interface CleenThemeValidationOptions {
302
+ /** Allowed base palettes. Defaults to the built-in Cleen palettes. */
303
+ palettes?: readonly string[];
304
+ /** Reject tokens that aren't in `CLEEN_THEME_TOKENS`. Default `true`. */
305
+ strictTokens?: boolean;
306
+ /** Maximum serialized size in bytes. Default 16 KB. */
307
+ maxSize?: number;
308
+ }
309
+ type CleenThemeValidationResult = {
310
+ valid: true;
311
+ definition: CleenThemeDefinition;
312
+ errors: [];
313
+ } | {
314
+ valid: false;
315
+ definition?: undefined;
316
+ errors: CleenThemeValidationError[];
317
+ };
318
+ declare const isValidPaletteName: (palette: string) => boolean;
319
+ declare const isValidTokenName: (name: string) => boolean;
320
+ declare const createThemeDefinition: (palette: string, overrides?: CleenThemeOverrides) => CleenThemeDefinition;
321
+ /**
322
+ * Validates a theme definition (object or JSON string) and returns a
323
+ * normalized copy: values become `R, G, B` and empty modes are dropped.
324
+ */
325
+ declare const validateThemeDefinition: (input: unknown, { palettes, strictTokens, maxSize, }?: CleenThemeValidationOptions) => CleenThemeValidationResult;
326
+
327
+ declare const CLEEN_THEME_STYLE_ID = "cleen-theme-overrides";
328
+ declare const CLEEN_THEME_CHANGE_EVENT = "cleen:themechange";
329
+ declare const getSystemThemeMode: () => CleenResolvedThemeMode;
330
+ declare const resolveThemeMode: (mode: CleenThemeMode, systemMode?: CleenResolvedThemeMode) => CleenResolvedThemeMode;
331
+ /** Calls `listener` whenever the OS light/dark preference changes. */
332
+ declare const subscribeToSystemThemeMode: (listener: (mode: CleenResolvedThemeMode) => void) => () => void;
333
+ /** Sets `data-palette` on the root element (defaults to `<html>`). */
334
+ declare const applyThemePalette: (palette: string, root?: HTMLElement) => void;
335
+ /**
336
+ * Sets `data-mode`, the `.dark` class and `color-scheme` on the root element
337
+ * (defaults to `<html>`). Returns the applied mode.
338
+ */
339
+ declare const applyThemeMode: (mode: CleenThemeMode, root?: HTMLElement) => CleenResolvedThemeMode;
340
+ /**
341
+ * Builds the CSS for runtime overrides of a palette. Rules are scoped to
342
+ * `[data-palette]` and to the mode, so light/dark switching stays pure CSS.
343
+ * Invalid token names and values are skipped.
344
+ */
345
+ declare const buildThemeOverridesCss: ({ palette, light, dark, }: {
346
+ palette: string;
347
+ } & CleenThemeOverrides) => string;
348
+ interface ApplyThemeOverridesOptions {
349
+ /** Id of the generated `<style>` tag. Default `cleen-theme-overrides`. */
350
+ styleId?: string;
351
+ }
352
+ /**
353
+ * Writes palette overrides into a `<style>` tag in `<head>`, replacing the
354
+ * previous ones. Passing `null` or empty overrides removes the tag.
355
+ * Returns the generated CSS.
356
+ */
357
+ declare const applyThemeOverrides: (theme: ({
358
+ palette: string;
359
+ } & CleenThemeOverrides) | null, { styleId }?: ApplyThemeOverridesOptions) => string;
360
+ declare const clearThemeOverrides: (options?: ApplyThemeOverridesOptions) => string;
361
+ /**
362
+ * Reads the current `R, G, B` value of a token from the element
363
+ * (defaults to `<html>`). Accepts `primary` or `--cleen-primary`.
364
+ */
365
+ declare const getThemeTokenValue: (name: string, element?: HTMLElement) => string;
366
+ /** Reads the current values of several tokens, e.g. for contrast checks. */
367
+ declare const readThemeTokenValues: (names: readonly string[], element?: HTMLElement) => CleenThemeTokenValues;
368
+
369
+ /** localStorage key used by the persisted `useCleenTheme` store */
370
+ declare const CLEEN_THEME_STORAGE_KEY = "cleen-theme";
371
+ interface ThemeBootScriptOptions {
372
+ storageKey?: string;
373
+ styleId?: string;
374
+ defaultPalette?: string;
375
+ defaultMode?: CleenThemeMode;
376
+ }
377
+ /**
378
+ * Returns an inline script for `index.html` that applies the theme persisted
379
+ * by `useCleenTheme` before the app mounts, avoiding a flash of the default colors.
380
+ */
381
+ declare const getThemeBootScript: ({ storageKey, styleId, defaultPalette, defaultMode, }?: ThemeBootScriptOptions) => string;
382
+
383
+ type CleenThemeTokenGroup = 'brand' | 'surface' | 'text' | 'status' | 'scale';
384
+ interface CleenThemeToken {
385
+ /** Token name without the `--cleen-` prefix */
386
+ name: string;
387
+ label: string;
388
+ group: CleenThemeTokenGroup;
389
+ description: string;
390
+ /** Tokens this one is drawn on top of, used for contrast checks */
391
+ contrastWith?: readonly string[];
392
+ }
393
+ interface CleenPalette {
394
+ value: string;
395
+ title: string;
396
+ /** Representative primary color, e.g. for swatches */
397
+ color: string;
398
+ }
399
+ declare const CLEEN_PALETTES: readonly CleenPalette[];
400
+ declare const CLEEN_DEFAULT_PALETTE = "ocean";
401
+ /** Every palette token that can be overridden at runtime. */
402
+ declare const CLEEN_THEME_TOKENS: readonly CleenThemeToken[];
403
+ declare const isCleenThemeToken: (name: string) => boolean;
404
+ declare const getCleenThemeToken: (name: string) => CleenThemeToken | undefined;
405
+
406
+ interface CleenThemeState {
407
+ palette: string;
408
+ mode: CleenThemeMode;
409
+ /** Mode applied to the document; `system` resolved through `prefers-color-scheme` */
410
+ resolvedMode: CleenResolvedThemeMode;
411
+ overrides: CleenThemeOverrides | null;
412
+ /** Current palette and overrides as a serializable definition */
413
+ definition: CleenThemeDefinition;
414
+ /** Generated override CSS, also used by the boot script */
415
+ css: string;
416
+ setPalette: (palette: string) => void;
417
+ setMode: (mode: CleenThemeMode) => void;
418
+ setOverrides: (overrides: CleenThemeOverrides | null) => void;
419
+ /** Applies a whole definition (palette + overrides); `null` resets overrides */
420
+ setTheme: (definition: CleenThemeDefinition | null) => void;
421
+ /** Updates `resolvedMode` after the OS preference changed */
422
+ syncSystemMode: () => void;
423
+ }
424
+ /**
425
+ * Theme state: palette, light/dark mode and runtime overrides, persisted in
426
+ * localStorage (`cleen-theme`). Works outside React through
427
+ * `useCleenTheme.getState()`. Call `initCleenTheme()` (or render
428
+ * `CleenThemeProvider`) once to apply it to the document.
429
+ */
430
+ declare const useCleenTheme: zustand.UseBoundStore<Omit<zustand.StoreApi<CleenThemeState>, "setState" | "persist"> & {
431
+ setState(partial: CleenThemeState | Partial<CleenThemeState> | ((state: CleenThemeState) => CleenThemeState | Partial<CleenThemeState>), replace?: false | undefined): unknown;
432
+ setState(state: CleenThemeState | ((state: CleenThemeState) => CleenThemeState), replace: true): unknown;
433
+ persist: {
434
+ setOptions: (options: Partial<zustand_middleware.PersistOptions<CleenThemeState, {
435
+ palette: string;
436
+ mode: CleenThemeMode;
437
+ overrides: CleenThemeOverrides | null;
438
+ css: string;
439
+ }, unknown>>) => void;
440
+ clearStorage: () => void;
441
+ rehydrate: () => Promise<void> | void;
442
+ hasHydrated: () => boolean;
443
+ onHydrate: (fn: (state: CleenThemeState) => void) => () => void;
444
+ onFinishHydration: (fn: (state: CleenThemeState) => void) => () => void;
445
+ getOptions: () => Partial<zustand_middleware.PersistOptions<CleenThemeState, {
446
+ palette: string;
447
+ mode: CleenThemeMode;
448
+ overrides: CleenThemeOverrides | null;
449
+ css: string;
450
+ }, unknown>>;
451
+ };
452
+ }>;
453
+
454
+ /** Formats a token as a CSS color, e.g. for canvas, SVG attributes or charts. */
455
+ declare const getThemeColor: (name: string, alpha?: number, element?: HTMLElement) => string;
456
+ /**
457
+ * Resolved color of a theme token (`primary` or `--cleen-primary`) that
458
+ * updates when the palette, mode or runtime overrides change.
459
+ * Returns `''` during SSR.
460
+ */
461
+ declare const useThemeColor: (name: string, alpha?: number) => string;
462
+
209
463
  declare const CLEEN_IGNORE_OUTSIDE_CLICK = "data-cleen-ignore-outside-click";
210
464
 
211
465
  interface ComponentClassnames<T extends {
@@ -315,4 +569,4 @@ declare const formatFileSize: (bytes?: number) => string;
315
569
  declare const formatAudioTime: (seconds: number) => string;
316
570
  declare const getCreatedDate: (date: string) => string;
317
571
 
318
- export { type ArrayElement, CLEEN_IGNORE_OUTSIDE_CLICK, ColorHelpers, type ColorVar, type ComponentClassnames, type ComponentStyles, type FileEntry, FileEntryStatus, type HintedString, type PartialDeep, type Position, ZIndex, applyDefaults, calculateOptimalPosition, calculatePositionValues, cn, delay, delayAll, encodeWav, formatAudioTime, formatFileSize, getCreatedDate, getRandomImageUrl, trimBlob, useAnimateNumber, useBodyScrollLock, useCleenColors, useCleenOverlays, useControlled, useDebounce, useDisclosure, useFileUpload, useForm, useIDSet, useOutsideClick, usePaginationState, usePositionClose, useValidation, useWidthDynamicResize, wait };
572
+ export { type ApplyThemeOverridesOptions, type ArrayElement, CLEEN_DEFAULT_PALETTE, CLEEN_IGNORE_OUTSIDE_CLICK, CLEEN_PALETTES, CLEEN_THEME_CHANGE_EVENT, CLEEN_THEME_MAX_SIZE, CLEEN_THEME_STORAGE_KEY, CLEEN_THEME_STYLE_ID, CLEEN_THEME_TOKENS, type CleenPalette, type CleenResolvedThemeMode, type CleenThemeContrastIssue, type CleenThemeDefinition, type CleenThemeMode, type CleenThemeOverrides, CleenThemeProvider, type CleenThemeProviderProps, type CleenThemeState, type CleenThemeToken, type CleenThemeTokenGroup, type CleenThemeTokenValues, type CleenThemeValidationCode, type CleenThemeValidationError, type CleenThemeValidationOptions, type CleenThemeValidationResult, ColorHelpers, type ColorVar, type ComponentClassnames, type ComponentStyles, type ContrastRequirement, type FileEntry, FileEntryStatus, type HintedString, type InitCleenThemeOptions, type PartialDeep, type Position, type RgbTuple, type ThemeBootScriptOptions, ZIndex, applyDefaults, applyThemeMode, applyThemeOverrides, applyThemePalette, buildThemeOverridesCss, calculateOptimalPosition, calculatePositionValues, clearThemeOverrides, cn, createThemeDefinition, delay, delayAll, encodeWav, formatAudioTime, formatFileSize, formatRgbChannels, getCleenThemeToken, getContrastRatio, getCreatedDate, getMinContrastRatio, getRandomImageUrl, getSystemThemeMode, getThemeBootScript, getThemeColor, getThemeContrastIssues, getThemeTokenValue, initCleenTheme, isCleenThemeToken, isRgbChannels, isValidPaletteName, isValidTokenName, meetsContrast, parseRgbChannels, readThemeTokenValues, resolveThemeMode, rgbChannelsToHex, subscribeToSystemThemeMode, toRgbChannels, trimBlob, useAnimateNumber, useBodyScrollLock, useCleenColors, useCleenOverlays, useCleenTheme, useControlled, useDebounce, useDisclosure, useFileUpload, useForm, useIDSet, useOutsideClick, usePaginationState, usePositionClose, useThemeColor, useValidation, useWidthDynamicResize, validateThemeDefinition, wait };
package/dist/index.js CHANGED
@@ -1 +1,10 @@
1
- import{NumericFormat as tn,PatternFormat as nn,removeNumericFormat as rn,removePatternFormat as on,useNumericFormat as sn,usePatternFormat as ln}from"react-number-format";var Ue={TOOLTIP:1e3,SELECT:700,POPOVER:600,MENU:600,DROPDOWN:600,MODAL:500,DRAWER:500};import{useEffect as W,useState as q}from"react";var _=e=>1-(1-e)*(1-e),Be=({targetNumber:e,defaultNumber:r=0,duration:t=1e3,disabled:n=!1,easeOut:o=!0})=>{let[s,i]=q(r);return W(()=>{if(n)return;let l=null,a=c=>{l||(l=c);let u=c-l,p=Math.min(u/t,1);o&&(p=_(p));let b=p*e;i(b),b<e&&requestAnimationFrame(a)};requestAnimationFrame(a)},[e,t,n,o]),n?e:s};import{useEffect as K}from"react";var T=0,C=null,Q=()=>{if(typeof window>"u")return;let{body:e,documentElement:r}=document;if(!(!e||!r)){if(T===0){let t=window.innerWidth-r.clientWidth;C={bodyOverflow:e.style.overflow,bodyPaddingRight:e.style.paddingRight,bodyTouchAction:e.style.touchAction,htmlOverflow:r.style.overflow,htmlOverscrollBehavior:r.style.overscrollBehavior},e.style.overflow="hidden",e.style.touchAction="none",r.style.overflow="hidden",r.style.overscrollBehavior="none",t>0&&(e.style.paddingRight=`${t}px`)}T+=1}},X=()=>{if(typeof window>"u"||T===0||(T-=1,T>0))return;let{body:e,documentElement:r}=document;if(!e||!r||!C){C=null;return}e.style.overflow=C.bodyOverflow,e.style.paddingRight=C.bodyPaddingRight,e.style.touchAction=C.bodyTouchAction,r.style.overflow=C.htmlOverflow,r.style.overscrollBehavior=C.htmlOverscrollBehavior,C=null},Ne=e=>{K(()=>{if(e)return Q(),()=>{X()}},[e])};import{useEffect as J,useState as Y}from"react";var He=({value:e,defaultValue:r,onChange:t})=>{let n=e!==void 0,[o,s]=Y(r),i=n?e:o,l=a=>{n||s(a),t?.(a)};return J(()=>{n||s(e??r??void 0)},[e,r,n]),{value:i,isControlled:n,handleChange:l}};import{useEffect as Z,useState as ee}from"react";var qe=(e,r)=>{let[t,n]=ee(e);return Z(()=>{let o=setTimeout(()=>{n(e)},r);return()=>{clearTimeout(o)}},[e,r]),t};import{useCallback as A,useState as te}from"react";var Qe=e=>{let[r,t]=te(!1),n=e?.value!==void 0?e?.value:r,o=A(()=>{t(!0),e?.setValue?.(!0)},[e]),s=A(()=>{t(!1),e?.setValue?.(!1)},[e]),i=A(()=>{t(l=>!l),e?.setValue?.(!n)},[e,n]);return{isOpen:n,open:o,close:s,toggle:i}};import{useCallback as O,useMemo as ne,useRef as re,useState as oe}from"react";var se=(i=>(i.QUEUED="queued",i.UPLOADING="uploading",i.PAUSED="paused",i.DONE="done",i.ERROR="error",i.DELETING="deleting",i))(se||{}),ie=(e,r)=>{let t=e.status??"done",n=e.progress??(t==="done"?100:0);return{id:r,file:e.file??null,url:e.url??null,name:e.name,size:e.size,type:e.type,status:t,progress:n,retries:0,preExisting:!0}},Ye=({initialFiles:e=[],files:r,onFilesChange:t,onFileUpload:n,onFilesUpload:o,onFileRemove:s})=>{let i=re(0),l=ne(()=>{let f=new Map;return e.forEach(h=>{let y="f"+ ++i.current;f.set(y,ie(h,y))}),f},[]),[a,c]=oe(l),u=typeof r<"u",p=u?r:a,b=O(({id:f,entry:h,res:y})=>{if(y?.id&&y.id!==f){let P={...h,...y,status:"done"},S=w=>{let g=new Map(w);return g.delete(f),g.set(y.id,P),g};u||c(S),t?.(S)}},[u,t]),m=O((f,h)=>{let y=P=>P.has(f)?new Map(P).set(f,{...P.get(f),...h}):P;u||c(y),t?.(y)},[u,t]),d=O(async f=>{m(f,{status:"deleting"}),await s?.(f);let h=y=>{let P=new Map(y);return P.delete(f),P};u||c(h),t?.(h)},[s,m,t,u]),E=O(async f=>{let h=new Map,y=[];Array.from(f).forEach(w=>{let g="f"+ ++i.current;h.set(g,{id:g,file:w,url:URL.createObjectURL(w),name:w.name,size:w.size,type:w.type,status:"queued",progress:0,retries:0,preExisting:!1}),y.push(g)});let P=w=>{let g=new Map(w);return S.forEach(([v,x])=>g.set(v,{...x,status:"uploading"})),g};u||c(P),t?.(P);let S=Array.from(h.entries());if(o)try{(await o(S.map(([,g])=>g),m))?.forEach((g,v)=>{let[x,j]=S[v];b({id:x,entry:j,res:g}),m(x,{...g,url:g?.url??null,status:"done"})})}catch{S.forEach(([w])=>m(w,{status:"error"}))}else S.forEach(([w,g])=>{n?.(g,v=>m(w,v)).then(v=>{b({id:w,entry:g,res:v??void 0}),m(w,{...v,url:v?.url??null,status:"done"})}).catch(()=>{m(w,{status:"error"})})})},[m,n,t,o,b,u]);return{files:p,addFiles:E,remove:d}};import{useEffect as le,useMemo as ae,useState as ce}from"react";var tt=({defaultValue:e,resetOnDefaultValueChange:r=!0})=>{let[t,n]=ce(e),o=()=>n(e),s=(l,a)=>{n(c=>({...c,[l]:a}))},i=ae(()=>JSON.stringify(t)!==JSON.stringify(e),[t,e]);return le(()=>{e&&r&&n(e)},[e,r]),{form:t,isDirty:i,setForm:n,setField:s,reset:o}};import{useCallback as L,useState as ue}from"react";var ot=()=>{let[e,r]=ue(new Set),t=L(o=>r(s=>new Set(s).add(o)),[]),n=L(o=>r(s=>{let i=new Set(s);return i.delete(o),i}),[]);return{has:o=>e.has(o),add:t,remove:n}};var U="data-cleen-ignore-outside-click";import{useEffect as de}from"react";function ct({refs:e,handler:r,enabled:t=!0}){de(()=>{if(!t)return;let n=o=>{let s=e.some(l=>{let a=l.current;return a?a.contains(o.target):!1}),i=o.target.closest(`[${U}]`);s||i||setTimeout(()=>r(o),0)};return document.addEventListener("mousedown",n),document.addEventListener("touchstart",n),()=>{document.removeEventListener("mousedown",n),document.removeEventListener("touchstart",n)}},[e,r,t])}import{useState as R}from"react";function ft(e={}){let{initialPage:r=1,initialPageSize:t=10}=e,[n,o]=R(r),[s,i]=R(t);return{page:n,setPage:o,pageSize:s,setPageSize:i,handleNextPage:u=>o(u),handlePreviousPage:u=>o(u),handlePageChange:u=>o(u)}}var fe=e=>{let r={top:"top",bottom:"bottom"},t={left:"left",right:"right"};if(e==="left")return{vertical:null,horizontal:"left"};if(e==="right")return{vertical:null,horizontal:"right"};let[n,o]=e.split("-");return{vertical:r[n]??null,horizontal:o?t[o]??null:"center"}},V=(e,r)=>e===null?r:r===null||r==="center"?e:`${e}-${r}`,me=(e,r,t,n,o)=>{let s=r+o,i=n-t.bottom,l=t.top;return e==="bottom"&&i<s&&l>=s?"top":e==="top"&&l<s&&i>=s?"bottom":e},pe=(e,r,t,n)=>{let o=r+4;if(e==="center"){let s=t.left+t.width/2,i=n-s<r/2+4,l=s<r/2+4;return i&&t.right>=o?"right":l&&n-t.left>=o?"left":"center"}if(e==="left"){let s=n-t.left>=o,i=t.right>=o;return!s&&i?"right":"left"}if(e==="right"){let s=t.right>=o,i=n-t.left>=o;return!s&&i?"left":"right"}return e},he=(e,r,t,n,o)=>{let s=r+o;if(e==="left"){let i=t.left>=s,l=n-t.right>=s;return!i&&l?"right":"left"}if(e==="right"){let i=n-t.right>=s,l=t.left>=s;return!i&&l?"left":"right"}return e},B=(e,r,t,n=0)=>{let o={width:window.innerWidth,height:window.innerHeight},s=n+4,{vertical:i,horizontal:l}=fe(t);if(i===null&&l!==null){let a=he(l,e.width,r,o.width,s);return V(null,a)}if(i!==null){let a=me(i,e.height,r,o.height,s),c=pe(l??"center",e.width,r,o.width);return V(a,c)}return t},z=(e,r,t,n)=>{if(!r)return{top:0,left:0};let o=window.scrollY,s=window.scrollX,i=n||0,l=0;t.startsWith("bottom")?l=r.bottom+o+i:t.startsWith("top")?l=r.top+o-(e?.height||0)-i:l=r.top+o+r.height/2-(e?.height||0)/2;let a=0;return t==="left"?a=r.left+s-(e?.width||0)-i:t==="right"?a=r.right+s+i:t.endsWith("left")||t==="bottom"||t==="top"?a=r.left+s:t.endsWith("right")&&(a=r.right+s-(e?.width||0)),(t==="bottom"||t==="top")&&(a=r.left+s+r.width/2-(e?.width||0)/2),{top:l,left:a}};import{useCallback as ge,useEffect as I,useState as D}from"react";var bt=({triggerRef:e,targetRef:r,position:t="bottom-left",offset:n=8,isOpen:o,extraUpdateTriggers:s=[]})=>{let[i,l]=D(!1),[a,c]=D({top:0,left:0}),[u,p]=D(t),b=ge(()=>{if(!e.current||!r.current)return;let m=r.current.getBoundingClientRect(),d=e.current.getBoundingClientRect(),E=B(m,d,t,n),f=z(m,d,E,n);p(h=>h===E?h:E),c(h=>h.top===f.top&&h.left===f.left?h:f)},[e,r,t,n]);return I(()=>{l(o)},[o]),I(()=>{if(!o){p(t),c({top:0,left:0});return}let m=null,d=()=>{m===null&&(m=window.requestAnimationFrame(()=>{m=null,b()}))},E=new ResizeObserver(()=>{d()});return e.current&&E.observe(e.current),r.current&&E.observe(r.current),window.addEventListener("resize",d),window.addEventListener("scroll",d,!0),s.forEach(f=>{window.addEventListener(f,d)}),window.visualViewport&&(window.visualViewport.addEventListener("resize",d),window.visualViewport.addEventListener("scroll",d),s.forEach(f=>{window.visualViewport?.addEventListener(f,d)})),b(),d(),()=>{m!==null&&window.cancelAnimationFrame(m),E.disconnect(),window.removeEventListener("resize",d),window.removeEventListener("scroll",d,!0),s.forEach(f=>{window.removeEventListener(f,d)}),window.visualViewport&&(window.visualViewport.removeEventListener("resize",d),window.visualViewport.removeEventListener("scroll",d),s.forEach(f=>{window.visualViewport?.removeEventListener(f,d)}))}},[o,t,b,e,r]),{positionStyles:a,optimalPosition:u,isMounted:i}};import{useCallback as M,useState as be}from"react";var Et=e=>{let[r,t]=be(e),n=M((i,l)=>{t(a=>(a[i]=l,{...a}))},[]),o=M(()=>{t(e)},[e]),s=M(i=>{t(l=>(delete l[i],{...l}))},[]);return{errors:r,setError:n,setErrors:t,clearError:s,clearErrors:o}};import{useEffect as we}from"react";var Ct=({ref:e,skip:r},t)=>{we(()=>{let n=e.current;if(!n||r)return;let o=n.offsetWidth;n.style.width=`${o}px`,requestAnimationFrame(()=>{n.style.width="auto";let s=n.offsetWidth;n.style.width=`${o}px`,n.offsetHeight,n.style.width=`${s}px`;let i=()=>{n&&(n.style.width="auto"),n?.removeEventListener("transitionend",i)};n.addEventListener("transitionend",i)})},t)};import{create as ye}from"zustand";import{persist as Ee}from"zustand/middleware";var N="--cleen-",Pe=["white","black","gray","pink","purple","indigo","blue","primary","success","warning","error","brand","sidebar","background"],Ot=ye()(Ee((e,r)=>({colors:{},getColors:()=>{let t=r().colors;return Pe.reduce((n,o)=>(t[o]?n[o]=t[o]:n[o]=getComputedStyle(document.documentElement).getPropertyValue(`${N}${o}`),n),{})},getColor:t=>{let n=r().colors;return n[t]?n[t]:getComputedStyle(document.documentElement).getPropertyValue(`${N}${t}`)},setColors:t=>Object.entries(t).map(([n,o])=>e(s=>({colors:{...s.colors,[n]:o}}))),setColor:(t,n)=>{e(o=>({colors:{...o.colors,[t]:n}}))},resetColors:()=>{e({colors:{}})},resetColor:t=>{let n=r().colors;delete n[t],e({colors:n})}}),{name:"cleen-colors"}));import{create as ve}from"zustand";import{persist as Ce}from"zustand/middleware";var Ft=ve()(Ce(e=>({overlays:[],addOverlay:r=>{e(t=>({overlays:[...t.overlays,r]}))},removeOverlay:r=>{e(t=>({overlays:t.overlays.filter(n=>n!==r)}))},clearOverlays:()=>{e({overlays:[]})}}),{name:"cleen-overlays"}));var Se=e=>{let{numberOfChannels:r,sampleRate:t,length:n}=e,o=16,s=r*o/8,i=t*s,l=n*s,a=new ArrayBuffer(44+l),c=new DataView(a),u=(b,m)=>{for(let d=0;d<m.length;d++)c.setUint8(b+d,m.charCodeAt(d))};u(0,"RIFF"),c.setUint32(4,36+l,!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,l,!0);let p=44;for(let b=0;b<n;b++)for(let m=0;m<r;m++){let d=Math.max(-1,Math.min(1,e.getChannelData(m)[b]));c.setInt16(p,d<0?d*32768:d*32767,!0),p+=2}return new Blob([a],{type:"audio/wav"})},Lt=async(e,r,t)=>{let n=new AudioContext,o=await n.decodeAudioData(await e.arrayBuffer());await n.close();let{sampleRate:s,numberOfChannels:i}=o,l=Math.round(r*s),a=Math.round(t*s),c=a-l,u=new AudioContext().createBuffer(i,c,s);for(let p=0;p<i;p++)u.copyToChannel(o.getChannelData(p).subarray(l,a),p);return Se(u)};import Te from"clsx";import{createTailwindMerge as xe,getDefaultConfig as Oe}from"tailwind-merge";var Ae=()=>({...Oe(),prefix:"cleen-"}),De=xe(Ae),Bt=(...e)=>De(Te(e));import{darken as Me,getLuminance as G,lighten as Fe,parseToRgba as F,toHex as ke,toRgba as $}from"color2k";var H=class e{static deltaE(r,t){let n=e.rgb2lab(r),o=e.rgb2lab(t),s=n[0]-o[0],i=n[1]-o[1],l=n[2]-o[2],a=Math.sqrt(n[1]*n[1]+n[2]*n[2]),c=Math.sqrt(o[1]*o[1]+o[2]*o[2]),u=a-c,p=i*i+l*l-u*u;p=p<0?0:Math.sqrt(p);let b=1+.045*a,m=1+.015*a,d=s/1,E=u/b,f=p/m,h=d*d+E*E+f*f;return h<0?0:Math.sqrt(h)}static rgb2lab(r){let t=r[0]/255,n=r[1]/255,o=r[2]/255,s,i,l;return t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92,n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92,o=o>.04045?Math.pow((o+.055)/1.055,2.4):o/12.92,s=(t*.4124+n*.3576+o*.1805)/.95047,i=(t*.2126+n*.7152+o*.0722)/1,l=(t*.0193+n*.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,l=l>.008856?Math.pow(l,1/3):7.787*l+16/116,[116*i-16,500*(s-i),200*(i-l)]}static isSimilar(r,t,n=24){return e.deltaE(F(r),F(t))<n}static adjustColorForContrast(r,t=.25){let n=ke(r),o=r;try{if((n.match(/^#f{2,}e{0,2}$/i)||G(n)>.98)&&(n="#ffffff"),G(n)>.6){let s=Me(n,t);o=$(s)}else{let s=Fe(n,t);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 n=getComputedStyle(document.documentElement).getPropertyValue(t).trim();return n?`rgb(${n})`:void 0}}static getComputedRgb(r){if(!r)return;if(!r?.includes("var(")){let[n,o,s]=F(r);return`${n}, ${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 Le="https://picsum.photos",Gt=e=>{let{width:r,height:t,grayscale:n,blur:o,seed:s}=e,i=Le;s&&(i+=`/seed/${encodeURIComponent(s)}`),i+=`/${r}/${t||r}`;let l=new URLSearchParams;n&&l.append("grayscale",""),o&&l.append("blur",o.toString()),s&&l.append("seed",s);let a=l.toString();return a&&(i+=`?${a}`),i};function k(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.prototype.toString.call(e)==="[object Object]"}function Ht(e,r){let t=new WeakMap,n=s=>{if(s!==void 0){if(s===null)return null;if(Array.isArray(s)){if(t.has(s))return t.get(s);let i=[];return t.set(s,i),s.forEach(l=>{i.push(n(l))}),i}if(k(s)){if(t.has(s))return t.get(s);let i={};return t.set(s,i),Object.keys(s).forEach(l=>{i[l]=n(s[l])}),i}return s}},o=(s,i)=>{if(i===void 0)return n(s);if(k(s)&&k(i)){if(t.has(i))return t.get(i);let l={};return t.set(i,l),new Set([...Object.keys(s),...Object.keys(i)]).forEach(c=>{let u=s[c],p=i[c];l[c]=o(u,p)}),l}return Array.isArray(s)||Array.isArray(i)?n(i===void 0?s:i):n(i!==void 0?i:s)};return o(e,r)}var Wt=e=>new Promise(r=>setTimeout(r,e)),qt=async(e,r)=>(await Promise.all([r,new Promise(n=>setTimeout(n,e))])).slice(0,-1),_t=async(e,...r)=>(await Promise.all([...r,new Promise(n=>setTimeout(n,e))])).slice(0,-1);var Qt=e=>{if(e===0||!e)return"0 B";let r=1024,t=["B","KB","MB","GB","TB"],n=Math.floor(Math.log(e)/Math.log(r));return Math.round(e/Math.pow(r,n))+" "+t[n]},Xt=e=>{let r=Math.floor(e/60),t=Math.floor(e%60);return`${String(r).padStart(2,"0")}:${String(t).padStart(2,"0")}`},Jt=e=>{let r=new Date(e),n=Math.abs(new Date().getTime()-r.getTime());return`Created ${Math.ceil(n/(1e3*60*60*24))} days ago`};export{U as CLEEN_IGNORE_OUTSIDE_CLICK,H as ColorHelpers,se as FileEntryStatus,tn as NumericFormat,nn as PatternFormat,Ue as ZIndex,Ht as applyDefaults,B as calculateOptimalPosition,z as calculatePositionValues,Bt as cn,qt as delay,_t as delayAll,Se as encodeWav,Xt as formatAudioTime,Qt as formatFileSize,Jt as getCreatedDate,Gt as getRandomImageUrl,rn as removeNumericFormat,on as removePatternFormat,Lt as trimBlob,Be as useAnimateNumber,Ne as useBodyScrollLock,Ot as useCleenColors,Ft as useCleenOverlays,He as useControlled,qe as useDebounce,Qe as useDisclosure,Ye as useFileUpload,tt as useForm,ot as useIDSet,sn as useNumericFormat,ct as useOutsideClick,ft as usePaginationState,ln as usePatternFormat,bt as usePositionClose,Et as useValidation,Ct as useWidthDynamicResize,Wt as wait};
1
+ import{NumericFormat as so,PatternFormat as io,removeNumericFormat as lo,removePatternFormat as ao,useNumericFormat as co,usePatternFormat as uo}from"react-number-format";var $t={TOOLTIP:1e3,SELECT:700,POPOVER:600,MENU:600,DROPDOWN:600,MODAL:500,DRAWER:500};import{useEffect as Se,useState as Oe}from"react";var Me=e=>1-(1-e)*(1-e),Ut=({targetNumber:e,defaultNumber:n=0,duration:t=1e3,disabled:r=!1,easeOut:o=!0})=>{let[s,i]=Oe(n);return Se(()=>{if(r)return;let l=null,a=u=>{l||(l=u);let c=u-l,m=Math.min(c/t,1);o&&(m=Me(m));let h=m*e;i(h),h<e&&requestAnimationFrame(a)};requestAnimationFrame(a)},[e,t,r,o]),r?e:s};import{useEffect as Ae}from"react";var M=0,w=null,ke=()=>{if(typeof window>"u")return;let{body:e,documentElement:n}=document;if(!(!e||!n)){if(M===0){let t=window.innerWidth-n.clientWidth;w={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",t>0&&(e.style.paddingRight=`${t}px`)}M+=1}},Ne=()=>{if(typeof window>"u"||M===0||(M-=1,M>0))return;let{body:e,documentElement:n}=document;if(!e||!n||!w){w=null;return}e.style.overflow=w.bodyOverflow,e.style.paddingRight=w.bodyPaddingRight,e.style.touchAction=w.bodyTouchAction,n.style.overflow=w.htmlOverflow,n.style.overscrollBehavior=w.htmlOverscrollBehavior,w=null},Ht=e=>{Ae(()=>{if(e)return ke(),()=>{Ne()}},[e])};import{useEffect as Le,useState as Re}from"react";var jt=({value:e,defaultValue:n,onChange:t})=>{let r=e!==void 0,[o,s]=Re(n),i=r?e:o,l=a=>{r||s(a),t?.(a)};return Le(()=>{r||s(e??n??void 0)},[e,n,r]),{value:i,isControlled:r,handleChange:l}};import{useEffect as De,useState as Ve}from"react";var qt=(e,n)=>{let[t,r]=Ve(e);return De(()=>{let o=setTimeout(()=>{r(e)},n);return()=>{clearTimeout(o)}},[e,n]),t};import{useCallback as F,useState as $e}from"react";var Qt=e=>{let[n,t]=$e(!1),r=e?.value!==void 0?e?.value:n,o=F(()=>{t(!0),e?.setValue?.(!0)},[e]),s=F(()=>{t(!1),e?.setValue?.(!1)},[e]),i=F(()=>{t(l=>!l),e?.setValue?.(!r)},[e,r]);return{isOpen:r,open:o,close:s,toggle:i}};import{useCallback as R,useMemo as Ie,useRef as _e,useState as Ue}from"react";var Fe=(i=>(i.QUEUED="queued",i.UPLOADING="uploading",i.PAUSED="paused",i.DONE="done",i.ERROR="error",i.DELETING="deleting",i))(Fe||{}),Be=(e,n)=>{let t=e.status??"done",r=e.progress??(t==="done"?100:0);return{id:n,file:e.file??null,url:e.url??null,name:e.name,size:e.size,type:e.type,status:t,progress:r,retries:0,preExisting:!0}},en=({initialFiles:e=[],files:n,onFilesChange:t,onFileUpload:r,onFilesUpload:o,onFileRemove:s})=>{let i=_e(0),l=Ie(()=>{let f=new Map;return e.forEach(g=>{let E="f"+ ++i.current;f.set(E,Be(g,E))}),f},[]),[a,u]=Ue(l),c=typeof n<"u",m=c?n:a,h=R(({id:f,entry:g,res:E})=>{if(E?.id&&E.id!==f){let C={...g,...E,status:"done"},x=b=>{let T=new Map(b);return T.delete(f),T.set(E.id,C),T};c||u(x),t?.(x)}},[c,t]),p=R((f,g)=>{let E=C=>C.has(f)?new Map(C).set(f,{...C.get(f),...g}):C;c||u(E),t?.(E)},[c,t]),d=R(async f=>{p(f,{status:"deleting"}),await s?.(f);let g=E=>{let C=new Map(E);return C.delete(f),C};c||u(g),t?.(g)},[s,p,t,c]),y=R(async f=>{let g=new Map,E=[];Array.from(f).forEach(b=>{let T="f"+ ++i.current;g.set(T,{id:T,file:b,url:URL.createObjectURL(b),name:b.name,size:b.size,type:b.type,status:"queued",progress:0,retries:0,preExisting:!1}),E.push(T)});let C=b=>{let T=new Map(b);return x.forEach(([v,L])=>T.set(v,{...L,status:"uploading"})),T};c||u(C),t?.(C);let x=Array.from(g.entries());if(o)try{(await o(x.map(([,T])=>T),p))?.forEach((T,v)=>{let[L,Pe]=x[v];h({id:L,entry:Pe,res:T}),p(L,{...T,url:T?.url??null,status:"done"})})}catch{x.forEach(([b])=>p(b,{status:"error"}))}else x.forEach(([b,T])=>{r?.(T,v=>p(b,v)).then(v=>{h({id:b,entry:T,res:v??void 0}),p(b,{...v,url:v?.url??null,status:"done"})}).catch(()=>{p(b,{status:"error"})})})},[p,r,t,o,h,c]);return{files:m,addFiles:y,remove:d}};import{useEffect as He,useMemo as ze,useState as Ge}from"react";var rn=({defaultValue:e,resetOnDefaultValueChange:n=!0})=>{let[t,r]=Ge(e),o=()=>r(e),s=(l,a)=>{r(u=>({...u,[l]:a}))},i=ze(()=>JSON.stringify(t)!==JSON.stringify(e),[t,e]);return He(()=>{e&&n&&r(e)},[e,n]),{form:t,isDirty:i,setForm:r,setField:s,reset:o}};import{useCallback as ne,useState as je}from"react";var ln=()=>{let[e,n]=je(new Set),t=ne(o=>n(s=>new Set(s).add(o)),[]),r=ne(o=>n(s=>{let i=new Set(s);return i.delete(o),i}),[]);return{has:o=>e.has(o),add:t,remove:r}};var re="data-cleen-ignore-outside-click";import{useEffect as We}from"react";function mn({refs:e,handler:n,enabled:t=!0}){We(()=>{if(!t)return;let r=o=>{let s=e.some(l=>{let a=l.current;return a?a.contains(o.target):!1}),i=o.target.closest(`[${re}]`);s||i||setTimeout(()=>n(o),0)};return document.addEventListener("mousedown",r),document.addEventListener("touchstart",r),()=>{document.removeEventListener("mousedown",r),document.removeEventListener("touchstart",r)}},[e,n,t])}import{useState as oe}from"react";function hn(e={}){let{initialPage:n=1,initialPageSize:t=10}=e,[r,o]=oe(n),[s,i]=oe(t);return{page:r,setPage:o,pageSize:s,setPageSize:i,handleNextPage:c=>o(c),handlePreviousPage:c=>o(c),handlePageChange:c=>o(c)}}var Ke=e=>{let n={top:"top",bottom:"bottom"},t={left:"left",right:"right"};if(e==="left")return{vertical:null,horizontal:"left"};if(e==="right")return{vertical:null,horizontal:"right"};let[r,o]=e.split("-");return{vertical:n[r]??null,horizontal:o?t[o]??null:"center"}},se=(e,n)=>e===null?n:n===null||n==="center"?e:`${e}-${n}`,qe=(e,n,t,r,o)=>{let s=n+o,i=r-t.bottom,l=t.top;return e==="bottom"&&i<s&&l>=s?"top":e==="top"&&l<s&&i>=s?"bottom":e},Je=(e,n,t,r)=>{let o=n+4;if(e==="center"){let s=t.left+t.width/2,i=r-s<n/2+4,l=s<n/2+4;return i&&t.right>=o?"right":l&&r-t.left>=o?"left":"center"}if(e==="left"){let s=r-t.left>=o,i=t.right>=o;return!s&&i?"right":"left"}if(e==="right"){let s=t.right>=o,i=r-t.left>=o;return!s&&i?"left":"right"}return e},Ye=(e,n,t,r,o)=>{let s=n+o;if(e==="left"){let i=t.left>=s,l=r-t.right>=s;return!i&&l?"right":"left"}if(e==="right"){let i=r-t.right>=s,l=t.left>=s;return!i&&l?"left":"right"}return e},ie=(e,n,t,r=0)=>{let o={width:window.innerWidth,height:window.innerHeight},s=r+4,{vertical:i,horizontal:l}=Ke(t);if(i===null&&l!==null){let a=Ye(l,e.width,n,o.width,s);return se(null,a)}if(i!==null){let a=qe(i,e.height,n,o.height,s),u=Je(l??"center",e.width,n,o.width);return se(a,u)}return t},le=(e,n,t,r)=>{if(!n)return{top:0,left:0};let o=window.scrollY,s=window.scrollX,i=r||0,l=0;t.startsWith("bottom")?l=n.bottom+o+i:t.startsWith("top")?l=n.top+o-(e?.height||0)-i:l=n.top+o+n.height/2-(e?.height||0)/2;let a=0;return t==="left"?a=n.left+s-(e?.width||0)-i:t==="right"?a=n.right+s+i:t.endsWith("left")||t==="bottom"||t==="top"?a=n.left+s:t.endsWith("right")&&(a=n.right+s-(e?.width||0)),(t==="bottom"||t==="top")&&(a=n.left+s+n.width/2-(e?.width||0)/2),{top:l,left:a}};import{useCallback as Qe,useEffect as ae,useState as B}from"react";var En=({triggerRef:e,targetRef:n,position:t="bottom-left",offset:r=8,isOpen:o,extraUpdateTriggers:s=[]})=>{let[i,l]=B(!1),[a,u]=B({top:0,left:0}),[c,m]=B(t),h=Qe(()=>{if(!e.current||!n.current)return;let p=n.current.getBoundingClientRect(),d=e.current.getBoundingClientRect(),y=ie(p,d,t,r),f=le(p,d,y,r);m(g=>g===y?g:y),u(g=>g.top===f.top&&g.left===f.left?g:f)},[e,n,t,r]);return ae(()=>{l(o)},[o]),ae(()=>{if(!o){m(t),u({top:0,left:0});return}let p=null,d=()=>{p===null&&(p=window.requestAnimationFrame(()=>{p=null,h()}))},y=new ResizeObserver(()=>{d()});return e.current&&y.observe(e.current),n.current&&y.observe(n.current),window.addEventListener("resize",d),window.addEventListener("scroll",d,!0),s.forEach(f=>{window.addEventListener(f,d)}),window.visualViewport&&(window.visualViewport.addEventListener("resize",d),window.visualViewport.addEventListener("scroll",d),s.forEach(f=>{window.visualViewport?.addEventListener(f,d)})),h(),d(),()=>{p!==null&&window.cancelAnimationFrame(p),y.disconnect(),window.removeEventListener("resize",d),window.removeEventListener("scroll",d,!0),s.forEach(f=>{window.removeEventListener(f,d)}),window.visualViewport&&(window.visualViewport.removeEventListener("resize",d),window.visualViewport.removeEventListener("scroll",d),s.forEach(f=>{window.visualViewport?.removeEventListener(f,d)}))}},[o,t,h,e,n]),{positionStyles:a,optimalPosition:c,isMounted:i}};import{useCallback as H,useState as Xe}from"react";var wn=e=>{let[n,t]=Xe(e),r=H((i,l)=>{t(a=>(a[i]=l,{...a}))},[]),o=H(()=>{t(e)},[e]),s=H(i=>{t(l=>(delete l[i],{...l}))},[]);return{errors:n,setError:r,setErrors:t,clearError:s,clearErrors:o}};import{useEffect as Ze}from"react";var Sn=({ref:e,skip:n},t)=>{Ze(()=>{let r=e.current;if(!r||n)return;let o=r.offsetWidth;r.style.width=`${o}px`,requestAnimationFrame(()=>{r.style.width="auto";let s=r.offsetWidth;r.style.width=`${o}px`,r.offsetHeight,r.style.width=`${s}px`;let i=()=>{r&&(r.style.width="auto"),r?.removeEventListener("transitionend",i)};r.addEventListener("transitionend",i)})},t)};import{create as et}from"zustand";import{persist as tt}from"zustand/middleware";var ce="--cleen-",nt=["white","black","gray","pink","purple","indigo","blue","primary","success","warning","error","brand","sidebar","background"],kn=et()(tt((e,n)=>({colors:{},getColors:()=>{let t=n().colors;return nt.reduce((r,o)=>(t[o]?r[o]=t[o]:r[o]=getComputedStyle(document.documentElement).getPropertyValue(`${ce}${o}`),r),{})},getColor:t=>{let r=n().colors;return r[t]?r[t]:getComputedStyle(document.documentElement).getPropertyValue(`${ce}${t}`)},setColors:t=>Object.entries(t).map(([r,o])=>e(s=>({colors:{...s.colors,[r]:o}}))),setColor:(t,r)=>{e(o=>({colors:{...o.colors,[t]:r}}))},resetColors:()=>{e({colors:{}})},resetColor:t=>{let r=n().colors;delete r[t],e({colors:r})}}),{name:"cleen-colors"}));import{create as rt}from"zustand";import{persist as ot}from"zustand/middleware";var Dn=rt()(ot(e=>({overlays:[],addOverlay:n=>{e(t=>({overlays:[...t.overlays,n]}))},removeOverlay:n=>{e(t=>({overlays:t.overlays.filter(r=>r!==n)}))},clearOverlays:()=>{e({overlays:[]})}}),{name:"cleen-overlays"}));import{useEffect as Tt,useLayoutEffect as bt,useRef as yt}from"react";import{getContrast as st,parseToRgba as it}from"color2k";var lt=/^\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*$/,P=e=>{let n=lt.exec(e);if(!n)return null;let t=n.slice(1,4).map(Number);return t.every(r=>r<=255)?t:null},In=e=>P(e)!==null,S=([e,n,t])=>`${e}, ${n}, ${t}`,z=e=>{let n=P(e);if(n)return S(n);try{let[t,r,o]=it(e.trim());return S([t,r,o])}catch{return null}},_n=e=>{let n=z(e);return n?`#${P(n).map(t=>t.toString(16).padStart(2,"0")).join("")}`:null},ue=(e,n)=>{let t=z(e),r=z(n);return!t||!r?null:st(`rgb(${t})`,`rgb(${r})`)},G=({level:e="AA",largeText:n=!1}={})=>e==="AAA"?n?3.5:7:n?3:3.5,Un=(e,n)=>e!==null&&e>=G(n);var de=[{value:"ocean",title:"Ocean",color:"#007acc"},{value:"github",title:"GitHub",color:"#0969da"},{value:"github-dimmed",title:"GitHub Dimmed",color:"#0969da"},{value:"zinc",title:"Zinc",color:"#18181b"},{value:"stone",title:"Stone",color:"#1c1917"},{value:"blue",title:"Blue",color:"#1447e6"},{value:"nord",title:"Nord",color:"#5e81ac"},{value:"catppuccin",title:"Catppuccin",color:"#1e66f5"},{value:"flatly",title:"Flatly",color:"#2c3e50"},{value:"solarized",title:"Solarized",color:"#268bd2"},{value:"corporate",title:"Corporate",color:"#0082ce"},{value:"united",title:"United",color:"#e95420"},{value:"minty",title:"Minty",color:"#59a28e"},{value:"retro",title:"Retro",color:"#c1686a"},{value:"business",title:"Business",color:"#1c4e80"},{value:"dracula",title:"Dracula",color:"#644ac9"},{value:"synthwave",title:"Synthwave",color:"#c02883"}],W="ocean",D=["background","surface"],at=[25,50,100,200,300,400,500,600,700,800,900,950],j=(e,n)=>[...e==="neutral"?[{name:"neutral",label:n,group:"scale",description:"Default neutral color"}]:[],...at.map(t=>({name:`${e}-${t}`,label:`${n} ${t}`,group:"scale",description:`${n} scale, shade ${t}`}))],V=[{name:"primary",label:"Primary",group:"brand",description:"Main accent: buttons, links, checkboxes, progress, focus states",contrastWith:D},{name:"primary-foreground",label:"Text on primary",group:"brand",description:"Text and icons on primary backgrounds",contrastWith:["primary"]},{name:"secondary",label:"Secondary",group:"brand",description:"Secondary accent"},{name:"brand",label:"Brand",group:"brand",description:"Brand highlight"},{name:"accent",label:"Accent",group:"brand",description:"Neutral accent color"},{name:"background",label:"Background",group:"surface",description:"Page background"},{name:"surface",label:"Surface",group:"surface",description:"Cards, inputs, popovers"},{name:"sidebar",label:"Sidebar",group:"surface",description:"Sidebar background"},{name:"muted",label:"Muted",group:"surface",description:"Subtle fills"},{name:"border",label:"Border",group:"surface",description:"Borders and dividers"},{name:"foreground",label:"Text",group:"text",description:"Main text",contrastWith:[...D,"muted","sidebar"]},{name:"foreground-emphasis",label:"Heading text",group:"text",description:"Headings and text-lg or larger",contrastWith:D},{name:"muted-foreground",label:"Secondary text",group:"text",description:"Hints, captions, placeholders",contrastWith:[...D,"muted"]},...["info","success","warning","error"].flatMap(e=>{let n=e.charAt(0).toUpperCase()+e.slice(1);return[{name:e,label:n,group:"status",description:`${n} states`,contrastWith:[`${e}-bg`]},{name:`${e}-bg`,label:`${n} background`,group:"status",description:`Soft fill behind ${e} text`}]}),...j("primary","Primary"),...j("secondary","Secondary"),...j("neutral","Neutral")],ct=new Set(V.map(({name:e})=>e)),me=e=>ct.has(e),Bn=e=>V.find(n=>n.name===e);var ut=16*1024,dt=/^[a-z0-9-]+$/,mt=/^[a-z0-9-]+$/,pt=["light","dark"],he=e=>mt.test(e),K=e=>dt.test(e),q=(e,n={})=>({palette:e,...n.light&&Object.keys(n.light).length?{light:{...n.light}}:{},...n.dark&&Object.keys(n.dark).length?{dark:{...n.dark}}:{}}),pe=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),fe=e=>new TextEncoder().encode(e).length,jn=(e,{palettes:n=de.map(({value:o})=>o),strictTokens:t=!0,maxSize:r=ut}={})=>{let o=[],s=()=>({valid:!1,errors:o}),i=e;if(typeof e=="string"){if(fe(e)>r)return o.push({path:"",code:"TOO_LARGE",message:`Theme is larger than ${r} bytes`}),s();try{i=JSON.parse(e)}catch{return o.push({path:"",code:"INVALID_JSON",message:"Theme is not valid JSON"}),s()}}else if(fe(JSON.stringify(e)??"")>r)return o.push({path:"",code:"TOO_LARGE",message:`Theme is larger than ${r} bytes`}),s();if(!pe(i))return o.push({path:"",code:"INVALID_TYPE",message:"Theme must be an object"}),s();let{palette:l}=i;(typeof l!="string"||!n.includes(l))&&o.push({path:"palette",code:"UNKNOWN_PALETTE",message:`Unknown palette: ${String(l)}`});let a={};return pt.forEach(u=>{let c=i[u];if(c==null)return;if(!pe(c)){o.push({path:u,code:"INVALID_TYPE",message:`${u} must be an object of token values`});return}let m={};Object.entries(c).forEach(([h,p])=>{let d=`${u}.${h}`;if(!K(h)){o.push({path:d,code:"INVALID_TOKEN_NAME",message:`Invalid token name: ${h}`});return}if(t&&!me(h)){o.push({path:d,code:"UNKNOWN_TOKEN",message:`Unknown token: ${h}`});return}let y=typeof p=="string"?P(p):null;if(!y){o.push({path:d,code:"INVALID_COLOR",message:`${h} must be "R, G, B" with each channel 0-255`});return}m[h]=S(y)}),a[u]=m}),o.length?s():{valid:!0,definition:q(l,a),errors:[]}};var A="cleen-theme-overrides",I="cleen:themechange",Te="(prefers-color-scheme: dark)",be=()=>typeof document<"u",J=e=>e??(be()?document.documentElement:void 0),$=()=>{typeof window<"u"&&window.dispatchEvent(new Event(I))},Y=()=>typeof window<"u"&&window.matchMedia?.(Te).matches?"dark":"light",O=(e,n=Y())=>e==="system"?n:e,_=e=>{if(typeof window>"u"||!window.matchMedia)return()=>{};let n=window.matchMedia(Te),t=r=>e(r.matches?"dark":"light");return n.addEventListener("change",t),()=>n.removeEventListener("change",t)},ye=(e,n)=>{let t=J(n);!t||t.getAttribute("data-palette")===e||(t.setAttribute("data-palette",e),$())},Ee=(e,n)=>{let t=O(e),r=J(n);if(!r)return t;let o=r.getAttribute("data-mode")!==t||r.classList.contains("dark")!==(t==="dark");return r.setAttribute("data-mode",t),r.classList.toggle("dark",t==="dark"),r.style.colorScheme=t,o&&$(),t},ge=(e={})=>Object.entries(e).flatMap(([n,t])=>{let r=P(t);return K(n)&&r?[` --cleen-${n}: ${S(r)};`]:[]}),Q=({palette:e,light:n,dark:t})=>{if(!he(e))return"";let r=`[data-palette='${e}'][data-palette='${e}']`,o=ge(n),s=ge(t),i=[];return o.length&&i.push(`${r}:not(.dark):not([data-mode='dark']) {
2
+ ${o.join(`
3
+ `)}
4
+ }`),s.length&&i.push(`.dark${r},
5
+ [data-mode='dark']${r} {
6
+ ${s.join(`
7
+ `)}
8
+ }`),i.join(`
9
+
10
+ `)},X=(e,{styleId:n=A}={})=>{let t=e?Q(e):"";if(!be())return t;let r=document.getElementById(n);return t?(r||(r=document.createElement("style"),r.id=n,document.head.appendChild(r)),r.textContent!==t&&(r.textContent=t,$()),t):(r&&(r.remove(),$()),t)},Jn=e=>X(null,e),U=(e,n)=>{let t=J(n);if(!t)return"";let r=e.startsWith("--")?e:`--cleen-${e}`;return getComputedStyle(t).getPropertyValue(r).trim()},Yn=(e,n)=>Object.fromEntries(e.map(t=>[t,U(t,n)]));import{create as ft}from"zustand";import{persist as ht}from"zustand/middleware";var Z="cleen-theme",Zn=({storageKey:e=Z,styleId:n=A,defaultPalette:t,defaultMode:r="system"}={})=>`(function(){try{var d=document.documentElement,s=(JSON.parse(localStorage.getItem(${JSON.stringify(e)})||'{}').state||{}),p=s.palette||${JSON.stringify(t??null)},m=s.mode||${JSON.stringify(r)};if(m==='system')m=window.matchMedia&&window.matchMedia('(prefers-color-scheme: dark)').matches?'dark':'light';if(p)d.setAttribute('data-palette',p);d.setAttribute('data-mode',m);d.classList.toggle('dark',m==='dark');d.style.colorScheme=m;if(s.css){var t=document.createElement('style');t.id=${JSON.stringify(n)};t.textContent=s.css;document.head.appendChild(t)}}catch(e){}})();`;var k=(e,n)=>({definition:q(e,n??{}),css:Q({palette:e,...n})}),N=ft()(ht((e,n)=>({palette:W,mode:"system",resolvedMode:O("system"),overrides:null,...k(W,null),setPalette:t=>e({palette:t,...k(t,n().overrides)}),setMode:t=>e({mode:t,resolvedMode:O(t)}),setOverrides:t=>e({overrides:t,...k(n().palette,t)}),setTheme:t=>{let r=t?.palette??n().palette,o=t?{light:t.light,dark:t.dark}:null;e({palette:r,overrides:o,...k(r,o)})},syncSystemMode:()=>e({resolvedMode:O(n().mode,Y())})}),{name:Z,partialize:({palette:e,mode:n,overrides:t,css:r})=>({palette:e,mode:n,overrides:t,css:r}),merge:(e,n)=>{let t={...n,...e};return{...t,resolvedMode:O(t.mode),...k(t.palette,t.overrides)}}}));var gt=()=>{try{let{name:e}=N.persist.getOptions();return!!e&&localStorage.getItem(e)!==null}catch{return!1}},Ce=({defaultPalette:e,defaultMode:n,styleId:t=A,target:r}={})=>{if(typeof window>"u")return()=>{};let{setPalette:o,setMode:s,syncSystemMode:i}=N.getState();gt()||(e&&o(e),n&&s(n));let l=(c,m)=>{c.palette!==m?.palette&&ye(c.palette,r),c.resolvedMode!==m?.resolvedMode&&Ee(c.resolvedMode,r),(c.css!==m?.css||c.palette!==m?.palette)&&X({palette:c.palette,...c.overrides},{styleId:t})};i(),l(N.getState());let a=N.subscribe(l),u=_(i);return()=>{a(),u()}};import{Fragment as Ct,jsx as vt}from"react/jsx-runtime";var Et=typeof window<"u"?bt:Tt;function pr({children:e,styleId:n,target:t,...r}){let o=yt(r);return Et(()=>Ce({...o.current,styleId:n,target:t}),[n,t]),vt(Ct,{children:e})}var br=(e,n)=>{let t=G(n);return V.flatMap(({name:r,contrastWith:o=[]})=>o.flatMap(s=>{let i=e[r],l=e[s],a=i&&l?ue(i,l):null;return a!==null&&a<t?[{token:r,against:s,ratio:a,minRatio:t}]:[]}))};import{useMemo as wt,useSyncExternalStore as xt}from"react";var Pt=e=>{if(typeof window>"u")return()=>{};let n=new MutationObserver(e);n.observe(document.documentElement,{attributes:!0,attributeFilter:["class","data-mode","data-palette"]}),window.addEventListener(I,e);let t=_(e);return()=>{n.disconnect(),window.removeEventListener(I,e),t()}},vr=(e,n,t)=>{let r=U(e,t);return r?n===void 0?`rgb(${r})`:`rgba(${r}, ${n})`:""},wr=(e,n)=>{let t=xt(Pt,()=>U(e),()=>"");return wt(()=>t?n===void 0?`rgb(${t})`:`rgba(${t}, ${n})`:"",[t,n])};var St=e=>{let{numberOfChannels:n,sampleRate:t,length:r}=e,o=16,s=n*o/8,i=t*s,l=r*s,a=new ArrayBuffer(44+l),u=new DataView(a),c=(h,p)=>{for(let d=0;d<p.length;d++)u.setUint8(h+d,p.charCodeAt(d))};c(0,"RIFF"),u.setUint32(4,36+l,!0),c(8,"WAVE"),c(12,"fmt "),u.setUint32(16,16,!0),u.setUint16(20,1,!0),u.setUint16(22,n,!0),u.setUint32(24,t,!0),u.setUint32(28,i,!0),u.setUint16(32,s,!0),u.setUint16(34,o,!0),c(36,"data"),u.setUint32(40,l,!0);let m=44;for(let h=0;h<r;h++)for(let p=0;p<n;p++){let d=Math.max(-1,Math.min(1,e.getChannelData(p)[h]));u.setInt16(m,d<0?d*32768:d*32767,!0),m+=2}return new Blob([a],{type:"audio/wav"})},Ir=async(e,n,t)=>{let r=new AudioContext,o=await r.decodeAudioData(await e.arrayBuffer());await r.close();let{sampleRate:s,numberOfChannels:i}=o,l=Math.round(n*s),a=Math.round(t*s),u=a-l,c=new AudioContext().createBuffer(i,u,s);for(let m=0;m<i;m++)c.copyToChannel(o.getChannelData(m).subarray(l,a),m);return St(c)};import Ot from"clsx";import{createTailwindMerge as Mt,getDefaultConfig as At}from"tailwind-merge";var kt=()=>({...At(),prefix:"cleen-"}),Nt=Mt(kt),Br=(...e)=>Nt(Ot(e));import{darken as Lt,getLuminance as ve,lighten as Rt,parseToRgba as ee,toHex as Dt,toRgba as we}from"color2k";var xe=class e{static deltaE(n,t){let r=e.rgb2lab(n),o=e.rgb2lab(t),s=r[0]-o[0],i=r[1]-o[1],l=r[2]-o[2],a=Math.sqrt(r[1]*r[1]+r[2]*r[2]),u=Math.sqrt(o[1]*o[1]+o[2]*o[2]),c=a-u,m=i*i+l*l-c*c;m=m<0?0:Math.sqrt(m);let h=1+.045*a,p=1+.015*a,d=s/1,y=c/h,f=m/p,g=d*d+y*y+f*f;return g<0?0:Math.sqrt(g)}static rgb2lab(n){let t=n[0]/255,r=n[1]/255,o=n[2]/255,s,i,l;return 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,o=o>.04045?Math.pow((o+.055)/1.055,2.4):o/12.92,s=(t*.4124+r*.3576+o*.1805)/.95047,i=(t*.2126+r*.7152+o*.0722)/1,l=(t*.0193+r*.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,l=l>.008856?Math.pow(l,1/3):7.787*l+16/116,[116*i-16,500*(s-i),200*(i-l)]}static isSimilar(n,t,r=24){return e.deltaE(ee(n),ee(t))<r}static adjustColorForContrast(n,t=.25){let r=Dt(n),o=n;try{if((r.match(/^#f{2,}e{0,2}$/i)||ve(r)>.98)&&(r="#ffffff"),ve(r)>.6){let s=Lt(r,t);o=we(s)}else{let s=Rt(r,t);o=we(s)}return o}catch{return"rgba(var(--cleen-white)"}}static getComputedColor(n){if(!n?.includes("var("))return n;let t=n.match(/var\((--[^,)]+)/)?.[1];if(t&&typeof window<"u"){let r=getComputedStyle(document.documentElement).getPropertyValue(t).trim();return r?`rgb(${r})`:void 0}}static getComputedRgb(n){if(!n)return;if(!n?.includes("var(")){let[r,o,s]=ee(n);return`${r}, ${o}, ${s}`}let t=n.match(/var\((--[^,)]+)/)?.[1];if(t&&typeof window<"u")return getComputedStyle(document.documentElement).getPropertyValue(t).trim()}static trasparentize(n,t=0){return`color-mix(in srgb, ${n} ${(1-t)*100}%, transparent)`}};var Vt="https://picsum.photos",jr=e=>{let{width:n,height:t,grayscale:r,blur:o,seed:s}=e,i=Vt;s&&(i+=`/seed/${encodeURIComponent(s)}`),i+=`/${n}/${t||n}`;let l=new URLSearchParams;r&&l.append("grayscale",""),o&&l.append("blur",o.toString()),s&&l.append("seed",s);let a=l.toString();return a&&(i+=`?${a}`),i};function te(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.prototype.toString.call(e)==="[object Object]"}function Kr(e,n){let t=new WeakMap,r=s=>{if(s!==void 0){if(s===null)return null;if(Array.isArray(s)){if(t.has(s))return t.get(s);let i=[];return t.set(s,i),s.forEach(l=>{i.push(r(l))}),i}if(te(s)){if(t.has(s))return t.get(s);let i={};return t.set(s,i),Object.keys(s).forEach(l=>{i[l]=r(s[l])}),i}return s}},o=(s,i)=>{if(i===void 0)return r(s);if(te(s)&&te(i)){if(t.has(i))return t.get(i);let l={};return t.set(i,l),new Set([...Object.keys(s),...Object.keys(i)]).forEach(u=>{let c=s[u],m=i[u];l[u]=o(c,m)}),l}return Array.isArray(s)||Array.isArray(i)?r(i===void 0?s:i):r(i!==void 0?i:s)};return o(e,n)}var Jr=e=>new Promise(n=>setTimeout(n,e)),Yr=async(e,n)=>(await Promise.all([n,new Promise(r=>setTimeout(r,e))])).slice(0,-1),Qr=async(e,...n)=>(await Promise.all([...n,new Promise(r=>setTimeout(r,e))])).slice(0,-1);var Zr=e=>{if(e===0||!e)return"0 B";let n=1024,t=["B","KB","MB","GB","TB"],r=Math.floor(Math.log(e)/Math.log(n));return Math.round(e/Math.pow(n,r))+" "+t[r]},eo=e=>{let n=Math.floor(e/60),t=Math.floor(e%60);return`${String(n).padStart(2,"0")}:${String(t).padStart(2,"0")}`},to=e=>{let n=new Date(e),r=Math.abs(new Date().getTime()-n.getTime());return`Created ${Math.ceil(r/(1e3*60*60*24))} days ago`};export{W as CLEEN_DEFAULT_PALETTE,re as CLEEN_IGNORE_OUTSIDE_CLICK,de as CLEEN_PALETTES,I as CLEEN_THEME_CHANGE_EVENT,ut as CLEEN_THEME_MAX_SIZE,Z as CLEEN_THEME_STORAGE_KEY,A as CLEEN_THEME_STYLE_ID,V as CLEEN_THEME_TOKENS,pr as CleenThemeProvider,xe as ColorHelpers,Fe as FileEntryStatus,so as NumericFormat,io as PatternFormat,$t as ZIndex,Kr as applyDefaults,Ee as applyThemeMode,X as applyThemeOverrides,ye as applyThemePalette,Q as buildThemeOverridesCss,ie as calculateOptimalPosition,le as calculatePositionValues,Jn as clearThemeOverrides,Br as cn,q as createThemeDefinition,Yr as delay,Qr as delayAll,St as encodeWav,eo as formatAudioTime,Zr as formatFileSize,S as formatRgbChannels,Bn as getCleenThemeToken,ue as getContrastRatio,to as getCreatedDate,G as getMinContrastRatio,jr as getRandomImageUrl,Y as getSystemThemeMode,Zn as getThemeBootScript,vr as getThemeColor,br as getThemeContrastIssues,U as getThemeTokenValue,Ce as initCleenTheme,me as isCleenThemeToken,In as isRgbChannels,he as isValidPaletteName,K as isValidTokenName,Un as meetsContrast,P as parseRgbChannels,Yn as readThemeTokenValues,lo as removeNumericFormat,ao as removePatternFormat,O as resolveThemeMode,_n as rgbChannelsToHex,_ as subscribeToSystemThemeMode,z as toRgbChannels,Ir as trimBlob,Ut as useAnimateNumber,Ht as useBodyScrollLock,kn as useCleenColors,Dn as useCleenOverlays,N as useCleenTheme,jt as useControlled,qt as useDebounce,Qt as useDisclosure,en as useFileUpload,rn as useForm,ln as useIDSet,co as useNumericFormat,mn as useOutsideClick,hn as usePaginationState,uo as usePatternFormat,En as usePositionClose,wr as useThemeColor,wn as useValidation,Sn as useWidthDynamicResize,jn as validateThemeDefinition,Jr as wait};