@thi.ng/color-palettes 0.9.9 → 1.0.2
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/CHANGELOG.md +39 -1
- package/README.md +293 -157
- package/api.d.ts +11 -0
- package/api.js +1 -0
- package/binary.d.ts +4 -0
- package/binary.js +6 -0
- package/filter.d.ts +107 -0
- package/filter.js +143 -0
- package/index.d.ts +4 -193
- package/index.js +4 -1531
- package/package.json +23 -5
- package/query.d.ts +106 -0
- package/query.js +135 -0
- package/theme.d.ts +55 -0
- package/theme.js +111 -0
- package/themes.d.ts +3 -0
- package/themes.js +24 -0
package/api.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Predicate } from "@thi.ng/api";
|
|
2
|
+
import type { LCH, SRGB } from "@thi.ng/color";
|
|
3
|
+
export type ThemeColor = number | string | LCH | SRGB;
|
|
4
|
+
export type CSSTheme = string[];
|
|
5
|
+
export type IntTheme = number[];
|
|
6
|
+
export type LCHTheme = LCH[];
|
|
7
|
+
export type RGBTheme = SRGB[];
|
|
8
|
+
export type Theme = CSSTheme | IntTheme | LCHTheme | RGBTheme;
|
|
9
|
+
export type ColorPredicate = Predicate<ThemeColor>;
|
|
10
|
+
export type ThemePredicate = Predicate<Theme>;
|
|
11
|
+
//# sourceMappingURL=api.d.ts.map
|
package/api.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/binary.d.ts
ADDED
package/binary.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// thing:no-export
|
|
2
|
+
// generated @ 20230210-233725 - DO NOT EDIT!
|
|
3
|
+
import { BASE64 } from "@thi.ng/base-n/64";
|
|
4
|
+
export const NUM_THEMES = 209;
|
|
5
|
+
/** @internal */
|
|
6
|
+
export const BINARY = BASE64.decodeBytes("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", new Uint8Array(NUM_THEMES * 18));
|
package/filter.d.ts
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import type { ColorPredicate, ThemeColor, ThemePredicate } from "./api.js";
|
|
2
|
+
/**
|
|
3
|
+
* Higher order theme filter. Takes a predicate function which will be applied
|
|
4
|
+
* to a single {@link ThemeColor}. Returns a new function which accepts a single
|
|
5
|
+
* {@link Theme} and returns true iff the given predicate succeeds for at least
|
|
6
|
+
* `threshold` colors in the theme (all colors by default).
|
|
7
|
+
*
|
|
8
|
+
* @param pred
|
|
9
|
+
* @param threshold
|
|
10
|
+
*/
|
|
11
|
+
export declare const defFilter: (pred: ColorPredicate, threshold?: number) => ThemePredicate;
|
|
12
|
+
/**
|
|
13
|
+
* Higher order theme filter. Takes a number of theme predicate (e.g. those
|
|
14
|
+
* provided by this package) and composes them into a new predicate function
|
|
15
|
+
* which only succeeds if *all* given predicates pass.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* // pre-compose combined query filter
|
|
20
|
+
* const pastels = compFilter(
|
|
21
|
+
* // require all theme colors to have max 25% chroma
|
|
22
|
+
* chroma(0, 0.25),
|
|
23
|
+
* // require at least 3 theme colors to have min 50% luma
|
|
24
|
+
* luma(0.5, 1, 3)
|
|
25
|
+
* );
|
|
26
|
+
*
|
|
27
|
+
* [...cssThemes(pastels)]
|
|
28
|
+
* // [
|
|
29
|
+
* // [ '#453f38', '#746b5d', '#b39777', '#c1c2b2', '#e3dccf', '#f1ede7' ],
|
|
30
|
+
* // [ '#857b84', '#b1a7b0', '#d0c7d0', '#e7e0e8', '#faeceb', '#e4e9fa' ]
|
|
31
|
+
* // ]
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @param filters
|
|
35
|
+
= */
|
|
36
|
+
export declare const compFilter: (...filters: ThemePredicate[]) => ThemePredicate;
|
|
37
|
+
/**
|
|
38
|
+
* Theme predicate which ensures colors are within the given normalized hue
|
|
39
|
+
* range ([0..1] interval). See {@link defFilter} for more details.
|
|
40
|
+
*
|
|
41
|
+
* @remarks
|
|
42
|
+
* Since LCH uses different hue values than the more familiar HSV/HSL color
|
|
43
|
+
* wheel, LCH colors too will be first converted to HSV to ensure uniform
|
|
44
|
+
* results.
|
|
45
|
+
*
|
|
46
|
+
* If `max < min`, the filter will consider hues in both the `[min..1] and
|
|
47
|
+
* [0..max]` intervals (i.e. angular wraparound on color wheel).
|
|
48
|
+
*
|
|
49
|
+
* @param min
|
|
50
|
+
* @param max
|
|
51
|
+
* @param threshold
|
|
52
|
+
*/
|
|
53
|
+
export declare const hue: (min: number, max: number, threshold?: number) => ThemePredicate;
|
|
54
|
+
/**
|
|
55
|
+
* Theme predicate which ensures colors are within the given normalized chroma
|
|
56
|
+
* range ([0..1] interval). See {@link defFilter} for more details.
|
|
57
|
+
*
|
|
58
|
+
* @remarks
|
|
59
|
+
* Internally converts colors to LCH (unless already the case).
|
|
60
|
+
*
|
|
61
|
+
* @param min
|
|
62
|
+
* @param max
|
|
63
|
+
* @param threshold
|
|
64
|
+
*/
|
|
65
|
+
export declare const chroma: (min: number, max: number, threshold?: number) => ThemePredicate;
|
|
66
|
+
/**
|
|
67
|
+
* Theme predicate which ensures colors are within the given normalized
|
|
68
|
+
* luminance range ([0..1] interval). See {@link defFilter} for more details.
|
|
69
|
+
*
|
|
70
|
+
* @param min
|
|
71
|
+
* @param max
|
|
72
|
+
* @param threshold
|
|
73
|
+
*/
|
|
74
|
+
export declare const luma: (min: number, max: number, threshold?: number) => ThemePredicate;
|
|
75
|
+
/**
|
|
76
|
+
* Theme predicate which ensures colors are within the given normalized distance
|
|
77
|
+
* in LCH space.
|
|
78
|
+
*
|
|
79
|
+
* @remarks
|
|
80
|
+
* Internally converts colors to LCH (unless already the case).
|
|
81
|
+
*
|
|
82
|
+
* See {@link defFilter} &
|
|
83
|
+
* [`distLch()`](https://docs.thi.ng/umbrella/color/functions/distLch.html) for
|
|
84
|
+
* more details.
|
|
85
|
+
*
|
|
86
|
+
* @param min
|
|
87
|
+
* @param max
|
|
88
|
+
* @param threshold
|
|
89
|
+
*/
|
|
90
|
+
export declare const proximityLCH: (color: ThemeColor, eps: number, threshold?: number) => ThemePredicate;
|
|
91
|
+
/**
|
|
92
|
+
* Theme predicate which ensures colors are within the given normalized distance
|
|
93
|
+
* in RGB space.
|
|
94
|
+
*
|
|
95
|
+
* @remarks
|
|
96
|
+
* Internally converts colors to sRGB (unless already the case).
|
|
97
|
+
*
|
|
98
|
+
* See {@link defFilter} &
|
|
99
|
+
* [`distEucledian3()`](https://docs.thi.ng/umbrella/color/functions/distEucledian3.html)
|
|
100
|
+
* for more details.
|
|
101
|
+
*
|
|
102
|
+
* @param min
|
|
103
|
+
* @param max
|
|
104
|
+
* @param threshold
|
|
105
|
+
*/
|
|
106
|
+
export declare const proximityRGB: (color: ThemeColor, eps: number, threshold?: number) => ThemePredicate;
|
|
107
|
+
//# sourceMappingURL=filter.d.ts.map
|
package/filter.js
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { isPrimitive } from "@thi.ng/checks/is-primitive";
|
|
2
|
+
import { distEucledian3, distLch } from "@thi.ng/color/distance";
|
|
3
|
+
import { hsv } from "@thi.ng/color/hsv/hsv";
|
|
4
|
+
import { hue as $hue } from "@thi.ng/color/hue";
|
|
5
|
+
import { lch } from "@thi.ng/color/lch/lch";
|
|
6
|
+
import { luminance } from "@thi.ng/color/luminance";
|
|
7
|
+
import { srgb } from "@thi.ng/color/srgb/srgb";
|
|
8
|
+
/**
|
|
9
|
+
* Higher order theme filter. Takes a predicate function which will be applied
|
|
10
|
+
* to a single {@link ThemeColor}. Returns a new function which accepts a single
|
|
11
|
+
* {@link Theme} and returns true iff the given predicate succeeds for at least
|
|
12
|
+
* `threshold` colors in the theme (all colors by default).
|
|
13
|
+
*
|
|
14
|
+
* @param pred
|
|
15
|
+
* @param threshold
|
|
16
|
+
*/
|
|
17
|
+
export const defFilter = (pred, threshold) => (theme) => {
|
|
18
|
+
const $thresh = threshold ?? theme.length;
|
|
19
|
+
for (let i = theme.length, n = 0; i-- > 0;) {
|
|
20
|
+
if (pred(theme[i])) {
|
|
21
|
+
if (++n >= $thresh)
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return false;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Higher order theme filter. Takes a number of theme predicate (e.g. those
|
|
29
|
+
* provided by this package) and composes them into a new predicate function
|
|
30
|
+
* which only succeeds if *all* given predicates pass.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```ts
|
|
34
|
+
* // pre-compose combined query filter
|
|
35
|
+
* const pastels = compFilter(
|
|
36
|
+
* // require all theme colors to have max 25% chroma
|
|
37
|
+
* chroma(0, 0.25),
|
|
38
|
+
* // require at least 3 theme colors to have min 50% luma
|
|
39
|
+
* luma(0.5, 1, 3)
|
|
40
|
+
* );
|
|
41
|
+
*
|
|
42
|
+
* [...cssThemes(pastels)]
|
|
43
|
+
* // [
|
|
44
|
+
* // [ '#453f38', '#746b5d', '#b39777', '#c1c2b2', '#e3dccf', '#f1ede7' ],
|
|
45
|
+
* // [ '#857b84', '#b1a7b0', '#d0c7d0', '#e7e0e8', '#faeceb', '#e4e9fa' ]
|
|
46
|
+
* // ]
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
49
|
+
* @param filters
|
|
50
|
+
= */
|
|
51
|
+
export const compFilter = (...filters) => filters.length > 1
|
|
52
|
+
? (theme) => filters.every((f) => f(theme))
|
|
53
|
+
: (theme) => filters[0](theme);
|
|
54
|
+
/**
|
|
55
|
+
* Theme predicate which ensures colors are within the given normalized hue
|
|
56
|
+
* range ([0..1] interval). See {@link defFilter} for more details.
|
|
57
|
+
*
|
|
58
|
+
* @remarks
|
|
59
|
+
* Since LCH uses different hue values than the more familiar HSV/HSL color
|
|
60
|
+
* wheel, LCH colors too will be first converted to HSV to ensure uniform
|
|
61
|
+
* results.
|
|
62
|
+
*
|
|
63
|
+
* If `max < min`, the filter will consider hues in both the `[min..1] and
|
|
64
|
+
* [0..max]` intervals (i.e. angular wraparound on color wheel).
|
|
65
|
+
*
|
|
66
|
+
* @param min
|
|
67
|
+
* @param max
|
|
68
|
+
* @param threshold
|
|
69
|
+
*/
|
|
70
|
+
export const hue = (min, max, threshold) => defFilter((col) => {
|
|
71
|
+
let h = $hue(isPrimitive(col) ? hsv(col) : col);
|
|
72
|
+
h = h - Math.floor(h);
|
|
73
|
+
return min <= max ? h >= min && h <= max : h >= min || h <= max;
|
|
74
|
+
}, threshold);
|
|
75
|
+
/**
|
|
76
|
+
* Theme predicate which ensures colors are within the given normalized chroma
|
|
77
|
+
* range ([0..1] interval). See {@link defFilter} for more details.
|
|
78
|
+
*
|
|
79
|
+
* @remarks
|
|
80
|
+
* Internally converts colors to LCH (unless already the case).
|
|
81
|
+
*
|
|
82
|
+
* @param min
|
|
83
|
+
* @param max
|
|
84
|
+
* @param threshold
|
|
85
|
+
*/
|
|
86
|
+
export const chroma = (min, max, threshold) => defFilter((col) => {
|
|
87
|
+
const sat = __isLCH(col) ? col[1] : lch(col)[1];
|
|
88
|
+
return sat >= min && sat <= max;
|
|
89
|
+
}, threshold);
|
|
90
|
+
/**
|
|
91
|
+
* Theme predicate which ensures colors are within the given normalized
|
|
92
|
+
* luminance range ([0..1] interval). See {@link defFilter} for more details.
|
|
93
|
+
*
|
|
94
|
+
* @param min
|
|
95
|
+
* @param max
|
|
96
|
+
* @param threshold
|
|
97
|
+
*/
|
|
98
|
+
export const luma = (min, max, threshold) => defFilter((col) => {
|
|
99
|
+
const l = luminance(col);
|
|
100
|
+
return l >= min && l <= max;
|
|
101
|
+
}, threshold);
|
|
102
|
+
/**
|
|
103
|
+
* Theme predicate which ensures colors are within the given normalized distance
|
|
104
|
+
* in LCH space.
|
|
105
|
+
*
|
|
106
|
+
* @remarks
|
|
107
|
+
* Internally converts colors to LCH (unless already the case).
|
|
108
|
+
*
|
|
109
|
+
* See {@link defFilter} &
|
|
110
|
+
* [`distLch()`](https://docs.thi.ng/umbrella/color/functions/distLch.html) for
|
|
111
|
+
* more details.
|
|
112
|
+
*
|
|
113
|
+
* @param min
|
|
114
|
+
* @param max
|
|
115
|
+
* @param threshold
|
|
116
|
+
*/
|
|
117
|
+
export const proximityLCH = (color, eps, threshold) => {
|
|
118
|
+
const $color = __isLCH(color) ? color : lch(color);
|
|
119
|
+
return defFilter((x) => distLch($color, __isLCH(x) ? x : lch(x)) < eps, threshold);
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* Theme predicate which ensures colors are within the given normalized distance
|
|
123
|
+
* in RGB space.
|
|
124
|
+
*
|
|
125
|
+
* @remarks
|
|
126
|
+
* Internally converts colors to sRGB (unless already the case).
|
|
127
|
+
*
|
|
128
|
+
* See {@link defFilter} &
|
|
129
|
+
* [`distEucledian3()`](https://docs.thi.ng/umbrella/color/functions/distEucledian3.html)
|
|
130
|
+
* for more details.
|
|
131
|
+
*
|
|
132
|
+
* @param min
|
|
133
|
+
* @param max
|
|
134
|
+
* @param threshold
|
|
135
|
+
*/
|
|
136
|
+
export const proximityRGB = (color, eps, threshold) => {
|
|
137
|
+
const $color = __isRGB(color) ? color : srgb(color);
|
|
138
|
+
return defFilter((x) => distEucledian3($color, __isRGB(x) ? x : srgb(x)) < eps, threshold);
|
|
139
|
+
};
|
|
140
|
+
/** @internal */
|
|
141
|
+
const __isLCH = (x) => !isPrimitive(x) && x.mode === "lch";
|
|
142
|
+
/** @internal */
|
|
143
|
+
const __isRGB = (x) => !isPrimitive(x) && x.mode === "srgb";
|
package/index.d.ts
CHANGED
|
@@ -1,194 +1,5 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
"00OwGARqASN2zngyg": string[];
|
|
6
|
-
"00PBWZvgJvi4gdxGj": string[];
|
|
7
|
-
"00PhEgF9AlI5PTrLB": string[];
|
|
8
|
-
"00PhGSfzpeU5Bkh47a": string[];
|
|
9
|
-
"00Q9Yxm7DrZXqTkyS": string[];
|
|
10
|
-
"00QLNHv6JW1bL031O": string[];
|
|
11
|
-
"00QLNIKFhjs5rJCjr": string[];
|
|
12
|
-
"00QLNIQXmbJgghRXg": string[];
|
|
13
|
-
"00QLNIVe1AkurVqYj": string[];
|
|
14
|
-
"00QLcP0k2fPAz0KHR": string[];
|
|
15
|
-
"00QLfPj2trTnyJHAg": string[];
|
|
16
|
-
"00QLfPkuNx1jE7sMm": string[];
|
|
17
|
-
"00QLfPm4UfkMiaicq": string[];
|
|
18
|
-
"00QLfPtu33OAdSN4Y": string[];
|
|
19
|
-
"00QLfPusSpy3uFOpb": string[];
|
|
20
|
-
"00QLj3F8heV6QT4YG": string[];
|
|
21
|
-
"00QLj3PylHkh8qY2R": string[];
|
|
22
|
-
"00QLj3Yj1pUNnTKVY": string[];
|
|
23
|
-
"00QLj3dmHiT8Ep1Un": string[];
|
|
24
|
-
"00QLj3fsFErIl5W0b": string[];
|
|
25
|
-
"00QLn7BH2doQfh4Yw": string[];
|
|
26
|
-
"00QLn7G59JhKtuUs0": string[];
|
|
27
|
-
"00QLn7Lr9V98YD0zY": string[];
|
|
28
|
-
"00QLn7XfPKvMKCrzO": string[];
|
|
29
|
-
"00QLn7oETUQZKKr34": string[];
|
|
30
|
-
"00QLqYLjs4H7kdHrp": string[];
|
|
31
|
-
"00QLqYQ3HE1oy3ByI": string[];
|
|
32
|
-
"00QLqYS2ZOgkMeMAE": string[];
|
|
33
|
-
"00QLslJAGNA8YREKh": string[];
|
|
34
|
-
"00QMA8RhpXdgwPtLn": string[];
|
|
35
|
-
"00QMA8SkIwjW5KEch": string[];
|
|
36
|
-
"00QMA8h2BH69zyEk0": string[];
|
|
37
|
-
"00QMA8tedClukB7IL": string[];
|
|
38
|
-
"00QMEZVdDC6dMYpjp": string[];
|
|
39
|
-
"00QMEZazmZG85DaWw": string[];
|
|
40
|
-
"00QMEZb0EorAC0k7y": string[];
|
|
41
|
-
"00QMEZgMsSVZavaNd": string[];
|
|
42
|
-
"00QMEZl7ulP3f2WaX": string[];
|
|
43
|
-
"00QMEZzTrk06iVgaK": string[];
|
|
44
|
-
"00QMKP9yh8XlJYcgM": string[];
|
|
45
|
-
"00QMSRoDq0SDYprak": string[];
|
|
46
|
-
"00QMSRqFlj9B8ayZW": string[];
|
|
47
|
-
"00QMSSCjsJpojbpYz": string[];
|
|
48
|
-
"00QMSSCjsJpojbpYza": string[];
|
|
49
|
-
"00QMSSEJXJOUdMoSj": string[];
|
|
50
|
-
"00QMSSK2AEOwErS5M": string[];
|
|
51
|
-
"00QMSSK2AEOwErS5Ma": string[];
|
|
52
|
-
"00QMxescYuh8eYT39": string[];
|
|
53
|
-
"00QMxexuJYMe6enbZ": string[];
|
|
54
|
-
"00QN31G5AB2FTftCe": string[];
|
|
55
|
-
"00QN49h9BAkHHyKJh": string[];
|
|
56
|
-
"00RB4I684QFqc2HAM": string[];
|
|
57
|
-
"00RB4I6NRn6CF3oS0": string[];
|
|
58
|
-
"00RB4I89XiwNSlobH": string[];
|
|
59
|
-
"00RB4IFxoIYII3Cqi": string[];
|
|
60
|
-
"00RGly9mkWt6i3suL": string[];
|
|
61
|
-
"00RGly9mkWt6i3suLa": string[];
|
|
62
|
-
"00RGlyFVinQl5cj21": string[];
|
|
63
|
-
"00RGlyJwY9q4Sh0tQ": string[];
|
|
64
|
-
"00RGlyLkqOmPmbuX6": string[];
|
|
65
|
-
"00RTRDAqmTEarmyeR": string[];
|
|
66
|
-
"00RTRDIRDbnErAXHV": string[];
|
|
67
|
-
"00RTRDIzyUse2qJ9N": string[];
|
|
68
|
-
"00RTRDNL7MjHkDys4": string[];
|
|
69
|
-
"00RTRDOtbFF8KFNH9": string[];
|
|
70
|
-
"00RYyJ25i8zFwOJGh": string[];
|
|
71
|
-
"00RYyJ4jHYfMF6yfy": string[];
|
|
72
|
-
"00RYyJDsTKzsBBgCO": string[];
|
|
73
|
-
"00RlTJrw94KFOF3zL": string[];
|
|
74
|
-
"00RlTJxJZ16ivgKBw": string[];
|
|
75
|
-
"00RnZfzWN7Ewml76I": string[];
|
|
76
|
-
"00T2A6qx5VScIQ9bU": string[];
|
|
77
|
-
"00UWNvBioJ6ZSjDix": string[];
|
|
78
|
-
"00UWNvEkTsOF0aQHh": string[];
|
|
79
|
-
"00Yi9btvr8RY4NROm": string[];
|
|
80
|
-
"00Yi9c5ifk9eXO5XX": string[];
|
|
81
|
-
"00YxFeFYOuMCD0qWe": string[];
|
|
82
|
-
"00b7Az8pDWEjBLMHs": string[];
|
|
83
|
-
"00bYah8QOLZNgszuV": string[];
|
|
84
|
-
"00bYahDYU6E7wDJwL": string[];
|
|
85
|
-
"00bYahKZ8LbVgx54y": string[];
|
|
86
|
-
"00bYcivY8Jqx8nsiR": string[];
|
|
87
|
-
"00bYcixZkofJhLJ8w": string[];
|
|
88
|
-
"00bYcj0VC9wmmKNm5": string[];
|
|
89
|
-
"00bYcj4uvi0NIlqyw": string[];
|
|
90
|
-
"00bYcjDCylnf3k1aB": string[];
|
|
91
|
-
"00bYiYyzA6ODPIC8V": string[];
|
|
92
|
-
"00bYiZ8YHLsLMA7j3": string[];
|
|
93
|
-
"00f5whlJFUwx7AaEe": string[];
|
|
94
|
-
"00g3Jv9zydyJs2QlX": string[];
|
|
95
|
-
"00g3JvJ0ZydpXXvEC": string[];
|
|
96
|
-
"00gSFutQrW4MxihX7": string[];
|
|
97
|
-
"00i0fT276sz5H8vMy": string[];
|
|
98
|
-
"00i0iHNQPUpX6Jzsb": string[];
|
|
99
|
-
"00i0iHUSVMHOENQof": string[];
|
|
100
|
-
"00i0iHWHzzEoacpfQ": string[];
|
|
101
|
-
"00i0iHXq6xPzf1pt0": string[];
|
|
102
|
-
"00iGNImQqINC9iQ1D": string[];
|
|
103
|
-
"00iGNInM4y8vS5Aon": string[];
|
|
104
|
-
"00qAPJWAuZtV1JQeL": string[];
|
|
105
|
-
"00qAPJlU7mDXqCkiN": string[];
|
|
106
|
-
"00qAPJU0vXnWXxf1k": string[];
|
|
107
|
-
"00qAPJp5JxBfA0TbH": string[];
|
|
108
|
-
"00qAPJgQvoDkRkQTN": string[];
|
|
109
|
-
"00qAPJgiiIyY8shVo": string[];
|
|
110
|
-
"00qAZjyY6S1ycz77W": string[];
|
|
111
|
-
"00qAZjzBDFZPMdKr3": string[];
|
|
112
|
-
"00qAZjpCY9A2fnaKR": string[];
|
|
113
|
-
"00qAZjs8gQNFggT0M": string[];
|
|
114
|
-
"00qAZk070SYGij58C": string[];
|
|
115
|
-
"00qAgiXIRZqDXJsI8": string[];
|
|
116
|
-
"00qHifB285rfalpIo": string[];
|
|
117
|
-
"00qHkUndEk4MzLo6H": string[];
|
|
118
|
-
"00qHekhPJJlwTDcMi": string[];
|
|
119
|
-
"00qHekwxmgUGlfAWi": string[];
|
|
120
|
-
"00qHo5P8w5tq00yLM": string[];
|
|
121
|
-
"00qHekwhYwYf6QJGD": string[];
|
|
122
|
-
"00qHxct5IvpT7kl9p": string[];
|
|
123
|
-
"00qHzDGNbubSeZXrS": string[];
|
|
124
|
-
"00QMA8iIbk7Biajay": string[];
|
|
125
|
-
"00QMxewR6IS5vyatN": string[];
|
|
126
|
-
"00QMEZhEMNGnZZxL4": string[];
|
|
127
|
-
"00QMEZSYbyUNt0041": string[];
|
|
128
|
-
"00qIEl4NwoLkiinhc": string[];
|
|
129
|
-
"00qIG1KwWOlIJkB81": string[];
|
|
130
|
-
"00qIIS5LLApenMByv": string[];
|
|
131
|
-
"00qILiVShgC82zOHm": string[];
|
|
132
|
-
"00qIPBCHil9FW2idX": string[];
|
|
133
|
-
"00qIR1FROo31bNduE": string[];
|
|
134
|
-
"00sz5Uxo4ByGDH6tQ": string[];
|
|
135
|
-
"00sz7CFkl88HCRtUW": string[];
|
|
136
|
-
"00sz9mhhmiZmgR9r6": string[];
|
|
137
|
-
"00t03UwzLJ4HO8u5o": string[];
|
|
138
|
-
"00tAmMznURg0qH4jp": string[];
|
|
139
|
-
"00tAnftt5xsJlMhDZ": string[];
|
|
140
|
-
"00tAq6qSD1erL65L8": string[];
|
|
141
|
-
"00tAsz6uflx4ciwdA": string[];
|
|
142
|
-
"00tAuOG3R9ivBX2gO": string[];
|
|
143
|
-
"00tAvqx4Pm26XfKhx": string[];
|
|
144
|
-
"00uKBokFLvI0Epxqx": string[];
|
|
145
|
-
"00uOogzjozpSchnrp": string[];
|
|
146
|
-
"00uOqryM4SOXgd7S0": string[];
|
|
147
|
-
"00uOuzh5czMDF0xUE": string[];
|
|
148
|
-
"00uP6PKyOf1h08rEq": string[];
|
|
149
|
-
"00uPLAKIHr3vJ0xUB": string[];
|
|
150
|
-
"00uPN5nCkNSzg7ri4": string[];
|
|
151
|
-
"00uPNyZwgGQhZDUaQ": string[];
|
|
152
|
-
"013j2ZZYIvwFGp4yL": string[];
|
|
153
|
-
"013j3Yj2Vj9r3oaql": string[];
|
|
154
|
-
"014c40MQuHMbjhkDu": string[];
|
|
155
|
-
"014c5Q2Qc8D1tNdAn": string[];
|
|
156
|
-
"014c6avJ50DRl2NSK": string[];
|
|
157
|
-
"014c7dTQjU2TA8F68": string[];
|
|
158
|
-
"014c8uRpFlkiHSo9k": string[];
|
|
159
|
-
"014cACEjxmYUHo9fx": string[];
|
|
160
|
-
"014cBhci3KKThfPSX": string[];
|
|
161
|
-
"014cCBZzmDcqRiRMv": string[];
|
|
162
|
-
"014cMCdTh3bwH8wVB": string[];
|
|
163
|
-
"014cNjiiOwqOhSKJS": string[];
|
|
164
|
-
"014qFZbOZZ3YOqfdS": string[];
|
|
165
|
-
"014r4557GBXovXsQ2": string[];
|
|
166
|
-
"014r6uHUtjyoZvMXw": string[];
|
|
167
|
-
"014rzaZCKrmbLLuJu": string[];
|
|
168
|
-
"014whoAyxl5gzJwC1": string[];
|
|
169
|
-
"014wjGaMtVyXGNzL6": string[];
|
|
170
|
-
"014wjKhdj0Me4MQvc": string[];
|
|
171
|
-
"014wkzZloB6Lgkluy": string[];
|
|
172
|
-
"014wmwCkvNXm2qCVW": string[];
|
|
173
|
-
"014wozXMrzwiMiM3x": string[];
|
|
174
|
-
"014wxZ7JcSYlbNfxL": string[];
|
|
175
|
-
"014xmJC3rdNVkG5Ke": string[];
|
|
176
|
-
"014xtY7NR86Aa2AMH": string[];
|
|
177
|
-
"014xxHPGJc41M07kL": string[];
|
|
178
|
-
"01JRj8i3GGuAAEJxq": string[];
|
|
179
|
-
"01JS985gPc7dJr9yc": string[];
|
|
180
|
-
"01JS99srr00rT1RGY": string[];
|
|
181
|
-
"01T6JTdvDYPRzU53r": string[];
|
|
182
|
-
"01T6JVh6fxawfDfX7": string[];
|
|
183
|
-
"01T6JXf2JiH7Jkcyw": string[];
|
|
184
|
-
"01T6K5P88nJ7uMrxc": string[];
|
|
185
|
-
"01T6K7LKJRtcnKpGT": string[];
|
|
186
|
-
"01T6KRy68QRQVEttM": string[];
|
|
187
|
-
"01T6KyfrH6tK8P20p": string[];
|
|
188
|
-
"01T6L3dZicPLMu6SY": string[];
|
|
189
|
-
"01T6L5udXQGvDAfxj": string[];
|
|
190
|
-
"01T6LubuzRHjlD6q3": string[];
|
|
191
|
-
"01T6Ofvb7MIeMSQvq": string[];
|
|
192
|
-
"01T6P3fjzDsqiiIPd": string[];
|
|
193
|
-
};
|
|
1
|
+
export * from "./api.js";
|
|
2
|
+
export * from "./binary.js";
|
|
3
|
+
export * from "./filter.js";
|
|
4
|
+
export * from "./theme.js";
|
|
194
5
|
//# sourceMappingURL=index.d.ts.map
|