@charcoal-ui/utils 2.4.0 → 2.6.0

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/index.cjs DELETED
@@ -1,277 +0,0 @@
1
- var polished = require('polished');
2
-
3
- var GRADIENT_DIRECTIONS = ['to top', 'to bottom', 'to left', 'to right'];
4
- function transparentGradient(color, defaultDirection) {
5
- if (defaultDirection === void 0) {
6
- defaultDirection = 'to bottom';
7
- }
8
-
9
- return function transparentGradient(direction) {
10
- if (direction === void 0) {
11
- direction = defaultDirection;
12
- }
13
-
14
- var transparent = polished.rgba(color, 0);
15
- return polished.linearGradient({
16
- colorStops: [color, transparent],
17
- fallback: transparent,
18
- toDirection: typeof direction === 'object' ? defaultDirection : direction
19
- });
20
- };
21
- }
22
- function gradient(toDirection) {
23
- if (toDirection === void 0) {
24
- toDirection = 'to bottom';
25
- }
26
-
27
- return function toLinearGradient(value) {
28
- var _value$;
29
-
30
- return polished.linearGradient({
31
- colorStops: value.map(function (_ref) {
32
- var color = _ref.color,
33
- ratio = _ref.ratio;
34
- return color + " " + ratio + "%";
35
- }),
36
- fallback: (_value$ = value[0]) == null ? void 0 : _value$.color,
37
- toDirection: toDirection
38
- });
39
- };
40
- }
41
- function applyEffectToGradient(effect) {
42
- return function toGradient(value) {
43
- return value.map(function (_ref2) {
44
- var color = _ref2.color,
45
- ratio = _ref2.ratio;
46
- return {
47
- color: applyEffect(color, effect),
48
- ratio: ratio
49
- };
50
- });
51
- };
52
- }
53
- function applyEffect(baseColor, effects) {
54
- var color = baseColor != null ? baseColor : '#00000000';
55
-
56
- if (Array.isArray(effects)) {
57
- return effects.reduce(applySingleEffect, color);
58
- }
59
-
60
- return applySingleEffect(color, effects);
61
- }
62
-
63
- function applySingleEffect(baseColor, effect) {
64
- switch (effect.type) {
65
- case 'alpha':
66
- return applyAlpha(baseColor, effect);
67
-
68
- case 'opacity':
69
- return applyOpacity(baseColor, effect);
70
-
71
- case 'replace':
72
- return applyReplace(baseColor, effect);
73
-
74
- default:
75
- throw new RangeError("Unknown effect type " + effect.type + ", upgrade @charcoal-ui/utils");
76
- }
77
- }
78
-
79
- function applyAlpha(baseColor, _ref3) {
80
- var _base$alpha, _effect$alpha;
81
-
82
- var color = _ref3.color,
83
- opacity = _ref3.opacity;
84
- var base = polished.parseToRgb(baseColor);
85
- var effect = polished.parseToRgb(color);
86
- var src = [base.red, base.green, base.blue, (_base$alpha = base.alpha) != null ? _base$alpha : 1.0];
87
- var dst = [effect.red, effect.green, effect.blue, clamp(0, 1, ((_effect$alpha = effect.alpha) != null ? _effect$alpha : 1.0) * (opacity != null ? opacity : 1.0))];
88
- return polished.rgba.apply(void 0, alphaBlend(src, dst));
89
- }
90
-
91
- function applyOpacity(baseColor, _ref4) {
92
- var _parsed$alpha;
93
-
94
- var opacity = _ref4.opacity;
95
- var parsed = polished.parseToRgb(baseColor);
96
- parsed.alpha = clamp(0, 1, ((_parsed$alpha = parsed.alpha) != null ? _parsed$alpha : 1.0) * opacity);
97
- return polished.rgbToColorString(parsed);
98
- }
99
-
100
- function applyReplace(baseColor, _ref5) {
101
- var _ref5$color = _ref5.color,
102
- color = _ref5$color === void 0 ? baseColor : _ref5$color,
103
- opacity = _ref5.opacity;
104
-
105
- if (opacity === undefined) {
106
- return color;
107
- }
108
-
109
- var parsed = polished.parseToRgb(color); // NOTE: intentionally ignores any alpha value in the baseColor
110
-
111
- parsed.alpha = opacity;
112
- return polished.rgbToColorString(parsed);
113
- }
114
- /**
115
- * NOTE: alpha component must be in range from 0.0 to 1.0. (0.0 represents a fully transparent)
116
- *
117
- * @param src `[r, g, b, alpha]` Background
118
- * @param dst `[r, g, b, alpha]` Foreground
119
- */
120
-
121
-
122
- function alphaBlend(src, dst) {
123
- var srcA = src[3];
124
- var dstA = dst[3];
125
- var outA = srcA + dstA * (1 - srcA);
126
-
127
- if (outA < EPS) {
128
- // blending 0% alpha with 0% alpha
129
- return [0, 0, 0, 0];
130
- }
131
-
132
- return [Math.round((src[0] * srcA * (1 - dstA) + dst[0] * dstA) / outA), Math.round((src[1] * srcA * (1 - dstA) + dst[1] * dstA) / outA), Math.round((src[2] * srcA * (1 - dstA) + dst[2] * dstA) / outA), outA];
133
- }
134
-
135
- var EPS = 1e-6;
136
-
137
- function clamp(min, max, value) {
138
- return Math.min(Math.max(value, min), max);
139
- }
140
- /**
141
- * affix `px` unit
142
- *
143
- * @param value pixel
144
- */
145
-
146
-
147
- function px(value) {
148
- return value + "px";
149
- }
150
- /**
151
- * affix `s` unit
152
- *
153
- * @param value second
154
- */
155
-
156
- function dur(value) {
157
- return value + "s";
158
- }
159
- var notDisabledSelector = "&:not(:disabled):not([aria-disabled]), &[aria-disabled=false]";
160
- var disabledSelector = "&:disabled, &[aria-disabled]:not([aria-disabled=false])";
161
- /**
162
- * Construct media query from breakpoint
163
- */
164
-
165
- function maxWidth(breakpoint) {
166
- return "(max-width: " + (breakpoint - 1) + "px)";
167
- }
168
- /**
169
- * Derive half-leading from typography size
170
- */
171
-
172
- var halfLeading = function halfLeading(_ref6) {
173
- var fontSize = _ref6.fontSize,
174
- lineHeight = _ref6.lineHeight;
175
- return (lineHeight - fontSize) / 2;
176
- };
177
- /**
178
- * Namespaced custom property
179
- */
180
-
181
- var customPropertyToken = function customPropertyToken(id, modifiers) {
182
- if (modifiers === void 0) {
183
- modifiers = [];
184
- }
185
-
186
- return "--charcoal-" + id + (modifiers.length === 0 ? '' : ['', modifiers].join('-'));
187
- };
188
- /**
189
- * @example
190
- * ```js
191
- * mapKeys({ a: 'aa', b: 'bb' }, (key) => key.toUpperCase()) // => { A: "aa", B: "bb" }
192
- * ````
193
- */
194
-
195
- function mapKeys(object, callback) {
196
- return Object.fromEntries(Object.entries(object).map(function (_ref7) {
197
- var key = _ref7[0],
198
- value = _ref7[1];
199
- return [callback(key), value];
200
- }));
201
- }
202
- /**
203
- * @example
204
- * ```js
205
- * mapObject({ a: 'aa', b: 'bb', c: 'cc' }, (key, value) =>
206
- * key === 'b' ? undefined : [key + '1', value.toUpperCase()]
207
- * ) // => { a1: "AA", c1: "CC" }
208
- * ```
209
- */
210
-
211
- function mapObject(source, callback) {
212
- return Object.fromEntries(Object.entries(source).flatMap(function (_ref8) {
213
- var key = _ref8[0],
214
- value = _ref8[1];
215
- var entry = callback(key, value);
216
-
217
- if (entry) {
218
- return [entry];
219
- } else {
220
- return [];
221
- }
222
- }));
223
- }
224
- /**
225
- * @example
226
- * ```js
227
- * flatMapObject({ a: 'aa', b: 'bb' }, (key, value) => [
228
- * [key + '1', value + '1'],
229
- * [key + '2', value + '2'],
230
- * ]) // => { a1: "aa1", a2: "aa2", b1: "bb1", b2: "bb2" }
231
- * ```
232
- */
233
-
234
- function flatMapObject(source, callback) {
235
- return Object.fromEntries(Object.entries(source).flatMap(function (_ref9) {
236
- var key = _ref9[0],
237
- value = _ref9[1];
238
- return callback(key, value);
239
- }));
240
- }
241
- /**
242
- * @example
243
- * ```ts
244
- * filterObject(
245
- * { a: 'aa', b: 'bb', c: 'cc' },
246
- * (value): value is string => value !== 'bb'
247
- * ) // => { a: "aa", c: "cc" }
248
- * ```
249
- */
250
-
251
- function filterObject(source, fn) {
252
- return mapObject(source, function (key, value) {
253
- if (fn(value) === true) {
254
- return [key, value];
255
- } else {
256
- return null;
257
- }
258
- });
259
- }
260
-
261
- exports.GRADIENT_DIRECTIONS = GRADIENT_DIRECTIONS;
262
- exports.applyEffect = applyEffect;
263
- exports.applyEffectToGradient = applyEffectToGradient;
264
- exports.customPropertyToken = customPropertyToken;
265
- exports.disabledSelector = disabledSelector;
266
- exports.dur = dur;
267
- exports.filterObject = filterObject;
268
- exports.flatMapObject = flatMapObject;
269
- exports.gradient = gradient;
270
- exports.halfLeading = halfLeading;
271
- exports.mapKeys = mapKeys;
272
- exports.mapObject = mapObject;
273
- exports.maxWidth = maxWidth;
274
- exports.notDisabledSelector = notDisabledSelector;
275
- exports.px = px;
276
- exports.transparentGradient = transparentGradient;
277
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import { linearGradient, parseToRgb, rgba, rgbToColorString } from 'polished'\nimport { RgbColor } from 'polished/lib/types/color'\n\nimport {\n type AlphaEffect,\n type Effect,\n type Effects,\n type GradientMaterial,\n type OpacityEffect,\n type ReplaceEffect,\n type TypographyDescriptor,\n} from '@charcoal-ui/foundation'\n\nexport const GRADIENT_DIRECTIONS = [\n 'to top',\n 'to bottom',\n 'to left',\n 'to right',\n] as const\n\nexport type GradientDirection = typeof GRADIENT_DIRECTIONS[number]\n\nexport function transparentGradient(\n color: string,\n defaultDirection: GradientDirection = 'to bottom'\n) {\n return function transparentGradient(\n direction: GradientDirection | object = defaultDirection\n ) {\n const transparent = rgba(color, 0)\n return linearGradient({\n colorStops: [color, transparent],\n fallback: transparent,\n toDirection: typeof direction === 'object' ? defaultDirection : direction,\n })\n }\n}\n\nexport function gradient(toDirection: GradientDirection = 'to bottom') {\n return function toLinearGradient(value: GradientMaterial) {\n return linearGradient({\n colorStops: value.map(({ color, ratio }) => `${color} ${ratio}%`),\n fallback: value[0]?.color,\n toDirection,\n })\n }\n}\n\nexport function applyEffectToGradient(effect: Effects) {\n return function toGradient(value: GradientMaterial): GradientMaterial {\n return value.map(({ color, ratio }) => ({\n color: applyEffect(color, effect),\n ratio,\n }))\n }\n}\n\ninterface RgbaColor extends RgbColor {\n alpha?: number\n}\n\ninterface ReadonlyArrayConstructor {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n isArray(value: any): value is readonly any[]\n}\n\nexport function applyEffect(\n baseColor: string | null,\n effects: Effects\n): string {\n const color = baseColor ?? '#00000000'\n if ((Array as ReadonlyArrayConstructor).isArray(effects)) {\n return effects.reduce(applySingleEffect, color)\n }\n return applySingleEffect(color, effects)\n}\n\nfunction applySingleEffect(baseColor: string, effect: Effect): string {\n switch (effect.type) {\n case 'alpha':\n return applyAlpha(baseColor, effect)\n case 'opacity':\n return applyOpacity(baseColor, effect)\n case 'replace':\n return applyReplace(baseColor, effect)\n default:\n throw new RangeError(\n `Unknown effect type ${\n (effect as Effect).type\n }, upgrade @charcoal-ui/utils`\n )\n }\n}\n\nfunction applyAlpha(baseColor: string, { color, opacity }: AlphaEffect) {\n const base: RgbaColor = parseToRgb(baseColor)\n const effect: RgbaColor = parseToRgb(color)\n const src = [base.red, base.green, base.blue, base.alpha ?? 1.0] as const\n const dst = [\n effect.red,\n effect.green,\n effect.blue,\n clamp(0, 1, (effect.alpha ?? 1.0) * (opacity ?? 1.0)),\n ] as const\n return rgba(...alphaBlend(src, dst))\n}\n\nfunction applyOpacity(baseColor: string, { opacity }: OpacityEffect) {\n const parsed: RgbaColor = parseToRgb(baseColor)\n parsed.alpha = clamp(0, 1, (parsed.alpha ?? 1.0) * opacity)\n return rgbToColorString(parsed)\n}\n\nfunction applyReplace(\n baseColor: string,\n { color = baseColor, opacity }: ReplaceEffect\n) {\n if (opacity === undefined) {\n return color\n }\n const parsed: RgbaColor = parseToRgb(color)\n // NOTE: intentionally ignores any alpha value in the baseColor\n parsed.alpha = opacity\n return rgbToColorString(parsed)\n}\n\ntype Color4 = readonly [number, number, number, number]\n\n/**\n * NOTE: alpha component must be in range from 0.0 to 1.0. (0.0 represents a fully transparent)\n *\n * @param src `[r, g, b, alpha]` Background\n * @param dst `[r, g, b, alpha]` Foreground\n */\nfunction alphaBlend(src: Color4, dst: Color4): Color4 {\n const srcA = src[3]\n const dstA = dst[3]\n const outA = srcA + dstA * (1 - srcA)\n if (outA < EPS) {\n // blending 0% alpha with 0% alpha\n return [0, 0, 0, 0]\n }\n return [\n Math.round((src[0] * srcA * (1 - dstA) + dst[0] * dstA) / outA),\n Math.round((src[1] * srcA * (1 - dstA) + dst[1] * dstA) / outA),\n Math.round((src[2] * srcA * (1 - dstA) + dst[2] * dstA) / outA),\n outA,\n ]\n}\nconst EPS = 1e-6\n\nfunction clamp(min: number, max: number, value: number) {\n return Math.min(Math.max(value, min), max)\n}\n\n/**\n * affix `px` unit\n *\n * @param value pixel\n */\nexport function px(value: number) {\n return `${value}px`\n}\n\n/**\n * affix `s` unit\n *\n * @param value second\n */\nexport function dur(value: number) {\n return `${value}s`\n}\n\nexport const notDisabledSelector = `&:not(:disabled):not([aria-disabled]), &[aria-disabled=false]`\n\nexport const disabledSelector = `&:disabled, &[aria-disabled]:not([aria-disabled=false])`\n\n/**\n * Construct media query from breakpoint\n */\nexport function maxWidth(breakpoint: number) {\n return `(max-width: ${breakpoint - 1}px)`\n}\n\n/**\n * Derive half-leading from typography size\n */\nexport const halfLeading = ({ fontSize, lineHeight }: TypographyDescriptor) =>\n (lineHeight - fontSize) / 2\n\n/**\n * Namespaced custom property\n */\nexport const customPropertyToken = (\n id: string,\n modifiers: readonly string[] = []\n): `--charcoal-${string}` =>\n `--charcoal-${id}${modifiers.length === 0 ? '' : ['', modifiers].join('-')}`\n\n/**\n * @example\n * ```js\n * mapKeys({ a: 'aa', b: 'bb' }, (key) => key.toUpperCase()) // => { A: \"aa\", B: \"bb\" }\n * ````\n */\nexport function mapKeys<V, K extends string>(\n object: Record<string, V>,\n callback: (key: string) => K\n) {\n return Object.fromEntries(\n Object.entries(object).map(([key, value]) => [callback(key), value])\n ) as Record<K, V>\n}\n\n/**\n * @example\n * ```js\n * mapObject({ a: 'aa', b: 'bb', c: 'cc' }, (key, value) =>\n * key === 'b' ? undefined : [key + '1', value.toUpperCase()]\n * ) // => { a1: \"AA\", c1: \"CC\" }\n * ```\n */\nexport function mapObject<\n SourceKey extends string,\n SourceValue,\n DestKey extends string,\n DestValue\n>(\n source: Record<SourceKey, SourceValue>,\n callback: (\n key: SourceKey,\n value: SourceValue\n ) => [DestKey, DestValue] | null | undefined\n) {\n return Object.fromEntries(\n Object.entries(source).flatMap(([key, value]) => {\n const entry = callback(key as SourceKey, value as SourceValue)\n if (entry) {\n return [entry]\n } else {\n return []\n }\n })\n ) as Record<DestKey, DestValue>\n}\n\n/**\n * @example\n * ```js\n * flatMapObject({ a: 'aa', b: 'bb' }, (key, value) => [\n * [key + '1', value + '1'],\n * [key + '2', value + '2'],\n * ]) // => { a1: \"aa1\", a2: \"aa2\", b1: \"bb1\", b2: \"bb2\" }\n * ```\n */\nexport function flatMapObject<\n SourceKey extends string,\n SourceValue,\n DestKey extends string,\n DestValue\n>(\n source: Record<SourceKey, SourceValue>,\n callback: (key: SourceKey, value: SourceValue) => [DestKey, DestValue][]\n) {\n return Object.fromEntries(\n Object.entries(source).flatMap(([key, value]) => {\n return callback(key as SourceKey, value as SourceValue)\n })\n ) as Record<DestKey, DestValue>\n}\n\n/**\n * @example\n * ```ts\n * filterObject(\n * { a: 'aa', b: 'bb', c: 'cc' },\n * (value): value is string => value !== 'bb'\n * ) // => { a: \"aa\", c: \"cc\" }\n * ```\n */\nexport function filterObject<Source, Dest extends Source>(\n source: Record<string, Source>,\n fn: (value: Source) => value is Dest\n) {\n return mapObject(source, (key, value) => {\n if (fn(value) === true) {\n return [key, value]\n } else {\n return null\n }\n }) as Record<string, Dest>\n}\n"],"names":["GRADIENT_DIRECTIONS","transparentGradient","color","defaultDirection","direction","transparent","rgba","linearGradient","colorStops","fallback","toDirection","gradient","toLinearGradient","value","map","ratio","applyEffectToGradient","effect","toGradient","applyEffect","baseColor","effects","Array","isArray","reduce","applySingleEffect","type","applyAlpha","applyOpacity","applyReplace","RangeError","opacity","base","parseToRgb","src","red","green","blue","alpha","dst","clamp","alphaBlend","parsed","rgbToColorString","undefined","srcA","dstA","outA","EPS","Math","round","min","max","px","dur","notDisabledSelector","disabledSelector","maxWidth","breakpoint","halfLeading","fontSize","lineHeight","customPropertyToken","id","modifiers","length","join","mapKeys","object","callback","Object","fromEntries","entries","key","mapObject","source","flatMap","entry","flatMapObject","filterObject","fn"],"mappings":"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"}
@@ -1,234 +0,0 @@
1
- import { rgba, linearGradient, parseToRgb, rgbToColorString } from 'polished';
2
-
3
- const GRADIENT_DIRECTIONS = ['to top', 'to bottom', 'to left', 'to right'];
4
- function transparentGradient(color, defaultDirection = 'to bottom') {
5
- return function transparentGradient(direction = defaultDirection) {
6
- const transparent = rgba(color, 0);
7
- return linearGradient({
8
- colorStops: [color, transparent],
9
- fallback: transparent,
10
- toDirection: typeof direction === 'object' ? defaultDirection : direction
11
- });
12
- };
13
- }
14
- function gradient(toDirection = 'to bottom') {
15
- return function toLinearGradient(value) {
16
- var _value$;
17
-
18
- return linearGradient({
19
- colorStops: value.map(({
20
- color,
21
- ratio
22
- }) => `${color} ${ratio}%`),
23
- fallback: (_value$ = value[0]) == null ? void 0 : _value$.color,
24
- toDirection
25
- });
26
- };
27
- }
28
- function applyEffectToGradient(effect) {
29
- return function toGradient(value) {
30
- return value.map(({
31
- color,
32
- ratio
33
- }) => ({
34
- color: applyEffect(color, effect),
35
- ratio
36
- }));
37
- };
38
- }
39
- function applyEffect(baseColor, effects) {
40
- const color = baseColor != null ? baseColor : '#00000000';
41
-
42
- if (Array.isArray(effects)) {
43
- return effects.reduce(applySingleEffect, color);
44
- }
45
-
46
- return applySingleEffect(color, effects);
47
- }
48
-
49
- function applySingleEffect(baseColor, effect) {
50
- switch (effect.type) {
51
- case 'alpha':
52
- return applyAlpha(baseColor, effect);
53
-
54
- case 'opacity':
55
- return applyOpacity(baseColor, effect);
56
-
57
- case 'replace':
58
- return applyReplace(baseColor, effect);
59
-
60
- default:
61
- throw new RangeError(`Unknown effect type ${effect.type}, upgrade @charcoal-ui/utils`);
62
- }
63
- }
64
-
65
- function applyAlpha(baseColor, {
66
- color,
67
- opacity
68
- }) {
69
- var _base$alpha, _effect$alpha;
70
-
71
- const base = parseToRgb(baseColor);
72
- const effect = parseToRgb(color);
73
- const src = [base.red, base.green, base.blue, (_base$alpha = base.alpha) != null ? _base$alpha : 1.0];
74
- const dst = [effect.red, effect.green, effect.blue, clamp(0, 1, ((_effect$alpha = effect.alpha) != null ? _effect$alpha : 1.0) * (opacity != null ? opacity : 1.0))];
75
- return rgba(...alphaBlend(src, dst));
76
- }
77
-
78
- function applyOpacity(baseColor, {
79
- opacity
80
- }) {
81
- var _parsed$alpha;
82
-
83
- const parsed = parseToRgb(baseColor);
84
- parsed.alpha = clamp(0, 1, ((_parsed$alpha = parsed.alpha) != null ? _parsed$alpha : 1.0) * opacity);
85
- return rgbToColorString(parsed);
86
- }
87
-
88
- function applyReplace(baseColor, {
89
- color = baseColor,
90
- opacity
91
- }) {
92
- if (opacity === undefined) {
93
- return color;
94
- }
95
-
96
- const parsed = parseToRgb(color); // NOTE: intentionally ignores any alpha value in the baseColor
97
-
98
- parsed.alpha = opacity;
99
- return rgbToColorString(parsed);
100
- }
101
- /**
102
- * NOTE: alpha component must be in range from 0.0 to 1.0. (0.0 represents a fully transparent)
103
- *
104
- * @param src `[r, g, b, alpha]` Background
105
- * @param dst `[r, g, b, alpha]` Foreground
106
- */
107
-
108
-
109
- function alphaBlend(src, dst) {
110
- const srcA = src[3];
111
- const dstA = dst[3];
112
- const outA = srcA + dstA * (1 - srcA);
113
-
114
- if (outA < EPS) {
115
- // blending 0% alpha with 0% alpha
116
- return [0, 0, 0, 0];
117
- }
118
-
119
- return [Math.round((src[0] * srcA * (1 - dstA) + dst[0] * dstA) / outA), Math.round((src[1] * srcA * (1 - dstA) + dst[1] * dstA) / outA), Math.round((src[2] * srcA * (1 - dstA) + dst[2] * dstA) / outA), outA];
120
- }
121
-
122
- const EPS = 1e-6;
123
-
124
- function clamp(min, max, value) {
125
- return Math.min(Math.max(value, min), max);
126
- }
127
- /**
128
- * affix `px` unit
129
- *
130
- * @param value pixel
131
- */
132
-
133
-
134
- function px(value) {
135
- return `${value}px`;
136
- }
137
- /**
138
- * affix `s` unit
139
- *
140
- * @param value second
141
- */
142
-
143
- function dur(value) {
144
- return `${value}s`;
145
- }
146
- const notDisabledSelector = `&:not(:disabled):not([aria-disabled]), &[aria-disabled=false]`;
147
- const disabledSelector = `&:disabled, &[aria-disabled]:not([aria-disabled=false])`;
148
- /**
149
- * Construct media query from breakpoint
150
- */
151
-
152
- function maxWidth(breakpoint) {
153
- return `(max-width: ${breakpoint - 1}px)`;
154
- }
155
- /**
156
- * Derive half-leading from typography size
157
- */
158
-
159
- const halfLeading = ({
160
- fontSize,
161
- lineHeight
162
- }) => (lineHeight - fontSize) / 2;
163
- /**
164
- * Namespaced custom property
165
- */
166
-
167
- const customPropertyToken = (id, modifiers = []) => `--charcoal-${id}${modifiers.length === 0 ? '' : ['', modifiers].join('-')}`;
168
- /**
169
- * @example
170
- * ```js
171
- * mapKeys({ a: 'aa', b: 'bb' }, (key) => key.toUpperCase()) // => { A: "aa", B: "bb" }
172
- * ````
173
- */
174
-
175
- function mapKeys(object, callback) {
176
- return Object.fromEntries(Object.entries(object).map(([key, value]) => [callback(key), value]));
177
- }
178
- /**
179
- * @example
180
- * ```js
181
- * mapObject({ a: 'aa', b: 'bb', c: 'cc' }, (key, value) =>
182
- * key === 'b' ? undefined : [key + '1', value.toUpperCase()]
183
- * ) // => { a1: "AA", c1: "CC" }
184
- * ```
185
- */
186
-
187
- function mapObject(source, callback) {
188
- return Object.fromEntries(Object.entries(source).flatMap(([key, value]) => {
189
- const entry = callback(key, value);
190
-
191
- if (entry) {
192
- return [entry];
193
- } else {
194
- return [];
195
- }
196
- }));
197
- }
198
- /**
199
- * @example
200
- * ```js
201
- * flatMapObject({ a: 'aa', b: 'bb' }, (key, value) => [
202
- * [key + '1', value + '1'],
203
- * [key + '2', value + '2'],
204
- * ]) // => { a1: "aa1", a2: "aa2", b1: "bb1", b2: "bb2" }
205
- * ```
206
- */
207
-
208
- function flatMapObject(source, callback) {
209
- return Object.fromEntries(Object.entries(source).flatMap(([key, value]) => {
210
- return callback(key, value);
211
- }));
212
- }
213
- /**
214
- * @example
215
- * ```ts
216
- * filterObject(
217
- * { a: 'aa', b: 'bb', c: 'cc' },
218
- * (value): value is string => value !== 'bb'
219
- * ) // => { a: "aa", c: "cc" }
220
- * ```
221
- */
222
-
223
- function filterObject(source, fn) {
224
- return mapObject(source, (key, value) => {
225
- if (fn(value) === true) {
226
- return [key, value];
227
- } else {
228
- return null;
229
- }
230
- });
231
- }
232
-
233
- export { GRADIENT_DIRECTIONS, applyEffect, applyEffectToGradient, customPropertyToken, disabledSelector, dur, filterObject, flatMapObject, gradient, halfLeading, mapKeys, mapObject, maxWidth, notDisabledSelector, px, transparentGradient };
234
- //# sourceMappingURL=index.modern.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.modern.js","sources":["../src/index.ts"],"sourcesContent":["import { linearGradient, parseToRgb, rgba, rgbToColorString } from 'polished'\nimport { RgbColor } from 'polished/lib/types/color'\n\nimport {\n type AlphaEffect,\n type Effect,\n type Effects,\n type GradientMaterial,\n type OpacityEffect,\n type ReplaceEffect,\n type TypographyDescriptor,\n} from '@charcoal-ui/foundation'\n\nexport const GRADIENT_DIRECTIONS = [\n 'to top',\n 'to bottom',\n 'to left',\n 'to right',\n] as const\n\nexport type GradientDirection = typeof GRADIENT_DIRECTIONS[number]\n\nexport function transparentGradient(\n color: string,\n defaultDirection: GradientDirection = 'to bottom'\n) {\n return function transparentGradient(\n direction: GradientDirection | object = defaultDirection\n ) {\n const transparent = rgba(color, 0)\n return linearGradient({\n colorStops: [color, transparent],\n fallback: transparent,\n toDirection: typeof direction === 'object' ? defaultDirection : direction,\n })\n }\n}\n\nexport function gradient(toDirection: GradientDirection = 'to bottom') {\n return function toLinearGradient(value: GradientMaterial) {\n return linearGradient({\n colorStops: value.map(({ color, ratio }) => `${color} ${ratio}%`),\n fallback: value[0]?.color,\n toDirection,\n })\n }\n}\n\nexport function applyEffectToGradient(effect: Effects) {\n return function toGradient(value: GradientMaterial): GradientMaterial {\n return value.map(({ color, ratio }) => ({\n color: applyEffect(color, effect),\n ratio,\n }))\n }\n}\n\ninterface RgbaColor extends RgbColor {\n alpha?: number\n}\n\ninterface ReadonlyArrayConstructor {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n isArray(value: any): value is readonly any[]\n}\n\nexport function applyEffect(\n baseColor: string | null,\n effects: Effects\n): string {\n const color = baseColor ?? '#00000000'\n if ((Array as ReadonlyArrayConstructor).isArray(effects)) {\n return effects.reduce(applySingleEffect, color)\n }\n return applySingleEffect(color, effects)\n}\n\nfunction applySingleEffect(baseColor: string, effect: Effect): string {\n switch (effect.type) {\n case 'alpha':\n return applyAlpha(baseColor, effect)\n case 'opacity':\n return applyOpacity(baseColor, effect)\n case 'replace':\n return applyReplace(baseColor, effect)\n default:\n throw new RangeError(\n `Unknown effect type ${\n (effect as Effect).type\n }, upgrade @charcoal-ui/utils`\n )\n }\n}\n\nfunction applyAlpha(baseColor: string, { color, opacity }: AlphaEffect) {\n const base: RgbaColor = parseToRgb(baseColor)\n const effect: RgbaColor = parseToRgb(color)\n const src = [base.red, base.green, base.blue, base.alpha ?? 1.0] as const\n const dst = [\n effect.red,\n effect.green,\n effect.blue,\n clamp(0, 1, (effect.alpha ?? 1.0) * (opacity ?? 1.0)),\n ] as const\n return rgba(...alphaBlend(src, dst))\n}\n\nfunction applyOpacity(baseColor: string, { opacity }: OpacityEffect) {\n const parsed: RgbaColor = parseToRgb(baseColor)\n parsed.alpha = clamp(0, 1, (parsed.alpha ?? 1.0) * opacity)\n return rgbToColorString(parsed)\n}\n\nfunction applyReplace(\n baseColor: string,\n { color = baseColor, opacity }: ReplaceEffect\n) {\n if (opacity === undefined) {\n return color\n }\n const parsed: RgbaColor = parseToRgb(color)\n // NOTE: intentionally ignores any alpha value in the baseColor\n parsed.alpha = opacity\n return rgbToColorString(parsed)\n}\n\ntype Color4 = readonly [number, number, number, number]\n\n/**\n * NOTE: alpha component must be in range from 0.0 to 1.0. (0.0 represents a fully transparent)\n *\n * @param src `[r, g, b, alpha]` Background\n * @param dst `[r, g, b, alpha]` Foreground\n */\nfunction alphaBlend(src: Color4, dst: Color4): Color4 {\n const srcA = src[3]\n const dstA = dst[3]\n const outA = srcA + dstA * (1 - srcA)\n if (outA < EPS) {\n // blending 0% alpha with 0% alpha\n return [0, 0, 0, 0]\n }\n return [\n Math.round((src[0] * srcA * (1 - dstA) + dst[0] * dstA) / outA),\n Math.round((src[1] * srcA * (1 - dstA) + dst[1] * dstA) / outA),\n Math.round((src[2] * srcA * (1 - dstA) + dst[2] * dstA) / outA),\n outA,\n ]\n}\nconst EPS = 1e-6\n\nfunction clamp(min: number, max: number, value: number) {\n return Math.min(Math.max(value, min), max)\n}\n\n/**\n * affix `px` unit\n *\n * @param value pixel\n */\nexport function px(value: number) {\n return `${value}px`\n}\n\n/**\n * affix `s` unit\n *\n * @param value second\n */\nexport function dur(value: number) {\n return `${value}s`\n}\n\nexport const notDisabledSelector = `&:not(:disabled):not([aria-disabled]), &[aria-disabled=false]`\n\nexport const disabledSelector = `&:disabled, &[aria-disabled]:not([aria-disabled=false])`\n\n/**\n * Construct media query from breakpoint\n */\nexport function maxWidth(breakpoint: number) {\n return `(max-width: ${breakpoint - 1}px)`\n}\n\n/**\n * Derive half-leading from typography size\n */\nexport const halfLeading = ({ fontSize, lineHeight }: TypographyDescriptor) =>\n (lineHeight - fontSize) / 2\n\n/**\n * Namespaced custom property\n */\nexport const customPropertyToken = (\n id: string,\n modifiers: readonly string[] = []\n): `--charcoal-${string}` =>\n `--charcoal-${id}${modifiers.length === 0 ? '' : ['', modifiers].join('-')}`\n\n/**\n * @example\n * ```js\n * mapKeys({ a: 'aa', b: 'bb' }, (key) => key.toUpperCase()) // => { A: \"aa\", B: \"bb\" }\n * ````\n */\nexport function mapKeys<V, K extends string>(\n object: Record<string, V>,\n callback: (key: string) => K\n) {\n return Object.fromEntries(\n Object.entries(object).map(([key, value]) => [callback(key), value])\n ) as Record<K, V>\n}\n\n/**\n * @example\n * ```js\n * mapObject({ a: 'aa', b: 'bb', c: 'cc' }, (key, value) =>\n * key === 'b' ? undefined : [key + '1', value.toUpperCase()]\n * ) // => { a1: \"AA\", c1: \"CC\" }\n * ```\n */\nexport function mapObject<\n SourceKey extends string,\n SourceValue,\n DestKey extends string,\n DestValue\n>(\n source: Record<SourceKey, SourceValue>,\n callback: (\n key: SourceKey,\n value: SourceValue\n ) => [DestKey, DestValue] | null | undefined\n) {\n return Object.fromEntries(\n Object.entries(source).flatMap(([key, value]) => {\n const entry = callback(key as SourceKey, value as SourceValue)\n if (entry) {\n return [entry]\n } else {\n return []\n }\n })\n ) as Record<DestKey, DestValue>\n}\n\n/**\n * @example\n * ```js\n * flatMapObject({ a: 'aa', b: 'bb' }, (key, value) => [\n * [key + '1', value + '1'],\n * [key + '2', value + '2'],\n * ]) // => { a1: \"aa1\", a2: \"aa2\", b1: \"bb1\", b2: \"bb2\" }\n * ```\n */\nexport function flatMapObject<\n SourceKey extends string,\n SourceValue,\n DestKey extends string,\n DestValue\n>(\n source: Record<SourceKey, SourceValue>,\n callback: (key: SourceKey, value: SourceValue) => [DestKey, DestValue][]\n) {\n return Object.fromEntries(\n Object.entries(source).flatMap(([key, value]) => {\n return callback(key as SourceKey, value as SourceValue)\n })\n ) as Record<DestKey, DestValue>\n}\n\n/**\n * @example\n * ```ts\n * filterObject(\n * { a: 'aa', b: 'bb', c: 'cc' },\n * (value): value is string => value !== 'bb'\n * ) // => { a: \"aa\", c: \"cc\" }\n * ```\n */\nexport function filterObject<Source, Dest extends Source>(\n source: Record<string, Source>,\n fn: (value: Source) => value is Dest\n) {\n return mapObject(source, (key, value) => {\n if (fn(value) === true) {\n return [key, value]\n } else {\n return null\n }\n }) as Record<string, Dest>\n}\n"],"names":["GRADIENT_DIRECTIONS","transparentGradient","color","defaultDirection","direction","transparent","rgba","linearGradient","colorStops","fallback","toDirection","gradient","toLinearGradient","value","map","ratio","applyEffectToGradient","effect","toGradient","applyEffect","baseColor","effects","Array","isArray","reduce","applySingleEffect","type","applyAlpha","applyOpacity","applyReplace","RangeError","opacity","base","parseToRgb","src","red","green","blue","alpha","dst","clamp","alphaBlend","parsed","rgbToColorString","undefined","srcA","dstA","outA","EPS","Math","round","min","max","px","dur","notDisabledSelector","disabledSelector","maxWidth","breakpoint","halfLeading","fontSize","lineHeight","customPropertyToken","id","modifiers","length","join","mapKeys","object","callback","Object","fromEntries","entries","key","mapObject","source","flatMap","entry","flatMapObject","filterObject","fn"],"mappings":"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"}