UNPKG

@antv/s2

Version:

effective spreadsheet render core lib

94 lines 3.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generatePalette = exports.generateStandardColors = exports.isReadableText = exports.shouldReverseFontColor = void 0; const tslib_1 = require("tslib"); const lodash_1 = require("lodash"); const tinycolor2_1 = tslib_1.__importDefault(require("tinycolor2")); const condition_1 = require("../common/constant/condition"); const WHITE_COLOR = '#FFFFFF'; const BLACK_COLOR = '#000000'; /** S2 标准色板 mix 规则 */ const STANDARD_COLOR_MIX_PERCENT = [95, 85, 75, 30, 15, 0, 15, 30, 45, 60, 80]; /** * basic color 数量 * @see Palette.basicColors */ const BASIC_COLOR_COUNT = 15; /** * 智能反色使用 * @param color */ const shouldReverseFontColor = (color) => (0, tinycolor2_1.default)(color).getLuminance() <= 0.5; exports.shouldReverseFontColor = shouldReverseFontColor; /** * @param backgroundColor * @param fontColor */ const isReadableText = (backgroundColor, fontColor) => { return tinycolor2_1.default.isReadable(backgroundColor, fontColor, { level: 'AA', size: 'small', }); }; exports.isReadableText = isReadableText; const FONT_COLOR_RELATIONS = [ { fontColorIndex: 0, bgColorIndex: 3, }, { fontColorIndex: 13, bgColorIndex: 8, }, { fontColorIndex: 14, bgColorIndex: 1, }, ]; /** * 生成 s2 设计规范下的标准色(共 11 个) * * - 第 1~5 为主题色加白 * - 第 6 为主题色 * - 第 7~11 为主题色加黑 * * @param brandColor 主题色 * @returns 标准色卡 */ const generateStandardColors = (brandColor) => { const standardColors = []; for (let index = 0; index < 11; index++) { const mixPercent = STANDARD_COLOR_MIX_PERCENT[index]; standardColors.push(mixPercent === 0 ? (0, lodash_1.toUpper)(brandColor) : (0, lodash_1.toUpper)(tinycolor2_1.default .mix(brandColor, index < 5 ? WHITE_COLOR : BLACK_COLOR, mixPercent) .toHexString())); } return standardColors; }; exports.generateStandardColors = generateStandardColors; /** * 根据 S2 内置色板及自选主题色生成新色板 * @param paletteMeta @PaletteMeta * @returns 新色板 */ const generatePalette = (paletteMeta = {}) => { const basicColors = Array.from(Array(BASIC_COLOR_COUNT)).fill(condition_1.REVERSE_FONT_COLOR); const { basicColorRelations = [], brandColor } = paletteMeta; const standardColors = (0, exports.generateStandardColors)(brandColor); // 使用标准色填充 basicColors basicColorRelations.forEach((relation) => { basicColors[relation.basicColorIndex] = standardColors[relation.standardColorIndex]; }); // 根据背景明暗设置字体颜色 FONT_COLOR_RELATIONS.forEach(({ fontColorIndex, bgColorIndex }) => { basicColors[fontColorIndex] = (0, exports.shouldReverseFontColor)(basicColors[bgColorIndex]) ? condition_1.REVERSE_FONT_COLOR : condition_1.DEFAULT_FONT_COLOR; }); return Object.assign(Object.assign({}, paletteMeta), { basicColors }); }; exports.generatePalette = generatePalette; //# sourceMappingURL=color.js.map