@yamada-ui/utils 1.2.1-dev-20240607024727 → 1.2.1-dev-20240607091714
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assertion.js.map +1 -1
- package/dist/assertion.mjs +1 -1
- package/dist/{chunk-P5JCSYB3.mjs → chunk-AYJXPU3Y.mjs} +1 -1
- package/dist/chunk-AYJXPU3Y.mjs.map +1 -0
- package/dist/chunk-C3OTM7Z4.mjs +23 -0
- package/dist/chunk-C3OTM7Z4.mjs.map +1 -0
- package/dist/chunk-NIEOK6MQ.mjs +291 -0
- package/dist/chunk-NIEOK6MQ.mjs.map +1 -0
- package/dist/chunk-OTCPXJQG.mjs +146 -0
- package/dist/chunk-OTCPXJQG.mjs.map +1 -0
- package/dist/chunk-OYISHZVU.mjs +202 -0
- package/dist/chunk-OYISHZVU.mjs.map +1 -0
- package/dist/chunk-SSSHE5NG.mjs +182 -0
- package/dist/chunk-SSSHE5NG.mjs.map +1 -0
- package/dist/color.js.map +1 -1
- package/dist/color.mjs +3 -9
- package/dist/dom.js.map +1 -1
- package/dist/dom.mjs +2 -9
- package/dist/function.js.map +1 -1
- package/dist/function.mjs +2 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +102 -94
- package/dist/object.js.map +1 -1
- package/dist/object.mjs +2 -9
- package/dist/react.js.map +1 -1
- package/dist/react.mjs +2 -9
- package/package.json +1 -1
- package/dist/chunk-P5JCSYB3.mjs.map +0 -1
- package/dist/chunk-PZXEZGEL.mjs +0 -811
- package/dist/chunk-PZXEZGEL.mjs.map +0 -1
package/dist/assertion.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/assertion.ts"],"sourcesContent":["import type { Dict } from \"
|
|
1
|
+
{"version":3,"sources":["../src/assertion.ts"],"sourcesContent":["import type { Dict } from \"./index.types\"\n\nexport const isNumber = (value: any): value is number =>\n typeof value === \"number\"\n\nexport const isNotNumber = (value: any): boolean =>\n typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value)\n\nexport const isNumeric = (value: any): boolean =>\n value != null &&\n parseFloat(value.toString()) - parseFloat(value.toString()) + 1 >= 0\n\nexport const isString = (value: any): value is string =>\n Object.prototype.toString.call(value) === \"[object String]\"\n\nexport const isBoolean = (value: any): value is boolean =>\n typeof value === \"boolean\"\n\nexport const isUndefined = (value: any): value is undefined =>\n typeof value === \"undefined\" && value === undefined\n\nexport const isNull = (value: any): value is null => value === null\n\nexport const isObject = <T extends Dict>(value: any): value is T =>\n value !== null &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n !isArray(value)\n\nexport const isArray = <T extends any[]>(value: any): value is T =>\n Array.isArray(value)\n\nexport const isEmpty = (value: any): boolean =>\n !isArray(value) || !value.length || value.every((v) => v == null)\n\nexport const isFunction = <T extends Function = Function>(\n value: any,\n): value is T => typeof value === \"function\"\n\nexport const isUnit = (value: any): boolean =>\n /[0-9].*[px|rem|em|%|vw|vh]$/.test(value)\n\nexport const cast = <T>(value: any) => value as T\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,IAAM,WAAW,CAAC,UACvB,OAAO,UAAU;AAEZ,IAAM,cAAc,CAAC,UAC1B,OAAO,UAAU,YAAY,OAAO,MAAM,KAAK,KAAK,CAAC,OAAO,SAAS,KAAK;AAErE,IAAM,YAAY,CAAC,UACxB,SAAS,QACT,WAAW,MAAM,SAAS,CAAC,IAAI,WAAW,MAAM,SAAS,CAAC,IAAI,KAAK;AAE9D,IAAM,WAAW,CAAC,UACvB,OAAO,UAAU,SAAS,KAAK,KAAK,MAAM;AAErC,IAAM,YAAY,CAAC,UACxB,OAAO,UAAU;AAEZ,IAAM,cAAc,CAAC,UAC1B,OAAO,UAAU,eAAe,UAAU;AAErC,IAAM,SAAS,CAAC,UAA8B,UAAU;AAExD,IAAM,WAAW,CAAiB,UACvC,UAAU,SACT,OAAO,UAAU,YAAY,OAAO,UAAU,eAC/C,CAAC,QAAQ,KAAK;AAET,IAAM,UAAU,CAAkB,UACvC,MAAM,QAAQ,KAAK;AAEd,IAAM,UAAU,CAAC,UACtB,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM,UAAU,MAAM,MAAM,CAAC,MAAM,KAAK,IAAI;AAE3D,IAAM,aAAa,CACxB,UACe,OAAO,UAAU;AAE3B,IAAM,SAAS,CAAC,UACrB,8BAA8B,KAAK,KAAK;AAEnC,IAAM,OAAO,CAAI,UAAe;","names":[]}
|
package/dist/assertion.mjs
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/assertion.ts"],"sourcesContent":["import type { Dict } from \"./index.types\"\n\nexport const isNumber = (value: any): value is number =>\n typeof value === \"number\"\n\nexport const isNotNumber = (value: any): boolean =>\n typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value)\n\nexport const isNumeric = (value: any): boolean =>\n value != null &&\n parseFloat(value.toString()) - parseFloat(value.toString()) + 1 >= 0\n\nexport const isString = (value: any): value is string =>\n Object.prototype.toString.call(value) === \"[object String]\"\n\nexport const isBoolean = (value: any): value is boolean =>\n typeof value === \"boolean\"\n\nexport const isUndefined = (value: any): value is undefined =>\n typeof value === \"undefined\" && value === undefined\n\nexport const isNull = (value: any): value is null => value === null\n\nexport const isObject = <T extends Dict>(value: any): value is T =>\n value !== null &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n !isArray(value)\n\nexport const isArray = <T extends any[]>(value: any): value is T =>\n Array.isArray(value)\n\nexport const isEmpty = (value: any): boolean =>\n !isArray(value) || !value.length || value.every((v) => v == null)\n\nexport const isFunction = <T extends Function = Function>(\n value: any,\n): value is T => typeof value === \"function\"\n\nexport const isUnit = (value: any): boolean =>\n /[0-9].*[px|rem|em|%|vw|vh]$/.test(value)\n\nexport const cast = <T>(value: any) => value as T\n"],"mappings":";AAEO,IAAM,WAAW,CAAC,UACvB,OAAO,UAAU;AAEZ,IAAM,cAAc,CAAC,UAC1B,OAAO,UAAU,YAAY,OAAO,MAAM,KAAK,KAAK,CAAC,OAAO,SAAS,KAAK;AAErE,IAAM,YAAY,CAAC,UACxB,SAAS,QACT,WAAW,MAAM,SAAS,CAAC,IAAI,WAAW,MAAM,SAAS,CAAC,IAAI,KAAK;AAE9D,IAAM,WAAW,CAAC,UACvB,OAAO,UAAU,SAAS,KAAK,KAAK,MAAM;AAErC,IAAM,YAAY,CAAC,UACxB,OAAO,UAAU;AAEZ,IAAM,cAAc,CAAC,UAC1B,OAAO,UAAU,eAAe,UAAU;AAErC,IAAM,SAAS,CAAC,UAA8B,UAAU;AAExD,IAAM,WAAW,CAAiB,UACvC,UAAU,SACT,OAAO,UAAU,YAAY,OAAO,UAAU,eAC/C,CAAC,QAAQ,KAAK;AAET,IAAM,UAAU,CAAkB,UACvC,MAAM,QAAQ,KAAK;AAEd,IAAM,UAAU,CAAC,UACtB,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM,UAAU,MAAM,MAAM,CAAC,MAAM,KAAK,IAAI;AAE3D,IAAM,aAAa,CACxB,UACe,OAAO,UAAU;AAE3B,IAAM,SAAS,CAAC,UACrB,8BAA8B,KAAK,KAAK;AAEnC,IAAM,OAAO,CAAI,UAAe;","names":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isFunction
|
|
3
|
+
} from "./chunk-AYJXPU3Y.mjs";
|
|
4
|
+
|
|
5
|
+
// src/function.ts
|
|
6
|
+
var noop = () => {
|
|
7
|
+
};
|
|
8
|
+
var runIfFunc = (valOrFunc, ...args) => isFunction(valOrFunc) ? valOrFunc(...args) : valOrFunc;
|
|
9
|
+
var handlerAll = (...funcs) => (event, ...args) => {
|
|
10
|
+
funcs.some((func) => {
|
|
11
|
+
func == null ? void 0 : func(event, ...args);
|
|
12
|
+
return event == null ? void 0 : event.defaultPrevented;
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
var funcAll = (...funcs) => (...args) => funcs.forEach((func) => func == null ? void 0 : func(...args));
|
|
16
|
+
|
|
17
|
+
export {
|
|
18
|
+
noop,
|
|
19
|
+
runIfFunc,
|
|
20
|
+
handlerAll,
|
|
21
|
+
funcAll
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=chunk-C3OTM7Z4.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/function.ts"],"sourcesContent":["import { isFunction } from \"./assertion\"\n\nexport const noop = () => {}\n\nexport const runIfFunc = <T, U extends Array<any>>(\n valOrFunc: T | ((...funcArgs: U) => T),\n ...args: U\n): T => (isFunction(valOrFunc) ? valOrFunc(...args) : valOrFunc)\n\nexport const handlerAll =\n <T extends (event: any, ...args: any[]) => void>(\n ...funcs: (T | undefined)[]\n ) =>\n (\n event: T extends (event: infer R, ...args: any[]) => any ? R : never,\n ...args: T extends (event: any, ...args: infer R) => any ? R : never\n ) => {\n funcs.some((func) => {\n func?.(event, ...args)\n\n return event?.defaultPrevented\n })\n }\n\nexport const funcAll =\n <T extends (...args: any[]) => any>(...funcs: (T | undefined)[]) =>\n (...args: T extends (...args: infer R) => any ? R : never) =>\n funcs.forEach((func) => func?.(...args))\n"],"mappings":";;;;;AAEO,IAAM,OAAO,MAAM;AAAC;AAEpB,IAAM,YAAY,CACvB,cACG,SACI,WAAW,SAAS,IAAI,UAAU,GAAG,IAAI,IAAI;AAE/C,IAAM,aACX,IACK,UAEL,CACE,UACG,SACA;AACH,QAAM,KAAK,CAAC,SAAS;AACnB,iCAAO,OAAO,GAAG;AAEjB,WAAO,+BAAO;AAAA,EAChB,CAAC;AACH;AAEK,IAAM,UACX,IAAuC,UACvC,IAAI,SACF,MAAM,QAAQ,CAAC,SAAS,6BAAO,GAAG,KAAK;","names":[]}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getMemoizedObject
|
|
3
|
+
} from "./chunk-SSSHE5NG.mjs";
|
|
4
|
+
import {
|
|
5
|
+
isArray,
|
|
6
|
+
isNumber
|
|
7
|
+
} from "./chunk-AYJXPU3Y.mjs";
|
|
8
|
+
|
|
9
|
+
// src/color.ts
|
|
10
|
+
import * as c from "color2k";
|
|
11
|
+
var tones = [
|
|
12
|
+
50,
|
|
13
|
+
100,
|
|
14
|
+
200,
|
|
15
|
+
300,
|
|
16
|
+
400,
|
|
17
|
+
500,
|
|
18
|
+
600,
|
|
19
|
+
700,
|
|
20
|
+
800,
|
|
21
|
+
900,
|
|
22
|
+
950
|
|
23
|
+
];
|
|
24
|
+
var isGray = (colorScheme) => colorScheme === "gray" || colorScheme === "neutral";
|
|
25
|
+
var isAccessible = (colorScheme) => colorScheme === "yellow" || colorScheme === "cyan" || colorScheme === "lime";
|
|
26
|
+
var getColor = (color, fallback = "#000000") => (theme = {}, colorMode) => {
|
|
27
|
+
var _a, _b, _c;
|
|
28
|
+
const [token, hue] = color.split(".");
|
|
29
|
+
const [, relatedToken] = (_c = Object.entries((_b = (_a = theme.semantics) == null ? void 0 : _a.colorSchemes) != null ? _b : {}).find(
|
|
30
|
+
([semanticToken]) => token === semanticToken
|
|
31
|
+
)) != null ? _c : [];
|
|
32
|
+
if (relatedToken)
|
|
33
|
+
color = `${relatedToken}.${hue}`;
|
|
34
|
+
const hex = getMemoizedObject(theme, `colors.${color}`, color);
|
|
35
|
+
try {
|
|
36
|
+
if (isArray(hex)) {
|
|
37
|
+
return c.toHex(String(colorMode !== "dark" ? hex[0] : hex[1]));
|
|
38
|
+
} else {
|
|
39
|
+
return c.toHex(String(hex));
|
|
40
|
+
}
|
|
41
|
+
} catch {
|
|
42
|
+
try {
|
|
43
|
+
return c.toHex(fallback);
|
|
44
|
+
} catch {
|
|
45
|
+
return "#000000";
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
var lightenColor = (color, amount) => (theme, colorMode) => {
|
|
50
|
+
const raw = getColor(color, color)(theme, colorMode);
|
|
51
|
+
return c.toHex(c.lighten(raw, amount / 100));
|
|
52
|
+
};
|
|
53
|
+
var darkenColor = (color, amount) => (theme, colorMode) => {
|
|
54
|
+
const raw = getColor(color, color)(theme, colorMode);
|
|
55
|
+
return c.toHex(c.darken(raw, amount / 100));
|
|
56
|
+
};
|
|
57
|
+
var tintColor = (color, amount) => (theme, colorMode) => {
|
|
58
|
+
const raw = getColor(color, color)(theme, colorMode);
|
|
59
|
+
return c.toHex(c.mix(raw, "#fff", amount / 100));
|
|
60
|
+
};
|
|
61
|
+
var shadeColor = (color, amount) => (theme, colorMode) => {
|
|
62
|
+
const raw = getColor(color, color)(theme, colorMode);
|
|
63
|
+
return c.toHex(c.mix(raw, "#000", amount / 100));
|
|
64
|
+
};
|
|
65
|
+
var transparentizeColor = (color, alpha) => (theme, colorMode) => {
|
|
66
|
+
const raw = getColor(color, color)(theme, colorMode);
|
|
67
|
+
return c.transparentize(raw, 1 - alpha);
|
|
68
|
+
};
|
|
69
|
+
var randomColor = ({
|
|
70
|
+
string,
|
|
71
|
+
colors
|
|
72
|
+
} = {}) => {
|
|
73
|
+
const fallback = randomHex();
|
|
74
|
+
if (string && colors)
|
|
75
|
+
return randomColorFromList(string, colors);
|
|
76
|
+
if (string && !colors)
|
|
77
|
+
return randomColorFromString(string);
|
|
78
|
+
if (colors && !string)
|
|
79
|
+
return randomFromList(colors);
|
|
80
|
+
return fallback;
|
|
81
|
+
};
|
|
82
|
+
var randomHex = () => `#${Math.floor(Math.random() * 16777215).toString(16).padEnd(6, "0")}`;
|
|
83
|
+
var randomColorFromString = (str) => {
|
|
84
|
+
let hash = 0;
|
|
85
|
+
if (str.length === 0)
|
|
86
|
+
return hash.toString();
|
|
87
|
+
for (let i = 0; i < str.length; i += 1) {
|
|
88
|
+
hash = str.charCodeAt(i) + ((hash << 5) - hash);
|
|
89
|
+
hash = hash & hash;
|
|
90
|
+
}
|
|
91
|
+
let color = "#";
|
|
92
|
+
for (let j = 0; j < 3; j += 1) {
|
|
93
|
+
const value = hash >> j * 8 & 255;
|
|
94
|
+
color += `00${value.toString(16)}`.substr(-2);
|
|
95
|
+
}
|
|
96
|
+
return color;
|
|
97
|
+
};
|
|
98
|
+
var randomColorFromList = (str, list) => {
|
|
99
|
+
let index = 0;
|
|
100
|
+
if (str.length === 0)
|
|
101
|
+
return list[0];
|
|
102
|
+
for (let i = 0; i < str.length; i += 1) {
|
|
103
|
+
index = str.charCodeAt(i) + ((index << 5) - index);
|
|
104
|
+
index = index & index;
|
|
105
|
+
}
|
|
106
|
+
index = (index % list.length + list.length) % list.length;
|
|
107
|
+
return list[index];
|
|
108
|
+
};
|
|
109
|
+
var randomFromList = (list) => list[Math.floor(Math.random() * list.length)];
|
|
110
|
+
var getBrightness = (color) => {
|
|
111
|
+
const [r, g, b] = c.parseToRgba(color);
|
|
112
|
+
return (r * 299 + g * 587 + b * 114) / 1e3;
|
|
113
|
+
};
|
|
114
|
+
var isTone = (color) => (theme, colorMode) => {
|
|
115
|
+
const raw = theme ? getColor(color)(theme, colorMode) : color;
|
|
116
|
+
const brightness = getBrightness(raw);
|
|
117
|
+
const isDark2 = brightness < 128;
|
|
118
|
+
return isDark2 ? "dark" : "light";
|
|
119
|
+
};
|
|
120
|
+
var isLight = (color) => (theme, colorMode) => isTone(color)(theme, colorMode) === "dark";
|
|
121
|
+
var isDark = (color) => (theme, colorMode) => isTone(color)(theme, colorMode) === "light";
|
|
122
|
+
var convertColor = (color, fallback) => (format) => {
|
|
123
|
+
try {
|
|
124
|
+
const isAlpha = format.endsWith("a");
|
|
125
|
+
if (/^[0-9a-fA-F]{6}$/.test(color))
|
|
126
|
+
color = "#" + color;
|
|
127
|
+
if (format.startsWith("hex")) {
|
|
128
|
+
let hexa = c.toHex(color);
|
|
129
|
+
if (isAlpha) {
|
|
130
|
+
if (hexa.length === 7)
|
|
131
|
+
hexa += "ff";
|
|
132
|
+
} else {
|
|
133
|
+
hexa = hexa.replace(/(?<=^#([0-9a-fA-F]{6}))[0-9a-fA-F]{2}$/, "");
|
|
134
|
+
}
|
|
135
|
+
return hexa;
|
|
136
|
+
} else if (format.startsWith("hsl")) {
|
|
137
|
+
let hsla2 = c.toHsla(color);
|
|
138
|
+
if (!isAlpha) {
|
|
139
|
+
hsla2 = hsla2.replace(/hsla/, "hsl");
|
|
140
|
+
hsla2 = hsla2.replace(/,\s*\d+(\.\d+)?\)$/, ")");
|
|
141
|
+
}
|
|
142
|
+
return hsla2;
|
|
143
|
+
} else {
|
|
144
|
+
let rgba2 = c.toRgba(color);
|
|
145
|
+
if (!isAlpha) {
|
|
146
|
+
rgba2 = rgba2.replace(/rgba/, "rgb");
|
|
147
|
+
rgba2 = rgba2.replace(/,\s*\d+(\.\d+)?\)$/, ")");
|
|
148
|
+
}
|
|
149
|
+
return rgba2;
|
|
150
|
+
}
|
|
151
|
+
} catch {
|
|
152
|
+
if (fallback)
|
|
153
|
+
return convertColor(fallback)(format);
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
var calcFormat = (color) => {
|
|
157
|
+
if (color.startsWith("hsl")) {
|
|
158
|
+
return color.startsWith("hsla") ? "hsla" : "hsl";
|
|
159
|
+
} else if (color.startsWith("rgb")) {
|
|
160
|
+
return color.startsWith("rgba") ? "rgba" : "rgb";
|
|
161
|
+
} else {
|
|
162
|
+
return color.length === 9 ? "hexa" : "hex";
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
var getAlpha = (color) => c.parseToRgba(color)[3];
|
|
166
|
+
var alphaToHex = (a) => {
|
|
167
|
+
if (0 > a)
|
|
168
|
+
a = 0;
|
|
169
|
+
if (1 < a)
|
|
170
|
+
a = 1;
|
|
171
|
+
return Math.round(a * 255).toString(16).padStart(2, "0");
|
|
172
|
+
};
|
|
173
|
+
var parseToRgba2 = (color, fallback) => {
|
|
174
|
+
try {
|
|
175
|
+
if (/^[0-9a-fA-F]{6}$/.test(color))
|
|
176
|
+
color = "#" + color;
|
|
177
|
+
return c.parseToRgba(color);
|
|
178
|
+
} catch {
|
|
179
|
+
if (fallback)
|
|
180
|
+
return c.parseToRgba(fallback);
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
var parseToHsla2 = (color, fallback) => {
|
|
184
|
+
try {
|
|
185
|
+
if (/^[0-9a-fA-F]{6}$/.test(color))
|
|
186
|
+
color = "#" + color;
|
|
187
|
+
return c.parseToHsla(color);
|
|
188
|
+
} catch {
|
|
189
|
+
if (fallback)
|
|
190
|
+
return c.parseToHsla(fallback);
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
var parseToHsv = (color, fallback) => {
|
|
194
|
+
var _a;
|
|
195
|
+
let [r, g, b, a] = (_a = parseToRgba2(color, fallback)) != null ? _a : [255, 255, 255, 1];
|
|
196
|
+
r = r / 255;
|
|
197
|
+
g = g / 255;
|
|
198
|
+
b = b / 255;
|
|
199
|
+
const [min, max] = [Math.min(r, g, b), Math.max(r, g, b)];
|
|
200
|
+
const delta = max - min;
|
|
201
|
+
let [h, v, s] = [0, max, max == 0 ? 0 : delta / max];
|
|
202
|
+
switch (min) {
|
|
203
|
+
case max:
|
|
204
|
+
h = 0;
|
|
205
|
+
break;
|
|
206
|
+
case r:
|
|
207
|
+
h = 60 * ((b - g) / delta) + 180;
|
|
208
|
+
break;
|
|
209
|
+
case g:
|
|
210
|
+
h = 60 * ((r - b) / delta) + 300;
|
|
211
|
+
break;
|
|
212
|
+
case b:
|
|
213
|
+
h = 60 * ((g - r) / delta) + 60;
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
return [h, s, v, a];
|
|
217
|
+
};
|
|
218
|
+
var rgbaTo = ([r, g, b, a], fallback) => (format = "hex") => convertColor(c.rgba(r, g, b, a), fallback)(format);
|
|
219
|
+
var hslaTo = ([h, s, l, a], fallback) => (format = "hex") => convertColor(c.hsla(h, s, l, a), fallback)(format);
|
|
220
|
+
var hsvTo = ([h, s, v, a], fallback) => (format = "hex") => {
|
|
221
|
+
h = h / 60;
|
|
222
|
+
let rgb = [v, v, v];
|
|
223
|
+
let i = Math.floor(h);
|
|
224
|
+
let f = h - i;
|
|
225
|
+
let p = v * (1 - s);
|
|
226
|
+
let q = v * (1 - s * f);
|
|
227
|
+
let t = v * (1 - s * (1 - f));
|
|
228
|
+
switch (i) {
|
|
229
|
+
case 0:
|
|
230
|
+
case 6:
|
|
231
|
+
rgb = [v, t, p];
|
|
232
|
+
break;
|
|
233
|
+
case 1:
|
|
234
|
+
rgb = [q, v, p];
|
|
235
|
+
break;
|
|
236
|
+
case 2:
|
|
237
|
+
rgb = [p, v, t];
|
|
238
|
+
break;
|
|
239
|
+
case 3:
|
|
240
|
+
rgb = [p, q, v];
|
|
241
|
+
break;
|
|
242
|
+
case 4:
|
|
243
|
+
rgb = [t, p, v];
|
|
244
|
+
break;
|
|
245
|
+
case 5:
|
|
246
|
+
rgb = [v, p, q];
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
let color = `rgb(${rgb.map((v2) => Math.round(v2 * 255)).join(", ")})`;
|
|
250
|
+
if (isNumber(a))
|
|
251
|
+
color = color.replace(/\)$/, `, ${a})`);
|
|
252
|
+
return convertColor(color, fallback)(format);
|
|
253
|
+
};
|
|
254
|
+
var sameColor = (color, comparison) => {
|
|
255
|
+
var _a, _b;
|
|
256
|
+
if (!color)
|
|
257
|
+
return false;
|
|
258
|
+
if (!comparison)
|
|
259
|
+
return false;
|
|
260
|
+
const a = (_a = parseToRgba2(color)) != null ? _a : [];
|
|
261
|
+
const b = (_b = parseToRgba2(comparison)) != null ? _b : [];
|
|
262
|
+
return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];
|
|
263
|
+
};
|
|
264
|
+
|
|
265
|
+
export {
|
|
266
|
+
tones,
|
|
267
|
+
isGray,
|
|
268
|
+
isAccessible,
|
|
269
|
+
getColor,
|
|
270
|
+
lightenColor,
|
|
271
|
+
darkenColor,
|
|
272
|
+
tintColor,
|
|
273
|
+
shadeColor,
|
|
274
|
+
transparentizeColor,
|
|
275
|
+
randomColor,
|
|
276
|
+
isTone,
|
|
277
|
+
isLight,
|
|
278
|
+
isDark,
|
|
279
|
+
convertColor,
|
|
280
|
+
calcFormat,
|
|
281
|
+
getAlpha,
|
|
282
|
+
alphaToHex,
|
|
283
|
+
parseToRgba2 as parseToRgba,
|
|
284
|
+
parseToHsla2 as parseToHsla,
|
|
285
|
+
parseToHsv,
|
|
286
|
+
rgbaTo,
|
|
287
|
+
hslaTo,
|
|
288
|
+
hsvTo,
|
|
289
|
+
sameColor
|
|
290
|
+
};
|
|
291
|
+
//# sourceMappingURL=chunk-NIEOK6MQ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/color.ts"],"sourcesContent":["import * as c from \"color2k\"\nimport { isArray, isNumber } from \"./assertion\"\nimport type { Dict } from \"./index.types\"\nimport { getMemoizedObject as get } from \"./object\"\n\ntype ColorMode = \"light\" | \"dark\"\n\nexport type ColorFormat = \"hex\" | \"hexa\" | \"rgba\" | \"rgb\" | \"hsl\" | \"hsla\"\n\nexport const tones = [\n 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950,\n] as const\n\nexport const isGray = (colorScheme: string) =>\n colorScheme === \"gray\" || colorScheme === \"neutral\"\n\nexport const isAccessible = (colorScheme: string) =>\n colorScheme === \"yellow\" || colorScheme === \"cyan\" || colorScheme === \"lime\"\n\nexport const getColor =\n (color: string, fallback: string = \"#000000\") =>\n (theme: Dict = {}, colorMode?: ColorMode) => {\n const [token, hue] = color.split(\".\")\n\n const [, relatedToken] =\n Object.entries<string>(theme.semantics?.colorSchemes ?? {}).find(\n ([semanticToken]) => token === semanticToken,\n ) ?? []\n\n if (relatedToken) color = `${relatedToken}.${hue}`\n\n const hex = get<\n string | number | [string | number, string | number] | undefined\n >(theme, `colors.${color}`, color)\n\n try {\n if (isArray(hex)) {\n return c.toHex(String(colorMode !== \"dark\" ? hex[0] : hex[1]))\n } else {\n return c.toHex(String(hex))\n }\n } catch {\n try {\n return c.toHex(fallback)\n } catch {\n return \"#000000\"\n }\n }\n }\n\nexport const lightenColor =\n (color: string, amount: number) => (theme?: Dict, colorMode?: ColorMode) => {\n const raw = getColor(color, color)(theme, colorMode)\n\n return c.toHex(c.lighten(raw, amount / 100))\n }\n\nexport const darkenColor =\n (color: string, amount: number) => (theme?: Dict, colorMode?: ColorMode) => {\n const raw = getColor(color, color)(theme, colorMode)\n\n return c.toHex(c.darken(raw, amount / 100))\n }\n\nexport const tintColor =\n (color: string, amount: number) => (theme?: Dict, colorMode?: ColorMode) => {\n const raw = getColor(color, color)(theme, colorMode)\n\n return c.toHex(c.mix(raw, \"#fff\", amount / 100))\n }\n\nexport const shadeColor =\n (color: string, amount: number) => (theme?: Dict, colorMode?: ColorMode) => {\n const raw = getColor(color, color)(theme, colorMode)\n\n return c.toHex(c.mix(raw, \"#000\", amount / 100))\n }\n\nexport const transparentizeColor =\n (color: string, alpha: number) => (theme?: Dict, colorMode?: ColorMode) => {\n const raw = getColor(color, color)(theme, colorMode)\n\n return c.transparentize(raw, 1 - alpha)\n }\n\nexport const randomColor = ({\n string,\n colors,\n}: { string?: string; colors?: string[] } = {}) => {\n const fallback = randomHex()\n\n if (string && colors) return randomColorFromList(string, colors)\n\n if (string && !colors) return randomColorFromString(string)\n\n if (colors && !string) return randomFromList(colors)\n\n return fallback\n}\n\nconst randomHex = () =>\n `#${Math.floor(Math.random() * 0xffffff)\n .toString(16)\n .padEnd(6, \"0\")}`\n\nconst randomColorFromString = (str: string) => {\n let hash = 0\n\n if (str.length === 0) return hash.toString()\n\n for (let i = 0; i < str.length; i += 1) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash)\n hash = hash & hash\n }\n\n let color = \"#\"\n\n for (let j = 0; j < 3; j += 1) {\n const value = (hash >> (j * 8)) & 255\n\n color += `00${value.toString(16)}`.substr(-2)\n }\n\n return color\n}\n\nconst randomColorFromList = (str: string, list: string[]) => {\n let index = 0\n\n if (str.length === 0) return list[0]\n\n for (let i = 0; i < str.length; i += 1) {\n index = str.charCodeAt(i) + ((index << 5) - index)\n\n index = index & index\n }\n\n index = ((index % list.length) + list.length) % list.length\n\n return list[index]\n}\n\nconst randomFromList = (list: string[]) =>\n list[Math.floor(Math.random() * list.length)]\n\nconst getBrightness = (color: string) => {\n const [r, g, b] = c.parseToRgba(color)\n\n return (r * 299 + g * 587 + b * 114) / 1000\n}\n\nexport const isTone =\n (color: string) => (theme?: Dict, colorMode?: ColorMode) => {\n const raw = theme ? getColor(color)(theme, colorMode) : color\n\n const brightness = getBrightness(raw)\n\n const isDark = brightness < 128\n\n return isDark ? \"dark\" : \"light\"\n }\n\nexport const isLight =\n (color: string) => (theme?: Dict, colorMode?: ColorMode) =>\n isTone(color)(theme, colorMode) === \"dark\"\n\nexport const isDark =\n (color: string) => (theme?: Dict, colorMode?: ColorMode) =>\n isTone(color)(theme, colorMode) === \"light\"\n\nexport const convertColor =\n (color: string, fallback?: string) =>\n (format: ColorFormat): string | undefined => {\n try {\n const isAlpha = format.endsWith(\"a\")\n\n if (/^[0-9a-fA-F]{6}$/.test(color)) color = \"#\" + color\n\n if (format.startsWith(\"hex\")) {\n let hexa = c.toHex(color)\n\n if (isAlpha) {\n if (hexa.length === 7) hexa += \"ff\"\n } else {\n hexa = hexa.replace(/(?<=^#([0-9a-fA-F]{6}))[0-9a-fA-F]{2}$/, \"\")\n }\n\n return hexa\n } else if (format.startsWith(\"hsl\")) {\n let hsla = c.toHsla(color)\n\n if (!isAlpha) {\n hsla = hsla.replace(/hsla/, \"hsl\")\n hsla = hsla.replace(/,\\s*\\d+(\\.\\d+)?\\)$/, \")\")\n }\n\n return hsla\n } else {\n let rgba = c.toRgba(color)\n\n if (!isAlpha) {\n rgba = rgba.replace(/rgba/, \"rgb\")\n rgba = rgba.replace(/,\\s*\\d+(\\.\\d+)?\\)$/, \")\")\n }\n\n return rgba\n }\n } catch {\n if (fallback) return convertColor(fallback)(format)\n }\n }\n\nexport const calcFormat = (color: string): ColorFormat => {\n if (color.startsWith(\"hsl\")) {\n return color.startsWith(\"hsla\") ? \"hsla\" : \"hsl\"\n } else if (color.startsWith(\"rgb\")) {\n return color.startsWith(\"rgba\") ? \"rgba\" : \"rgb\"\n } else {\n return color.length === 9 ? \"hexa\" : \"hex\"\n }\n}\n\nexport const getAlpha = (color: string) => c.parseToRgba(color)[3]\n\nexport const alphaToHex = (a: number) => {\n if (0 > a) a = 0\n if (1 < a) a = 1\n\n return Math.round(a * 255)\n .toString(16)\n .padStart(2, \"0\")\n}\n\nexport const parseToRgba = (color: string, fallback?: string) => {\n try {\n if (/^[0-9a-fA-F]{6}$/.test(color)) color = \"#\" + color\n\n return c.parseToRgba(color)\n } catch {\n if (fallback) return c.parseToRgba(fallback)\n }\n}\n\nexport const parseToHsla = (color: string, fallback?: string) => {\n try {\n if (/^[0-9a-fA-F]{6}$/.test(color)) color = \"#\" + color\n\n return c.parseToHsla(color)\n } catch {\n if (fallback) return c.parseToHsla(fallback)\n }\n}\n\nexport const parseToHsv = (\n color: string,\n fallback?: string,\n): [number, number, number, number] => {\n let [r, g, b, a] = parseToRgba(color, fallback) ?? [255, 255, 255, 1]\n\n r = r / 255\n g = g / 255\n b = b / 255\n\n const [min, max] = [Math.min(r, g, b), Math.max(r, g, b)]\n const delta = max - min\n\n let [h, v, s] = [0, max, max == 0 ? 0 : delta / max]\n\n switch (min) {\n case max:\n h = 0\n break\n\n case r:\n h = 60 * ((b - g) / delta) + 180\n break\n\n case g:\n h = 60 * ((r - b) / delta) + 300\n break\n\n case b:\n h = 60 * ((g - r) / delta) + 60\n break\n }\n\n return [h, s, v, a]\n}\n\nexport const rgbaTo =\n ([r, g, b, a]: [number, number, number, number], fallback?: string) =>\n (format: ColorFormat = \"hex\") =>\n convertColor(c.rgba(r, g, b, a), fallback)(format)\n\nexport const hslaTo =\n ([h, s, l, a]: [number, number, number, number], fallback?: string) =>\n (format: ColorFormat = \"hex\") =>\n convertColor(c.hsla(h, s, l, a), fallback)(format)\n\nexport const hsvTo =\n ([h, s, v, a]: [number, number, number, number?], fallback?: string) =>\n (format: ColorFormat = \"hex\"): string | undefined => {\n h = h / 60\n\n let rgb: [number, number, number] = [v, v, v]\n\n let i = Math.floor(h)\n let f = h - i\n let p = v * (1 - s)\n let q = v * (1 - s * f)\n let t = v * (1 - s * (1 - f))\n\n switch (i) {\n case 0:\n case 6:\n rgb = [v, t, p]\n break\n\n case 1:\n rgb = [q, v, p]\n break\n\n case 2:\n rgb = [p, v, t]\n break\n\n case 3:\n rgb = [p, q, v]\n break\n\n case 4:\n rgb = [t, p, v]\n break\n\n case 5:\n rgb = [v, p, q]\n break\n }\n\n let color = `rgb(${rgb.map((v) => Math.round(v * 255)).join(\", \")})`\n\n if (isNumber(a)) color = color.replace(/\\)$/, `, ${a})`)\n\n return convertColor(color, fallback)(format)\n }\n\nexport const sameColor = (\n color: string | undefined,\n comparison: string | undefined,\n) => {\n if (!color) return false\n if (!comparison) return false\n\n const a = parseToRgba(color) ?? []\n const b = parseToRgba(comparison) ?? []\n\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3]\n}\n"],"mappings":";;;;;;;;;AAAA,YAAY,OAAO;AASZ,IAAM,QAAQ;AAAA,EACnB;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AACnD;AAEO,IAAM,SAAS,CAAC,gBACrB,gBAAgB,UAAU,gBAAgB;AAErC,IAAM,eAAe,CAAC,gBAC3B,gBAAgB,YAAY,gBAAgB,UAAU,gBAAgB;AAEjE,IAAM,WACX,CAAC,OAAe,WAAmB,cACnC,CAAC,QAAc,CAAC,GAAG,cAA0B;AArB/C;AAsBI,QAAM,CAAC,OAAO,GAAG,IAAI,MAAM,MAAM,GAAG;AAEpC,QAAM,CAAC,EAAE,YAAY,KACnB,YAAO,SAAgB,iBAAM,cAAN,mBAAiB,iBAAjB,YAAiC,CAAC,CAAC,EAAE;AAAA,IAC1D,CAAC,CAAC,aAAa,MAAM,UAAU;AAAA,EACjC,MAFA,YAEK,CAAC;AAER,MAAI;AAAc,YAAQ,GAAG,YAAY,IAAI,GAAG;AAEhD,QAAM,MAAM,kBAEV,OAAO,UAAU,KAAK,IAAI,KAAK;AAEjC,MAAI;AACF,QAAI,QAAQ,GAAG,GAAG;AAChB,aAAS,QAAM,OAAO,cAAc,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AAAA,IAC/D,OAAO;AACL,aAAS,QAAM,OAAO,GAAG,CAAC;AAAA,IAC5B;AAAA,EACF,QAAQ;AACN,QAAI;AACF,aAAS,QAAM,QAAQ;AAAA,IACzB,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEK,IAAM,eACX,CAAC,OAAe,WAAmB,CAAC,OAAc,cAA0B;AAC1E,QAAM,MAAM,SAAS,OAAO,KAAK,EAAE,OAAO,SAAS;AAEnD,SAAS,QAAQ,UAAQ,KAAK,SAAS,GAAG,CAAC;AAC7C;AAEK,IAAM,cACX,CAAC,OAAe,WAAmB,CAAC,OAAc,cAA0B;AAC1E,QAAM,MAAM,SAAS,OAAO,KAAK,EAAE,OAAO,SAAS;AAEnD,SAAS,QAAQ,SAAO,KAAK,SAAS,GAAG,CAAC;AAC5C;AAEK,IAAM,YACX,CAAC,OAAe,WAAmB,CAAC,OAAc,cAA0B;AAC1E,QAAM,MAAM,SAAS,OAAO,KAAK,EAAE,OAAO,SAAS;AAEnD,SAAS,QAAQ,MAAI,KAAK,QAAQ,SAAS,GAAG,CAAC;AACjD;AAEK,IAAM,aACX,CAAC,OAAe,WAAmB,CAAC,OAAc,cAA0B;AAC1E,QAAM,MAAM,SAAS,OAAO,KAAK,EAAE,OAAO,SAAS;AAEnD,SAAS,QAAQ,MAAI,KAAK,QAAQ,SAAS,GAAG,CAAC;AACjD;AAEK,IAAM,sBACX,CAAC,OAAe,UAAkB,CAAC,OAAc,cAA0B;AACzE,QAAM,MAAM,SAAS,OAAO,KAAK,EAAE,OAAO,SAAS;AAEnD,SAAS,iBAAe,KAAK,IAAI,KAAK;AACxC;AAEK,IAAM,cAAc,CAAC;AAAA,EAC1B;AAAA,EACA;AACF,IAA4C,CAAC,MAAM;AACjD,QAAM,WAAW,UAAU;AAE3B,MAAI,UAAU;AAAQ,WAAO,oBAAoB,QAAQ,MAAM;AAE/D,MAAI,UAAU,CAAC;AAAQ,WAAO,sBAAsB,MAAM;AAE1D,MAAI,UAAU,CAAC;AAAQ,WAAO,eAAe,MAAM;AAEnD,SAAO;AACT;AAEA,IAAM,YAAY,MAChB,IAAI,KAAK,MAAM,KAAK,OAAO,IAAI,QAAQ,EACpC,SAAS,EAAE,EACX,OAAO,GAAG,GAAG,CAAC;AAEnB,IAAM,wBAAwB,CAAC,QAAgB;AAC7C,MAAI,OAAO;AAEX,MAAI,IAAI,WAAW;AAAG,WAAO,KAAK,SAAS;AAE3C,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,GAAG;AACtC,WAAO,IAAI,WAAW,CAAC,MAAM,QAAQ,KAAK;AAC1C,WAAO,OAAO;AAAA,EAChB;AAEA,MAAI,QAAQ;AAEZ,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;AAC7B,UAAM,QAAS,QAAS,IAAI,IAAM;AAElC,aAAS,KAAK,MAAM,SAAS,EAAE,CAAC,GAAG,OAAO,EAAE;AAAA,EAC9C;AAEA,SAAO;AACT;AAEA,IAAM,sBAAsB,CAAC,KAAa,SAAmB;AAC3D,MAAI,QAAQ;AAEZ,MAAI,IAAI,WAAW;AAAG,WAAO,KAAK,CAAC;AAEnC,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,GAAG;AACtC,YAAQ,IAAI,WAAW,CAAC,MAAM,SAAS,KAAK;AAE5C,YAAQ,QAAQ;AAAA,EAClB;AAEA,WAAU,QAAQ,KAAK,SAAU,KAAK,UAAU,KAAK;AAErD,SAAO,KAAK,KAAK;AACnB;AAEA,IAAM,iBAAiB,CAAC,SACtB,KAAK,KAAK,MAAM,KAAK,OAAO,IAAI,KAAK,MAAM,CAAC;AAE9C,IAAM,gBAAgB,CAAC,UAAkB;AACvC,QAAM,CAAC,GAAG,GAAG,CAAC,IAAM,cAAY,KAAK;AAErC,UAAQ,IAAI,MAAM,IAAI,MAAM,IAAI,OAAO;AACzC;AAEO,IAAM,SACX,CAAC,UAAkB,CAAC,OAAc,cAA0B;AAC1D,QAAM,MAAM,QAAQ,SAAS,KAAK,EAAE,OAAO,SAAS,IAAI;AAExD,QAAM,aAAa,cAAc,GAAG;AAEpC,QAAMA,UAAS,aAAa;AAE5B,SAAOA,UAAS,SAAS;AAC3B;AAEK,IAAM,UACX,CAAC,UAAkB,CAAC,OAAc,cAChC,OAAO,KAAK,EAAE,OAAO,SAAS,MAAM;AAEjC,IAAM,SACX,CAAC,UAAkB,CAAC,OAAc,cAChC,OAAO,KAAK,EAAE,OAAO,SAAS,MAAM;AAEjC,IAAM,eACX,CAAC,OAAe,aAChB,CAAC,WAA4C;AAC3C,MAAI;AACF,UAAM,UAAU,OAAO,SAAS,GAAG;AAEnC,QAAI,mBAAmB,KAAK,KAAK;AAAG,cAAQ,MAAM;AAElD,QAAI,OAAO,WAAW,KAAK,GAAG;AAC5B,UAAI,OAAS,QAAM,KAAK;AAExB,UAAI,SAAS;AACX,YAAI,KAAK,WAAW;AAAG,kBAAQ;AAAA,MACjC,OAAO;AACL,eAAO,KAAK,QAAQ,0CAA0C,EAAE;AAAA,MAClE;AAEA,aAAO;AAAA,IACT,WAAW,OAAO,WAAW,KAAK,GAAG;AACnC,UAAIC,QAAS,SAAO,KAAK;AAEzB,UAAI,CAAC,SAAS;AACZ,QAAAA,QAAOA,MAAK,QAAQ,QAAQ,KAAK;AACjC,QAAAA,QAAOA,MAAK,QAAQ,sBAAsB,GAAG;AAAA,MAC/C;AAEA,aAAOA;AAAA,IACT,OAAO;AACL,UAAIC,QAAS,SAAO,KAAK;AAEzB,UAAI,CAAC,SAAS;AACZ,QAAAA,QAAOA,MAAK,QAAQ,QAAQ,KAAK;AACjC,QAAAA,QAAOA,MAAK,QAAQ,sBAAsB,GAAG;AAAA,MAC/C;AAEA,aAAOA;AAAA,IACT;AAAA,EACF,QAAQ;AACN,QAAI;AAAU,aAAO,aAAa,QAAQ,EAAE,MAAM;AAAA,EACpD;AACF;AAEK,IAAM,aAAa,CAAC,UAA+B;AACxD,MAAI,MAAM,WAAW,KAAK,GAAG;AAC3B,WAAO,MAAM,WAAW,MAAM,IAAI,SAAS;AAAA,EAC7C,WAAW,MAAM,WAAW,KAAK,GAAG;AAClC,WAAO,MAAM,WAAW,MAAM,IAAI,SAAS;AAAA,EAC7C,OAAO;AACL,WAAO,MAAM,WAAW,IAAI,SAAS;AAAA,EACvC;AACF;AAEO,IAAM,WAAW,CAAC,UAAoB,cAAY,KAAK,EAAE,CAAC;AAE1D,IAAM,aAAa,CAAC,MAAc;AACvC,MAAI,IAAI;AAAG,QAAI;AACf,MAAI,IAAI;AAAG,QAAI;AAEf,SAAO,KAAK,MAAM,IAAI,GAAG,EACtB,SAAS,EAAE,EACX,SAAS,GAAG,GAAG;AACpB;AAEO,IAAMC,eAAc,CAAC,OAAe,aAAsB;AAC/D,MAAI;AACF,QAAI,mBAAmB,KAAK,KAAK;AAAG,cAAQ,MAAM;AAElD,WAAS,cAAY,KAAK;AAAA,EAC5B,QAAQ;AACN,QAAI;AAAU,aAAS,cAAY,QAAQ;AAAA,EAC7C;AACF;AAEO,IAAMC,eAAc,CAAC,OAAe,aAAsB;AAC/D,MAAI;AACF,QAAI,mBAAmB,KAAK,KAAK;AAAG,cAAQ,MAAM;AAElD,WAAS,cAAY,KAAK;AAAA,EAC5B,QAAQ;AACN,QAAI;AAAU,aAAS,cAAY,QAAQ;AAAA,EAC7C;AACF;AAEO,IAAM,aAAa,CACxB,OACA,aACqC;AAhQvC;AAiQE,MAAI,CAAC,GAAG,GAAG,GAAG,CAAC,KAAI,KAAAD,aAAY,OAAO,QAAQ,MAA3B,YAAgC,CAAC,KAAK,KAAK,KAAK,CAAC;AAEpE,MAAI,IAAI;AACR,MAAI,IAAI;AACR,MAAI,IAAI;AAER,QAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,GAAG,CAAC,GAAG,KAAK,IAAI,GAAG,GAAG,CAAC,CAAC;AACxD,QAAM,QAAQ,MAAM;AAEpB,MAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,OAAO,IAAI,IAAI,QAAQ,GAAG;AAEnD,UAAQ,KAAK;AAAA,IACX,KAAK;AACH,UAAI;AACJ;AAAA,IAEF,KAAK;AACH,UAAI,OAAO,IAAI,KAAK,SAAS;AAC7B;AAAA,IAEF,KAAK;AACH,UAAI,OAAO,IAAI,KAAK,SAAS;AAC7B;AAAA,IAEF,KAAK;AACH,UAAI,OAAO,IAAI,KAAK,SAAS;AAC7B;AAAA,EACJ;AAEA,SAAO,CAAC,GAAG,GAAG,GAAG,CAAC;AACpB;AAEO,IAAM,SACX,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAqC,aACjD,CAAC,SAAsB,UACrB,aAAe,OAAK,GAAG,GAAG,GAAG,CAAC,GAAG,QAAQ,EAAE,MAAM;AAE9C,IAAM,SACX,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAqC,aACjD,CAAC,SAAsB,UACrB,aAAe,OAAK,GAAG,GAAG,GAAG,CAAC,GAAG,QAAQ,EAAE,MAAM;AAE9C,IAAM,QACX,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAsC,aAClD,CAAC,SAAsB,UAA8B;AACnD,MAAI,IAAI;AAER,MAAI,MAAgC,CAAC,GAAG,GAAG,CAAC;AAE5C,MAAI,IAAI,KAAK,MAAM,CAAC;AACpB,MAAI,IAAI,IAAI;AACZ,MAAI,IAAI,KAAK,IAAI;AACjB,MAAI,IAAI,KAAK,IAAI,IAAI;AACrB,MAAI,IAAI,KAAK,IAAI,KAAK,IAAI;AAE1B,UAAQ,GAAG;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,YAAM,CAAC,GAAG,GAAG,CAAC;AACd;AAAA,IAEF,KAAK;AACH,YAAM,CAAC,GAAG,GAAG,CAAC;AACd;AAAA,IAEF,KAAK;AACH,YAAM,CAAC,GAAG,GAAG,CAAC;AACd;AAAA,IAEF,KAAK;AACH,YAAM,CAAC,GAAG,GAAG,CAAC;AACd;AAAA,IAEF,KAAK;AACH,YAAM,CAAC,GAAG,GAAG,CAAC;AACd;AAAA,IAEF,KAAK;AACH,YAAM,CAAC,GAAG,GAAG,CAAC;AACd;AAAA,EACJ;AAEA,MAAI,QAAQ,OAAO,IAAI,IAAI,CAACE,OAAM,KAAK,MAAMA,KAAI,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC;AAEjE,MAAI,SAAS,CAAC;AAAG,YAAQ,MAAM,QAAQ,OAAO,KAAK,CAAC,GAAG;AAEvD,SAAO,aAAa,OAAO,QAAQ,EAAE,MAAM;AAC7C;AAEK,IAAM,YAAY,CACvB,OACA,eACG;AA7VL;AA8VE,MAAI,CAAC;AAAO,WAAO;AACnB,MAAI,CAAC;AAAY,WAAO;AAExB,QAAM,KAAI,KAAAF,aAAY,KAAK,MAAjB,YAAsB,CAAC;AACjC,QAAM,KAAI,KAAAA,aAAY,UAAU,MAAtB,YAA2B,CAAC;AAEtC,SAAO,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC;AACxE;","names":["isDark","hsla","rgba","parseToRgba","parseToHsla","v"]}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isNumber,
|
|
3
|
+
isUndefined
|
|
4
|
+
} from "./chunk-AYJXPU3Y.mjs";
|
|
5
|
+
|
|
6
|
+
// src/dom.ts
|
|
7
|
+
var createdDom = () => !!(typeof window !== "undefined" && window.document && window.document.createElement);
|
|
8
|
+
var getPlatform = () => {
|
|
9
|
+
var _a, _b;
|
|
10
|
+
return (_b = (_a = navigator.userAgentData) == null ? void 0 : _a.platform) != null ? _b : navigator.platform;
|
|
11
|
+
};
|
|
12
|
+
var vendor = (v) => createdDom() && v.test(navigator.vendor);
|
|
13
|
+
var platform = (v) => createdDom() && v.test(getPlatform());
|
|
14
|
+
var isMac = () => platform(/^mac/i);
|
|
15
|
+
var isApple = () => platform(/mac|iphone|ipad|ipod/i);
|
|
16
|
+
var isSafari = () => isApple() && vendor(/apple/i);
|
|
17
|
+
var isElement = (el) => el != null && typeof el == "object" && "nodeType" in el && el.nodeType === Node.ELEMENT_NODE;
|
|
18
|
+
var isHTMLElement = (el) => {
|
|
19
|
+
var _a;
|
|
20
|
+
if (!isElement(el))
|
|
21
|
+
return false;
|
|
22
|
+
const win = (_a = el.ownerDocument.defaultView) != null ? _a : window;
|
|
23
|
+
return el instanceof win.HTMLElement;
|
|
24
|
+
};
|
|
25
|
+
var isHidden = (el) => {
|
|
26
|
+
if (el.parentElement && isHidden(el.parentElement))
|
|
27
|
+
return true;
|
|
28
|
+
return el.hidden;
|
|
29
|
+
};
|
|
30
|
+
var isDisabled = (el) => Boolean(el.getAttribute("disabled")) === true || Boolean(el.getAttribute("data-disabled")) === true || Boolean(el.getAttribute("aria-disabled")) === true;
|
|
31
|
+
var isVisible = (el) => el.offsetWidth > 0 && el.offsetHeight > 0;
|
|
32
|
+
var hasTabIndex = (el) => el.hasAttribute("tabindex");
|
|
33
|
+
var isContentEditable = (el) => {
|
|
34
|
+
const value = el.getAttribute("contenteditable");
|
|
35
|
+
return value !== "false" && value != null;
|
|
36
|
+
};
|
|
37
|
+
var isContains = (parent, child) => {
|
|
38
|
+
return parent === child || (parent == null ? void 0 : parent.contains(child));
|
|
39
|
+
};
|
|
40
|
+
var getPx = (value) => {
|
|
41
|
+
if (isNumber(value))
|
|
42
|
+
return value;
|
|
43
|
+
if (isUndefined(value))
|
|
44
|
+
return 0;
|
|
45
|
+
if (value.includes("px"))
|
|
46
|
+
return parseFloat(value);
|
|
47
|
+
const isBrowser = createdDom();
|
|
48
|
+
let fontSize = 16;
|
|
49
|
+
if (isBrowser) {
|
|
50
|
+
const style = window.getComputedStyle(document.documentElement);
|
|
51
|
+
const computedFontSize = parseFloat(style.fontSize);
|
|
52
|
+
if (!isNaN(computedFontSize))
|
|
53
|
+
fontSize = computedFontSize;
|
|
54
|
+
}
|
|
55
|
+
return parseFloat(value) * fontSize;
|
|
56
|
+
};
|
|
57
|
+
var getEventRelatedTarget = (ev) => {
|
|
58
|
+
var _a;
|
|
59
|
+
return (_a = ev.relatedTarget) != null ? _a : ev.currentTarget.ownerDocument.activeElement;
|
|
60
|
+
};
|
|
61
|
+
var dataAttr = (condition) => condition ? "" : void 0;
|
|
62
|
+
var ariaAttr = (condition) => condition ? true : void 0;
|
|
63
|
+
var focusableElList = [
|
|
64
|
+
"input:not(:disabled):not([disabled])",
|
|
65
|
+
"select:not(:disabled):not([disabled])",
|
|
66
|
+
"textarea:not(:disabled):not([disabled])",
|
|
67
|
+
"embed",
|
|
68
|
+
"iframe",
|
|
69
|
+
"object",
|
|
70
|
+
"a[href]",
|
|
71
|
+
"area[href]",
|
|
72
|
+
"button:not(:disabled):not([disabled])",
|
|
73
|
+
"[tabindex]",
|
|
74
|
+
"audio[controls]",
|
|
75
|
+
"video[controls]",
|
|
76
|
+
"*[tabindex]:not([aria-disabled])",
|
|
77
|
+
"*[contenteditable]"
|
|
78
|
+
];
|
|
79
|
+
var focusableElSelector = focusableElList.join();
|
|
80
|
+
var getAllFocusable = (container) => {
|
|
81
|
+
const focusableEls = Array.from(
|
|
82
|
+
container.querySelectorAll(focusableElSelector)
|
|
83
|
+
);
|
|
84
|
+
focusableEls.unshift(container);
|
|
85
|
+
return focusableEls.filter((el) => isFocusable(el) && isVisible(el));
|
|
86
|
+
};
|
|
87
|
+
var isFocusable = (el) => {
|
|
88
|
+
if (!isHTMLElement(el) || isHidden(el) || isDisabled(el)) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
const { localName } = el;
|
|
92
|
+
const focusableTags = ["input", "select", "textarea", "button"];
|
|
93
|
+
if (focusableTags.indexOf(localName) >= 0)
|
|
94
|
+
return true;
|
|
95
|
+
const others = {
|
|
96
|
+
a: () => el.hasAttribute("href"),
|
|
97
|
+
audio: () => el.hasAttribute("controls"),
|
|
98
|
+
video: () => el.hasAttribute("controls")
|
|
99
|
+
};
|
|
100
|
+
if (localName in others)
|
|
101
|
+
return others[localName]();
|
|
102
|
+
if (isContentEditable(el))
|
|
103
|
+
return true;
|
|
104
|
+
return hasTabIndex(el);
|
|
105
|
+
};
|
|
106
|
+
var hasNegativeTabIndex = (el) => hasTabIndex(el) && el.tabIndex === -1;
|
|
107
|
+
var isTabbable = (el) => el ? isHTMLElement(el) && isFocusable(el) && !hasNegativeTabIndex(el) : false;
|
|
108
|
+
var getOwnerWindow = (node) => {
|
|
109
|
+
var _a, _b;
|
|
110
|
+
return (_b = (_a = getOwnerDocument(node)) == null ? void 0 : _a.defaultView) != null ? _b : window;
|
|
111
|
+
};
|
|
112
|
+
var getOwnerDocument = (el) => isElement(el) ? el.ownerDocument : document;
|
|
113
|
+
var getActiveElement = (el) => getOwnerDocument(el).activeElement;
|
|
114
|
+
var isActiveElement = (el) => {
|
|
115
|
+
return getActiveElement(el) === el;
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
export {
|
|
119
|
+
createdDom,
|
|
120
|
+
getPlatform,
|
|
121
|
+
vendor,
|
|
122
|
+
platform,
|
|
123
|
+
isMac,
|
|
124
|
+
isApple,
|
|
125
|
+
isSafari,
|
|
126
|
+
isElement,
|
|
127
|
+
isHTMLElement,
|
|
128
|
+
isHidden,
|
|
129
|
+
isDisabled,
|
|
130
|
+
hasTabIndex,
|
|
131
|
+
isContentEditable,
|
|
132
|
+
isContains,
|
|
133
|
+
getPx,
|
|
134
|
+
getEventRelatedTarget,
|
|
135
|
+
dataAttr,
|
|
136
|
+
ariaAttr,
|
|
137
|
+
getAllFocusable,
|
|
138
|
+
isFocusable,
|
|
139
|
+
hasNegativeTabIndex,
|
|
140
|
+
isTabbable,
|
|
141
|
+
getOwnerWindow,
|
|
142
|
+
getOwnerDocument,
|
|
143
|
+
getActiveElement,
|
|
144
|
+
isActiveElement
|
|
145
|
+
};
|
|
146
|
+
//# sourceMappingURL=chunk-OTCPXJQG.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/dom.ts"],"sourcesContent":["import type React from \"react\"\nimport { isNumber, isUndefined } from \"./assertion\"\n\nexport const createdDom = (): boolean =>\n !!(\n typeof window !== \"undefined\" &&\n window.document &&\n window.document.createElement\n )\n\nexport const getPlatform = (): string =>\n (navigator as any).userAgentData?.platform ?? navigator.platform\n\nexport const vendor = (v: RegExp): boolean =>\n createdDom() && v.test(navigator.vendor)\nexport const platform = (v: RegExp): boolean =>\n createdDom() && v.test(getPlatform())\n\nexport const isMac = (): boolean => platform(/^mac/i)\nexport const isApple = (): boolean => platform(/mac|iphone|ipad|ipod/i)\nexport const isSafari = (): boolean => isApple() && vendor(/apple/i)\n\nexport const isElement = (el: any): el is Element =>\n el != null &&\n typeof el == \"object\" &&\n \"nodeType\" in el &&\n el.nodeType === Node.ELEMENT_NODE\n\nexport const isHTMLElement = (el: any): el is HTMLElement => {\n if (!isElement(el)) return false\n\n const win = el.ownerDocument.defaultView ?? window\n\n return el instanceof win.HTMLElement\n}\n\nexport const isHidden = (el: HTMLElement): boolean => {\n if (el.parentElement && isHidden(el.parentElement)) return true\n\n return el.hidden\n}\n\nexport const isDisabled = (el: HTMLElement): boolean =>\n Boolean(el.getAttribute(\"disabled\")) === true ||\n Boolean(el.getAttribute(\"data-disabled\")) === true ||\n Boolean(el.getAttribute(\"aria-disabled\")) === true\n\nconst isVisible = (el: HTMLElement) => el.offsetWidth > 0 && el.offsetHeight > 0\n\nexport const hasTabIndex = (el: HTMLElement): boolean =>\n el.hasAttribute(\"tabindex\")\n\nexport const isContentEditable = (el: HTMLElement): boolean => {\n const value = el.getAttribute(\"contenteditable\")\n\n return value !== \"false\" && value != null\n}\n\nexport const isContains = (\n parent: HTMLElement | null,\n child: HTMLElement | null,\n): boolean | undefined => {\n return parent === child || parent?.contains(child)\n}\n\nexport const getPx = (value: string | number | undefined): number => {\n if (isNumber(value)) return value\n\n if (isUndefined(value)) return 0\n\n if (value.includes(\"px\")) return parseFloat(value)\n\n const isBrowser = createdDom()\n let fontSize = 16\n\n if (isBrowser) {\n const style = window.getComputedStyle(document.documentElement)\n\n const computedFontSize = parseFloat(style.fontSize)\n\n if (!isNaN(computedFontSize)) fontSize = computedFontSize\n }\n\n return parseFloat(value) * fontSize\n}\n\nexport const getEventRelatedTarget = (\n ev: React.FocusEvent | React.MouseEvent,\n) =>\n (ev.relatedTarget ??\n ev.currentTarget.ownerDocument.activeElement) as HTMLElement | null\n\ntype Booleanish = boolean | \"true\" | \"false\"\n\nexport const dataAttr = (condition: boolean | undefined) =>\n (condition ? \"\" : undefined) as Booleanish\n\nexport const ariaAttr = (\n condition: boolean | undefined,\n): boolean | undefined => (condition ? true : undefined)\n\nexport type FocusableElement = {\n focus: (options?: FocusOptions) => void\n}\n\nconst focusableElList = [\n \"input:not(:disabled):not([disabled])\",\n \"select:not(:disabled):not([disabled])\",\n \"textarea:not(:disabled):not([disabled])\",\n \"embed\",\n \"iframe\",\n \"object\",\n \"a[href]\",\n \"area[href]\",\n \"button:not(:disabled):not([disabled])\",\n \"[tabindex]\",\n \"audio[controls]\",\n \"video[controls]\",\n \"*[tabindex]:not([aria-disabled])\",\n \"*[contenteditable]\",\n]\n\nconst focusableElSelector: string = focusableElList.join()\n\nexport const getAllFocusable = <T extends HTMLElement>(container: T): T[] => {\n const focusableEls: T[] = Array.from(\n container.querySelectorAll<T>(focusableElSelector),\n )\n\n focusableEls.unshift(container)\n\n return focusableEls.filter((el) => isFocusable(el) && isVisible(el))\n}\n\nexport const isFocusable = (el: HTMLElement): boolean => {\n if (!isHTMLElement(el) || isHidden(el) || isDisabled(el)) {\n return false\n }\n\n const { localName } = el\n const focusableTags = [\"input\", \"select\", \"textarea\", \"button\"]\n\n if (focusableTags.indexOf(localName) >= 0) return true\n\n const others = {\n a: () => el.hasAttribute(\"href\"),\n audio: () => el.hasAttribute(\"controls\"),\n video: () => el.hasAttribute(\"controls\"),\n }\n\n if (localName in others) return others[localName as keyof typeof others]()\n\n if (isContentEditable(el)) return true\n\n return hasTabIndex(el)\n}\n\nexport const hasNegativeTabIndex = (el: HTMLElement): boolean =>\n hasTabIndex(el) && el.tabIndex === -1\n\nexport const isTabbable = (el?: HTMLElement | null): boolean =>\n el ? isHTMLElement(el) && isFocusable(el) && !hasNegativeTabIndex(el) : false\n\nexport const getOwnerWindow = (\n node?: Element | null,\n): Window & typeof globalThis => getOwnerDocument(node)?.defaultView ?? window\n\nexport const getOwnerDocument = (el?: Element | null): Document =>\n isElement(el) ? el.ownerDocument : document\n\nexport const getActiveElement = (el?: HTMLElement): HTMLElement =>\n getOwnerDocument(el).activeElement as HTMLElement\n\nexport const isActiveElement = (el: HTMLElement) => {\n return getActiveElement(el) === el\n}\n"],"mappings":"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","names":[]}
|