@yamada-ui/utils 2.0.3-dev-20251023021940 → 2.1.0-next-20251025000229

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.
@@ -1 +1 @@
1
- {"version":3,"file":"calc.cjs","names":[],"sources":["../../src/calc.ts"],"sourcesContent":["type Operator = \"*\" | \"+\" | \"-\" | \"/\"\ntype Operand = number | string\n\nfunction toExpression(operator: Operator, ...args: Operand[]) {\n return args.join(` ${operator} `).replace(/calc/g, \"\")\n}\n\nfunction add(...args: Operand[]) {\n return `calc(${toExpression(\"+\", ...args)})`\n}\n\nfunction subtract(...args: Operand[]) {\n return `calc(${toExpression(\"-\", ...args)})`\n}\n\nfunction multiply(...args: Operand[]) {\n return `calc(${toExpression(\"*\", ...args)})`\n}\n\nfunction divide(...args: Operand[]) {\n return `calc(${toExpression(\"/\", ...args)})`\n}\n\nfunction negate(value: Operand) {\n if (!isNaN(parseFloat(value.toString())))\n return String(value).startsWith(\"-\") ? String(value).slice(1) : `-${value}`\n\n return multiply(value, -1)\n}\n\ninterface Calc {\n add: (...args: Operand[]) => Calc\n divide: (...args: Operand[]) => Calc\n multiply: (...args: Operand[]) => Calc\n negate: () => Calc\n subtract: (...args: Operand[]) => Calc\n toString: () => string\n}\n\nexport const calc = Object.assign(\n (x: Operand): Calc => ({\n add: (...args) => calc(add(x, ...args)),\n divide: (...args) => calc(divide(x, ...args)),\n multiply: (...args) => calc(multiply(x, ...args)),\n negate: () => calc(negate(x)),\n subtract: (...args) => calc(subtract(x, ...args)),\n toString: () => x.toString(),\n }),\n {\n add,\n divide,\n multiply,\n negate,\n subtract,\n },\n)\n"],"mappings":";;AAGA,SAAS,aAAa,UAAoB,GAAG,MAAiB;AAC5D,QAAO,KAAK,KAAK,IAAI,SAAS,GAAG,CAAC,QAAQ,SAAS,GAAG;;AAGxD,SAAS,IAAI,GAAG,MAAiB;AAC/B,QAAO,QAAQ,aAAa,KAAK,GAAG,KAAK,CAAC;;AAG5C,SAAS,SAAS,GAAG,MAAiB;AACpC,QAAO,QAAQ,aAAa,KAAK,GAAG,KAAK,CAAC;;AAG5C,SAAS,SAAS,GAAG,MAAiB;AACpC,QAAO,QAAQ,aAAa,KAAK,GAAG,KAAK,CAAC;;AAG5C,SAAS,OAAO,GAAG,MAAiB;AAClC,QAAO,QAAQ,aAAa,KAAK,GAAG,KAAK,CAAC;;AAG5C,SAAS,OAAO,OAAgB;AAC9B,KAAI,CAAC,MAAM,WAAW,MAAM,UAAU,CAAC,CAAC,CACtC,QAAO,OAAO,MAAM,CAAC,WAAW,IAAI,GAAG,OAAO,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI;AAEtE,QAAO,SAAS,OAAO,GAAG;;AAY5B,MAAa,OAAO,OAAO,QACxB,OAAsB;CACrB,MAAM,GAAG,SAAS,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC;CACvC,SAAS,GAAG,SAAS,KAAK,OAAO,GAAG,GAAG,KAAK,CAAC;CAC7C,WAAW,GAAG,SAAS,KAAK,SAAS,GAAG,GAAG,KAAK,CAAC;CACjD,cAAc,KAAK,OAAO,EAAE,CAAC;CAC7B,WAAW,GAAG,SAAS,KAAK,SAAS,GAAG,GAAG,KAAK,CAAC;CACjD,gBAAgB,EAAE,UAAU;CAC7B,GACD;CACE;CACA;CACA;CACA;CACA;CACD,CACF"}
1
+ {"version":3,"file":"calc.cjs","names":[],"sources":["../../src/calc.ts"],"sourcesContent":["type Operator = \"*\" | \"+\" | \"-\" | \"/\"\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"}
@@ -53,24 +53,24 @@ const TONES = [
53
53
  function convertColor(color, fallback) {
54
54
  return function(format) {
55
55
  try {
56
- const alpha = format.endsWith("a");
56
+ const isAlpha = format.endsWith("a");
57
57
  if (/^[0-9a-fA-F]{6}$/.test(color)) color = "#" + color;
58
58
  if (format.startsWith("hex")) {
59
59
  let hexa = color2k.toHex(color);
60
- if (alpha) {
60
+ if (isAlpha) {
61
61
  if (hexa.length === 7) hexa += "ff";
62
- } else hexa = hexa.replace(/^#([0-9a-fA-F]{6})[0-9a-fA-F]{2}$/, "#$1");
62
+ } else hexa = hexa.replace(/^#(?:[0-9a-fA-F]{6})[0-9a-fA-F]{2}$/, "$1");
63
63
  return hexa;
64
64
  } else if (format.startsWith("hsl")) {
65
65
  let hsla = color2k.toHsla(color);
66
- if (!alpha) {
66
+ if (!isAlpha) {
67
67
  hsla = hsla.replace(/hsla/, "hsl");
68
68
  hsla = hsla.replace(/,\s*\d+(\.\d+)?\)$/, ")");
69
69
  }
70
70
  return hsla;
71
71
  } else {
72
72
  let rgba = color2k.toRgba(color);
73
- if (!alpha) {
73
+ if (!isAlpha) {
74
74
  rgba = rgba.replace(/rgba/, "rgb");
75
75
  rgba = rgba.replace(/,\s*\d+(\.\d+)?\)$/, ")");
76
76
  }
@@ -82,7 +82,8 @@ function convertColor(color, fallback) {
82
82
  };
83
83
  }
84
84
  function calcFormat(color) {
85
- if (color.startsWith("hsl") || color.startsWith("rgb")) return color.split("(")[0];
85
+ if (color.startsWith("hsl")) return color.startsWith("hsla") ? "hsla" : "hsl";
86
+ else if (color.startsWith("rgb")) return color.startsWith("rgba") ? "rgba" : "rgb";
86
87
  else return color.length === 9 ? "hexa" : "hex";
87
88
  }
88
89
  function getAlpha(color) {
@@ -110,9 +111,12 @@ function parseToHsla(color, fallback) {
110
111
  }
111
112
  }
112
113
  function parseToHsv(color, fallback) {
113
- const rgba = parseToRgba(color, fallback);
114
- if (!rgba) return void 0;
115
- let [r, g, b, a] = rgba;
114
+ let [r, g, b, a] = parseToRgba(color, fallback) ?? [
115
+ 255,
116
+ 255,
117
+ 255,
118
+ 1
119
+ ];
116
120
  r = r / 255;
117
121
  g = g / 255;
118
122
  b = b / 255;
@@ -1 +1 @@
1
- {"version":3,"file":"color.cjs","names":["c","rgb: [number, number, number]","v","isNumber"],"sources":["../../src/color.ts"],"sourcesContent":["import * as c from \"color2k\"\nimport { isNumber } from \"./assertion\"\n\nexport type ColorFormat = \"hex\" | \"hexa\" | \"hsl\" | \"hsla\" | \"rgb\" | \"rgba\"\n\nexport const SEMANTIC_COLOR_SCHEMES = [\n \"mono\",\n \"primary\",\n \"secondary\",\n \"info\",\n \"success\",\n \"warning\",\n \"danger\",\n \"error\",\n \"link\",\n] as const\n\nexport const DEFAULT_COLOR_SCHEMES = [\n \"gray\",\n \"red\",\n \"rose\",\n \"pink\",\n \"flashy\",\n \"orange\",\n \"amber\",\n \"yellow\",\n \"lime\",\n \"green\",\n \"emerald\",\n \"teal\",\n \"cyan\",\n \"sky\",\n \"blue\",\n \"indigo\",\n \"violet\",\n \"purple\",\n \"fuchsia\",\n] as const\n\nexport const COLOR_SCHEMES = [\n ...SEMANTIC_COLOR_SCHEMES,\n ...DEFAULT_COLOR_SCHEMES,\n]\n\nexport const TONES = [\n 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950,\n] as const\n\nexport function convertColor(\n color: string,\n fallback: string,\n): {\n (format: ColorFormat): string\n}\nexport function convertColor(\n color: string,\n fallback?: string,\n): {\n (format: ColorFormat): string | undefined\n}\nexport function convertColor(color: string, fallback?: string) {\n return function (format: ColorFormat) {\n try {\n const alpha = format.endsWith(\"a\")\n\n if (/^[0-9a-fA-F]{6}$/.test(color)) color = \"#\" + color\n\n if (format.startsWith(\"hex\")) {\n let hexa = c.toHex(color)\n\n if (alpha) {\n if (hexa.length === 7) hexa += \"ff\"\n } else {\n hexa = hexa.replace(/^#([0-9a-fA-F]{6})[0-9a-fA-F]{2}$/, \"#$1\")\n }\n\n return hexa\n } else if (format.startsWith(\"hsl\")) {\n let hsla = c.toHsla(color)\n\n if (!alpha) {\n hsla = hsla.replace(/hsla/, \"hsl\")\n hsla = hsla.replace(/,\\s*\\d+(\\.\\d+)?\\)$/, \")\")\n }\n\n return hsla\n } else {\n let rgba = c.toRgba(color)\n\n if (!alpha) {\n rgba = rgba.replace(/rgba/, \"rgb\")\n rgba = rgba.replace(/,\\s*\\d+(\\.\\d+)?\\)$/, \")\")\n }\n\n return rgba\n }\n } catch {\n if (fallback) return convertColor(fallback)(format)\n }\n }\n}\n\nexport function calcFormat(color: string): ColorFormat {\n if (color.startsWith(\"hsl\") || color.startsWith(\"rgb\")) {\n return color.split(\"(\")[0] as ColorFormat\n } else {\n return color.length === 9 ? \"hexa\" : \"hex\"\n }\n}\n\nexport function getAlpha(color: string) {\n return c.parseToRgba(color)[3]\n}\n\nexport function alphaToHex(a: number) {\n if (0 > a) a = 0\n if (1 < a) a = 1\n\n return Math.round(a * 255)\n .toString(16)\n .padStart(2, \"0\")\n}\n\nexport function parseToRgba(\n color: string,\n fallback: string,\n): [number, number, number, number]\nexport function parseToRgba(\n color: string,\n fallback?: string,\n): [number, number, number, number] | undefined\nexport function parseToRgba(color: string, fallback?: string) {\n try {\n if (/^[0-9a-fA-F]{6}$/.test(color)) color = \"#\" + color\n\n return c.parseToRgba(color)\n } catch {\n if (fallback) return c.parseToRgba(fallback)\n }\n}\n\nexport function parseToHsla(\n color: string,\n fallback: string,\n): [number, number, number, number]\nexport function parseToHsla(\n color: string,\n fallback?: string,\n): [number, number, number, number] | undefined\nexport function parseToHsla(color: string, fallback?: string) {\n try {\n if (/^[0-9a-fA-F]{6}$/.test(color)) color = \"#\" + color\n\n return c.parseToHsla(color)\n } catch {\n if (fallback) return c.parseToHsla(fallback)\n }\n}\n\nexport function parseToHsv(\n color: string,\n fallback: string,\n): [number, number, number, number]\nexport function parseToHsv(\n color: string,\n fallback?: string,\n): [number, number, number, number] | undefined\nexport function parseToHsv(color: string, fallback?: string) {\n const rgba = parseToRgba(color, fallback)\n\n if (!rgba) return undefined\n\n let [r, g, b, a] = rgba\n\n r = r / 255\n g = g / 255\n b = b / 255\n\n const [min, max] = [Math.min(r, g, b), Math.max(r, g, b)]\n const delta = max - min\n\n let [h, v, s] = [0, max, max == 0 ? 0 : delta / max]\n\n switch (min) {\n case max:\n h = 0\n break\n\n case r:\n h = 60 * ((b - g) / delta) + 180\n break\n\n case g:\n h = 60 * ((r - b) / delta) + 300\n break\n\n case b:\n h = 60 * ((g - r) / delta) + 60\n break\n }\n\n return [h, s, v, a]\n}\n\n// @ts-ignore\nexport function rgbaTo(\n [r, g, b, a]: [number, number, number, number],\n fallback: string,\n): {\n (format: ColorFormat): string\n}\nexport function rgbaTo(\n [r, g, b, a]: [number, number, number, number],\n fallback?: string,\n): {\n (format: ColorFormat): string | undefined\n}\nexport function rgbaTo(\n [r, g, b, a]: [number, number, number, number],\n fallback?: string,\n) {\n return function (format: ColorFormat = \"hex\") {\n return convertColor(c.rgba(r, g, b, a), fallback)(format)\n }\n}\n\n// @ts-ignore\nexport function hslaTo(\n [r, g, b, a]: [number, number, number, number],\n fallback: string,\n): {\n (format: ColorFormat): string\n}\nexport function hslaTo(\n [r, g, b, a]: [number, number, number, number],\n fallback?: string,\n): {\n (format: ColorFormat): string | undefined\n}\nexport function hslaTo(\n [h, s, l, a]: [number, number, number, number],\n fallback?: string,\n) {\n return function (format: ColorFormat = \"hex\") {\n return convertColor(c.hsla(h, s, l, a), fallback)(format)\n }\n}\n\n// @ts-ignore\nexport function hsvTo(\n [h, s, v, a]: [number, number, number, number?],\n fallback: string,\n): {\n (format: ColorFormat): string\n}\nexport function hsvTo(\n [h, s, v, a]: [number, number, number, number?],\n fallback?: string,\n): {\n (format: ColorFormat): string | undefined\n}\nexport function hsvTo(\n [h, s, v, a]: [number, number, number, number?],\n fallback?: string,\n) {\n return function (format: ColorFormat = \"hex\") {\n h = h / 60\n\n let rgb: [number, number, number] = [v, v, v]\n\n let i = Math.floor(h)\n let f = h - i\n let p = v * (1 - s)\n let q = v * (1 - s * f)\n let t = v * (1 - s * (1 - f))\n\n switch (i) {\n case 0:\n case 6:\n rgb = [v, t, p]\n break\n\n case 1:\n rgb = [q, v, p]\n break\n\n case 2:\n rgb = [p, v, t]\n break\n\n case 3:\n rgb = [p, q, v]\n break\n\n case 4:\n rgb = [t, p, v]\n break\n\n case 5:\n rgb = [v, p, q]\n break\n }\n\n let color = `rgb(${rgb.map((v) => Math.round(v * 255)).join(\", \")})`\n\n if (isNumber(a)) color = color.replace(/\\)$/, `, ${a})`)\n\n return convertColor(color, fallback)(format)\n }\n}\n\nexport function sameColor(\n color: string | undefined,\n comparison: string | undefined,\n) {\n if (!color) return false\n if (!comparison) return false\n\n const a = parseToRgba(color) ?? []\n const b = parseToRgba(comparison) ?? []\n\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3]\n}\n"],"mappings":";;;;;;AAKA,MAAa,yBAAyB;CACpC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,MAAa,wBAAwB;CACnC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,MAAa,gBAAgB,CAC3B,GAAG,wBACH,GAAG,sBACJ;AAED,MAAa,QAAQ;CACnB;CAAI;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAClD;AAcD,SAAgB,aAAa,OAAe,UAAmB;AAC7D,QAAO,SAAU,QAAqB;AACpC,MAAI;GACF,MAAM,QAAQ,OAAO,SAAS,IAAI;AAElC,OAAI,mBAAmB,KAAK,MAAM,CAAE,SAAQ,MAAM;AAElD,OAAI,OAAO,WAAW,MAAM,EAAE;IAC5B,IAAI,OAAOA,QAAE,MAAM,MAAM;AAEzB,QAAI,OACF;SAAI,KAAK,WAAW,EAAG,SAAQ;UAE/B,QAAO,KAAK,QAAQ,qCAAqC,MAAM;AAGjE,WAAO;cACE,OAAO,WAAW,MAAM,EAAE;IACnC,IAAI,OAAOA,QAAE,OAAO,MAAM;AAE1B,QAAI,CAAC,OAAO;AACV,YAAO,KAAK,QAAQ,QAAQ,MAAM;AAClC,YAAO,KAAK,QAAQ,sBAAsB,IAAI;;AAGhD,WAAO;UACF;IACL,IAAI,OAAOA,QAAE,OAAO,MAAM;AAE1B,QAAI,CAAC,OAAO;AACV,YAAO,KAAK,QAAQ,QAAQ,MAAM;AAClC,YAAO,KAAK,QAAQ,sBAAsB,IAAI;;AAGhD,WAAO;;UAEH;AACN,OAAI,SAAU,QAAO,aAAa,SAAS,CAAC,OAAO;;;;AAKzD,SAAgB,WAAW,OAA4B;AACrD,KAAI,MAAM,WAAW,MAAM,IAAI,MAAM,WAAW,MAAM,CACpD,QAAO,MAAM,MAAM,IAAI,CAAC;KAExB,QAAO,MAAM,WAAW,IAAI,SAAS;;AAIzC,SAAgB,SAAS,OAAe;AACtC,QAAOA,QAAE,YAAY,MAAM,CAAC;;AAG9B,SAAgB,WAAW,GAAW;AACpC,KAAI,IAAI,EAAG,KAAI;AACf,KAAI,IAAI,EAAG,KAAI;AAEf,QAAO,KAAK,MAAM,IAAI,IAAI,CACvB,SAAS,GAAG,CACZ,SAAS,GAAG,IAAI;;AAWrB,SAAgB,YAAY,OAAe,UAAmB;AAC5D,KAAI;AACF,MAAI,mBAAmB,KAAK,MAAM,CAAE,SAAQ,MAAM;AAElD,SAAOA,QAAE,YAAY,MAAM;SACrB;AACN,MAAI,SAAU,QAAOA,QAAE,YAAY,SAAS;;;AAYhD,SAAgB,YAAY,OAAe,UAAmB;AAC5D,KAAI;AACF,MAAI,mBAAmB,KAAK,MAAM,CAAE,SAAQ,MAAM;AAElD,SAAOA,QAAE,YAAY,MAAM;SACrB;AACN,MAAI,SAAU,QAAOA,QAAE,YAAY,SAAS;;;AAYhD,SAAgB,WAAW,OAAe,UAAmB;CAC3D,MAAM,OAAO,YAAY,OAAO,SAAS;AAEzC,KAAI,CAAC,KAAM,QAAO;CAElB,IAAI,CAAC,GAAG,GAAG,GAAG,KAAK;AAEnB,KAAI,IAAI;AACR,KAAI,IAAI;AACR,KAAI,IAAI;CAER,MAAM,CAAC,KAAK,OAAO,CAAC,KAAK,IAAI,GAAG,GAAG,EAAE,EAAE,KAAK,IAAI,GAAG,GAAG,EAAE,CAAC;CACzD,MAAM,QAAQ,MAAM;CAEpB,IAAI,CAAC,GAAG,GAAG,KAAK;EAAC;EAAG;EAAK,OAAO,IAAI,IAAI,QAAQ;EAAI;AAEpD,SAAQ,KAAR;EACE,KAAK;AACH,OAAI;AACJ;EAEF,KAAK;AACH,OAAI,OAAO,IAAI,KAAK,SAAS;AAC7B;EAEF,KAAK;AACH,OAAI,OAAO,IAAI,KAAK,SAAS;AAC7B;EAEF,KAAK;AACH,OAAI,OAAO,IAAI,KAAK,SAAS;AAC7B;;AAGJ,QAAO;EAAC;EAAG;EAAG;EAAG;EAAE;;AAgBrB,SAAgB,OACd,CAAC,GAAG,GAAG,GAAG,IACV,UACA;AACA,QAAO,SAAU,SAAsB,OAAO;AAC5C,SAAO,aAAaA,QAAE,KAAK,GAAG,GAAG,GAAG,EAAE,EAAE,SAAS,CAAC,OAAO;;;AAiB7D,SAAgB,OACd,CAAC,GAAG,GAAG,GAAG,IACV,UACA;AACA,QAAO,SAAU,SAAsB,OAAO;AAC5C,SAAO,aAAaA,QAAE,KAAK,GAAG,GAAG,GAAG,EAAE,EAAE,SAAS,CAAC,OAAO;;;AAiB7D,SAAgB,MACd,CAAC,GAAG,GAAG,GAAG,IACV,UACA;AACA,QAAO,SAAU,SAAsB,OAAO;AAC5C,MAAI,IAAI;EAER,IAAIC,MAAgC;GAAC;GAAG;GAAG;GAAE;EAE7C,IAAI,IAAI,KAAK,MAAM,EAAE;EACrB,IAAI,IAAI,IAAI;EACZ,IAAI,IAAI,KAAK,IAAI;EACjB,IAAI,IAAI,KAAK,IAAI,IAAI;EACrB,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI;AAE1B,UAAQ,GAAR;GACE,KAAK;GACL,KAAK;AACH,UAAM;KAAC;KAAG;KAAG;KAAE;AACf;GAEF,KAAK;AACH,UAAM;KAAC;KAAG;KAAG;KAAE;AACf;GAEF,KAAK;AACH,UAAM;KAAC;KAAG;KAAG;KAAE;AACf;GAEF,KAAK;AACH,UAAM;KAAC;KAAG;KAAG;KAAE;AACf;GAEF,KAAK;AACH,UAAM;KAAC;KAAG;KAAG;KAAE;AACf;GAEF,KAAK;AACH,UAAM;KAAC;KAAG;KAAG;KAAE;AACf;;EAGJ,IAAI,QAAQ,OAAO,IAAI,KAAK,QAAM,KAAK,MAAMC,MAAI,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC;AAElE,MAAIC,2BAAS,EAAE,CAAE,SAAQ,MAAM,QAAQ,OAAO,KAAK,EAAE,GAAG;AAExD,SAAO,aAAa,OAAO,SAAS,CAAC,OAAO;;;AAIhD,SAAgB,UACd,OACA,YACA;AACA,KAAI,CAAC,MAAO,QAAO;AACnB,KAAI,CAAC,WAAY,QAAO;CAExB,MAAM,IAAI,YAAY,MAAM,IAAI,EAAE;CAClC,MAAM,IAAI,YAAY,WAAW,IAAI,EAAE;AAEvC,QAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE"}
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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"}
@@ -31,6 +31,7 @@ exports.createdDom = require_dom.createdDom;
31
31
  exports.cx = require_string.cx;
32
32
  exports.dataAttr = require_dom.dataAttr;
33
33
  exports.escape = require_string.escape;
34
+ exports.extractObject = require_object.extractObject;
34
35
  exports.filterEmpty = require_array.filterEmpty;
35
36
  exports.filterObject = require_object.filterObject;
36
37
  exports.filterUndefined = require_object.filterUndefined;
@@ -35,6 +35,9 @@ function filterObject(obj, func) {
35
35
  function filterUndefined(obj) {
36
36
  return filterObject(obj, (_, val) => val !== null && val !== void 0);
37
37
  }
38
+ function extractObject(obj, getter) {
39
+ return Object.fromEntries(Object.entries(obj).map(([key, value]) => [key, getter(value)]));
40
+ }
38
41
  function merge(target, source, options = {
39
42
  mergeArray: false,
40
43
  shouldProcess: () => true
@@ -103,6 +106,7 @@ function wrapWithKey(obj, key) {
103
106
  }
104
107
 
105
108
  //#endregion
109
+ exports.extractObject = extractObject;
106
110
  exports.filterObject = filterObject;
107
111
  exports.filterUndefined = filterUndefined;
108
112
  exports.flattenObject = flattenObject;
@@ -1 +1 @@
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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"}
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 function extractObject<Y extends Dict, M>(\n obj: Y,\n getter: (value: Y[keyof Y]) => M,\n) {\n return Object.fromEntries(\n Object.entries(obj).map(([key, value]) => [key, getter(value)]),\n ) as { [key in keyof Y]: M }\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":";;;AASA,SAAgB,WACd,KACA,MACY;AACZ,KAAI,CAAC,KAAK,OAAQ,QAAO;CAEzB,MAAMA,SAAe,EAAE;AAEvB,QAAO,KAAK,IAAI,CAAC,SAAS,QAAQ;AAChC,MAAI,KAAK,SAAS,IAAS,CAAE;AAE7B,SAAO,OAAO,IAAI;GAClB;AAEF,QAAO;;AAGT,SAAgB,WACd,KACA,MACoB;AACpB,KAAI,CAAC,KAAK,OAAQ,QAAO,EAAE;CAE3B,MAAM,SAAS,EAAE;AAEjB,MAAK,SAAS,QAAQ;AACpB,MAAI,OAAO,IAAK,QAAO,OAAO,IAAI;GAClC;AAEF,QAAO;;AAaT,SAAgB,YACd,KACA,YACA;CACA,MAAMC,SAAe,EAAE;CACvB,MAAMC,UAAgB,EAAE;AAExB,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,IAAI,CAC5C,KACEC,6BAAW,WAAW,GAAG,WAAW,IAAI,GAAG,YAAY,SAAS,IAAS,CAEzE,QAAO,OAAO;KAEd,SAAQ,OAAO;AAInB,QAAO,CAAC,QAAQ,QAAQ;;AAG1B,SAAgB,aACd,KACA,MACG;CACH,MAAMH,SAAe,EAAE;AAEvB,QAAO,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,WAAW;AAG5C,MAFmB,KAAK,KAAK,OAAO,IAAI,CAExB,QAAO,OAAO;GAC9B;AAEF,QAAO;;AAGT,SAAgB,gBAAgC,KAAW;AACzD,QAAO,aAAa,MAAM,GAAG,QAAQ,QAAQ,QAAQ,QAAQ,OAAU;;AAGzE,SAAgB,cACd,KACA,QACA;AACA,QAAO,OAAO,YACZ,OAAO,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,KAAK,OAAO,MAAM,CAAC,CAAC,CAChE;;AASH,SAAgB,MACd,QACA,QACA,UAAwB;CAAE,YAAY;CAAO,qBAAqB;CAAM,EACrE;CACH,IAAI,SAAS,OAAO,OAAO,EAAE,EAAE,OAAO;AAEtC,KAAII,2BAAS,OAAO,IAAI,QAAQ,gBAAgB,OAAO,CACrD,KAAIA,2BAAS,OAAO,CAClB,MAAK,MAAM,CAAC,WAAW,gBAAgB,OAAO,QAAQ,OAAO,EAAE;EAC7D,MAAMC,cAAmB,OAAO;AAEhC,MAAI,QAAQ,cAAc,YAAY,CACpC,KACE,QAAQ,cACRC,0BAAQ,YAAY,IACpBA,0BAAQ,YAAY,CAEpB,QAAO,aAAa,YAAY,OAAO,GAAG,YAAY;WAEtD,CAACH,6BAAW,YAAY,IACxBC,2BAAS,YAAY,IACrB,OAAO,eAAe,UAAU,CAEhC,QAAO,aAAa,MAAM,aAAa,aAAa,QAAQ;MAE5D,QAAO,OAAO,QAAQ,GAAG,YAAY,aAAa,CAAC;MAGrD,QAAO,OAAO,QAAQ,GAAG,YAAY,aAAa,CAAC;;KAIvD,UAAS;AAIb,QAAO;;AAST,SAAgB,cACd,KACA,EACE,WAAW,UACX,YAAY,KACZ,sBAAsB,SACE,EAAE,EACzB;AACH,KAAI,CAACA,2BAAS,IAAI,IAAI,CAACE,0BAAQ,IAAI,CAAE,QAAO;AAE5C,QAAO,OAAO,QAAQ,IAAI,CAAC,QAAa,QAAQ,CAAC,KAAK,WAAW;AAC/D,MAAIF,2BAAS,MAAM,IAAI,cAAc,MAAM,IAAI,WAAW,EACxD,QAAO,QACL,cAAc,OAAO;GACnB,UAAU,WAAW;GACrB;GACA;GACD,CAAC,CACH,CAAC,SAAS,CAAC,UAAU,gBAAgB;AACpC,UAAO,GAAG,MAAM,YAAY,cAAc;IAC1C;MAEF,QAAO,OAAO;AAGhB,SAAO;IACN,EAAE,CAAC;;AAGR,SAAgB,WAA6B,KAAqB;AAChE,QAAO,OAAO,KAAK,IAAI;;AAGzB,SAAgB,cACd,YACA,UACG;AACH,KAAIE,0BAAQ,WAAW,CACrB,QAAO,WAAW,IAAI,SAAS;UACtBF,2BAAS,WAAW,CAC7B,QAAO,OAAO,QAAQ,WAAW,CAAC,QAAc,KAAK,CAAC,KAAK,WAAW;AACpE,MAAI,OAAO,SAAS,MAAM;AAE1B,SAAO;IACN,EAAE,CAAC;KAEN,QAAO,SAAS,WAAW;;AAI/B,SAAgB,UACd,KACA,MACA,UACA;CACA,MAAM,OAAOG,2BAAS,KAAK,GACvB,KAAK,MAAM,eAAe,CAAC,OAAO,QAAQ,GAC1C,CAAC,KAAK;AAEV,MAAK,MAAM,OAAO,MAAM;AACtB,MAAI,CAAC,IAAK;AAEV,QAAM,IAAI;;AAGZ,QAAO,QAAQ,SAAY,WAAW;;AAGxC,SAAgB,cAAc,MAAwB;CACpD,MAAM,wBAAQ,IAAI,SAAS;CAE3B,SAAS,aACP,KACA,MACA,UACG;AACH,MAAIC,8BAAY,IAAI,CAAE,QAAO,KAAK,KAAK,MAAM,SAAS;AAEtD,MAAI,CAAC,MAAM,IAAI,IAAI,CAAE,OAAM,IAAI,qBAAK,IAAI,KAAK,CAAC;EAE9C,MAAM,MAAM,MAAM,IAAI,IAAI;AAE1B,MAAI,IAAI,IAAI,KAAK,CAAE,QAAO,IAAI,IAAI,KAAK;EAEvC,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS;AAEvC,MAAI,IAAI,MAAM,MAAM;AAEpB,SAAO;;AAGT,QAAO;;AAGT,MAAa,oBAAoB,cAAc,UAAU;AAEzD,SAAgB,YAAe,KAAQ,KAAc;AACnD,KAAI,IACF,QAAO,GAAG,MAAM,KAAK;KAErB,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"calc.js","names":[],"sources":["../../src/calc.ts"],"sourcesContent":["type Operator = \"*\" | \"+\" | \"-\" | \"/\"\ntype Operand = number | string\n\nfunction toExpression(operator: Operator, ...args: Operand[]) {\n return args.join(` ${operator} `).replace(/calc/g, \"\")\n}\n\nfunction add(...args: Operand[]) {\n return `calc(${toExpression(\"+\", ...args)})`\n}\n\nfunction subtract(...args: Operand[]) {\n return `calc(${toExpression(\"-\", ...args)})`\n}\n\nfunction multiply(...args: Operand[]) {\n return `calc(${toExpression(\"*\", ...args)})`\n}\n\nfunction divide(...args: Operand[]) {\n return `calc(${toExpression(\"/\", ...args)})`\n}\n\nfunction negate(value: Operand) {\n if (!isNaN(parseFloat(value.toString())))\n return String(value).startsWith(\"-\") ? String(value).slice(1) : `-${value}`\n\n return multiply(value, -1)\n}\n\ninterface Calc {\n add: (...args: Operand[]) => Calc\n divide: (...args: Operand[]) => Calc\n multiply: (...args: Operand[]) => Calc\n negate: () => Calc\n subtract: (...args: Operand[]) => Calc\n toString: () => string\n}\n\nexport const calc = Object.assign(\n (x: Operand): Calc => ({\n add: (...args) => calc(add(x, ...args)),\n divide: (...args) => calc(divide(x, ...args)),\n multiply: (...args) => calc(multiply(x, ...args)),\n negate: () => calc(negate(x)),\n subtract: (...args) => calc(subtract(x, ...args)),\n toString: () => x.toString(),\n }),\n {\n add,\n divide,\n multiply,\n negate,\n subtract,\n },\n)\n"],"mappings":";AAGA,SAAS,aAAa,UAAoB,GAAG,MAAiB;AAC5D,QAAO,KAAK,KAAK,IAAI,SAAS,GAAG,CAAC,QAAQ,SAAS,GAAG;;AAGxD,SAAS,IAAI,GAAG,MAAiB;AAC/B,QAAO,QAAQ,aAAa,KAAK,GAAG,KAAK,CAAC;;AAG5C,SAAS,SAAS,GAAG,MAAiB;AACpC,QAAO,QAAQ,aAAa,KAAK,GAAG,KAAK,CAAC;;AAG5C,SAAS,SAAS,GAAG,MAAiB;AACpC,QAAO,QAAQ,aAAa,KAAK,GAAG,KAAK,CAAC;;AAG5C,SAAS,OAAO,GAAG,MAAiB;AAClC,QAAO,QAAQ,aAAa,KAAK,GAAG,KAAK,CAAC;;AAG5C,SAAS,OAAO,OAAgB;AAC9B,KAAI,CAAC,MAAM,WAAW,MAAM,UAAU,CAAC,CAAC,CACtC,QAAO,OAAO,MAAM,CAAC,WAAW,IAAI,GAAG,OAAO,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI;AAEtE,QAAO,SAAS,OAAO,GAAG;;AAY5B,MAAa,OAAO,OAAO,QACxB,OAAsB;CACrB,MAAM,GAAG,SAAS,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC;CACvC,SAAS,GAAG,SAAS,KAAK,OAAO,GAAG,GAAG,KAAK,CAAC;CAC7C,WAAW,GAAG,SAAS,KAAK,SAAS,GAAG,GAAG,KAAK,CAAC;CACjD,cAAc,KAAK,OAAO,EAAE,CAAC;CAC7B,WAAW,GAAG,SAAS,KAAK,SAAS,GAAG,GAAG,KAAK,CAAC;CACjD,gBAAgB,EAAE,UAAU;CAC7B,GACD;CACE;CACA;CACA;CACA;CACA;CACD,CACF"}
1
+ {"version":3,"file":"calc.js","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"}
package/dist/esm/color.js CHANGED
@@ -51,24 +51,24 @@ const TONES = [
51
51
  function convertColor(color, fallback) {
52
52
  return function(format) {
53
53
  try {
54
- const alpha = format.endsWith("a");
54
+ const isAlpha = format.endsWith("a");
55
55
  if (/^[0-9a-fA-F]{6}$/.test(color)) color = "#" + color;
56
56
  if (format.startsWith("hex")) {
57
57
  let hexa = c.toHex(color);
58
- if (alpha) {
58
+ if (isAlpha) {
59
59
  if (hexa.length === 7) hexa += "ff";
60
- } else hexa = hexa.replace(/^#([0-9a-fA-F]{6})[0-9a-fA-F]{2}$/, "#$1");
60
+ } else hexa = hexa.replace(/^#(?:[0-9a-fA-F]{6})[0-9a-fA-F]{2}$/, "$1");
61
61
  return hexa;
62
62
  } else if (format.startsWith("hsl")) {
63
63
  let hsla = c.toHsla(color);
64
- if (!alpha) {
64
+ if (!isAlpha) {
65
65
  hsla = hsla.replace(/hsla/, "hsl");
66
66
  hsla = hsla.replace(/,\s*\d+(\.\d+)?\)$/, ")");
67
67
  }
68
68
  return hsla;
69
69
  } else {
70
70
  let rgba = c.toRgba(color);
71
- if (!alpha) {
71
+ if (!isAlpha) {
72
72
  rgba = rgba.replace(/rgba/, "rgb");
73
73
  rgba = rgba.replace(/,\s*\d+(\.\d+)?\)$/, ")");
74
74
  }
@@ -80,7 +80,8 @@ function convertColor(color, fallback) {
80
80
  };
81
81
  }
82
82
  function calcFormat(color) {
83
- if (color.startsWith("hsl") || color.startsWith("rgb")) return color.split("(")[0];
83
+ if (color.startsWith("hsl")) return color.startsWith("hsla") ? "hsla" : "hsl";
84
+ else if (color.startsWith("rgb")) return color.startsWith("rgba") ? "rgba" : "rgb";
84
85
  else return color.length === 9 ? "hexa" : "hex";
85
86
  }
86
87
  function getAlpha(color) {
@@ -108,9 +109,12 @@ function parseToHsla(color, fallback) {
108
109
  }
109
110
  }
110
111
  function parseToHsv(color, fallback) {
111
- const rgba = parseToRgba(color, fallback);
112
- if (!rgba) return void 0;
113
- let [r, g, b, a] = rgba;
112
+ let [r, g, b, a] = parseToRgba(color, fallback) ?? [
113
+ 255,
114
+ 255,
115
+ 255,
116
+ 1
117
+ ];
114
118
  r = r / 255;
115
119
  g = g / 255;
116
120
  b = b / 255;
@@ -1 +1 @@
1
- {"version":3,"file":"color.js","names":["rgb: [number, number, number]","v"],"sources":["../../src/color.ts"],"sourcesContent":["import * as c from \"color2k\"\nimport { isNumber } from \"./assertion\"\n\nexport type ColorFormat = \"hex\" | \"hexa\" | \"hsl\" | \"hsla\" | \"rgb\" | \"rgba\"\n\nexport const SEMANTIC_COLOR_SCHEMES = [\n \"mono\",\n \"primary\",\n \"secondary\",\n \"info\",\n \"success\",\n \"warning\",\n \"danger\",\n \"error\",\n \"link\",\n] as const\n\nexport const DEFAULT_COLOR_SCHEMES = [\n \"gray\",\n \"red\",\n \"rose\",\n \"pink\",\n \"flashy\",\n \"orange\",\n \"amber\",\n \"yellow\",\n \"lime\",\n \"green\",\n \"emerald\",\n \"teal\",\n \"cyan\",\n \"sky\",\n \"blue\",\n \"indigo\",\n \"violet\",\n \"purple\",\n \"fuchsia\",\n] as const\n\nexport const COLOR_SCHEMES = [\n ...SEMANTIC_COLOR_SCHEMES,\n ...DEFAULT_COLOR_SCHEMES,\n]\n\nexport const TONES = [\n 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950,\n] as const\n\nexport function convertColor(\n color: string,\n fallback: string,\n): {\n (format: ColorFormat): string\n}\nexport function convertColor(\n color: string,\n fallback?: string,\n): {\n (format: ColorFormat): string | undefined\n}\nexport function convertColor(color: string, fallback?: string) {\n return function (format: ColorFormat) {\n try {\n const alpha = format.endsWith(\"a\")\n\n if (/^[0-9a-fA-F]{6}$/.test(color)) color = \"#\" + color\n\n if (format.startsWith(\"hex\")) {\n let hexa = c.toHex(color)\n\n if (alpha) {\n if (hexa.length === 7) hexa += \"ff\"\n } else {\n hexa = hexa.replace(/^#([0-9a-fA-F]{6})[0-9a-fA-F]{2}$/, \"#$1\")\n }\n\n return hexa\n } else if (format.startsWith(\"hsl\")) {\n let hsla = c.toHsla(color)\n\n if (!alpha) {\n hsla = hsla.replace(/hsla/, \"hsl\")\n hsla = hsla.replace(/,\\s*\\d+(\\.\\d+)?\\)$/, \")\")\n }\n\n return hsla\n } else {\n let rgba = c.toRgba(color)\n\n if (!alpha) {\n rgba = rgba.replace(/rgba/, \"rgb\")\n rgba = rgba.replace(/,\\s*\\d+(\\.\\d+)?\\)$/, \")\")\n }\n\n return rgba\n }\n } catch {\n if (fallback) return convertColor(fallback)(format)\n }\n }\n}\n\nexport function calcFormat(color: string): ColorFormat {\n if (color.startsWith(\"hsl\") || color.startsWith(\"rgb\")) {\n return color.split(\"(\")[0] as ColorFormat\n } else {\n return color.length === 9 ? \"hexa\" : \"hex\"\n }\n}\n\nexport function getAlpha(color: string) {\n return c.parseToRgba(color)[3]\n}\n\nexport function alphaToHex(a: number) {\n if (0 > a) a = 0\n if (1 < a) a = 1\n\n return Math.round(a * 255)\n .toString(16)\n .padStart(2, \"0\")\n}\n\nexport function parseToRgba(\n color: string,\n fallback: string,\n): [number, number, number, number]\nexport function parseToRgba(\n color: string,\n fallback?: string,\n): [number, number, number, number] | undefined\nexport function parseToRgba(color: string, fallback?: string) {\n try {\n if (/^[0-9a-fA-F]{6}$/.test(color)) color = \"#\" + color\n\n return c.parseToRgba(color)\n } catch {\n if (fallback) return c.parseToRgba(fallback)\n }\n}\n\nexport function parseToHsla(\n color: string,\n fallback: string,\n): [number, number, number, number]\nexport function parseToHsla(\n color: string,\n fallback?: string,\n): [number, number, number, number] | undefined\nexport function parseToHsla(color: string, fallback?: string) {\n try {\n if (/^[0-9a-fA-F]{6}$/.test(color)) color = \"#\" + color\n\n return c.parseToHsla(color)\n } catch {\n if (fallback) return c.parseToHsla(fallback)\n }\n}\n\nexport function parseToHsv(\n color: string,\n fallback: string,\n): [number, number, number, number]\nexport function parseToHsv(\n color: string,\n fallback?: string,\n): [number, number, number, number] | undefined\nexport function parseToHsv(color: string, fallback?: string) {\n const rgba = parseToRgba(color, fallback)\n\n if (!rgba) return undefined\n\n let [r, g, b, a] = rgba\n\n r = r / 255\n g = g / 255\n b = b / 255\n\n const [min, max] = [Math.min(r, g, b), Math.max(r, g, b)]\n const delta = max - min\n\n let [h, v, s] = [0, max, max == 0 ? 0 : delta / max]\n\n switch (min) {\n case max:\n h = 0\n break\n\n case r:\n h = 60 * ((b - g) / delta) + 180\n break\n\n case g:\n h = 60 * ((r - b) / delta) + 300\n break\n\n case b:\n h = 60 * ((g - r) / delta) + 60\n break\n }\n\n return [h, s, v, a]\n}\n\n// @ts-ignore\nexport function rgbaTo(\n [r, g, b, a]: [number, number, number, number],\n fallback: string,\n): {\n (format: ColorFormat): string\n}\nexport function rgbaTo(\n [r, g, b, a]: [number, number, number, number],\n fallback?: string,\n): {\n (format: ColorFormat): string | undefined\n}\nexport function rgbaTo(\n [r, g, b, a]: [number, number, number, number],\n fallback?: string,\n) {\n return function (format: ColorFormat = \"hex\") {\n return convertColor(c.rgba(r, g, b, a), fallback)(format)\n }\n}\n\n// @ts-ignore\nexport function hslaTo(\n [r, g, b, a]: [number, number, number, number],\n fallback: string,\n): {\n (format: ColorFormat): string\n}\nexport function hslaTo(\n [r, g, b, a]: [number, number, number, number],\n fallback?: string,\n): {\n (format: ColorFormat): string | undefined\n}\nexport function hslaTo(\n [h, s, l, a]: [number, number, number, number],\n fallback?: string,\n) {\n return function (format: ColorFormat = \"hex\") {\n return convertColor(c.hsla(h, s, l, a), fallback)(format)\n }\n}\n\n// @ts-ignore\nexport function hsvTo(\n [h, s, v, a]: [number, number, number, number?],\n fallback: string,\n): {\n (format: ColorFormat): string\n}\nexport function hsvTo(\n [h, s, v, a]: [number, number, number, number?],\n fallback?: string,\n): {\n (format: ColorFormat): string | undefined\n}\nexport function hsvTo(\n [h, s, v, a]: [number, number, number, number?],\n fallback?: string,\n) {\n return function (format: ColorFormat = \"hex\") {\n h = h / 60\n\n let rgb: [number, number, number] = [v, v, v]\n\n let i = Math.floor(h)\n let f = h - i\n let p = v * (1 - s)\n let q = v * (1 - s * f)\n let t = v * (1 - s * (1 - f))\n\n switch (i) {\n case 0:\n case 6:\n rgb = [v, t, p]\n break\n\n case 1:\n rgb = [q, v, p]\n break\n\n case 2:\n rgb = [p, v, t]\n break\n\n case 3:\n rgb = [p, q, v]\n break\n\n case 4:\n rgb = [t, p, v]\n break\n\n case 5:\n rgb = [v, p, q]\n break\n }\n\n let color = `rgb(${rgb.map((v) => Math.round(v * 255)).join(\", \")})`\n\n if (isNumber(a)) color = color.replace(/\\)$/, `, ${a})`)\n\n return convertColor(color, fallback)(format)\n }\n}\n\nexport function sameColor(\n color: string | undefined,\n comparison: string | undefined,\n) {\n if (!color) return false\n if (!comparison) return false\n\n const a = parseToRgba(color) ?? []\n const b = parseToRgba(comparison) ?? []\n\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3]\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"color.js","names":["rgb: [number, number, number]","v"],"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/esm/index.js CHANGED
@@ -8,7 +8,7 @@ import { addDomEvent, focusTransfer, focusTrap, getEventPoint, getEventWindow, i
8
8
  import { isRtl } from "./i18n.js";
9
9
  import { interopDefault } from "./module.js";
10
10
  import { clampNumber, countDecimal, percentToValue, roundNumberToStep, toNumber, toPrecision, valueToPercent } from "./number.js";
11
- import { filterObject, filterUndefined, flattenObject, getMemoizedObject, getObject, memoizeObject, merge, objectKeys, omitObject, pickObject, replaceObject, splitObject, wrapWithKey } from "./object.js";
11
+ import { extractObject, filterObject, filterUndefined, flattenObject, getMemoizedObject, getObject, memoizeObject, merge, objectKeys, omitObject, pickObject, replaceObject, splitObject, wrapWithKey } from "./object.js";
12
12
  import { antonym, bem, cx, escape, isSize, toCamelCase, toKebabCase, toPascalCase, toTitleCase, transformSize } from "./string.js";
13
13
 
14
- export { COLOR_SCHEMES, DEFAULT_COLOR_SCHEMES, SEMANTIC_COLOR_SCHEMES, TONES, addDomEvent, alphaToHex, antonym, ariaAttr, bem, calc, calcFormat, cast, clampNumber, contains, convertColor, countDecimal, createdDom, cx, dataAttr, escape, filterEmpty, filterObject, filterUndefined, flattenObject, fnAll, focusTransfer, focusTrap, getActiveElement, getAlpha, getDocument, getDocumentElement, getEventPoint, getEventWindow, getFirstFocusableElement, getFirstTabbableElement, getFocusableElements, getLastTabbableElement, getMemoizedObject, getNextTabbableElement, getNodeName, getObject, getParentNode, getPlatform, getPx, getTabIndex, getTabbableElementEdges, getTabbableElements, getUserAgent, getWindow, handlerAll, hslaTo, hsvTo, interopDefault, is, isActiveElement, isAndroid, isApple, isArray, isBoolean, isBooleanish, isChrome, isDate, isDisabledElement, isDocument, isEditableElement, isEmpty, isEmptyObject, isFirefox, isFocusableElement, isFrame, isFunction, isHTMLElement, isHiddenElement, isIPad, isIPhone, isInputElement, isIos, isMac, isMouseEvent, isMultiTouchEvent, isNode, isNotNumber, isNull, isNumber, isNumeric, isObject, isRegExp, isRtl, isSafari, isShadowRoot, isSize, isString, isTabbableElement, isTouchDevice, isTouchEvent, isTruthyDataAttr, isUndefined, isUnit, isVisibleElement, isVisualViewport, isWebKit, isWindow, memoizeObject, merge, noop, objectKeys, omitObject, parseToHsla, parseToHsv, parseToRgba, percentToValue, pickObject, platform, pointFromMouse, pointFromTouch, replaceObject, rgbaTo, roundNumberToStep, runIfFn, sameColor, scrollLock, setAttribute, setStyle, splitObject, toArray, toCamelCase, toKebabCase, toNumber, toPascalCase, toPrecision, toTitleCase, transformSize, userAgent, uuid, valueToPercent, vendor, wrapWithKey };
14
+ export { COLOR_SCHEMES, DEFAULT_COLOR_SCHEMES, SEMANTIC_COLOR_SCHEMES, TONES, addDomEvent, alphaToHex, antonym, ariaAttr, bem, calc, calcFormat, cast, clampNumber, contains, convertColor, countDecimal, createdDom, cx, dataAttr, escape, extractObject, filterEmpty, filterObject, filterUndefined, flattenObject, fnAll, focusTransfer, focusTrap, getActiveElement, getAlpha, getDocument, getDocumentElement, getEventPoint, getEventWindow, getFirstFocusableElement, getFirstTabbableElement, getFocusableElements, getLastTabbableElement, getMemoizedObject, getNextTabbableElement, getNodeName, getObject, getParentNode, getPlatform, getPx, getTabIndex, getTabbableElementEdges, getTabbableElements, getUserAgent, getWindow, handlerAll, hslaTo, hsvTo, interopDefault, is, isActiveElement, isAndroid, isApple, isArray, isBoolean, isBooleanish, isChrome, isDate, isDisabledElement, isDocument, isEditableElement, isEmpty, isEmptyObject, isFirefox, isFocusableElement, isFrame, isFunction, isHTMLElement, isHiddenElement, isIPad, isIPhone, isInputElement, isIos, isMac, isMouseEvent, isMultiTouchEvent, isNode, isNotNumber, isNull, isNumber, isNumeric, isObject, isRegExp, isRtl, isSafari, isShadowRoot, isSize, isString, isTabbableElement, isTouchDevice, isTouchEvent, isTruthyDataAttr, isUndefined, isUnit, isVisibleElement, isVisualViewport, isWebKit, isWindow, memoizeObject, merge, noop, objectKeys, omitObject, parseToHsla, parseToHsv, parseToRgba, percentToValue, pickObject, platform, pointFromMouse, pointFromTouch, replaceObject, rgbaTo, roundNumberToStep, runIfFn, sameColor, scrollLock, setAttribute, setStyle, splitObject, toArray, toCamelCase, toKebabCase, toNumber, toPascalCase, toPrecision, toTitleCase, transformSize, userAgent, uuid, valueToPercent, vendor, wrapWithKey };
@@ -35,6 +35,9 @@ function filterObject(obj, func) {
35
35
  function filterUndefined(obj) {
36
36
  return filterObject(obj, (_, val) => val !== null && val !== void 0);
37
37
  }
38
+ function extractObject(obj, getter) {
39
+ return Object.fromEntries(Object.entries(obj).map(([key, value]) => [key, getter(value)]));
40
+ }
38
41
  function merge(target, source, options = {
39
42
  mergeArray: false,
40
43
  shouldProcess: () => true
@@ -103,5 +106,5 @@ function wrapWithKey(obj, key) {
103
106
  }
104
107
 
105
108
  //#endregion
106
- export { filterObject, filterUndefined, flattenObject, getMemoizedObject, getObject, memoizeObject, merge, objectKeys, omitObject, pickObject, replaceObject, splitObject, wrapWithKey };
109
+ export { extractObject, filterObject, filterUndefined, flattenObject, getMemoizedObject, getObject, memoizeObject, merge, objectKeys, omitObject, pickObject, replaceObject, splitObject, wrapWithKey };
107
110
  //# sourceMappingURL=object.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"object.js","names":["result: Dict","picked: Dict","omitted: Dict","targetValue: any"],"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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"}
1
+ {"version":3,"file":"object.js","names":["result: Dict","picked: Dict","omitted: Dict","targetValue: any"],"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 function extractObject<Y extends Dict, M>(\n obj: Y,\n getter: (value: Y[keyof Y]) => M,\n) {\n return Object.fromEntries(\n Object.entries(obj).map(([key, value]) => [key, getter(value)]),\n ) as { [key in keyof Y]: M }\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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"}
@@ -21,5 +21,5 @@ declare const calc: ((x: Operand) => Calc) & {
21
21
  subtract: typeof subtract;
22
22
  };
23
23
  //#endregion
24
- export { calc };
24
+ export { Operand, calc };
25
25
  //# sourceMappingURL=calc.d.ts.map
@@ -2,41 +2,18 @@
2
2
  type ColorFormat = "hex" | "hexa" | "hsl" | "hsla" | "rgb" | "rgba";
3
3
  declare const SEMANTIC_COLOR_SCHEMES: readonly ["mono", "primary", "secondary", "info", "success", "warning", "danger", "error", "link"];
4
4
  declare const DEFAULT_COLOR_SCHEMES: readonly ["gray", "red", "rose", "pink", "flashy", "orange", "amber", "yellow", "lime", "green", "emerald", "teal", "cyan", "sky", "blue", "indigo", "violet", "purple", "fuchsia"];
5
- declare const COLOR_SCHEMES: ("mono" | "primary" | "secondary" | "info" | "success" | "warning" | "danger" | "error" | "link" | "gray" | "red" | "rose" | "pink" | "flashy" | "orange" | "amber" | "yellow" | "lime" | "green" | "emerald" | "teal" | "cyan" | "sky" | "blue" | "indigo" | "violet" | "purple" | "fuchsia")[];
5
+ declare const COLOR_SCHEMES: ("error" | "mono" | "primary" | "secondary" | "info" | "success" | "warning" | "danger" | "link" | "gray" | "red" | "rose" | "pink" | "flashy" | "orange" | "amber" | "yellow" | "lime" | "green" | "emerald" | "teal" | "cyan" | "sky" | "blue" | "indigo" | "violet" | "purple" | "fuchsia")[];
6
6
  declare const TONES: readonly [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950];
7
- declare function convertColor(color: string, fallback: string): {
8
- (format: ColorFormat): string;
9
- };
10
- declare function convertColor(color: string, fallback?: string): {
11
- (format: ColorFormat): string | undefined;
12
- };
7
+ declare function convertColor(color: string, fallback?: string): (format: ColorFormat) => string | undefined;
13
8
  declare function calcFormat(color: string): ColorFormat;
14
9
  declare function getAlpha(color: string): number;
15
10
  declare function alphaToHex(a: number): string;
16
- declare function parseToRgba(color: string, fallback: string): [number, number, number, number];
17
11
  declare function parseToRgba(color: string, fallback?: string): [number, number, number, number] | undefined;
18
- declare function parseToHsla(color: string, fallback: string): [number, number, number, number];
19
12
  declare function parseToHsla(color: string, fallback?: string): [number, number, number, number] | undefined;
20
- declare function parseToHsv(color: string, fallback: string): [number, number, number, number];
21
- declare function parseToHsv(color: string, fallback?: string): [number, number, number, number] | undefined;
22
- declare function rgbaTo([r, g, b, a]: [number, number, number, number], fallback: string): {
23
- (format: ColorFormat): string;
24
- };
25
- declare function rgbaTo([r, g, b, a]: [number, number, number, number], fallback?: string): {
26
- (format: ColorFormat): string | undefined;
27
- };
28
- declare function hslaTo([r, g, b, a]: [number, number, number, number], fallback: string): {
29
- (format: ColorFormat): string;
30
- };
31
- declare function hslaTo([r, g, b, a]: [number, number, number, number], fallback?: string): {
32
- (format: ColorFormat): string | undefined;
33
- };
34
- declare function hsvTo([h, s, v, a]: [number, number, number, number?], fallback: string): {
35
- (format: ColorFormat): string;
36
- };
37
- declare function hsvTo([h, s, v, a]: [number, number, number, number?], fallback?: string): {
38
- (format: ColorFormat): string | undefined;
39
- };
13
+ declare function parseToHsv(color: string, fallback?: string): [number, number, number, number];
14
+ declare function rgbaTo([r, g, b, a]: [number, number, number, number], fallback?: string): (format?: ColorFormat) => string | undefined;
15
+ declare function hslaTo([h, s, l, a]: [number, number, number, number], fallback?: string): (format?: ColorFormat) => string | undefined;
16
+ declare function hsvTo([h, s, v, a]: [number, number, number, number?], fallback?: string): (format?: ColorFormat) => string | undefined;
40
17
  declare function sameColor(color: string | undefined, comparison: string | undefined): boolean;
41
18
  //#endregion
42
19
  export { COLOR_SCHEMES, ColorFormat, DEFAULT_COLOR_SCHEMES, SEMANTIC_COLOR_SCHEMES, TONES, alphaToHex, calcFormat, convertColor, getAlpha, hslaTo, hsvTo, parseToHsla, parseToHsv, parseToRgba, rgbaTo, sameColor };
@@ -1,7 +1,7 @@
1
1
  import { filterEmpty, toArray } from "./array.js";
2
2
  import { AnyString, Booleanish, DeepMerge, DeepPartial, Dict, FunctionOrValue, Length, Merge, Path, Prettify, Primitive, Value } from "./index.types.js";
3
3
  import { cast, is, isArray, isBoolean, isBooleanish, isDate, isEmpty, isEmptyObject, isFunction, isNotNumber, isNull, isNumber, isNumeric, isObject, isRegExp, isString, isUndefined, isUnit } from "./assertion.js";
4
- import { calc } from "./calc.js";
4
+ import { Operand, calc } from "./calc.js";
5
5
  import { COLOR_SCHEMES, ColorFormat, DEFAULT_COLOR_SCHEMES, SEMANTIC_COLOR_SCHEMES, TONES, alphaToHex, calcFormat, convertColor, getAlpha, hslaTo, hsvTo, parseToHsla, parseToHsv, parseToRgba, rgbaTo, sameColor } from "./color.js";
6
6
  import { ariaAttr, contains, createdDom, dataAttr, getActiveElement, getDocument, getDocumentElement, getFirstFocusableElement, getFirstTabbableElement, getFocusableElements, getLastTabbableElement, getNextTabbableElement, getNodeName, getParentNode, getPlatform, getPx, getTabIndex, getTabbableElementEdges, getTabbableElements, getUserAgent, getWindow, isActiveElement, isAndroid, isApple, isChrome, isDisabledElement, isDocument, isEditableElement, isFirefox, isFocusableElement, isFrame, isHTMLElement, isHiddenElement, isIPad, isIPhone, isInputElement, isIos, isMac, isNode, isSafari, isShadowRoot, isTabbableElement, isTouchDevice, isTruthyDataAttr, isVisibleElement, isVisualViewport, isWebKit, isWindow, platform, scrollLock, setAttribute, setStyle, userAgent, uuid, vendor } from "./dom.js";
7
7
  import { AnyPointerEvent, EventMap, EventType, Point, addDomEvent, focusTransfer, focusTrap, getEventPoint, getEventWindow, isMouseEvent, isMultiTouchEvent, isTouchEvent, pointFromMouse, pointFromTouch } from "./event.js";
@@ -9,6 +9,6 @@ import { fnAll, handlerAll, noop, runIfFn } from "./function.js";
9
9
  import { isRtl } from "./i18n.js";
10
10
  import { interopDefault } from "./module.js";
11
11
  import { clampNumber, countDecimal, percentToValue, roundNumberToStep, toNumber, toPrecision, valueToPercent } from "./number.js";
12
- import { FlattenObjectOptions, MergeOptions, filterObject, filterUndefined, flattenObject, getMemoizedObject, getObject, memoizeObject, merge, objectKeys, omitObject, pickObject, replaceObject, splitObject, wrapWithKey } from "./object.js";
12
+ import { FlattenObjectOptions, extractObject, filterObject, filterUndefined, flattenObject, getMemoizedObject, getObject, memoizeObject, merge, mergeOptions, objectKeys, omitObject, pickObject, replaceObject, splitObject, wrapWithKey } from "./object.js";
13
13
  import { antonym, bem, cx, escape, isSize, toCamelCase, toKebabCase, toPascalCase, toTitleCase, transformSize } from "./string.js";
14
- export { AnyPointerEvent, AnyString, Booleanish, COLOR_SCHEMES, ColorFormat, DEFAULT_COLOR_SCHEMES, DeepMerge, DeepPartial, Dict, EventMap, EventType, FlattenObjectOptions, FunctionOrValue, Length, Merge, MergeOptions, Path, Point, Prettify, Primitive, SEMANTIC_COLOR_SCHEMES, TONES, Value, addDomEvent, alphaToHex, antonym, ariaAttr, bem, calc, calcFormat, cast, clampNumber, contains, convertColor, countDecimal, createdDom, cx, dataAttr, escape, filterEmpty, filterObject, filterUndefined, flattenObject, fnAll, focusTransfer, focusTrap, getActiveElement, getAlpha, getDocument, getDocumentElement, getEventPoint, getEventWindow, getFirstFocusableElement, getFirstTabbableElement, getFocusableElements, getLastTabbableElement, getMemoizedObject, getNextTabbableElement, getNodeName, getObject, getParentNode, getPlatform, getPx, getTabIndex, getTabbableElementEdges, getTabbableElements, getUserAgent, getWindow, handlerAll, hslaTo, hsvTo, interopDefault, is, isActiveElement, isAndroid, isApple, isArray, isBoolean, isBooleanish, isChrome, isDate, isDisabledElement, isDocument, isEditableElement, isEmpty, isEmptyObject, isFirefox, isFocusableElement, isFrame, isFunction, isHTMLElement, isHiddenElement, isIPad, isIPhone, isInputElement, isIos, isMac, isMouseEvent, isMultiTouchEvent, isNode, isNotNumber, isNull, isNumber, isNumeric, isObject, isRegExp, isRtl, isSafari, isShadowRoot, isSize, isString, isTabbableElement, isTouchDevice, isTouchEvent, isTruthyDataAttr, isUndefined, isUnit, isVisibleElement, isVisualViewport, isWebKit, isWindow, memoizeObject, merge, noop, objectKeys, omitObject, parseToHsla, parseToHsv, parseToRgba, percentToValue, pickObject, platform, pointFromMouse, pointFromTouch, replaceObject, rgbaTo, roundNumberToStep, runIfFn, sameColor, scrollLock, setAttribute, setStyle, splitObject, toArray, toCamelCase, toKebabCase, toNumber, toPascalCase, toPrecision, toTitleCase, transformSize, userAgent, uuid, valueToPercent, vendor, wrapWithKey };
14
+ export { AnyPointerEvent, AnyString, Booleanish, COLOR_SCHEMES, ColorFormat, DEFAULT_COLOR_SCHEMES, DeepMerge, DeepPartial, Dict, EventMap, EventType, FlattenObjectOptions, FunctionOrValue, Length, Merge, Operand, Path, Point, Prettify, Primitive, SEMANTIC_COLOR_SCHEMES, TONES, Value, addDomEvent, alphaToHex, antonym, ariaAttr, bem, calc, calcFormat, cast, clampNumber, contains, convertColor, countDecimal, createdDom, cx, dataAttr, escape, extractObject, filterEmpty, filterObject, filterUndefined, flattenObject, fnAll, focusTransfer, focusTrap, getActiveElement, getAlpha, getDocument, getDocumentElement, getEventPoint, getEventWindow, getFirstFocusableElement, getFirstTabbableElement, getFocusableElements, getLastTabbableElement, getMemoizedObject, getNextTabbableElement, getNodeName, getObject, getParentNode, getPlatform, getPx, getTabIndex, getTabbableElementEdges, getTabbableElements, getUserAgent, getWindow, handlerAll, hslaTo, hsvTo, interopDefault, is, isActiveElement, isAndroid, isApple, isArray, isBoolean, isBooleanish, isChrome, isDate, isDisabledElement, isDocument, isEditableElement, isEmpty, isEmptyObject, isFirefox, isFocusableElement, isFrame, isFunction, isHTMLElement, isHiddenElement, isIPad, isIPhone, isInputElement, isIos, isMac, isMouseEvent, isMultiTouchEvent, isNode, isNotNumber, isNull, isNumber, isNumeric, isObject, isRegExp, isRtl, isSafari, isShadowRoot, isSize, isString, isTabbableElement, isTouchDevice, isTouchEvent, isTruthyDataAttr, isUndefined, isUnit, isVisibleElement, isVisualViewport, isWebKit, isWindow, memoizeObject, merge, mergeOptions, noop, objectKeys, omitObject, parseToHsla, parseToHsv, parseToRgba, percentToValue, pickObject, platform, pointFromMouse, pointFromTouch, replaceObject, rgbaTo, roundNumberToStep, runIfFn, sameColor, scrollLock, setAttribute, setStyle, splitObject, toArray, toCamelCase, toKebabCase, toNumber, toPascalCase, toPrecision, toTitleCase, transformSize, userAgent, uuid, valueToPercent, vendor, wrapWithKey };
@@ -1,18 +1,18 @@
1
1
  //#region src/index.types.d.ts
2
2
  type Primitive = bigint | boolean | null | number | string | symbol | undefined;
3
- type PathImpl<Y extends number | string | symbol, M$1> = Y extends number | string ? M$1 extends Primitive ? `${Y}` : `${Y}.${Path<M$1>}` : ``;
3
+ type PathImpl<Y extends number | string | symbol, M> = Y extends number | string ? M extends Primitive ? `${Y}` : `${Y}.${Path<M>}` : ``;
4
4
  type Path<Y> = Y extends any[] ? `${number}` : { [M in keyof Y]-?: PathImpl<M, Y[M]> }[keyof Y];
5
- type Value<Y extends Dict, M$1 extends string> = M$1 extends `${infer D}.${infer H}` ? Value<Y[D], H> : Y[M$1];
5
+ type Value<Y extends Dict, M extends string> = M extends `${infer D}.${infer H}` ? Value<Y[D], H> : Y[M];
6
6
  interface Dict<Y = any> {
7
7
  [key: string]: Y;
8
8
  }
9
9
  type Prettify<Y> = { [M in keyof Y]: Y[M] } & {};
10
- type FunctionOrValue<Y, M$1> = ((props: Y) => M$1) | M$1;
10
+ type FunctionOrValue<Y, M> = ((props: Y) => M) | M;
11
11
  type AnyString = string & {};
12
12
  type Booleanish<Y> = Y extends "false" | "true" ? boolean : Y;
13
13
  type Length<Y extends any[]> = Y["length"];
14
- type Merge<Y, M$1> = M$1 & Omit<Y, keyof M$1>;
15
- type DeepMerge<Y, M$1> = Y extends any[] | Date | Function | Primitive ? M$1 : Y extends object ? M$1 extends object ? { [D in keyof M$1 | keyof Y]: D extends keyof M$1 ? D extends keyof Y ? DeepMerge<Y[D], M$1[D]> : M$1[D] : D extends keyof Y ? Y[D] : never } : M$1 : M$1;
14
+ type Merge<Y, M> = M & Omit<Y, keyof M>;
15
+ type DeepMerge<Y, M> = Y extends any[] | Date | Function | Primitive ? M : Y extends object ? M extends object ? { [D in keyof M | keyof Y]: D extends keyof M ? D extends keyof Y ? DeepMerge<Y[D], M[D]> : M[D] : D extends keyof Y ? Y[D] : never } : M : M;
16
16
  type DeepPartial<Y> = Y extends any[] | Date | Function | Primitive ? Y : { [P in keyof Y]?: DeepPartial<Y[P]> };
17
17
  //#endregion
18
18
  export { AnyString, Booleanish, DeepMerge, DeepPartial, Dict, FunctionOrValue, Length, Merge, Path, Prettify, Primitive, Value };
@@ -1,36 +1,37 @@
1
1
  import { Dict } from "./index.types.js";
2
2
 
3
3
  //#region src/object.d.ts
4
- declare function omitObject<Y$1 extends Dict, M extends keyof Y$1>(obj: Y$1, keys: M[] | readonly M[]): Omit<Y$1, M>;
5
- declare function pickObject<Y$1 extends Dict, M extends keyof Y$1>(obj: Y$1, keys: M[] | readonly M[]): { [D in M]: Y$1[D] };
6
- declare function splitObject<Y$1 extends Dict, M extends keyof Y$1>(obj: Y$1, funcOrKeys?: M[] | readonly M[]): [{ [D in M]: Y$1[D] }, Omit<Y$1, M>];
7
- declare function splitObject<Y$1 extends Dict, M extends Dict>(obj: Dict, funcOrKeys?: (key: string) => boolean): [Y$1, M];
8
- declare function filterObject<Y$1 extends Dict, M extends Dict>(obj: Y$1, func: (key: keyof Y$1, value: Y$1[keyof Y$1], obj: Y$1) => boolean): M;
9
- declare function filterUndefined<Y$1 extends Dict>(obj: Y$1): Y$1;
10
- interface MergeOptions {
4
+ declare function omitObject<Y extends Dict, M extends keyof Y>(obj: Y, keys: M[] | readonly M[]): Omit<Y, M>;
5
+ declare function pickObject<Y extends Dict, M extends keyof Y>(obj: Y, keys: M[] | readonly M[]): { [D in M]: Y[D] };
6
+ declare function splitObject<Y extends Dict, M extends keyof Y>(obj: Y, funcOrKeys?: M[] | readonly M[]): [{ [D in M]: Y[D] }, Omit<Y, M>];
7
+ declare function splitObject<Y extends Dict, M extends Dict>(obj: Dict, funcOrKeys?: (key: string) => boolean): [Y, M];
8
+ declare function filterObject<Y extends Dict, M extends Dict>(obj: Y, func: (key: keyof Y, value: Y[keyof Y], obj: Y) => boolean): M;
9
+ declare function filterUndefined<Y extends Dict>(obj: Y): Y;
10
+ declare function extractObject<Y extends Dict, M>(obj: Y, getter: (value: Y[keyof Y]) => M): { [key in keyof Y]: M };
11
+ interface mergeOptions {
11
12
  debug?: boolean;
12
13
  mergeArray?: boolean;
13
14
  shouldProcess?: (value: any) => boolean;
14
15
  }
15
- declare function merge<Y$1 extends Dict>(target: any, source: any, options?: MergeOptions): Y$1;
16
+ declare function merge<Y extends Dict>(target: any, source: any, options?: mergeOptions): Y;
16
17
  interface FlattenObjectOptions {
17
18
  maxDepth?: number;
18
19
  separator?: string;
19
20
  shouldProcess?: (value: any) => boolean;
20
21
  }
21
- declare function flattenObject<Y$1 extends Dict>(obj: any, {
22
+ declare function flattenObject<Y extends Dict>(obj: any, {
22
23
  maxDepth,
23
24
  separator,
24
25
  shouldProcess
25
- }?: FlattenObjectOptions): Y$1;
26
- declare function objectKeys<Y$1 extends object>(obj: Y$1): (keyof Y$1)[];
27
- declare function replaceObject<Y$1 = any>(objOrArray: Y$1, callBack: (value: any) => any): Y$1;
26
+ }?: FlattenObjectOptions): Y;
27
+ declare function objectKeys<Y extends object>(obj: Y): (keyof Y)[];
28
+ declare function replaceObject<Y = any>(objOrArray: Y, callBack: (value: any) => any): Y;
28
29
  declare function getObject(obj: Dict | undefined, path: number | string, fallback?: any): any;
29
30
  declare function memoizeObject(func: typeof getObject): <Y>(obj: Dict, path: number | string, fallback?: any) => Y;
30
31
  declare const getMemoizedObject: <Y>(obj: Dict, path: number | string, fallback?: any) => Y;
31
- declare function wrapWithKey<Y$1>(obj: Y$1, key?: string): Y$1 | {
32
- [key]: Y$1;
32
+ declare function wrapWithKey<Y>(obj: Y, key?: string): Y | {
33
+ [key]: Y;
33
34
  };
34
35
  //#endregion
35
- export { FlattenObjectOptions, MergeOptions, filterObject, filterUndefined, flattenObject, getMemoizedObject, getObject, memoizeObject, merge, objectKeys, omitObject, pickObject, replaceObject, splitObject, wrapWithKey };
36
+ export { FlattenObjectOptions, extractObject, filterObject, filterUndefined, flattenObject, getMemoizedObject, getObject, memoizeObject, merge, mergeOptions, objectKeys, omitObject, pickObject, replaceObject, splitObject, wrapWithKey };
36
37
  //# sourceMappingURL=object.d.ts.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@yamada-ui/utils",
3
3
  "type": "module",
4
- "version": "2.0.3-dev-20251023021940",
4
+ "version": "2.1.0-next-20251025000229",
5
5
  "description": "The utilities for Yamada UI projects",
6
6
  "keywords": [
7
7
  "utils",