@charcoal-ui/utils 3.4.0 → 3.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.js +20 -11
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +4 -1
- package/dist/index.esm.js.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +5 -2
package/dist/index.cjs.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
5
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
8
|
var __export = (target, all) => {
|
|
7
9
|
for (var name in all)
|
|
@@ -15,6 +17,10 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
15
17
|
}
|
|
16
18
|
return to;
|
|
17
19
|
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
|
+
mod
|
|
23
|
+
));
|
|
18
24
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
25
|
|
|
20
26
|
// src/index.ts
|
|
@@ -38,7 +44,10 @@ __export(src_exports, {
|
|
|
38
44
|
transparentGradient: () => transparentGradient
|
|
39
45
|
});
|
|
40
46
|
module.exports = __toCommonJS(src_exports);
|
|
41
|
-
var
|
|
47
|
+
var import_rgba = __toESM(require("polished/lib/color/rgba"));
|
|
48
|
+
var import_rgbToColorString = __toESM(require("polished/lib/color/rgbToColorString"));
|
|
49
|
+
var import_parseToRgb = __toESM(require("polished/lib/color/parseToRgb"));
|
|
50
|
+
var import_linearGradient = __toESM(require("polished/lib/mixins/linearGradient"));
|
|
42
51
|
var GRADIENT_DIRECTIONS = [
|
|
43
52
|
"to top",
|
|
44
53
|
"to bottom",
|
|
@@ -47,8 +56,8 @@ var GRADIENT_DIRECTIONS = [
|
|
|
47
56
|
];
|
|
48
57
|
function transparentGradient(color, defaultDirection = "to bottom") {
|
|
49
58
|
return function transparentGradient2(direction = defaultDirection) {
|
|
50
|
-
const transparent = (0,
|
|
51
|
-
return (0,
|
|
59
|
+
const transparent = (0, import_rgba.default)(color, 0);
|
|
60
|
+
return (0, import_linearGradient.default)({
|
|
52
61
|
colorStops: [color, transparent],
|
|
53
62
|
fallback: transparent,
|
|
54
63
|
toDirection: typeof direction === "object" ? defaultDirection : direction
|
|
@@ -57,7 +66,7 @@ function transparentGradient(color, defaultDirection = "to bottom") {
|
|
|
57
66
|
}
|
|
58
67
|
function gradient(toDirection = "to bottom") {
|
|
59
68
|
return function toLinearGradient(value) {
|
|
60
|
-
return (0,
|
|
69
|
+
return (0, import_linearGradient.default)({
|
|
61
70
|
colorStops: value.map(({ color, ratio }) => `${color} ${ratio}%`),
|
|
62
71
|
fallback: value[0]?.color,
|
|
63
72
|
toDirection
|
|
@@ -94,8 +103,8 @@ function applySingleEffect(baseColor, effect) {
|
|
|
94
103
|
}
|
|
95
104
|
}
|
|
96
105
|
function applyAlpha(baseColor, { color, opacity }) {
|
|
97
|
-
const base = (0,
|
|
98
|
-
const effect = (0,
|
|
106
|
+
const base = (0, import_parseToRgb.default)(baseColor);
|
|
107
|
+
const effect = (0, import_parseToRgb.default)(color);
|
|
99
108
|
const src = [base.red, base.green, base.blue, base.alpha ?? 1];
|
|
100
109
|
const dst = [
|
|
101
110
|
effect.red,
|
|
@@ -103,20 +112,20 @@ function applyAlpha(baseColor, { color, opacity }) {
|
|
|
103
112
|
effect.blue,
|
|
104
113
|
clamp(0, 1, (effect.alpha ?? 1) * (opacity ?? 1))
|
|
105
114
|
];
|
|
106
|
-
return (0,
|
|
115
|
+
return (0, import_rgba.default)(...alphaBlend(src, dst));
|
|
107
116
|
}
|
|
108
117
|
function applyOpacity(baseColor, { opacity }) {
|
|
109
|
-
const parsed = (0,
|
|
118
|
+
const parsed = (0, import_parseToRgb.default)(baseColor);
|
|
110
119
|
parsed.alpha = clamp(0, 1, (parsed.alpha ?? 1) * opacity);
|
|
111
|
-
return (0,
|
|
120
|
+
return (0, import_rgbToColorString.default)(parsed);
|
|
112
121
|
}
|
|
113
122
|
function applyReplace(baseColor, { color = baseColor, opacity }) {
|
|
114
123
|
if (opacity === void 0) {
|
|
115
124
|
return color;
|
|
116
125
|
}
|
|
117
|
-
const parsed = (0,
|
|
126
|
+
const parsed = (0, import_parseToRgb.default)(color);
|
|
118
127
|
parsed.alpha = opacity;
|
|
119
|
-
return (0,
|
|
128
|
+
return (0, import_rgbToColorString.default)(parsed);
|
|
120
129
|
}
|
|
121
130
|
function alphaBlend(src, dst) {
|
|
122
131
|
const srcA = src[3];
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"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"],"mappings":"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","names":["transparentGradient"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import rgba from 'polished/lib/color/rgba'\nimport rgbToColorString from 'polished/lib/color/rgbToColorString'\nimport parseToRgb from 'polished/lib/color/parseToRgb'\nimport linearGradient from 'polished/lib/mixins/linearGradient'\nimport { type 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"],"mappings":"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","names":["transparentGradient","rgba","linearGradient","parseToRgb","rgbToColorString"]}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,OAAO,EACZ,KAAK,gBAAgB,EAGrB,KAAK,oBAAoB,EAC1B,MAAM,yBAAyB,CAAA;AAEhC,eAAO,MAAM,mBAAmB,yDAKtB,CAAA;AAEV,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEpE,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,gBAAgB,GAAE,iBAA+B,gBAGpC,iBAAiB,GAAG,MAAM,+CASxC;AAED,wBAAgB,QAAQ,CAAC,WAAW,GAAE,iBAA+B,0EAQpE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,iDAOpD;AAWD,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,OAAO,EAAE,OAAO,GACf,MAAM,CAMR;AAgFD;;;;GAIG;AACH,wBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,UAE/B;AAED;;;;GAIG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,UAEhC;AAED,eAAO,MAAM,mBAAmB,kEAAkE,CAAA;AAElG,eAAO,MAAM,gBAAgB,4DAA4D,CAAA;AAEzF;;GAEG;AACH,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,UAE1C;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,6BAA8B,oBAAoB,WAC7C,CAAA;AAE7B;;GAEG;AACH,eAAO,MAAM,mBAAmB,OAC1B,MAAM,cACC,SAAS,MAAM,EAAE,KAC3B,cAAc,MAAM,EACuD,CAAA;AAE9E;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,EACzC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EACzB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC,gBAK7B;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CACvB,SAAS,SAAS,MAAM,EACxB,WAAW,EACX,OAAO,SAAS,MAAM,EACtB,SAAS,EAET,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,EACtC,QAAQ,EAAE,CACR,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,WAAW,KACf,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,IAAI,GAAG,SAAS,8BAY7C;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,SAAS,SAAS,MAAM,EACxB,WAAW,EACX,OAAO,SAAS,MAAM,EACtB,SAAS,EAET,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,EACtC,QAAQ,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,8BAOzE;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,IAAI,SAAS,MAAM,EACtD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,IAAI,IAAI,wBASrC"}
|
package/dist/index.esm.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
// src/index.ts
|
|
2
|
-
import
|
|
2
|
+
import rgba from "polished/lib/color/rgba";
|
|
3
|
+
import rgbToColorString from "polished/lib/color/rgbToColorString";
|
|
4
|
+
import parseToRgb from "polished/lib/color/parseToRgb";
|
|
5
|
+
import linearGradient from "polished/lib/mixins/linearGradient";
|
|
3
6
|
var GRADIENT_DIRECTIONS = [
|
|
4
7
|
"to top",
|
|
5
8
|
"to bottom",
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"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"],"mappings":"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","names":["transparentGradient"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import rgba from 'polished/lib/color/rgba'\nimport rgbToColorString from 'polished/lib/color/rgbToColorString'\nimport parseToRgb from 'polished/lib/color/parseToRgb'\nimport linearGradient from 'polished/lib/mixins/linearGradient'\nimport { type 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"],"mappings":"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","names":["transparentGradient"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@charcoal-ui/utils",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.6.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "./dist/index.cjs.js",
|
|
6
6
|
"module": "./dist/index.esm.js",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"typescript": "^4.9.5"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@charcoal-ui/foundation": "^3.
|
|
27
|
+
"@charcoal-ui/foundation": "^3.6.0",
|
|
28
28
|
"polished": "^4.1.4"
|
|
29
29
|
},
|
|
30
30
|
"files": [
|
|
@@ -39,5 +39,5 @@
|
|
|
39
39
|
"url": "https://github.com/pixiv/charcoal.git",
|
|
40
40
|
"directory": "packages/utils"
|
|
41
41
|
},
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "a77b512ae91706be951d5e1fa12265522f1f54e4"
|
|
43
43
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import rgba from 'polished/lib/color/rgba'
|
|
2
|
+
import rgbToColorString from 'polished/lib/color/rgbToColorString'
|
|
3
|
+
import parseToRgb from 'polished/lib/color/parseToRgb'
|
|
4
|
+
import linearGradient from 'polished/lib/mixins/linearGradient'
|
|
5
|
+
import { type RgbColor } from 'polished/lib/types/color'
|
|
3
6
|
|
|
4
7
|
import {
|
|
5
8
|
type AlphaEffect,
|