@charcoal-ui/utils 1.1.0-alpha.1 → 1.1.0-alpha.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/dist/index.cjs +76 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +37 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.modern.js +65 -1
- package/dist/index.modern.js.map +1 -1
- package/dist/index.module.js +73 -1
- package/dist/index.module.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +95 -1
package/dist/index.cjs
CHANGED
|
@@ -185,6 +185,78 @@ var customPropertyToken = function customPropertyToken(id, modifiers) {
|
|
|
185
185
|
|
|
186
186
|
return "--charcoal-" + id + (modifiers.length === 0 ? '' : ['', modifiers].join('-'));
|
|
187
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
|
+
}
|
|
188
260
|
|
|
189
261
|
exports.GRADIENT_DIRECTIONS = GRADIENT_DIRECTIONS;
|
|
190
262
|
exports.applyEffect = applyEffect;
|
|
@@ -192,8 +264,12 @@ exports.applyEffectToGradient = applyEffectToGradient;
|
|
|
192
264
|
exports.customPropertyToken = customPropertyToken;
|
|
193
265
|
exports.disabledSelector = disabledSelector;
|
|
194
266
|
exports.dur = dur;
|
|
267
|
+
exports.filterObject = filterObject;
|
|
268
|
+
exports.flatMapObject = flatMapObject;
|
|
195
269
|
exports.gradient = gradient;
|
|
196
270
|
exports.halfLeading = halfLeading;
|
|
271
|
+
exports.mapKeys = mapKeys;
|
|
272
|
+
exports.mapObject = mapObject;
|
|
197
273
|
exports.maxWidth = maxWidth;
|
|
198
274
|
exports.notDisabledSelector = notDisabledSelector;
|
|
199
275
|
exports.px = px;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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) =>\n `--charcoal-${id}${modifiers.length === 0 ? '' : ['', modifiers].join('-')}`\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"],"mappings":";;IAaaA,mBAAmB,GAAG,CACjC,QADiC,EAEjC,WAFiC,EAGjC,SAHiC,EAIjC,UAJiC;SASnBC,oBACdC,OACAC;MAAAA;AAAAA,IAAAA,mBAAsC;;;AAEtC,SAAO,SAASF,mBAAT,CACLG,SADK;QACLA;AAAAA,MAAAA,YAAwCD;;;AAExC,QAAME,WAAW,GAAGC,aAAI,CAACJ,KAAD,EAAQ,CAAR,CAAxB;AACA,WAAOK,uBAAc,CAAC;AACpBC,MAAAA,UAAU,EAAE,CAACN,KAAD,EAAQG,WAAR,CADQ;AAEpBI,MAAAA,QAAQ,EAAEJ,WAFU;AAGpBK,MAAAA,WAAW,EAAE,OAAON,SAAP,KAAqB,QAArB,GAAgCD,gBAAhC,GAAmDC;AAH5C,KAAD,CAArB;AAKD,GATD;AAUD;SAEeO,SAASD;MAAAA;AAAAA,IAAAA,cAAiC;;;AACxD,SAAO,SAASE,gBAAT,CAA0BC,KAA1B;;;AACL,WAAON,uBAAc,CAAC;AACpBC,MAAAA,UAAU,EAAEK,KAAK,CAACC,GAAN,CAAU;AAAA,YAAGZ,KAAH,QAAGA,KAAH;AAAA,YAAUa,KAAV,QAAUA,KAAV;AAAA,eAAyBb,KAAzB,SAAkCa,KAAlC;AAAA,OAAV,CADQ;AAEpBN,MAAAA,QAAQ,aAAEI,KAAK,CAAC,CAAD,CAAP,qBAAE,QAAUX,KAFA;AAGpBQ,MAAAA,WAAW,EAAXA;AAHoB,KAAD,CAArB;AAKD,GAND;AAOD;SAEeM,sBAAsBC;AACpC,SAAO,SAASC,UAAT,CAAoBL,KAApB;AACL,WAAOA,KAAK,CAACC,GAAN,CAAU;AAAA,UAAGZ,KAAH,SAAGA,KAAH;AAAA,UAAUa,KAAV,SAAUA,KAAV;AAAA,aAAuB;AACtCb,QAAAA,KAAK,EAAEiB,WAAW,CAACjB,KAAD,EAAQe,MAAR,CADoB;AAEtCF,QAAAA,KAAK,EAALA;AAFsC,OAAvB;AAAA,KAAV,CAAP;AAID,GALD;AAMD;SAWeI,YACdC,WACAC;AAEA,MAAMnB,KAAK,GAAGkB,SAAH,WAAGA,SAAH,GAAgB,WAA3B;;AACA,MAAKE,KAAkC,CAACC,OAAnC,CAA2CF,OAA3C,CAAL,EAA0D;AACxD,WAAOA,OAAO,CAACG,MAAR,CAAeC,iBAAf,EAAkCvB,KAAlC,CAAP;AACD;;AACD,SAAOuB,iBAAiB,CAACvB,KAAD,EAAQmB,OAAR,CAAxB;AACD;;AAED,SAASI,iBAAT,CAA2BL,SAA3B,EAA8CH,MAA9C;AACE,UAAQA,MAAM,CAACS,IAAf;AACE,SAAK,OAAL;AACE,aAAOC,UAAU,CAACP,SAAD,EAAYH,MAAZ,CAAjB;;AACF,SAAK,SAAL;AACE,aAAOW,YAAY,CAACR,SAAD,EAAYH,MAAZ,CAAnB;;AACF,SAAK,SAAL;AACE,aAAOY,YAAY,CAACT,SAAD,EAAYH,MAAZ,CAAnB;;AACF;AACE,YAAM,IAAIa,UAAJ,0BAEDb,MAAiB,CAACS,IAFjB,kCAAN;AARJ;AAcD;;AAED,SAASC,UAAT,CAAoBP,SAApB;;;MAAyClB,cAAAA;MAAO6B,gBAAAA;AAC9C,MAAMC,IAAI,GAAcC,mBAAU,CAACb,SAAD,CAAlC;AACA,MAAMH,MAAM,GAAcgB,mBAAU,CAAC/B,KAAD,CAApC;AACA,MAAMgC,GAAG,GAAG,CAACF,IAAI,CAACG,GAAN,EAAWH,IAAI,CAACI,KAAhB,EAAuBJ,IAAI,CAACK,IAA5B,iBAAkCL,IAAI,CAACM,KAAvC,0BAAgD,GAAhD,CAAZ;AACA,MAAMC,GAAG,GAAG,CACVtB,MAAM,CAACkB,GADG,EAEVlB,MAAM,CAACmB,KAFG,EAGVnB,MAAM,CAACoB,IAHG,EAIVG,KAAK,CAAC,CAAD,EAAI,CAAJ,EAAO,kBAACvB,MAAM,CAACqB,KAAR,4BAAiB,GAAjB,KAAyBP,OAAzB,WAAyBA,OAAzB,GAAoC,GAApC,CAAP,CAJK,CAAZ;AAMA,SAAOzB,aAAI,MAAJ,SAAQmC,UAAU,CAACP,GAAD,EAAMK,GAAN,CAAlB,CAAP;AACD;;AAED,SAASX,YAAT,CAAsBR,SAAtB;;;MAA2CW,gBAAAA;AACzC,MAAMW,MAAM,GAAcT,mBAAU,CAACb,SAAD,CAApC;AACAsB,EAAAA,MAAM,CAACJ,KAAP,GAAeE,KAAK,CAAC,CAAD,EAAI,CAAJ,EAAO,kBAACE,MAAM,CAACJ,KAAR,4BAAiB,GAAjB,IAAwBP,OAA/B,CAApB;AACA,SAAOY,yBAAgB,CAACD,MAAD,CAAvB;AACD;;AAED,SAASb,YAAT,CACET,SADF;0BAEIlB;MAAAA,iCAAQkB;MAAWW,gBAAAA;;AAErB,MAAIA,OAAO,KAAKa,SAAhB,EAA2B;AACzB,WAAO1C,KAAP;AACD;;AACD,MAAMwC,MAAM,GAAcT,mBAAU,CAAC/B,KAAD,CAApC;;AAEAwC,EAAAA,MAAM,CAACJ,KAAP,GAAeP,OAAf;AACA,SAAOY,yBAAgB,CAACD,MAAD,CAAvB;AACD;AAID;;;;;;;;AAMA,SAASD,UAAT,CAAoBP,GAApB,EAAiCK,GAAjC;AACE,MAAMM,IAAI,GAAGX,GAAG,CAAC,CAAD,CAAhB;AACA,MAAMY,IAAI,GAAGP,GAAG,CAAC,CAAD,CAAhB;AACA,MAAMQ,IAAI,GAAGF,IAAI,GAAGC,IAAI,IAAI,IAAID,IAAR,CAAxB;;AACA,MAAIE,IAAI,GAAGC,GAAX,EAAgB;AACd;AACA,WAAO,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,CAAP;AACD;;AACD,SAAO,CACLC,IAAI,CAACC,KAAL,CAAW,CAAChB,GAAG,CAAC,CAAD,CAAH,GAASW,IAAT,IAAiB,IAAIC,IAArB,IAA6BP,GAAG,CAAC,CAAD,CAAH,GAASO,IAAvC,IAA+CC,IAA1D,CADK,EAELE,IAAI,CAACC,KAAL,CAAW,CAAChB,GAAG,CAAC,CAAD,CAAH,GAASW,IAAT,IAAiB,IAAIC,IAArB,IAA6BP,GAAG,CAAC,CAAD,CAAH,GAASO,IAAvC,IAA+CC,IAA1D,CAFK,EAGLE,IAAI,CAACC,KAAL,CAAW,CAAChB,GAAG,CAAC,CAAD,CAAH,GAASW,IAAT,IAAiB,IAAIC,IAArB,IAA6BP,GAAG,CAAC,CAAD,CAAH,GAASO,IAAvC,IAA+CC,IAA1D,CAHK,EAILA,IAJK,CAAP;AAMD;;AACD,IAAMC,GAAG,GAAG,IAAZ;;AAEA,SAASR,KAAT,CAAeW,GAAf,EAA4BC,GAA5B,EAAyCvC,KAAzC;AACE,SAAOoC,IAAI,CAACE,GAAL,CAASF,IAAI,CAACG,GAAL,CAASvC,KAAT,EAAgBsC,GAAhB,CAAT,EAA+BC,GAA/B,CAAP;AACD;AAED;;;;;;;SAKgBC,GAAGxC;AACjB,SAAUA,KAAV;AACD;AAED;;;;;;SAKgByC,IAAIzC;AAClB,SAAUA,KAAV;AACD;IAEY0C,mBAAmB;IAEnBC,gBAAgB;AAE7B;;;;SAGgBC,SAASC;AACvB,2BAAsBA,UAAU,GAAG,CAAnC;AACD;AAED;;;;IAGaC,WAAW,GAAG,SAAdA,WAAc;AAAA,MAAGC,QAAH,SAAGA,QAAH;AAAA,MAAaC,UAAb,SAAaA,UAAb;AAAA,SACzB,CAACA,UAAU,GAAGD,QAAd,IAA0B,CADD;AAAA;AAG3B;;;;IAGaE,mBAAmB,GAAG,SAAtBA,mBAAsB,CACjCC,EADiC,EAEjCC,SAFiC;AAAA,MAEjCA,SAFiC;AAEjCA,IAAAA,SAFiC,GAEF,EAFE;AAAA;;AAAA,yBAInBD,EAJmB,IAIdC,SAAS,CAACC,MAAV,KAAqB,CAArB,GAAyB,EAAzB,GAA8B,CAAC,EAAD,EAAKD,SAAL,EAAgBE,IAAhB,CAAqB,GAArB,CAJhB;AAAA;;;;;;;;;;;;;;;"}
|
|
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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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -30,5 +30,41 @@ export declare const halfLeading: ({ fontSize, lineHeight }: TypographyDescripto
|
|
|
30
30
|
/**
|
|
31
31
|
* Namespaced custom property
|
|
32
32
|
*/
|
|
33
|
-
export declare const customPropertyToken: (id: string, modifiers?: readonly string[]) => string
|
|
33
|
+
export declare const customPropertyToken: (id: string, modifiers?: readonly string[]) => `--charcoal-${string}`;
|
|
34
|
+
/**
|
|
35
|
+
* @example
|
|
36
|
+
* ```js
|
|
37
|
+
* mapKeys({ a: 'aa', b: 'bb' }, (key) => key.toUpperCase()) // => { A: "aa", B: "bb" }
|
|
38
|
+
* ````
|
|
39
|
+
*/
|
|
40
|
+
export declare function mapKeys<V, K extends string>(object: Record<string, V>, callback: (key: string) => K): Record<K, V>;
|
|
41
|
+
/**
|
|
42
|
+
* @example
|
|
43
|
+
* ```js
|
|
44
|
+
* mapObject({ a: 'aa', b: 'bb', c: 'cc' }, (key, value) =>
|
|
45
|
+
* key === 'b' ? undefined : [key + '1', value.toUpperCase()]
|
|
46
|
+
* ) // => { a1: "AA", c1: "CC" }
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export declare function mapObject<SourceKey extends string, SourceValue, DestKey extends string, DestValue>(source: Record<SourceKey, SourceValue>, callback: (key: SourceKey, value: SourceValue) => [DestKey, DestValue] | null | undefined): Record<DestKey, DestValue>;
|
|
50
|
+
/**
|
|
51
|
+
* @example
|
|
52
|
+
* ```js
|
|
53
|
+
* flatMapObject({ a: 'aa', b: 'bb' }, (key, value) => [
|
|
54
|
+
* [key + '1', value + '1'],
|
|
55
|
+
* [key + '2', value + '2'],
|
|
56
|
+
* ]) // => { a1: "aa1", a2: "aa2", b1: "bb1", b2: "bb2" }
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export declare function flatMapObject<SourceKey extends string, SourceValue, DestKey extends string, DestValue>(source: Record<SourceKey, SourceValue>, callback: (key: SourceKey, value: SourceValue) => [DestKey, DestValue][]): Record<DestKey, DestValue>;
|
|
60
|
+
/**
|
|
61
|
+
* @example
|
|
62
|
+
* ```ts
|
|
63
|
+
* filterObject(
|
|
64
|
+
* { a: 'aa', b: 'bb', c: 'cc' },
|
|
65
|
+
* (value): value is string => value !== 'bb'
|
|
66
|
+
* ) // => { a: "aa", c: "cc" }
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export declare function filterObject<Source, Dest extends Source>(source: Record<string, Source>, fn: (value: Source) => value is Dest): Record<string, Dest>;
|
|
34
70
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,OAAO,EACZ,KAAK,gBAAgB,EAGrB,KAAK,oBAAoB,EAC1B,MAAM,yBAAyB,CAAA;AAEhC,eAAO,MAAM,mBAAmB,yDAKtB,CAAA;AAEV,oBAAY,iBAAiB,GAAG,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAA;AAElE,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,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,OAAO,EACZ,KAAK,gBAAgB,EAGrB,KAAK,oBAAoB,EAC1B,MAAM,yBAAyB,CAAA;AAEhC,eAAO,MAAM,mBAAmB,yDAKtB,CAAA;AAEV,oBAAY,iBAAiB,GAAG,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAA;AAElE,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.modern.js
CHANGED
|
@@ -165,6 +165,70 @@ const halfLeading = ({
|
|
|
165
165
|
*/
|
|
166
166
|
|
|
167
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
|
+
}
|
|
168
232
|
|
|
169
|
-
export { GRADIENT_DIRECTIONS, applyEffect, applyEffectToGradient, customPropertyToken, disabledSelector, dur, gradient, halfLeading, maxWidth, notDisabledSelector, px, transparentGradient };
|
|
233
|
+
export { GRADIENT_DIRECTIONS, applyEffect, applyEffectToGradient, customPropertyToken, disabledSelector, dur, filterObject, flatMapObject, gradient, halfLeading, mapKeys, mapObject, maxWidth, notDisabledSelector, px, transparentGradient };
|
|
170
234
|
//# sourceMappingURL=index.modern.js.map
|
package/dist/index.modern.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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) =>\n `--charcoal-${id}${modifiers.length === 0 ? '' : ['', modifiers].join('-')}`\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"],"mappings":"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"}
|
|
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":";;MAaaA,mBAAmB,GAAG,CACjC,QADiC,EAEjC,WAFiC,EAGjC,SAHiC,EAIjC,UAJiC;SASnBC,oBACdC,OACAC,mBAAsC;AAEtC,SAAO,SAASF,mBAAT,CACLG,YAAwCD,gBADnC;AAGL,UAAME,WAAW,GAAGC,IAAI,CAACJ,KAAD,EAAQ,CAAR,CAAxB;AACA,WAAOK,cAAc,CAAC;AACpBC,MAAAA,UAAU,EAAE,CAACN,KAAD,EAAQG,WAAR,CADQ;AAEpBI,MAAAA,QAAQ,EAAEJ,WAFU;AAGpBK,MAAAA,WAAW,EAAE,OAAON,SAAP,KAAqB,QAArB,GAAgCD,gBAAhC,GAAmDC;AAH5C,KAAD,CAArB;AAKD,GATD;AAUD;SAEeO,SAASD,cAAiC;AACxD,SAAO,SAASE,gBAAT,CAA0BC,KAA1B;;;AACL,WAAON,cAAc,CAAC;AACpBC,MAAAA,UAAU,EAAEK,KAAK,CAACC,GAAN,CAAU,CAAC;AAAEZ,QAAAA,KAAF;AAASa,QAAAA;AAAT,OAAD,QAAyBb,SAASa,QAA5C,CADQ;AAEpBN,MAAAA,QAAQ,aAAEI,KAAK,CAAC,CAAD,CAAP,qBAAE,QAAUX,KAFA;AAGpBQ,MAAAA;AAHoB,KAAD,CAArB;AAKD,GAND;AAOD;SAEeM,sBAAsBC;AACpC,SAAO,SAASC,UAAT,CAAoBL,KAApB;AACL,WAAOA,KAAK,CAACC,GAAN,CAAU,CAAC;AAAEZ,MAAAA,KAAF;AAASa,MAAAA;AAAT,KAAD,MAAuB;AACtCb,MAAAA,KAAK,EAAEiB,WAAW,CAACjB,KAAD,EAAQe,MAAR,CADoB;AAEtCF,MAAAA;AAFsC,KAAvB,CAAV,CAAP;AAID,GALD;AAMD;SAWeI,YACdC,WACAC;AAEA,QAAMnB,KAAK,GAAGkB,SAAH,WAAGA,SAAH,GAAgB,WAA3B;;AACA,MAAKE,KAAkC,CAACC,OAAnC,CAA2CF,OAA3C,CAAL,EAA0D;AACxD,WAAOA,OAAO,CAACG,MAAR,CAAeC,iBAAf,EAAkCvB,KAAlC,CAAP;AACD;;AACD,SAAOuB,iBAAiB,CAACvB,KAAD,EAAQmB,OAAR,CAAxB;AACD;;AAED,SAASI,iBAAT,CAA2BL,SAA3B,EAA8CH,MAA9C;AACE,UAAQA,MAAM,CAACS,IAAf;AACE,SAAK,OAAL;AACE,aAAOC,UAAU,CAACP,SAAD,EAAYH,MAAZ,CAAjB;;AACF,SAAK,SAAL;AACE,aAAOW,YAAY,CAACR,SAAD,EAAYH,MAAZ,CAAnB;;AACF,SAAK,SAAL;AACE,aAAOY,YAAY,CAACT,SAAD,EAAYH,MAAZ,CAAnB;;AACF;AACE,YAAM,IAAIa,UAAJ,wBAEDb,MAAiB,CAACS,kCAFjB,CAAN;AARJ;AAcD;;AAED,SAASC,UAAT,CAAoBP,SAApB,EAAuC;AAAElB,EAAAA,KAAF;AAAS6B,EAAAA;AAAT,CAAvC;;;AACE,QAAMC,IAAI,GAAcC,UAAU,CAACb,SAAD,CAAlC;AACA,QAAMH,MAAM,GAAcgB,UAAU,CAAC/B,KAAD,CAApC;AACA,QAAMgC,GAAG,GAAG,CAACF,IAAI,CAACG,GAAN,EAAWH,IAAI,CAACI,KAAhB,EAAuBJ,IAAI,CAACK,IAA5B,iBAAkCL,IAAI,CAACM,KAAvC,0BAAgD,GAAhD,CAAZ;AACA,QAAMC,GAAG,GAAG,CACVtB,MAAM,CAACkB,GADG,EAEVlB,MAAM,CAACmB,KAFG,EAGVnB,MAAM,CAACoB,IAHG,EAIVG,KAAK,CAAC,CAAD,EAAI,CAAJ,EAAO,kBAACvB,MAAM,CAACqB,KAAR,4BAAiB,GAAjB,KAAyBP,OAAzB,WAAyBA,OAAzB,GAAoC,GAApC,CAAP,CAJK,CAAZ;AAMA,SAAOzB,IAAI,CAAC,GAAGmC,UAAU,CAACP,GAAD,EAAMK,GAAN,CAAd,CAAX;AACD;;AAED,SAASX,YAAT,CAAsBR,SAAtB,EAAyC;AAAEW,EAAAA;AAAF,CAAzC;;;AACE,QAAMW,MAAM,GAAcT,UAAU,CAACb,SAAD,CAApC;AACAsB,EAAAA,MAAM,CAACJ,KAAP,GAAeE,KAAK,CAAC,CAAD,EAAI,CAAJ,EAAO,kBAACE,MAAM,CAACJ,KAAR,4BAAiB,GAAjB,IAAwBP,OAA/B,CAApB;AACA,SAAOY,gBAAgB,CAACD,MAAD,CAAvB;AACD;;AAED,SAASb,YAAT,CACET,SADF,EAEE;AAAElB,EAAAA,KAAK,GAAGkB,SAAV;AAAqBW,EAAAA;AAArB,CAFF;AAIE,MAAIA,OAAO,KAAKa,SAAhB,EAA2B;AACzB,WAAO1C,KAAP;AACD;;AACD,QAAMwC,MAAM,GAAcT,UAAU,CAAC/B,KAAD,CAApC;;AAEAwC,EAAAA,MAAM,CAACJ,KAAP,GAAeP,OAAf;AACA,SAAOY,gBAAgB,CAACD,MAAD,CAAvB;AACD;AAID;;;;;;;;AAMA,SAASD,UAAT,CAAoBP,GAApB,EAAiCK,GAAjC;AACE,QAAMM,IAAI,GAAGX,GAAG,CAAC,CAAD,CAAhB;AACA,QAAMY,IAAI,GAAGP,GAAG,CAAC,CAAD,CAAhB;AACA,QAAMQ,IAAI,GAAGF,IAAI,GAAGC,IAAI,IAAI,IAAID,IAAR,CAAxB;;AACA,MAAIE,IAAI,GAAGC,GAAX,EAAgB;AACd;AACA,WAAO,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,CAAP;AACD;;AACD,SAAO,CACLC,IAAI,CAACC,KAAL,CAAW,CAAChB,GAAG,CAAC,CAAD,CAAH,GAASW,IAAT,IAAiB,IAAIC,IAArB,IAA6BP,GAAG,CAAC,CAAD,CAAH,GAASO,IAAvC,IAA+CC,IAA1D,CADK,EAELE,IAAI,CAACC,KAAL,CAAW,CAAChB,GAAG,CAAC,CAAD,CAAH,GAASW,IAAT,IAAiB,IAAIC,IAArB,IAA6BP,GAAG,CAAC,CAAD,CAAH,GAASO,IAAvC,IAA+CC,IAA1D,CAFK,EAGLE,IAAI,CAACC,KAAL,CAAW,CAAChB,GAAG,CAAC,CAAD,CAAH,GAASW,IAAT,IAAiB,IAAIC,IAArB,IAA6BP,GAAG,CAAC,CAAD,CAAH,GAASO,IAAvC,IAA+CC,IAA1D,CAHK,EAILA,IAJK,CAAP;AAMD;;AACD,MAAMC,GAAG,GAAG,IAAZ;;AAEA,SAASR,KAAT,CAAeW,GAAf,EAA4BC,GAA5B,EAAyCvC,KAAzC;AACE,SAAOoC,IAAI,CAACE,GAAL,CAASF,IAAI,CAACG,GAAL,CAASvC,KAAT,EAAgBsC,GAAhB,CAAT,EAA+BC,GAA/B,CAAP;AACD;AAED;;;;;;;SAKgBC,GAAGxC;AACjB,YAAUA,SAAV;AACD;AAED;;;;;;SAKgByC,IAAIzC;AAClB,YAAUA,QAAV;AACD;MAEY0C,mBAAmB;MAEnBC,gBAAgB;AAE7B;;;;SAGgBC,SAASC;AACvB,wBAAsBA,UAAU,GAAG,MAAnC;AACD;AAED;;;;MAGaC,WAAW,GAAG,CAAC;AAAEC,EAAAA,QAAF;AAAYC,EAAAA;AAAZ,CAAD,KACzB,CAACA,UAAU,GAAGD,QAAd,IAA0B;AAE5B;;;;MAGaE,mBAAmB,GAAG,CACjCC,EADiC,EAEjCC,YAA+B,EAFE,mBAInBD,KAAKC,SAAS,CAACC,MAAV,KAAqB,CAArB,GAAyB,EAAzB,GAA8B,CAAC,EAAD,EAAKD,SAAL,EAAgBE,IAAhB,CAAqB,GAArB;AAEnD;;;;;;;SAMgBC,QACdC,QACAC;AAEA,SAAOC,MAAM,CAACC,WAAP,CACLD,MAAM,CAACE,OAAP,CAAeJ,MAAf,EAAuBtD,GAAvB,CAA2B,CAAC,CAAC2D,GAAD,EAAM5D,KAAN,CAAD,KAAkB,CAACwD,QAAQ,CAACI,GAAD,CAAT,EAAgB5D,KAAhB,CAA7C,CADK,CAAP;AAGD;AAED;;;;;;;;;SAQgB6D,UAMdC,QACAN;AAKA,SAAOC,MAAM,CAACC,WAAP,CACLD,MAAM,CAACE,OAAP,CAAeG,MAAf,EAAuBC,OAAvB,CAA+B,CAAC,CAACH,GAAD,EAAM5D,KAAN,CAAD;AAC7B,UAAMgE,KAAK,GAAGR,QAAQ,CAACI,GAAD,EAAmB5D,KAAnB,CAAtB;;AACA,QAAIgE,KAAJ,EAAW;AACT,aAAO,CAACA,KAAD,CAAP;AACD,KAFD,MAEO;AACL,aAAO,EAAP;AACD;AACF,GAPD,CADK,CAAP;AAUD;AAED;;;;;;;;;;SASgBC,cAMdH,QACAN;AAEA,SAAOC,MAAM,CAACC,WAAP,CACLD,MAAM,CAACE,OAAP,CAAeG,MAAf,EAAuBC,OAAvB,CAA+B,CAAC,CAACH,GAAD,EAAM5D,KAAN,CAAD;AAC7B,WAAOwD,QAAQ,CAACI,GAAD,EAAmB5D,KAAnB,CAAf;AACD,GAFD,CADK,CAAP;AAKD;AAED;;;;;;;;;;SASgBkE,aACdJ,QACAK;AAEA,SAAON,SAAS,CAACC,MAAD,EAAS,CAACF,GAAD,EAAM5D,KAAN;AACvB,QAAImE,EAAE,CAACnE,KAAD,CAAF,KAAc,IAAlB,EAAwB;AACtB,aAAO,CAAC4D,GAAD,EAAM5D,KAAN,CAAP;AACD,KAFD,MAEO;AACL,aAAO,IAAP;AACD;AACF,GANe,CAAhB;AAOD;;;;"}
|
package/dist/index.module.js
CHANGED
|
@@ -185,6 +185,78 @@ var customPropertyToken = function customPropertyToken(id, modifiers) {
|
|
|
185
185
|
|
|
186
186
|
return "--charcoal-" + id + (modifiers.length === 0 ? '' : ['', modifiers].join('-'));
|
|
187
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
|
+
}
|
|
188
260
|
|
|
189
|
-
export { GRADIENT_DIRECTIONS, applyEffect, applyEffectToGradient, customPropertyToken, disabledSelector, dur, gradient, halfLeading, maxWidth, notDisabledSelector, px, transparentGradient };
|
|
261
|
+
export { GRADIENT_DIRECTIONS, applyEffect, applyEffectToGradient, customPropertyToken, disabledSelector, dur, filterObject, flatMapObject, gradient, halfLeading, mapKeys, mapObject, maxWidth, notDisabledSelector, px, transparentGradient };
|
|
190
262
|
//# sourceMappingURL=index.module.js.map
|
package/dist/index.module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.module.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) =>\n `--charcoal-${id}${modifiers.length === 0 ? '' : ['', modifiers].join('-')}`\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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.module.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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@charcoal-ui/utils",
|
|
3
|
-
"version": "1.1.0-alpha.
|
|
3
|
+
"version": "1.1.0-alpha.2",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"source": "./src/index.ts",
|
|
@@ -39,5 +39,5 @@
|
|
|
39
39
|
"url": "https://github.com/pixiv/charcoal.git",
|
|
40
40
|
"directory": "packages/utils"
|
|
41
41
|
},
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "46e5c8b3bdecb446a83e5520a28a98f2a8840994"
|
|
43
43
|
}
|
package/src/index.ts
CHANGED
|
@@ -194,5 +194,99 @@ export const halfLeading = ({ fontSize, lineHeight }: TypographyDescriptor) =>
|
|
|
194
194
|
export const customPropertyToken = (
|
|
195
195
|
id: string,
|
|
196
196
|
modifiers: readonly string[] = []
|
|
197
|
-
) =>
|
|
197
|
+
): `--charcoal-${string}` =>
|
|
198
198
|
`--charcoal-${id}${modifiers.length === 0 ? '' : ['', modifiers].join('-')}`
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* @example
|
|
202
|
+
* ```js
|
|
203
|
+
* mapKeys({ a: 'aa', b: 'bb' }, (key) => key.toUpperCase()) // => { A: "aa", B: "bb" }
|
|
204
|
+
* ````
|
|
205
|
+
*/
|
|
206
|
+
export function mapKeys<V, K extends string>(
|
|
207
|
+
object: Record<string, V>,
|
|
208
|
+
callback: (key: string) => K
|
|
209
|
+
) {
|
|
210
|
+
return Object.fromEntries(
|
|
211
|
+
Object.entries(object).map(([key, value]) => [callback(key), value])
|
|
212
|
+
) as Record<K, V>
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* @example
|
|
217
|
+
* ```js
|
|
218
|
+
* mapObject({ a: 'aa', b: 'bb', c: 'cc' }, (key, value) =>
|
|
219
|
+
* key === 'b' ? undefined : [key + '1', value.toUpperCase()]
|
|
220
|
+
* ) // => { a1: "AA", c1: "CC" }
|
|
221
|
+
* ```
|
|
222
|
+
*/
|
|
223
|
+
export function mapObject<
|
|
224
|
+
SourceKey extends string,
|
|
225
|
+
SourceValue,
|
|
226
|
+
DestKey extends string,
|
|
227
|
+
DestValue
|
|
228
|
+
>(
|
|
229
|
+
source: Record<SourceKey, SourceValue>,
|
|
230
|
+
callback: (
|
|
231
|
+
key: SourceKey,
|
|
232
|
+
value: SourceValue
|
|
233
|
+
) => [DestKey, DestValue] | null | undefined
|
|
234
|
+
) {
|
|
235
|
+
return Object.fromEntries(
|
|
236
|
+
Object.entries(source).flatMap(([key, value]) => {
|
|
237
|
+
const entry = callback(key as SourceKey, value as SourceValue)
|
|
238
|
+
if (entry) {
|
|
239
|
+
return [entry]
|
|
240
|
+
} else {
|
|
241
|
+
return []
|
|
242
|
+
}
|
|
243
|
+
})
|
|
244
|
+
) as Record<DestKey, DestValue>
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* @example
|
|
249
|
+
* ```js
|
|
250
|
+
* flatMapObject({ a: 'aa', b: 'bb' }, (key, value) => [
|
|
251
|
+
* [key + '1', value + '1'],
|
|
252
|
+
* [key + '2', value + '2'],
|
|
253
|
+
* ]) // => { a1: "aa1", a2: "aa2", b1: "bb1", b2: "bb2" }
|
|
254
|
+
* ```
|
|
255
|
+
*/
|
|
256
|
+
export function flatMapObject<
|
|
257
|
+
SourceKey extends string,
|
|
258
|
+
SourceValue,
|
|
259
|
+
DestKey extends string,
|
|
260
|
+
DestValue
|
|
261
|
+
>(
|
|
262
|
+
source: Record<SourceKey, SourceValue>,
|
|
263
|
+
callback: (key: SourceKey, value: SourceValue) => [DestKey, DestValue][]
|
|
264
|
+
) {
|
|
265
|
+
return Object.fromEntries(
|
|
266
|
+
Object.entries(source).flatMap(([key, value]) => {
|
|
267
|
+
return callback(key as SourceKey, value as SourceValue)
|
|
268
|
+
})
|
|
269
|
+
) as Record<DestKey, DestValue>
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* @example
|
|
274
|
+
* ```ts
|
|
275
|
+
* filterObject(
|
|
276
|
+
* { a: 'aa', b: 'bb', c: 'cc' },
|
|
277
|
+
* (value): value is string => value !== 'bb'
|
|
278
|
+
* ) // => { a: "aa", c: "cc" }
|
|
279
|
+
* ```
|
|
280
|
+
*/
|
|
281
|
+
export function filterObject<Source, Dest extends Source>(
|
|
282
|
+
source: Record<string, Source>,
|
|
283
|
+
fn: (value: Source) => value is Dest
|
|
284
|
+
) {
|
|
285
|
+
return mapObject(source, (key, value) => {
|
|
286
|
+
if (fn(value) === true) {
|
|
287
|
+
return [key, value]
|
|
288
|
+
} else {
|
|
289
|
+
return null
|
|
290
|
+
}
|
|
291
|
+
}) as Record<string, Dest>
|
|
292
|
+
}
|