import type { LinesParams, LineAreasParams, GroupAuxParams, DotsParams, BarsParams, StackedBarsParams, BarsTriangleParams, GroupAxisParams, ValueAxisParams, StackedValueAxisParams, GridTooltipParams, GroupZoomParams, GridLegendParams } from '../../lib/plugins-basic-types' // import { measureTextWidth } from '../utils/commonUtils' export const DEFAULT_LINES_PARAMS: LinesParams = { lineCurve: 'curveLinear', lineWidth: 2 } export const DEFAULT_LINE_AREAS_PARAMS: LineAreasParams = { lineCurve: 'curveLinear', linearGradientOpacity: [1, 0] } export const DEFAULT_DOTS_PARAMS: DotsParams = { radius: 4, fillColorType: 'background', strokeColorType: 'label', strokeWidth: 2, // strokeWidthWhileHighlight: 3, onlyShowHighlighted: false } export const DEFAULT_GROUP_AUX_PARAMS: GroupAuxParams = { showLine: true, showLabel: true, lineDashArray: '3, 3', lineColorType: 'primary', labelColorType: 'primary', labelTextColorType: 'background', labelTextFormat: text => text, labelPadding: 20, labelRotate: 0 } DEFAULT_GROUP_AUX_PARAMS.labelTextFormat.toString = () => `text => text` export const DEFAULT_BARS_PARAMS: BarsParams = { // barType: 'rect', barWidth: 0, barPadding: 1, barGroupPadding: 40, barRadius: false, } export const DEFAULT_BARS_DIVERGING_PARAMS: BarsParams = { ...DEFAULT_BARS_PARAMS } export const DEFAULT_STACKED_BARS_PARAMS: StackedBarsParams = { barWidth: 0, barGroupPadding: 10, barRadius: false, } export const DEFAULT_BARS_TRIANGLE_PARAMS: BarsTriangleParams = { barWidth: 0, barPadding: 1, barGroupPadding: 20, linearGradientOpacity: [1, 0] } export const DEFAULT_GROUP_AXIS_PARAMS: GroupAxisParams = { // labelAnchor: 'start', labelOffset: [0, 0], labelColorType: 'primary', axisLineVisible: true, axisLineColorType: 'primary', ticks: 'all', tickFormat: text => text, tickLineVisible: true, tickPadding: 20, tickFullLine: false, tickFullLineDasharray: 'none', tickColorType: 'secondary', tickTextRotate: 0, tickTextColorType: 'primary', } DEFAULT_GROUP_AXIS_PARAMS.tickFormat.toString = () => `text => text` export const DEFAULT_VALUE_AXIS_PARAMS: ValueAxisParams = { // labelAnchor: 'end', labelOffset: [0, 0], labelColorType: 'primary', axisLineVisible: false, axisLineColorType: 'primary', ticks: null, // tickFormat: ',.0f', // tickFormat: v => v, tickFormat: num => { if (num === null || Number.isNaN(num) == true) { return num || 0 } const parts = num.toString().split('.') parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',') return parts.join('.') }, tickLineVisible: true, tickPadding: 20, tickFullLine: true, tickFullLineDasharray: 'none', tickColorType: 'secondary', tickTextRotate: 0, tickTextColorType: 'primary' } DEFAULT_VALUE_AXIS_PARAMS.tickFormat.toString = () => `num => { if (num === null || Number.isNaN(num) == true) { return num || 0 } const parts = num.toString().split('.') parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',') return parts.join('.') }` export const DEFAULT_STACKED_VALUE_AXIS_PARAMS: StackedValueAxisParams = { ...DEFAULT_VALUE_AXIS_PARAMS } export const DEFAULT_GROUP_ZOOM_PARAMS: GroupZoomParams = { } export const DEFAULT_GRID_LEGEND_PARAMS: GridLegendParams = { placement: 'bottom', padding: 28, // offset: [0, 0], backgroundFill: 'none', backgroundStroke: 'none', gap: 10, listRectWidth: 14, listRectHeight: 14, listRectRadius: 0, // highlightEvent: false textColorType: 'primary' } export const DEFAULT_GRID_TOOLTIP_PARAMS: GridTooltipParams = { backgroundColorType: 'background', strokeColorType: 'primary', backgroundOpacity: 0.8, textColorType: 'primary', offset: [20, 5], padding: 10, renderFn: (eventData, { styles, utils }) => { const bulletWidth = styles.textSizePx * 0.7 const offset = (styles.textSizePx / 2) - (bulletWidth / 2) const titleSvg = `${eventData.groupLabel}` const groupLabelTextWidth = utils.measureTextWidth(eventData.groupLabel, styles.textSizePx) const listTextWidth = eventData.group.reduce((acc, group) => { const text = `${group.seriesLabel}${utils.toCurrency(group.value)}` const _maxTextWidth = utils.measureTextWidth(text, styles.textSizePx) return _maxTextWidth > acc ? _maxTextWidth : acc }, 0) const maxTextWidth = Math.max(groupLabelTextWidth, listTextWidth) const lineEndX = maxTextWidth + styles.textSizePx * 3 const contentSvg = eventData.group .map((group, i) => { const y = i * styles.textSizePx * 1.5 const isHighlight = group.id === (eventData.datum && eventData.datum.id) return ` ${group.seriesLabel} ${utils.toCurrency(group.value)} ` }) .join('') return `${titleSvg} ${contentSvg}` } } DEFAULT_GRID_TOOLTIP_PARAMS.renderFn.toString = () => `(eventData, { styles, utils }) => { const bulletWidth = styles.textSizePx * 0.7 const offset = (styles.textSizePx / 2) - (bulletWidth / 2) const titleSvg = \`\${eventData.groupLabel}\` const groupLabelTextWidth = utils.measureTextWidth(eventData.groupLabel, styles.textSizePx) const listTextWidth = eventData.group.reduce((acc, group) => { const text = \`\${group.seriesLabel}\${utils.toCurrency(group.value)}\` const _maxTextWidth = utils.measureTextWidth(text, styles.textSizePx) return _maxTextWidth > acc ? _maxTextWidth : acc }, 0) const maxTextWidth = Math.max(groupLabelTextWidth, listTextWidth) const lineEndX = maxTextWidth + styles.textSizePx * 3 const contentSvg = eventData.group .map((group, i) => { const y = i * styles.textSizePx * 1.5 const isHighlight = group.id === (eventData.datum && eventData.datum.id) return \` \${group.seriesLabel} \${utils.toCurrency(group.value)} \` }) .join('') return \`\${titleSvg} \${contentSvg}\` }`