UNPKG

@antv/s2

Version:

effective spreadsheet render core lib

566 lines 21.3 kB
/* eslint-disable max-lines-per-function */ import { merge } from 'lodash'; import { CELL_PADDING, FONT_FAMILY, INTERVAL_BAR_HEIGHT, } from '../common/constant'; import { isMobile, isWindows } from '../utils/is-mobile'; import { getPalette } from '../utils/theme'; export const getCornerCellTheme = (palette, spreadsheet) => { var _a, _b; const { basicColors, others: otherColors } = palette; const isTable = spreadsheet === null || spreadsheet === void 0 ? void 0 : spreadsheet.isTableMode(); const boldTextDefaultFontWeight = isWindows() ? 'bold' : 700; return { text: { fontFamily: FONT_FAMILY, fontSize: 12, fontWeight: boldTextDefaultFontWeight, fill: basicColors[0], opacity: 1, textAlign: isTable ? 'center' : 'left', textBaseline: 'middle', }, bolderText: { fontFamily: FONT_FAMILY, fontSize: 12, fontWeight: boldTextDefaultFontWeight, fill: basicColors[0], opacity: 1, textAlign: isTable ? 'center' : 'right', textBaseline: 'middle', }, measureText: { fontFamily: FONT_FAMILY, fontSize: 12, fontWeight: boldTextDefaultFontWeight, fill: basicColors[0], opacity: 1, textAlign: 'left', textBaseline: 'middle', }, cell: { // ----------- background color ----------- backgroundColor: basicColors[3], backgroundColorOpacity: 1, // ----------- border color -------------- horizontalBorderColor: basicColors[10], horizontalBorderColorOpacity: 1, verticalBorderColor: basicColors[10], verticalBorderColorOpacity: 1, // ----------- border width -------------- horizontalBorderWidth: 1, verticalBorderWidth: 1, // -------------- border dash ----------------- borderDash: [], // -------------- layout ----------------- padding: { top: CELL_PADDING, right: CELL_PADDING, bottom: CELL_PADDING, left: CELL_PADDING, }, /* ---------- interaction state ----------- */ interactionState: { // -------------- hover ------------------- hover: { backgroundColor: basicColors[4], backgroundOpacity: 0.6, }, // -------------- selected ------------------- selected: { backgroundColor: basicColors[4], backgroundOpacity: 0.6, }, // -------------- unselected ------------------- unselected: { backgroundOpacity: 0.3, textOpacity: 0.3, opacity: 0.3, }, // -------------- prepare select -------------- prepareSelect: { borderColor: basicColors[14], borderOpacity: 1, borderWidth: 1, }, // -------------- searchResult ------------------- searchResult: { backgroundColor: (_a = otherColors === null || otherColors === void 0 ? void 0 : otherColors.results) !== null && _a !== void 0 ? _a : basicColors[2], backgroundOpacity: 1, }, // -------------- highlight ------------------- highlight: { backgroundColor: (_b = otherColors === null || otherColors === void 0 ? void 0 : otherColors.highlight) !== null && _b !== void 0 ? _b : basicColors[6], backgroundOpacity: 1, }, }, }, icon: { fill: basicColors[0], size: 10, margin: { right: 4, left: 4, }, }, }; }; export const getRowCellTheme = (palette, spreadsheet) => { var _a, _b; const { basicColors, others: otherColors } = palette; const isTable = spreadsheet === null || spreadsheet === void 0 ? void 0 : spreadsheet.isTableMode(); const boldTextDefaultFontWeight = isWindows() ? 'bold' : 700; return { seriesText: { fontFamily: FONT_FAMILY, fontSize: 12, fontWeight: 'normal', fill: basicColors[14], linkTextFill: basicColors[6], opacity: 1, textBaseline: 'middle', textAlign: 'center', }, measureText: { fontFamily: FONT_FAMILY, fontSize: 12, fontWeight: 'normal', fill: basicColors[14], linkTextFill: basicColors[6], opacity: 1, textAlign: isTable ? 'center' : 'left', textBaseline: 'middle', }, bolderText: { fontFamily: FONT_FAMILY, fontSize: 12, fontWeight: boldTextDefaultFontWeight, fill: basicColors[14], linkTextFill: basicColors[6], opacity: 1, textAlign: isTable ? 'center' : 'left', textBaseline: 'middle', }, text: { fontFamily: FONT_FAMILY, fontSize: 12, fontWeight: 'normal', fill: basicColors[14], linkTextFill: basicColors[6], opacity: 1, textBaseline: 'middle', // default align center for row cell in table mode textAlign: isTable ? 'center' : 'left', }, cell: { // ----------- background color ----------- backgroundColor: basicColors[1], backgroundColorOpacity: 1, // ----------- bottom border color -------------- horizontalBorderColor: basicColors[9], horizontalBorderColorOpacity: 1, verticalBorderColor: basicColors[9], verticalBorderColorOpacity: 1, // ----------- bottom border width -------------- horizontalBorderWidth: 1, verticalBorderWidth: 1, // -------------- border dash ----------------- borderDash: [], // -------------- layout ----------------- padding: { top: CELL_PADDING, right: CELL_PADDING, bottom: CELL_PADDING, left: CELL_PADDING, }, /* ---------- interaction state ----------- */ interactionState: { // -------------- hover ------------------- hover: { backgroundColor: basicColors[2], backgroundOpacity: 0.6, }, // -------------- selected ------------------- selected: { backgroundColor: basicColors[2], backgroundOpacity: 0.6, }, // -------------- unselected ------------------- unselected: { backgroundOpacity: 0.3, textOpacity: 0.3, opacity: 0.3, }, // -------------- prepare select -------------- prepareSelect: { borderColor: basicColors[14], borderOpacity: 1, borderWidth: 1, }, // -------------- searchResult ------------------- searchResult: { backgroundColor: (_a = otherColors === null || otherColors === void 0 ? void 0 : otherColors.results) !== null && _a !== void 0 ? _a : basicColors[2], backgroundOpacity: 1, }, // -------------- highlight ------------------- highlight: { backgroundColor: (_b = otherColors === null || otherColors === void 0 ? void 0 : otherColors.highlight) !== null && _b !== void 0 ? _b : basicColors[6], backgroundOpacity: 1, }, }, }, icon: { fill: basicColors[14], size: 10, margin: { right: 4, left: 4, }, }, seriesNumberWidth: 80, }; }; export const getColCellTheme = (palette) => { var _a, _b; const { basicColors, others: otherColors } = palette; const boldTextDefaultFontWeight = isWindows() ? 'bold' : 700; return { measureText: { fontFamily: FONT_FAMILY, fontSize: 12, fontWeight: 'normal', fill: basicColors[0], opacity: 1, // 默认列头的数值字段和 dataCell 数值对齐 textAlign: 'right', textBaseline: 'middle', linkTextFill: basicColors[6], }, bolderText: { fontFamily: FONT_FAMILY, fontSize: 12, fontWeight: boldTextDefaultFontWeight, fill: basicColors[0], opacity: 1, textAlign: 'center', textBaseline: 'middle', linkTextFill: basicColors[6], }, text: { fontFamily: FONT_FAMILY, fontSize: 12, fontWeight: 'normal', fill: basicColors[0], opacity: 1, textAlign: 'center', textBaseline: 'middle', linkTextFill: basicColors[6], }, cell: { // ----------- background color ----------- backgroundColor: basicColors[3], backgroundColorOpacity: 1, // ----------- border color -------------- horizontalBorderColor: basicColors[10], horizontalBorderColorOpacity: 1, verticalBorderColor: basicColors[10], verticalBorderColorOpacity: 1, // ----------- border width -------------- horizontalBorderWidth: 1, verticalBorderWidth: 1, // -------------- border dash ----------------- borderDash: [], // -------------- layout ----------------- padding: { top: CELL_PADDING, right: CELL_PADDING, bottom: CELL_PADDING, left: CELL_PADDING, }, /* ---------- interaction state ----------- */ interactionState: { // -------------- hover ------------------- hover: { backgroundColor: basicColors[4], backgroundOpacity: 0.6, }, // -------------- selected ------------------- selected: { backgroundColor: basicColors[4], backgroundOpacity: 0.6, }, // -------------- unselected ------------------- unselected: { backgroundOpacity: 0.3, textOpacity: 0.3, opacity: 0.3, }, // -------------- prepare select -------------- prepareSelect: { borderColor: basicColors[14], borderOpacity: 1, borderWidth: 1, }, // -------------- searchResult ------------------- searchResult: { backgroundColor: (_a = otherColors === null || otherColors === void 0 ? void 0 : otherColors.results) !== null && _a !== void 0 ? _a : basicColors[2], backgroundOpacity: 1, }, // -------------- highlight ------------------- highlight: { backgroundColor: (_b = otherColors === null || otherColors === void 0 ? void 0 : otherColors.highlight) !== null && _b !== void 0 ? _b : basicColors[6], backgroundOpacity: 1, }, }, }, icon: { fill: basicColors[0], size: 10, margin: { top: 6, right: 4, bottom: 6, left: 4, }, }, }; }; export const getDataCellTheme = (palette) => { var _a, _b; const { basicColors, others: otherColors, semanticColors } = palette; const boldTextDefaultFontWeight = isWindows() ? 'bold' : 700; return { bolderText: { fontFamily: FONT_FAMILY, fontSize: 12, fontWeight: boldTextDefaultFontWeight, fill: basicColors[13], opacity: 1, textAlign: 'right', textBaseline: 'middle', linkTextFill: basicColors[6], }, text: { fontFamily: FONT_FAMILY, fontSize: 12, fontWeight: 'normal', fill: basicColors[13], opacity: 1, textAlign: 'right', textBaseline: 'middle', linkTextFill: basicColors[6], }, cell: { // ----------- background color ----------- crossBackgroundColor: basicColors[1], backgroundColor: basicColors[8], backgroundColorOpacity: 1, // ----------- border color -------------- horizontalBorderColor: basicColors[9], horizontalBorderColorOpacity: 1, verticalBorderColor: basicColors[9], verticalBorderColorOpacity: 1, // ----------- border width -------------- horizontalBorderWidth: 1, verticalBorderWidth: 1, // -------------- layout ----------------- padding: { top: CELL_PADDING, right: CELL_PADDING, bottom: CELL_PADDING, left: CELL_PADDING, }, /* ---------- interaction state ----------- */ interactionState: { // -------------- hover ------------------- hover: { backgroundColor: basicColors[2], backgroundOpacity: 0.6, }, // -------------- keep hover ------------------- hoverFocus: { backgroundColor: basicColors[2], backgroundOpacity: 0.6, borderColor: basicColors[14], borderWidth: 1, borderOpacity: 1, }, // -------------- selected ------------------- selected: { backgroundColor: basicColors[2], backgroundOpacity: 0.6, }, // -------------- unselected ------------------- unselected: { backgroundOpacity: 0.3, textOpacity: 0.3, opacity: 0.3, }, // -------------- searchResult ------------------- searchResult: { backgroundColor: (_a = otherColors === null || otherColors === void 0 ? void 0 : otherColors.results) !== null && _a !== void 0 ? _a : basicColors[2], backgroundOpacity: 1, }, // -------------- highlight ------------------- highlight: { backgroundColor: (_b = otherColors === null || otherColors === void 0 ? void 0 : otherColors.highlight) !== null && _b !== void 0 ? _b : basicColors[6], backgroundOpacity: 1, }, // -------------- prepare select -------------- prepareSelect: { borderColor: basicColors[14], borderOpacity: 1, borderWidth: 1, }, }, }, // ------------- mini chart --------------- miniChart: { // ------------- line graph ----------------- line: { point: { size: 2.2, fill: basicColors[6], opacity: 1, }, linkLine: { size: 1.5, fill: basicColors[6], opacity: 0.6, }, }, // ------------- bar graph ----------------- bar: { intervalPadding: 4, fill: basicColors[6], opacity: 1, }, // ------------- bullet graph ----------------- bullet: { progressBar: { widthPercent: 0.6, height: 10, innerHeight: 6, }, comparativeMeasure: { width: 1, height: 12, fill: basicColors[13], opacity: 0.25, }, rangeColors: { good: semanticColors === null || semanticColors === void 0 ? void 0 : semanticColors.green, satisfactory: semanticColors.yellow, bad: semanticColors.red, }, backgroundColor: '#E9E9E9', }, // ------------ interval bar graph ----------------- interval: { height: INTERVAL_BAR_HEIGHT, fill: basicColors[7], }, }, icon: { fill: basicColors[13], size: 10, margin: { right: 4, left: 4, }, }, }; }; /** * @describe generate the theme according to the type * @param themeCfg */ export const getTheme = (themeCfg) => { var _a; const palette = (themeCfg === null || themeCfg === void 0 ? void 0 : themeCfg.palette) || getPalette(themeCfg === null || themeCfg === void 0 ? void 0 : themeCfg.name); const { basicColors } = palette; const spreadsheet = themeCfg === null || themeCfg === void 0 ? void 0 : themeCfg.spreadsheet; const customTheme = (_a = themeCfg === null || themeCfg === void 0 ? void 0 : themeCfg.getCustomTheme) === null || _a === void 0 ? void 0 : _a.call(themeCfg, palette, spreadsheet); return merge({ // ------------- Headers ------------------- cornerCell: getCornerCellTheme(palette, spreadsheet), rowCell: getRowCellTheme(palette, spreadsheet), colCell: getColCellTheme(palette), // ------------- DataCell ------------------- dataCell: getDataCellTheme(palette), // ------------- MergedCell ------------------- mergedCell: getDataCellTheme(palette), // resize active area resizeArea: { size: 3, background: basicColors[7], backgroundOpacity: 0, guideLineColor: basicColors[7], guideLineDisableColor: 'rgba(0,0,0,0.25)', guideLineDash: [3, 3], /* ---------- interaction state ----------- */ interactionState: { hover: { backgroundColor: basicColors[7], backgroundOpacity: 1, }, }, }, // ------------- scrollBar ------------------- scrollBar: { trackColor: 'rgba(0,0,0,0.01)', thumbHoverColor: 'rgba(0,0,0,0.25)', thumbColor: 'rgba(0,0,0,0.15)', thumbHorizontalMinSize: 32, thumbVerticalMinSize: 32, size: isMobile() ? 3 : 6, hoverSize: isMobile() ? 4 : 8, lineCap: 'round', }, // ------------- split line ----------------- splitLine: { horizontalBorderColor: basicColors[12], horizontalBorderColorOpacity: 0.2, horizontalBorderWidth: 2, verticalBorderColor: basicColors[11], verticalBorderColorOpacity: 0.25, verticalBorderWidth: 2, showShadow: true, shadowWidth: 8, shadowColors: { left: 'rgba(0,0,0,0.1)', right: 'rgba(0,0,0,0)', }, borderDash: [], }, // ------------- prepareSelectMask ----------------- prepareSelectMask: { backgroundColor: basicColors[5], backgroundOpacity: 0.3, }, // ------------- canvas background background: { color: basicColors[8], opacity: 1, }, empty: { icon: { fill: '', width: 64, height: 41, margin: { top: 0, right: 0, bottom: 24, left: 0, }, }, description: { fontFamily: FONT_FAMILY, fontSize: 12, fontWeight: 'normal', fill: basicColors[14], opacity: 1, }, }, }, customTheme); }; //# sourceMappingURL=index.js.map