@yamada-ui/utils 2.0.0 → 2.0.1

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 (51) hide show
  1. package/dist/cjs/array.cjs.map +1 -1
  2. package/dist/cjs/assertion.cjs +4 -0
  3. package/dist/cjs/assertion.cjs.map +1 -1
  4. package/dist/cjs/calc.cjs.map +1 -1
  5. package/dist/cjs/color.cjs +2 -1
  6. package/dist/cjs/color.cjs.map +1 -1
  7. package/dist/cjs/dom.cjs +10 -12
  8. package/dist/cjs/dom.cjs.map +1 -1
  9. package/dist/cjs/event.cjs +15 -9
  10. package/dist/cjs/event.cjs.map +1 -1
  11. package/dist/cjs/function.cjs +9 -9
  12. package/dist/cjs/function.cjs.map +1 -1
  13. package/dist/cjs/i18n.cjs.map +1 -1
  14. package/dist/cjs/index.cjs +2 -0
  15. package/dist/cjs/module.cjs.map +1 -1
  16. package/dist/cjs/number.cjs +1 -3
  17. package/dist/cjs/number.cjs.map +1 -1
  18. package/dist/cjs/object.cjs +1 -2
  19. package/dist/cjs/object.cjs.map +1 -1
  20. package/dist/cjs/string.cjs +3 -4
  21. package/dist/cjs/string.cjs.map +1 -1
  22. package/dist/esm/array.js.map +1 -1
  23. package/dist/esm/assertion.js +4 -1
  24. package/dist/esm/assertion.js.map +1 -1
  25. package/dist/esm/calc.js.map +1 -1
  26. package/dist/esm/color.js.map +1 -1
  27. package/dist/esm/dom.js +10 -13
  28. package/dist/esm/dom.js.map +1 -1
  29. package/dist/esm/event.js +15 -9
  30. package/dist/esm/event.js.map +1 -1
  31. package/dist/esm/function.js +9 -9
  32. package/dist/esm/function.js.map +1 -1
  33. package/dist/esm/i18n.js.map +1 -1
  34. package/dist/esm/index.js +3 -3
  35. package/dist/esm/module.js.map +1 -1
  36. package/dist/esm/number.js +1 -3
  37. package/dist/esm/number.js.map +1 -1
  38. package/dist/esm/object.js +1 -2
  39. package/dist/esm/object.js.map +1 -1
  40. package/dist/esm/string.js +4 -5
  41. package/dist/esm/string.js.map +1 -1
  42. package/dist/types/assertion.d.ts +6 -5
  43. package/dist/types/dom.d.ts +2 -1
  44. package/dist/types/function.d.ts +3 -3
  45. package/dist/types/index.d.ts +4 -4
  46. package/dist/types/index.types.d.ts +6 -2
  47. package/dist/types/module.d.ts +1 -1
  48. package/dist/types/object.d.ts +2 -2
  49. package/package.json +8 -5
  50. package/dist/cjs/index.types.cjs +0 -0
  51. package/dist/esm/index.types.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"array.cjs","names":["array: Y[]","mixedArray: Y"],"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,YAAeA,OAA4C;AACzE,QAAO,MAAM,OACX,CAAC,UAAU,SAAS,SAAS,gCAAc,MAAM,CAClD;AACF;AAED,SAAgB,QAAWC,YAAe;AACxC,QAAO,CAAC,MAAM,QAAQ,WAAW,GAAG,WAAW,MAAM,GAAG,CAAC,UAAW,GAAE,OACpE,QACD;AAGF"}
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"}
@@ -33,6 +33,9 @@ function isRegExp(value) {
33
33
  function isObject(value) {
34
34
  return value !== null && (typeof value === "object" || typeof value === "function") && !isArray(value);
35
35
  }
36
+ function isDate(value) {
37
+ return value instanceof Date;
38
+ }
36
39
  function isArray(value) {
37
40
  return Array.isArray(value);
38
41
  }
@@ -58,6 +61,7 @@ exports.is = is;
58
61
  exports.isArray = isArray;
59
62
  exports.isBoolean = isBoolean;
60
63
  exports.isBooleanish = isBooleanish;
64
+ exports.isDate = isDate;
61
65
  exports.isEmpty = isEmpty;
62
66
  exports.isEmptyObject = isEmptyObject;
63
67
  exports.isFunction = isFunction;
@@ -1 +1 @@
1
- {"version":3,"file":"assertion.cjs","names":["x: any","y: any","value: any"],"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<T extends Dict>(value: any): value is T {\n return (\n value !== null &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n !isArray(value)\n )\n}\n\nexport function isArray<T extends any[]>(value: any): value is T {\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<T extends Function = Function>(\n value: any,\n): value is T {\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<T>(value: any) {\n return value as T\n}\n"],"mappings":";;AAEA,SAAgB,GAAGA,GAAQC,GAAQ;AACjC,QAAQ,MAAM,MAAM,MAAM,KAAK,IAAI,MAAM,IAAI,MAAQ,MAAM,KAAK,MAAM;AACvE;AAED,SAAgB,SAASC,OAA6B;AACpD,eAAc,UAAU;AACzB;AAED,SAAgB,YAAYA,OAAqB;AAC/C,eACS,UAAU,YAAY,OAAO,MAAM,MAAM,KAAK,OAAO,SAAS,MAAM;AAE9E;AAED,SAAgB,UAAUA,OAAqB;AAC7C,SACG,MAAM,WAAW,OAAO,MAAM,CAAC,CAAC,IACjC,SAAS,OAAO,MAAM,CAAC,IACvB,gBAAgB,KAAK,OAAO,MAAM,CAAC;AAEtC;AAED,SAAgB,SAASA,OAA6B;AACpD,QAAO,OAAO,UAAU,SAAS,KAAK,MAAM,KAAK;AAClD;AAED,SAAgB,aAAaA,OAA8B;AACzD,QAAO,UAAU,MAAM,IAAI,UAAU,UAAU,UAAU;AAC1D;AAED,SAAgB,UAAUA,OAA8B;AACtD,eAAc,UAAU;AACzB;AAED,SAAgB,YAAYA,OAAgC;AAC1D,eAAc,UAAU;AACzB;AAED,SAAgB,OAAOA,OAA2B;AAChD,QAAO,UAAU;AAClB;AAED,SAAgB,SAASA,OAA6B;AACpD,QAAO,iBAAiB;AACzB;AAED,SAAgB,SAAyBA,OAAwB;AAC/D,QACE,UAAU,gBACF,UAAU,mBAAmB,UAAU,gBAC9C,QAAQ,MAAM;AAElB;AAED,SAAgB,QAAyBA,OAAwB;AAC/D,QAAO,MAAM,QAAQ,MAAM;AAC5B;AAED,SAAgB,QAAQA,OAAqB;AAC3C,SAAQ,QAAQ,MAAM,KAAK,MAAM,UAAU,MAAM,MAAM,CAAC,MAAM,KAAK,KAAK;AACzE;AAED,SAAgB,cAAcA,OAAqB;AACjD,QAAO,SAAS,MAAM,KAAK,OAAO,KAAK,MAAM,CAAC;AAC/C;AAED,SAAgB,WACdA,OACY;AACZ,eAAc,UAAU;AACzB;AAED,SAAgB,OAAOA,OAAqB;AAC1C,QAAO,oNAAoN,KACzN,MACD;AACF;AAED,SAAgB,KAAQA,OAAY;AAClC,QAAO;AACR"}
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,UAAU,SACT,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 +1 @@
1
- {"version":3,"file":"calc.cjs","names":["operator: Operator","value: Operand","x: Operand"],"sources":["../../src/calc.ts"],"sourcesContent":["type Operator = \"*\" | \"+\" | \"-\" | \"/\"\n\nexport type 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":";;AAIA,SAAS,aAAaA,UAAoB,GAAG,MAAiB;AAC5D,QAAO,KAAK,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,SAAS,GAAG;AACvD;AAED,SAAS,IAAI,GAAG,MAAiB;AAC/B,QAAO,CAAC,KAAK,EAAE,aAAa,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;AAC7C;AAED,SAAS,SAAS,GAAG,MAAiB;AACpC,QAAO,CAAC,KAAK,EAAE,aAAa,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;AAC7C;AAED,SAAS,SAAS,GAAG,MAAiB;AACpC,QAAO,CAAC,KAAK,EAAE,aAAa,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;AAC7C;AAED,SAAS,OAAO,GAAG,MAAiB;AAClC,QAAO,CAAC,KAAK,EAAE,aAAa,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;AAC7C;AAED,SAAS,OAAOC,OAAgB;AAC9B,MAAK,MAAM,WAAW,MAAM,UAAU,CAAC,CAAC,CACtC,QAAO,OAAO,MAAM,CAAC,WAAW,IAAI,GAAG,OAAO,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,OAAO;AAE7E,QAAO,SAAS,OAAO,GAAG;AAC3B;AAWD,MAAa,OAAO,OAAO,OACzB,CAACC,OAAsB;CACrB,KAAK,CAAC,GAAG,SAAS,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC;CACvC,QAAQ,CAAC,GAAG,SAAS,KAAK,OAAO,GAAG,GAAG,KAAK,CAAC;CAC7C,UAAU,CAAC,GAAG,SAAS,KAAK,SAAS,GAAG,GAAG,KAAK,CAAC;CACjD,QAAQ,MAAM,KAAK,OAAO,EAAE,CAAC;CAC7B,UAAU,CAAC,GAAG,SAAS,KAAK,SAAS,GAAG,GAAG,KAAK,CAAC;CACjD,UAAU,MAAM,EAAE,UAAU;AAC7B,IACD;CACE;CACA;CACA;CACA;CACA;AACD,EACF"}
1
+ {"version":3,"file":"calc.cjs","names":[],"sources":["../../src/calc.ts"],"sourcesContent":["type Operator = \"*\" | \"+\" | \"-\" | \"/\"\n\nexport type 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":";;AAIA,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,6 +1,7 @@
1
1
  const require_rolldown_runtime = require('./_virtual/rolldown_runtime.cjs');
2
2
  const require_assertion = require('./assertion.cjs');
3
- const color2k = require_rolldown_runtime.__toESM(require("color2k"));
3
+ let color2k = require("color2k");
4
+ color2k = require_rolldown_runtime.__toESM(color2k);
4
5
 
5
6
  //#region src/color.ts
6
7
  const SEMANTIC_COLOR_SCHEMES = [
@@ -1 +1 @@
1
- {"version":3,"file":"color.cjs","names":["color: string","fallback?: string","format: ColorFormat","a: number","rgb: [number, number, number]","v","color: string | undefined","comparison: string | undefined"],"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(color: string, fallback?: string) {\n return function (format: ColorFormat): string | undefined {\n try {\n const isAlpha = format.endsWith(\"a\")\n\n if (/^[0-9a-fA-F]{6}$/.test(color)) color = \"#\" + color\n\n if (format.startsWith(\"hex\")) {\n let hexa = c.toHex(color)\n\n if (isAlpha) {\n if (hexa.length === 7) hexa += \"ff\"\n } else {\n hexa = hexa.replace(/^#(?:[0-9a-fA-F]{6})[0-9a-fA-F]{2}$/, \"$1\")\n }\n\n return hexa\n } else if (format.startsWith(\"hsl\")) {\n let hsla = c.toHsla(color)\n\n if (!isAlpha) {\n hsla = hsla.replace(/hsla/, \"hsl\")\n hsla = hsla.replace(/,\\s*\\d+(\\.\\d+)?\\)$/, \")\")\n }\n\n return hsla\n } else {\n let rgba = c.toRgba(color)\n\n if (!isAlpha) {\n rgba = rgba.replace(/rgba/, \"rgb\")\n rgba = rgba.replace(/,\\s*\\d+(\\.\\d+)?\\)$/, \")\")\n }\n\n return rgba\n }\n } catch {\n if (fallback) return convertColor(fallback)(format)\n }\n }\n}\n\nexport function calcFormat(color: string): ColorFormat {\n if (color.startsWith(\"hsl\")) {\n return color.startsWith(\"hsla\") ? \"hsla\" : \"hsl\"\n } else if (color.startsWith(\"rgb\")) {\n return color.startsWith(\"rgba\") ? \"rgba\" : \"rgb\"\n } else {\n return color.length === 9 ? \"hexa\" : \"hex\"\n }\n}\n\nexport 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(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(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] {\n let [r, g, b, a] = parseToRgba(color, fallback) ?? [255, 255, 255, 1]\n\n r = r / 255\n g = g / 255\n b = b / 255\n\n const [min, max] = [Math.min(r, g, b), Math.max(r, g, b)]\n const delta = max - min\n\n let [h, v, s] = [0, max, max == 0 ? 0 : delta / max]\n\n switch (min) {\n case max:\n h = 0\n break\n\n case r:\n h = 60 * ((b - g) / delta) + 180\n break\n\n case g:\n h = 60 * ((r - b) / delta) + 300\n break\n\n case b:\n h = 60 * ((g - r) / delta) + 60\n break\n }\n\n return [h, s, v, a]\n}\n\nexport function rgbaTo(\n [r, g, b, a]: [number, number, number, number],\n fallback?: string,\n) {\n return function (format: ColorFormat = \"hex\") {\n return convertColor(c.rgba(r, g, b, a), fallback)(format)\n }\n}\n\nexport function hslaTo(\n [h, s, l, a]: [number, number, number, number],\n fallback?: string,\n) {\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 return function (format: ColorFormat = \"hex\"): string | undefined {\n h = h / 60\n\n let rgb: [number, number, number] = [v, v, v]\n\n let i = Math.floor(h)\n let f = h - i\n let p = v * (1 - s)\n let q = v * (1 - s * f)\n let t = v * (1 - s * (1 - f))\n\n switch (i) {\n case 0:\n case 6:\n rgb = [v, t, p]\n break\n\n case 1:\n rgb = [q, v, p]\n break\n\n case 2:\n rgb = [p, v, t]\n break\n\n case 3:\n rgb = [p, q, v]\n break\n\n case 4:\n rgb = [t, p, v]\n break\n\n case 5:\n rgb = [v, p, q]\n break\n }\n\n let color = `rgb(${rgb.map((v) => Math.round(v * 255)).join(\", \")})`\n\n if (isNumber(a)) color = color.replace(/\\)$/, `, ${a})`)\n\n return convertColor(color, fallback)(format)\n }\n}\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","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(color: string, fallback?: string) {\n return function (format: ColorFormat): string | undefined {\n try {\n const isAlpha = format.endsWith(\"a\")\n\n if (/^[0-9a-fA-F]{6}$/.test(color)) color = \"#\" + color\n\n if (format.startsWith(\"hex\")) {\n let hexa = c.toHex(color)\n\n if (isAlpha) {\n if (hexa.length === 7) hexa += \"ff\"\n } else {\n hexa = hexa.replace(/^#(?:[0-9a-fA-F]{6})[0-9a-fA-F]{2}$/, \"$1\")\n }\n\n return hexa\n } else if (format.startsWith(\"hsl\")) {\n let hsla = c.toHsla(color)\n\n if (!isAlpha) {\n hsla = hsla.replace(/hsla/, \"hsl\")\n hsla = hsla.replace(/,\\s*\\d+(\\.\\d+)?\\)$/, \")\")\n }\n\n return hsla\n } else {\n let rgba = c.toRgba(color)\n\n if (!isAlpha) {\n rgba = rgba.replace(/rgba/, \"rgb\")\n rgba = rgba.replace(/,\\s*\\d+(\\.\\d+)?\\)$/, \")\")\n }\n\n return rgba\n }\n } catch {\n if (fallback) return convertColor(fallback)(format)\n }\n }\n}\n\nexport function calcFormat(color: string): ColorFormat {\n if (color.startsWith(\"hsl\")) {\n return color.startsWith(\"hsla\") ? \"hsla\" : \"hsl\"\n } else if (color.startsWith(\"rgb\")) {\n return color.startsWith(\"rgba\") ? \"rgba\" : \"rgb\"\n } else {\n return color.length === 9 ? \"hexa\" : \"hex\"\n }\n}\n\nexport 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(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(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] {\n let [r, g, b, a] = parseToRgba(color, fallback) ?? [255, 255, 255, 1]\n\n r = r / 255\n g = g / 255\n b = b / 255\n\n const [min, max] = [Math.min(r, g, b), Math.max(r, g, b)]\n const delta = max - min\n\n let [h, v, s] = [0, max, max == 0 ? 0 : delta / max]\n\n switch (min) {\n case max:\n h = 0\n break\n\n case r:\n h = 60 * ((b - g) / delta) + 180\n break\n\n case g:\n h = 60 * ((r - b) / delta) + 300\n break\n\n case b:\n h = 60 * ((g - r) / delta) + 60\n break\n }\n\n return [h, s, v, a]\n}\n\nexport function rgbaTo(\n [r, g, b, a]: [number, number, number, number],\n fallback?: string,\n) {\n return function (format: ColorFormat = \"hex\") {\n return convertColor(c.rgba(r, g, b, a), fallback)(format)\n }\n}\n\nexport function hslaTo(\n [h, s, l, a]: [number, number, number, number],\n fallback?: string,\n) {\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 return function (format: ColorFormat = \"hex\"): string | undefined {\n h = h / 60\n\n let rgb: [number, number, number] = [v, v, v]\n\n let i = Math.floor(h)\n let f = h - i\n let p = v * (1 - s)\n let q = v * (1 - s * f)\n let t = v * (1 - s * (1 - f))\n\n switch (i) {\n case 0:\n case 6:\n rgb = [v, t, p]\n break\n\n case 1:\n rgb = [q, v, p]\n break\n\n case 2:\n rgb = [p, v, t]\n break\n\n case 3:\n rgb = [p, q, v]\n break\n\n case 4:\n rgb = [t, p, v]\n break\n\n case 5:\n rgb = [v, p, q]\n break\n }\n\n let color = `rgb(${rgb.map((v) => Math.round(v * 255)).join(\", \")})`\n\n if (isNumber(a)) color = color.replace(/\\)$/, `, ${a})`)\n\n return convertColor(color, fallback)(format)\n }\n}\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
@@ -151,9 +151,7 @@ function getLastTabbableElement(el, includeEl) {
151
151
  }
152
152
  function getTabbableElementEdges(el, includeEl) {
153
153
  const els = getTabbableElements(el, includeEl);
154
- const first = els[0] || null;
155
- const last = els[els.length - 1] || null;
156
- return [first, last];
154
+ return [els[0] || null, els[els.length - 1] || null];
157
155
  }
158
156
  function getParentNode(node) {
159
157
  if (getNodeName(node) === "html") return node;
@@ -212,6 +210,9 @@ function getTabIndex(node) {
212
210
  }
213
211
  return node.tabIndex;
214
212
  }
213
+ function isTruthyDataAttr(condition) {
214
+ return condition === "true" || condition === true || condition === "";
215
+ }
215
216
  function dataAttr(condition) {
216
217
  return condition ? "" : void 0;
217
218
  }
@@ -223,7 +224,7 @@ function ariaAttr(condition) {
223
224
  function uuid() {
224
225
  return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/x/g, () => Math.random().toString(16).slice(2, 3)).replace(/y/g, () => (Math.random() * 4 | 0).toString(16));
225
226
  }
226
- const focusableElList = [
227
+ const focusableSelector = [
227
228
  "[tabindex]",
228
229
  "input:not([type='hidden']):not([disabled])",
229
230
  "select:not([disabled])",
@@ -238,13 +239,11 @@ const focusableElList = [
238
239
  "video[controls]",
239
240
  "[contenteditable]:not([contenteditable='false'])",
240
241
  "details > summary:first-of-type"
241
- ];
242
- const focusableSelector = focusableElList.join(", ");
242
+ ].join(", ");
243
243
  function getFocusableElements(el, includeEl = false) {
244
244
  if (!el) return [];
245
245
  const els = Array.from(el.querySelectorAll(focusableSelector));
246
- const include = includeEl;
247
- if (include && isHTMLElement(el) && isFocusableElement(el)) els.unshift(el);
246
+ if (includeEl && isHTMLElement(el) && isFocusableElement(el)) els.unshift(el);
248
247
  const focusableEls = els.filter(isFocusableElement);
249
248
  focusableEls.forEach((el$1, i) => {
250
249
  if (isFrame(el$1) && el$1.contentDocument) {
@@ -283,12 +282,10 @@ const LOCK_DATA_ATTR = "data-scroll-lock";
283
282
  function scrollLock(el) {
284
283
  const doc = getDocument(el);
285
284
  const win = getWindow(doc);
286
- const locked = doc.body.hasAttribute(LOCK_DATA_ATTR);
287
- if (locked) return;
285
+ if (doc.body.hasAttribute(LOCK_DATA_ATTR)) return;
288
286
  const scrollbarWidth = win.innerWidth - doc.documentElement.clientWidth;
289
287
  const documentLeft = doc.documentElement.getBoundingClientRect().left;
290
- const scrollbarX = Math.round(documentLeft) + doc.documentElement.scrollLeft;
291
- const paddingProperty = scrollbarX ? "paddingLeft" : "paddingRight";
288
+ const paddingProperty = Math.round(documentLeft) + doc.documentElement.scrollLeft ? "paddingLeft" : "paddingRight";
292
289
  doc.body.setAttribute(LOCK_DATA_ATTR, "");
293
290
  const setStyleForIOS = () => {
294
291
  const offsetLeft = win.visualViewport?.offsetLeft ?? 0;
@@ -364,6 +361,7 @@ exports.isSafari = isSafari;
364
361
  exports.isShadowRoot = isShadowRoot;
365
362
  exports.isTabbableElement = isTabbableElement;
366
363
  exports.isTouchDevice = isTouchDevice;
364
+ exports.isTruthyDataAttr = isTruthyDataAttr;
367
365
  exports.isVisibleElement = isVisibleElement;
368
366
  exports.isVisualViewport = isVisualViewport;
369
367
  exports.isWebKit = isWebKit;
@@ -1 +1 @@
1
- {"version":3,"file":"dom.cjs","names":["v: RegExp","el: any","el: HTMLElement","rootNode: Document | ShadowRoot","el?: Node","el: Element","el: Document | Node | null | ShadowRoot | undefined","el: Document | Element | Node | null | undefined | Window","node: Node | Window","el: HTMLElement | null","includeEl?: boolean","el","current?: HTMLElement | null","node: Node","el: EventTarget | HTMLElement | null","parent?: EventTarget | HTMLElement | null","child?: EventTarget | HTMLElement | null","next: Node | null | ShadowRoot","value: number | string | undefined","node: HTMLElement | SVGElement","condition: any","el: null | Pick<HTMLElement, \"querySelectorAll\">","attr: string","v: string","el: HTMLElement | null | undefined","style: Partial<\n CSSStyleDeclaration | { [key: `--${string}`]: number | string }\n >","noop"],"sources":["../../src/dom.ts"],"sourcesContent":["import { isArray, isNumber, isObject, isUndefined } from \"./assertion\"\nimport { noop } from \"./function\"\n\nexport function createdDom(): boolean {\n return !!(\n typeof window !== \"undefined\" &&\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n window.document?.createElement\n )\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(v: RegExp): boolean {\n return createdDom() && v.test(navigator.vendor)\n}\n\nexport function platform(v: RegExp): boolean {\n return createdDom() && v.test(getPlatform())\n}\n\nexport function userAgent(v: RegExp): boolean {\n return createdDom() && v.test(getUserAgent())\n}\n\nexport function isMac(): boolean {\n return platform(/^Mac/i)\n}\n\nexport function isIPhone(): boolean {\n return platform(/^iPhone/i)\n}\n\nexport function isIPad(): boolean {\n return platform(/^iPad/i) || (isMac() && navigator.maxTouchPoints > 1)\n}\n\nexport function isIos(): boolean {\n return isIPhone() || isIPad()\n}\n\nexport function isAndroid(): boolean {\n return platform(/^Android/i)\n}\n\nexport function isApple(): boolean {\n return isMac() || isIos()\n}\n\nexport function isSafari(): boolean {\n return isApple() && vendor(/apple/i)\n}\n\nexport function isFirefox(): boolean {\n return userAgent(/Firefox/i)\n}\n\nexport function isChrome(): boolean {\n return userAgent(/Chrome/i)\n}\n\nexport function isWebKit(): boolean {\n return userAgent(/AppleWebKit/i) && !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 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 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(el: Element, attr: string, v: string) {\n const prev = el.getAttribute(attr)\n const exists = prev != null\n\n el.setAttribute(attr, v)\n\n return () => {\n if (!exists) {\n el.removeAttribute(attr)\n } else {\n el.setAttribute(attr, 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","el","next: Node | null | ShadowRoot","isNumber","isUndefined","noop"],"sources":["../../src/dom.ts"],"sourcesContent":["import { isArray, isNumber, isObject, isUndefined } from \"./assertion\"\nimport { noop } from \"./function\"\n\nexport function createdDom(): boolean {\n return !!(\n typeof window !== \"undefined\" &&\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n window.document?.createElement\n )\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(v: RegExp): boolean {\n return createdDom() && v.test(navigator.vendor)\n}\n\nexport function platform(v: RegExp): boolean {\n return createdDom() && v.test(getPlatform())\n}\n\nexport function userAgent(v: RegExp): boolean {\n return createdDom() && v.test(getUserAgent())\n}\n\nexport function isMac(): boolean {\n return platform(/^Mac/i)\n}\n\nexport function isIPhone(): boolean {\n return platform(/^iPhone/i)\n}\n\nexport function isIPad(): boolean {\n return platform(/^iPad/i) || (isMac() && navigator.maxTouchPoints > 1)\n}\n\nexport function isIos(): boolean {\n return isIPhone() || isIPad()\n}\n\nexport function isAndroid(): boolean {\n return platform(/^Android/i)\n}\n\nexport function isApple(): boolean {\n return isMac() || isIos()\n}\n\nexport function isSafari(): boolean {\n return isApple() && vendor(/apple/i)\n}\n\nexport function isFirefox(): boolean {\n return userAgent(/Firefox/i)\n}\n\nexport function isChrome(): boolean {\n return userAgent(/Chrome/i)\n}\n\nexport function isWebKit(): boolean {\n return userAgent(/AppleWebKit/i) && !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 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(el: Element, attr: string, v: string) {\n const prev = el.getAttribute(attr)\n const exists = prev != null\n\n el.setAttribute(attr, v)\n\n return () => {\n if (!exists) {\n el.removeAttribute(attr)\n } else {\n el.setAttribute(attr, 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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"}
@@ -17,20 +17,20 @@ function isMultiTouchEvent(ev) {
17
17
  function getEventWindow(ev) {
18
18
  return ev.view ?? window;
19
19
  }
20
- function pointFromTouch(e, type = process.env.NODE_ENV === "test" ? "client" : "page") {
20
+ function pointFromTouch(e, type = "client") {
21
21
  const point = e.touches[0] || e.changedTouches[0];
22
22
  return {
23
23
  x: point?.[`${type}X`] ?? 0,
24
24
  y: point?.[`${type}Y`] ?? 0
25
25
  };
26
26
  }
27
- function pointFromMouse(point, type = "page") {
27
+ function pointFromMouse(point, type = "client") {
28
28
  return {
29
29
  x: point[`${type}X`],
30
30
  y: point[`${type}Y`]
31
31
  };
32
32
  }
33
- function getEventPoint(ev, type = process.env.NODE_ENV === "test" ? "client" : "page") {
33
+ function getEventPoint(ev, type = "client") {
34
34
  return isTouchEvent(ev) ? pointFromTouch(ev, type) : pointFromMouse(ev, type);
35
35
  }
36
36
  function addDomEvent(target, type, cb, options) {
@@ -45,7 +45,7 @@ function focusTrap(el, onFocus) {
45
45
  function onKeyDown(ev) {
46
46
  if (ev.key !== "Tab") return;
47
47
  let elToFocus = null;
48
- const [firstTabbable, lastTabbable] = require_dom.getTabbableElementEdges(el, true);
48
+ const [firstTabbable, lastTabbable] = require_dom.getTabbableElementEdges(el, false);
49
49
  if (ev.shiftKey) {
50
50
  if (doc.activeElement === firstTabbable) elToFocus = lastTabbable;
51
51
  } else if (doc.activeElement === lastTabbable) elToFocus = firstTabbable;
@@ -62,14 +62,20 @@ function focusTransfer(el, target, onFocus) {
62
62
  function onKeyDown(ev) {
63
63
  if (ev.key !== "Tab") return;
64
64
  let elToFocus = null;
65
- const [firstTabbable, lastTabbable] = require_dom.getTabbableElementEdges(el, true);
65
+ const [firstTabbable, lastTabbable] = require_dom.getTabbableElementEdges(el, false);
66
66
  const nextTabbable = require_dom.getNextTabbableElement(body, target);
67
67
  const noTabbableEls = !firstTabbable && !lastTabbable;
68
68
  if (ev.shiftKey) {
69
- if (nextTabbable === doc.activeElement) elToFocus = lastTabbable;
70
- else if (doc.activeElement === firstTabbable || noTabbableEls) elToFocus = target;
71
- } else if (doc.activeElement === target) elToFocus = firstTabbable;
72
- else if (doc.activeElement === lastTabbable || noTabbableEls) elToFocus = nextTabbable;
69
+ if (nextTabbable === doc.activeElement) {
70
+ if (doc.activeElement !== lastTabbable) elToFocus = lastTabbable;
71
+ } else if (doc.activeElement === firstTabbable || noTabbableEls) {
72
+ if (doc.activeElement !== target) elToFocus = target;
73
+ }
74
+ } else if (doc.activeElement === target) {
75
+ if (doc.activeElement !== firstTabbable) elToFocus = firstTabbable;
76
+ } else if (doc.activeElement === lastTabbable || noTabbableEls) {
77
+ if (doc.activeElement !== nextTabbable) elToFocus = nextTabbable;
78
+ }
73
79
  if (!elToFocus) return;
74
80
  ev.preventDefault();
75
81
  if (require_assertion.isFunction(onFocus)) onFocus(elToFocus);
@@ -1 +1 @@
1
- {"version":3,"file":"event.cjs","names":["ev: any","ev: AnyPointerEvent","ev: Event","e: TouchEvent","type: \"client\" | \"page\"","point: MouseEvent | PointerEvent","target: EventTarget","type: Y","cb: (ev: EventMap[Y]) => void","options?: AddEventListenerOptions | boolean","el: HTMLElement | null","onFocus?: (elToFocus: HTMLElement) => void","noop","ev: KeyboardEvent","elToFocus: HTMLElement | null | undefined","target?: HTMLElement | null"],"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\" = process.env.NODE_ENV === \"test\" ? \"client\" : \"page\",\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\" = \"page\",\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\" = process.env.NODE_ENV === \"test\" ? \"client\" : \"page\",\n): Point {\n return isTouchEvent(ev) ? pointFromTouch(ev, type) : pointFromMouse(ev, type)\n}\n\nexport interface EventMap\n extends 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, true)\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, true)\n const nextTabbable = getNextTabbableElement(body, target)\n const noTabbableEls = !firstTabbable && !lastTabbable\n\n if (ev.shiftKey) {\n if (nextTabbable === doc.activeElement) {\n elToFocus = lastTabbable\n } else if (doc.activeElement === firstTabbable || noTabbableEls) {\n elToFocus = target\n }\n } else {\n if (doc.activeElement === target) {\n elToFocus = firstTabbable\n } else if (doc.activeElement === lastTabbable || noTabbableEls) {\n 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,aAAaA,IAA2B;CACtD,MAAM,MAAM,eAAe,GAAG;AAE9B,YAAW,IAAI,iBAAiB,eAAe,cAAc,IAAI,aAC/D,WAAU,GAAG,gBAAgB;AAE/B,QAAO,cAAc,IAAI;AAC1B;AAED,SAAgB,aAAaC,IAAuC;AAClE,UAAU,GAAkB;AAC7B;AAED,SAAgB,kBAAkBA,IAA8B;AAC9D,QAAO,aAAa,GAAG,IAAI,GAAG,QAAQ,SAAS;AAChD;AAED,SAAgB,eAAeC,IAA8B;AAC3D,QAAS,GAAe,QAAQ;AACjC;AAED,SAAgB,eACdC,GACAC,OAA0B,QAAQ,IAAI,aAAa,SAAS,WAAW,QAChE;CACP,MAAM,QAAQ,EAAE,QAAQ,MAAM,EAAE,eAAe;AAE/C,QAAO;EAAE,GAAG,QAAQ,GAAG,KAAK,CAAC,CAAC,KAAK;EAAG,GAAG,QAAQ,GAAG,KAAK,CAAC,CAAC,KAAK;CAAG;AACpE;AAED,SAAgB,eACdC,OACAD,OAA0B,QACnB;AACP,QAAO;EACL,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC;EACnB,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC;CACpB;AACF;AAED,SAAgB,cACdH,IACAG,OAA0B,QAAQ,IAAI,aAAa,SAAS,WAAW,QAChE;AACP,QAAO,aAAa,GAAG,GAAG,eAAe,IAAI,KAAK,GAAG,eAAe,IAAI,KAAK;AAC9E;AAUD,SAAgB,YACdE,QACAC,MACAC,IACAC,SACA;AACA,QAAO,iBACL,MACA,IACA,QACD;AAED,QAAO,MAAM;AACX,SAAO,oBACL,MACA,IACA,QACD;CACF;AACF;AAED,SAAgB,UACdC,IACAC,SACA;AACA,MAAK,GAAI,QAAOC;CAEhB,MAAM,MAAM,wBAAY,GAAG;CAE3B,SAAS,UAAUC,IAAmB;AACpC,MAAI,GAAG,QAAQ,MAAO;EAEtB,IAAIC,YAA4C;EAEhD,MAAM,CAAC,eAAe,aAAa,GAAG,oCAAwB,IAAI,KAAK;AAEvE,MAAI,GAAG,UACL;OAAI,IAAI,kBAAkB,cAAe,aAAY;EAAY,WAE7D,IAAI,kBAAkB,aAAc,aAAY;AAGtD,OAAK,UAAW;AAEhB,KAAG,gBAAgB;AAEnB,MAAI,6BAAW,QAAQ,CACrB,SAAQ,UAAU;MAElB,WAAU,OAAO;CAEpB;AAED,QAAO,YAAY,IAAI,WAAW,WAAW,KAAK;AACnD;AAED,SAAgB,cACdJ,IACAK,QACAJ,SACA;CACA,MAAM,MAAM,wBAAY,GAAG;CAC3B,MAAM,OAAO,IAAI;CAEjB,SAAS,UAAUE,IAAmB;AACpC,MAAI,GAAG,QAAQ,MAAO;EAEtB,IAAIC,YAA4C;EAEhD,MAAM,CAAC,eAAe,aAAa,GAAG,oCAAwB,IAAI,KAAK;EACvE,MAAM,eAAe,mCAAuB,MAAM,OAAO;EACzD,MAAM,iBAAiB,kBAAkB;AAEzC,MAAI,GAAG,UACL;OAAI,iBAAiB,IAAI,cACvB,aAAY;YACH,IAAI,kBAAkB,iBAAiB,cAChD,aAAY;EACb,WAEG,IAAI,kBAAkB,OACxB,aAAY;WACH,IAAI,kBAAkB,gBAAgB,cAC/C,aAAY;AAIhB,OAAK,UAAW;AAEhB,KAAG,gBAAgB;AAEnB,MAAI,6BAAW,QAAQ,CACrB,SAAQ,UAAU;MAElB,WAAU,OAAO;CAEpB;AAED,QAAO,YAAY,KAAK,WAAW,WAAW,KAAK;AACpD"}
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 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;;AAW/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"}
@@ -2,20 +2,20 @@ const require_assertion = require('./assertion.cjs');
2
2
 
3
3
  //#region src/function.ts
4
4
  const noop = () => {};
5
- function runIfFn(valOrFunc, ...args) {
6
- return require_assertion.isFunction(valOrFunc) ? valOrFunc(...args) : valOrFunc;
5
+ function runIfFn(valOrFn, ...args) {
6
+ return require_assertion.isFunction(valOrFn) ? valOrFn(...args) : valOrFn;
7
7
  }
8
- function handlerAll(...funcs) {
9
- return function(event, ...args) {
10
- funcs.some((func) => {
11
- func?.(event, ...args);
12
- return event?.defaultPrevented;
8
+ function handlerAll(...fns) {
9
+ return function(ev, ...args) {
10
+ fns.some((fn) => {
11
+ fn?.(ev, ...args);
12
+ return ev?.defaultPrevented;
13
13
  });
14
14
  };
15
15
  }
16
- function fnAll(...funcs) {
16
+ function fnAll(...fns) {
17
17
  return function(...args) {
18
- return funcs.forEach((func) => func?.(...args));
18
+ return fns.forEach((fn) => fn?.(...args));
19
19
  };
20
20
  }
21
21
 
@@ -1 +1 @@
1
- {"version":3,"file":"function.cjs","names":["valOrFunc: ((...funcArgs: U) => T) | T","event: T extends (event: infer R, ...args: any[]) => any ? R : never"],"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 function runIfFn<T, U extends any[]>(\n valOrFunc: ((...funcArgs: U) => T) | T,\n ...args: U\n): T {\n return isFunction(valOrFunc) ? valOrFunc(...args) : valOrFunc\n}\n\nexport function handlerAll<T extends (event: any, ...args: any[]) => void>(\n ...funcs: (null | T | undefined)[]\n) {\n return function (\n event: T extends (event: infer R, ...args: any[]) => any ? R : never,\n ...args: T extends (event: any, ...args: infer R) => any ? R : never\n ) {\n funcs.some((func) => {\n func?.(event, ...args)\n\n return event?.defaultPrevented\n })\n }\n}\n\nexport function fnAll<T extends (...args: any[]) => any>(\n ...funcs: (null | T | undefined)[]\n) {\n return function (...args: T extends (...args: infer R) => any ? R : never) {\n return funcs.forEach((func) => func?.(...args))\n }\n}\n"],"mappings":";;;AAGA,MAAa,OAAO,MAAM,CAAE;AAE5B,SAAgB,QACdA,WACA,GAAG,MACA;AACH,QAAO,6BAAW,UAAU,GAAG,UAAU,GAAG,KAAK,GAAG;AACrD;AAED,SAAgB,WACd,GAAG,OACH;AACA,QAAO,SACLC,OACA,GAAG,MACH;AACA,QAAM,KAAK,CAAC,SAAS;AACnB,UAAO,OAAO,GAAG,KAAK;AAEtB,UAAO,OAAO;EACf,EAAC;CACH;AACF;AAED,SAAgB,MACd,GAAG,OACH;AACA,QAAO,SAAU,GAAG,MAAuD;AACzE,SAAO,MAAM,QAAQ,CAAC,SAAS,OAAO,GAAG,KAAK,CAAC;CAChD;AACF"}
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 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,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 +1 @@
1
- {"version":3,"file":"i18n.cjs","names":["_locale: string"],"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;AACD;AAED,MAAM,YAAY,IAAI,IAAI;CACxB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD;AAED,SAAgB,MAAMA,SAAiB;CACrC,MAAM,SAAS,IAAI,KAAK,OAAO,SAAS,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;AAE/C"}
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"}
@@ -72,6 +72,7 @@ exports.isArray = require_assertion.isArray;
72
72
  exports.isBoolean = require_assertion.isBoolean;
73
73
  exports.isBooleanish = require_assertion.isBooleanish;
74
74
  exports.isChrome = require_dom.isChrome;
75
+ exports.isDate = require_assertion.isDate;
75
76
  exports.isDisabledElement = require_dom.isDisabledElement;
76
77
  exports.isDocument = require_dom.isDocument;
77
78
  exports.isEditableElement = require_dom.isEditableElement;
@@ -105,6 +106,7 @@ exports.isString = require_assertion.isString;
105
106
  exports.isTabbableElement = require_dom.isTabbableElement;
106
107
  exports.isTouchDevice = require_dom.isTouchDevice;
107
108
  exports.isTouchEvent = require_event.isTouchEvent;
109
+ exports.isTruthyDataAttr = require_dom.isTruthyDataAttr;
108
110
  exports.isUndefined = require_assertion.isUndefined;
109
111
  exports.isUnit = require_assertion.isUnit;
110
112
  exports.isVisibleElement = require_dom.isVisibleElement;
@@ -1 +1 @@
1
- {"version":3,"file":"module.cjs","names":["module: T","module"],"sources":["../../src/module.ts"],"sourcesContent":["export function interopDefault<T>(module: T): T {\n return (module as { default: T }).default || module\n}\n"],"mappings":";;AAAA,SAAgB,eAAkBA,UAAc;AAC9C,QAAQC,SAA0B,WAAWA;AAC9C"}
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"}
@@ -21,9 +21,7 @@ function countDecimal(n) {
21
21
  return p;
22
22
  }
23
23
  function roundNumberToStep(n, from, step) {
24
- const nextValue = Math.round((n - from) / step) * step + from;
25
- const precision = countDecimal(step);
26
- return toPrecision(nextValue, precision);
24
+ return toPrecision(Math.round((n - from) / step) * step + from, countDecimal(step));
27
25
  }
28
26
  function valueToPercent(n, min, max) {
29
27
  return (n - min) * 100 / (max - min);
@@ -1 +1 @@
1
- {"version":3,"file":"number.cjs","names":["n: any","n: number","precision?: number","from: number","step: number","min: number","max: number"],"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,SAASA,GAAgB;CACvC,MAAM,MAAM,WAAW,EAAE;AAEzB,eAAc,QAAQ,YAAY,OAAO,MAAM,IAAI,GAAG,IAAI;AAC3D;AAED,SAAgB,YAAYC,GAAWC,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;AACvD;AAED,SAAgB,aAAaD,GAAmB;AAC9C,MAAK,OAAO,SAAS,EAAE,CAAE,QAAO;CAEhC,IAAI,IAAI;CACR,IAAI,IAAI;AAER,QAAO,KAAK,MAAM,IAAI,EAAE,GAAG,MAAM,GAAG;AAClC,OAAK;AACL,OAAK;CACN;AAED,QAAO;AACR;AAED,SAAgB,kBAAkBA,GAAWE,MAAcC,MAAc;CACvE,MAAM,YAAY,KAAK,OAAO,IAAI,QAAQ,KAAK,GAAG,OAAO;CAEzD,MAAM,YAAY,aAAa,KAAK;AAEpC,QAAO,YAAY,WAAW,UAAU;AACzC;AAED,SAAgB,eAAeH,GAAWI,KAAaC,KAAqB;AAC1E,SAAS,IAAI,OAAO,OAAQ,MAAM;AACnC;AAED,SAAgB,eAAeL,GAAWI,KAAaC,KAAa;AAClE,SAAQ,MAAM,OAAO,IAAI;AAC1B;AAED,SAAgB,YAAYL,GAAWI,KAAaC,KAAqB;AACvE,QAAO,KAAK,IAAI,KAAK,IAAI,GAAG,IAAI,EAAE,IAAI;AACvC"}
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"}
@@ -28,8 +28,7 @@ function splitObject(obj, funcOrKeys) {
28
28
  function filterObject(obj, func) {
29
29
  const result = {};
30
30
  Object.entries(obj).forEach(([key, value]) => {
31
- const shouldPass = func(key, value, obj);
32
- if (shouldPass) result[key] = value;
31
+ if (func(key, value, obj)) result[key] = value;
33
32
  });
34
33
  return result;
35
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"object.cjs","names":["obj: Y","keys: M[] | readonly M[]","result: Dict","funcOrKeys?: ((key: string) => boolean) | M[] | readonly M[]","picked: Dict","omitted: Dict","func: (key: keyof Y, value: Y[keyof Y], obj: Y) => boolean","target: any","source: any","options: mergeOptions","targetValue: any","obj: any","objOrArray: Y","callBack: (value: any) => any","obj: Dict | undefined","path: number | string","fallback?: any","func: typeof getObject","obj: Dict","obj: T","key?: string"],"sources":["../../src/object.ts"],"sourcesContent":["import type { Dict } from \"./index.types\"\nimport {\n isArray,\n isFunction,\n isObject,\n isString,\n isUndefined,\n} from \"./assertion\"\n\nexport function omitObject<Y extends Dict, M extends keyof Y>(\n obj: Y,\n keys: M[] | readonly M[],\n): Omit<Y, M> {\n if (!keys.length) return obj\n\n const result: Dict = {}\n\n Object.keys(obj).forEach((key) => {\n if (keys.includes(key as M)) return\n\n result[key] = obj[key]\n })\n\n return result as Omit<Y, M>\n}\n\nexport function pickObject<Y extends Dict, M extends keyof Y>(\n obj: Y,\n keys: M[] | readonly M[],\n): { [D in M]: Y[D] } {\n if (!keys.length) return {} as { [D in M]: Y[D] }\n\n const result = {} as { [D in M]: Y[D] }\n\n keys.forEach((key) => {\n if (key in obj) result[key] = obj[key]\n })\n\n return result\n}\n\nexport function splitObject<Y extends Dict, M extends keyof Y>(\n obj: Y,\n funcOrKeys?: M[] | readonly M[],\n): [{ [D in M]: Y[D] }, Omit<Y, M>]\n\nexport function splitObject<Y extends Dict, M extends Dict>(\n obj: Dict,\n funcOrKeys?: (key: string) => boolean,\n): [Y, M]\n\nexport function splitObject<Y extends Dict, M extends keyof Y>(\n obj: Y,\n funcOrKeys?: ((key: string) => boolean) | M[] | readonly M[],\n) {\n const picked: Dict = {}\n const omitted: Dict = {}\n\n for (const [key, value] of Object.entries(obj)) {\n if (\n isFunction(funcOrKeys) ? funcOrKeys(key) : funcOrKeys?.includes(key as M)\n ) {\n picked[key] = value\n } else {\n omitted[key] = value\n }\n }\n\n return [picked, omitted] as [{ [D in M]: Y[D] }, Omit<Y, M>]\n}\n\nexport function filterObject<Y extends Dict, M extends Dict>(\n obj: Y,\n func: (key: keyof Y, value: Y[keyof Y], obj: Y) => boolean,\n): M {\n const result: Dict = {}\n\n Object.entries(obj).forEach(([key, value]) => {\n const shouldPass = func(key, value, obj)\n\n if (shouldPass) result[key] = value\n })\n\n return result as M\n}\n\nexport function filterUndefined<Y extends Dict>(obj: Y): Y {\n return filterObject(obj, (_, val) => val !== null && val !== undefined)\n}\n\nexport interface mergeOptions {\n debug?: boolean\n mergeArray?: boolean\n shouldProcess?: (value: any) => boolean\n}\n\nexport function merge<Y extends Dict>(\n target: any,\n source: any,\n options: mergeOptions = { mergeArray: false, shouldProcess: () => true },\n): Y {\n let result = Object.assign({}, target)\n\n if (isObject(source) && options.shouldProcess?.(source)) {\n if (isObject(target)) {\n for (const [sourceKey, sourceValue] of Object.entries(source)) {\n const targetValue: any = target[sourceKey]\n\n if (options.shouldProcess(sourceValue)) {\n if (\n options.mergeArray &&\n isArray(sourceValue) &&\n isArray(targetValue)\n ) {\n result[sourceKey] = targetValue.concat(...sourceValue)\n } else if (\n !isFunction(sourceValue) &&\n isObject(sourceValue) &&\n target.hasOwnProperty(sourceKey)\n ) {\n result[sourceKey] = merge(targetValue, sourceValue, options)\n } else {\n Object.assign(result, { [sourceKey]: sourceValue })\n }\n } else {\n Object.assign(result, { [sourceKey]: sourceValue })\n }\n }\n } else {\n result = source\n }\n }\n\n return result as Y\n}\n\nexport interface FlattenObjectOptions {\n maxDepth?: number\n separator?: string\n shouldProcess?: (value: any) => boolean\n}\n\nexport function flattenObject<Y extends Dict>(\n obj: any,\n {\n maxDepth = Infinity,\n separator = \".\",\n shouldProcess = () => true,\n }: FlattenObjectOptions = {},\n): Y {\n if (!isObject(obj) && !isArray(obj)) return obj\n\n return Object.entries(obj).reduce<any>((result, [key, value]) => {\n if (isObject(value) && shouldProcess(value) && maxDepth > 1) {\n Object.entries(\n flattenObject(value, {\n maxDepth: maxDepth - 1,\n separator,\n shouldProcess,\n }),\n ).forEach(([childKey, childValue]) => {\n result[`${key}${separator}${childKey}`] = childValue\n })\n } else {\n result[key] = value\n }\n\n return result\n }, {}) as Y\n}\n\nexport function objectKeys<Y extends object>(obj: Y): (keyof Y)[] {\n return Object.keys(obj) as (keyof Y)[]\n}\n\nexport function replaceObject<Y = any>(\n objOrArray: Y,\n callBack: (value: any) => any,\n): Y {\n if (isArray(objOrArray)) {\n return objOrArray.map(callBack) as Y\n } else if (isObject(objOrArray)) {\n return Object.entries(objOrArray).reduce<Dict>((obj, [key, value]) => {\n obj[key] = callBack(value)\n\n return obj\n }, {}) as Y\n } else {\n return callBack(objOrArray)\n }\n}\n\nexport function getObject(\n obj: Dict | undefined,\n path: number | string,\n fallback?: any,\n) {\n const keys = isString(path)\n ? path.split(/\\[(.*?)\\]|\\./).filter(Boolean)\n : [path]\n\n for (const key of keys) {\n if (!obj) break\n\n obj = obj[key]\n }\n\n return obj === undefined ? fallback : obj\n}\n\nexport function memoizeObject(func: typeof getObject) {\n const cache = new WeakMap()\n\n function memoizedFunc<Y>(\n obj: Dict,\n path: number | string,\n fallback?: any,\n ): Y {\n if (isUndefined(obj)) return func(obj, path, fallback)\n\n if (!cache.has(obj)) cache.set(obj, new Map())\n\n const map = cache.get(obj)\n\n if (map.has(path)) return map.get(path)\n\n const value = func(obj, path, fallback)\n\n map.set(path, value)\n\n return value as Y\n }\n\n return memoizedFunc\n}\n\nexport const getMemoizedObject = memoizeObject(getObject)\n\nexport function wrapWithKey<T>(obj: T, key?: string) {\n if (key) {\n return { [key]: obj }\n } else {\n return obj\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"object.cjs","names":["result: Dict","picked: Dict","omitted: Dict","isFunction","isObject","targetValue: any","isArray","isString","isUndefined"],"sources":["../../src/object.ts"],"sourcesContent":["import type { Dict } from \"./index.types\"\nimport {\n isArray,\n isFunction,\n isObject,\n isString,\n isUndefined,\n} from \"./assertion\"\n\nexport function omitObject<Y extends Dict, M extends keyof Y>(\n obj: Y,\n keys: M[] | readonly M[],\n): Omit<Y, M> {\n if (!keys.length) return obj\n\n const result: Dict = {}\n\n Object.keys(obj).forEach((key) => {\n if (keys.includes(key as M)) return\n\n result[key] = obj[key]\n })\n\n return result as Omit<Y, M>\n}\n\nexport function pickObject<Y extends Dict, M extends keyof Y>(\n obj: Y,\n keys: M[] | readonly M[],\n): { [D in M]: Y[D] } {\n if (!keys.length) return {} as { [D in M]: Y[D] }\n\n const result = {} as { [D in M]: Y[D] }\n\n keys.forEach((key) => {\n if (key in obj) result[key] = obj[key]\n })\n\n return result\n}\n\nexport function splitObject<Y extends Dict, M extends keyof Y>(\n obj: Y,\n funcOrKeys?: M[] | readonly M[],\n): [{ [D in M]: Y[D] }, Omit<Y, M>]\n\nexport function splitObject<Y extends Dict, M extends Dict>(\n obj: Dict,\n funcOrKeys?: (key: string) => boolean,\n): [Y, M]\n\nexport function splitObject<Y extends Dict, M extends keyof Y>(\n obj: Y,\n funcOrKeys?: ((key: string) => boolean) | M[] | readonly M[],\n) {\n const picked: Dict = {}\n const omitted: Dict = {}\n\n for (const [key, value] of Object.entries(obj)) {\n if (\n isFunction(funcOrKeys) ? funcOrKeys(key) : funcOrKeys?.includes(key as M)\n ) {\n picked[key] = value\n } else {\n omitted[key] = value\n }\n }\n\n return [picked, omitted] as [{ [D in M]: Y[D] }, Omit<Y, M>]\n}\n\nexport function filterObject<Y extends Dict, M extends Dict>(\n obj: Y,\n func: (key: keyof Y, value: Y[keyof Y], obj: Y) => boolean,\n): M {\n const result: Dict = {}\n\n Object.entries(obj).forEach(([key, value]) => {\n const shouldPass = func(key, value, obj)\n\n if (shouldPass) result[key] = value\n })\n\n return result as M\n}\n\nexport function filterUndefined<Y extends Dict>(obj: Y): Y {\n return filterObject(obj, (_, val) => val !== null && val !== undefined)\n}\n\nexport interface mergeOptions {\n debug?: boolean\n mergeArray?: boolean\n shouldProcess?: (value: any) => boolean\n}\n\nexport function merge<Y extends Dict>(\n target: any,\n source: any,\n options: mergeOptions = { mergeArray: false, shouldProcess: () => true },\n): Y {\n let result = Object.assign({}, target)\n\n if (isObject(source) && options.shouldProcess?.(source)) {\n if (isObject(target)) {\n for (const [sourceKey, sourceValue] of Object.entries(source)) {\n const targetValue: any = target[sourceKey]\n\n if (options.shouldProcess(sourceValue)) {\n if (\n options.mergeArray &&\n isArray(sourceValue) &&\n isArray(targetValue)\n ) {\n result[sourceKey] = targetValue.concat(...sourceValue)\n } else if (\n !isFunction(sourceValue) &&\n isObject(sourceValue) &&\n target.hasOwnProperty(sourceKey)\n ) {\n result[sourceKey] = merge(targetValue, sourceValue, options)\n } else {\n Object.assign(result, { [sourceKey]: sourceValue })\n }\n } else {\n Object.assign(result, { [sourceKey]: sourceValue })\n }\n }\n } else {\n result = source\n }\n }\n\n return result as Y\n}\n\nexport interface FlattenObjectOptions {\n maxDepth?: number\n separator?: string\n shouldProcess?: (value: any) => boolean\n}\n\nexport function flattenObject<Y extends Dict>(\n obj: any,\n {\n maxDepth = Infinity,\n separator = \".\",\n shouldProcess = () => true,\n }: FlattenObjectOptions = {},\n): Y {\n if (!isObject(obj) && !isArray(obj)) return obj\n\n return Object.entries(obj).reduce<any>((result, [key, value]) => {\n if (isObject(value) && shouldProcess(value) && maxDepth > 1) {\n Object.entries(\n flattenObject(value, {\n maxDepth: maxDepth - 1,\n separator,\n shouldProcess,\n }),\n ).forEach(([childKey, childValue]) => {\n result[`${key}${separator}${childKey}`] = childValue\n })\n } else {\n result[key] = value\n }\n\n return result\n }, {}) as Y\n}\n\nexport function objectKeys<Y extends object>(obj: Y): (keyof Y)[] {\n return Object.keys(obj) as (keyof Y)[]\n}\n\nexport function replaceObject<Y = any>(\n objOrArray: Y,\n callBack: (value: any) => any,\n): Y {\n if (isArray(objOrArray)) {\n return objOrArray.map(callBack) as Y\n } else if (isObject(objOrArray)) {\n return Object.entries(objOrArray).reduce<Dict>((obj, [key, value]) => {\n obj[key] = callBack(value)\n\n return obj\n }, {}) as Y\n } else {\n return callBack(objOrArray)\n }\n}\n\nexport function getObject(\n obj: Dict | undefined,\n path: number | string,\n fallback?: any,\n) {\n const keys = isString(path)\n ? path.split(/\\[(.*?)\\]|\\./).filter(Boolean)\n : [path]\n\n for (const key of keys) {\n if (!obj) break\n\n obj = obj[key]\n }\n\n return obj === undefined ? fallback : obj\n}\n\nexport function memoizeObject(func: typeof getObject) {\n const cache = new WeakMap()\n\n function memoizedFunc<Y>(\n obj: Dict,\n path: number | string,\n fallback?: any,\n ): Y {\n if (isUndefined(obj)) return func(obj, path, fallback)\n\n if (!cache.has(obj)) cache.set(obj, new Map())\n\n const map = cache.get(obj)\n\n if (map.has(path)) return map.get(path)\n\n const value = func(obj, path, fallback)\n\n map.set(path, value)\n\n return value as Y\n }\n\n return memoizedFunc\n}\n\nexport const getMemoizedObject = memoizeObject(getObject)\n\nexport function wrapWithKey<Y>(obj: Y, key?: string) {\n if (key) {\n return { [key]: obj }\n } else {\n return obj\n }\n}\n"],"mappings":"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"}
@@ -2,7 +2,7 @@ const require_assertion = require('./assertion.cjs');
2
2
 
3
3
  //#region src/string.ts
4
4
  function cx(...classNames) {
5
- return classNames.filter((className) => !require_assertion.isUndefined(className)).map((className) => className.trim()).join(" ");
5
+ return classNames.filter((className) => !!className).map((className) => className.trim()).join(" ");
6
6
  }
7
7
  function escape(value, replaceValue = "") {
8
8
  return value.replace(/\s+/g, replaceValue);
@@ -57,10 +57,9 @@ function isSize(value) {
57
57
  function transformSize(token, value, omitTokens = null) {
58
58
  if (!token) return void 0;
59
59
  let resolvedSizeMap = sizeMap;
60
- if (omitTokens) resolvedSizeMap = sizeMap.filter((size$1) => !omitTokens.includes(size$1));
60
+ if (omitTokens) resolvedSizeMap = sizeMap.filter((size) => !omitTokens.includes(size));
61
61
  const index = resolvedSizeMap.indexOf(token);
62
- const size = resolvedSizeMap[index + value];
63
- return size ?? token;
62
+ return resolvedSizeMap[index + value] ?? token;
64
63
  }
65
64
  function toCamelCase(value) {
66
65
  return value.replace(/[_-](.)/g, (_, val) => val.toUpperCase()).replace(/^(.)/, (_, val) => val.toLowerCase());