@yamada-ui/utils 1.2.0-dev-20240428102406 → 1.2.0-dev-20240428212206

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.
@@ -4,6 +4,7 @@ declare const isNumber: (value: any) => value is number;
4
4
  declare const isNotNumber: (value: any) => boolean;
5
5
  declare const isNumeric: (value: any) => boolean;
6
6
  declare const isString: (value: any) => value is string;
7
+ declare const isBoolean: (value: any) => value is boolean;
7
8
  declare const isUndefined: (value: any) => value is undefined;
8
9
  declare const isNull: (value: any) => value is null;
9
10
  declare const isObject: <T extends Dict>(value: any) => value is T;
@@ -13,4 +14,4 @@ declare const isFunction: <T extends Function = Function>(value: any) => value i
13
14
  declare const isUnit: (value: any) => boolean;
14
15
  declare const cast: <T>(value: any) => T;
15
16
 
16
- export { cast, isArray, isEmpty, isFunction, isNotNumber, isNull, isNumber, isNumeric, isObject, isString, isUndefined, isUnit };
17
+ export { cast, isArray, isBoolean, isEmpty, isFunction, isNotNumber, isNull, isNumber, isNumeric, isObject, isString, isUndefined, isUnit };
@@ -4,6 +4,7 @@ declare const isNumber: (value: any) => value is number;
4
4
  declare const isNotNumber: (value: any) => boolean;
5
5
  declare const isNumeric: (value: any) => boolean;
6
6
  declare const isString: (value: any) => value is string;
7
+ declare const isBoolean: (value: any) => value is boolean;
7
8
  declare const isUndefined: (value: any) => value is undefined;
8
9
  declare const isNull: (value: any) => value is null;
9
10
  declare const isObject: <T extends Dict>(value: any) => value is T;
@@ -13,4 +14,4 @@ declare const isFunction: <T extends Function = Function>(value: any) => value i
13
14
  declare const isUnit: (value: any) => boolean;
14
15
  declare const cast: <T>(value: any) => T;
15
16
 
16
- export { cast, isArray, isEmpty, isFunction, isNotNumber, isNull, isNumber, isNumeric, isObject, isString, isUndefined, isUnit };
17
+ export { cast, isArray, isBoolean, isEmpty, isFunction, isNotNumber, isNull, isNumber, isNumeric, isObject, isString, isUndefined, isUnit };
package/dist/assertion.js CHANGED
@@ -22,6 +22,7 @@ var assertion_exports = {};
22
22
  __export(assertion_exports, {
23
23
  cast: () => cast,
24
24
  isArray: () => isArray,
25
+ isBoolean: () => isBoolean,
25
26
  isEmpty: () => isEmpty,
26
27
  isFunction: () => isFunction,
27
28
  isNotNumber: () => isNotNumber,
@@ -38,6 +39,7 @@ var isNumber = (value) => typeof value === "number";
38
39
  var isNotNumber = (value) => typeof value !== "number" || Number.isNaN(value) || !Number.isFinite(value);
39
40
  var isNumeric = (value) => value != null && parseFloat(value.toString()) - parseFloat(value.toString()) + 1 >= 0;
40
41
  var isString = (value) => Object.prototype.toString.call(value) === "[object String]";
42
+ var isBoolean = (value) => typeof value === "boolean";
41
43
  var isUndefined = (value) => typeof value === "undefined" && value === void 0;
42
44
  var isNull = (value) => value === null;
43
45
  var isObject = (value) => value !== null && (typeof value === "object" || typeof value === "function") && !isArray(value);
@@ -50,6 +52,7 @@ var cast = (value) => value;
50
52
  0 && (module.exports = {
51
53
  cast,
52
54
  isArray,
55
+ isBoolean,
53
56
  isEmpty,
54
57
  isFunction,
55
58
  isNotNumber,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/assertion.ts"],"sourcesContent":["import type { Dict } from \".\"\n\nexport const isNumber = (value: any): value is number =>\n typeof value === \"number\"\n\nexport const isNotNumber = (value: any): boolean =>\n typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value)\n\nexport const isNumeric = (value: any): boolean =>\n value != null &&\n parseFloat(value.toString()) - parseFloat(value.toString()) + 1 >= 0\n\nexport const isString = (value: any): value is string =>\n Object.prototype.toString.call(value) === \"[object String]\"\n\nexport const isUndefined = (value: any): value is undefined =>\n typeof value === \"undefined\" && value === undefined\n\nexport const isNull = (value: any): value is null => value === null\n\nexport const isObject = <T extends Dict>(value: any): value is T =>\n value !== null &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n !isArray(value)\n\nexport const isArray = <T extends any[]>(value: any): value is T =>\n Array.isArray(value)\n\nexport const isEmpty = (value: any): boolean =>\n !isArray(value) || !value.length || value.every((v) => v == null)\n\nexport const isFunction = <T extends Function = Function>(\n value: any,\n): value is T => typeof value === \"function\"\n\nexport const isUnit = (value: any): boolean =>\n /[0-9].*[px|rem|em|%|vw|vh]$/.test(value)\n\nexport const cast = <T>(value: any) => value as T\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,IAAM,WAAW,CAAC,UACvB,OAAO,UAAU;AAEZ,IAAM,cAAc,CAAC,UAC1B,OAAO,UAAU,YAAY,OAAO,MAAM,KAAK,KAAK,CAAC,OAAO,SAAS,KAAK;AAErE,IAAM,YAAY,CAAC,UACxB,SAAS,QACT,WAAW,MAAM,SAAS,CAAC,IAAI,WAAW,MAAM,SAAS,CAAC,IAAI,KAAK;AAE9D,IAAM,WAAW,CAAC,UACvB,OAAO,UAAU,SAAS,KAAK,KAAK,MAAM;AAErC,IAAM,cAAc,CAAC,UAC1B,OAAO,UAAU,eAAe,UAAU;AAErC,IAAM,SAAS,CAAC,UAA8B,UAAU;AAExD,IAAM,WAAW,CAAiB,UACvC,UAAU,SACT,OAAO,UAAU,YAAY,OAAO,UAAU,eAC/C,CAAC,QAAQ,KAAK;AAET,IAAM,UAAU,CAAkB,UACvC,MAAM,QAAQ,KAAK;AAEd,IAAM,UAAU,CAAC,UACtB,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM,UAAU,MAAM,MAAM,CAAC,MAAM,KAAK,IAAI;AAE3D,IAAM,aAAa,CACxB,UACe,OAAO,UAAU;AAE3B,IAAM,SAAS,CAAC,UACrB,8BAA8B,KAAK,KAAK;AAEnC,IAAM,OAAO,CAAI,UAAe;","names":[]}
1
+ {"version":3,"sources":["../src/assertion.ts"],"sourcesContent":["import type { Dict } from \".\"\n\nexport const isNumber = (value: any): value is number =>\n typeof value === \"number\"\n\nexport const isNotNumber = (value: any): boolean =>\n typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value)\n\nexport const isNumeric = (value: any): boolean =>\n value != null &&\n parseFloat(value.toString()) - parseFloat(value.toString()) + 1 >= 0\n\nexport const isString = (value: any): value is string =>\n Object.prototype.toString.call(value) === \"[object String]\"\n\nexport const isBoolean = (value: any): value is boolean =>\n typeof value === \"boolean\"\n\nexport const isUndefined = (value: any): value is undefined =>\n typeof value === \"undefined\" && value === undefined\n\nexport const isNull = (value: any): value is null => value === null\n\nexport const isObject = <T extends Dict>(value: any): value is T =>\n value !== null &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n !isArray(value)\n\nexport const isArray = <T extends any[]>(value: any): value is T =>\n Array.isArray(value)\n\nexport const isEmpty = (value: any): boolean =>\n !isArray(value) || !value.length || value.every((v) => v == null)\n\nexport const isFunction = <T extends Function = Function>(\n value: any,\n): value is T => typeof value === \"function\"\n\nexport const isUnit = (value: any): boolean =>\n /[0-9].*[px|rem|em|%|vw|vh]$/.test(value)\n\nexport const cast = <T>(value: any) => value as T\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,IAAM,WAAW,CAAC,UACvB,OAAO,UAAU;AAEZ,IAAM,cAAc,CAAC,UAC1B,OAAO,UAAU,YAAY,OAAO,MAAM,KAAK,KAAK,CAAC,OAAO,SAAS,KAAK;AAErE,IAAM,YAAY,CAAC,UACxB,SAAS,QACT,WAAW,MAAM,SAAS,CAAC,IAAI,WAAW,MAAM,SAAS,CAAC,IAAI,KAAK;AAE9D,IAAM,WAAW,CAAC,UACvB,OAAO,UAAU,SAAS,KAAK,KAAK,MAAM;AAErC,IAAM,YAAY,CAAC,UACxB,OAAO,UAAU;AAEZ,IAAM,cAAc,CAAC,UAC1B,OAAO,UAAU,eAAe,UAAU;AAErC,IAAM,SAAS,CAAC,UAA8B,UAAU;AAExD,IAAM,WAAW,CAAiB,UACvC,UAAU,SACT,OAAO,UAAU,YAAY,OAAO,UAAU,eAC/C,CAAC,QAAQ,KAAK;AAET,IAAM,UAAU,CAAkB,UACvC,MAAM,QAAQ,KAAK;AAEd,IAAM,UAAU,CAAC,UACtB,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM,UAAU,MAAM,MAAM,CAAC,MAAM,KAAK,IAAI;AAE3D,IAAM,aAAa,CACxB,UACe,OAAO,UAAU;AAE3B,IAAM,SAAS,CAAC,UACrB,8BAA8B,KAAK,KAAK;AAEnC,IAAM,OAAO,CAAI,UAAe;","names":[]}
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  cast,
3
3
  isArray,
4
+ isBoolean,
4
5
  isEmpty,
5
6
  isFunction,
6
7
  isNotNumber,
@@ -11,10 +12,11 @@ import {
11
12
  isString,
12
13
  isUndefined,
13
14
  isUnit
14
- } from "./chunk-6DMBHPNQ.mjs";
15
+ } from "./chunk-P5JCSYB3.mjs";
15
16
  export {
16
17
  cast,
17
18
  isArray,
19
+ isBoolean,
18
20
  isEmpty,
19
21
  isFunction,
20
22
  isNotNumber,
@@ -3,6 +3,7 @@ var isNumber = (value) => typeof value === "number";
3
3
  var isNotNumber = (value) => typeof value !== "number" || Number.isNaN(value) || !Number.isFinite(value);
4
4
  var isNumeric = (value) => value != null && parseFloat(value.toString()) - parseFloat(value.toString()) + 1 >= 0;
5
5
  var isString = (value) => Object.prototype.toString.call(value) === "[object String]";
6
+ var isBoolean = (value) => typeof value === "boolean";
6
7
  var isUndefined = (value) => typeof value === "undefined" && value === void 0;
7
8
  var isNull = (value) => value === null;
8
9
  var isObject = (value) => value !== null && (typeof value === "object" || typeof value === "function") && !isArray(value);
@@ -17,6 +18,7 @@ export {
17
18
  isNotNumber,
18
19
  isNumeric,
19
20
  isString,
21
+ isBoolean,
20
22
  isUndefined,
21
23
  isNull,
22
24
  isObject,
@@ -26,4 +28,4 @@ export {
26
28
  isUnit,
27
29
  cast
28
30
  };
29
- //# sourceMappingURL=chunk-6DMBHPNQ.mjs.map
31
+ //# sourceMappingURL=chunk-P5JCSYB3.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/assertion.ts"],"sourcesContent":["import type { Dict } from \".\"\n\nexport const isNumber = (value: any): value is number =>\n typeof value === \"number\"\n\nexport const isNotNumber = (value: any): boolean =>\n typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value)\n\nexport const isNumeric = (value: any): boolean =>\n value != null &&\n parseFloat(value.toString()) - parseFloat(value.toString()) + 1 >= 0\n\nexport const isString = (value: any): value is string =>\n Object.prototype.toString.call(value) === \"[object String]\"\n\nexport const isBoolean = (value: any): value is boolean =>\n typeof value === \"boolean\"\n\nexport const isUndefined = (value: any): value is undefined =>\n typeof value === \"undefined\" && value === undefined\n\nexport const isNull = (value: any): value is null => value === null\n\nexport const isObject = <T extends Dict>(value: any): value is T =>\n value !== null &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n !isArray(value)\n\nexport const isArray = <T extends any[]>(value: any): value is T =>\n Array.isArray(value)\n\nexport const isEmpty = (value: any): boolean =>\n !isArray(value) || !value.length || value.every((v) => v == null)\n\nexport const isFunction = <T extends Function = Function>(\n value: any,\n): value is T => typeof value === \"function\"\n\nexport const isUnit = (value: any): boolean =>\n /[0-9].*[px|rem|em|%|vw|vh]$/.test(value)\n\nexport const cast = <T>(value: any) => value as T\n"],"mappings":";AAEO,IAAM,WAAW,CAAC,UACvB,OAAO,UAAU;AAEZ,IAAM,cAAc,CAAC,UAC1B,OAAO,UAAU,YAAY,OAAO,MAAM,KAAK,KAAK,CAAC,OAAO,SAAS,KAAK;AAErE,IAAM,YAAY,CAAC,UACxB,SAAS,QACT,WAAW,MAAM,SAAS,CAAC,IAAI,WAAW,MAAM,SAAS,CAAC,IAAI,KAAK;AAE9D,IAAM,WAAW,CAAC,UACvB,OAAO,UAAU,SAAS,KAAK,KAAK,MAAM;AAErC,IAAM,YAAY,CAAC,UACxB,OAAO,UAAU;AAEZ,IAAM,cAAc,CAAC,UAC1B,OAAO,UAAU,eAAe,UAAU;AAErC,IAAM,SAAS,CAAC,UAA8B,UAAU;AAExD,IAAM,WAAW,CAAiB,UACvC,UAAU,SACT,OAAO,UAAU,YAAY,OAAO,UAAU,eAC/C,CAAC,QAAQ,KAAK;AAET,IAAM,UAAU,CAAkB,UACvC,MAAM,QAAQ,KAAK;AAEd,IAAM,UAAU,CAAC,UACtB,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM,UAAU,MAAM,MAAM,CAAC,MAAM,KAAK,IAAI;AAE3D,IAAM,aAAa,CACxB,UACe,OAAO,UAAU;AAE3B,IAAM,SAAS,CAAC,UACrB,8BAA8B,KAAK,KAAK;AAEnC,IAAM,OAAO,CAAI,UAAe;","names":[]}
@@ -5,7 +5,7 @@ import {
5
5
  isObject,
6
6
  isString,
7
7
  isUndefined
8
- } from "./chunk-6DMBHPNQ.mjs";
8
+ } from "./chunk-P5JCSYB3.mjs";
9
9
 
10
10
  // src/function.ts
11
11
  var noop = () => {
@@ -808,4 +808,4 @@ export {
808
808
  hsvTo,
809
809
  sameColor
810
810
  };
811
- //# sourceMappingURL=chunk-QDA3QFNA.mjs.map
811
+ //# sourceMappingURL=chunk-YI55JNAD.mjs.map
package/dist/color.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/color.ts","../src/assertion.ts","../src/object.ts"],"sourcesContent":["import * as c from \"color2k\"\nimport type { Dict } from \".\"\nimport { getMemoizedObject as get, isArray, isNumber } from \".\"\n\ntype ColorMode = \"light\" | \"dark\"\n\nexport type ColorFormat = \"hex\" | \"hexa\" | \"rgba\" | \"rgb\" | \"hsl\" | \"hsla\"\n\nexport const tones = [\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 = \"#000000\") =>\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 c.toHex(String(colorMode !== \"dark\" ? hex[0] : hex[1]))\n } else {\n return c.toHex(String(hex))\n }\n } catch {\n try {\n return c.toHex(fallback)\n } catch {\n return \"#000000\"\n }\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 c.toHex(c.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 c.toHex(c.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 c.toHex(c.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 c.toHex(c.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 c.transparentize(raw, 1 - alpha)\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] = c.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\nexport const convertColor =\n (color: string, fallback?: string) =>\n (format: ColorFormat): string | undefined => {\n try {\n const isAlpha = format.endsWith(\"a\")\n\n if (/^[0-9a-fA-F]{6}$/.test(color)) color = \"#\" + color\n\n if (format.startsWith(\"hex\")) {\n let hexa = c.toHex(color)\n\n if (isAlpha) {\n if (hexa.length === 7) hexa += \"ff\"\n } else {\n hexa = hexa.replace(/(?<=^#([0-9a-fA-F]{6}))[0-9a-fA-F]{2}$/, \"\")\n }\n\n return hexa\n } else if (format.startsWith(\"hsl\")) {\n let hsla = c.toHsla(color)\n\n if (!isAlpha) {\n hsla = hsla.replace(/hsla/, \"hsl\")\n hsla = hsla.replace(/,\\s*\\d+(\\.\\d+)?\\)$/, \")\")\n }\n\n return hsla\n } else {\n let rgba = c.toRgba(color)\n\n if (!isAlpha) {\n rgba = rgba.replace(/rgba/, \"rgb\")\n rgba = rgba.replace(/,\\s*\\d+(\\.\\d+)?\\)$/, \")\")\n }\n\n return rgba\n }\n } catch {\n if (fallback) return convertColor(fallback)(format)\n }\n }\n\nexport const calcFormat = (color: string): ColorFormat => {\n if (color.startsWith(\"hsl\")) {\n return color.startsWith(\"hsla\") ? \"hsla\" : \"hsl\"\n } else if (color.startsWith(\"rgb\")) {\n return color.startsWith(\"rgba\") ? \"rgba\" : \"rgb\"\n } else {\n return color.length === 9 ? \"hexa\" : \"hex\"\n }\n}\n\nexport const getAlpha = (color: string) => c.parseToRgba(color)[3]\n\nexport const alphaToHex = (a: number) => {\n if (0 > a) a = 0\n if (1 < a) a = 1\n\n return Math.round(a * 255)\n .toString(16)\n .padStart(2, \"0\")\n}\n\nexport const parseToRgba = (color: string, fallback?: string) => {\n try {\n if (/^[0-9a-fA-F]{6}$/.test(color)) color = \"#\" + color\n\n return c.parseToRgba(color)\n } catch {\n if (fallback) return c.parseToRgba(fallback)\n }\n}\n\nexport const parseToHsla = (color: string, fallback?: string) => {\n try {\n if (/^[0-9a-fA-F]{6}$/.test(color)) color = \"#\" + color\n\n return c.parseToHsla(color)\n } catch {\n if (fallback) return c.parseToHsla(fallback)\n }\n}\n\nexport const parseToHsv = (\n color: string,\n fallback?: string,\n): [number, number, number, number] => {\n let [r, g, b, a] = parseToRgba(color, fallback) ?? [255, 255, 255, 1]\n\n r = r / 255\n g = g / 255\n b = b / 255\n\n const [min, max] = [Math.min(r, g, b), Math.max(r, g, b)]\n const delta = max - min\n\n let [h, v, s] = [0, max, max == 0 ? 0 : delta / max]\n\n switch (min) {\n case max:\n h = 0\n break\n\n case r:\n h = 60 * ((b - g) / delta) + 180\n break\n\n case g:\n h = 60 * ((r - b) / delta) + 300\n break\n\n case b:\n h = 60 * ((g - r) / delta) + 60\n break\n }\n\n return [h, s, v, a]\n}\n\nexport const rgbaTo =\n ([r, g, b, a]: [number, number, number, number], fallback?: string) =>\n (format: ColorFormat = \"hex\") =>\n convertColor(c.rgba(r, g, b, a), fallback)(format)\n\nexport const hslaTo =\n ([h, s, l, a]: [number, number, number, number], fallback?: string) =>\n (format: ColorFormat = \"hex\") =>\n convertColor(c.hsla(h, s, l, a), fallback)(format)\n\nexport const hsvTo =\n ([h, s, v, a]: [number, number, number, number?], fallback?: string) =>\n (format: ColorFormat = \"hex\"): string | undefined => {\n h = h / 60\n\n let rgb: [number, number, number] = [v, v, v]\n\n let i = Math.floor(h)\n let f = h - i\n let p = v * (1 - s)\n let q = v * (1 - s * f)\n let t = v * (1 - s * (1 - f))\n\n switch (i) {\n case 0:\n case 6:\n rgb = [v, t, p]\n break\n\n case 1:\n rgb = [q, v, p]\n break\n\n case 2:\n rgb = [p, v, t]\n break\n\n case 3:\n rgb = [p, q, v]\n break\n\n case 4:\n rgb = [t, p, v]\n break\n\n case 5:\n rgb = [v, p, q]\n break\n }\n\n let color = `rgb(${rgb.map((v) => Math.round(v * 255)).join(\", \")})`\n\n if (isNumber(a)) color = color.replace(/\\)$/, `, ${a})`)\n\n return convertColor(color, fallback)(format)\n }\n\nexport const sameColor = (\n color: string | undefined,\n comparison: string | undefined,\n) => {\n if (!color) return false\n if (!comparison) return false\n\n const a = parseToRgba(color) ?? []\n const b = parseToRgba(comparison) ?? []\n\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3]\n}\n","import type { Dict } from \".\"\n\nexport const isNumber = (value: any): value is number =>\n typeof value === \"number\"\n\nexport const isNotNumber = (value: any): boolean =>\n typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value)\n\nexport const isNumeric = (value: any): boolean =>\n value != null &&\n parseFloat(value.toString()) - parseFloat(value.toString()) + 1 >= 0\n\nexport const isString = (value: any): value is string =>\n Object.prototype.toString.call(value) === \"[object String]\"\n\nexport const isUndefined = (value: any): value is undefined =>\n typeof value === \"undefined\" && value === undefined\n\nexport const isNull = (value: any): value is null => value === null\n\nexport const isObject = <T extends Dict>(value: any): value is T =>\n value !== null &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n !isArray(value)\n\nexport const isArray = <T extends any[]>(value: any): value is T =>\n Array.isArray(value)\n\nexport const isEmpty = (value: any): boolean =>\n !isArray(value) || !value.length || value.every((v) => v == null)\n\nexport const isFunction = <T extends Function = Function>(\n value: any,\n): value is T => typeof value === \"function\"\n\nexport const isUnit = (value: any): boolean =>\n /[0-9].*[px|rem|em|%|vw|vh]$/.test(value)\n\nexport const cast = <T>(value: any) => value as T\n","import type { Dict, Union } from \".\"\nimport { isObject, isArray, isFunction, isString } from \".\"\n\nconst omitObjectHelper = <T extends Dict, K extends keyof T>(\n obj: T,\n path: Union<K>[],\n): any => {\n if (!path.length) return obj\n\n const [primaryKey, ...restKeys] = path\n\n if (restKeys.length === 0 && primaryKey in obj) {\n const { [primaryKey]: _, ...rest } = obj\n\n return rest\n }\n\n if (obj[primaryKey] && isObject(obj[primaryKey])) {\n return {\n ...obj,\n [primaryKey]: omitObjectHelper(obj[primaryKey], restKeys),\n }\n }\n\n return obj\n}\n\nexport const omitObject = <\n Y extends Dict,\n M extends keyof Y,\n D extends unknown,\n>(\n obj: Y,\n keys: Union<M>[],\n) => {\n return keys.reduce((prev, key) => {\n const path = (isString(key) ? key.split(\".\") : []) as Union<M>[]\n\n return omitObjectHelper(prev, path)\n }, obj) as unknown as D extends unknown ? Omit<Y, M> : D\n}\n\nexport const pickObject = <\n Y extends Dict,\n M extends keyof Y,\n D extends unknown,\n>(\n obj: Y,\n keys: Union<M>[],\n fallbackValue = \"__fallback\",\n) =>\n keys.reduce((prev, key) => {\n const path = isString(key) ? key.split(\".\") : []\n\n if (!path.length) return prev\n\n const value = getMemoizedObject(obj, key as string, fallbackValue)\n\n if (value === fallbackValue) return prev\n\n prev = merge(\n prev,\n path.reduceRight(\n (prev, key) => ({ [key]: key === path.at(-1) ? value : prev }),\n {},\n ),\n )\n\n return prev\n }, {}) as D extends unknown ? { [H in M]: Y[H] } : D\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: any = 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":["parseToHsla","parseToRgba","isDark","hsla","rgba","parseToRgba","parseToHsla","v"]}
1
+ {"version":3,"sources":["../src/color.ts","../src/assertion.ts","../src/object.ts"],"sourcesContent":["import * as c from \"color2k\"\nimport type { Dict } from \".\"\nimport { getMemoizedObject as get, isArray, isNumber } from \".\"\n\ntype ColorMode = \"light\" | \"dark\"\n\nexport type ColorFormat = \"hex\" | \"hexa\" | \"rgba\" | \"rgb\" | \"hsl\" | \"hsla\"\n\nexport const tones = [\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 = \"#000000\") =>\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 c.toHex(String(colorMode !== \"dark\" ? hex[0] : hex[1]))\n } else {\n return c.toHex(String(hex))\n }\n } catch {\n try {\n return c.toHex(fallback)\n } catch {\n return \"#000000\"\n }\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 c.toHex(c.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 c.toHex(c.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 c.toHex(c.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 c.toHex(c.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 c.transparentize(raw, 1 - alpha)\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] = c.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\nexport const convertColor =\n (color: string, fallback?: string) =>\n (format: ColorFormat): string | undefined => {\n try {\n const isAlpha = format.endsWith(\"a\")\n\n if (/^[0-9a-fA-F]{6}$/.test(color)) color = \"#\" + color\n\n if (format.startsWith(\"hex\")) {\n let hexa = c.toHex(color)\n\n if (isAlpha) {\n if (hexa.length === 7) hexa += \"ff\"\n } else {\n hexa = hexa.replace(/(?<=^#([0-9a-fA-F]{6}))[0-9a-fA-F]{2}$/, \"\")\n }\n\n return hexa\n } else if (format.startsWith(\"hsl\")) {\n let hsla = c.toHsla(color)\n\n if (!isAlpha) {\n hsla = hsla.replace(/hsla/, \"hsl\")\n hsla = hsla.replace(/,\\s*\\d+(\\.\\d+)?\\)$/, \")\")\n }\n\n return hsla\n } else {\n let rgba = c.toRgba(color)\n\n if (!isAlpha) {\n rgba = rgba.replace(/rgba/, \"rgb\")\n rgba = rgba.replace(/,\\s*\\d+(\\.\\d+)?\\)$/, \")\")\n }\n\n return rgba\n }\n } catch {\n if (fallback) return convertColor(fallback)(format)\n }\n }\n\nexport const calcFormat = (color: string): ColorFormat => {\n if (color.startsWith(\"hsl\")) {\n return color.startsWith(\"hsla\") ? \"hsla\" : \"hsl\"\n } else if (color.startsWith(\"rgb\")) {\n return color.startsWith(\"rgba\") ? \"rgba\" : \"rgb\"\n } else {\n return color.length === 9 ? \"hexa\" : \"hex\"\n }\n}\n\nexport const getAlpha = (color: string) => c.parseToRgba(color)[3]\n\nexport const alphaToHex = (a: number) => {\n if (0 > a) a = 0\n if (1 < a) a = 1\n\n return Math.round(a * 255)\n .toString(16)\n .padStart(2, \"0\")\n}\n\nexport const parseToRgba = (color: string, fallback?: string) => {\n try {\n if (/^[0-9a-fA-F]{6}$/.test(color)) color = \"#\" + color\n\n return c.parseToRgba(color)\n } catch {\n if (fallback) return c.parseToRgba(fallback)\n }\n}\n\nexport const parseToHsla = (color: string, fallback?: string) => {\n try {\n if (/^[0-9a-fA-F]{6}$/.test(color)) color = \"#\" + color\n\n return c.parseToHsla(color)\n } catch {\n if (fallback) return c.parseToHsla(fallback)\n }\n}\n\nexport const parseToHsv = (\n color: string,\n fallback?: string,\n): [number, number, number, number] => {\n let [r, g, b, a] = parseToRgba(color, fallback) ?? [255, 255, 255, 1]\n\n r = r / 255\n g = g / 255\n b = b / 255\n\n const [min, max] = [Math.min(r, g, b), Math.max(r, g, b)]\n const delta = max - min\n\n let [h, v, s] = [0, max, max == 0 ? 0 : delta / max]\n\n switch (min) {\n case max:\n h = 0\n break\n\n case r:\n h = 60 * ((b - g) / delta) + 180\n break\n\n case g:\n h = 60 * ((r - b) / delta) + 300\n break\n\n case b:\n h = 60 * ((g - r) / delta) + 60\n break\n }\n\n return [h, s, v, a]\n}\n\nexport const rgbaTo =\n ([r, g, b, a]: [number, number, number, number], fallback?: string) =>\n (format: ColorFormat = \"hex\") =>\n convertColor(c.rgba(r, g, b, a), fallback)(format)\n\nexport const hslaTo =\n ([h, s, l, a]: [number, number, number, number], fallback?: string) =>\n (format: ColorFormat = \"hex\") =>\n convertColor(c.hsla(h, s, l, a), fallback)(format)\n\nexport const hsvTo =\n ([h, s, v, a]: [number, number, number, number?], fallback?: string) =>\n (format: ColorFormat = \"hex\"): string | undefined => {\n h = h / 60\n\n let rgb: [number, number, number] = [v, v, v]\n\n let i = Math.floor(h)\n let f = h - i\n let p = v * (1 - s)\n let q = v * (1 - s * f)\n let t = v * (1 - s * (1 - f))\n\n switch (i) {\n case 0:\n case 6:\n rgb = [v, t, p]\n break\n\n case 1:\n rgb = [q, v, p]\n break\n\n case 2:\n rgb = [p, v, t]\n break\n\n case 3:\n rgb = [p, q, v]\n break\n\n case 4:\n rgb = [t, p, v]\n break\n\n case 5:\n rgb = [v, p, q]\n break\n }\n\n let color = `rgb(${rgb.map((v) => Math.round(v * 255)).join(\", \")})`\n\n if (isNumber(a)) color = color.replace(/\\)$/, `, ${a})`)\n\n return convertColor(color, fallback)(format)\n }\n\nexport const sameColor = (\n color: string | undefined,\n comparison: string | undefined,\n) => {\n if (!color) return false\n if (!comparison) return false\n\n const a = parseToRgba(color) ?? []\n const b = parseToRgba(comparison) ?? []\n\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3]\n}\n","import type { Dict } from \".\"\n\nexport const isNumber = (value: any): value is number =>\n typeof value === \"number\"\n\nexport const isNotNumber = (value: any): boolean =>\n typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value)\n\nexport const isNumeric = (value: any): boolean =>\n value != null &&\n parseFloat(value.toString()) - parseFloat(value.toString()) + 1 >= 0\n\nexport const isString = (value: any): value is string =>\n Object.prototype.toString.call(value) === \"[object String]\"\n\nexport const isBoolean = (value: any): value is boolean =>\n typeof value === \"boolean\"\n\nexport const isUndefined = (value: any): value is undefined =>\n typeof value === \"undefined\" && value === undefined\n\nexport const isNull = (value: any): value is null => value === null\n\nexport const isObject = <T extends Dict>(value: any): value is T =>\n value !== null &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n !isArray(value)\n\nexport const isArray = <T extends any[]>(value: any): value is T =>\n Array.isArray(value)\n\nexport const isEmpty = (value: any): boolean =>\n !isArray(value) || !value.length || value.every((v) => v == null)\n\nexport const isFunction = <T extends Function = Function>(\n value: any,\n): value is T => typeof value === \"function\"\n\nexport const isUnit = (value: any): boolean =>\n /[0-9].*[px|rem|em|%|vw|vh]$/.test(value)\n\nexport const cast = <T>(value: any) => value as T\n","import type { Dict, Union } from \".\"\nimport { isObject, isArray, isFunction, isString } from \".\"\n\nconst omitObjectHelper = <T extends Dict, K extends keyof T>(\n obj: T,\n path: Union<K>[],\n): any => {\n if (!path.length) return obj\n\n const [primaryKey, ...restKeys] = path\n\n if (restKeys.length === 0 && primaryKey in obj) {\n const { [primaryKey]: _, ...rest } = obj\n\n return rest\n }\n\n if (obj[primaryKey] && isObject(obj[primaryKey])) {\n return {\n ...obj,\n [primaryKey]: omitObjectHelper(obj[primaryKey], restKeys),\n }\n }\n\n return obj\n}\n\nexport const omitObject = <\n Y extends Dict,\n M extends keyof Y,\n D extends unknown,\n>(\n obj: Y,\n keys: Union<M>[],\n) => {\n return keys.reduce((prev, key) => {\n const path = (isString(key) ? key.split(\".\") : []) as Union<M>[]\n\n return omitObjectHelper(prev, path)\n }, obj) as unknown as D extends unknown ? Omit<Y, M> : D\n}\n\nexport const pickObject = <\n Y extends Dict,\n M extends keyof Y,\n D extends unknown,\n>(\n obj: Y,\n keys: Union<M>[],\n fallbackValue = \"__fallback\",\n) =>\n keys.reduce((prev, key) => {\n const path = isString(key) ? key.split(\".\") : []\n\n if (!path.length) return prev\n\n const value = getMemoizedObject(obj, key as string, fallbackValue)\n\n if (value === fallbackValue) return prev\n\n prev = merge(\n prev,\n path.reduceRight(\n (prev, key) => ({ [key]: key === path.at(-1) ? value : prev }),\n {},\n ),\n )\n\n return prev\n }, {}) as D extends unknown ? { [H in M]: Y[H] } : D\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: any = 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":["parseToHsla","parseToRgba","isDark","hsla","rgba","parseToRgba","parseToHsla","v"]}
package/dist/color.mjs CHANGED
@@ -23,13 +23,13 @@ import {
23
23
  tintColor,
24
24
  tones,
25
25
  transparentizeColor
26
- } from "./chunk-QDA3QFNA.mjs";
26
+ } from "./chunk-YI55JNAD.mjs";
27
27
  import "./chunk-RSDBT4DI.mjs";
28
28
  import "./chunk-5OUUTZYQ.mjs";
29
29
  import "./chunk-P52P4NMT.mjs";
30
30
  import "./chunk-L76GM3GN.mjs";
31
31
  import "./chunk-WV6P7ZCI.mjs";
32
- import "./chunk-6DMBHPNQ.mjs";
32
+ import "./chunk-P5JCSYB3.mjs";
33
33
  import "./chunk-L56KWSQO.mjs";
34
34
  import "./chunk-A74F6ICI.mjs";
35
35
  export {
package/dist/dom.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/dom.ts","../src/assertion.ts"],"sourcesContent":["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/i)\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 const computedFontSize = parseFloat(style.fontSize)\n\n if (!isNaN(computedFontSize)) fontSize = computedFontSize\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 type { Dict } from \".\"\n\nexport const isNumber = (value: any): value is number =>\n typeof value === \"number\"\n\nexport const isNotNumber = (value: any): boolean =>\n typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value)\n\nexport const isNumeric = (value: any): boolean =>\n value != null &&\n parseFloat(value.toString()) - parseFloat(value.toString()) + 1 >= 0\n\nexport const isString = (value: any): value is string =>\n Object.prototype.toString.call(value) === \"[object String]\"\n\nexport const isUndefined = (value: any): value is undefined =>\n typeof value === \"undefined\" && value === undefined\n\nexport const isNull = (value: any): value is null => value === null\n\nexport const isObject = <T extends Dict>(value: any): value is T =>\n value !== null &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n !isArray(value)\n\nexport const isArray = <T extends any[]>(value: any): value is T =>\n Array.isArray(value)\n\nexport const isEmpty = (value: any): boolean =>\n !isArray(value) || !value.length || value.every((v) => v == null)\n\nexport const isFunction = <T extends Function = Function>(\n value: any,\n): value is T => typeof value === \"function\"\n\nexport const isUnit = (value: any): boolean =>\n /[0-9].*[px|rem|em|%|vw|vh]$/.test(value)\n\nexport const cast = <T>(value: any) => value as T\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/dom.ts","../src/assertion.ts"],"sourcesContent":["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/i)\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 const computedFontSize = parseFloat(style.fontSize)\n\n if (!isNaN(computedFontSize)) fontSize = computedFontSize\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 type { Dict } from \".\"\n\nexport const isNumber = (value: any): value is number =>\n typeof value === \"number\"\n\nexport const isNotNumber = (value: any): boolean =>\n typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value)\n\nexport const isNumeric = (value: any): boolean =>\n value != null &&\n parseFloat(value.toString()) - parseFloat(value.toString()) + 1 >= 0\n\nexport const isString = (value: any): value is string =>\n Object.prototype.toString.call(value) === \"[object String]\"\n\nexport const isBoolean = (value: any): value is boolean =>\n typeof value === \"boolean\"\n\nexport const isUndefined = (value: any): value is undefined =>\n typeof value === \"undefined\" && value === undefined\n\nexport const isNull = (value: any): value is null => value === null\n\nexport const isObject = <T extends Dict>(value: any): value is T =>\n value !== null &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n !isArray(value)\n\nexport const isArray = <T extends any[]>(value: any): value is T =>\n Array.isArray(value)\n\nexport const isEmpty = (value: any): boolean =>\n !isArray(value) || !value.length || value.every((v) => v == null)\n\nexport const isFunction = <T extends Function = Function>(\n value: any,\n): value is T => typeof value === \"function\"\n\nexport const isUnit = (value: any): boolean =>\n /[0-9].*[px|rem|em|%|vw|vh]$/.test(value)\n\nexport const cast = <T>(value: any) => value as T\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEO,IAAM,WAAW,CAAC,UACvB,OAAO,UAAU;AAeZ,IAAM,cAAc,CAAC,UAC1B,OAAO,UAAU,eAAe,UAAU;;;ADhBrC,IAAM,aAAa,MACxB,CAAC,EACC,OAAO,WAAW,eAClB,OAAO,YACP,OAAO,SAAS;AAGb,IAAM,cAAc,MAAW;AAVtC;AAWG,+BAAkB,kBAAlB,mBAAiC,aAAjC,YAA6C,UAAU;AAAA;AAEnD,IAAM,SAAS,CAAC,MACrB,WAAW,KAAK,EAAE,KAAK,UAAU,MAAM;AAClC,IAAM,WAAW,CAAC,MACvB,WAAW,KAAK,EAAE,KAAK,YAAY,CAAC;AAE/B,IAAM,QAAQ,MAAe,SAAS,OAAO;AAC7C,IAAM,UAAU,MAAe,SAAS,uBAAuB;AAC/D,IAAM,WAAW,MAAe,QAAQ,KAAK,OAAO,QAAQ;AAE5D,IAAM,YAAY,CAAC,OACxB,MAAM,QACN,OAAO,MAAM,YACb,cAAc,MACd,GAAG,aAAa,KAAK;AAEhB,IAAM,gBAAgB,CAAC,OAA+B;AA5B7D;AA6BE,MAAI,CAAC,UAAU,EAAE;AAAG,WAAO;AAE3B,QAAM,OAAM,QAAG,cAAc,gBAAjB,YAAgC;AAE5C,SAAO,cAAc,IAAI;AAC3B;AAEO,IAAM,WAAW,CAAC,OAA6B;AACpD,MAAI,GAAG,iBAAiB,SAAS,GAAG,aAAa;AAAG,WAAO;AAE3D,SAAO,GAAG;AACZ;AAEO,IAAM,aAAa,CAAC,OACzB,QAAQ,GAAG,aAAa,UAAU,CAAC,MAAM,QACzC,QAAQ,GAAG,aAAa,eAAe,CAAC,MAAM,QAC9C,QAAQ,GAAG,aAAa,eAAe,CAAC,MAAM;AAEhD,IAAM,YAAY,CAAC,OAAoB,GAAG,cAAc,KAAK,GAAG,eAAe;AAExE,IAAM,cAAc,CAAC,OAC1B,GAAG,aAAa,UAAU;AAErB,IAAM,oBAAoB,CAAC,OAA6B;AAC7D,QAAM,QAAQ,GAAG,aAAa,iBAAiB;AAE/C,SAAO,UAAU,WAAW,SAAS;AACvC;AAEO,IAAM,aAAa,CACxB,QACA,UACwB;AACxB,SAAO,WAAW,UAAS,iCAAQ,SAAS;AAC9C;AAEO,IAAM,QAAQ,CAAC,UAA+C;AACnE,MAAI,SAAS,KAAK;AAAG,WAAO;AAE5B,MAAI,YAAY,KAAK;AAAG,WAAO;AAE/B,MAAI,MAAM,SAAS,IAAI;AAAG,WAAO,WAAW,KAAK;AAEjD,QAAM,YAAY,WAAW;AAC7B,MAAI,WAAW;AAEf,MAAI,WAAW;AACb,UAAM,QAAQ,OAAO,iBAAiB,SAAS,eAAe;AAE9D,UAAM,mBAAmB,WAAW,MAAM,QAAQ;AAElD,QAAI,CAAC,MAAM,gBAAgB;AAAG,iBAAW;AAAA,EAC3C;AAEA,SAAO,WAAW,KAAK,IAAI;AAC7B;AAEO,IAAM,wBAAwB,CACnC,OACA;AAxFF;AAyFG,kBAAG,kBAAH,YACC,GAAG,cAAc,cAAc;AAAA;AAI5B,IAAM,WAAW,CAAC,cACtB,YAAY,KAAK;AAEb,IAAM,WAAW,CACtB,cACyB,YAAY,OAAO;AAM9C,IAAM,kBAAkB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,sBAA8B,gBAAgB,KAAK;AAElD,IAAM,kBAAkB,CAAwB,cAAsB;AAC3E,QAAM,eAAoB,MAAM;AAAA,IAC9B,UAAU,iBAAoB,mBAAmB;AAAA,EACnD;AAEA,eAAa,QAAQ,SAAS;AAE9B,SAAO,aAAa,OAAO,CAAC,OAAO,YAAY,EAAE,KAAK,UAAU,EAAE,CAAC;AACrE;AAEO,IAAM,cAAc,CAAC,OAA6B;AACvD,MAAI,CAAC,cAAc,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,GAAG;AACxD,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,UAAU,IAAI;AACtB,QAAM,gBAAgB,CAAC,SAAS,UAAU,YAAY,QAAQ;AAE9D,MAAI,cAAc,QAAQ,SAAS,KAAK;AAAG,WAAO;AAElD,QAAM,SAAS;AAAA,IACb,GAAG,MAAM,GAAG,aAAa,MAAM;AAAA,IAC/B,OAAO,MAAM,GAAG,aAAa,UAAU;AAAA,IACvC,OAAO,MAAM,GAAG,aAAa,UAAU;AAAA,EACzC;AAEA,MAAI,aAAa;AAAQ,WAAO,OAAO,SAAgC,EAAE;AAEzE,MAAI,kBAAkB,EAAE;AAAG,WAAO;AAElC,SAAO,YAAY,EAAE;AACvB;AAEO,IAAM,sBAAsB,CAAC,OAClC,YAAY,EAAE,KAAK,GAAG,aAAa;AAE9B,IAAM,aAAa,CAAC,OACzB,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,KAAK,CAAC,oBAAoB,EAAE,IAAI;AAEnE,IAAM,iBAAiB,CAC5B,SAC4B;AArK9B;AAqKiC,sCAAiB,IAAI,MAArB,mBAAwB,gBAAxB,YAAuC;AAAA;AAEjE,IAAM,mBAAmB,CAAC,OAC/B,UAAU,EAAE,IAAI,GAAG,gBAAgB;AAE9B,IAAM,mBAAmB,CAAC,OAC/B,iBAAiB,EAAE,EAAE;AAEhB,IAAM,kBAAkB,CAAC,OAAoB;AAClD,SAAO,iBAAiB,EAAE,MAAM;AAClC;","names":[]}
package/dist/dom.mjs CHANGED
@@ -25,13 +25,13 @@ import {
25
25
  isTabbable,
26
26
  platform,
27
27
  vendor
28
- } from "./chunk-QDA3QFNA.mjs";
28
+ } from "./chunk-YI55JNAD.mjs";
29
29
  import "./chunk-RSDBT4DI.mjs";
30
30
  import "./chunk-5OUUTZYQ.mjs";
31
31
  import "./chunk-P52P4NMT.mjs";
32
32
  import "./chunk-L76GM3GN.mjs";
33
33
  import "./chunk-WV6P7ZCI.mjs";
34
- import "./chunk-6DMBHPNQ.mjs";
34
+ import "./chunk-P5JCSYB3.mjs";
35
35
  import "./chunk-L56KWSQO.mjs";
36
36
  import "./chunk-A74F6ICI.mjs";
37
37
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/function.ts","../src/assertion.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, ...args: any[]) => void>(\n ...funcs: (T | undefined)[]\n ) =>\n (\n event: T extends (event: infer R, ...args: any[]) => any ? R : never,\n ...args: T extends (event: any, ...args: infer R) => any ? R : never\n ) => {\n funcs.some((func) => {\n func?.(event, ...args)\n\n return event?.defaultPrevented\n })\n }\n\nexport const funcAll =\n <T extends (...args: any[]) => any>(...funcs: (T | undefined)[]) =>\n (...args: T extends (...args: infer R) => any ? R : never) =>\n funcs.forEach((func) => func?.(...args))\n","import type { Dict } from \".\"\n\nexport const isNumber = (value: any): value is number =>\n typeof value === \"number\"\n\nexport const isNotNumber = (value: any): boolean =>\n typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value)\n\nexport const isNumeric = (value: any): boolean =>\n value != null &&\n parseFloat(value.toString()) - parseFloat(value.toString()) + 1 >= 0\n\nexport const isString = (value: any): value is string =>\n Object.prototype.toString.call(value) === \"[object String]\"\n\nexport const isUndefined = (value: any): value is undefined =>\n typeof value === \"undefined\" && value === undefined\n\nexport const isNull = (value: any): value is null => value === null\n\nexport const isObject = <T extends Dict>(value: any): value is T =>\n value !== null &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n !isArray(value)\n\nexport const isArray = <T extends any[]>(value: any): value is T =>\n Array.isArray(value)\n\nexport const isEmpty = (value: any): boolean =>\n !isArray(value) || !value.length || value.every((v) => v == null)\n\nexport const isFunction = <T extends Function = Function>(\n value: any,\n): value is T => typeof value === \"function\"\n\nexport const isUnit = (value: any): boolean =>\n /[0-9].*[px|rem|em|%|vw|vh]$/.test(value)\n\nexport const cast = <T>(value: any) => value as T\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC+BO,IAAM,aAAa,CACxB,UACe,OAAO,UAAU;;;AD/B3B,IAAM,OAAO,MAAM;AAAC;AAEpB,IAAM,YAAY,CACvB,cACG,SACI,WAAW,SAAS,IAAI,UAAU,GAAG,IAAI,IAAI;AAE/C,IAAM,aACX,IACK,UAEL,CACE,UACG,SACA;AACH,QAAM,KAAK,CAAC,SAAS;AACnB,iCAAO,OAAO,GAAG;AAEjB,WAAO,+BAAO;AAAA,EAChB,CAAC;AACH;AAEK,IAAM,UACX,IAAuC,UACvC,IAAI,SACF,MAAM,QAAQ,CAAC,SAAS,6BAAO,GAAG,KAAK;","names":[]}
1
+ {"version":3,"sources":["../src/function.ts","../src/assertion.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, ...args: any[]) => void>(\n ...funcs: (T | undefined)[]\n ) =>\n (\n event: T extends (event: infer R, ...args: any[]) => any ? R : never,\n ...args: T extends (event: any, ...args: infer R) => any ? R : never\n ) => {\n funcs.some((func) => {\n func?.(event, ...args)\n\n return event?.defaultPrevented\n })\n }\n\nexport const funcAll =\n <T extends (...args: any[]) => any>(...funcs: (T | undefined)[]) =>\n (...args: T extends (...args: infer R) => any ? R : never) =>\n funcs.forEach((func) => func?.(...args))\n","import type { Dict } from \".\"\n\nexport const isNumber = (value: any): value is number =>\n typeof value === \"number\"\n\nexport const isNotNumber = (value: any): boolean =>\n typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value)\n\nexport const isNumeric = (value: any): boolean =>\n value != null &&\n parseFloat(value.toString()) - parseFloat(value.toString()) + 1 >= 0\n\nexport const isString = (value: any): value is string =>\n Object.prototype.toString.call(value) === \"[object String]\"\n\nexport const isBoolean = (value: any): value is boolean =>\n typeof value === \"boolean\"\n\nexport const isUndefined = (value: any): value is undefined =>\n typeof value === \"undefined\" && value === undefined\n\nexport const isNull = (value: any): value is null => value === null\n\nexport const isObject = <T extends Dict>(value: any): value is T =>\n value !== null &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n !isArray(value)\n\nexport const isArray = <T extends any[]>(value: any): value is T =>\n Array.isArray(value)\n\nexport const isEmpty = (value: any): boolean =>\n !isArray(value) || !value.length || value.every((v) => v == null)\n\nexport const isFunction = <T extends Function = Function>(\n value: any,\n): value is T => typeof value === \"function\"\n\nexport const isUnit = (value: any): boolean =>\n /[0-9].*[px|rem|em|%|vw|vh]$/.test(value)\n\nexport const cast = <T>(value: any) => value as T\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACkCO,IAAM,aAAa,CACxB,UACe,OAAO,UAAU;;;ADlC3B,IAAM,OAAO,MAAM;AAAC;AAEpB,IAAM,YAAY,CACvB,cACG,SACI,WAAW,SAAS,IAAI,UAAU,GAAG,IAAI,IAAI;AAE/C,IAAM,aACX,IACK,UAEL,CACE,UACG,SACA;AACH,QAAM,KAAK,CAAC,SAAS;AACnB,iCAAO,OAAO,GAAG;AAEjB,WAAO,+BAAO;AAAA,EAChB,CAAC;AACH;AAEK,IAAM,UACX,IAAuC,UACvC,IAAI,SACF,MAAM,QAAQ,CAAC,SAAS,6BAAO,GAAG,KAAK;","names":[]}
package/dist/function.mjs CHANGED
@@ -3,13 +3,13 @@ import {
3
3
  handlerAll,
4
4
  noop,
5
5
  runIfFunc
6
- } from "./chunk-QDA3QFNA.mjs";
6
+ } from "./chunk-YI55JNAD.mjs";
7
7
  import "./chunk-RSDBT4DI.mjs";
8
8
  import "./chunk-5OUUTZYQ.mjs";
9
9
  import "./chunk-P52P4NMT.mjs";
10
10
  import "./chunk-L76GM3GN.mjs";
11
11
  import "./chunk-WV6P7ZCI.mjs";
12
- import "./chunk-6DMBHPNQ.mjs";
12
+ import "./chunk-P5JCSYB3.mjs";
13
13
  import "./chunk-L56KWSQO.mjs";
14
14
  import "./chunk-A74F6ICI.mjs";
15
15
  export {
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { Dict, Length, Merge, Path, Primitive, StringLiteral, Union } from './index.types.mjs';
2
- export { cast, isArray, isEmpty, isFunction, isNotNumber, isNull, isNumber, isNumeric, isObject, isString, isUndefined, isUnit } from './assertion.mjs';
2
+ export { cast, isArray, isBoolean, isEmpty, isFunction, isNotNumber, isNull, isNumber, isNumeric, isObject, isString, isUndefined, isUnit } from './assertion.mjs';
3
3
  export { assignAfter, filterObject, filterUndefined, flattenObject, getMemoizedObject, getObject, keysFormObject, memoizeObject, merge, objectFromEntries, omitObject, pickObject, replaceObject, splitObject } from './object.mjs';
4
4
  export { funcAll, handlerAll, noop, runIfFunc } from './function.mjs';
5
5
  export { AsyncFnReturn, AsyncState, AsyncStateRetry, DOMAttributes, FunctionReturningPromise, MaybeRenderProp, PromiseType, PropGetter, RequiredPropGetter, UseIsMountedProps, UseIsMountedReturn, assignRef, createContext, createId, cx, findChildren, getValidChildren, includesChildren, isRefObject, isValidElement, mergeRefs, omitChildren, pickChildren, useAsync, useAsyncFunc, useAsyncRetry, useCallbackRef, useIsMounted, useMergeRefs, useSafeLayoutEffect, useUnmountEffect, useUpdateEffect } from './react.mjs';
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { Dict, Length, Merge, Path, Primitive, StringLiteral, Union } from './index.types.js';
2
- export { cast, isArray, isEmpty, isFunction, isNotNumber, isNull, isNumber, isNumeric, isObject, isString, isUndefined, isUnit } from './assertion.js';
2
+ export { cast, isArray, isBoolean, isEmpty, isFunction, isNotNumber, isNull, isNumber, isNumeric, isObject, isString, isUndefined, isUnit } from './assertion.js';
3
3
  export { assignAfter, filterObject, filterUndefined, flattenObject, getMemoizedObject, getObject, keysFormObject, memoizeObject, merge, objectFromEntries, omitObject, pickObject, replaceObject, splitObject } from './object.js';
4
4
  export { funcAll, handlerAll, noop, runIfFunc } from './function.js';
5
5
  export { AsyncFnReturn, AsyncState, AsyncStateRetry, DOMAttributes, FunctionReturningPromise, MaybeRenderProp, PromiseType, PropGetter, RequiredPropGetter, UseIsMountedProps, UseIsMountedReturn, assignRef, createContext, createId, cx, findChildren, getValidChildren, includesChildren, isRefObject, isValidElement, mergeRefs, omitChildren, pickChildren, useAsync, useAsyncFunc, useAsyncRetry, useCallbackRef, useIsMounted, useMergeRefs, useSafeLayoutEffect, useUnmountEffect, useUpdateEffect } from './react.js';
package/dist/index.js CHANGED
@@ -81,6 +81,7 @@ __export(src_exports, {
81
81
  isActiveElement: () => isActiveElement,
82
82
  isApple: () => isApple,
83
83
  isArray: () => isArray,
84
+ isBoolean: () => isBoolean,
84
85
  isContains: () => isContains,
85
86
  isContentEditable: () => isContentEditable,
86
87
  isDark: () => isDark,
@@ -162,6 +163,7 @@ var isNumber = (value) => typeof value === "number";
162
163
  var isNotNumber = (value) => typeof value !== "number" || Number.isNaN(value) || !Number.isFinite(value);
163
164
  var isNumeric = (value) => value != null && parseFloat(value.toString()) - parseFloat(value.toString()) + 1 >= 0;
164
165
  var isString = (value) => Object.prototype.toString.call(value) === "[object String]";
166
+ var isBoolean = (value) => typeof value === "boolean";
165
167
  var isUndefined = (value) => typeof value === "undefined" && value === void 0;
166
168
  var isNull = (value) => value === null;
167
169
  var isObject = (value) => value !== null && (typeof value === "object" || typeof value === "function") && !isArray(value);
@@ -1082,6 +1084,7 @@ var interopDefault = (module2) => module2.default || module2;
1082
1084
  isActiveElement,
1083
1085
  isApple,
1084
1086
  isArray,
1087
+ isBoolean,
1085
1088
  isContains,
1086
1089
  isContentEditable,
1087
1090
  isDark,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/assertion.ts","../src/object.ts","../src/function.ts","../src/react.tsx","../src/dom.ts","../src/string.ts","../src/calc.ts","../src/color.ts","../src/array.ts","../src/number.ts","../src/event.ts","../src/module.ts"],"sourcesContent":["export * from \"./index.types\"\nexport * from \"./assertion\"\nexport * from \"./object\"\nexport * from \"./function\"\nexport * from \"./react\"\nexport * from \"./dom\"\nexport * from \"./string\"\nexport * from \"./calc\"\nexport * from \"./color\"\nexport * from \"./array\"\nexport * from \"./number\"\nexport * from \"./event\"\nexport * from \"./module\"\n","import type { Dict } from \".\"\n\nexport const isNumber = (value: any): value is number =>\n typeof value === \"number\"\n\nexport const isNotNumber = (value: any): boolean =>\n typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value)\n\nexport const isNumeric = (value: any): boolean =>\n value != null &&\n parseFloat(value.toString()) - parseFloat(value.toString()) + 1 >= 0\n\nexport const isString = (value: any): value is string =>\n Object.prototype.toString.call(value) === \"[object String]\"\n\nexport const isUndefined = (value: any): value is undefined =>\n typeof value === \"undefined\" && value === undefined\n\nexport const isNull = (value: any): value is null => value === null\n\nexport const isObject = <T extends Dict>(value: any): value is T =>\n value !== null &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n !isArray(value)\n\nexport const isArray = <T extends any[]>(value: any): value is T =>\n Array.isArray(value)\n\nexport const isEmpty = (value: any): boolean =>\n !isArray(value) || !value.length || value.every((v) => v == null)\n\nexport const isFunction = <T extends Function = Function>(\n value: any,\n): value is T => typeof value === \"function\"\n\nexport const isUnit = (value: any): boolean =>\n /[0-9].*[px|rem|em|%|vw|vh]$/.test(value)\n\nexport const cast = <T>(value: any) => value as T\n","import type { Dict, Union } from \".\"\nimport { isObject, isArray, isFunction, isString } from \".\"\n\nconst omitObjectHelper = <T extends Dict, K extends keyof T>(\n obj: T,\n path: Union<K>[],\n): any => {\n if (!path.length) return obj\n\n const [primaryKey, ...restKeys] = path\n\n if (restKeys.length === 0 && primaryKey in obj) {\n const { [primaryKey]: _, ...rest } = obj\n\n return rest\n }\n\n if (obj[primaryKey] && isObject(obj[primaryKey])) {\n return {\n ...obj,\n [primaryKey]: omitObjectHelper(obj[primaryKey], restKeys),\n }\n }\n\n return obj\n}\n\nexport const omitObject = <\n Y extends Dict,\n M extends keyof Y,\n D extends unknown,\n>(\n obj: Y,\n keys: Union<M>[],\n) => {\n return keys.reduce((prev, key) => {\n const path = (isString(key) ? key.split(\".\") : []) as Union<M>[]\n\n return omitObjectHelper(prev, path)\n }, obj) as unknown as D extends unknown ? Omit<Y, M> : D\n}\n\nexport const pickObject = <\n Y extends Dict,\n M extends keyof Y,\n D extends unknown,\n>(\n obj: Y,\n keys: Union<M>[],\n fallbackValue = \"__fallback\",\n) =>\n keys.reduce((prev, key) => {\n const path = isString(key) ? key.split(\".\") : []\n\n if (!path.length) return prev\n\n const value = getMemoizedObject(obj, key as string, fallbackValue)\n\n if (value === fallbackValue) return prev\n\n prev = merge(\n prev,\n path.reduceRight(\n (prev, key) => ({ [key]: key === path.at(-1) ? value : prev }),\n {},\n ),\n )\n\n return prev\n }, {}) as D extends unknown ? { [H in M]: Y[H] } : D\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: any = 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","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, ...args: any[]) => void>(\n ...funcs: (T | undefined)[]\n ) =>\n (\n event: T extends (event: infer R, ...args: any[]) => any ? R : never,\n ...args: T extends (event: any, ...args: infer R) => any ? R : never\n ) => {\n funcs.some((func) => {\n func?.(event, ...args)\n\n return event?.defaultPrevented\n })\n }\n\nexport const funcAll =\n <T extends (...args: any[]) => any>(...funcs: (T | undefined)[]) =>\n (...args: T extends (...args: infer R) => any ? R : never) =>\n funcs.forEach((func) => func?.(...args))\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<ContextType extends any = any> = {\n strict?: boolean\n errorMessage?: string\n name?: string\n defaultValue?: ContextType\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 defaultValue,\n}: Options<ContextType> = {}) => {\n const Context = React.createContext<ContextType | undefined>(defaultValue)\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: (string | 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: (string | 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: (string | 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: (string | 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> | React.LegacyRef<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>> =\n P extends Promise<infer T> ? T : 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\nlet createIdCounter: number = 0\n\nexport const createId = (prefix: string) =>\n `${prefix}-${++createIdCounter}-${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/i)\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 const computedFontSize = parseFloat(style.fontSize)\n\n if (!isNaN(computedFontSize)) fontSize = computedFontSize\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 type { StringLiteral } from \"./index.types\"\n\nexport const escape = (value: string, replaceValue: string = \"\"): string =>\n value.replace(/\\s+/g, replaceValue)\n\nexport const antonym = (value: string): string => {\n switch (value) {\n case \"top\":\n return \"bottom\"\n\n case \"bottom\":\n return \"top\"\n\n case \"left\":\n return \"right\"\n\n case \"right\":\n return \"left\"\n\n case \"start\":\n return \"end\"\n\n case \"end\":\n return \"start\"\n\n case \"x\":\n return \"y\"\n\n case \"y\":\n return \"x\"\n\n case \"enter\":\n return \"exit\"\n\n case \"exit\":\n return \"enter\"\n\n case \"vertical\":\n return \"horizontal\"\n\n case \"horizontal\":\n return \"vertical\"\n\n case \"up\":\n return \"down\"\n\n case \"down\":\n return \"up\"\n\n case \"block\":\n return \"inline\"\n\n case \"inline\":\n return \"block\"\n\n default:\n return value\n }\n}\n\nexport const toCamelCase = (value: StringLiteral): string =>\n value\n .toLowerCase()\n .replace(/[_-](.)/g, (_, group1) => group1.toUpperCase())\n .replace(/^(.)/, (_, group1) => group1.toUpperCase())\n\nexport const toKebabCase = (value: StringLiteral): string =>\n value\n .replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, \"$1-$2\")\n .toLowerCase()\n .replace(/^-/, \"\")\n","type Operator = \"+\" | \"-\" | \"*\" | \"/\"\n\nexport type Operand = string | number\n\nconst toExpression = (operator: Operator, ...args: Operand[]) =>\n args.join(` ${operator} `).replace(/calc/g, \"\")\n\nconst add = (...args: Operand[]) => `calc(${toExpression(\"+\", ...args)})`\n\nconst subtract = (...args: Operand[]) => `calc(${toExpression(\"-\", ...args)})`\n\nconst multiply = (...args: Operand[]) => `calc(${toExpression(\"*\", ...args)})`\n\nconst divide = (...args: Operand[]) => `calc(${toExpression(\"/\", ...args)})`\n\nconst negate = (value: Operand) => {\n if (value != null && !isNaN(parseFloat(value.toString())))\n return String(value).startsWith(\"-\") ? String(value).slice(1) : `-${value}`\n\n return multiply(value, -1)\n}\n\ntype Calc = {\n add: (...args: Operand[]) => Calc\n subtract: (...args: Operand[]) => Calc\n multiply: (...args: Operand[]) => Calc\n divide: (...args: Operand[]) => Calc\n negate: () => Calc\n toString: () => string\n}\n\nexport const calc = Object.assign(\n (x: Operand): Calc => ({\n add: (...args) => calc(add(x, ...args)),\n subtract: (...args) => calc(subtract(x, ...args)),\n multiply: (...args) => calc(multiply(x, ...args)),\n divide: (...args) => calc(divide(x, ...args)),\n negate: () => calc(negate(x)),\n toString: () => x.toString(),\n }),\n {\n add,\n subtract,\n multiply,\n divide,\n negate,\n },\n)\n","import * as c from \"color2k\"\nimport type { Dict } from \".\"\nimport { getMemoizedObject as get, isArray, isNumber } from \".\"\n\ntype ColorMode = \"light\" | \"dark\"\n\nexport type ColorFormat = \"hex\" | \"hexa\" | \"rgba\" | \"rgb\" | \"hsl\" | \"hsla\"\n\nexport const tones = [\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 = \"#000000\") =>\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 c.toHex(String(colorMode !== \"dark\" ? hex[0] : hex[1]))\n } else {\n return c.toHex(String(hex))\n }\n } catch {\n try {\n return c.toHex(fallback)\n } catch {\n return \"#000000\"\n }\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 c.toHex(c.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 c.toHex(c.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 c.toHex(c.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 c.toHex(c.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 c.transparentize(raw, 1 - alpha)\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] = c.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\nexport const convertColor =\n (color: string, fallback?: string) =>\n (format: ColorFormat): string | undefined => {\n try {\n const isAlpha = format.endsWith(\"a\")\n\n if (/^[0-9a-fA-F]{6}$/.test(color)) color = \"#\" + color\n\n if (format.startsWith(\"hex\")) {\n let hexa = c.toHex(color)\n\n if (isAlpha) {\n if (hexa.length === 7) hexa += \"ff\"\n } else {\n hexa = hexa.replace(/(?<=^#([0-9a-fA-F]{6}))[0-9a-fA-F]{2}$/, \"\")\n }\n\n return hexa\n } else if (format.startsWith(\"hsl\")) {\n let hsla = c.toHsla(color)\n\n if (!isAlpha) {\n hsla = hsla.replace(/hsla/, \"hsl\")\n hsla = hsla.replace(/,\\s*\\d+(\\.\\d+)?\\)$/, \")\")\n }\n\n return hsla\n } else {\n let rgba = c.toRgba(color)\n\n if (!isAlpha) {\n rgba = rgba.replace(/rgba/, \"rgb\")\n rgba = rgba.replace(/,\\s*\\d+(\\.\\d+)?\\)$/, \")\")\n }\n\n return rgba\n }\n } catch {\n if (fallback) return convertColor(fallback)(format)\n }\n }\n\nexport const calcFormat = (color: string): ColorFormat => {\n if (color.startsWith(\"hsl\")) {\n return color.startsWith(\"hsla\") ? \"hsla\" : \"hsl\"\n } else if (color.startsWith(\"rgb\")) {\n return color.startsWith(\"rgba\") ? \"rgba\" : \"rgb\"\n } else {\n return color.length === 9 ? \"hexa\" : \"hex\"\n }\n}\n\nexport const getAlpha = (color: string) => c.parseToRgba(color)[3]\n\nexport const alphaToHex = (a: number) => {\n if (0 > a) a = 0\n if (1 < a) a = 1\n\n return Math.round(a * 255)\n .toString(16)\n .padStart(2, \"0\")\n}\n\nexport const parseToRgba = (color: string, fallback?: string) => {\n try {\n if (/^[0-9a-fA-F]{6}$/.test(color)) color = \"#\" + color\n\n return c.parseToRgba(color)\n } catch {\n if (fallback) return c.parseToRgba(fallback)\n }\n}\n\nexport const parseToHsla = (color: string, fallback?: string) => {\n try {\n if (/^[0-9a-fA-F]{6}$/.test(color)) color = \"#\" + color\n\n return c.parseToHsla(color)\n } catch {\n if (fallback) return c.parseToHsla(fallback)\n }\n}\n\nexport const parseToHsv = (\n color: string,\n fallback?: string,\n): [number, number, number, number] => {\n let [r, g, b, a] = parseToRgba(color, fallback) ?? [255, 255, 255, 1]\n\n r = r / 255\n g = g / 255\n b = b / 255\n\n const [min, max] = [Math.min(r, g, b), Math.max(r, g, b)]\n const delta = max - min\n\n let [h, v, s] = [0, max, max == 0 ? 0 : delta / max]\n\n switch (min) {\n case max:\n h = 0\n break\n\n case r:\n h = 60 * ((b - g) / delta) + 180\n break\n\n case g:\n h = 60 * ((r - b) / delta) + 300\n break\n\n case b:\n h = 60 * ((g - r) / delta) + 60\n break\n }\n\n return [h, s, v, a]\n}\n\nexport const rgbaTo =\n ([r, g, b, a]: [number, number, number, number], fallback?: string) =>\n (format: ColorFormat = \"hex\") =>\n convertColor(c.rgba(r, g, b, a), fallback)(format)\n\nexport const hslaTo =\n ([h, s, l, a]: [number, number, number, number], fallback?: string) =>\n (format: ColorFormat = \"hex\") =>\n convertColor(c.hsla(h, s, l, a), fallback)(format)\n\nexport const hsvTo =\n ([h, s, v, a]: [number, number, number, number?], fallback?: string) =>\n (format: ColorFormat = \"hex\"): string | undefined => {\n h = h / 60\n\n let rgb: [number, number, number] = [v, v, v]\n\n let i = Math.floor(h)\n let f = h - i\n let p = v * (1 - s)\n let q = v * (1 - s * f)\n let t = v * (1 - s * (1 - f))\n\n switch (i) {\n case 0:\n case 6:\n rgb = [v, t, p]\n break\n\n case 1:\n rgb = [q, v, p]\n break\n\n case 2:\n rgb = [p, v, t]\n break\n\n case 3:\n rgb = [p, q, v]\n break\n\n case 4:\n rgb = [t, p, v]\n break\n\n case 5:\n rgb = [v, p, q]\n break\n }\n\n let color = `rgb(${rgb.map((v) => Math.round(v * 255)).join(\", \")})`\n\n if (isNumber(a)) color = color.replace(/\\)$/, `, ${a})`)\n\n return convertColor(color, fallback)(format)\n }\n\nexport const sameColor = (\n color: string | undefined,\n comparison: string | undefined,\n) => {\n if (!color) return false\n if (!comparison) return false\n\n const a = parseToRgba(color) ?? []\n const b = parseToRgba(comparison) ?? []\n\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3]\n}\n","export const filterEmpty = <T extends any[]>(array: T) =>\n array.filter((value) => value != null)\n","export const toNumber = (n: any): number => {\n const num = parseFloat(n)\n\n return typeof num !== \"number\" || Number.isNaN(num) ? 0 : num\n}\n\nexport const toPrecision = (n: number, precision?: number): string => {\n n = toNumber(n)\n\n const scale = 10 ** (precision ?? 10)\n\n n = Math.round(n * scale) / scale\n\n return precision ? n.toFixed(precision) : n.toString()\n}\n\nexport const countDecimal = (n: number): number => {\n if (!Number.isFinite(n)) return 0\n\n let e = 1\n let p = 0\n\n while (Math.round(n * e) / e !== n) {\n e *= 10\n p += 1\n }\n\n return p\n}\n\nexport const roundNumberToStep = (n: number, from: number, step: number) => {\n const nextValue = Math.round((n - from) / step) * step + from\n\n const precision = countDecimal(step)\n\n return toPrecision(nextValue, precision)\n}\n\nexport const valueToPercent = (n: number, min: number, max: number): number =>\n ((n - min) * 100) / (max - min)\n\nexport const percentToValue = (n: number, min: number, max: number) =>\n (max - min) * n + min\n\nexport const clampNumber = (n: number, min: number, max: number): number =>\n Math.min(Math.max(n, min), max)\n","export type AnyPointerEvent = MouseEvent | TouchEvent | PointerEvent\n\nexport type PointType = \"page\" | \"client\"\n\nexport type Point = {\n x: number\n y: number\n}\n\nexport type PointerEventInfo = {\n point: Point\n}\n\nexport type MixedEventListener = (\n e: AnyPointerEvent,\n info: PointerEventInfo,\n) => void\n\nexport const isMouseEvent = (ev: any): ev is MouseEvent => {\n const win = getEventWindow(ev)\n\n if (typeof win.PointerEvent !== \"undefined\" && ev instanceof win.PointerEvent)\n return !!(ev.pointerType === \"mouse\")\n\n return ev instanceof win.MouseEvent\n}\n\nexport const isTouchEvent = (ev: AnyPointerEvent): ev is TouchEvent =>\n !!(ev as TouchEvent).touches\n\nexport const isMultiTouchEvent = (ev: AnyPointerEvent) =>\n isTouchEvent(ev) && ev.touches.length > 1\n\nexport const getEventWindow = (ev: Event): typeof globalThis =>\n ((ev as UIEvent).view ?? window) as unknown as typeof globalThis\n\nexport const pointFromTouch = (e: TouchEvent, type: PointType = \"page\") => {\n const point = e.touches[0] || e.changedTouches[0]\n\n return { x: point[`${type}X`], y: point[`${type}Y`] }\n}\n\nexport const pointFromMouse = (\n point: MouseEvent | PointerEvent,\n type: PointType = \"page\",\n) => ({\n x: point[`${type}X`],\n y: point[`${type}Y`],\n})\n\nexport const getEventPoint = (ev: AnyPointerEvent, type: PointType = \"page\") =>\n isTouchEvent(ev) ? pointFromTouch(ev, type) : pointFromMouse(ev, type)\n\nexport const addDomEvent = (\n target: EventTarget,\n type: string,\n cb: EventListener,\n options?: AddEventListenerOptions,\n) => {\n target.addEventListener(type, cb, options)\n\n return () => {\n target.removeEventListener(type, cb, options)\n }\n}\n\nconst filter =\n (cb: EventListener): EventListener =>\n (ev: Event) => {\n const isMouse = isMouseEvent(ev)\n\n if (!isMouse || (isMouse && ev.button === 0)) cb(ev)\n }\n\nconst wrap = (cb: MixedEventListener, filterPrimary = false): EventListener => {\n const listener = (ev: any) => cb(ev, { point: getEventPoint(ev) })\n\n const fn = filterPrimary ? filter(listener) : listener\n\n return fn as EventListener\n}\n\nexport const addPointerEvent = (\n target: EventTarget,\n type: string,\n cb: MixedEventListener,\n options?: AddEventListenerOptions,\n) => addDomEvent(target, type, wrap(cb, type === \"pointerdown\"), options)\n","export const interopDefault = <T extends unknown>(module: T): T =>\n (module as { default: T }).default || module\n"],"mappings":"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","names":["createContext","isValidElement","parseToHsla","parseToRgba","prev","key","createContext","useContext","isValidElement","children","isDark","hsla","rgba","parseToRgba","parseToHsla","v","module"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/assertion.ts","../src/object.ts","../src/function.ts","../src/react.tsx","../src/dom.ts","../src/string.ts","../src/calc.ts","../src/color.ts","../src/array.ts","../src/number.ts","../src/event.ts","../src/module.ts"],"sourcesContent":["export * from \"./index.types\"\nexport * from \"./assertion\"\nexport * from \"./object\"\nexport * from \"./function\"\nexport * from \"./react\"\nexport * from \"./dom\"\nexport * from \"./string\"\nexport * from \"./calc\"\nexport * from \"./color\"\nexport * from \"./array\"\nexport * from \"./number\"\nexport * from \"./event\"\nexport * from \"./module\"\n","import type { Dict } from \".\"\n\nexport const isNumber = (value: any): value is number =>\n typeof value === \"number\"\n\nexport const isNotNumber = (value: any): boolean =>\n typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value)\n\nexport const isNumeric = (value: any): boolean =>\n value != null &&\n parseFloat(value.toString()) - parseFloat(value.toString()) + 1 >= 0\n\nexport const isString = (value: any): value is string =>\n Object.prototype.toString.call(value) === \"[object String]\"\n\nexport const isBoolean = (value: any): value is boolean =>\n typeof value === \"boolean\"\n\nexport const isUndefined = (value: any): value is undefined =>\n typeof value === \"undefined\" && value === undefined\n\nexport const isNull = (value: any): value is null => value === null\n\nexport const isObject = <T extends Dict>(value: any): value is T =>\n value !== null &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n !isArray(value)\n\nexport const isArray = <T extends any[]>(value: any): value is T =>\n Array.isArray(value)\n\nexport const isEmpty = (value: any): boolean =>\n !isArray(value) || !value.length || value.every((v) => v == null)\n\nexport const isFunction = <T extends Function = Function>(\n value: any,\n): value is T => typeof value === \"function\"\n\nexport const isUnit = (value: any): boolean =>\n /[0-9].*[px|rem|em|%|vw|vh]$/.test(value)\n\nexport const cast = <T>(value: any) => value as T\n","import type { Dict, Union } from \".\"\nimport { isObject, isArray, isFunction, isString } from \".\"\n\nconst omitObjectHelper = <T extends Dict, K extends keyof T>(\n obj: T,\n path: Union<K>[],\n): any => {\n if (!path.length) return obj\n\n const [primaryKey, ...restKeys] = path\n\n if (restKeys.length === 0 && primaryKey in obj) {\n const { [primaryKey]: _, ...rest } = obj\n\n return rest\n }\n\n if (obj[primaryKey] && isObject(obj[primaryKey])) {\n return {\n ...obj,\n [primaryKey]: omitObjectHelper(obj[primaryKey], restKeys),\n }\n }\n\n return obj\n}\n\nexport const omitObject = <\n Y extends Dict,\n M extends keyof Y,\n D extends unknown,\n>(\n obj: Y,\n keys: Union<M>[],\n) => {\n return keys.reduce((prev, key) => {\n const path = (isString(key) ? key.split(\".\") : []) as Union<M>[]\n\n return omitObjectHelper(prev, path)\n }, obj) as unknown as D extends unknown ? Omit<Y, M> : D\n}\n\nexport const pickObject = <\n Y extends Dict,\n M extends keyof Y,\n D extends unknown,\n>(\n obj: Y,\n keys: Union<M>[],\n fallbackValue = \"__fallback\",\n) =>\n keys.reduce((prev, key) => {\n const path = isString(key) ? key.split(\".\") : []\n\n if (!path.length) return prev\n\n const value = getMemoizedObject(obj, key as string, fallbackValue)\n\n if (value === fallbackValue) return prev\n\n prev = merge(\n prev,\n path.reduceRight(\n (prev, key) => ({ [key]: key === path.at(-1) ? value : prev }),\n {},\n ),\n )\n\n return prev\n }, {}) as D extends unknown ? { [H in M]: Y[H] } : D\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: any = 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","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, ...args: any[]) => void>(\n ...funcs: (T | undefined)[]\n ) =>\n (\n event: T extends (event: infer R, ...args: any[]) => any ? R : never,\n ...args: T extends (event: any, ...args: infer R) => any ? R : never\n ) => {\n funcs.some((func) => {\n func?.(event, ...args)\n\n return event?.defaultPrevented\n })\n }\n\nexport const funcAll =\n <T extends (...args: any[]) => any>(...funcs: (T | undefined)[]) =>\n (...args: T extends (...args: infer R) => any ? R : never) =>\n funcs.forEach((func) => func?.(...args))\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<ContextType extends any = any> = {\n strict?: boolean\n errorMessage?: string\n name?: string\n defaultValue?: ContextType\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 defaultValue,\n}: Options<ContextType> = {}) => {\n const Context = React.createContext<ContextType | undefined>(defaultValue)\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: (string | 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: (string | 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: (string | 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: (string | 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> | React.LegacyRef<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>> =\n P extends Promise<infer T> ? T : 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\nlet createIdCounter: number = 0\n\nexport const createId = (prefix: string) =>\n `${prefix}-${++createIdCounter}-${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/i)\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 const computedFontSize = parseFloat(style.fontSize)\n\n if (!isNaN(computedFontSize)) fontSize = computedFontSize\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 type { StringLiteral } from \"./index.types\"\n\nexport const escape = (value: string, replaceValue: string = \"\"): string =>\n value.replace(/\\s+/g, replaceValue)\n\nexport const antonym = (value: string): string => {\n switch (value) {\n case \"top\":\n return \"bottom\"\n\n case \"bottom\":\n return \"top\"\n\n case \"left\":\n return \"right\"\n\n case \"right\":\n return \"left\"\n\n case \"start\":\n return \"end\"\n\n case \"end\":\n return \"start\"\n\n case \"x\":\n return \"y\"\n\n case \"y\":\n return \"x\"\n\n case \"enter\":\n return \"exit\"\n\n case \"exit\":\n return \"enter\"\n\n case \"vertical\":\n return \"horizontal\"\n\n case \"horizontal\":\n return \"vertical\"\n\n case \"up\":\n return \"down\"\n\n case \"down\":\n return \"up\"\n\n case \"block\":\n return \"inline\"\n\n case \"inline\":\n return \"block\"\n\n default:\n return value\n }\n}\n\nexport const toCamelCase = (value: StringLiteral): string =>\n value\n .toLowerCase()\n .replace(/[_-](.)/g, (_, group1) => group1.toUpperCase())\n .replace(/^(.)/, (_, group1) => group1.toUpperCase())\n\nexport const toKebabCase = (value: StringLiteral): string =>\n value\n .replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, \"$1-$2\")\n .toLowerCase()\n .replace(/^-/, \"\")\n","type Operator = \"+\" | \"-\" | \"*\" | \"/\"\n\nexport type Operand = string | number\n\nconst toExpression = (operator: Operator, ...args: Operand[]) =>\n args.join(` ${operator} `).replace(/calc/g, \"\")\n\nconst add = (...args: Operand[]) => `calc(${toExpression(\"+\", ...args)})`\n\nconst subtract = (...args: Operand[]) => `calc(${toExpression(\"-\", ...args)})`\n\nconst multiply = (...args: Operand[]) => `calc(${toExpression(\"*\", ...args)})`\n\nconst divide = (...args: Operand[]) => `calc(${toExpression(\"/\", ...args)})`\n\nconst negate = (value: Operand) => {\n if (value != null && !isNaN(parseFloat(value.toString())))\n return String(value).startsWith(\"-\") ? String(value).slice(1) : `-${value}`\n\n return multiply(value, -1)\n}\n\ntype Calc = {\n add: (...args: Operand[]) => Calc\n subtract: (...args: Operand[]) => Calc\n multiply: (...args: Operand[]) => Calc\n divide: (...args: Operand[]) => Calc\n negate: () => Calc\n toString: () => string\n}\n\nexport const calc = Object.assign(\n (x: Operand): Calc => ({\n add: (...args) => calc(add(x, ...args)),\n subtract: (...args) => calc(subtract(x, ...args)),\n multiply: (...args) => calc(multiply(x, ...args)),\n divide: (...args) => calc(divide(x, ...args)),\n negate: () => calc(negate(x)),\n toString: () => x.toString(),\n }),\n {\n add,\n subtract,\n multiply,\n divide,\n negate,\n },\n)\n","import * as c from \"color2k\"\nimport type { Dict } from \".\"\nimport { getMemoizedObject as get, isArray, isNumber } from \".\"\n\ntype ColorMode = \"light\" | \"dark\"\n\nexport type ColorFormat = \"hex\" | \"hexa\" | \"rgba\" | \"rgb\" | \"hsl\" | \"hsla\"\n\nexport const tones = [\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 = \"#000000\") =>\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 c.toHex(String(colorMode !== \"dark\" ? hex[0] : hex[1]))\n } else {\n return c.toHex(String(hex))\n }\n } catch {\n try {\n return c.toHex(fallback)\n } catch {\n return \"#000000\"\n }\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 c.toHex(c.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 c.toHex(c.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 c.toHex(c.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 c.toHex(c.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 c.transparentize(raw, 1 - alpha)\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] = c.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\nexport const convertColor =\n (color: string, fallback?: string) =>\n (format: ColorFormat): string | undefined => {\n try {\n const isAlpha = format.endsWith(\"a\")\n\n if (/^[0-9a-fA-F]{6}$/.test(color)) color = \"#\" + color\n\n if (format.startsWith(\"hex\")) {\n let hexa = c.toHex(color)\n\n if (isAlpha) {\n if (hexa.length === 7) hexa += \"ff\"\n } else {\n hexa = hexa.replace(/(?<=^#([0-9a-fA-F]{6}))[0-9a-fA-F]{2}$/, \"\")\n }\n\n return hexa\n } else if (format.startsWith(\"hsl\")) {\n let hsla = c.toHsla(color)\n\n if (!isAlpha) {\n hsla = hsla.replace(/hsla/, \"hsl\")\n hsla = hsla.replace(/,\\s*\\d+(\\.\\d+)?\\)$/, \")\")\n }\n\n return hsla\n } else {\n let rgba = c.toRgba(color)\n\n if (!isAlpha) {\n rgba = rgba.replace(/rgba/, \"rgb\")\n rgba = rgba.replace(/,\\s*\\d+(\\.\\d+)?\\)$/, \")\")\n }\n\n return rgba\n }\n } catch {\n if (fallback) return convertColor(fallback)(format)\n }\n }\n\nexport const calcFormat = (color: string): ColorFormat => {\n if (color.startsWith(\"hsl\")) {\n return color.startsWith(\"hsla\") ? \"hsla\" : \"hsl\"\n } else if (color.startsWith(\"rgb\")) {\n return color.startsWith(\"rgba\") ? \"rgba\" : \"rgb\"\n } else {\n return color.length === 9 ? \"hexa\" : \"hex\"\n }\n}\n\nexport const getAlpha = (color: string) => c.parseToRgba(color)[3]\n\nexport const alphaToHex = (a: number) => {\n if (0 > a) a = 0\n if (1 < a) a = 1\n\n return Math.round(a * 255)\n .toString(16)\n .padStart(2, \"0\")\n}\n\nexport const parseToRgba = (color: string, fallback?: string) => {\n try {\n if (/^[0-9a-fA-F]{6}$/.test(color)) color = \"#\" + color\n\n return c.parseToRgba(color)\n } catch {\n if (fallback) return c.parseToRgba(fallback)\n }\n}\n\nexport const parseToHsla = (color: string, fallback?: string) => {\n try {\n if (/^[0-9a-fA-F]{6}$/.test(color)) color = \"#\" + color\n\n return c.parseToHsla(color)\n } catch {\n if (fallback) return c.parseToHsla(fallback)\n }\n}\n\nexport const parseToHsv = (\n color: string,\n fallback?: string,\n): [number, number, number, number] => {\n let [r, g, b, a] = parseToRgba(color, fallback) ?? [255, 255, 255, 1]\n\n r = r / 255\n g = g / 255\n b = b / 255\n\n const [min, max] = [Math.min(r, g, b), Math.max(r, g, b)]\n const delta = max - min\n\n let [h, v, s] = [0, max, max == 0 ? 0 : delta / max]\n\n switch (min) {\n case max:\n h = 0\n break\n\n case r:\n h = 60 * ((b - g) / delta) + 180\n break\n\n case g:\n h = 60 * ((r - b) / delta) + 300\n break\n\n case b:\n h = 60 * ((g - r) / delta) + 60\n break\n }\n\n return [h, s, v, a]\n}\n\nexport const rgbaTo =\n ([r, g, b, a]: [number, number, number, number], fallback?: string) =>\n (format: ColorFormat = \"hex\") =>\n convertColor(c.rgba(r, g, b, a), fallback)(format)\n\nexport const hslaTo =\n ([h, s, l, a]: [number, number, number, number], fallback?: string) =>\n (format: ColorFormat = \"hex\") =>\n convertColor(c.hsla(h, s, l, a), fallback)(format)\n\nexport const hsvTo =\n ([h, s, v, a]: [number, number, number, number?], fallback?: string) =>\n (format: ColorFormat = \"hex\"): string | undefined => {\n h = h / 60\n\n let rgb: [number, number, number] = [v, v, v]\n\n let i = Math.floor(h)\n let f = h - i\n let p = v * (1 - s)\n let q = v * (1 - s * f)\n let t = v * (1 - s * (1 - f))\n\n switch (i) {\n case 0:\n case 6:\n rgb = [v, t, p]\n break\n\n case 1:\n rgb = [q, v, p]\n break\n\n case 2:\n rgb = [p, v, t]\n break\n\n case 3:\n rgb = [p, q, v]\n break\n\n case 4:\n rgb = [t, p, v]\n break\n\n case 5:\n rgb = [v, p, q]\n break\n }\n\n let color = `rgb(${rgb.map((v) => Math.round(v * 255)).join(\", \")})`\n\n if (isNumber(a)) color = color.replace(/\\)$/, `, ${a})`)\n\n return convertColor(color, fallback)(format)\n }\n\nexport const sameColor = (\n color: string | undefined,\n comparison: string | undefined,\n) => {\n if (!color) return false\n if (!comparison) return false\n\n const a = parseToRgba(color) ?? []\n const b = parseToRgba(comparison) ?? []\n\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3]\n}\n","export const filterEmpty = <T extends any[]>(array: T) =>\n array.filter((value) => value != null)\n","export const toNumber = (n: any): number => {\n const num = parseFloat(n)\n\n return typeof num !== \"number\" || Number.isNaN(num) ? 0 : num\n}\n\nexport const toPrecision = (n: number, precision?: number): string => {\n n = toNumber(n)\n\n const scale = 10 ** (precision ?? 10)\n\n n = Math.round(n * scale) / scale\n\n return precision ? n.toFixed(precision) : n.toString()\n}\n\nexport const countDecimal = (n: number): number => {\n if (!Number.isFinite(n)) return 0\n\n let e = 1\n let p = 0\n\n while (Math.round(n * e) / e !== n) {\n e *= 10\n p += 1\n }\n\n return p\n}\n\nexport const roundNumberToStep = (n: number, from: number, step: number) => {\n const nextValue = Math.round((n - from) / step) * step + from\n\n const precision = countDecimal(step)\n\n return toPrecision(nextValue, precision)\n}\n\nexport const valueToPercent = (n: number, min: number, max: number): number =>\n ((n - min) * 100) / (max - min)\n\nexport const percentToValue = (n: number, min: number, max: number) =>\n (max - min) * n + min\n\nexport const clampNumber = (n: number, min: number, max: number): number =>\n Math.min(Math.max(n, min), max)\n","export type AnyPointerEvent = MouseEvent | TouchEvent | PointerEvent\n\nexport type PointType = \"page\" | \"client\"\n\nexport type Point = {\n x: number\n y: number\n}\n\nexport type PointerEventInfo = {\n point: Point\n}\n\nexport type MixedEventListener = (\n e: AnyPointerEvent,\n info: PointerEventInfo,\n) => void\n\nexport const isMouseEvent = (ev: any): ev is MouseEvent => {\n const win = getEventWindow(ev)\n\n if (typeof win.PointerEvent !== \"undefined\" && ev instanceof win.PointerEvent)\n return !!(ev.pointerType === \"mouse\")\n\n return ev instanceof win.MouseEvent\n}\n\nexport const isTouchEvent = (ev: AnyPointerEvent): ev is TouchEvent =>\n !!(ev as TouchEvent).touches\n\nexport const isMultiTouchEvent = (ev: AnyPointerEvent) =>\n isTouchEvent(ev) && ev.touches.length > 1\n\nexport const getEventWindow = (ev: Event): typeof globalThis =>\n ((ev as UIEvent).view ?? window) as unknown as typeof globalThis\n\nexport const pointFromTouch = (e: TouchEvent, type: PointType = \"page\") => {\n const point = e.touches[0] || e.changedTouches[0]\n\n return { x: point[`${type}X`], y: point[`${type}Y`] }\n}\n\nexport const pointFromMouse = (\n point: MouseEvent | PointerEvent,\n type: PointType = \"page\",\n) => ({\n x: point[`${type}X`],\n y: point[`${type}Y`],\n})\n\nexport const getEventPoint = (ev: AnyPointerEvent, type: PointType = \"page\") =>\n isTouchEvent(ev) ? pointFromTouch(ev, type) : pointFromMouse(ev, type)\n\nexport const addDomEvent = (\n target: EventTarget,\n type: string,\n cb: EventListener,\n options?: AddEventListenerOptions,\n) => {\n target.addEventListener(type, cb, options)\n\n return () => {\n target.removeEventListener(type, cb, options)\n }\n}\n\nconst filter =\n (cb: EventListener): EventListener =>\n (ev: Event) => {\n const isMouse = isMouseEvent(ev)\n\n if (!isMouse || (isMouse && ev.button === 0)) cb(ev)\n }\n\nconst wrap = (cb: MixedEventListener, filterPrimary = false): EventListener => {\n const listener = (ev: any) => cb(ev, { point: getEventPoint(ev) })\n\n const fn = filterPrimary ? filter(listener) : listener\n\n return fn as EventListener\n}\n\nexport const addPointerEvent = (\n target: EventTarget,\n type: string,\n cb: MixedEventListener,\n options?: AddEventListenerOptions,\n) => addDomEvent(target, type, wrap(cb, type === \"pointerdown\"), options)\n","export const interopDefault = <T extends unknown>(module: T): T =>\n (module as { default: T }).default || module\n"],"mappings":"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","names":["createContext","isValidElement","parseToHsla","parseToRgba","prev","key","createContext","useContext","isValidElement","children","isDark","hsla","rgba","parseToRgba","parseToHsla","v","module"]}
package/dist/index.mjs CHANGED
@@ -88,7 +88,7 @@ import {
88
88
  useUnmountEffect,
89
89
  useUpdateEffect,
90
90
  vendor
91
- } from "./chunk-QDA3QFNA.mjs";
91
+ } from "./chunk-YI55JNAD.mjs";
92
92
  import "./chunk-RSDBT4DI.mjs";
93
93
  import {
94
94
  interopDefault
@@ -114,6 +114,7 @@ import {
114
114
  import {
115
115
  cast,
116
116
  isArray,
117
+ isBoolean,
117
118
  isEmpty,
118
119
  isFunction,
119
120
  isNotNumber,
@@ -124,7 +125,7 @@ import {
124
125
  isString,
125
126
  isUndefined,
126
127
  isUnit
127
- } from "./chunk-6DMBHPNQ.mjs";
128
+ } from "./chunk-P5JCSYB3.mjs";
128
129
  import {
129
130
  calc
130
131
  } from "./chunk-L56KWSQO.mjs";
@@ -191,6 +192,7 @@ export {
191
192
  isActiveElement,
192
193
  isApple,
193
194
  isArray,
195
+ isBoolean,
194
196
  isContains,
195
197
  isContentEditable,
196
198
  isDark,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/object.ts","../src/assertion.ts"],"sourcesContent":["import type { Dict, Union } from \".\"\nimport { isObject, isArray, isFunction, isString } from \".\"\n\nconst omitObjectHelper = <T extends Dict, K extends keyof T>(\n obj: T,\n path: Union<K>[],\n): any => {\n if (!path.length) return obj\n\n const [primaryKey, ...restKeys] = path\n\n if (restKeys.length === 0 && primaryKey in obj) {\n const { [primaryKey]: _, ...rest } = obj\n\n return rest\n }\n\n if (obj[primaryKey] && isObject(obj[primaryKey])) {\n return {\n ...obj,\n [primaryKey]: omitObjectHelper(obj[primaryKey], restKeys),\n }\n }\n\n return obj\n}\n\nexport const omitObject = <\n Y extends Dict,\n M extends keyof Y,\n D extends unknown,\n>(\n obj: Y,\n keys: Union<M>[],\n) => {\n return keys.reduce((prev, key) => {\n const path = (isString(key) ? key.split(\".\") : []) as Union<M>[]\n\n return omitObjectHelper(prev, path)\n }, obj) as unknown as D extends unknown ? Omit<Y, M> : D\n}\n\nexport const pickObject = <\n Y extends Dict,\n M extends keyof Y,\n D extends unknown,\n>(\n obj: Y,\n keys: Union<M>[],\n fallbackValue = \"__fallback\",\n) =>\n keys.reduce((prev, key) => {\n const path = isString(key) ? key.split(\".\") : []\n\n if (!path.length) return prev\n\n const value = getMemoizedObject(obj, key as string, fallbackValue)\n\n if (value === fallbackValue) return prev\n\n prev = merge(\n prev,\n path.reduceRight(\n (prev, key) => ({ [key]: key === path.at(-1) ? value : prev }),\n {},\n ),\n )\n\n return prev\n }, {}) as D extends unknown ? { [H in M]: Y[H] } : D\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: any = 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","import type { Dict } from \".\"\n\nexport const isNumber = (value: any): value is number =>\n typeof value === \"number\"\n\nexport const isNotNumber = (value: any): boolean =>\n typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value)\n\nexport const isNumeric = (value: any): boolean =>\n value != null &&\n parseFloat(value.toString()) - parseFloat(value.toString()) + 1 >= 0\n\nexport const isString = (value: any): value is string =>\n Object.prototype.toString.call(value) === \"[object String]\"\n\nexport const isUndefined = (value: any): value is undefined =>\n typeof value === \"undefined\" && value === undefined\n\nexport const isNull = (value: any): value is null => value === null\n\nexport const isObject = <T extends Dict>(value: any): value is T =>\n value !== null &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n !isArray(value)\n\nexport const isArray = <T extends any[]>(value: any): value is T =>\n Array.isArray(value)\n\nexport const isEmpty = (value: any): boolean =>\n !isArray(value) || !value.length || value.every((v) => v == null)\n\nexport const isFunction = <T extends Function = Function>(\n value: any,\n): value is T => typeof value === \"function\"\n\nexport const isUnit = (value: any): boolean =>\n /[0-9].*[px|rem|em|%|vw|vh]$/.test(value)\n\nexport const cast = <T>(value: any) => value as T\n"],"mappings":"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","names":["prev","key"]}
1
+ {"version":3,"sources":["../src/object.ts","../src/assertion.ts"],"sourcesContent":["import type { Dict, Union } from \".\"\nimport { isObject, isArray, isFunction, isString } from \".\"\n\nconst omitObjectHelper = <T extends Dict, K extends keyof T>(\n obj: T,\n path: Union<K>[],\n): any => {\n if (!path.length) return obj\n\n const [primaryKey, ...restKeys] = path\n\n if (restKeys.length === 0 && primaryKey in obj) {\n const { [primaryKey]: _, ...rest } = obj\n\n return rest\n }\n\n if (obj[primaryKey] && isObject(obj[primaryKey])) {\n return {\n ...obj,\n [primaryKey]: omitObjectHelper(obj[primaryKey], restKeys),\n }\n }\n\n return obj\n}\n\nexport const omitObject = <\n Y extends Dict,\n M extends keyof Y,\n D extends unknown,\n>(\n obj: Y,\n keys: Union<M>[],\n) => {\n return keys.reduce((prev, key) => {\n const path = (isString(key) ? key.split(\".\") : []) as Union<M>[]\n\n return omitObjectHelper(prev, path)\n }, obj) as unknown as D extends unknown ? Omit<Y, M> : D\n}\n\nexport const pickObject = <\n Y extends Dict,\n M extends keyof Y,\n D extends unknown,\n>(\n obj: Y,\n keys: Union<M>[],\n fallbackValue = \"__fallback\",\n) =>\n keys.reduce((prev, key) => {\n const path = isString(key) ? key.split(\".\") : []\n\n if (!path.length) return prev\n\n const value = getMemoizedObject(obj, key as string, fallbackValue)\n\n if (value === fallbackValue) return prev\n\n prev = merge(\n prev,\n path.reduceRight(\n (prev, key) => ({ [key]: key === path.at(-1) ? value : prev }),\n {},\n ),\n )\n\n return prev\n }, {}) as D extends unknown ? { [H in M]: Y[H] } : D\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: any = 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","import type { Dict } from \".\"\n\nexport const isNumber = (value: any): value is number =>\n typeof value === \"number\"\n\nexport const isNotNumber = (value: any): boolean =>\n typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value)\n\nexport const isNumeric = (value: any): boolean =>\n value != null &&\n parseFloat(value.toString()) - parseFloat(value.toString()) + 1 >= 0\n\nexport const isString = (value: any): value is string =>\n Object.prototype.toString.call(value) === \"[object String]\"\n\nexport const isBoolean = (value: any): value is boolean =>\n typeof value === \"boolean\"\n\nexport const isUndefined = (value: any): value is undefined =>\n typeof value === \"undefined\" && value === undefined\n\nexport const isNull = (value: any): value is null => value === null\n\nexport const isObject = <T extends Dict>(value: any): value is T =>\n value !== null &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n !isArray(value)\n\nexport const isArray = <T extends any[]>(value: any): value is T =>\n Array.isArray(value)\n\nexport const isEmpty = (value: any): boolean =>\n !isArray(value) || !value.length || value.every((v) => v == null)\n\nexport const isFunction = <T extends Function = Function>(\n value: any,\n): value is T => typeof value === \"function\"\n\nexport const isUnit = (value: any): boolean =>\n /[0-9].*[px|rem|em|%|vw|vh]$/.test(value)\n\nexport const cast = <T>(value: any) => value as T\n"],"mappings":"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","names":["prev","key"]}
package/dist/object.mjs CHANGED
@@ -13,13 +13,13 @@ import {
13
13
  pickObject,
14
14
  replaceObject,
15
15
  splitObject
16
- } from "./chunk-QDA3QFNA.mjs";
16
+ } from "./chunk-YI55JNAD.mjs";
17
17
  import "./chunk-RSDBT4DI.mjs";
18
18
  import "./chunk-5OUUTZYQ.mjs";
19
19
  import "./chunk-P52P4NMT.mjs";
20
20
  import "./chunk-L76GM3GN.mjs";
21
21
  import "./chunk-WV6P7ZCI.mjs";
22
- import "./chunk-6DMBHPNQ.mjs";
22
+ import "./chunk-P5JCSYB3.mjs";
23
23
  import "./chunk-L56KWSQO.mjs";
24
24
  import "./chunk-A74F6ICI.mjs";
25
25
  export {
package/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/react.tsx","../src/assertion.ts"],"sourcesContent":["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<ContextType extends any = any> = {\n strict?: boolean\n errorMessage?: string\n name?: string\n defaultValue?: ContextType\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 defaultValue,\n}: Options<ContextType> = {}) => {\n const Context = React.createContext<ContextType | undefined>(defaultValue)\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: (string | 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: (string | 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: (string | 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: (string | 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> | React.LegacyRef<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>> =\n P extends Promise<infer T> ? T : 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\nlet createIdCounter: number = 0\n\nexport const createId = (prefix: string) =>\n `${prefix}-${++createIdCounter}-${new Date().getTime()}`\n","import type { Dict } from \".\"\n\nexport const isNumber = (value: any): value is number =>\n typeof value === \"number\"\n\nexport const isNotNumber = (value: any): boolean =>\n typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value)\n\nexport const isNumeric = (value: any): boolean =>\n value != null &&\n parseFloat(value.toString()) - parseFloat(value.toString()) + 1 >= 0\n\nexport const isString = (value: any): value is string =>\n Object.prototype.toString.call(value) === \"[object String]\"\n\nexport const isUndefined = (value: any): value is undefined =>\n typeof value === \"undefined\" && value === undefined\n\nexport const isNull = (value: any): value is null => value === null\n\nexport const isObject = <T extends Dict>(value: any): value is T =>\n value !== null &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n !isArray(value)\n\nexport const isArray = <T extends any[]>(value: any): value is T =>\n Array.isArray(value)\n\nexport const isEmpty = (value: any): boolean =>\n !isArray(value) || !value.length || value.every((v) => v == null)\n\nexport const isFunction = <T extends Function = Function>(\n value: any,\n): value is T => typeof value === \"function\"\n\nexport const isUnit = (value: any): boolean =>\n /[0-9].*[px|rem|em|%|vw|vh]$/.test(value)\n\nexport const cast = <T>(value: any) => value as T\n"],"mappings":"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","names":["createContext","isValidElement","createContext","useContext","isValidElement","children"]}
1
+ {"version":3,"sources":["../src/react.tsx","../src/assertion.ts"],"sourcesContent":["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<ContextType extends any = any> = {\n strict?: boolean\n errorMessage?: string\n name?: string\n defaultValue?: ContextType\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 defaultValue,\n}: Options<ContextType> = {}) => {\n const Context = React.createContext<ContextType | undefined>(defaultValue)\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: (string | 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: (string | 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: (string | 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: (string | 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> | React.LegacyRef<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>> =\n P extends Promise<infer T> ? T : 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\nlet createIdCounter: number = 0\n\nexport const createId = (prefix: string) =>\n `${prefix}-${++createIdCounter}-${new Date().getTime()}`\n","import type { Dict } from \".\"\n\nexport const isNumber = (value: any): value is number =>\n typeof value === \"number\"\n\nexport const isNotNumber = (value: any): boolean =>\n typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value)\n\nexport const isNumeric = (value: any): boolean =>\n value != null &&\n parseFloat(value.toString()) - parseFloat(value.toString()) + 1 >= 0\n\nexport const isString = (value: any): value is string =>\n Object.prototype.toString.call(value) === \"[object String]\"\n\nexport const isBoolean = (value: any): value is boolean =>\n typeof value === \"boolean\"\n\nexport const isUndefined = (value: any): value is undefined =>\n typeof value === \"undefined\" && value === undefined\n\nexport const isNull = (value: any): value is null => value === null\n\nexport const isObject = <T extends Dict>(value: any): value is T =>\n value !== null &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n !isArray(value)\n\nexport const isArray = <T extends any[]>(value: any): value is T =>\n Array.isArray(value)\n\nexport const isEmpty = (value: any): boolean =>\n !isArray(value) || !value.length || value.every((v) => v == null)\n\nexport const isFunction = <T extends Function = Function>(\n value: any,\n): value is T => typeof value === \"function\"\n\nexport const isUnit = (value: any): boolean =>\n /[0-9].*[px|rem|em|%|vw|vh]$/.test(value)\n\nexport const cast = <T>(value: any) => value as T\n"],"mappings":"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","names":["createContext","isValidElement","createContext","useContext","isValidElement","children"]}
package/dist/react.mjs CHANGED
@@ -20,13 +20,13 @@ import {
20
20
  useSafeLayoutEffect,
21
21
  useUnmountEffect,
22
22
  useUpdateEffect
23
- } from "./chunk-QDA3QFNA.mjs";
23
+ } from "./chunk-YI55JNAD.mjs";
24
24
  import "./chunk-RSDBT4DI.mjs";
25
25
  import "./chunk-5OUUTZYQ.mjs";
26
26
  import "./chunk-P52P4NMT.mjs";
27
27
  import "./chunk-L76GM3GN.mjs";
28
28
  import "./chunk-WV6P7ZCI.mjs";
29
- import "./chunk-6DMBHPNQ.mjs";
29
+ import "./chunk-P5JCSYB3.mjs";
30
30
  import "./chunk-L56KWSQO.mjs";
31
31
  import "./chunk-A74F6ICI.mjs";
32
32
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yamada-ui/utils",
3
- "version": "1.2.0-dev-20240428102406",
3
+ "version": "1.2.0-dev-20240428212206",
4
4
  "description": "Yamada UI utils",
5
5
  "keywords": [
6
6
  "utils",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/assertion.ts"],"sourcesContent":["import type { Dict } from \".\"\n\nexport const isNumber = (value: any): value is number =>\n typeof value === \"number\"\n\nexport const isNotNumber = (value: any): boolean =>\n typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value)\n\nexport const isNumeric = (value: any): boolean =>\n value != null &&\n parseFloat(value.toString()) - parseFloat(value.toString()) + 1 >= 0\n\nexport const isString = (value: any): value is string =>\n Object.prototype.toString.call(value) === \"[object String]\"\n\nexport const isUndefined = (value: any): value is undefined =>\n typeof value === \"undefined\" && value === undefined\n\nexport const isNull = (value: any): value is null => value === null\n\nexport const isObject = <T extends Dict>(value: any): value is T =>\n value !== null &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n !isArray(value)\n\nexport const isArray = <T extends any[]>(value: any): value is T =>\n Array.isArray(value)\n\nexport const isEmpty = (value: any): boolean =>\n !isArray(value) || !value.length || value.every((v) => v == null)\n\nexport const isFunction = <T extends Function = Function>(\n value: any,\n): value is T => typeof value === \"function\"\n\nexport const isUnit = (value: any): boolean =>\n /[0-9].*[px|rem|em|%|vw|vh]$/.test(value)\n\nexport const cast = <T>(value: any) => value as T\n"],"mappings":";AAEO,IAAM,WAAW,CAAC,UACvB,OAAO,UAAU;AAEZ,IAAM,cAAc,CAAC,UAC1B,OAAO,UAAU,YAAY,OAAO,MAAM,KAAK,KAAK,CAAC,OAAO,SAAS,KAAK;AAErE,IAAM,YAAY,CAAC,UACxB,SAAS,QACT,WAAW,MAAM,SAAS,CAAC,IAAI,WAAW,MAAM,SAAS,CAAC,IAAI,KAAK;AAE9D,IAAM,WAAW,CAAC,UACvB,OAAO,UAAU,SAAS,KAAK,KAAK,MAAM;AAErC,IAAM,cAAc,CAAC,UAC1B,OAAO,UAAU,eAAe,UAAU;AAErC,IAAM,SAAS,CAAC,UAA8B,UAAU;AAExD,IAAM,WAAW,CAAiB,UACvC,UAAU,SACT,OAAO,UAAU,YAAY,OAAO,UAAU,eAC/C,CAAC,QAAQ,KAAK;AAET,IAAM,UAAU,CAAkB,UACvC,MAAM,QAAQ,KAAK;AAEd,IAAM,UAAU,CAAC,UACtB,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM,UAAU,MAAM,MAAM,CAAC,MAAM,KAAK,IAAI;AAE3D,IAAM,aAAa,CACxB,UACe,OAAO,UAAU;AAE3B,IAAM,SAAS,CAAC,UACrB,8BAA8B,KAAK,KAAK;AAEnC,IAAM,OAAO,CAAI,UAAe;","names":[]}