UNPKG

@palett/fluo

Version:
121 lines (101 loc) 3.77 kB
import { DyeFab, pushRgb, pushHex, pushHsl, pushInt } from '@palett/dye-factory'; import '@palett/presets'; import { stringValue } from '@spare/string-value'; import { parseNum, isNumeric as isNumeric$1 } from '@texting/charset-fullwidth'; import { isNumeric, parseNum as parseNum$1 } from '@texting/charset-halfwidth'; import { isLiteralAny, isLiteral } from '@typen/literal'; import { replenish } from '@vect/object-update'; import { mutazip, mutate } from '@vect/vector'; export { fluoVector } from '@palett/fluo-vector'; export { fluoByColumns, fluoByPoints, fluoByRows, fluoMatrix } from '@palett/fluo-matrix'; export { fluoEntries } from '@palett/fluo-entries'; /** * @typedef {string|number|number[]} chroma */ /** * * @this {DyeFab} * @param {string|any} text * @param {chroma} color * @returns {function(string):string} */ class Fluo { /** * * @this {DyeFab} * @param {function(chroma):string} encolor * @param {string|any} text * @param {chroma} color * @returns {function(string):string} */ static render(encolor, text, color) { var _this$slice; const local = (this === null || this === void 0 ? void 0 : (_this$slice = this.slice) === null || _this$slice === void 0 ? void 0 : _this$slice.call(this)) ?? DyeFab.shallow(); if (color) (encolor ?? local.encolor).call(local, color); return DyeFab.prototype.render.call(local, text); } static rgb(text, rgb) { return Fluo.render.call(this, pushRgb, text, rgb); } static hex(text, hex) { return Fluo.render.call(this, pushHex, text, hex); } static hsl(text, hsl) { return Fluo.render.call(this, pushHsl, text, hsl); } static int(text, int) { return Fluo.render.call(this, pushInt, text, int); } } function fluo(text, color) { var _this$slice2; const local = (this === null || this === void 0 ? void 0 : (_this$slice2 = this.slice) === null || _this$slice2 === void 0 ? void 0 : _this$slice2.call(this)) ?? DyeFab.shallow(); if (color) (local.encolor ?? pushRgb).call(local, color); return DyeFab.prototype.render.call(local, text); } const isNumericAny = x => isNumeric$1(x) || isNumeric(x); const NUM_BOUND_CONF_FULL = { filter: isNumericAny, mapper: parseNum }; const STR_BOUND_CONF_FULL = { filter: isLiteralAny, mapper: stringValue }; const NUM_BOUND_CONF_HALF = { filter: isNumeric, mapper: parseNum$1 }; const STR_BOUND_CONF_HALF = { filter: isLiteral, mapper: stringValue }; class PresetCollection extends Array { constructor(presets) { super(presets.length); mutazip(this, presets, (receiver, preset) => Object.assign({}, preset)); } static build(...presets) { return new PresetCollection(presets); } assignPresets(...presets) { // if (this.length < presets.length) {this.length = presets.length} return mutazip(this, presets, (conf, preset) => Object.assign(conf ?? {}, preset), presets.length); } replenishPresets(...presets) { // if (this.length < presets.length) {this.length = presets.length} return mutazip(this, presets, (conf, preset) => replenish(conf ?? {}, preset), presets.length); } assignEffect(...effects) { if (effects.length === 0) return this; return mutate(this, conf => (conf.effects = effects, conf)); } setBound(full) { const boundConfigs = full ? [NUM_BOUND_CONF_FULL, STR_BOUND_CONF_FULL, STR_BOUND_CONF_FULL] : [NUM_BOUND_CONF_HALF, STR_BOUND_CONF_HALF, STR_BOUND_CONF_HALF]; return mutazip(this, boundConfigs, (conf, boundConf) => Object.assign(conf, boundConf)); } } // if (presets.length === 0) presets = [NUMERIC_PRESET, LITERAL_PRESET] const POINTWISE = 0; const ROWWISE = 1; const COLUMNWISE = 2; export { COLUMNWISE, Fluo, POINTWISE, PresetCollection, ROWWISE, fluo };