@yamada-ui/utils 1.0.2-next-20240109074600 → 1.0.2
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/{chunk-DTSJWL2Z.mjs → chunk-NCPYEYPF.mjs} +22 -151
- package/dist/chunk-NCPYEYPF.mjs.map +1 -0
- package/dist/color.d.mts +1 -12
- package/dist/color.d.ts +1 -12
- package/dist/color.js +11 -168
- package/dist/color.js.map +1 -1
- package/dist/color.mjs +1 -21
- package/dist/dom.js +1 -1
- package/dist/dom.js.map +1 -1
- package/dist/dom.mjs +1 -1
- package/dist/function.mjs +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +12 -158
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -21
- package/dist/object.mjs +1 -1
- package/dist/react.mjs +1 -1
- package/package.json +1 -1
- package/dist/chunk-DTSJWL2Z.mjs.map +0 -1
|
@@ -213,7 +213,7 @@ var isHidden = (el) => {
|
|
|
213
213
|
return true;
|
|
214
214
|
return el.hidden;
|
|
215
215
|
};
|
|
216
|
-
var isDisabled = (el) => Boolean(el.getAttribute("disabled")) === true || Boolean(el.getAttribute("aria-disabled")) === true;
|
|
216
|
+
var isDisabled = (el) => Boolean(el.getAttribute("disabled")) === true || Boolean(el.getAttribute("data-disabled")) === true || Boolean(el.getAttribute("aria-disabled")) === true;
|
|
217
217
|
var isVisible = (el) => el.offsetWidth > 0 && el.offsetHeight > 0;
|
|
218
218
|
var hasTabIndex = (el) => el.hasAttribute("tabindex");
|
|
219
219
|
var isContentEditable = (el) => {
|
|
@@ -300,7 +300,14 @@ var isActiveElement = (el) => {
|
|
|
300
300
|
};
|
|
301
301
|
|
|
302
302
|
// src/color.ts
|
|
303
|
-
import
|
|
303
|
+
import {
|
|
304
|
+
toHex,
|
|
305
|
+
parseToRgba,
|
|
306
|
+
transparentize,
|
|
307
|
+
mix,
|
|
308
|
+
darken,
|
|
309
|
+
lighten
|
|
310
|
+
} from "color2k";
|
|
304
311
|
var hues = [
|
|
305
312
|
50,
|
|
306
313
|
100,
|
|
@@ -327,9 +334,9 @@ var getColor = (color, fallback) => (theme = {}, colorMode) => {
|
|
|
327
334
|
const hex = getMemoizedObject(theme, `colors.${color}`, color);
|
|
328
335
|
try {
|
|
329
336
|
if (isArray(hex)) {
|
|
330
|
-
return
|
|
337
|
+
return toHex(String(colorMode !== "dark" ? hex[0] : hex[1]));
|
|
331
338
|
} else {
|
|
332
|
-
return
|
|
339
|
+
return toHex(String(hex));
|
|
333
340
|
}
|
|
334
341
|
} catch {
|
|
335
342
|
return fallback != null ? fallback : "#000000";
|
|
@@ -337,23 +344,23 @@ var getColor = (color, fallback) => (theme = {}, colorMode) => {
|
|
|
337
344
|
};
|
|
338
345
|
var lightenColor = (color, amount) => (theme, colorMode) => {
|
|
339
346
|
const raw = getColor(color, color)(theme, colorMode);
|
|
340
|
-
return
|
|
347
|
+
return toHex(lighten(raw, amount / 100));
|
|
341
348
|
};
|
|
342
349
|
var darkenColor = (color, amount) => (theme, colorMode) => {
|
|
343
350
|
const raw = getColor(color, color)(theme, colorMode);
|
|
344
|
-
return
|
|
351
|
+
return toHex(darken(raw, amount / 100));
|
|
345
352
|
};
|
|
346
353
|
var tintColor = (color, amount) => (theme, colorMode) => {
|
|
347
354
|
const raw = getColor(color, color)(theme, colorMode);
|
|
348
|
-
return
|
|
355
|
+
return toHex(mix(raw, "#fff", amount / 100));
|
|
349
356
|
};
|
|
350
357
|
var shadeColor = (color, amount) => (theme, colorMode) => {
|
|
351
358
|
const raw = getColor(color, color)(theme, colorMode);
|
|
352
|
-
return
|
|
359
|
+
return toHex(mix(raw, "#000", amount / 100));
|
|
353
360
|
};
|
|
354
361
|
var transparentizeColor = (color, alpha) => (theme, colorMode) => {
|
|
355
362
|
const raw = getColor(color, color)(theme, colorMode);
|
|
356
|
-
return
|
|
363
|
+
return transparentize(raw, 1 - alpha);
|
|
357
364
|
};
|
|
358
365
|
var toneColor = (color, hue, lCoef = 0.94, dCoef = 0.86) => (theme, colorMode) => {
|
|
359
366
|
if (hue < 50 || 950 < hue)
|
|
@@ -363,14 +370,14 @@ var toneColor = (color, hue, lCoef = 0.94, dCoef = 0.86) => (theme, colorMode) =
|
|
|
363
370
|
getColor(color, color)(theme, colorMode);
|
|
364
371
|
const coef = hue < 500 ? lCoef : dCoef;
|
|
365
372
|
const amount = (500 - hue) * 1e-3 * coef;
|
|
366
|
-
return
|
|
373
|
+
return toHex(lighten(raw, amount));
|
|
367
374
|
};
|
|
368
375
|
var toneColors = (color, lCoef = 0.94, dCoef = 0.86) => {
|
|
369
376
|
const colors = {};
|
|
370
377
|
hues.forEach((hue) => {
|
|
371
378
|
const coef = hue < 500 ? lCoef : dCoef;
|
|
372
379
|
const amount = (500 - hue) * 1e-3 * coef;
|
|
373
|
-
colors[hue] =
|
|
380
|
+
colors[hue] = toHex(lighten(color, amount));
|
|
374
381
|
});
|
|
375
382
|
return colors;
|
|
376
383
|
};
|
|
@@ -416,7 +423,7 @@ var randomColorFromList = (str, list) => {
|
|
|
416
423
|
};
|
|
417
424
|
var randomFromList = (list) => list[Math.floor(Math.random() * list.length)];
|
|
418
425
|
var getBrightness = (color) => {
|
|
419
|
-
const [r, g, b] =
|
|
426
|
+
const [r, g, b] = parseToRgba(color);
|
|
420
427
|
return (r * 299 + g * 587 + b * 114) / 1e3;
|
|
421
428
|
};
|
|
422
429
|
var isTone = (color) => (theme, colorMode) => {
|
|
@@ -427,132 +434,6 @@ var isTone = (color) => (theme, colorMode) => {
|
|
|
427
434
|
};
|
|
428
435
|
var isLight = (color) => (theme, colorMode) => isTone(color)(theme, colorMode) === "dark";
|
|
429
436
|
var isDark = (color) => (theme, colorMode) => isTone(color)(theme, colorMode) === "light";
|
|
430
|
-
var convertColor = (color, fallback) => (format) => {
|
|
431
|
-
try {
|
|
432
|
-
const isAlpha = format.endsWith("a");
|
|
433
|
-
if (format.startsWith("hex")) {
|
|
434
|
-
let hexa = c.toHex(color);
|
|
435
|
-
if (isAlpha) {
|
|
436
|
-
if (hexa.length === 7)
|
|
437
|
-
hexa += "ff";
|
|
438
|
-
} else {
|
|
439
|
-
hexa = hexa.replace(/(?<=^#([0-9a-fA-F]{6}))[0-9a-fA-F]{2}$/, "");
|
|
440
|
-
}
|
|
441
|
-
return hexa;
|
|
442
|
-
} else if (format.startsWith("hsl")) {
|
|
443
|
-
let hsla2 = c.toHsla(color);
|
|
444
|
-
if (!isAlpha) {
|
|
445
|
-
hsla2 = hsla2.replace(/hsla/, "hsl");
|
|
446
|
-
hsla2 = hsla2.replace(/,\s*\d+(\.\d+)?\)$/, ")");
|
|
447
|
-
}
|
|
448
|
-
return hsla2;
|
|
449
|
-
} else {
|
|
450
|
-
let rgba2 = c.toRgba(color);
|
|
451
|
-
if (!isAlpha) {
|
|
452
|
-
rgba2 = rgba2.replace(/rgba/, "rgb");
|
|
453
|
-
rgba2 = rgba2.replace(/,\s*\d+(\.\d+)?\)$/, ")");
|
|
454
|
-
}
|
|
455
|
-
return rgba2;
|
|
456
|
-
}
|
|
457
|
-
} catch {
|
|
458
|
-
if (fallback)
|
|
459
|
-
return convertColor(fallback)(format);
|
|
460
|
-
}
|
|
461
|
-
};
|
|
462
|
-
var calcFormat = (color) => {
|
|
463
|
-
if (color.startsWith("hsl")) {
|
|
464
|
-
return color.startsWith("hsla") ? "hsla" : "hsl";
|
|
465
|
-
} else if (color.startsWith("rgb")) {
|
|
466
|
-
return color.startsWith("rgba") ? "rgba" : "rgb";
|
|
467
|
-
} else {
|
|
468
|
-
return color.length === 9 ? "hexa" : "hex";
|
|
469
|
-
}
|
|
470
|
-
};
|
|
471
|
-
var getAlpha = (color) => c.parseToRgba(color)[3];
|
|
472
|
-
var alphaToHex = (a) => {
|
|
473
|
-
if (0 > a)
|
|
474
|
-
a = 0;
|
|
475
|
-
if (1 < a)
|
|
476
|
-
a = 1;
|
|
477
|
-
return Math.round(a * 255).toString(16).padStart(2, "0");
|
|
478
|
-
};
|
|
479
|
-
var parseToRgba2 = (color, fallback) => {
|
|
480
|
-
try {
|
|
481
|
-
return c.parseToRgba(color);
|
|
482
|
-
} catch {
|
|
483
|
-
if (fallback)
|
|
484
|
-
return c.parseToRgba(fallback);
|
|
485
|
-
}
|
|
486
|
-
};
|
|
487
|
-
var parseToHsla2 = (color, fallback) => {
|
|
488
|
-
try {
|
|
489
|
-
return c.parseToHsla(color);
|
|
490
|
-
} catch {
|
|
491
|
-
if (fallback)
|
|
492
|
-
return c.parseToHsla(fallback);
|
|
493
|
-
}
|
|
494
|
-
};
|
|
495
|
-
var parseToHsv = (color, fallback) => {
|
|
496
|
-
var _a;
|
|
497
|
-
let [r, g, b, a] = (_a = parseToRgba2(color, fallback)) != null ? _a : [255, 255, 255, 1];
|
|
498
|
-
r = r / 255;
|
|
499
|
-
g = g / 255;
|
|
500
|
-
b = b / 255;
|
|
501
|
-
const [min, max] = [Math.min(r, g, b), Math.max(r, g, b)];
|
|
502
|
-
const delta = max - min;
|
|
503
|
-
let [h, v, s] = [0, max, max == 0 ? 0 : delta / max];
|
|
504
|
-
switch (min) {
|
|
505
|
-
case max:
|
|
506
|
-
h = 0;
|
|
507
|
-
break;
|
|
508
|
-
case r:
|
|
509
|
-
h = 60 * ((b - g) / delta) + 180;
|
|
510
|
-
break;
|
|
511
|
-
case g:
|
|
512
|
-
h = 60 * ((r - b) / delta) + 300;
|
|
513
|
-
break;
|
|
514
|
-
case b:
|
|
515
|
-
h = 60 * ((g - r) / delta) + 60;
|
|
516
|
-
break;
|
|
517
|
-
}
|
|
518
|
-
return [h, s, v, a];
|
|
519
|
-
};
|
|
520
|
-
var rgbaTo = ([r, g, b, a], fallback) => (format = "hex") => convertColor(c.rgba(r, g, b, a), fallback)(format);
|
|
521
|
-
var hslaTo = ([h, s, l, a], fallback) => (format = "hex") => convertColor(c.hsla(h, s, l, a), fallback)(format);
|
|
522
|
-
var hsvTo = ([h, s, v, a], fallback) => (format = "hex") => {
|
|
523
|
-
h = h / 60;
|
|
524
|
-
let rgb = [v, v, v];
|
|
525
|
-
let i = Math.floor(h);
|
|
526
|
-
let f = h - i;
|
|
527
|
-
let p = v * (1 - s);
|
|
528
|
-
let q = v * (1 - s * f);
|
|
529
|
-
let t = v * (1 - s * (1 - f));
|
|
530
|
-
switch (i) {
|
|
531
|
-
case 0:
|
|
532
|
-
case 6:
|
|
533
|
-
rgb = [v, t, p];
|
|
534
|
-
break;
|
|
535
|
-
case 1:
|
|
536
|
-
rgb = [q, v, p];
|
|
537
|
-
break;
|
|
538
|
-
case 2:
|
|
539
|
-
rgb = [p, v, t];
|
|
540
|
-
break;
|
|
541
|
-
case 3:
|
|
542
|
-
rgb = [p, q, v];
|
|
543
|
-
break;
|
|
544
|
-
case 4:
|
|
545
|
-
rgb = [t, p, v];
|
|
546
|
-
break;
|
|
547
|
-
case 5:
|
|
548
|
-
rgb = [v, p, q];
|
|
549
|
-
break;
|
|
550
|
-
}
|
|
551
|
-
let color = `rgb(${rgb.map((v2) => Math.round(v2 * 255)).join(", ")})`;
|
|
552
|
-
if (isNumber(a))
|
|
553
|
-
color = color.replace(/\)$/, `, ${a})`);
|
|
554
|
-
return convertColor(color, fallback)(format);
|
|
555
|
-
};
|
|
556
437
|
|
|
557
438
|
// src/object.ts
|
|
558
439
|
var omitObject = (obj, keys) => {
|
|
@@ -771,16 +652,6 @@ export {
|
|
|
771
652
|
randomColor,
|
|
772
653
|
isTone,
|
|
773
654
|
isLight,
|
|
774
|
-
isDark
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
getAlpha,
|
|
778
|
-
alphaToHex,
|
|
779
|
-
parseToRgba2 as parseToRgba,
|
|
780
|
-
parseToHsla2 as parseToHsla,
|
|
781
|
-
parseToHsv,
|
|
782
|
-
rgbaTo,
|
|
783
|
-
hslaTo,
|
|
784
|
-
hsvTo
|
|
785
|
-
};
|
|
786
|
-
//# sourceMappingURL=chunk-DTSJWL2Z.mjs.map
|
|
655
|
+
isDark
|
|
656
|
+
};
|
|
657
|
+
//# sourceMappingURL=chunk-NCPYEYPF.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/function.ts","../src/react.tsx","../src/dom.ts","../src/color.ts","../src/object.ts"],"sourcesContent":["import { isFunction } from \".\"\n\nexport const noop = () => {}\n\nexport const runIfFunc = <T, U extends Array<any>>(\n valOrFunc: T | ((...funcArgs: U) => T),\n ...args: U\n): T => (isFunction(valOrFunc) ? valOrFunc(...args) : valOrFunc)\n\nexport const handlerAll =\n <T extends (event: any) => void>(...funcs: (T | undefined)[]) =>\n (event: (T extends (...args: infer R) => any ? R : never)[0]) => {\n funcs.some((func) => {\n func?.(event)\n\n return event?.defaultPrevented\n })\n }\n\nexport const funcAll =\n <T extends (...args: any[]) => any>(...funcs: (T | undefined)[]) =>\n (arg: (T extends (...args: infer R) => any ? R : never)[0]) =>\n funcs.forEach((func) => func?.(arg))\n","import * as React from \"react\"\nimport type { Merge } from \".\"\nimport { isNumber, isString } from \".\"\n\ntype DOMElement = Element & HTMLOrSVGElement\n\nexport type DOMAttributes<Y = DOMElement> = React.HTMLAttributes<Y> &\n React.AriaAttributes &\n React.DOMAttributes<Y> & {\n id?: string\n role?: React.AriaRole\n tabIndex?: number\n style?: React.CSSProperties\n }\n\nexport type PropGetter<Y = undefined, M = DOMAttributes> = (\n props?: Merge<DOMAttributes, Y>,\n ref?: React.Ref<any>,\n) => M & React.RefAttributes<any>\n\nexport type RequiredPropGetter<Y = undefined, M = DOMAttributes> = (\n props: Merge<DOMAttributes, Y>,\n ref?: React.Ref<any>,\n) => M & React.RefAttributes<any>\n\nexport type MaybeRenderProp<Y> =\n | React.ReactNode\n | ((props: Y) => React.ReactNode)\n\ntype Options = {\n strict?: boolean\n errorMessage?: string\n name?: string\n}\n\ntype CreateContextReturn<T> = [React.Provider<T>, () => T, React.Context<T>]\n\nexport const createContext = <ContextType extends any = any>({\n strict = true,\n errorMessage = \"useContext: `context` is undefined. Seems you forgot to wrap component within the Provider\",\n name,\n}: Options = {}) => {\n const Context = React.createContext<ContextType | undefined>(undefined)\n\n Context.displayName = name\n\n const useContext = () => {\n const context = React.useContext(Context)\n\n if (!context && strict) {\n const error = new Error(errorMessage)\n error.name = \"ContextError\"\n Error.captureStackTrace?.(error, useContext)\n throw error\n }\n\n return context\n }\n\n return [\n Context.Provider,\n useContext,\n Context,\n ] as CreateContextReturn<ContextType>\n}\n\nexport const useSafeLayoutEffect = Boolean(globalThis?.document)\n ? React.useLayoutEffect\n : React.useEffect\n\nexport const useUnmountEffect = (callback: () => void) =>\n // eslint-disable-next-line react-hooks/exhaustive-deps\n React.useEffect(() => () => callback(), [])\n\nexport type UseIsMountedProps = {\n rerender?: boolean\n delay?: number\n}\n\nexport const useIsMounted = ({\n rerender = false,\n delay = 0,\n}: UseIsMountedProps = {}): [() => boolean, boolean] => {\n const isMountedRef = React.useRef(false)\n const [isMounted, setIsMounted] = React.useState(false)\n\n useSafeLayoutEffect(() => {\n isMountedRef.current = true\n\n let timeoutId: any = null\n\n if (rerender) {\n if (delay > 0) {\n timeoutId = setTimeout(() => setIsMounted(true), delay)\n } else {\n setIsMounted(true)\n }\n }\n\n return () => {\n isMountedRef.current = false\n\n if (rerender) setIsMounted(false)\n\n if (timeoutId) clearTimeout(timeoutId)\n }\n }, [delay, rerender])\n\n return [React.useCallback(() => isMountedRef.current, []), isMounted]\n}\n\nexport type UseIsMountedReturn = ReturnType<typeof useIsMounted>\n\nexport const getValidChildren = (\n children: React.ReactNode,\n): React.ReactElement[] =>\n React.Children.toArray(children).filter((child) =>\n React.isValidElement(child),\n ) as React.ReactElement[]\n\nexport const isValidElement = (child: any): child is React.ReactNode =>\n React.isValidElement(child) || isString(child) || isNumber(child)\n\nexport const findChildren = (\n children: React.ReactElement<\n any,\n string | React.JSXElementConstructor<any>\n >[],\n ...types: React.JSXElementConstructor<any>[]\n): [React.ReactElement | undefined, ...React.ReactElement[]] =>\n (children.find((child) => types.some((type) => child.type === type))\n ? children.sort((a, b) =>\n types.some((type) => a.type === type)\n ? -1\n : types.some((type) => b.type === type)\n ? 1\n : 0,\n )\n : [undefined, ...children]) as [\n React.ReactElement | undefined,\n ...React.ReactElement[],\n ]\n\nexport const includesChildren = (\n children: React.ReactElement<\n any,\n string | React.JSXElementConstructor<any>\n >[],\n ...types: React.JSXElementConstructor<any>[]\n): boolean =>\n children.some((child) => {\n if (types.some((type) => child.type === type)) return true\n\n const children = getValidChildren(child.props.children)\n\n return children.length ? includesChildren(children, ...types) : false\n })\n\nexport const omitChildren = (\n children: React.ReactElement<\n any,\n string | React.JSXElementConstructor<any>\n >[],\n ...types: React.JSXElementConstructor<any>[]\n): React.ReactElement[] =>\n children.filter((child) => types.every((type) => child.type !== type))\n\nexport const pickChildren = (\n children: React.ReactElement<\n any,\n string | React.JSXElementConstructor<any>\n >[],\n ...types: React.JSXElementConstructor<any>[]\n): React.ReactElement[] =>\n children.filter((child) => types.every((type) => child.type === type))\n\nexport const cx = (...classNames: (string | undefined)[]) =>\n classNames.filter(Boolean).join(\" \")\n\ntype ReactRef<T> = React.Ref<T> | React.MutableRefObject<T>\n\nexport const isRefObject = (val: any): val is { current: any } =>\n \"current\" in val\n\nexport const assignRef = <T extends any = any>(\n ref: ReactRef<T> | undefined,\n value: T,\n) => {\n if (ref == null) return\n\n if (typeof ref === \"function\") {\n ref(value)\n\n return\n }\n\n try {\n // @ts-ignore\n ref.current = value\n } catch (error) {\n throw new Error(`Cannot assign value '${value}' to ref '${ref}'`)\n }\n}\n\nexport const mergeRefs =\n <T extends any = any>(...refs: (ReactRef<T> | null | undefined)[]) =>\n (node: T | null) => {\n refs.forEach((ref) => {\n assignRef(ref, node)\n })\n }\n\nexport const useMergeRefs = <T extends any = any>(\n ...refs: (ReactRef<T> | undefined)[]\n) => React.useMemo(() => mergeRefs(...refs), [refs])\n\nexport const useCallbackRef = <T extends (...args: any[]) => any>(\n callback: T | undefined,\n deps: React.DependencyList = [],\n) => {\n const callbackRef = React.useRef(callback)\n\n React.useEffect(() => {\n callbackRef.current = callback\n })\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return React.useCallback(\n ((...args) => callbackRef.current?.(...args)) as T,\n deps,\n )\n}\n\n/**\n * `useUpdateEffect` is a custom hook that skips side effects on the initial render, and only runs them when the dependency array changes.\n *\n * @see Docs https://yamada-ui.com/hooks/use-update-effect\n */\nexport const useUpdateEffect = (\n callback: React.EffectCallback,\n deps: React.DependencyList,\n) => {\n const renderCycleRef = React.useRef(false)\n const effectCycleRef = React.useRef(false)\n\n React.useEffect(() => {\n const mounted = renderCycleRef.current\n const run = mounted && effectCycleRef.current\n\n if (run) return callback()\n\n effectCycleRef.current = true\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps)\n\n React.useEffect(() => {\n renderCycleRef.current = true\n\n return () => {\n renderCycleRef.current = false\n }\n }, [])\n}\n\nexport type FunctionReturningPromise = (...args: any[]) => Promise<any>\n\n/**\n * `useAsync` is a custom hook that executes an asynchronous function and tracks its state.\n *\n * @see Docs https://yamada-ui.com/hooks/use-async\n */\nexport const useAsync = <T extends FunctionReturningPromise>(\n func: T,\n deps: React.DependencyList = [],\n) => {\n const [state, callback] = useAsyncFunc(func, deps, { loading: true })\n\n React.useEffect(() => {\n callback()\n }, [callback])\n\n return state\n}\n\nexport type AsyncState<T> =\n | {\n loading: boolean\n error?: undefined\n value?: undefined\n }\n | {\n loading: true\n error?: Error | undefined\n value?: T\n }\n | {\n loading: false\n error: Error\n value?: undefined\n }\n | {\n loading: false\n error?: undefined\n value: T\n }\n\nexport type PromiseType<P extends Promise<any>> = P extends Promise<infer T>\n ? T\n : never\n\ntype StateFromFunctionReturningPromise<T extends FunctionReturningPromise> =\n AsyncState<PromiseType<ReturnType<T>>>\n\nexport type AsyncFnReturn<\n T extends FunctionReturningPromise = FunctionReturningPromise,\n> = [StateFromFunctionReturningPromise<T>, T]\n\nexport const useAsyncFunc = <T extends FunctionReturningPromise>(\n func: T,\n deps: React.DependencyList = [],\n initialState: StateFromFunctionReturningPromise<T> = { loading: false },\n): AsyncFnReturn<T> => {\n const lastCallId = React.useRef(0)\n const [isMounted] = useIsMounted()\n const [state, setState] =\n React.useState<StateFromFunctionReturningPromise<T>>(initialState)\n\n const callback = React.useCallback(\n (...args: Parameters<T>): ReturnType<T> => {\n const callId = ++lastCallId.current\n\n if (!state.loading)\n setState((prevState) => ({ ...prevState, loading: true }))\n\n return func(...args).then(\n (value) => {\n if (isMounted() && callId === lastCallId.current)\n setState({ value, loading: false })\n\n return value\n },\n (error) => {\n if (isMounted() && callId === lastCallId.current)\n setState({ error, loading: false })\n\n return error\n },\n ) as ReturnType<T>\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n deps,\n )\n\n return [state, callback as unknown as T]\n}\n\nexport type AsyncStateRetry<T> = AsyncState<T> & {\n retry(): void\n}\n\nexport const useAsyncRetry = <T,>(\n func: () => Promise<T>,\n deps: React.DependencyList = [],\n) => {\n const [attempt, setAttempt] = React.useState<number>(0)\n const state = useAsync(func, [...deps, attempt])\n\n const stateLoading = state.loading\n\n const retry = React.useCallback(() => {\n if (stateLoading) return\n\n setAttempt((currentAttempt) => currentAttempt + 1)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [...deps, stateLoading])\n\n return { ...state, retry }\n}\n\nexport const createId = (prefix: string) => `${prefix}-${new Date().getTime()}`\n","import type React from \"react\"\nimport { isNumber, isUndefined } from \".\"\n\nexport const createdDom = (): boolean =>\n !!(\n typeof window !== \"undefined\" &&\n window.document &&\n window.document.createElement\n )\n\nexport const getPlatform = (): string =>\n (navigator as any).userAgentData?.platform ?? navigator.platform\n\nexport const vendor = (v: RegExp): boolean =>\n createdDom() && v.test(navigator.vendor)\nexport const platform = (v: RegExp): boolean =>\n createdDom() && v.test(getPlatform())\n\nexport const isMac = (): boolean => platform(/^mac/)\nexport const isApple = (): boolean => platform(/mac|iphone|ipad|ipod/i)\nexport const isSafari = (): boolean => isApple() && vendor(/apple/i)\n\nexport const isElement = (el: any): el is Element =>\n el != null &&\n typeof el == \"object\" &&\n \"nodeType\" in el &&\n el.nodeType === Node.ELEMENT_NODE\n\nexport const isHTMLElement = (el: any): el is HTMLElement => {\n if (!isElement(el)) return false\n\n const win = el.ownerDocument.defaultView ?? window\n\n return el instanceof win.HTMLElement\n}\n\nexport const isHidden = (el: HTMLElement): boolean => {\n if (el.parentElement && isHidden(el.parentElement)) return true\n\n return el.hidden\n}\n\nexport const isDisabled = (el: HTMLElement): boolean =>\n Boolean(el.getAttribute(\"disabled\")) === true ||\n Boolean(el.getAttribute(\"data-disabled\")) === true ||\n Boolean(el.getAttribute(\"aria-disabled\")) === true\n\nconst isVisible = (el: HTMLElement) => el.offsetWidth > 0 && el.offsetHeight > 0\n\nexport const hasTabIndex = (el: HTMLElement): boolean =>\n el.hasAttribute(\"tabindex\")\n\nexport const isContentEditable = (el: HTMLElement): boolean => {\n const value = el.getAttribute(\"contenteditable\")\n\n return value !== \"false\" && value != null\n}\n\nexport const isContains = (\n parent: HTMLElement | null,\n child: HTMLElement | null,\n): boolean | undefined => {\n return parent === child || parent?.contains(child)\n}\n\nexport const getPx = (value: string | number | undefined): number => {\n if (isNumber(value)) return value\n\n if (isUndefined(value)) return 0\n\n if (value.includes(\"px\")) return parseFloat(value)\n\n const isBrowser = createdDom()\n let fontSize = 16\n\n if (isBrowser) {\n const style = window.getComputedStyle(document.documentElement)\n\n fontSize = parseFloat(style.fontSize)\n }\n\n return parseFloat(value) * fontSize\n}\n\nexport const getEventRelatedTarget = (\n ev: React.FocusEvent | React.MouseEvent,\n) =>\n (ev.relatedTarget ??\n ev.currentTarget.ownerDocument.activeElement) as HTMLElement | null\n\ntype Booleanish = boolean | \"true\" | \"false\"\n\nexport const dataAttr = (condition: boolean | undefined) =>\n (condition ? \"\" : undefined) as Booleanish\n\nexport const ariaAttr = (\n condition: boolean | undefined,\n): boolean | undefined => (condition ? true : undefined)\n\nexport type FocusableElement = {\n focus: (options?: FocusOptions) => void\n}\n\nconst focusableElList = [\n \"input:not(:disabled):not([disabled])\",\n \"select:not(:disabled):not([disabled])\",\n \"textarea:not(:disabled):not([disabled])\",\n \"embed\",\n \"iframe\",\n \"object\",\n \"a[href]\",\n \"area[href]\",\n \"button:not(:disabled):not([disabled])\",\n \"[tabindex]\",\n \"audio[controls]\",\n \"video[controls]\",\n \"*[tabindex]:not([aria-disabled])\",\n \"*[contenteditable]\",\n]\n\nconst focusableElSelector: string = focusableElList.join()\n\nexport const getAllFocusable = <T extends HTMLElement>(container: T): T[] => {\n const focusableEls: T[] = Array.from(\n container.querySelectorAll<T>(focusableElSelector),\n )\n\n focusableEls.unshift(container)\n\n return focusableEls.filter((el) => isFocusable(el) && isVisible(el))\n}\n\nexport const isFocusable = (el: HTMLElement): boolean => {\n if (!isHTMLElement(el) || isHidden(el) || isDisabled(el)) {\n return false\n }\n\n const { localName } = el\n const focusableTags = [\"input\", \"select\", \"textarea\", \"button\"]\n\n if (focusableTags.indexOf(localName) >= 0) return true\n\n const others = {\n a: () => el.hasAttribute(\"href\"),\n audio: () => el.hasAttribute(\"controls\"),\n video: () => el.hasAttribute(\"controls\"),\n }\n\n if (localName in others) return others[localName as keyof typeof others]()\n\n if (isContentEditable(el)) return true\n\n return hasTabIndex(el)\n}\n\nexport const hasNegativeTabIndex = (el: HTMLElement): boolean =>\n hasTabIndex(el) && el.tabIndex === -1\n\nexport const isTabbable = (el?: HTMLElement | null): boolean =>\n el ? isHTMLElement(el) && isFocusable(el) && !hasNegativeTabIndex(el) : false\n\nexport const getOwnerWindow = (\n node?: Element | null,\n): Window & typeof globalThis => getOwnerDocument(node)?.defaultView ?? window\n\nexport const getOwnerDocument = (el?: Element | null): Document =>\n isElement(el) ? el.ownerDocument : document\n\nexport const getActiveElement = (el?: HTMLElement): HTMLElement =>\n getOwnerDocument(el).activeElement as HTMLElement\n\nexport const isActiveElement = (el: HTMLElement) => {\n return getActiveElement(el) === el\n}\n","import {\n toHex,\n parseToRgba,\n transparentize,\n mix,\n darken,\n lighten,\n} from \"color2k\"\nimport type { Dict } from \".\"\nimport { getMemoizedObject as get, isArray } from \".\"\n\ntype ColorMode = \"light\" | \"dark\"\n\nexport const hues = [\n 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950,\n] as const\n\nexport const isGray = (colorScheme: string) =>\n colorScheme === \"gray\" || colorScheme === \"neutral\"\n\nexport const isAccessible = (colorScheme: string) =>\n colorScheme === \"yellow\" || colorScheme === \"cyan\" || colorScheme === \"lime\"\n\nexport const getColor =\n (color: string, fallback?: string) =>\n (theme: Dict = {}, colorMode?: ColorMode) => {\n const [token, hue] = color.split(\".\")\n\n const [, relatedToken] =\n Object.entries<string>(theme.semantics?.colorSchemes ?? {}).find(\n ([semanticToken]) => token === semanticToken,\n ) ?? []\n\n if (relatedToken) color = `${relatedToken}.${hue}`\n\n const hex = get<\n string | number | [string | number, string | number] | undefined\n >(theme, `colors.${color}`, color)\n\n try {\n if (isArray(hex)) {\n return toHex(String(colorMode !== \"dark\" ? hex[0] : hex[1]))\n } else {\n return toHex(String(hex))\n }\n } catch {\n return fallback ?? \"#000000\"\n }\n }\n\nexport const lightenColor =\n (color: string, amount: number) => (theme?: Dict, colorMode?: ColorMode) => {\n const raw = getColor(color, color)(theme, colorMode)\n\n return toHex(lighten(raw, amount / 100))\n }\n\nexport const darkenColor =\n (color: string, amount: number) => (theme?: Dict, colorMode?: ColorMode) => {\n const raw = getColor(color, color)(theme, colorMode)\n\n return toHex(darken(raw, amount / 100))\n }\n\nexport const tintColor =\n (color: string, amount: number) => (theme?: Dict, colorMode?: ColorMode) => {\n const raw = getColor(color, color)(theme, colorMode)\n\n return toHex(mix(raw, \"#fff\", amount / 100))\n }\n\nexport const shadeColor =\n (color: string, amount: number) => (theme?: Dict, colorMode?: ColorMode) => {\n const raw = getColor(color, color)(theme, colorMode)\n\n return toHex(mix(raw, \"#000\", amount / 100))\n }\n\nexport const transparentizeColor =\n (color: string, alpha: number) => (theme?: Dict, colorMode?: ColorMode) => {\n const raw = getColor(color, color)(theme, colorMode)\n\n return transparentize(raw, 1 - alpha)\n }\n\nexport const toneColor =\n (\n color: string,\n hue: (typeof hues)[number],\n lCoef: number = 0.94,\n dCoef: number = 0.86,\n ) =>\n (theme?: Dict, colorMode?: ColorMode) => {\n if (hue < 50 || 950 < hue) return color\n\n let raw = color\n\n if (theme && colorMode) getColor(color, color)(theme, colorMode)\n\n const coef = hue < 500 ? lCoef : dCoef\n const amount = (500 - hue) * 0.001 * coef\n\n return toHex(lighten(raw, amount))\n }\n\nexport const toneColors = (\n color: string,\n lCoef: number = 0.94,\n dCoef: number = 0.86,\n) => {\n const colors: Record<string, string> = {}\n\n hues.forEach((hue) => {\n const coef = hue < 500 ? lCoef : dCoef\n\n const amount = (500 - hue) * 0.001 * coef\n\n colors[hue] = toHex(lighten(color, amount))\n })\n\n return colors\n}\n\nexport const randomColor = ({\n string,\n colors,\n}: { string?: string; colors?: string[] } = {}) => {\n const fallback = randomHex()\n\n if (string && colors) return randomColorFromList(string, colors)\n\n if (string && !colors) return randomColorFromString(string)\n\n if (colors && !string) return randomFromList(colors)\n\n return fallback\n}\n\nconst randomHex = () =>\n `#${Math.floor(Math.random() * 0xffffff)\n .toString(16)\n .padEnd(6, \"0\")}`\n\nconst randomColorFromString = (str: string) => {\n let hash = 0\n\n if (str.length === 0) return hash.toString()\n\n for (let i = 0; i < str.length; i += 1) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash)\n hash = hash & hash\n }\n\n let color = \"#\"\n\n for (let j = 0; j < 3; j += 1) {\n const value = (hash >> (j * 8)) & 255\n\n color += `00${value.toString(16)}`.substr(-2)\n }\n\n return color\n}\n\nconst randomColorFromList = (str: string, list: string[]) => {\n let index = 0\n\n if (str.length === 0) return list[0]\n\n for (let i = 0; i < str.length; i += 1) {\n index = str.charCodeAt(i) + ((index << 5) - index)\n\n index = index & index\n }\n\n index = ((index % list.length) + list.length) % list.length\n\n return list[index]\n}\n\nconst randomFromList = (list: string[]) =>\n list[Math.floor(Math.random() * list.length)]\n\nconst getBrightness = (color: string) => {\n const [r, g, b] = parseToRgba(color)\n\n return (r * 299 + g * 587 + b * 114) / 1000\n}\n\nexport const isTone =\n (color: string) => (theme?: Dict, colorMode?: ColorMode) => {\n const raw = theme ? getColor(color)(theme, colorMode) : color\n\n const brightness = getBrightness(raw)\n\n const isDark = brightness < 128\n\n return isDark ? \"dark\" : \"light\"\n }\n\nexport const isLight =\n (color: string) => (theme?: Dict, colorMode?: ColorMode) =>\n isTone(color)(theme, colorMode) === \"dark\"\n\nexport const isDark =\n (color: string) => (theme?: Dict, colorMode?: ColorMode) =>\n isTone(color)(theme, colorMode) === \"light\"\n","import type { Dict } from \".\"\nimport { isObject, isArray, isFunction } from \".\"\n\nexport const omitObject = <T extends Dict, K extends keyof T>(\n obj: T,\n keys: K[],\n): Omit<T, K> => {\n const result: Dict = {}\n\n Object.keys(obj).forEach((key) => {\n if (keys.includes(key as K)) return\n\n result[key] = obj[key]\n })\n\n return result as Omit<T, K>\n}\n\nexport const pickObject = <T extends Dict, K extends keyof T>(\n obj: T,\n keys: K[],\n): { [P in K]: T[P] } => {\n const result = {} as { [P in K]: T[P] }\n\n keys.forEach((key) => {\n if (key in obj) result[key] = obj[key]\n })\n\n return result\n}\n\nexport const splitObject = <T extends Dict, K extends keyof T>(\n obj: T,\n keys: K[],\n) => {\n const picked: Dict = {}\n const omitted: Dict = {}\n\n for (const [key, value] of Object.entries(obj)) {\n if (keys.includes(key as T[K])) {\n picked[key] = value\n } else {\n omitted[key] = value\n }\n }\n\n return [picked, omitted] as [{ [P in K]: T[P] }, Omit<T, K>]\n}\n\nexport const filterObject = <T extends Dict, K extends Dict>(\n obj: T,\n func: (key: keyof T, value: T[keyof T], obj: T) => boolean,\n): K => {\n const result: Dict = {}\n\n Object.entries(obj).forEach(([key, value]) => {\n const shouldPass = func(key, value, obj)\n\n if (shouldPass) result[key] = value\n })\n\n return result as K\n}\n\nexport const filterUndefined = <T extends Dict>(obj: T): T =>\n filterObject(obj, (_, val) => val !== null && val !== undefined)\n\nexport const merge = <T extends Dict>(\n target: any,\n source: any,\n mergeArray: boolean = false,\n): T => {\n let result = Object.assign({}, target)\n\n if (isObject(source)) {\n if (isObject(target)) {\n for (const [sourceKey, sourceValue] of Object.entries(source)) {\n const targetValue = target[sourceKey]\n\n if (mergeArray && isArray(sourceValue) && isArray(targetValue)) {\n result[sourceKey] = targetValue.concat(...sourceValue)\n } else if (\n !isFunction(sourceValue) &&\n isObject(sourceValue) &&\n target.hasOwnProperty(sourceKey)\n ) {\n result[sourceKey] = merge(targetValue, sourceValue, mergeArray)\n } else {\n Object.assign(result, { [sourceKey]: sourceValue })\n }\n }\n } else {\n result = source\n }\n }\n\n return result as T\n}\n\nexport const flattenObject = <T extends Dict>(\n obj: any,\n maxDepth: number = Infinity,\n omitKeys: string[] = [],\n): T => {\n if ((!isObject(obj) && !isArray(obj)) || !maxDepth) return obj\n\n return Object.entries(obj).reduce((result, [key, value]) => {\n if (\n isObject(value) &&\n !Object.keys(value).some((key) => omitKeys.includes(key))\n ) {\n Object.entries(flattenObject(value, maxDepth - 1, omitKeys)).forEach(\n ([childKey, childValue]) => {\n result[`${key}.${childKey}`] = childValue\n },\n )\n } else {\n result[key] = value\n }\n\n return result\n }, {} as any) as T\n}\n\nexport const objectFromEntries = <T extends Dict>(entries: any[][]): T =>\n entries.reduce((result, [key, value]) => {\n result[key] = value\n\n return result\n }, {} as any) as T\n\nexport const keysFormObject = <T extends Dict>(obj: T): (keyof T)[] =>\n Object.keys(obj)\n\nexport const replaceObject = <T extends any>(\n objOrArray: T,\n callBack: (value: any) => any,\n): T => {\n if (isArray(objOrArray)) {\n return objOrArray.map(callBack) as T\n } else if (isObject(objOrArray)) {\n return Object.entries(objOrArray).reduce((obj, [key, value]) => {\n obj[key] = callBack(value)\n\n return obj\n }, {} as Dict) as T\n } else {\n return callBack(objOrArray)\n }\n}\n\nexport const getObject = (\n obj: Dict,\n path: string | number,\n fallback?: any,\n i?: number,\n) => {\n const k = typeof path === \"string\" ? path.split(\".\") : [path]\n\n for (i = 0; i < k.length; i += 1) {\n if (!obj) break\n\n obj = obj[k[i]]\n }\n\n return obj === undefined ? fallback : obj\n}\n\nexport const memoizeObject = (func: typeof getObject) => {\n const cache = new WeakMap()\n\n const memoizedFunc = <T extends unknown = any>(\n obj: Dict,\n path: string | number,\n fallback?: any,\n i?: number,\n ): T => {\n if (typeof obj === \"undefined\") return func(obj, path, fallback)\n\n if (!cache.has(obj)) cache.set(obj, new Map())\n\n const map = cache.get(obj)\n\n if (map.has(path)) return map.get(path)\n\n const value = func(obj, path, fallback, i)\n\n map.set(path, value)\n\n return value as T\n }\n\n return memoizedFunc\n}\n\nexport const getMemoizedObject = memoizeObject(getObject)\n\nexport const assignAfter = (target: Record<string, any>, ...sources: any[]) => {\n if (target == null)\n throw new TypeError(\"Cannot convert undefined or null to object\")\n\n const result: Record<string, unknown> = { ...target }\n\n for (const nextSource of sources) {\n if (nextSource == null) continue\n\n for (const nextKey in nextSource) {\n if (!Object.prototype.hasOwnProperty.call(nextSource, nextKey)) continue\n\n if (nextKey in result) delete result[nextKey]\n\n result[nextKey] = nextSource[nextKey]\n }\n }\n\n return result\n}\n"],"mappings":"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","names":["createContext","useContext","isValidElement","children","isDark","key"]}
|
package/dist/color.d.mts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Dict } from './index.types.mjs';
|
|
2
2
|
|
|
3
3
|
type ColorMode = "light" | "dark";
|
|
4
|
-
type ColorFormat = "hex" | "hexa" | "rgba" | "rgb" | "hsl" | "hsla";
|
|
5
4
|
declare const hues: readonly [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950];
|
|
6
5
|
declare const isGray: (colorScheme: string) => boolean;
|
|
7
6
|
declare const isAccessible: (colorScheme: string) => boolean;
|
|
@@ -20,15 +19,5 @@ declare const randomColor: ({ string, colors, }?: {
|
|
|
20
19
|
declare const isTone: (color: string) => (theme?: Dict, colorMode?: ColorMode) => "light" | "dark";
|
|
21
20
|
declare const isLight: (color: string) => (theme?: Dict, colorMode?: ColorMode) => boolean;
|
|
22
21
|
declare const isDark: (color: string) => (theme?: Dict, colorMode?: ColorMode) => boolean;
|
|
23
|
-
declare const convertColor: (color: string, fallback?: string) => (format: ColorFormat) => string | undefined;
|
|
24
|
-
declare const calcFormat: (color: string) => ColorFormat;
|
|
25
|
-
declare const getAlpha: (color: string) => number;
|
|
26
|
-
declare const alphaToHex: (a: number) => string;
|
|
27
|
-
declare const parseToRgba: (color: string, fallback?: string) => [number, number, number, number] | undefined;
|
|
28
|
-
declare const parseToHsla: (color: string, fallback?: string) => [number, number, number, number] | undefined;
|
|
29
|
-
declare const parseToHsv: (color: string, fallback?: string) => [number, number, number, number];
|
|
30
|
-
declare const rgbaTo: ([r, g, b, a]: [number, number, number, number], fallback?: string) => (format?: ColorFormat) => string | undefined;
|
|
31
|
-
declare const hslaTo: ([h, s, l, a]: [number, number, number, number], fallback?: string) => (format?: ColorFormat) => string | undefined;
|
|
32
|
-
declare const hsvTo: ([h, s, v, a]: [number, number, number, number?], fallback?: string) => (format?: ColorFormat) => string | undefined;
|
|
33
22
|
|
|
34
|
-
export {
|
|
23
|
+
export { darkenColor, getColor, hues, isAccessible, isDark, isGray, isLight, isTone, lightenColor, randomColor, shadeColor, tintColor, toneColor, toneColors, transparentizeColor };
|
package/dist/color.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Dict } from './index.types.js';
|
|
2
2
|
|
|
3
3
|
type ColorMode = "light" | "dark";
|
|
4
|
-
type ColorFormat = "hex" | "hexa" | "rgba" | "rgb" | "hsl" | "hsla";
|
|
5
4
|
declare const hues: readonly [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950];
|
|
6
5
|
declare const isGray: (colorScheme: string) => boolean;
|
|
7
6
|
declare const isAccessible: (colorScheme: string) => boolean;
|
|
@@ -20,15 +19,5 @@ declare const randomColor: ({ string, colors, }?: {
|
|
|
20
19
|
declare const isTone: (color: string) => (theme?: Dict, colorMode?: ColorMode) => "light" | "dark";
|
|
21
20
|
declare const isLight: (color: string) => (theme?: Dict, colorMode?: ColorMode) => boolean;
|
|
22
21
|
declare const isDark: (color: string) => (theme?: Dict, colorMode?: ColorMode) => boolean;
|
|
23
|
-
declare const convertColor: (color: string, fallback?: string) => (format: ColorFormat) => string | undefined;
|
|
24
|
-
declare const calcFormat: (color: string) => ColorFormat;
|
|
25
|
-
declare const getAlpha: (color: string) => number;
|
|
26
|
-
declare const alphaToHex: (a: number) => string;
|
|
27
|
-
declare const parseToRgba: (color: string, fallback?: string) => [number, number, number, number] | undefined;
|
|
28
|
-
declare const parseToHsla: (color: string, fallback?: string) => [number, number, number, number] | undefined;
|
|
29
|
-
declare const parseToHsv: (color: string, fallback?: string) => [number, number, number, number];
|
|
30
|
-
declare const rgbaTo: ([r, g, b, a]: [number, number, number, number], fallback?: string) => (format?: ColorFormat) => string | undefined;
|
|
31
|
-
declare const hslaTo: ([h, s, l, a]: [number, number, number, number], fallback?: string) => (format?: ColorFormat) => string | undefined;
|
|
32
|
-
declare const hsvTo: ([h, s, v, a]: [number, number, number, number?], fallback?: string) => (format?: ColorFormat) => string | undefined;
|
|
33
22
|
|
|
34
|
-
export {
|
|
23
|
+
export { darkenColor, getColor, hues, isAccessible, isDark, isGray, isLight, isTone, lightenColor, randomColor, shadeColor, tintColor, toneColor, toneColors, transparentizeColor };
|
package/dist/color.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
6
|
var __export = (target, all) => {
|
|
9
7
|
for (var name in all)
|
|
@@ -17,27 +15,13 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
15
|
}
|
|
18
16
|
return to;
|
|
19
17
|
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
19
|
|
|
30
20
|
// src/color.ts
|
|
31
21
|
var color_exports = {};
|
|
32
22
|
__export(color_exports, {
|
|
33
|
-
alphaToHex: () => alphaToHex,
|
|
34
|
-
calcFormat: () => calcFormat,
|
|
35
|
-
convertColor: () => convertColor,
|
|
36
23
|
darkenColor: () => darkenColor,
|
|
37
|
-
getAlpha: () => getAlpha,
|
|
38
24
|
getColor: () => getColor,
|
|
39
|
-
hslaTo: () => hslaTo,
|
|
40
|
-
hsvTo: () => hsvTo,
|
|
41
25
|
hues: () => hues,
|
|
42
26
|
isAccessible: () => isAccessible,
|
|
43
27
|
isDark: () => isDark,
|
|
@@ -45,11 +29,7 @@ __export(color_exports, {
|
|
|
45
29
|
isLight: () => isLight,
|
|
46
30
|
isTone: () => isTone,
|
|
47
31
|
lightenColor: () => lightenColor,
|
|
48
|
-
parseToHsla: () => parseToHsla2,
|
|
49
|
-
parseToHsv: () => parseToHsv,
|
|
50
|
-
parseToRgba: () => parseToRgba2,
|
|
51
32
|
randomColor: () => randomColor,
|
|
52
|
-
rgbaTo: () => rgbaTo,
|
|
53
33
|
shadeColor: () => shadeColor,
|
|
54
34
|
tintColor: () => tintColor,
|
|
55
35
|
toneColor: () => toneColor,
|
|
@@ -57,10 +37,9 @@ __export(color_exports, {
|
|
|
57
37
|
transparentizeColor: () => transparentizeColor
|
|
58
38
|
});
|
|
59
39
|
module.exports = __toCommonJS(color_exports);
|
|
60
|
-
var
|
|
40
|
+
var import_color2k = require("color2k");
|
|
61
41
|
|
|
62
42
|
// src/assertion.ts
|
|
63
|
-
var isNumber = (value) => typeof value === "number";
|
|
64
43
|
var isArray = (value) => Array.isArray(value);
|
|
65
44
|
|
|
66
45
|
// src/object.ts
|
|
@@ -118,9 +97,9 @@ var getColor = (color, fallback) => (theme = {}, colorMode) => {
|
|
|
118
97
|
const hex = getMemoizedObject(theme, `colors.${color}`, color);
|
|
119
98
|
try {
|
|
120
99
|
if (isArray(hex)) {
|
|
121
|
-
return
|
|
100
|
+
return (0, import_color2k.toHex)(String(colorMode !== "dark" ? hex[0] : hex[1]));
|
|
122
101
|
} else {
|
|
123
|
-
return
|
|
102
|
+
return (0, import_color2k.toHex)(String(hex));
|
|
124
103
|
}
|
|
125
104
|
} catch {
|
|
126
105
|
return fallback != null ? fallback : "#000000";
|
|
@@ -128,23 +107,23 @@ var getColor = (color, fallback) => (theme = {}, colorMode) => {
|
|
|
128
107
|
};
|
|
129
108
|
var lightenColor = (color, amount) => (theme, colorMode) => {
|
|
130
109
|
const raw = getColor(color, color)(theme, colorMode);
|
|
131
|
-
return
|
|
110
|
+
return (0, import_color2k.toHex)((0, import_color2k.lighten)(raw, amount / 100));
|
|
132
111
|
};
|
|
133
112
|
var darkenColor = (color, amount) => (theme, colorMode) => {
|
|
134
113
|
const raw = getColor(color, color)(theme, colorMode);
|
|
135
|
-
return
|
|
114
|
+
return (0, import_color2k.toHex)((0, import_color2k.darken)(raw, amount / 100));
|
|
136
115
|
};
|
|
137
116
|
var tintColor = (color, amount) => (theme, colorMode) => {
|
|
138
117
|
const raw = getColor(color, color)(theme, colorMode);
|
|
139
|
-
return
|
|
118
|
+
return (0, import_color2k.toHex)((0, import_color2k.mix)(raw, "#fff", amount / 100));
|
|
140
119
|
};
|
|
141
120
|
var shadeColor = (color, amount) => (theme, colorMode) => {
|
|
142
121
|
const raw = getColor(color, color)(theme, colorMode);
|
|
143
|
-
return
|
|
122
|
+
return (0, import_color2k.toHex)((0, import_color2k.mix)(raw, "#000", amount / 100));
|
|
144
123
|
};
|
|
145
124
|
var transparentizeColor = (color, alpha) => (theme, colorMode) => {
|
|
146
125
|
const raw = getColor(color, color)(theme, colorMode);
|
|
147
|
-
return
|
|
126
|
+
return (0, import_color2k.transparentize)(raw, 1 - alpha);
|
|
148
127
|
};
|
|
149
128
|
var toneColor = (color, hue, lCoef = 0.94, dCoef = 0.86) => (theme, colorMode) => {
|
|
150
129
|
if (hue < 50 || 950 < hue)
|
|
@@ -154,14 +133,14 @@ var toneColor = (color, hue, lCoef = 0.94, dCoef = 0.86) => (theme, colorMode) =
|
|
|
154
133
|
getColor(color, color)(theme, colorMode);
|
|
155
134
|
const coef = hue < 500 ? lCoef : dCoef;
|
|
156
135
|
const amount = (500 - hue) * 1e-3 * coef;
|
|
157
|
-
return
|
|
136
|
+
return (0, import_color2k.toHex)((0, import_color2k.lighten)(raw, amount));
|
|
158
137
|
};
|
|
159
138
|
var toneColors = (color, lCoef = 0.94, dCoef = 0.86) => {
|
|
160
139
|
const colors = {};
|
|
161
140
|
hues.forEach((hue) => {
|
|
162
141
|
const coef = hue < 500 ? lCoef : dCoef;
|
|
163
142
|
const amount = (500 - hue) * 1e-3 * coef;
|
|
164
|
-
colors[hue] =
|
|
143
|
+
colors[hue] = (0, import_color2k.toHex)((0, import_color2k.lighten)(color, amount));
|
|
165
144
|
});
|
|
166
145
|
return colors;
|
|
167
146
|
};
|
|
@@ -207,7 +186,7 @@ var randomColorFromList = (str, list) => {
|
|
|
207
186
|
};
|
|
208
187
|
var randomFromList = (list) => list[Math.floor(Math.random() * list.length)];
|
|
209
188
|
var getBrightness = (color) => {
|
|
210
|
-
const [r, g, b] =
|
|
189
|
+
const [r, g, b] = (0, import_color2k.parseToRgba)(color);
|
|
211
190
|
return (r * 299 + g * 587 + b * 114) / 1e3;
|
|
212
191
|
};
|
|
213
192
|
var isTone = (color) => (theme, colorMode) => {
|
|
@@ -218,142 +197,10 @@ var isTone = (color) => (theme, colorMode) => {
|
|
|
218
197
|
};
|
|
219
198
|
var isLight = (color) => (theme, colorMode) => isTone(color)(theme, colorMode) === "dark";
|
|
220
199
|
var isDark = (color) => (theme, colorMode) => isTone(color)(theme, colorMode) === "light";
|
|
221
|
-
var convertColor = (color, fallback) => (format) => {
|
|
222
|
-
try {
|
|
223
|
-
const isAlpha = format.endsWith("a");
|
|
224
|
-
if (format.startsWith("hex")) {
|
|
225
|
-
let hexa = c.toHex(color);
|
|
226
|
-
if (isAlpha) {
|
|
227
|
-
if (hexa.length === 7)
|
|
228
|
-
hexa += "ff";
|
|
229
|
-
} else {
|
|
230
|
-
hexa = hexa.replace(/(?<=^#([0-9a-fA-F]{6}))[0-9a-fA-F]{2}$/, "");
|
|
231
|
-
}
|
|
232
|
-
return hexa;
|
|
233
|
-
} else if (format.startsWith("hsl")) {
|
|
234
|
-
let hsla2 = c.toHsla(color);
|
|
235
|
-
if (!isAlpha) {
|
|
236
|
-
hsla2 = hsla2.replace(/hsla/, "hsl");
|
|
237
|
-
hsla2 = hsla2.replace(/,\s*\d+(\.\d+)?\)$/, ")");
|
|
238
|
-
}
|
|
239
|
-
return hsla2;
|
|
240
|
-
} else {
|
|
241
|
-
let rgba2 = c.toRgba(color);
|
|
242
|
-
if (!isAlpha) {
|
|
243
|
-
rgba2 = rgba2.replace(/rgba/, "rgb");
|
|
244
|
-
rgba2 = rgba2.replace(/,\s*\d+(\.\d+)?\)$/, ")");
|
|
245
|
-
}
|
|
246
|
-
return rgba2;
|
|
247
|
-
}
|
|
248
|
-
} catch {
|
|
249
|
-
if (fallback)
|
|
250
|
-
return convertColor(fallback)(format);
|
|
251
|
-
}
|
|
252
|
-
};
|
|
253
|
-
var calcFormat = (color) => {
|
|
254
|
-
if (color.startsWith("hsl")) {
|
|
255
|
-
return color.startsWith("hsla") ? "hsla" : "hsl";
|
|
256
|
-
} else if (color.startsWith("rgb")) {
|
|
257
|
-
return color.startsWith("rgba") ? "rgba" : "rgb";
|
|
258
|
-
} else {
|
|
259
|
-
return color.length === 9 ? "hexa" : "hex";
|
|
260
|
-
}
|
|
261
|
-
};
|
|
262
|
-
var getAlpha = (color) => c.parseToRgba(color)[3];
|
|
263
|
-
var alphaToHex = (a) => {
|
|
264
|
-
if (0 > a)
|
|
265
|
-
a = 0;
|
|
266
|
-
if (1 < a)
|
|
267
|
-
a = 1;
|
|
268
|
-
return Math.round(a * 255).toString(16).padStart(2, "0");
|
|
269
|
-
};
|
|
270
|
-
var parseToRgba2 = (color, fallback) => {
|
|
271
|
-
try {
|
|
272
|
-
return c.parseToRgba(color);
|
|
273
|
-
} catch {
|
|
274
|
-
if (fallback)
|
|
275
|
-
return c.parseToRgba(fallback);
|
|
276
|
-
}
|
|
277
|
-
};
|
|
278
|
-
var parseToHsla2 = (color, fallback) => {
|
|
279
|
-
try {
|
|
280
|
-
return c.parseToHsla(color);
|
|
281
|
-
} catch {
|
|
282
|
-
if (fallback)
|
|
283
|
-
return c.parseToHsla(fallback);
|
|
284
|
-
}
|
|
285
|
-
};
|
|
286
|
-
var parseToHsv = (color, fallback) => {
|
|
287
|
-
var _a;
|
|
288
|
-
let [r, g, b, a] = (_a = parseToRgba2(color, fallback)) != null ? _a : [255, 255, 255, 1];
|
|
289
|
-
r = r / 255;
|
|
290
|
-
g = g / 255;
|
|
291
|
-
b = b / 255;
|
|
292
|
-
const [min, max] = [Math.min(r, g, b), Math.max(r, g, b)];
|
|
293
|
-
const delta = max - min;
|
|
294
|
-
let [h, v, s] = [0, max, max == 0 ? 0 : delta / max];
|
|
295
|
-
switch (min) {
|
|
296
|
-
case max:
|
|
297
|
-
h = 0;
|
|
298
|
-
break;
|
|
299
|
-
case r:
|
|
300
|
-
h = 60 * ((b - g) / delta) + 180;
|
|
301
|
-
break;
|
|
302
|
-
case g:
|
|
303
|
-
h = 60 * ((r - b) / delta) + 300;
|
|
304
|
-
break;
|
|
305
|
-
case b:
|
|
306
|
-
h = 60 * ((g - r) / delta) + 60;
|
|
307
|
-
break;
|
|
308
|
-
}
|
|
309
|
-
return [h, s, v, a];
|
|
310
|
-
};
|
|
311
|
-
var rgbaTo = ([r, g, b, a], fallback) => (format = "hex") => convertColor(c.rgba(r, g, b, a), fallback)(format);
|
|
312
|
-
var hslaTo = ([h, s, l, a], fallback) => (format = "hex") => convertColor(c.hsla(h, s, l, a), fallback)(format);
|
|
313
|
-
var hsvTo = ([h, s, v, a], fallback) => (format = "hex") => {
|
|
314
|
-
h = h / 60;
|
|
315
|
-
let rgb = [v, v, v];
|
|
316
|
-
let i = Math.floor(h);
|
|
317
|
-
let f = h - i;
|
|
318
|
-
let p = v * (1 - s);
|
|
319
|
-
let q = v * (1 - s * f);
|
|
320
|
-
let t = v * (1 - s * (1 - f));
|
|
321
|
-
switch (i) {
|
|
322
|
-
case 0:
|
|
323
|
-
case 6:
|
|
324
|
-
rgb = [v, t, p];
|
|
325
|
-
break;
|
|
326
|
-
case 1:
|
|
327
|
-
rgb = [q, v, p];
|
|
328
|
-
break;
|
|
329
|
-
case 2:
|
|
330
|
-
rgb = [p, v, t];
|
|
331
|
-
break;
|
|
332
|
-
case 3:
|
|
333
|
-
rgb = [p, q, v];
|
|
334
|
-
break;
|
|
335
|
-
case 4:
|
|
336
|
-
rgb = [t, p, v];
|
|
337
|
-
break;
|
|
338
|
-
case 5:
|
|
339
|
-
rgb = [v, p, q];
|
|
340
|
-
break;
|
|
341
|
-
}
|
|
342
|
-
let color = `rgb(${rgb.map((v2) => Math.round(v2 * 255)).join(", ")})`;
|
|
343
|
-
if (isNumber(a))
|
|
344
|
-
color = color.replace(/\)$/, `, ${a})`);
|
|
345
|
-
return convertColor(color, fallback)(format);
|
|
346
|
-
};
|
|
347
200
|
// Annotate the CommonJS export names for ESM import in node:
|
|
348
201
|
0 && (module.exports = {
|
|
349
|
-
alphaToHex,
|
|
350
|
-
calcFormat,
|
|
351
|
-
convertColor,
|
|
352
202
|
darkenColor,
|
|
353
|
-
getAlpha,
|
|
354
203
|
getColor,
|
|
355
|
-
hslaTo,
|
|
356
|
-
hsvTo,
|
|
357
204
|
hues,
|
|
358
205
|
isAccessible,
|
|
359
206
|
isDark,
|
|
@@ -361,11 +208,7 @@ var hsvTo = ([h, s, v, a], fallback) => (format = "hex") => {
|
|
|
361
208
|
isLight,
|
|
362
209
|
isTone,
|
|
363
210
|
lightenColor,
|
|
364
|
-
parseToHsla,
|
|
365
|
-
parseToHsv,
|
|
366
|
-
parseToRgba,
|
|
367
211
|
randomColor,
|
|
368
|
-
rgbaTo,
|
|
369
212
|
shadeColor,
|
|
370
213
|
tintColor,
|
|
371
214
|
toneColor,
|