@yamada-ui/utils 2.1.3-next-20260421164002 → 2.1.3

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.
Files changed (54) hide show
  1. package/dist/cjs/_virtual/{rolldown_runtime.cjs → _rolldown/runtime.cjs} +8 -14
  2. package/dist/cjs/array.cjs +2 -3
  3. package/dist/cjs/array.cjs.map +1 -1
  4. package/dist/cjs/assertion.cjs +1 -2
  5. package/dist/cjs/assertion.cjs.map +1 -1
  6. package/dist/cjs/calc.cjs +1 -2
  7. package/dist/cjs/calc.cjs.map +1 -1
  8. package/dist/cjs/color.cjs +5 -6
  9. package/dist/cjs/color.cjs.map +1 -1
  10. package/dist/cjs/dom.cjs +10 -11
  11. package/dist/cjs/dom.cjs.map +1 -1
  12. package/dist/cjs/event.cjs +4 -5
  13. package/dist/cjs/event.cjs.map +1 -1
  14. package/dist/cjs/function.cjs +2 -3
  15. package/dist/cjs/function.cjs.map +1 -1
  16. package/dist/cjs/i18n.cjs +1 -2
  17. package/dist/cjs/i18n.cjs.map +1 -1
  18. package/dist/cjs/index.cjs +14 -14
  19. package/dist/cjs/module.cjs +3 -4
  20. package/dist/cjs/module.cjs.map +1 -1
  21. package/dist/cjs/number.cjs +1 -2
  22. package/dist/cjs/number.cjs.map +1 -1
  23. package/dist/cjs/object.cjs +4 -5
  24. package/dist/cjs/object.cjs.map +1 -1
  25. package/dist/cjs/string.cjs +2 -3
  26. package/dist/cjs/string.cjs.map +1 -1
  27. package/dist/esm/array.js +1 -2
  28. package/dist/esm/array.js.map +1 -1
  29. package/dist/esm/assertion.js +1 -1
  30. package/dist/esm/assertion.js.map +1 -1
  31. package/dist/esm/calc.js +1 -1
  32. package/dist/esm/calc.js.map +1 -1
  33. package/dist/esm/color.js +2 -3
  34. package/dist/esm/color.js.map +1 -1
  35. package/dist/esm/dom.js +7 -8
  36. package/dist/esm/dom.js.map +1 -1
  37. package/dist/esm/event.js +1 -2
  38. package/dist/esm/event.js.map +1 -1
  39. package/dist/esm/function.js +1 -2
  40. package/dist/esm/function.js.map +1 -1
  41. package/dist/esm/i18n.js +1 -1
  42. package/dist/esm/i18n.js.map +1 -1
  43. package/dist/esm/index.js +1 -2
  44. package/dist/esm/module.js +1 -1
  45. package/dist/esm/module.js.map +1 -1
  46. package/dist/esm/number.js +1 -1
  47. package/dist/esm/number.js.map +1 -1
  48. package/dist/esm/object.js +3 -4
  49. package/dist/esm/object.js.map +1 -1
  50. package/dist/esm/string.js +1 -2
  51. package/dist/esm/string.js.map +1 -1
  52. package/dist/types/color.d.ts +1 -1
  53. package/dist/types/index.types.d.ts +5 -5
  54. package/package.json +21 -4
@@ -1,4 +1,4 @@
1
- //#region rolldown:runtime
1
+ //#region \0rolldown/runtime.js
2
2
  var __create = Object.create;
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -6,16 +6,12 @@ var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
8
  var __copyProps = (to, from, except, desc) => {
9
- if (from && typeof from === "object" || typeof from === "function") {
10
- for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
11
- key = keys[i];
12
- if (!__hasOwnProp.call(to, key) && key !== except) {
13
- __defProp(to, key, {
14
- get: ((k) => from[k]).bind(null, key),
15
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
- });
17
- }
18
- }
9
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
10
+ key = keys[i];
11
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
12
+ get: ((k) => from[k]).bind(null, key),
13
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
14
+ });
19
15
  }
20
16
  return to;
21
17
  };
@@ -23,7 +19,5 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
23
19
  value: mod,
24
20
  enumerable: true
25
21
  }) : target, mod));
26
-
27
22
  //#endregion
28
-
29
- exports.__toESM = __toESM;
23
+ exports.__toESM = __toESM;
@@ -1,5 +1,4 @@
1
- const require_assertion = require('./assertion.cjs');
2
-
1
+ const require_assertion = require("./assertion.cjs");
3
2
  //#region src/array.ts
4
3
  function filterEmpty(array) {
5
4
  return array.filter((value) => value != null && !require_assertion.isEmptyObject(value));
@@ -7,8 +6,8 @@ function filterEmpty(array) {
7
6
  function toArray(mixedArray) {
8
7
  return (Array.isArray(mixedArray) ? mixedArray.flat() : [mixedArray]).filter(Boolean);
9
8
  }
10
-
11
9
  //#endregion
12
10
  exports.filterEmpty = filterEmpty;
13
11
  exports.toArray = toArray;
12
+
14
13
  //# sourceMappingURL=array.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"array.cjs","names":["isEmptyObject"],"sources":["../../src/array.ts"],"sourcesContent":["import { isEmptyObject } from \"./assertion\"\n\nexport function filterEmpty<Y>(array: Y[]): Exclude<Y, null | undefined>[] {\n return array.filter(\n (value) => value != null && !isEmptyObject(value),\n ) as Exclude<Y, null | undefined>[]\n}\n\nexport function toArray<Y>(mixedArray: Y) {\n return (Array.isArray(mixedArray) ? mixedArray.flat() : [mixedArray]).filter(\n Boolean,\n ) as Y extends any[]\n ? Exclude<Y[number], null | undefined>[]\n : Exclude<Y, null | undefined>[]\n}\n"],"mappings":";;;AAEA,SAAgB,YAAe,OAA4C;AACzE,QAAO,MAAM,QACV,UAAU,SAAS,QAAQ,CAACA,gCAAc,MAAM,CAClD;;AAGH,SAAgB,QAAW,YAAe;AACxC,SAAQ,MAAM,QAAQ,WAAW,GAAG,WAAW,MAAM,GAAG,CAAC,WAAW,EAAE,OACpE,QACD"}
1
+ {"version":3,"file":"array.cjs","names":["isEmptyObject"],"sources":["../../src/array.ts"],"sourcesContent":["import { isEmptyObject } from \"./assertion\"\n\nexport function filterEmpty<Y>(array: Y[]): Exclude<Y, null | undefined>[] {\n return array.filter(\n (value) => value != null && !isEmptyObject(value),\n ) as Exclude<Y, null | undefined>[]\n}\n\nexport function toArray<Y>(mixedArray: Y) {\n return (Array.isArray(mixedArray) ? mixedArray.flat() : [mixedArray]).filter(\n Boolean,\n ) as Y extends any[]\n ? Exclude<Y[number], null | undefined>[]\n : Exclude<Y, null | undefined>[]\n}\n"],"mappings":";;AAEA,SAAgB,YAAe,OAA4C;CACzE,OAAO,MAAM,QACV,UAAU,SAAS,QAAQ,CAACA,kBAAAA,cAAc,MAAM,CAClD;;AAGH,SAAgB,QAAW,YAAe;CACxC,QAAQ,MAAM,QAAQ,WAAW,GAAG,WAAW,MAAM,GAAG,CAAC,WAAW,EAAE,OACpE,QACD"}
@@ -1,4 +1,3 @@
1
-
2
1
  //#region src/assertion.ts
3
2
  function is(x, y) {
4
3
  return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y;
@@ -54,7 +53,6 @@ function isUnit(value) {
54
53
  function cast(value) {
55
54
  return value;
56
55
  }
57
-
58
56
  //#endregion
59
57
  exports.cast = cast;
60
58
  exports.is = is;
@@ -74,4 +72,5 @@ exports.isRegExp = isRegExp;
74
72
  exports.isString = isString;
75
73
  exports.isUndefined = isUndefined;
76
74
  exports.isUnit = isUnit;
75
+
77
76
  //# sourceMappingURL=assertion.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"assertion.cjs","names":[],"sources":["../../src/assertion.ts"],"sourcesContent":["import type { Dict } from \"./index.types\"\n\nexport function is(x: any, y: any) {\n return (x === y && (x !== 0 || 1 / x === 1 / y)) || (x !== x && y !== y)\n}\n\nexport function isNumber(value: any): value is number {\n return typeof value === \"number\"\n}\n\nexport function isNotNumber(value: any): boolean {\n return (\n typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value)\n )\n}\n\nexport function isNumeric(value: any): boolean {\n return (\n !isNaN(parseFloat(String(value))) &&\n isFinite(Number(value)) &&\n /^-?\\d*\\.?\\d+$/.test(String(value))\n )\n}\n\nexport function isString(value: any): value is string {\n return Object.prototype.toString.call(value) === \"[object String]\"\n}\n\nexport function isBooleanish(value: any): value is boolean {\n return isBoolean(value) || value === \"true\" || value === \"false\"\n}\n\nexport function isBoolean(value: any): value is boolean {\n return typeof value === \"boolean\"\n}\n\nexport function isUndefined(value: any): value is undefined {\n return typeof value === \"undefined\"\n}\n\nexport function isNull(value: any): value is null {\n return value === null\n}\n\nexport function isRegExp(value: any): value is RegExp {\n return value instanceof RegExp\n}\n\nexport function isObject<Y extends Dict>(value: any): value is Y {\n return (\n value != null &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n !isArray(value)\n )\n}\n\nexport function isDate(value: any): value is Date {\n return value instanceof Date\n}\nexport function isArray<Y extends any[]>(value: any): value is Y {\n return Array.isArray(value)\n}\n\nexport function isEmpty(value: any): boolean {\n return !isArray(value) || !value.length || value.every((v) => v == null)\n}\n\nexport function isEmptyObject(value: any): boolean {\n return isObject(value) && !Object.keys(value).length\n}\n\nexport function isFunction<Y extends Function = Function>(\n value: any,\n): value is Y {\n return typeof value === \"function\"\n}\n\nexport function isUnit(value: any): boolean {\n return /[0-9].*(em|rem|ex|rex|cap|rcap|ch|rch|ic|ric|lh|rlh|vw|svw|lvw|dvw|vh|svh|lvh|dvh|vi|svi|lvi|dvi|vb|svb|lvb|dvb|vmin|svmin|lvmin|dvmin|vmax|svmax|lvmax|dvmax|cm|mm|Q|in|pc|pt|px|%|cqw|cqh|cqi|cqb|cqmin|cqmax)$/.test(\n value,\n )\n}\n\nexport function cast<Y>(value: any) {\n return value as Y\n}\n"],"mappings":";;AAEA,SAAgB,GAAG,GAAQ,GAAQ;AACjC,QAAQ,MAAM,MAAM,MAAM,KAAK,IAAI,MAAM,IAAI,MAAQ,MAAM,KAAK,MAAM;;AAGxE,SAAgB,SAAS,OAA6B;AACpD,QAAO,OAAO,UAAU;;AAG1B,SAAgB,YAAY,OAAqB;AAC/C,QACE,OAAO,UAAU,YAAY,OAAO,MAAM,MAAM,IAAI,CAAC,OAAO,SAAS,MAAM;;AAI/E,SAAgB,UAAU,OAAqB;AAC7C,QACE,CAAC,MAAM,WAAW,OAAO,MAAM,CAAC,CAAC,IACjC,SAAS,OAAO,MAAM,CAAC,IACvB,gBAAgB,KAAK,OAAO,MAAM,CAAC;;AAIvC,SAAgB,SAAS,OAA6B;AACpD,QAAO,OAAO,UAAU,SAAS,KAAK,MAAM,KAAK;;AAGnD,SAAgB,aAAa,OAA8B;AACzD,QAAO,UAAU,MAAM,IAAI,UAAU,UAAU,UAAU;;AAG3D,SAAgB,UAAU,OAA8B;AACtD,QAAO,OAAO,UAAU;;AAG1B,SAAgB,YAAY,OAAgC;AAC1D,QAAO,OAAO,UAAU;;AAG1B,SAAgB,OAAO,OAA2B;AAChD,QAAO,UAAU;;AAGnB,SAAgB,SAAS,OAA6B;AACpD,QAAO,iBAAiB;;AAG1B,SAAgB,SAAyB,OAAwB;AAC/D,QACE,SAAS,SACR,OAAO,UAAU,YAAY,OAAO,UAAU,eAC/C,CAAC,QAAQ,MAAM;;AAInB,SAAgB,OAAO,OAA2B;AAChD,QAAO,iBAAiB;;AAE1B,SAAgB,QAAyB,OAAwB;AAC/D,QAAO,MAAM,QAAQ,MAAM;;AAG7B,SAAgB,QAAQ,OAAqB;AAC3C,QAAO,CAAC,QAAQ,MAAM,IAAI,CAAC,MAAM,UAAU,MAAM,OAAO,MAAM,KAAK,KAAK;;AAG1E,SAAgB,cAAc,OAAqB;AACjD,QAAO,SAAS,MAAM,IAAI,CAAC,OAAO,KAAK,MAAM,CAAC;;AAGhD,SAAgB,WACd,OACY;AACZ,QAAO,OAAO,UAAU;;AAG1B,SAAgB,OAAO,OAAqB;AAC1C,QAAO,oNAAoN,KACzN,MACD;;AAGH,SAAgB,KAAQ,OAAY;AAClC,QAAO"}
1
+ {"version":3,"file":"assertion.cjs","names":[],"sources":["../../src/assertion.ts"],"sourcesContent":["import type { Dict } from \"./index.types\"\n\nexport function is(x: any, y: any) {\n return (x === y && (x !== 0 || 1 / x === 1 / y)) || (x !== x && y !== y)\n}\n\nexport function isNumber(value: any): value is number {\n return typeof value === \"number\"\n}\n\nexport function isNotNumber(value: any): boolean {\n return (\n typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value)\n )\n}\n\nexport function isNumeric(value: any): boolean {\n return (\n !isNaN(parseFloat(String(value))) &&\n isFinite(Number(value)) &&\n /^-?\\d*\\.?\\d+$/.test(String(value))\n )\n}\n\nexport function isString(value: any): value is string {\n return Object.prototype.toString.call(value) === \"[object String]\"\n}\n\nexport function isBooleanish(value: any): value is boolean {\n return isBoolean(value) || value === \"true\" || value === \"false\"\n}\n\nexport function isBoolean(value: any): value is boolean {\n return typeof value === \"boolean\"\n}\n\nexport function isUndefined(value: any): value is undefined {\n return typeof value === \"undefined\"\n}\n\nexport function isNull(value: any): value is null {\n return value === null\n}\n\nexport function isRegExp(value: any): value is RegExp {\n return value instanceof RegExp\n}\n\nexport function isObject<Y extends Dict>(value: any): value is Y {\n return (\n value != null &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n !isArray(value)\n )\n}\n\nexport function isDate(value: any): value is Date {\n return value instanceof Date\n}\nexport function isArray<Y extends any[]>(value: any): value is Y {\n return Array.isArray(value)\n}\n\nexport function isEmpty(value: any): boolean {\n return !isArray(value) || !value.length || value.every((v) => v == null)\n}\n\nexport function isEmptyObject(value: any): boolean {\n return isObject(value) && !Object.keys(value).length\n}\n\nexport function isFunction<Y extends Function = Function>(\n value: any,\n): value is Y {\n return typeof value === \"function\"\n}\n\nexport function isUnit(value: any): boolean {\n return /[0-9].*(em|rem|ex|rex|cap|rcap|ch|rch|ic|ric|lh|rlh|vw|svw|lvw|dvw|vh|svh|lvh|dvh|vi|svi|lvi|dvi|vb|svb|lvb|dvb|vmin|svmin|lvmin|dvmin|vmax|svmax|lvmax|dvmax|cm|mm|Q|in|pc|pt|px|%|cqw|cqh|cqi|cqb|cqmin|cqmax)$/.test(\n value,\n )\n}\n\nexport function cast<Y>(value: any) {\n return value as Y\n}\n"],"mappings":";AAEA,SAAgB,GAAG,GAAQ,GAAQ;CACjC,OAAQ,MAAM,MAAM,MAAM,KAAK,IAAI,MAAM,IAAI,MAAQ,MAAM,KAAK,MAAM;;AAGxE,SAAgB,SAAS,OAA6B;CACpD,OAAO,OAAO,UAAU;;AAG1B,SAAgB,YAAY,OAAqB;CAC/C,OACE,OAAO,UAAU,YAAY,OAAO,MAAM,MAAM,IAAI,CAAC,OAAO,SAAS,MAAM;;AAI/E,SAAgB,UAAU,OAAqB;CAC7C,OACE,CAAC,MAAM,WAAW,OAAO,MAAM,CAAC,CAAC,IACjC,SAAS,OAAO,MAAM,CAAC,IACvB,gBAAgB,KAAK,OAAO,MAAM,CAAC;;AAIvC,SAAgB,SAAS,OAA6B;CACpD,OAAO,OAAO,UAAU,SAAS,KAAK,MAAM,KAAK;;AAGnD,SAAgB,aAAa,OAA8B;CACzD,OAAO,UAAU,MAAM,IAAI,UAAU,UAAU,UAAU;;AAG3D,SAAgB,UAAU,OAA8B;CACtD,OAAO,OAAO,UAAU;;AAG1B,SAAgB,YAAY,OAAgC;CAC1D,OAAO,OAAO,UAAU;;AAG1B,SAAgB,OAAO,OAA2B;CAChD,OAAO,UAAU;;AAGnB,SAAgB,SAAS,OAA6B;CACpD,OAAO,iBAAiB;;AAG1B,SAAgB,SAAyB,OAAwB;CAC/D,OACE,SAAS,SACR,OAAO,UAAU,YAAY,OAAO,UAAU,eAC/C,CAAC,QAAQ,MAAM;;AAInB,SAAgB,OAAO,OAA2B;CAChD,OAAO,iBAAiB;;AAE1B,SAAgB,QAAyB,OAAwB;CAC/D,OAAO,MAAM,QAAQ,MAAM;;AAG7B,SAAgB,QAAQ,OAAqB;CAC3C,OAAO,CAAC,QAAQ,MAAM,IAAI,CAAC,MAAM,UAAU,MAAM,OAAO,MAAM,KAAK,KAAK;;AAG1E,SAAgB,cAAc,OAAqB;CACjD,OAAO,SAAS,MAAM,IAAI,CAAC,OAAO,KAAK,MAAM,CAAC;;AAGhD,SAAgB,WACd,OACY;CACZ,OAAO,OAAO,UAAU;;AAG1B,SAAgB,OAAO,OAAqB;CAC1C,OAAO,oNAAoN,KACzN,MACD;;AAGH,SAAgB,KAAQ,OAAY;CAClC,OAAO"}
package/dist/cjs/calc.cjs CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  //#region src/calc.ts
3
2
  function toExpression(operator, ...args) {
4
3
  return args.join(` ${operator} `).replace(/calc/g, "");
@@ -33,7 +32,7 @@ const calc = Object.assign((x) => ({
33
32
  negate,
34
33
  subtract
35
34
  });
36
-
37
35
  //#endregion
38
36
  exports.calc = calc;
37
+
39
38
  //# sourceMappingURL=calc.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"calc.cjs","names":[],"sources":["../../src/calc.ts"],"sourcesContent":["type Operator = \"*\" | \"+\" | \"-\" | \"/\"\ntype Operand = number | string\n\nfunction toExpression(operator: Operator, ...args: Operand[]) {\n return args.join(` ${operator} `).replace(/calc/g, \"\")\n}\n\nfunction add(...args: Operand[]) {\n return `calc(${toExpression(\"+\", ...args)})`\n}\n\nfunction subtract(...args: Operand[]) {\n return `calc(${toExpression(\"-\", ...args)})`\n}\n\nfunction multiply(...args: Operand[]) {\n return `calc(${toExpression(\"*\", ...args)})`\n}\n\nfunction divide(...args: Operand[]) {\n return `calc(${toExpression(\"/\", ...args)})`\n}\n\nfunction negate(value: Operand) {\n if (!isNaN(parseFloat(value.toString())))\n return String(value).startsWith(\"-\") ? String(value).slice(1) : `-${value}`\n\n return multiply(value, -1)\n}\n\ninterface Calc {\n add: (...args: Operand[]) => Calc\n divide: (...args: Operand[]) => Calc\n multiply: (...args: Operand[]) => Calc\n negate: () => Calc\n subtract: (...args: Operand[]) => Calc\n toString: () => string\n}\n\nexport const calc = Object.assign(\n (x: Operand): Calc => ({\n add: (...args) => calc(add(x, ...args)),\n divide: (...args) => calc(divide(x, ...args)),\n multiply: (...args) => calc(multiply(x, ...args)),\n negate: () => calc(negate(x)),\n subtract: (...args) => calc(subtract(x, ...args)),\n toString: () => x.toString(),\n }),\n {\n add,\n divide,\n multiply,\n negate,\n subtract,\n },\n)\n"],"mappings":";;AAGA,SAAS,aAAa,UAAoB,GAAG,MAAiB;AAC5D,QAAO,KAAK,KAAK,IAAI,SAAS,GAAG,CAAC,QAAQ,SAAS,GAAG;;AAGxD,SAAS,IAAI,GAAG,MAAiB;AAC/B,QAAO,QAAQ,aAAa,KAAK,GAAG,KAAK,CAAC;;AAG5C,SAAS,SAAS,GAAG,MAAiB;AACpC,QAAO,QAAQ,aAAa,KAAK,GAAG,KAAK,CAAC;;AAG5C,SAAS,SAAS,GAAG,MAAiB;AACpC,QAAO,QAAQ,aAAa,KAAK,GAAG,KAAK,CAAC;;AAG5C,SAAS,OAAO,GAAG,MAAiB;AAClC,QAAO,QAAQ,aAAa,KAAK,GAAG,KAAK,CAAC;;AAG5C,SAAS,OAAO,OAAgB;AAC9B,KAAI,CAAC,MAAM,WAAW,MAAM,UAAU,CAAC,CAAC,CACtC,QAAO,OAAO,MAAM,CAAC,WAAW,IAAI,GAAG,OAAO,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI;AAEtE,QAAO,SAAS,OAAO,GAAG;;AAY5B,MAAa,OAAO,OAAO,QACxB,OAAsB;CACrB,MAAM,GAAG,SAAS,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC;CACvC,SAAS,GAAG,SAAS,KAAK,OAAO,GAAG,GAAG,KAAK,CAAC;CAC7C,WAAW,GAAG,SAAS,KAAK,SAAS,GAAG,GAAG,KAAK,CAAC;CACjD,cAAc,KAAK,OAAO,EAAE,CAAC;CAC7B,WAAW,GAAG,SAAS,KAAK,SAAS,GAAG,GAAG,KAAK,CAAC;CACjD,gBAAgB,EAAE,UAAU;CAC7B,GACD;CACE;CACA;CACA;CACA;CACA;CACD,CACF"}
1
+ {"version":3,"file":"calc.cjs","names":[],"sources":["../../src/calc.ts"],"sourcesContent":["type Operator = \"*\" | \"+\" | \"-\" | \"/\"\ntype Operand = number | string\n\nfunction toExpression(operator: Operator, ...args: Operand[]) {\n return args.join(` ${operator} `).replace(/calc/g, \"\")\n}\n\nfunction add(...args: Operand[]) {\n return `calc(${toExpression(\"+\", ...args)})`\n}\n\nfunction subtract(...args: Operand[]) {\n return `calc(${toExpression(\"-\", ...args)})`\n}\n\nfunction multiply(...args: Operand[]) {\n return `calc(${toExpression(\"*\", ...args)})`\n}\n\nfunction divide(...args: Operand[]) {\n return `calc(${toExpression(\"/\", ...args)})`\n}\n\nfunction negate(value: Operand) {\n if (!isNaN(parseFloat(value.toString())))\n return String(value).startsWith(\"-\") ? String(value).slice(1) : `-${value}`\n\n return multiply(value, -1)\n}\n\ninterface Calc {\n add: (...args: Operand[]) => Calc\n divide: (...args: Operand[]) => Calc\n multiply: (...args: Operand[]) => Calc\n negate: () => Calc\n subtract: (...args: Operand[]) => Calc\n toString: () => string\n}\n\nexport const calc = Object.assign(\n (x: Operand): Calc => ({\n add: (...args) => calc(add(x, ...args)),\n divide: (...args) => calc(divide(x, ...args)),\n multiply: (...args) => calc(multiply(x, ...args)),\n negate: () => calc(negate(x)),\n subtract: (...args) => calc(subtract(x, ...args)),\n toString: () => x.toString(),\n }),\n {\n add,\n divide,\n multiply,\n negate,\n subtract,\n },\n)\n"],"mappings":";AAGA,SAAS,aAAa,UAAoB,GAAG,MAAiB;CAC5D,OAAO,KAAK,KAAK,IAAI,SAAS,GAAG,CAAC,QAAQ,SAAS,GAAG;;AAGxD,SAAS,IAAI,GAAG,MAAiB;CAC/B,OAAO,QAAQ,aAAa,KAAK,GAAG,KAAK,CAAC;;AAG5C,SAAS,SAAS,GAAG,MAAiB;CACpC,OAAO,QAAQ,aAAa,KAAK,GAAG,KAAK,CAAC;;AAG5C,SAAS,SAAS,GAAG,MAAiB;CACpC,OAAO,QAAQ,aAAa,KAAK,GAAG,KAAK,CAAC;;AAG5C,SAAS,OAAO,GAAG,MAAiB;CAClC,OAAO,QAAQ,aAAa,KAAK,GAAG,KAAK,CAAC;;AAG5C,SAAS,OAAO,OAAgB;CAC9B,IAAI,CAAC,MAAM,WAAW,MAAM,UAAU,CAAC,CAAC,EACtC,OAAO,OAAO,MAAM,CAAC,WAAW,IAAI,GAAG,OAAO,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI;CAEtE,OAAO,SAAS,OAAO,GAAG;;AAY5B,MAAa,OAAO,OAAO,QACxB,OAAsB;CACrB,MAAM,GAAG,SAAS,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC;CACvC,SAAS,GAAG,SAAS,KAAK,OAAO,GAAG,GAAG,KAAK,CAAC;CAC7C,WAAW,GAAG,SAAS,KAAK,SAAS,GAAG,GAAG,KAAK,CAAC;CACjD,cAAc,KAAK,OAAO,EAAE,CAAC;CAC7B,WAAW,GAAG,SAAS,KAAK,SAAS,GAAG,GAAG,KAAK,CAAC;CACjD,gBAAgB,EAAE,UAAU;CAC7B,GACD;CACE;CACA;CACA;CACA;CACA;CACD,CACF"}
@@ -1,8 +1,7 @@
1
- const require_rolldown_runtime = require('./_virtual/rolldown_runtime.cjs');
2
- const require_assertion = require('./assertion.cjs');
1
+ const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
2
+ const require_assertion = require("./assertion.cjs");
3
3
  let color2k = require("color2k");
4
- color2k = require_rolldown_runtime.__toESM(color2k);
5
-
4
+ color2k = require_runtime.__toESM(color2k, 1);
6
5
  //#region src/color.ts
7
6
  const SEMANTIC_COLOR_SCHEMES = [
8
7
  "mono",
@@ -212,7 +211,7 @@ function hsvTo([h, s, v, a], fallback) {
212
211
  ];
213
212
  break;
214
213
  }
215
- let color = `rgb(${rgb.map((v$1) => Math.round(v$1 * 255)).join(", ")})`;
214
+ let color = `rgb(${rgb.map((v) => Math.round(v * 255)).join(", ")})`;
216
215
  if (require_assertion.isNumber(a)) color = color.replace(/\)$/, `, ${a})`);
217
216
  return convertColor(color, fallback)(format);
218
217
  };
@@ -224,7 +223,6 @@ function sameColor(color, comparison) {
224
223
  const b = parseToRgba(comparison) ?? [];
225
224
  return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];
226
225
  }
227
-
228
226
  //#endregion
229
227
  exports.COLOR_SCHEMES = COLOR_SCHEMES;
230
228
  exports.DEFAULT_COLOR_SCHEMES = DEFAULT_COLOR_SCHEMES;
@@ -241,4 +239,5 @@ exports.parseToHsv = parseToHsv;
241
239
  exports.parseToRgba = parseToRgba;
242
240
  exports.rgbaTo = rgbaTo;
243
241
  exports.sameColor = sameColor;
242
+
244
243
  //# sourceMappingURL=color.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"color.cjs","names":["c","rgb: [number, number, number]","v","isNumber"],"sources":["../../src/color.ts"],"sourcesContent":["import * as c from \"color2k\"\nimport { isNumber } from \"./assertion\"\n\nexport type ColorFormat = \"hex\" | \"hexa\" | \"hsl\" | \"hsla\" | \"rgb\" | \"rgba\"\n\nexport const SEMANTIC_COLOR_SCHEMES = [\n \"mono\",\n \"primary\",\n \"secondary\",\n \"info\",\n \"success\",\n \"warning\",\n \"danger\",\n \"error\",\n \"link\",\n] as const\n\nexport const DEFAULT_COLOR_SCHEMES = [\n \"gray\",\n \"red\",\n \"rose\",\n \"pink\",\n \"flashy\",\n \"orange\",\n \"amber\",\n \"yellow\",\n \"lime\",\n \"green\",\n \"emerald\",\n \"teal\",\n \"cyan\",\n \"sky\",\n \"blue\",\n \"indigo\",\n \"violet\",\n \"purple\",\n \"fuchsia\",\n] as const\n\nexport const COLOR_SCHEMES = [\n ...SEMANTIC_COLOR_SCHEMES,\n ...DEFAULT_COLOR_SCHEMES,\n]\n\nexport const TONES = [\n 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950,\n] as const\n\nexport function convertColor(\n color: string,\n fallback: string,\n): {\n (format: ColorFormat): string\n}\nexport function convertColor(\n color: string,\n fallback?: string,\n): {\n (format: ColorFormat): string | undefined\n}\nexport function convertColor(color: string, fallback?: string) {\n return function (format: ColorFormat) {\n try {\n const alpha = 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 (alpha) {\n if (hexa.length === 7) hexa += \"ff\"\n } else {\n hexa = hexa.replace(/^#([0-9a-fA-F]{6})[0-9a-fA-F]{2}$/, \"#$1\")\n }\n\n return hexa\n } else if (format.startsWith(\"hsl\")) {\n let hsla = c.toHsla(color)\n\n if (!alpha) {\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 (!alpha) {\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}\n\nexport function calcFormat(color: string): ColorFormat {\n if (color.startsWith(\"hsl\") || color.startsWith(\"rgb\")) {\n return color.split(\"(\")[0] as ColorFormat\n } else {\n return color.length === 9 ? \"hexa\" : \"hex\"\n }\n}\n\nexport function getAlpha(color: string) {\n return c.parseToRgba(color)[3]\n}\n\nexport function 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 function parseToRgba(\n color: string,\n fallback: string,\n): [number, number, number, number]\nexport function parseToRgba(\n color: string,\n fallback?: string,\n): [number, number, number, number] | undefined\nexport function 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 function parseToHsla(\n color: string,\n fallback: string,\n): [number, number, number, number]\nexport function parseToHsla(\n color: string,\n fallback?: string,\n): [number, number, number, number] | undefined\nexport function 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 function parseToHsv(\n color: string,\n fallback: string,\n): [number, number, number, number]\nexport function parseToHsv(\n color: string,\n fallback?: string,\n): [number, number, number, number] | undefined\nexport function parseToHsv(color: string, fallback?: string) {\n const rgba = parseToRgba(color, fallback)\n\n if (!rgba) return undefined\n\n let [r, g, b, a] = rgba\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 function rgbaTo(\n [r, g, b, a]: [number, number, number, number],\n fallback: string,\n): {\n (format?: ColorFormat): string\n}\nexport function rgbaTo(\n [r, g, b, a]: [number, number, number, number],\n fallback?: string,\n): {\n (format?: ColorFormat): string | undefined\n}\nexport function rgbaTo(\n [r, g, b, a]: [number, number, number, number],\n fallback?: string,\n): (format?: ColorFormat) => string | undefined {\n return function (format: ColorFormat = \"hex\") {\n return convertColor(c.rgba(r, g, b, a), fallback)(format)\n }\n}\n\nexport function hslaTo(\n [r, g, b, a]: [number, number, number, number],\n fallback: string,\n): {\n (format?: ColorFormat): string\n}\nexport function hslaTo(\n [r, g, b, a]: [number, number, number, number],\n fallback?: string,\n): {\n (format?: ColorFormat): string | undefined\n}\nexport function hslaTo(\n [h, s, l, a]: [number, number, number, number],\n fallback?: string,\n): (format?: ColorFormat) => string | undefined {\n return function (format: ColorFormat = \"hex\") {\n return convertColor(c.hsla(h, s, l, a), fallback)(format)\n }\n}\n\nexport function hsvTo(\n [h, s, v, a]: [number, number, number, number?],\n fallback: string,\n): {\n (format?: ColorFormat): string\n}\nexport function hsvTo(\n [h, s, v, a]: [number, number, number, number?],\n fallback?: string,\n): {\n (format?: ColorFormat): string | undefined\n}\nexport function hsvTo(\n [h, s, v, a]: [number, number, number, number?],\n fallback?: string,\n): (format?: ColorFormat) => string | undefined {\n return function (format: ColorFormat = \"hex\") {\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}\n\nexport function 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"],"mappings":"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"}
1
+ {"version":3,"file":"color.cjs","names":["c","isNumber"],"sources":["../../src/color.ts"],"sourcesContent":["import * as c from \"color2k\"\nimport { isNumber } from \"./assertion\"\n\nexport type ColorFormat = \"hex\" | \"hexa\" | \"hsl\" | \"hsla\" | \"rgb\" | \"rgba\"\n\nexport const SEMANTIC_COLOR_SCHEMES = [\n \"mono\",\n \"primary\",\n \"secondary\",\n \"info\",\n \"success\",\n \"warning\",\n \"danger\",\n \"error\",\n \"link\",\n] as const\n\nexport const DEFAULT_COLOR_SCHEMES = [\n \"gray\",\n \"red\",\n \"rose\",\n \"pink\",\n \"flashy\",\n \"orange\",\n \"amber\",\n \"yellow\",\n \"lime\",\n \"green\",\n \"emerald\",\n \"teal\",\n \"cyan\",\n \"sky\",\n \"blue\",\n \"indigo\",\n \"violet\",\n \"purple\",\n \"fuchsia\",\n] as const\n\nexport const COLOR_SCHEMES = [\n ...SEMANTIC_COLOR_SCHEMES,\n ...DEFAULT_COLOR_SCHEMES,\n]\n\nexport const TONES = [\n 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950,\n] as const\n\nexport function convertColor(\n color: string,\n fallback: string,\n): {\n (format: ColorFormat): string\n}\nexport function convertColor(\n color: string,\n fallback?: string,\n): {\n (format: ColorFormat): string | undefined\n}\nexport function convertColor(color: string, fallback?: string) {\n return function (format: ColorFormat) {\n try {\n const alpha = 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 (alpha) {\n if (hexa.length === 7) hexa += \"ff\"\n } else {\n hexa = hexa.replace(/^#([0-9a-fA-F]{6})[0-9a-fA-F]{2}$/, \"#$1\")\n }\n\n return hexa\n } else if (format.startsWith(\"hsl\")) {\n let hsla = c.toHsla(color)\n\n if (!alpha) {\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 (!alpha) {\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}\n\nexport function calcFormat(color: string): ColorFormat {\n if (color.startsWith(\"hsl\") || color.startsWith(\"rgb\")) {\n return color.split(\"(\")[0] as ColorFormat\n } else {\n return color.length === 9 ? \"hexa\" : \"hex\"\n }\n}\n\nexport function getAlpha(color: string) {\n return c.parseToRgba(color)[3]\n}\n\nexport function 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 function parseToRgba(\n color: string,\n fallback: string,\n): [number, number, number, number]\nexport function parseToRgba(\n color: string,\n fallback?: string,\n): [number, number, number, number] | undefined\nexport function 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 function parseToHsla(\n color: string,\n fallback: string,\n): [number, number, number, number]\nexport function parseToHsla(\n color: string,\n fallback?: string,\n): [number, number, number, number] | undefined\nexport function 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 function parseToHsv(\n color: string,\n fallback: string,\n): [number, number, number, number]\nexport function parseToHsv(\n color: string,\n fallback?: string,\n): [number, number, number, number] | undefined\nexport function parseToHsv(color: string, fallback?: string) {\n const rgba = parseToRgba(color, fallback)\n\n if (!rgba) return undefined\n\n let [r, g, b, a] = rgba\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 function rgbaTo(\n [r, g, b, a]: [number, number, number, number],\n fallback: string,\n): {\n (format?: ColorFormat): string\n}\nexport function rgbaTo(\n [r, g, b, a]: [number, number, number, number],\n fallback?: string,\n): {\n (format?: ColorFormat): string | undefined\n}\nexport function rgbaTo(\n [r, g, b, a]: [number, number, number, number],\n fallback?: string,\n): (format?: ColorFormat) => string | undefined {\n return function (format: ColorFormat = \"hex\") {\n return convertColor(c.rgba(r, g, b, a), fallback)(format)\n }\n}\n\nexport function hslaTo(\n [r, g, b, a]: [number, number, number, number],\n fallback: string,\n): {\n (format?: ColorFormat): string\n}\nexport function hslaTo(\n [r, g, b, a]: [number, number, number, number],\n fallback?: string,\n): {\n (format?: ColorFormat): string | undefined\n}\nexport function hslaTo(\n [h, s, l, a]: [number, number, number, number],\n fallback?: string,\n): (format?: ColorFormat) => string | undefined {\n return function (format: ColorFormat = \"hex\") {\n return convertColor(c.hsla(h, s, l, a), fallback)(format)\n }\n}\n\nexport function hsvTo(\n [h, s, v, a]: [number, number, number, number?],\n fallback: string,\n): {\n (format?: ColorFormat): string\n}\nexport function hsvTo(\n [h, s, v, a]: [number, number, number, number?],\n fallback?: string,\n): {\n (format?: ColorFormat): string | undefined\n}\nexport function hsvTo(\n [h, s, v, a]: [number, number, number, number?],\n fallback?: string,\n): (format?: ColorFormat) => string | undefined {\n return function (format: ColorFormat = \"hex\") {\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}\n\nexport function 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"],"mappings":"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"}
package/dist/cjs/dom.cjs CHANGED
@@ -1,7 +1,6 @@
1
- const require_assertion = require('./assertion.cjs');
2
- const require_function = require('./function.cjs');
3
- const require_string = require('./string.cjs');
4
-
1
+ const require_assertion = require("./assertion.cjs");
2
+ const require_function = require("./function.cjs");
3
+ const require_string = require("./string.cjs");
5
4
  //#region src/dom.ts
6
5
  function createdDom() {
7
6
  return !!(typeof window !== "undefined" && window.document?.createElement);
@@ -125,9 +124,9 @@ function getTabbableElements(el, includeEl) {
125
124
  const els = Array.from(el.querySelectorAll(focusableSelector));
126
125
  const tabbableEls = els.filter(isTabbableElement);
127
126
  if (includeEl && isTabbableElement(el)) tabbableEls.unshift(el);
128
- tabbableEls.forEach((el$1, i) => {
129
- if (isFrame(el$1) && el$1.contentDocument) {
130
- const frameBody = el$1.contentDocument.body;
127
+ tabbableEls.forEach((el, i) => {
128
+ if (isFrame(el) && el.contentDocument) {
129
+ const frameBody = el.contentDocument.body;
131
130
  const allFrameTabbable = getTabbableElements(frameBody);
132
131
  tabbableEls.splice(i, 1, ...allFrameTabbable);
133
132
  }
@@ -246,9 +245,9 @@ function getFocusableElements(el, includeEl = false) {
246
245
  const els = Array.from(el.querySelectorAll(focusableSelector));
247
246
  if (includeEl && isHTMLElement(el) && isFocusableElement(el)) els.unshift(el);
248
247
  const focusableEls = els.filter(isFocusableElement);
249
- focusableEls.forEach((el$1, i) => {
250
- if (isFrame(el$1) && el$1.contentDocument) {
251
- const frameBody = el$1.contentDocument.body;
248
+ focusableEls.forEach((el, i) => {
249
+ if (isFrame(el) && el.contentDocument) {
250
+ const frameBody = el.contentDocument.body;
252
251
  focusableEls.splice(i, 1, ...getFocusableElements(frameBody));
253
252
  }
254
253
  });
@@ -316,7 +315,6 @@ function scrollLock(el) {
316
315
  doc.body.removeAttribute(LOCK_DATA_ATTR);
317
316
  };
318
317
  }
319
-
320
318
  //#endregion
321
319
  exports.ariaAttr = ariaAttr;
322
320
  exports.contains = contains;
@@ -373,4 +371,5 @@ exports.setStyle = setStyle;
373
371
  exports.userAgent = userAgent;
374
372
  exports.uuid = uuid;
375
373
  exports.vendor = vendor;
374
+
376
375
  //# sourceMappingURL=dom.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dom.cjs","names":["isArray","isObject","el","next: Node | null | ShadowRoot","isNumber","isUndefined","cx","noop"],"sources":["../../src/dom.ts"],"sourcesContent":["import { isArray, isNumber, isObject, isUndefined } from \"./assertion\"\nimport { noop } from \"./function\"\nimport { cx } from \"./string\"\n\nexport function createdDom(): boolean {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return !!(typeof window !== \"undefined\" && window.document?.createElement)\n}\n\nexport function getPlatform(): string {\n return (navigator as any).userAgentData?.platform ?? navigator.platform\n}\n\nexport function getUserAgent(): string {\n const userAgentData = (navigator as any).userAgentData\n\n if (userAgentData && isArray(userAgentData.brands)) {\n return userAgentData.brands\n .map(\n ({ brand, version }: { brand: string; version: string }) =>\n `${brand}/${version}`,\n )\n .join(\" \")\n }\n\n return navigator.userAgent\n}\n\nexport function vendor(value: RegExp, fallback = false): boolean {\n return createdDom() ? value.test(navigator.vendor) : fallback\n}\n\nexport function platform(value: RegExp, fallback = false): boolean {\n return createdDom() ? value.test(getPlatform()) : fallback\n}\n\nexport function userAgent(value: RegExp, fallback = false): boolean {\n return createdDom() ? value.test(getUserAgent()) : fallback\n}\n\nexport function isMac(fallback = false): boolean {\n return platform(/^Mac/i, fallback)\n}\n\nexport function isIPhone(fallback = false): boolean {\n return platform(/^iPhone/i, fallback)\n}\n\nexport function isIPad(fallback = false): boolean {\n return (\n platform(/^iPad/i, fallback) ||\n (isMac(fallback) &&\n (createdDom() ? navigator.maxTouchPoints > 1 : fallback))\n )\n}\n\nexport function isIos(fallback = false): boolean {\n return isIPhone(fallback) || isIPad(fallback)\n}\n\nexport function isAndroid(fallback = false): boolean {\n return platform(/^Android/i, fallback)\n}\n\nexport function isApple(fallback = false): boolean {\n return isMac(fallback) || isIos(fallback)\n}\n\nexport function isSafari(fallback = false): boolean {\n return isApple(fallback) && vendor(/apple/i, fallback)\n}\n\nexport function isFirefox(fallback = false): boolean {\n return userAgent(/Firefox/i, fallback)\n}\n\nexport function isChrome(fallback = false): boolean {\n return userAgent(/Chrome/i, fallback)\n}\n\nexport function isWebKit(fallback = false): boolean {\n return userAgent(/AppleWebKit/i, fallback) && !isChrome()\n}\n\nexport function isHTMLElement(el: any): el is HTMLElement {\n return isNode(el) && el.nodeType === Node.ELEMENT_NODE\n}\n\nexport function isWindow(el: any): el is Window {\n return isObject(el) && el === el.window\n}\n\nexport function isDocument(el: any): el is Document {\n return isNode(el) && el.nodeType === Node.DOCUMENT_NODE\n}\n\nexport function isVisualViewport(el: any): el is VisualViewport {\n return isObject(el) && el.constructor.name === \"VisualViewport\"\n}\n\nexport function isNode(el: any): el is Node {\n return isObject(el) && el.nodeType !== undefined\n}\n\nexport function isShadowRoot(el: any): el is ShadowRoot {\n return (\n isNode(el) && el.nodeType === Node.DOCUMENT_FRAGMENT_NODE && \"host\" in el\n )\n}\n\nexport function isFrame(el: any): el is HTMLIFrameElement {\n return isHTMLElement(el) && el.tagName === \"IFRAME\"\n}\n\nexport function isActiveElement(\n el: HTMLElement,\n rootNode: Document | ShadowRoot,\n): boolean {\n return getActiveElement(rootNode) === el\n}\n\nexport function isHiddenElement(el: HTMLElement): boolean {\n if (el.parentElement && isHiddenElement(el.parentElement)) return true\n\n return Boolean(el.hidden)\n}\n\nexport function isDisabledElement(el: HTMLElement): boolean {\n return (\n Boolean(el.getAttribute(\"disabled\")) ||\n Boolean(el.getAttribute(\"data-disabled\")) ||\n Boolean(el.getAttribute(\"aria-disabled\"))\n )\n}\n\nexport function isVisibleElement(el?: Node): boolean {\n if (!isHTMLElement(el)) return false\n\n return (\n el.offsetWidth > 0 || el.offsetHeight > 0 || el.getClientRects().length > 0\n )\n}\n\nexport function isTouchDevice(): boolean {\n return \"ontouchstart\" in window\n}\n\nconst hasTabIndex = (el: Element): boolean =>\n !Number.isNaN(parseInt(el.getAttribute(\"tabindex\") || \"0\", 10))\n\nconst hasNegativeTabIndex = (el: Element): boolean =>\n parseInt(el.getAttribute(\"tabindex\") || \"0\", 10) < 0\n\nexport function getWindow(\n el: Document | Node | null | ShadowRoot | undefined,\n): typeof globalThis & Window {\n if (isShadowRoot(el)) return getWindow(el.host)\n if (isDocument(el)) return el.defaultView ?? window\n if (isHTMLElement(el)) return el.ownerDocument.defaultView ?? window\n\n return window\n}\n\nexport function getDocument(\n el: Document | Element | Node | null | undefined | Window,\n): Document {\n if (isDocument(el)) return el\n if (isWindow(el)) return el.document\n\n return el?.ownerDocument ?? document\n}\n\nexport function getDocumentElement(\n el: Document | Element | Node | null | undefined | Window,\n): HTMLElement {\n return getDocument(el).documentElement\n}\n\nexport function getNodeName(node: Node | Window): string {\n if (isHTMLElement(node)) return node.localName || \"\"\n\n return \"#document\"\n}\n\nexport function getActiveElement(\n rootNode: Document | ShadowRoot,\n): HTMLElement | null {\n let activeEl = rootNode.activeElement as HTMLElement | null\n\n while (activeEl?.shadowRoot) {\n const el = activeEl.shadowRoot.activeElement as HTMLElement | null\n\n if (el === activeEl) {\n break\n } else {\n activeEl = el\n }\n }\n\n return activeEl\n}\n\nexport function getTabbableElements(\n el: HTMLElement | null,\n includeEl?: boolean,\n) {\n if (!el) return []\n const els = Array.from(el.querySelectorAll<HTMLElement>(focusableSelector))\n const tabbableEls = els.filter(isTabbableElement)\n\n if (includeEl && isTabbableElement(el)) {\n tabbableEls.unshift(el)\n }\n\n tabbableEls.forEach((el, i) => {\n if (isFrame(el) && el.contentDocument) {\n const frameBody = el.contentDocument.body\n const allFrameTabbable = getTabbableElements(frameBody)\n tabbableEls.splice(i, 1, ...allFrameTabbable)\n }\n })\n\n if (!tabbableEls.length && includeEl) {\n return els\n }\n\n return tabbableEls\n}\n\nexport function getFirstTabbableElement(\n el: HTMLElement | null,\n includeEl?: boolean,\n): HTMLElement | null {\n const [first] = getTabbableElements(el, includeEl)\n\n return first || null\n}\n\nexport function getNextTabbableElement(\n el: HTMLElement | null,\n current?: HTMLElement | null,\n): HTMLElement | null {\n const els = getTabbableElements(el)\n const doc = el?.ownerDocument || document\n const currentElement = current ?? (doc.activeElement as HTMLElement | null)\n\n if (!currentElement) return null\n\n return els[els.indexOf(currentElement) + 1] || null\n}\n\nexport function getLastTabbableElement(\n el: HTMLElement | null,\n includeEl?: boolean,\n): HTMLElement | null {\n const els = getTabbableElements(el, includeEl)\n\n return els[els.length - 1] || null\n}\n\nexport function getTabbableElementEdges(\n el: HTMLElement | null,\n includeEl?: boolean,\n): [HTMLElement | null, HTMLElement | null] {\n const els = getTabbableElements(el, includeEl)\n const first = els[0] || null\n const last = els[els.length - 1] || null\n\n return [first, last]\n}\n\nexport function getParentNode(node: Node): Node {\n if (getNodeName(node) === \"html\") return node\n\n const result =\n (node as any).assignedSlot ||\n node.parentNode ||\n isShadowRoot(node) ||\n getDocumentElement(node)\n\n return isShadowRoot(result) ? result.host : result\n}\n\nexport function isInputElement(el: any): el is HTMLInputElement {\n return isHTMLElement(el) && el.localName === \"input\"\n}\n\nexport function isEditableElement(\n el: EventTarget | HTMLElement | null,\n): boolean {\n if (el == null || !isHTMLElement(el)) return false\n try {\n return (\n (isInputElement(el) && el.selectionStart != null) ||\n /(textarea|select)/.test(el.localName) ||\n el.isContentEditable ||\n el.getAttribute(\"contenteditable\") === \"true\" ||\n el.getAttribute(\"contenteditable\") === \"\"\n )\n } catch {\n return false\n }\n}\n\nexport function isFocusableElement(el: HTMLElement | null): el is HTMLElement {\n if (!el || el.closest(\"[inert]\")) return false\n\n return el.matches(focusableSelector) && isVisibleElement(el)\n}\n\nexport function isTabbableElement(el: HTMLElement | null): el is HTMLElement {\n if (el != null && el.tabIndex > 0) return true\n return isFocusableElement(el) && !hasNegativeTabIndex(el as Element)\n}\n\nexport function contains(\n parent?: EventTarget | HTMLElement | null,\n child?: EventTarget | HTMLElement | null,\n): boolean {\n if (!parent || !child) return false\n if (!isHTMLElement(parent) || !isHTMLElement(child)) return false\n\n const rootNode = child.getRootNode()\n\n if (parent === child) return true\n if (parent.contains(child)) return true\n\n if (isShadowRoot(rootNode)) {\n let next: Node | null | ShadowRoot = child\n\n while (next) {\n if (parent === next) return true\n\n next = next.parentNode ?? (isShadowRoot(next) ? next.host : null)\n }\n }\n\n return false\n}\n\nexport function getPx(value: number | string | 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 let fontSize = 16\n\n if (createdDom()) {\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 function getTabIndex(node: HTMLElement | SVGElement) {\n if (node.tabIndex < 0) {\n if (\n (/^(audio|video|details)$/.test(node.localName) ||\n isEditableElement(node)) &&\n !hasTabIndex(node)\n ) {\n return 0\n }\n }\n return node.tabIndex\n}\n\nexport function isTruthyDataAttr(condition: any): boolean {\n return condition === \"true\" || condition === true || condition === \"\"\n}\n\nexport function dataAttr(condition: any): string | undefined {\n return (condition ? \"\" : undefined) as string | undefined\n}\n\ntype Booleanish = \"false\" | \"true\" | boolean\n\nexport function ariaAttr(condition: any): Booleanish | undefined {\n if (condition === \"true\") return \"true\"\n if (condition === \"false\") return \"false\"\n\n return condition ? true : undefined\n}\n\nexport function uuid() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\"\n .replace(/x/g, () => Math.random().toString(16).slice(2, 3))\n .replace(/y/g, () => ((Math.random() * 4) | 0).toString(16))\n}\n\nconst focusableElList = [\n \"[tabindex]\",\n \"input:not([type='hidden']):not([disabled])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n \"button:not([disabled])\",\n \"iframe\",\n \"object\",\n \"embed\",\n \"a[href]\",\n \"area[href]\",\n \"audio[controls]\",\n \"video[controls]\",\n \"[contenteditable]:not([contenteditable='false'])\",\n \"details > summary:first-of-type\",\n]\n\nconst focusableSelector = focusableElList.join(\", \")\n\nexport function getFocusableElements(\n el: null | Pick<HTMLElement, \"querySelectorAll\">,\n includeEl = false,\n) {\n if (!el) return []\n const els = Array.from(el.querySelectorAll<HTMLElement>(focusableSelector))\n\n const include = includeEl\n\n if (include && isHTMLElement(el) && isFocusableElement(el)) {\n els.unshift(el)\n }\n\n const focusableEls = els.filter(isFocusableElement)\n\n focusableEls.forEach((el, i) => {\n if (isFrame(el) && el.contentDocument) {\n const frameBody = el.contentDocument.body\n\n focusableEls.splice(i, 1, ...getFocusableElements(frameBody))\n }\n })\n\n return focusableEls\n}\n\nexport function getFirstFocusableElement(\n el: HTMLElement | null,\n includeEl?: boolean,\n): HTMLElement | null {\n const [first] = getFocusableElements(el, includeEl)\n\n return first || null\n}\n\nexport function setAttribute(\n el: Element,\n qualifiedName: string,\n value?: string,\n) {\n const prev = el.getAttribute(qualifiedName)\n\n el.setAttribute(qualifiedName, cx(prev, value) ?? \"\")\n\n return () => {\n if (prev === null) {\n el.removeAttribute(qualifiedName)\n } else {\n el.setAttribute(qualifiedName, prev)\n }\n }\n}\n\nexport function setStyle(\n el: HTMLElement | null | undefined,\n style: Partial<\n CSSStyleDeclaration | { [key: `--${string}`]: number | string }\n >,\n) {\n if (!el) return noop\n\n const prev = Object.keys(style).reduce<{ [key: string]: string }>(\n (acc, key) => {\n acc[key] = el.style.getPropertyValue(key)\n\n return acc\n },\n {},\n )\n\n Object.assign(el.style, style)\n\n return () => {\n Object.assign(el.style, prev)\n\n if (el.style.length === 0) el.removeAttribute(\"style\")\n }\n}\n\nconst LOCK_DATA_ATTR = \"data-scroll-lock\"\n\nexport function scrollLock(\n el: Document | Element | Node | null | undefined | Window,\n) {\n const doc = getDocument(el)\n const win = getWindow(doc)\n\n const locked = doc.body.hasAttribute(LOCK_DATA_ATTR)\n\n if (locked) return\n\n const scrollbarWidth = win.innerWidth - doc.documentElement.clientWidth\n const documentLeft = doc.documentElement.getBoundingClientRect().left\n const scrollbarX = Math.round(documentLeft) + doc.documentElement.scrollLeft\n const paddingProperty = scrollbarX ? \"paddingLeft\" : \"paddingRight\"\n\n doc.body.setAttribute(LOCK_DATA_ATTR, \"\")\n\n const setStyleForIOS = () => {\n const offsetLeft = win.visualViewport?.offsetLeft ?? 0\n const offsetTop = win.visualViewport?.offsetTop ?? 0\n\n const restoreStyle = setStyle(doc.body, {\n left: `${-(win.scrollX - Math.floor(offsetLeft))}px`,\n overflow: \"hidden\",\n [paddingProperty]: `${scrollbarWidth}px`,\n position: \"fixed\",\n right: \"0\",\n top: `${-(win.scrollY - Math.floor(offsetTop))}px`,\n })\n\n return () => {\n restoreStyle()\n win.scrollTo({ behavior: \"instant\", left: win.scrollX, top: win.scrollY })\n }\n }\n\n const unsubscribes = [\n setStyle(doc.documentElement, {\n \"--scrollbar-width\": `${scrollbarWidth}px`,\n }),\n isIos()\n ? setStyleForIOS()\n : setStyle(doc.body, {\n overflow: \"hidden\",\n [paddingProperty]: `${scrollbarWidth}px`,\n }),\n ]\n\n return () => {\n unsubscribes.forEach((unsubscribe) => unsubscribe())\n\n doc.body.removeAttribute(LOCK_DATA_ATTR)\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"dom.cjs","names":["isArray","isObject","isNumber","isUndefined","include","cx","noop"],"sources":["../../src/dom.ts"],"sourcesContent":["import { isArray, isNumber, isObject, isUndefined } from \"./assertion\"\nimport { noop } from \"./function\"\nimport { cx } from \"./string\"\n\nexport function createdDom(): boolean {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return !!(typeof window !== \"undefined\" && window.document?.createElement)\n}\n\nexport function getPlatform(): string {\n return (navigator as any).userAgentData?.platform ?? navigator.platform\n}\n\nexport function getUserAgent(): string {\n const userAgentData = (navigator as any).userAgentData\n\n if (userAgentData && isArray(userAgentData.brands)) {\n return userAgentData.brands\n .map(\n ({ brand, version }: { brand: string; version: string }) =>\n `${brand}/${version}`,\n )\n .join(\" \")\n }\n\n return navigator.userAgent\n}\n\nexport function vendor(value: RegExp, fallback = false): boolean {\n return createdDom() ? value.test(navigator.vendor) : fallback\n}\n\nexport function platform(value: RegExp, fallback = false): boolean {\n return createdDom() ? value.test(getPlatform()) : fallback\n}\n\nexport function userAgent(value: RegExp, fallback = false): boolean {\n return createdDom() ? value.test(getUserAgent()) : fallback\n}\n\nexport function isMac(fallback = false): boolean {\n return platform(/^Mac/i, fallback)\n}\n\nexport function isIPhone(fallback = false): boolean {\n return platform(/^iPhone/i, fallback)\n}\n\nexport function isIPad(fallback = false): boolean {\n return (\n platform(/^iPad/i, fallback) ||\n (isMac(fallback) &&\n (createdDom() ? navigator.maxTouchPoints > 1 : fallback))\n )\n}\n\nexport function isIos(fallback = false): boolean {\n return isIPhone(fallback) || isIPad(fallback)\n}\n\nexport function isAndroid(fallback = false): boolean {\n return platform(/^Android/i, fallback)\n}\n\nexport function isApple(fallback = false): boolean {\n return isMac(fallback) || isIos(fallback)\n}\n\nexport function isSafari(fallback = false): boolean {\n return isApple(fallback) && vendor(/apple/i, fallback)\n}\n\nexport function isFirefox(fallback = false): boolean {\n return userAgent(/Firefox/i, fallback)\n}\n\nexport function isChrome(fallback = false): boolean {\n return userAgent(/Chrome/i, fallback)\n}\n\nexport function isWebKit(fallback = false): boolean {\n return userAgent(/AppleWebKit/i, fallback) && !isChrome()\n}\n\nexport function isHTMLElement(el: any): el is HTMLElement {\n return isNode(el) && el.nodeType === Node.ELEMENT_NODE\n}\n\nexport function isWindow(el: any): el is Window {\n return isObject(el) && el === el.window\n}\n\nexport function isDocument(el: any): el is Document {\n return isNode(el) && el.nodeType === Node.DOCUMENT_NODE\n}\n\nexport function isVisualViewport(el: any): el is VisualViewport {\n return isObject(el) && el.constructor.name === \"VisualViewport\"\n}\n\nexport function isNode(el: any): el is Node {\n return isObject(el) && el.nodeType !== undefined\n}\n\nexport function isShadowRoot(el: any): el is ShadowRoot {\n return (\n isNode(el) && el.nodeType === Node.DOCUMENT_FRAGMENT_NODE && \"host\" in el\n )\n}\n\nexport function isFrame(el: any): el is HTMLIFrameElement {\n return isHTMLElement(el) && el.tagName === \"IFRAME\"\n}\n\nexport function isActiveElement(\n el: HTMLElement,\n rootNode: Document | ShadowRoot,\n): boolean {\n return getActiveElement(rootNode) === el\n}\n\nexport function isHiddenElement(el: HTMLElement): boolean {\n if (el.parentElement && isHiddenElement(el.parentElement)) return true\n\n return Boolean(el.hidden)\n}\n\nexport function isDisabledElement(el: HTMLElement): boolean {\n return (\n Boolean(el.getAttribute(\"disabled\")) ||\n Boolean(el.getAttribute(\"data-disabled\")) ||\n Boolean(el.getAttribute(\"aria-disabled\"))\n )\n}\n\nexport function isVisibleElement(el?: Node): boolean {\n if (!isHTMLElement(el)) return false\n\n return (\n el.offsetWidth > 0 || el.offsetHeight > 0 || el.getClientRects().length > 0\n )\n}\n\nexport function isTouchDevice(): boolean {\n return \"ontouchstart\" in window\n}\n\nconst hasTabIndex = (el: Element): boolean =>\n !Number.isNaN(parseInt(el.getAttribute(\"tabindex\") || \"0\", 10))\n\nconst hasNegativeTabIndex = (el: Element): boolean =>\n parseInt(el.getAttribute(\"tabindex\") || \"0\", 10) < 0\n\nexport function getWindow(\n el: Document | Node | null | ShadowRoot | undefined,\n): typeof globalThis & Window {\n if (isShadowRoot(el)) return getWindow(el.host)\n if (isDocument(el)) return el.defaultView ?? window\n if (isHTMLElement(el)) return el.ownerDocument.defaultView ?? window\n\n return window\n}\n\nexport function getDocument(\n el: Document | Element | Node | null | undefined | Window,\n): Document {\n if (isDocument(el)) return el\n if (isWindow(el)) return el.document\n\n return el?.ownerDocument ?? document\n}\n\nexport function getDocumentElement(\n el: Document | Element | Node | null | undefined | Window,\n): HTMLElement {\n return getDocument(el).documentElement\n}\n\nexport function getNodeName(node: Node | Window): string {\n if (isHTMLElement(node)) return node.localName || \"\"\n\n return \"#document\"\n}\n\nexport function getActiveElement(\n rootNode: Document | ShadowRoot,\n): HTMLElement | null {\n let activeEl = rootNode.activeElement as HTMLElement | null\n\n while (activeEl?.shadowRoot) {\n const el = activeEl.shadowRoot.activeElement as HTMLElement | null\n\n if (el === activeEl) {\n break\n } else {\n activeEl = el\n }\n }\n\n return activeEl\n}\n\nexport function getTabbableElements(\n el: HTMLElement | null,\n includeEl?: boolean,\n) {\n if (!el) return []\n const els = Array.from(el.querySelectorAll<HTMLElement>(focusableSelector))\n const tabbableEls = els.filter(isTabbableElement)\n\n if (includeEl && isTabbableElement(el)) {\n tabbableEls.unshift(el)\n }\n\n tabbableEls.forEach((el, i) => {\n if (isFrame(el) && el.contentDocument) {\n const frameBody = el.contentDocument.body\n const allFrameTabbable = getTabbableElements(frameBody)\n tabbableEls.splice(i, 1, ...allFrameTabbable)\n }\n })\n\n if (!tabbableEls.length && includeEl) {\n return els\n }\n\n return tabbableEls\n}\n\nexport function getFirstTabbableElement(\n el: HTMLElement | null,\n includeEl?: boolean,\n): HTMLElement | null {\n const [first] = getTabbableElements(el, includeEl)\n\n return first || null\n}\n\nexport function getNextTabbableElement(\n el: HTMLElement | null,\n current?: HTMLElement | null,\n): HTMLElement | null {\n const els = getTabbableElements(el)\n const doc = el?.ownerDocument || document\n const currentElement = current ?? (doc.activeElement as HTMLElement | null)\n\n if (!currentElement) return null\n\n return els[els.indexOf(currentElement) + 1] || null\n}\n\nexport function getLastTabbableElement(\n el: HTMLElement | null,\n includeEl?: boolean,\n): HTMLElement | null {\n const els = getTabbableElements(el, includeEl)\n\n return els[els.length - 1] || null\n}\n\nexport function getTabbableElementEdges(\n el: HTMLElement | null,\n includeEl?: boolean,\n): [HTMLElement | null, HTMLElement | null] {\n const els = getTabbableElements(el, includeEl)\n const first = els[0] || null\n const last = els[els.length - 1] || null\n\n return [first, last]\n}\n\nexport function getParentNode(node: Node): Node {\n if (getNodeName(node) === \"html\") return node\n\n const result =\n (node as any).assignedSlot ||\n node.parentNode ||\n isShadowRoot(node) ||\n getDocumentElement(node)\n\n return isShadowRoot(result) ? result.host : result\n}\n\nexport function isInputElement(el: any): el is HTMLInputElement {\n return isHTMLElement(el) && el.localName === \"input\"\n}\n\nexport function isEditableElement(\n el: EventTarget | HTMLElement | null,\n): boolean {\n if (el == null || !isHTMLElement(el)) return false\n try {\n return (\n (isInputElement(el) && el.selectionStart != null) ||\n /(textarea|select)/.test(el.localName) ||\n el.isContentEditable ||\n el.getAttribute(\"contenteditable\") === \"true\" ||\n el.getAttribute(\"contenteditable\") === \"\"\n )\n } catch {\n return false\n }\n}\n\nexport function isFocusableElement(el: HTMLElement | null): el is HTMLElement {\n if (!el || el.closest(\"[inert]\")) return false\n\n return el.matches(focusableSelector) && isVisibleElement(el)\n}\n\nexport function isTabbableElement(el: HTMLElement | null): el is HTMLElement {\n if (el != null && el.tabIndex > 0) return true\n return isFocusableElement(el) && !hasNegativeTabIndex(el as Element)\n}\n\nexport function contains(\n parent?: EventTarget | HTMLElement | null,\n child?: EventTarget | HTMLElement | null,\n): boolean {\n if (!parent || !child) return false\n if (!isHTMLElement(parent) || !isHTMLElement(child)) return false\n\n const rootNode = child.getRootNode()\n\n if (parent === child) return true\n if (parent.contains(child)) return true\n\n if (isShadowRoot(rootNode)) {\n let next: Node | null | ShadowRoot = child\n\n while (next) {\n if (parent === next) return true\n\n next = next.parentNode ?? (isShadowRoot(next) ? next.host : null)\n }\n }\n\n return false\n}\n\nexport function getPx(value: number | string | 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 let fontSize = 16\n\n if (createdDom()) {\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 function getTabIndex(node: HTMLElement | SVGElement) {\n if (node.tabIndex < 0) {\n if (\n (/^(audio|video|details)$/.test(node.localName) ||\n isEditableElement(node)) &&\n !hasTabIndex(node)\n ) {\n return 0\n }\n }\n return node.tabIndex\n}\n\nexport function isTruthyDataAttr(condition: any): boolean {\n return condition === \"true\" || condition === true || condition === \"\"\n}\n\nexport function dataAttr(condition: any): string | undefined {\n return (condition ? \"\" : undefined) as string | undefined\n}\n\ntype Booleanish = \"false\" | \"true\" | boolean\n\nexport function ariaAttr(condition: any): Booleanish | undefined {\n if (condition === \"true\") return \"true\"\n if (condition === \"false\") return \"false\"\n\n return condition ? true : undefined\n}\n\nexport function uuid() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\"\n .replace(/x/g, () => Math.random().toString(16).slice(2, 3))\n .replace(/y/g, () => ((Math.random() * 4) | 0).toString(16))\n}\n\nconst focusableElList = [\n \"[tabindex]\",\n \"input:not([type='hidden']):not([disabled])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n \"button:not([disabled])\",\n \"iframe\",\n \"object\",\n \"embed\",\n \"a[href]\",\n \"area[href]\",\n \"audio[controls]\",\n \"video[controls]\",\n \"[contenteditable]:not([contenteditable='false'])\",\n \"details > summary:first-of-type\",\n]\n\nconst focusableSelector = focusableElList.join(\", \")\n\nexport function getFocusableElements(\n el: null | Pick<HTMLElement, \"querySelectorAll\">,\n includeEl = false,\n) {\n if (!el) return []\n const els = Array.from(el.querySelectorAll<HTMLElement>(focusableSelector))\n\n const include = includeEl\n\n if (include && isHTMLElement(el) && isFocusableElement(el)) {\n els.unshift(el)\n }\n\n const focusableEls = els.filter(isFocusableElement)\n\n focusableEls.forEach((el, i) => {\n if (isFrame(el) && el.contentDocument) {\n const frameBody = el.contentDocument.body\n\n focusableEls.splice(i, 1, ...getFocusableElements(frameBody))\n }\n })\n\n return focusableEls\n}\n\nexport function getFirstFocusableElement(\n el: HTMLElement | null,\n includeEl?: boolean,\n): HTMLElement | null {\n const [first] = getFocusableElements(el, includeEl)\n\n return first || null\n}\n\nexport function setAttribute(\n el: Element,\n qualifiedName: string,\n value?: string,\n) {\n const prev = el.getAttribute(qualifiedName)\n\n el.setAttribute(qualifiedName, cx(prev, value) ?? \"\")\n\n return () => {\n if (prev === null) {\n el.removeAttribute(qualifiedName)\n } else {\n el.setAttribute(qualifiedName, prev)\n }\n }\n}\n\nexport function setStyle(\n el: HTMLElement | null | undefined,\n style: Partial<\n CSSStyleDeclaration | { [key: `--${string}`]: number | string }\n >,\n) {\n if (!el) return noop\n\n const prev = Object.keys(style).reduce<{ [key: string]: string }>(\n (acc, key) => {\n acc[key] = el.style.getPropertyValue(key)\n\n return acc\n },\n {},\n )\n\n Object.assign(el.style, style)\n\n return () => {\n Object.assign(el.style, prev)\n\n if (el.style.length === 0) el.removeAttribute(\"style\")\n }\n}\n\nconst LOCK_DATA_ATTR = \"data-scroll-lock\"\n\nexport function scrollLock(\n el: Document | Element | Node | null | undefined | Window,\n) {\n const doc = getDocument(el)\n const win = getWindow(doc)\n\n const locked = doc.body.hasAttribute(LOCK_DATA_ATTR)\n\n if (locked) return\n\n const scrollbarWidth = win.innerWidth - doc.documentElement.clientWidth\n const documentLeft = doc.documentElement.getBoundingClientRect().left\n const scrollbarX = Math.round(documentLeft) + doc.documentElement.scrollLeft\n const paddingProperty = scrollbarX ? \"paddingLeft\" : \"paddingRight\"\n\n doc.body.setAttribute(LOCK_DATA_ATTR, \"\")\n\n const setStyleForIOS = () => {\n const offsetLeft = win.visualViewport?.offsetLeft ?? 0\n const offsetTop = win.visualViewport?.offsetTop ?? 0\n\n const restoreStyle = setStyle(doc.body, {\n left: `${-(win.scrollX - Math.floor(offsetLeft))}px`,\n overflow: \"hidden\",\n [paddingProperty]: `${scrollbarWidth}px`,\n position: \"fixed\",\n right: \"0\",\n top: `${-(win.scrollY - Math.floor(offsetTop))}px`,\n })\n\n return () => {\n restoreStyle()\n win.scrollTo({ behavior: \"instant\", left: win.scrollX, top: win.scrollY })\n }\n }\n\n const unsubscribes = [\n setStyle(doc.documentElement, {\n \"--scrollbar-width\": `${scrollbarWidth}px`,\n }),\n isIos()\n ? setStyleForIOS()\n : setStyle(doc.body, {\n overflow: \"hidden\",\n [paddingProperty]: `${scrollbarWidth}px`,\n }),\n ]\n\n return () => {\n unsubscribes.forEach((unsubscribe) => unsubscribe())\n\n doc.body.removeAttribute(LOCK_DATA_ATTR)\n }\n}\n"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
- const require_assertion = require('./assertion.cjs');
2
- const require_function = require('./function.cjs');
3
- const require_dom = require('./dom.cjs');
4
-
1
+ const require_assertion = require("./assertion.cjs");
2
+ const require_function = require("./function.cjs");
3
+ const require_dom = require("./dom.cjs");
5
4
  //#region src/event.ts
6
5
  function isMouseEvent(ev) {
7
6
  const win = getEventWindow(ev);
@@ -83,7 +82,6 @@ function focusTransfer(el, target, onFocus) {
83
82
  }
84
83
  return addDomEvent(doc, "keydown", onKeyDown, true);
85
84
  }
86
-
87
85
  //#endregion
88
86
  exports.addDomEvent = addDomEvent;
89
87
  exports.focusTransfer = focusTransfer;
@@ -95,4 +93,5 @@ exports.isMultiTouchEvent = isMultiTouchEvent;
95
93
  exports.isTouchEvent = isTouchEvent;
96
94
  exports.pointFromMouse = pointFromMouse;
97
95
  exports.pointFromTouch = pointFromTouch;
96
+
98
97
  //# sourceMappingURL=event.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"event.cjs","names":["noop","getDocument","elToFocus: HTMLElement | null | undefined","getTabbableElementEdges","isFunction","getNextTabbableElement"],"sources":["../../src/event.ts"],"sourcesContent":["import { isFunction } from \"./assertion\"\nimport {\n getDocument,\n getNextTabbableElement,\n getTabbableElementEdges,\n} from \"./dom\"\nimport { noop } from \"./function\"\n\nexport type AnyPointerEvent = MouseEvent | PointerEvent | TouchEvent\n\nexport interface Point {\n x: number\n y: number\n}\n\nexport function 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 function isTouchEvent(ev: AnyPointerEvent): ev is TouchEvent {\n return !!(ev as TouchEvent).touches\n}\n\nexport function isMultiTouchEvent(ev: AnyPointerEvent): boolean {\n return isTouchEvent(ev) && ev.touches.length > 1\n}\n\nexport function getEventWindow(ev: Event): typeof globalThis {\n return ((ev as UIEvent).view ?? window) as unknown as typeof globalThis\n}\n\nexport function pointFromTouch(\n e: TouchEvent,\n type: \"client\" | \"page\" = \"client\",\n): Point {\n const point = e.touches[0] || e.changedTouches[0]\n\n return { x: point?.[`${type}X`] ?? 0, y: point?.[`${type}Y`] ?? 0 }\n}\n\nexport function pointFromMouse(\n point: MouseEvent | PointerEvent,\n type: \"client\" | \"page\" = \"client\",\n): Point {\n return {\n x: point[`${type}X`],\n y: point[`${type}Y`],\n }\n}\n\nexport function getEventPoint(\n ev: AnyPointerEvent,\n type: \"client\" | \"page\" = \"client\",\n): Point {\n return isTouchEvent(ev) ? pointFromTouch(ev, type) : pointFromMouse(ev, type)\n}\n\nexport interface EventMap\n extends\n DocumentEventMap,\n GlobalEventHandlersEventMap,\n WindowEventMap,\n FontFaceSetEventMap {}\n\nexport type EventType = keyof EventMap\n\nexport function addDomEvent<Y extends EventType>(\n target: EventTarget,\n type: Y,\n cb: (ev: EventMap[Y]) => void,\n options?: AddEventListenerOptions | boolean,\n) {\n target.addEventListener(\n type,\n cb as EventListenerOrEventListenerObject,\n options,\n )\n\n return () => {\n target.removeEventListener(\n type,\n cb as EventListenerOrEventListenerObject,\n options,\n )\n }\n}\n\nexport function focusTrap(\n el: HTMLElement | null,\n onFocus?: (elToFocus: HTMLElement) => void,\n) {\n if (!el) return noop\n\n const doc = getDocument(el)\n\n function onKeyDown(ev: KeyboardEvent) {\n if (ev.key !== \"Tab\") return\n\n let elToFocus: HTMLElement | null | undefined = null\n\n const [firstTabbable, lastTabbable] = getTabbableElementEdges(el, false)\n\n if (ev.shiftKey) {\n if (doc.activeElement === firstTabbable) elToFocus = lastTabbable\n } else {\n if (doc.activeElement === lastTabbable) elToFocus = firstTabbable\n }\n\n if (!elToFocus) return\n\n ev.preventDefault()\n\n if (isFunction(onFocus)) {\n onFocus(elToFocus)\n } else {\n elToFocus.focus()\n }\n }\n\n return addDomEvent(el, \"keydown\", onKeyDown, true)\n}\n\nexport function focusTransfer(\n el: HTMLElement | null,\n target?: HTMLElement | null,\n onFocus?: (elToFocus: HTMLElement) => void,\n) {\n const doc = getDocument(el)\n const body = doc.body\n\n function onKeyDown(ev: KeyboardEvent) {\n if (ev.key !== \"Tab\") return\n\n let elToFocus: HTMLElement | null | undefined = null\n\n const [firstTabbable, lastTabbable] = getTabbableElementEdges(el, false)\n const nextTabbable = getNextTabbableElement(body, target)\n const noTabbableEls = !firstTabbable && !lastTabbable\n\n if (ev.shiftKey) {\n if (nextTabbable === doc.activeElement) {\n if (doc.activeElement !== lastTabbable) elToFocus = lastTabbable\n } else if (doc.activeElement === firstTabbable || noTabbableEls) {\n if (doc.activeElement !== target) elToFocus = target\n }\n } else {\n if (doc.activeElement === target) {\n if (doc.activeElement !== firstTabbable) elToFocus = firstTabbable\n } else if (doc.activeElement === lastTabbable || noTabbableEls) {\n if (doc.activeElement !== nextTabbable) elToFocus = nextTabbable\n }\n }\n\n if (!elToFocus) return\n\n ev.preventDefault()\n\n if (isFunction(onFocus)) {\n onFocus(elToFocus)\n } else {\n elToFocus.focus()\n }\n }\n\n return addDomEvent(doc, \"keydown\", onKeyDown, true)\n}\n"],"mappings":";;;;;AAeA,SAAgB,aAAa,IAA2B;CACtD,MAAM,MAAM,eAAe,GAAG;AAE9B,KAAI,OAAO,IAAI,iBAAiB,eAAe,cAAc,IAAI,aAC/D,QAAO,CAAC,EAAE,GAAG,gBAAgB;AAE/B,QAAO,cAAc,IAAI;;AAG3B,SAAgB,aAAa,IAAuC;AAClE,QAAO,CAAC,CAAE,GAAkB;;AAG9B,SAAgB,kBAAkB,IAA8B;AAC9D,QAAO,aAAa,GAAG,IAAI,GAAG,QAAQ,SAAS;;AAGjD,SAAgB,eAAe,IAA8B;AAC3D,QAAS,GAAe,QAAQ;;AAGlC,SAAgB,eACd,GACA,OAA0B,UACnB;CACP,MAAM,QAAQ,EAAE,QAAQ,MAAM,EAAE,eAAe;AAE/C,QAAO;EAAE,GAAG,QAAQ,GAAG,KAAK,OAAO;EAAG,GAAG,QAAQ,GAAG,KAAK,OAAO;EAAG;;AAGrE,SAAgB,eACd,OACA,OAA0B,UACnB;AACP,QAAO;EACL,GAAG,MAAM,GAAG,KAAK;EACjB,GAAG,MAAM,GAAG,KAAK;EAClB;;AAGH,SAAgB,cACd,IACA,OAA0B,UACnB;AACP,QAAO,aAAa,GAAG,GAAG,eAAe,IAAI,KAAK,GAAG,eAAe,IAAI,KAAK;;AAY/E,SAAgB,YACd,QACA,MACA,IACA,SACA;AACA,QAAO,iBACL,MACA,IACA,QACD;AAED,cAAa;AACX,SAAO,oBACL,MACA,IACA,QACD;;;AAIL,SAAgB,UACd,IACA,SACA;AACA,KAAI,CAAC,GAAI,QAAOA;CAEhB,MAAM,MAAMC,wBAAY,GAAG;CAE3B,SAAS,UAAU,IAAmB;AACpC,MAAI,GAAG,QAAQ,MAAO;EAEtB,IAAIC,YAA4C;EAEhD,MAAM,CAAC,eAAe,gBAAgBC,oCAAwB,IAAI,MAAM;AAExE,MAAI,GAAG,UACL;OAAI,IAAI,kBAAkB,cAAe,aAAY;aAEjD,IAAI,kBAAkB,aAAc,aAAY;AAGtD,MAAI,CAAC,UAAW;AAEhB,KAAG,gBAAgB;AAEnB,MAAIC,6BAAW,QAAQ,CACrB,SAAQ,UAAU;MAElB,WAAU,OAAO;;AAIrB,QAAO,YAAY,IAAI,WAAW,WAAW,KAAK;;AAGpD,SAAgB,cACd,IACA,QACA,SACA;CACA,MAAM,MAAMH,wBAAY,GAAG;CAC3B,MAAM,OAAO,IAAI;CAEjB,SAAS,UAAU,IAAmB;AACpC,MAAI,GAAG,QAAQ,MAAO;EAEtB,IAAIC,YAA4C;EAEhD,MAAM,CAAC,eAAe,gBAAgBC,oCAAwB,IAAI,MAAM;EACxE,MAAM,eAAeE,mCAAuB,MAAM,OAAO;EACzD,MAAM,gBAAgB,CAAC,iBAAiB,CAAC;AAEzC,MAAI,GAAG,UACL;OAAI,iBAAiB,IAAI,eACvB;QAAI,IAAI,kBAAkB,aAAc,aAAY;cAC3C,IAAI,kBAAkB,iBAAiB,eAChD;QAAI,IAAI,kBAAkB,OAAQ,aAAY;;aAG5C,IAAI,kBAAkB,QACxB;OAAI,IAAI,kBAAkB,cAAe,aAAY;aAC5C,IAAI,kBAAkB,gBAAgB,eAC/C;OAAI,IAAI,kBAAkB,aAAc,aAAY;;AAIxD,MAAI,CAAC,UAAW;AAEhB,KAAG,gBAAgB;AAEnB,MAAID,6BAAW,QAAQ,CACrB,SAAQ,UAAU;MAElB,WAAU,OAAO;;AAIrB,QAAO,YAAY,KAAK,WAAW,WAAW,KAAK"}
1
+ {"version":3,"file":"event.cjs","names":["noop","getDocument","getTabbableElementEdges","isFunction","getNextTabbableElement"],"sources":["../../src/event.ts"],"sourcesContent":["import { isFunction } from \"./assertion\"\nimport {\n getDocument,\n getNextTabbableElement,\n getTabbableElementEdges,\n} from \"./dom\"\nimport { noop } from \"./function\"\n\nexport type AnyPointerEvent = MouseEvent | PointerEvent | TouchEvent\n\nexport interface Point {\n x: number\n y: number\n}\n\nexport function 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 function isTouchEvent(ev: AnyPointerEvent): ev is TouchEvent {\n return !!(ev as TouchEvent).touches\n}\n\nexport function isMultiTouchEvent(ev: AnyPointerEvent): boolean {\n return isTouchEvent(ev) && ev.touches.length > 1\n}\n\nexport function getEventWindow(ev: Event): typeof globalThis {\n return ((ev as UIEvent).view ?? window) as unknown as typeof globalThis\n}\n\nexport function pointFromTouch(\n e: TouchEvent,\n type: \"client\" | \"page\" = \"client\",\n): Point {\n const point = e.touches[0] || e.changedTouches[0]\n\n return { x: point?.[`${type}X`] ?? 0, y: point?.[`${type}Y`] ?? 0 }\n}\n\nexport function pointFromMouse(\n point: MouseEvent | PointerEvent,\n type: \"client\" | \"page\" = \"client\",\n): Point {\n return {\n x: point[`${type}X`],\n y: point[`${type}Y`],\n }\n}\n\nexport function getEventPoint(\n ev: AnyPointerEvent,\n type: \"client\" | \"page\" = \"client\",\n): Point {\n return isTouchEvent(ev) ? pointFromTouch(ev, type) : pointFromMouse(ev, type)\n}\n\nexport interface EventMap\n extends\n DocumentEventMap,\n GlobalEventHandlersEventMap,\n WindowEventMap,\n FontFaceSetEventMap {}\n\nexport type EventType = keyof EventMap\n\nexport function addDomEvent<Y extends EventType>(\n target: EventTarget,\n type: Y,\n cb: (ev: EventMap[Y]) => void,\n options?: AddEventListenerOptions | boolean,\n) {\n target.addEventListener(\n type,\n cb as EventListenerOrEventListenerObject,\n options,\n )\n\n return () => {\n target.removeEventListener(\n type,\n cb as EventListenerOrEventListenerObject,\n options,\n )\n }\n}\n\nexport function focusTrap(\n el: HTMLElement | null,\n onFocus?: (elToFocus: HTMLElement) => void,\n) {\n if (!el) return noop\n\n const doc = getDocument(el)\n\n function onKeyDown(ev: KeyboardEvent) {\n if (ev.key !== \"Tab\") return\n\n let elToFocus: HTMLElement | null | undefined = null\n\n const [firstTabbable, lastTabbable] = getTabbableElementEdges(el, false)\n\n if (ev.shiftKey) {\n if (doc.activeElement === firstTabbable) elToFocus = lastTabbable\n } else {\n if (doc.activeElement === lastTabbable) elToFocus = firstTabbable\n }\n\n if (!elToFocus) return\n\n ev.preventDefault()\n\n if (isFunction(onFocus)) {\n onFocus(elToFocus)\n } else {\n elToFocus.focus()\n }\n }\n\n return addDomEvent(el, \"keydown\", onKeyDown, true)\n}\n\nexport function focusTransfer(\n el: HTMLElement | null,\n target?: HTMLElement | null,\n onFocus?: (elToFocus: HTMLElement) => void,\n) {\n const doc = getDocument(el)\n const body = doc.body\n\n function onKeyDown(ev: KeyboardEvent) {\n if (ev.key !== \"Tab\") return\n\n let elToFocus: HTMLElement | null | undefined = null\n\n const [firstTabbable, lastTabbable] = getTabbableElementEdges(el, false)\n const nextTabbable = getNextTabbableElement(body, target)\n const noTabbableEls = !firstTabbable && !lastTabbable\n\n if (ev.shiftKey) {\n if (nextTabbable === doc.activeElement) {\n if (doc.activeElement !== lastTabbable) elToFocus = lastTabbable\n } else if (doc.activeElement === firstTabbable || noTabbableEls) {\n if (doc.activeElement !== target) elToFocus = target\n }\n } else {\n if (doc.activeElement === target) {\n if (doc.activeElement !== firstTabbable) elToFocus = firstTabbable\n } else if (doc.activeElement === lastTabbable || noTabbableEls) {\n if (doc.activeElement !== nextTabbable) elToFocus = nextTabbable\n }\n }\n\n if (!elToFocus) return\n\n ev.preventDefault()\n\n if (isFunction(onFocus)) {\n onFocus(elToFocus)\n } else {\n elToFocus.focus()\n }\n }\n\n return addDomEvent(doc, \"keydown\", onKeyDown, true)\n}\n"],"mappings":";;;;AAeA,SAAgB,aAAa,IAA2B;CACtD,MAAM,MAAM,eAAe,GAAG;CAE9B,IAAI,OAAO,IAAI,iBAAiB,eAAe,cAAc,IAAI,cAC/D,OAAO,CAAC,EAAE,GAAG,gBAAgB;CAE/B,OAAO,cAAc,IAAI;;AAG3B,SAAgB,aAAa,IAAuC;CAClE,OAAO,CAAC,CAAE,GAAkB;;AAG9B,SAAgB,kBAAkB,IAA8B;CAC9D,OAAO,aAAa,GAAG,IAAI,GAAG,QAAQ,SAAS;;AAGjD,SAAgB,eAAe,IAA8B;CAC3D,OAAS,GAAe,QAAQ;;AAGlC,SAAgB,eACd,GACA,OAA0B,UACnB;CACP,MAAM,QAAQ,EAAE,QAAQ,MAAM,EAAE,eAAe;CAE/C,OAAO;EAAE,GAAG,QAAQ,GAAG,KAAK,OAAO;EAAG,GAAG,QAAQ,GAAG,KAAK,OAAO;EAAG;;AAGrE,SAAgB,eACd,OACA,OAA0B,UACnB;CACP,OAAO;EACL,GAAG,MAAM,GAAG,KAAK;EACjB,GAAG,MAAM,GAAG,KAAK;EAClB;;AAGH,SAAgB,cACd,IACA,OAA0B,UACnB;CACP,OAAO,aAAa,GAAG,GAAG,eAAe,IAAI,KAAK,GAAG,eAAe,IAAI,KAAK;;AAY/E,SAAgB,YACd,QACA,MACA,IACA,SACA;CACA,OAAO,iBACL,MACA,IACA,QACD;CAED,aAAa;EACX,OAAO,oBACL,MACA,IACA,QACD;;;AAIL,SAAgB,UACd,IACA,SACA;CACA,IAAI,CAAC,IAAI,OAAOA,iBAAAA;CAEhB,MAAM,MAAMC,YAAAA,YAAY,GAAG;CAE3B,SAAS,UAAU,IAAmB;EACpC,IAAI,GAAG,QAAQ,OAAO;EAEtB,IAAI,YAA4C;EAEhD,MAAM,CAAC,eAAe,gBAAgBC,YAAAA,wBAAwB,IAAI,MAAM;EAExE,IAAI,GAAG;OACD,IAAI,kBAAkB,eAAe,YAAY;SAErD,IAAI,IAAI,kBAAkB,cAAc,YAAY;EAGtD,IAAI,CAAC,WAAW;EAEhB,GAAG,gBAAgB;EAEnB,IAAIC,kBAAAA,WAAW,QAAQ,EACrB,QAAQ,UAAU;OAElB,UAAU,OAAO;;CAIrB,OAAO,YAAY,IAAI,WAAW,WAAW,KAAK;;AAGpD,SAAgB,cACd,IACA,QACA,SACA;CACA,MAAM,MAAMF,YAAAA,YAAY,GAAG;CAC3B,MAAM,OAAO,IAAI;CAEjB,SAAS,UAAU,IAAmB;EACpC,IAAI,GAAG,QAAQ,OAAO;EAEtB,IAAI,YAA4C;EAEhD,MAAM,CAAC,eAAe,gBAAgBC,YAAAA,wBAAwB,IAAI,MAAM;EACxE,MAAM,eAAeE,YAAAA,uBAAuB,MAAM,OAAO;EACzD,MAAM,gBAAgB,CAAC,iBAAiB,CAAC;EAEzC,IAAI,GAAG;OACD,iBAAiB,IAAI;QACnB,IAAI,kBAAkB,cAAc,YAAY;UAC/C,IAAI,IAAI,kBAAkB,iBAAiB;QAC5C,IAAI,kBAAkB,QAAQ,YAAY;;SAGhD,IAAI,IAAI,kBAAkB;OACpB,IAAI,kBAAkB,eAAe,YAAY;SAChD,IAAI,IAAI,kBAAkB,gBAAgB;OAC3C,IAAI,kBAAkB,cAAc,YAAY;;EAIxD,IAAI,CAAC,WAAW;EAEhB,GAAG,gBAAgB;EAEnB,IAAID,kBAAAA,WAAW,QAAQ,EACrB,QAAQ,UAAU;OAElB,UAAU,OAAO;;CAIrB,OAAO,YAAY,KAAK,WAAW,WAAW,KAAK"}
@@ -1,5 +1,4 @@
1
- const require_assertion = require('./assertion.cjs');
2
-
1
+ const require_assertion = require("./assertion.cjs");
3
2
  //#region src/function.ts
4
3
  const noop = () => {};
5
4
  const wait = async (ms = 0) => new Promise((resolve) => {
@@ -21,11 +20,11 @@ function fnAll(...fns) {
21
20
  return fns.forEach((fn) => fn?.(...args));
22
21
  };
23
22
  }
24
-
25
23
  //#endregion
26
24
  exports.fnAll = fnAll;
27
25
  exports.handlerAll = handlerAll;
28
26
  exports.noop = noop;
29
27
  exports.runIfFn = runIfFn;
30
28
  exports.wait = wait;
29
+
31
30
  //# sourceMappingURL=function.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"function.cjs","names":["isFunction"],"sources":["../../src/function.ts"],"sourcesContent":["import { isFunction } from \"./assertion\"\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport const noop = () => {}\n\nexport const wait = async (ms = 0) =>\n new Promise<void>((resolve) => {\n setTimeout(resolve, ms)\n })\n\nexport function runIfFn<Y, U extends any[]>(\n valOrFn: ((...args: U) => Y) | Y,\n ...args: U\n): Y {\n return isFunction(valOrFn) ? valOrFn(...args) : valOrFn\n}\n\nexport function handlerAll<Y extends (ev?: any, ...args: any[]) => void>(\n ...fns: (null | undefined | Y)[]\n) {\n return function (\n ev?: Y extends (ev: infer R, ...args: any[]) => any ? R : never,\n ...args: Y extends (ev: any, ...args: infer R) => any ? R : never\n ) {\n fns.some((fn) => {\n fn?.(ev, ...args)\n\n return ev?.defaultPrevented\n })\n }\n}\n\nexport function fnAll<Y extends (...args: any[]) => any>(\n ...fns: (null | undefined | Y)[]\n) {\n return function (...args: Y extends (...args: infer R) => any ? R : never) {\n return fns.forEach((fn) => fn?.(...args))\n }\n}\n"],"mappings":";;;AAGA,MAAa,aAAa;AAE1B,MAAa,OAAO,OAAO,KAAK,MAC9B,IAAI,SAAe,YAAY;AAC7B,YAAW,SAAS,GAAG;EACvB;AAEJ,SAAgB,QACd,SACA,GAAG,MACA;AACH,QAAOA,6BAAW,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG;;AAGlD,SAAgB,WACd,GAAG,KACH;AACA,QAAO,SACL,IACA,GAAG,MACH;AACA,MAAI,MAAM,OAAO;AACf,QAAK,IAAI,GAAG,KAAK;AAEjB,UAAO,IAAI;IACX;;;AAIN,SAAgB,MACd,GAAG,KACH;AACA,QAAO,SAAU,GAAG,MAAuD;AACzE,SAAO,IAAI,SAAS,OAAO,KAAK,GAAG,KAAK,CAAC"}
1
+ {"version":3,"file":"function.cjs","names":["isFunction"],"sources":["../../src/function.ts"],"sourcesContent":["import { isFunction } from \"./assertion\"\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport const noop = () => {}\n\nexport const wait = async (ms = 0) =>\n new Promise<void>((resolve) => {\n setTimeout(resolve, ms)\n })\n\nexport function runIfFn<Y, U extends any[]>(\n valOrFn: ((...args: U) => Y) | Y,\n ...args: U\n): Y {\n return isFunction(valOrFn) ? valOrFn(...args) : valOrFn\n}\n\nexport function handlerAll<Y extends (ev?: any, ...args: any[]) => void>(\n ...fns: (null | undefined | Y)[]\n) {\n return function (\n ev?: Y extends (ev: infer R, ...args: any[]) => any ? R : never,\n ...args: Y extends (ev: any, ...args: infer R) => any ? R : never\n ) {\n fns.some((fn) => {\n fn?.(ev, ...args)\n\n return ev?.defaultPrevented\n })\n }\n}\n\nexport function fnAll<Y extends (...args: any[]) => any>(\n ...fns: (null | undefined | Y)[]\n) {\n return function (...args: Y extends (...args: infer R) => any ? R : never) {\n return fns.forEach((fn) => fn?.(...args))\n }\n}\n"],"mappings":";;AAGA,MAAa,aAAa;AAE1B,MAAa,OAAO,OAAO,KAAK,MAC9B,IAAI,SAAe,YAAY;CAC7B,WAAW,SAAS,GAAG;EACvB;AAEJ,SAAgB,QACd,SACA,GAAG,MACA;CACH,OAAOA,kBAAAA,WAAW,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG;;AAGlD,SAAgB,WACd,GAAG,KACH;CACA,OAAO,SACL,IACA,GAAG,MACH;EACA,IAAI,MAAM,OAAO;GACf,KAAK,IAAI,GAAG,KAAK;GAEjB,OAAO,IAAI;IACX;;;AAIN,SAAgB,MACd,GAAG,KACH;CACA,OAAO,SAAU,GAAG,MAAuD;EACzE,OAAO,IAAI,SAAS,OAAO,KAAK,GAAG,KAAK,CAAC"}
package/dist/cjs/i18n.cjs CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  //#region src/i18n.ts
3
2
  const RTL_SCRIPTS = new Set([
4
3
  "Adlm",
@@ -40,7 +39,7 @@ function isRtl(_locale) {
40
39
  if (locale.script) return RTL_SCRIPTS.has(locale.script);
41
40
  else return RTL_LANGS.has(_locale.split("-")[0]);
42
41
  }
43
-
44
42
  //#endregion
45
43
  exports.isRtl = isRtl;
44
+
46
45
  //# sourceMappingURL=i18n.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.cjs","names":[],"sources":["../../src/i18n.ts"],"sourcesContent":["const RTL_SCRIPTS = new Set([\n \"Adlm\",\n \"Arab\",\n \"Hebr\",\n \"Mand\",\n \"Mend\",\n \"Nkoo\",\n \"Rohg\",\n \"Samr\",\n \"Syrc\",\n \"Thaa\",\n \"Yezi\",\n])\n\nconst RTL_LANGS = new Set([\n \"ae\",\n \"ar\",\n \"arc\",\n \"bcc\",\n \"bqi\",\n \"ckb\",\n \"dv\",\n \"fa\",\n \"glk\",\n \"he\",\n \"ku\",\n \"mzn\",\n \"nqo\",\n \"pnb\",\n \"ps\",\n \"sd\",\n \"ug\",\n \"ur\",\n \"yi\",\n])\n\nexport function isRtl(_locale: string) {\n const locale = new Intl.Locale(_locale).maximize()\n\n if (\"textInfo\" in locale) return (locale.textInfo as any).direction === \"rtl\"\n\n if (locale.script) {\n return RTL_SCRIPTS.has(locale.script)\n } else {\n return RTL_LANGS.has(_locale.split(\"-\")[0]!)\n }\n}\n"],"mappings":";;AAAA,MAAM,cAAc,IAAI,IAAI;CAC1B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,MAAM,YAAY,IAAI,IAAI;CACxB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAgB,MAAM,SAAiB;CACrC,MAAM,SAAS,IAAI,KAAK,OAAO,QAAQ,CAAC,UAAU;AAElD,KAAI,cAAc,OAAQ,QAAQ,OAAO,SAAiB,cAAc;AAExE,KAAI,OAAO,OACT,QAAO,YAAY,IAAI,OAAO,OAAO;KAErC,QAAO,UAAU,IAAI,QAAQ,MAAM,IAAI,CAAC,GAAI"}
1
+ {"version":3,"file":"i18n.cjs","names":[],"sources":["../../src/i18n.ts"],"sourcesContent":["const RTL_SCRIPTS = new Set([\n \"Adlm\",\n \"Arab\",\n \"Hebr\",\n \"Mand\",\n \"Mend\",\n \"Nkoo\",\n \"Rohg\",\n \"Samr\",\n \"Syrc\",\n \"Thaa\",\n \"Yezi\",\n])\n\nconst RTL_LANGS = new Set([\n \"ae\",\n \"ar\",\n \"arc\",\n \"bcc\",\n \"bqi\",\n \"ckb\",\n \"dv\",\n \"fa\",\n \"glk\",\n \"he\",\n \"ku\",\n \"mzn\",\n \"nqo\",\n \"pnb\",\n \"ps\",\n \"sd\",\n \"ug\",\n \"ur\",\n \"yi\",\n])\n\nexport function isRtl(_locale: string) {\n const locale = new Intl.Locale(_locale).maximize()\n\n if (\"textInfo\" in locale) return (locale.textInfo as any).direction === \"rtl\"\n\n if (locale.script) {\n return RTL_SCRIPTS.has(locale.script)\n } else {\n return RTL_LANGS.has(_locale.split(\"-\")[0]!)\n }\n}\n"],"mappings":";AAAA,MAAM,cAAc,IAAI,IAAI;CAC1B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,MAAM,YAAY,IAAI,IAAI;CACxB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAgB,MAAM,SAAiB;CACrC,MAAM,SAAS,IAAI,KAAK,OAAO,QAAQ,CAAC,UAAU;CAElD,IAAI,cAAc,QAAQ,OAAQ,OAAO,SAAiB,cAAc;CAExE,IAAI,OAAO,QACT,OAAO,YAAY,IAAI,OAAO,OAAO;MAErC,OAAO,UAAU,IAAI,QAAQ,MAAM,IAAI,CAAC,GAAI"}
@@ -1,16 +1,16 @@
1
- const require_assertion = require('./assertion.cjs');
2
- const require_array = require('./array.cjs');
3
- const require_calc = require('./calc.cjs');
4
- const require_color = require('./color.cjs');
5
- const require_function = require('./function.cjs');
6
- const require_string = require('./string.cjs');
7
- const require_dom = require('./dom.cjs');
8
- const require_event = require('./event.cjs');
9
- const require_i18n = require('./i18n.cjs');
10
- const require_module = require('./module.cjs');
11
- const require_number = require('./number.cjs');
12
- const require_object = require('./object.cjs');
13
-
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_assertion = require("./assertion.cjs");
3
+ const require_array = require("./array.cjs");
4
+ const require_calc = require("./calc.cjs");
5
+ const require_color = require("./color.cjs");
6
+ const require_function = require("./function.cjs");
7
+ const require_string = require("./string.cjs");
8
+ const require_dom = require("./dom.cjs");
9
+ const require_event = require("./event.cjs");
10
+ const require_i18n = require("./i18n.cjs");
11
+ const require_module = require("./module.cjs");
12
+ const require_number = require("./number.cjs");
13
+ const require_object = require("./object.cjs");
14
14
  exports.COLOR_SCHEMES = require_color.COLOR_SCHEMES;
15
15
  exports.DEFAULT_COLOR_SCHEMES = require_color.DEFAULT_COLOR_SCHEMES;
16
16
  exports.SEMANTIC_COLOR_SCHEMES = require_color.SEMANTIC_COLOR_SCHEMES;
@@ -151,4 +151,4 @@ exports.uuid = require_dom.uuid;
151
151
  exports.valueToPercent = require_number.valueToPercent;
152
152
  exports.vendor = require_dom.vendor;
153
153
  exports.wait = require_function.wait;
154
- exports.wrapWithKey = require_object.wrapWithKey;
154
+ exports.wrapWithKey = require_object.wrapWithKey;
@@ -1,9 +1,8 @@
1
-
2
1
  //#region src/module.ts
3
- function interopDefault(module$1) {
4
- return module$1.default || module$1;
2
+ function interopDefault(module) {
3
+ return module.default || module;
5
4
  }
6
-
7
5
  //#endregion
8
6
  exports.interopDefault = interopDefault;
7
+
9
8
  //# sourceMappingURL=module.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"module.cjs","names":["module"],"sources":["../../src/module.ts"],"sourcesContent":["export function interopDefault<Y>(module: Y): Y {\n return (module as { default: Y }).default || module\n}\n"],"mappings":";;AAAA,SAAgB,eAAkB,UAAc;AAC9C,QAAQA,SAA0B,WAAWA"}
1
+ {"version":3,"file":"module.cjs","names":[],"sources":["../../src/module.ts"],"sourcesContent":["export function interopDefault<Y>(module: Y): Y {\n return (module as { default: Y }).default || module\n}\n"],"mappings":";AAAA,SAAgB,eAAkB,QAAc;CAC9C,OAAQ,OAA0B,WAAW"}
@@ -1,4 +1,3 @@
1
-
2
1
  //#region src/number.ts
3
2
  function toNumber(n) {
4
3
  const num = parseFloat(n);
@@ -32,7 +31,6 @@ function percentToValue(n, min, max) {
32
31
  function clampNumber(n, min, max) {
33
32
  return Math.min(Math.max(n, min), max);
34
33
  }
35
-
36
34
  //#endregion
37
35
  exports.clampNumber = clampNumber;
38
36
  exports.countDecimal = countDecimal;
@@ -41,4 +39,5 @@ exports.roundNumberToStep = roundNumberToStep;
41
39
  exports.toNumber = toNumber;
42
40
  exports.toPrecision = toPrecision;
43
41
  exports.valueToPercent = valueToPercent;
42
+
44
43
  //# sourceMappingURL=number.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"number.cjs","names":[],"sources":["../../src/number.ts"],"sourcesContent":["export function toNumber(n: any): number {\n const num = parseFloat(n)\n\n return typeof num !== \"number\" || Number.isNaN(num) ? 0 : num\n}\n\nexport function 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 function 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 function 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 function valueToPercent(n: number, min: number, max: number): number {\n return ((n - min) * 100) / (max - min)\n}\n\nexport function percentToValue(n: number, min: number, max: number) {\n return (max - min) * n + min\n}\n\nexport function clampNumber(n: number, min: number, max: number): number {\n return Math.min(Math.max(n, min), max)\n}\n"],"mappings":";;AAAA,SAAgB,SAAS,GAAgB;CACvC,MAAM,MAAM,WAAW,EAAE;AAEzB,QAAO,OAAO,QAAQ,YAAY,OAAO,MAAM,IAAI,GAAG,IAAI;;AAG5D,SAAgB,YAAY,GAAW,WAA4B;AACjE,KAAI,SAAS,EAAE;CAEf,MAAM,QAAQ,OAAO,aAAa;AAElC,KAAI,KAAK,MAAM,IAAI,MAAM,GAAG;AAE5B,QAAO,YAAY,EAAE,QAAQ,UAAU,GAAG,EAAE,UAAU;;AAGxD,SAAgB,aAAa,GAAmB;AAC9C,KAAI,CAAC,OAAO,SAAS,EAAE,CAAE,QAAO;CAEhC,IAAI,IAAI;CACR,IAAI,IAAI;AAER,QAAO,KAAK,MAAM,IAAI,EAAE,GAAG,MAAM,GAAG;AAClC,OAAK;AACL,OAAK;;AAGP,QAAO;;AAGT,SAAgB,kBAAkB,GAAW,MAAc,MAAc;AAKvE,QAAO,YAJW,KAAK,OAAO,IAAI,QAAQ,KAAK,GAAG,OAAO,MAEvC,aAAa,KAAK,CAEI;;AAG1C,SAAgB,eAAe,GAAW,KAAa,KAAqB;AAC1E,SAAS,IAAI,OAAO,OAAQ,MAAM;;AAGpC,SAAgB,eAAe,GAAW,KAAa,KAAa;AAClE,SAAQ,MAAM,OAAO,IAAI;;AAG3B,SAAgB,YAAY,GAAW,KAAa,KAAqB;AACvE,QAAO,KAAK,IAAI,KAAK,IAAI,GAAG,IAAI,EAAE,IAAI"}
1
+ {"version":3,"file":"number.cjs","names":[],"sources":["../../src/number.ts"],"sourcesContent":["export function toNumber(n: any): number {\n const num = parseFloat(n)\n\n return typeof num !== \"number\" || Number.isNaN(num) ? 0 : num\n}\n\nexport function 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 function 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 function 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 function valueToPercent(n: number, min: number, max: number): number {\n return ((n - min) * 100) / (max - min)\n}\n\nexport function percentToValue(n: number, min: number, max: number) {\n return (max - min) * n + min\n}\n\nexport function clampNumber(n: number, min: number, max: number): number {\n return Math.min(Math.max(n, min), max)\n}\n"],"mappings":";AAAA,SAAgB,SAAS,GAAgB;CACvC,MAAM,MAAM,WAAW,EAAE;CAEzB,OAAO,OAAO,QAAQ,YAAY,OAAO,MAAM,IAAI,GAAG,IAAI;;AAG5D,SAAgB,YAAY,GAAW,WAA4B;CACjE,IAAI,SAAS,EAAE;CAEf,MAAM,QAAQ,OAAO,aAAa;CAElC,IAAI,KAAK,MAAM,IAAI,MAAM,GAAG;CAE5B,OAAO,YAAY,EAAE,QAAQ,UAAU,GAAG,EAAE,UAAU;;AAGxD,SAAgB,aAAa,GAAmB;CAC9C,IAAI,CAAC,OAAO,SAAS,EAAE,EAAE,OAAO;CAEhC,IAAI,IAAI;CACR,IAAI,IAAI;CAER,OAAO,KAAK,MAAM,IAAI,EAAE,GAAG,MAAM,GAAG;EAClC,KAAK;EACL,KAAK;;CAGP,OAAO;;AAGT,SAAgB,kBAAkB,GAAW,MAAc,MAAc;CAKvE,OAAO,YAJW,KAAK,OAAO,IAAI,QAAQ,KAAK,GAAG,OAAO,MAEvC,aAAa,KAEQ,CAAC;;AAG1C,SAAgB,eAAe,GAAW,KAAa,KAAqB;CAC1E,QAAS,IAAI,OAAO,OAAQ,MAAM;;AAGpC,SAAgB,eAAe,GAAW,KAAa,KAAa;CAClE,QAAQ,MAAM,OAAO,IAAI;;AAG3B,SAAgB,YAAY,GAAW,KAAa,KAAqB;CACvE,OAAO,KAAK,IAAI,KAAK,IAAI,GAAG,IAAI,EAAE,IAAI"}