graphein 0.20.0 → 0.22.0
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/animation/animate.d.ts +6 -1
- package/dist/animation/animate.d.ts.map +1 -1
- package/dist/animation/animate.js +2 -2
- package/dist/animation/animate.js.map +2 -2
- package/dist/animation/env.d.ts +5 -0
- package/dist/animation/env.d.ts.map +1 -1
- package/dist/animation/env.js +4 -0
- package/dist/animation/env.js.map +2 -2
- package/dist/animation/index.d.ts +1 -0
- package/dist/animation/index.d.ts.map +1 -1
- package/dist/animation/index.js +1 -0
- package/dist/animation/index.js.map +2 -2
- package/dist/animation/stagger.d.ts +13 -0
- package/dist/animation/stagger.d.ts.map +1 -0
- package/dist/animation/stagger.js +13 -0
- package/dist/animation/stagger.js.map +7 -0
- package/dist/axes/draw.d.ts +5 -1
- package/dist/axes/draw.d.ts.map +1 -1
- package/dist/axes/draw.js +13 -1
- package/dist/axes/draw.js.map +2 -2
- package/dist/axes/morph.d.ts +111 -0
- package/dist/axes/morph.d.ts.map +1 -0
- package/dist/axes/morph.js +207 -0
- package/dist/axes/morph.js.map +7 -0
- package/dist/axes/overlay.d.ts.map +1 -1
- package/dist/axes/overlay.js +88 -25
- package/dist/axes/overlay.js.map +2 -2
- package/dist/axes/text.d.ts +2 -0
- package/dist/axes/text.d.ts.map +1 -1
- package/dist/axes/text.js +1 -0
- package/dist/axes/text.js.map +2 -2
- package/dist/axes/tickLabels.d.ts +2 -0
- package/dist/axes/tickLabels.d.ts.map +1 -1
- package/dist/axes/tickLabels.js +2 -2
- package/dist/axes/tickLabels.js.map +2 -2
- package/dist/charts/annotations.d.ts +9 -3
- package/dist/charts/annotations.d.ts.map +1 -1
- package/dist/charts/annotations.js +82 -27
- package/dist/charts/annotations.js.map +2 -2
- package/dist/charts/area.d.ts +37 -1
- package/dist/charts/area.d.ts.map +1 -1
- package/dist/charts/area.js +35 -17
- package/dist/charts/area.js.map +2 -2
- package/dist/charts/bar.d.ts +53 -0
- package/dist/charts/bar.d.ts.map +1 -1
- package/dist/charts/bar.js +117 -83
- package/dist/charts/bar.js.map +2 -2
- package/dist/charts/box.d.ts +31 -0
- package/dist/charts/box.d.ts.map +1 -1
- package/dist/charts/box.js +93 -70
- package/dist/charts/box.js.map +2 -2
- package/dist/charts/bubbleMap.d.ts +20 -0
- package/dist/charts/bubbleMap.d.ts.map +1 -0
- package/dist/charts/bubbleMap.js +951 -0
- package/dist/charts/bubbleMap.js.map +7 -0
- package/dist/charts/bullet.d.ts.map +1 -1
- package/dist/charts/bullet.js +69 -51
- package/dist/charts/bullet.js.map +2 -2
- package/dist/charts/calendarHeatmap.d.ts.map +1 -1
- package/dist/charts/calendarHeatmap.js +56 -19
- package/dist/charts/calendarHeatmap.js.map +2 -2
- package/dist/charts/candlestick.d.ts +40 -0
- package/dist/charts/candlestick.d.ts.map +1 -0
- package/dist/charts/candlestick.js +325 -0
- package/dist/charts/candlestick.js.map +7 -0
- package/dist/charts/choropleth.d.ts.map +1 -1
- package/dist/charts/choropleth.js +46 -67
- package/dist/charts/choropleth.js.map +2 -2
- package/dist/charts/combo.d.ts.map +1 -1
- package/dist/charts/combo.js +127 -27
- package/dist/charts/combo.js.map +3 -3
- package/dist/charts/dumbbell.d.ts.map +1 -1
- package/dist/charts/dumbbell.js +100 -31
- package/dist/charts/dumbbell.js.map +2 -2
- package/dist/charts/funnel.d.ts.map +1 -1
- package/dist/charts/funnel.js +93 -28
- package/dist/charts/funnel.js.map +3 -3
- package/dist/charts/gantt.d.ts +22 -0
- package/dist/charts/gantt.d.ts.map +1 -0
- package/dist/charts/gantt.js +564 -0
- package/dist/charts/gantt.js.map +7 -0
- package/dist/charts/gauge.d.ts.map +1 -1
- package/dist/charts/gauge.js +30 -4
- package/dist/charts/gauge.js.map +2 -2
- package/dist/charts/geo.d.ts +87 -0
- package/dist/charts/geo.d.ts.map +1 -0
- package/dist/charts/geo.js +140 -0
- package/dist/charts/geo.js.map +7 -0
- package/dist/charts/geometry.d.ts +20 -0
- package/dist/charts/geometry.d.ts.map +1 -0
- package/dist/charts/geometry.js +25 -0
- package/dist/charts/geometry.js.map +7 -0
- package/dist/charts/heatmap.d.ts.map +1 -1
- package/dist/charts/heatmap.js +58 -49
- package/dist/charts/heatmap.js.map +2 -2
- package/dist/charts/histogram.d.ts +1 -1
- package/dist/charts/histogram.d.ts.map +1 -1
- package/dist/charts/histogram.js +49 -31
- package/dist/charts/histogram.js.map +2 -2
- package/dist/charts/index.d.ts +35 -1
- package/dist/charts/index.d.ts.map +1 -1
- package/dist/charts/index.js +12 -0
- package/dist/charts/index.js.map +2 -2
- package/dist/charts/legibility.d.ts +38 -0
- package/dist/charts/legibility.d.ts.map +1 -0
- package/dist/charts/legibility.js +72 -0
- package/dist/charts/legibility.js.map +7 -0
- package/dist/charts/line.d.ts +39 -1
- package/dist/charts/line.d.ts.map +1 -1
- package/dist/charts/line.js +48 -16
- package/dist/charts/line.js.map +2 -2
- package/dist/charts/matrix.d.ts +2 -1
- package/dist/charts/matrix.d.ts.map +1 -1
- package/dist/charts/matrix.js +481 -319
- package/dist/charts/matrix.js.map +3 -3
- package/dist/charts/morphFrame.d.ts +83 -0
- package/dist/charts/morphFrame.d.ts.map +1 -0
- package/dist/charts/morphFrame.js +128 -0
- package/dist/charts/morphFrame.js.map +7 -0
- package/dist/charts/pie.d.ts.map +1 -1
- package/dist/charts/pie.js +89 -26
- package/dist/charts/pie.js.map +2 -2
- package/dist/charts/pieState.d.ts +27 -0
- package/dist/charts/pieState.d.ts.map +1 -0
- package/dist/charts/pieState.js +55 -0
- package/dist/charts/pieState.js.map +7 -0
- package/dist/charts/radar.d.ts +62 -0
- package/dist/charts/radar.d.ts.map +1 -0
- package/dist/charts/radar.js +912 -0
- package/dist/charts/radar.js.map +7 -0
- package/dist/charts/radialBar.d.ts +60 -0
- package/dist/charts/radialBar.d.ts.map +1 -0
- package/dist/charts/radialBar.js +708 -0
- package/dist/charts/radialBar.js.map +7 -0
- package/dist/charts/sankey.d.ts.map +1 -1
- package/dist/charts/sankey.js +223 -57
- package/dist/charts/sankey.js.map +3 -3
- package/dist/charts/scatter.d.ts +31 -0
- package/dist/charts/scatter.d.ts.map +1 -1
- package/dist/charts/scatter.js +48 -12
- package/dist/charts/scatter.js.map +2 -2
- package/dist/charts/slope.d.ts.map +1 -1
- package/dist/charts/slope.js +55 -3
- package/dist/charts/slope.js.map +2 -2
- package/dist/charts/sunburst.d.ts +14 -0
- package/dist/charts/sunburst.d.ts.map +1 -0
- package/dist/charts/sunburst.js +885 -0
- package/dist/charts/sunburst.js.map +7 -0
- package/dist/charts/table.d.ts +2 -1
- package/dist/charts/table.d.ts.map +1 -1
- package/dist/charts/table.js +214 -224
- package/dist/charts/table.js.map +3 -3
- package/dist/charts/tableView/canvas.d.ts +16 -1
- package/dist/charts/tableView/canvas.d.ts.map +1 -1
- package/dist/charts/tableView/canvas.js +361 -252
- package/dist/charts/tableView/canvas.js.map +3 -3
- package/dist/charts/tableView/conditional.d.ts +66 -40
- package/dist/charts/tableView/conditional.d.ts.map +1 -1
- package/dist/charts/tableView/conditional.js +163 -256
- package/dist/charts/tableView/conditional.js.map +3 -3
- package/dist/charts/tableView/dom.d.ts +26 -2
- package/dist/charts/tableView/dom.d.ts.map +1 -1
- package/dist/charts/tableView/dom.js +609 -269
- package/dist/charts/tableView/dom.js.map +3 -3
- package/dist/charts/tableView/layout.d.ts +22 -0
- package/dist/charts/tableView/layout.d.ts.map +1 -0
- package/dist/charts/tableView/layout.js +246 -0
- package/dist/charts/tableView/layout.js.map +7 -0
- package/dist/charts/tableView/sketch.d.ts +3 -2
- package/dist/charts/tableView/sketch.d.ts.map +1 -1
- package/dist/charts/tableView/sketch.js +2 -2
- package/dist/charts/tableView/sketch.js.map +2 -2
- package/dist/charts/tableView/sketchBar.d.ts +7 -0
- package/dist/charts/tableView/sketchBar.d.ts.map +1 -0
- package/dist/charts/tableView/sketchBar.js +32 -0
- package/dist/charts/tableView/sketchBar.js.map +7 -0
- package/dist/charts/tableView/sort.d.ts +9 -0
- package/dist/charts/tableView/sort.d.ts.map +1 -0
- package/dist/charts/tableView/sort.js +70 -0
- package/dist/charts/tableView/sort.js.map +7 -0
- package/dist/charts/tableView/sparkline.d.ts +30 -0
- package/dist/charts/tableView/sparkline.d.ts.map +1 -0
- package/dist/charts/tableView/sparkline.js +63 -0
- package/dist/charts/tableView/sparkline.js.map +7 -0
- package/dist/charts/tableView/style.d.ts +67 -0
- package/dist/charts/tableView/style.d.ts.map +1 -0
- package/dist/charts/tableView/style.js +131 -0
- package/dist/charts/tableView/style.js.map +7 -0
- package/dist/charts/tableView/types.d.ts +69 -46
- package/dist/charts/tableView/types.d.ts.map +1 -1
- package/dist/charts/tableView/types.js +22 -87
- package/dist/charts/tableView/types.js.map +2 -2
- package/dist/charts/tableView.d.ts +10 -5
- package/dist/charts/tableView.d.ts.map +1 -1
- package/dist/charts/tableView.js +12 -8
- package/dist/charts/tableView.js.map +2 -2
- package/dist/charts/treemap.d.ts.map +1 -1
- package/dist/charts/treemap.js +177 -68
- package/dist/charts/treemap.js.map +3 -3
- package/dist/charts/trendline.d.ts +13 -5
- package/dist/charts/trendline.d.ts.map +1 -1
- package/dist/charts/trendline.js +205 -56
- package/dist/charts/trendline.js.map +2 -2
- package/dist/charts/waterfall.d.ts.map +1 -1
- package/dist/charts/waterfall.js +76 -5
- package/dist/charts/waterfall.js.map +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/interaction/cartesian.d.ts +4 -1
- package/dist/interaction/cartesian.d.ts.map +1 -1
- package/dist/interaction/cartesian.js +104 -34
- package/dist/interaction/cartesian.js.map +2 -2
- package/dist/interaction/controller.d.ts +29 -1
- package/dist/interaction/controller.d.ts.map +1 -1
- package/dist/interaction/controller.js +131 -8
- package/dist/interaction/controller.js.map +2 -2
- package/dist/interaction/focus.d.ts +23 -0
- package/dist/interaction/focus.d.ts.map +1 -0
- package/dist/interaction/focus.js +65 -0
- package/dist/interaction/focus.js.map +7 -0
- package/dist/interaction/tooltip.d.ts +6 -0
- package/dist/interaction/tooltip.d.ts.map +1 -1
- package/dist/interaction/tooltip.js +41 -16
- package/dist/interaction/tooltip.js.map +2 -2
- package/dist/interaction/types.d.ts +19 -0
- package/dist/interaction/types.d.ts.map +1 -1
- package/dist/interaction/veil.d.ts +25 -0
- package/dist/interaction/veil.d.ts.map +1 -0
- package/dist/interaction/veil.js +35 -0
- package/dist/interaction/veil.js.map +7 -0
- package/dist/pivot/pivot.d.ts +18 -0
- package/dist/pivot/pivot.d.ts.map +1 -1
- package/dist/pivot/pivot.js +46 -34
- package/dist/pivot/pivot.js.map +2 -2
- package/dist/render/chromeMotion.d.ts +65 -0
- package/dist/render/chromeMotion.d.ts.map +1 -0
- package/dist/render/chromeMotion.js +79 -0
- package/dist/render/chromeMotion.js.map +7 -0
- package/dist/render/pathSample.d.ts +24 -0
- package/dist/render/pathSample.d.ts.map +1 -0
- package/dist/render/pathSample.js +76 -0
- package/dist/render/pathSample.js.map +7 -0
- package/dist/render/transient.d.ts +18 -0
- package/dist/render/transient.d.ts.map +1 -0
- package/dist/render/transient.js +19 -0
- package/dist/render/transient.js.map +7 -0
- package/dist/runtime/candlestick.d.ts +112 -0
- package/dist/runtime/candlestick.d.ts.map +1 -0
- package/dist/runtime/candlestick.js +531 -0
- package/dist/runtime/candlestick.js.map +7 -0
- package/dist/runtime/cartesian.d.ts +14 -3
- package/dist/runtime/cartesian.d.ts.map +1 -1
- package/dist/runtime/cartesian.js.map +2 -2
- package/dist/runtime/chartAnimation.d.ts +54 -7
- package/dist/runtime/chartAnimation.d.ts.map +1 -1
- package/dist/runtime/chartAnimation.js +146 -28
- package/dist/runtime/chartAnimation.js.map +2 -2
- package/dist/runtime/chartRuntime.d.ts +42 -0
- package/dist/runtime/chartRuntime.d.ts.map +1 -1
- package/dist/runtime/chartRuntime.js +196 -30
- package/dist/runtime/chartRuntime.js.map +2 -2
- package/dist/runtime/dashboardDom.d.ts.map +1 -1
- package/dist/runtime/dashboardDom.js +45 -0
- package/dist/runtime/dashboardDom.js.map +2 -2
- package/dist/runtime/facet.d.ts +1 -1
- package/dist/runtime/facet.d.ts.map +1 -1
- package/dist/runtime/gantt.d.ts +137 -0
- package/dist/runtime/gantt.d.ts.map +1 -0
- package/dist/runtime/gantt.js +647 -0
- package/dist/runtime/gantt.js.map +7 -0
- package/dist/runtime/morph.d.ts +33 -0
- package/dist/runtime/morph.d.ts.map +1 -0
- package/dist/runtime/morph.js +332 -0
- package/dist/runtime/morph.js.map +7 -0
- package/dist/runtime/radar.d.ts +75 -0
- package/dist/runtime/radar.d.ts.map +1 -0
- package/dist/runtime/radar.js +201 -0
- package/dist/runtime/radar.js.map +7 -0
- package/dist/runtime/radialBar.d.ts +81 -0
- package/dist/runtime/radialBar.d.ts.map +1 -0
- package/dist/runtime/radialBar.js +125 -0
- package/dist/runtime/radialBar.js.map +7 -0
- package/dist/runtime/report/constants.d.ts +2 -2
- package/dist/runtime/report/constants.d.ts.map +1 -1
- package/dist/runtime/runtimeShared.d.ts +3 -3
- package/dist/runtime/runtimeShared.d.ts.map +1 -1
- package/dist/runtime/sunburst.d.ts +74 -0
- package/dist/runtime/sunburst.d.ts.map +1 -0
- package/dist/runtime/sunburst.js +150 -0
- package/dist/runtime/sunburst.js.map +7 -0
- package/dist/runtime/wire.d.ts.map +1 -1
- package/dist/runtime/wire.js +3 -1
- package/dist/runtime/wire.js.map +2 -2
- package/dist/shape/arc.d.ts +15 -2
- package/dist/shape/arc.d.ts.map +1 -1
- package/dist/shape/arc.js +204 -32
- package/dist/shape/arc.js.map +2 -2
- package/dist/spec/chartDefinitions.d.ts +6 -0
- package/dist/spec/chartDefinitions.d.ts.map +1 -1
- package/dist/spec/chartDefinitions.js +7 -1
- package/dist/spec/chartDefinitions.js.map +2 -2
- package/dist/spec/templates.d.ts.map +1 -1
- package/dist/spec/templates.js +177 -2
- package/dist/spec/templates.js.map +2 -2
- package/dist/spec/types.d.ts +258 -6
- package/dist/spec/types.d.ts.map +1 -1
- package/dist/spec/types.js +6 -0
- package/dist/spec/types.js.map +2 -2
- package/dist/spec/validate/charts.js +147 -15
- package/dist/spec/validate/charts.js.map +2 -2
- package/dist/spec/validate/common.d.ts +6 -0
- package/dist/spec/validate/common.d.ts.map +1 -1
- package/dist/spec/validate/overlays.js +2 -2
- package/dist/spec/validate/overlays.js.map +2 -2
- package/dist/spec/validate.data.d.ts.map +1 -1
- package/dist/spec/validate.data.js +8 -3
- package/dist/spec/validate.data.js.map +2 -2
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/charts/tableView/canvas.ts"],
|
|
4
|
-
"sourcesContent": ["import { paintCanvasText } from '../../render/overlayText';\nimport { fontString, measureText, ellipsize } from '../../render/text';\nimport { RoughPen } from '../../rough';\nimport { roundedRect } from '../../shape';\nimport { recordCanvasLabel, type LabelRole } from '../../render/labelLedger';\nimport { CanvasTableOptions, HeaderCell, ViewColumn, densityMetrics, normalizedHeaderRows, sumWidths, computeFittedWidths, MIN_COL_WIDTH, FILL_EPS, formatDisplayValue } from './types';\nimport { canvasRowBackground, negativeTextColor, resolveCanvasConditional, paintDataBar } from './conditional';\nexport function paintTableCanvas(opts: CanvasTableOptions): void {\n const { ctx, rect, tokens } = opts;\n const metrics = densityMetrics(opts.density);\n const available = Math.max(0, rect.width - 2);\n // Static exports cannot scroll: fit readable columns, then disclose the\n // remaining viewport instead of painting half-visible cell text.\n const minimum = Math.min(MIN_COL_WIDTH, Math.max(48, tokens.font.size.small * 3 + metrics.paddingX * 2));\n let widths = available > FILL_EPS ? computeFittedWidths(opts.columns, available, minimum) : [];\n if (sumWidths(widths) > available + FILL_EPS) {\n let used = 0;\n let visible = 0;\n for (const width of widths) {\n const needed = Math.min(width, minimum);\n if (visible > 0 && used + needed > available) break;\n used += needed;\n visible++;\n }\n widths = computeFittedWidths(opts.columns.slice(0, visible), available, Math.min(minimum, available));\n }\n const hiddenColumns = opts.columns.length - widths.length;\n opts.widths = widths;\n const pen = opts.sketch ? new RoughPen(ctx, opts.sketch) : null;\n const w = Math.max(0, rect.width);\n const h = Math.max(0, rect.height);\n\n ctx.save();\n ctx.beginPath();\n if (pen) {\n // A plain-rect clip keeps content contained; the wobbly frame is stroked\n // on top after `restore()` so its outer wobble isn't clipped away.\n ctx.rect(rect.x, rect.y, w, h);\n ctx.fillStyle = tokens.color.background;\n ctx.fill();\n } else {\n roundedRect(ctx, rect.x, rect.y, w, h, tokens.radius.sm);\n ctx.fillStyle = tokens.color.background;\n ctx.fill();\n ctx.lineWidth = 1;\n ctx.strokeStyle = tokens.color.border;\n ctx.stroke();\n }\n ctx.clip();\n\n const headerRows = normalizedHeaderRows(opts);\n const headerHeight = headerRows.length * metrics.headerHeight;\n const footerHeight = opts.footerRow ? metrics.rowHeight : 0;\n const bodyTop = rect.y + headerHeight;\n const bodyBottom = rect.y + rect.height - footerHeight;\n const bodyHeight = Math.max(0, bodyBottom - bodyTop);\n const rowCapacity = Math.max(0, Math.floor(bodyHeight / metrics.rowHeight));\n const clipped = rowCapacity < opts.rowCount || hiddenColumns > 0;\n const cueReserve = clipped && opts.clippedCue !== false && rowCapacity > 1 ? metrics.rowHeight : 0;\n const rowsToDraw = Math.max(0, Math.min(opts.rowCount, rowCapacity - (cueReserve > 0 ? 1 : 0)));\n opts.labels?.omit({ role: 'data-label', reason: 'static-viewport', required: true,\n count: (opts.rowCount - rowsToDraw) * opts.columns.length + rowsToDraw * hiddenColumns, path: '/dimensions' });\n if (opts.dataRepresentation === 'rows') opts.evidence?.data(opts.columns.length ? rowsToDraw : 0);\n else if (opts.dataRepresentation === 'aggregate') {\n opts.evidence?.data(opts.sourceRepresentedRows ?? opts.evidence.snapshot().data.inputRows, 'aggregate');\n }\n\n paintHeaderCanvas(opts, widths, headerRows, metrics, pen);\n for (let rowIndex = 0; rowIndex < rowsToDraw; rowIndex += 1) {\n paintBodyRowCanvas(opts, widths, rowIndex, bodyTop + rowIndex * metrics.rowHeight, metrics, pen);\n }\n if (cueReserve > 0) {\n paintClippedCueCanvas(opts, bodyTop + rowsToDraw * metrics.rowHeight, metrics, opts.rowCount - rowsToDraw, hiddenColumns);\n } else if (clipped && opts.clippedCue !== false) {\n opts.labels?.omit({ role: 'other', reason: 'space', required: false,\n example: 'Additional rows or columns', path: '/dimensions' });\n }\n if (opts.footerRow) {\n paintFooterCanvas(opts, widths, rect.y + rect.height - metrics.rowHeight, metrics, pen);\n }\n\n ctx.restore();\n\n if (pen) pen.rect(rect.x, rect.y, w, h, { stroke: tokens.color.border });\n}\nfunction paintHeaderCanvas(\n opts: CanvasTableOptions,\n widths: readonly number[],\n rows: HeaderCell[][],\n metrics: ReturnType<typeof densityMetrics>,\n pen?: RoughPen | null,\n): void {\n rows.forEach((row, rowIndex) => {\n let cursor = 0;\n for (const cell of row) {\n const start = cell.colIndex ?? cursor;\n const colSpan = Math.max(1, cell.colSpan ?? 1);\n const rowSpan = Math.max(1, cell.rowSpan ?? 1);\n if (start >= widths.length) {\n opts.labels?.omit({ role: 'axis-label', reason: 'static-viewport', required: true,\n example: cell.title, path: '/columns' });\n cursor = start + colSpan;\n continue;\n }\n const x = opts.rect.x + sumWidths(widths.slice(0, start));\n const y = opts.rect.y + rowIndex * metrics.headerHeight;\n const w = sumWidths(widths.slice(start, start + colSpan));\n const h = metrics.headerHeight * rowSpan;\n paintCellBox(opts.ctx, x, y, w, h, opts.tokens.color.surface, opts.tokens.color.border, false, pen);\n paintCellText(opts, {\n x,\n y,\n width: w,\n height: h,\n text: cell.title,\n align: cell.align ?? 'left',\n color: opts.tokens.color.text,\n weight: opts.tokens.font.weight.bold,\n paddingX: metrics.paddingX,\n background: opts.tokens.color.surface,\n role: 'axis-label',\n });\n cursor = start + colSpan;\n }\n });\n}\n\nfunction paintBodyRowCanvas(\n opts: CanvasTableOptions,\n widths: readonly number[],\n rowIndex: number,\n y: number,\n metrics: ReturnType<typeof densityMetrics>,\n pen?: RoughPen | null,\n): void {\n const cls = opts.rowClass?.(rowIndex) ?? 'normal';\n let x = opts.rect.x;\n for (let colIndex = 0; colIndex < widths.length; colIndex += 1) {\n const column = opts.columns[colIndex] as ViewColumn;\n const width = widths[colIndex] ?? 0;\n const cell = opts.getCell(rowIndex, colIndex);\n const baseBg = canvasRowBackground(opts, rowIndex, cls);\n const conditional = resolveCanvasConditional(opts, column, colIndex, cell, baseBg);\n const bg = conditional.background ?? baseBg;\n paintCellBox(opts.ctx, x, y, width, metrics.rowHeight, bg, opts.tokens.color.border, false, pen);\n if (conditional.bar) paintDataBar(opts, x, y, width, metrics.rowHeight, conditional.bar, pen);\n const indent = opts.cellIndent?.(rowIndex, colIndex) ?? 0;\n const text = conditional.showValue === false ? '' : formatDisplayValue(cell.value, column);\n const color = negativeTextColor(cell.value, column, conditional.color ?? opts.tokens.color.text);\n if (opts.dataRepresentation !== 'aggregate' ||\n (colIndex >= (opts.rowHeaderSpan ?? 0) && cell.raw != null && Number.isFinite(cell.raw))) {\n opts.evidence?.mark('cell', x, y, width, metrics.rowHeight, color, 1, opts.rect, 1, bg);\n }\n const weight = conditional.weight ?? (cls === 'normal' ? opts.tokens.font.weight.normal : opts.tokens.font.weight.bold);\n paintCellValueWithIcon(opts, {\n x,\n y,\n width,\n height: metrics.rowHeight,\n text,\n align: column.align,\n color,\n weight,\n paddingX: metrics.paddingX + indent,\n icon: conditional.icon,\n iconColor: conditional.iconColor,\n iconPosition: conditional.iconPosition,\n background: bg,\n });\n x += width;\n }\n}\n\nfunction paintFooterCanvas(\n opts: CanvasTableOptions,\n widths: readonly number[],\n y: number,\n metrics: ReturnType<typeof densityMetrics>,\n pen?: RoughPen | null,\n): void {\n let x = opts.rect.x;\n for (let colIndex = 0; colIndex < widths.length; colIndex += 1) {\n const column = opts.columns[colIndex] as ViewColumn;\n const width = widths[colIndex] ?? 0;\n const cell = opts.footerRow?.cells[colIndex] ?? { value: null, raw: null };\n paintCellBox(opts.ctx, x, y, width, metrics.rowHeight, opts.tokens.color.surface, opts.tokens.color.border, true, pen);\n paintCellText(opts, {\n x,\n y,\n width,\n height: metrics.rowHeight,\n text: cell.label ? String(cell.value ?? '') : formatDisplayValue(cell.value, column),\n align: column.align,\n color: negativeTextColor(cell.value, column, opts.tokens.color.text),\n weight: opts.tokens.font.weight.bold,\n paddingX: metrics.paddingX,\n });\n x += width;\n }\n}\n\nfunction paintClippedCueCanvas(\n opts: CanvasTableOptions,\n y: number,\n metrics: ReturnType<typeof densityMetrics>,\n remaining: number,\n hiddenColumns = 0,\n): void {\n paintCellBox(opts.ctx, opts.rect.x, y, opts.rect.width, metrics.rowHeight, opts.tokens.color.background, opts.tokens.color.border);\n paintCellText(opts, {\n x: opts.rect.x,\n y,\n width: opts.rect.width,\n height: metrics.rowHeight,\n text: hiddenColumns\n ? `\u2026${remaining ? `${remaining} more rows \u00B7 ` : ''}${hiddenColumns} more columns`\n : `\u2026${remaining} more`,\n align: 'center',\n color: opts.tokens.color.textMuted,\n weight: opts.tokens.font.weight.medium,\n paddingX: metrics.paddingX,\n });\n}\n\nfunction paintCellBox(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n width: number,\n height: number,\n background: string,\n border: string,\n topBorder = false,\n pen?: RoughPen | null,\n): void {\n ctx.save();\n ctx.fillStyle = background;\n ctx.fillRect(x, y, width, height);\n if (pen) {\n // Flat fill (above) keeps stripes / conditional color-scales unchanged; only\n // the separators are hand-drawn. An \"L\" through the right + bottom edges is\n // one doubled wobbly stroke per cell (shared edges drawn once by each cell).\n pen.polyline(\n [\n { x: x + width, y },\n { x: x + width, y: y + height },\n { x, y: y + height },\n ],\n { stroke: border, strokeWidth: 1 },\n );\n if (topBorder) {\n pen.polyline([{ x, y }, { x: x + width, y }], { stroke: border, strokeWidth: 1 });\n }\n ctx.restore();\n return;\n }\n ctx.strokeStyle = border;\n ctx.lineWidth = 1;\n ctx.beginPath();\n ctx.moveTo(x + width, y);\n ctx.lineTo(x + width, y + height);\n ctx.moveTo(x, y + height);\n ctx.lineTo(x + width, y + height);\n if (topBorder) {\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n }\n ctx.stroke();\n ctx.restore();\n}\nfunction paintCellValueWithIcon(\n opts: CanvasTableOptions,\n input: {\n x: number;\n y: number;\n width: number;\n height: number;\n text: string;\n align: 'left' | 'center' | 'right';\n color: string;\n weight: number | string;\n paddingX: number;\n icon?: string;\n iconColor?: string;\n iconPosition?: 'left' | 'right';\n background?: string;\n },\n): void {\n const font = fontString(opts.tokens.font.size.small, opts.tokens.font.family, input.weight);\n const gap = input.icon ? 6 : 0;\n const iconFont = fontString(opts.tokens.font.size.small, opts.tokens.font.family, opts.tokens.font.weight.bold);\n const iconW = input.icon ? measureText(input.icon, iconFont).width : 0;\n const textMax = Math.max(0, input.width - input.paddingX * 2 - iconW - gap);\n const text = ellipsize(input.text, textMax, font);\n const textW = measureText(text, font).width;\n const groupW = textW + iconW + gap;\n let start = input.x + input.paddingX;\n if (input.align === 'right') start = input.x + input.width - input.paddingX - groupW;\n else if (input.align === 'center') start = input.x + (input.width - groupW) / 2;\n const midY = input.y + input.height / 2;\n const iconFirst = input.icon && input.iconPosition !== 'right';\n const iconX = iconFirst ? start : start + textW + gap;\n const textX = iconFirst ? start + iconW + gap : start;\n recordCanvasLabel(opts.labels, {\n x: textX, y: midY, text, font, color: input.color, size: opts.tokens.font.size.small, baseline: 'middle',\n }, { fullText: input.text, budget: textMax, background: input.background, clip: opts.rect });\n if (!text && input.text) opts.labels?.omit({ role: 'data-label', reason: 'space', required: false });\n\n if (input.icon) {\n recordCanvasLabel(opts.labels, {\n x: iconX, y: midY, text: input.icon, font: iconFont, color: input.iconColor ?? input.color,\n size: opts.tokens.font.size.small, baseline: 'middle',\n }, { background: input.background, clip: opts.rect });\n paintCanvasText(opts.ctx, {\n x: iconX,\n y: midY,\n text: input.icon,\n font: iconFont,\n color: input.iconColor ?? input.color,\n size: opts.tokens.font.size.small,\n baseline: 'middle',\n });\n }\n paintRawCellText(opts, textX, midY, text, font, input.color, opts.tokens.font.size.small);\n}\n\nfunction paintCellText(\n opts: CanvasTableOptions,\n input: {\n x: number;\n y: number;\n width: number;\n height: number;\n text: string;\n align: 'left' | 'center' | 'right';\n color: string;\n weight: number | string;\n paddingX: number;\n background?: string;\n role?: LabelRole;\n },\n): void {\n const font = fontString(opts.tokens.font.size.small, opts.tokens.font.family, input.weight);\n const maxWidth = Math.max(0, input.width - input.paddingX * 2);\n const text = ellipsize(input.text, maxWidth, font);\n const x =\n input.align === 'right'\n ? input.x + input.width - input.paddingX\n : input.align === 'center'\n ? input.x + input.width / 2\n : input.x + input.paddingX;\n recordCanvasLabel(opts.labels, {\n x, y: input.y + input.height / 2, text, font, color: input.color, size: opts.tokens.font.size.small,\n align: input.align, baseline: 'middle',\n }, { fullText: input.text, budget: maxWidth, background: input.background, role: input.role, clip: opts.rect });\n if (!text && input.text) opts.labels?.omit({ role: input.role ?? 'data-label', reason: 'space', required: input.role === 'axis-label' });\n paintRawCellText(opts, x, input.y + input.height / 2, text, font, input.color, opts.tokens.font.size.small, input.align);\n}\n\nfunction paintRawCellText(\n opts: CanvasTableOptions,\n x: number,\n y: number,\n text: string,\n font: string,\n color: string,\n size: number,\n align: CanvasTextAlign = 'left',\n): void {\n if (!text) return;\n paintCanvasText(opts.ctx, {\n x,\n y,\n text,\n font,\n color,\n size,\n align,\n baseline: 'middle',\n });\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
4
|
+
"sourcesContent": ["import { paintCanvasText } from '../../render/overlayText';\nimport { ellipsize, measureText } from '../../render/text';\nimport { RoughPen } from '../../rough';\nimport { roundedRect } from '../../shape';\nimport { recordCanvasLabel, type LabelRole } from '../../render/labelLedger';\nimport {\n BAR_GAP,\n BAR_LANE_ALPHA,\n BAR_OVERLAY_ALPHA,\n barFill,\n barTrack,\n buildColumnFormatter,\n negativeTextColor,\n type CellPaint,\n type ColumnFormatter,\n} from './conditional';\nimport { layoutColumns } from './layout';\nimport { sparklineGeometry } from './sparkline';\nimport { fontFor, resolveTableStyle, rowBackground, type TableStyle } from './style';\nimport {\n cellText,\n defaultRowInfo,\n normalizedHeaderRows,\n sumWidths,\n type HeaderCell,\n type RowKind,\n type TableViewInput,\n type ViewCell,\n type ViewRowInfo,\n} from './types';\n\nexport type CanvasTableOptions = TableViewInput & {\n ctx: CanvasRenderingContext2D;\n /** Disclose rows/columns that a static export cannot show (default true). */\n clippedCue?: boolean;\n /** Rows the table measures for column widths (all hierarchy rows of a matrix). */\n measure?: Pick<TableViewInput, 'rowCount' | 'getCell' | 'rowInfo'>;\n};\n\nconst DEFAULT_FORMAT_KINDS: readonly RowKind[] = ['leaf'];\n\ninterface Frame {\n o: CanvasTableOptions;\n ctx: CanvasRenderingContext2D;\n style: TableStyle;\n widths: number[];\n valueWidths: number[];\n formatters: Array<ColumnFormatter | null>;\n pen: RoughPen | null;\n x0: number;\n width: number;\n}\n\n/**\n * Paint a table into a canvas \u2014 the static (headless/PNG) counterpart of the\n * DOM table, sharing its layout, styling and conditional formatting. A static\n * snapshot cannot scroll, so rows and columns that do not fit are counted,\n * disclosed in a continuation row, and recorded as suppressed labels.\n */\nexport function paintTableCanvas(opts: CanvasTableOptions): void {\n const { ctx, rect, tokens } = opts;\n const style = resolveTableStyle(tokens, opts.density, opts.gridlines);\n const m = style.metrics;\n const formatters = opts.formatters ?? opts.columns.map((column, i) =>\n buildColumnFormatter(column.conditionalFormat, opts.conditionalDomains?.[i] ?? null, tokens, style.color.background));\n const available = Math.max(0, rect.width - 2);\n const layout = layoutColumns(opts.measure ? { ...opts, ...opts.measure } : opts, style, formatters, available, 'static');\n const widths = layout.widths.slice(0, layout.visibleCount);\n const hiddenColumns = opts.columns.length - widths.length;\n opts.widths = widths;\n\n const headerRows = normalizedHeaderRows(opts);\n const headerHeight = headerRows.length * m.headerHeight;\n const footerHeight = opts.footerRow ? m.rowHeight : 0;\n const capacity = Math.max(0, Math.floor((rect.height - 2 - headerHeight - footerHeight) / m.rowHeight));\n const clipped = capacity < opts.rowCount || hiddenColumns > 0;\n const cue = clipped && opts.clippedCue !== false && capacity > 1;\n const rowsToDraw = Math.max(0, Math.min(opts.rowCount, capacity - (cue ? 1 : 0)));\n const bodyRows = rowsToDraw + (cue ? 1 : 0);\n const frameHeight = Math.max(0, Math.min(rect.height, headerHeight + bodyRows * m.rowHeight + footerHeight + 2));\n const frameWidth = Math.max(0, Math.min(rect.width, sumWidths(widths) + 2));\n\n opts.labels?.omit({ role: 'data-label', reason: 'static-viewport', required: true,\n count: (opts.rowCount - rowsToDraw) * opts.columns.length + rowsToDraw * hiddenColumns, path: '/dimensions' });\n if (opts.dataRepresentation === 'rows') opts.evidence?.data(opts.columns.length ? rowsToDraw : 0);\n else if (opts.dataRepresentation === 'aggregate') {\n opts.evidence?.data(opts.sourceRepresentedRows ?? opts.evidence.snapshot().data.inputRows, 'aggregate');\n }\n\n const pen = opts.sketch ? new RoughPen(ctx, opts.sketch) : null;\n const f: Frame = { o: opts, ctx, style, widths, valueWidths: layout.valueWidths, formatters, pen, x0: rect.x + 1, width: frameWidth };\n\n ctx.save();\n ctx.beginPath();\n if (pen) ctx.rect(rect.x, rect.y, frameWidth, frameHeight);\n else roundedRect(ctx, rect.x, rect.y, frameWidth, frameHeight, style.radius);\n ctx.fillStyle = style.color.background;\n ctx.fill();\n ctx.clip();\n\n paintHeader(f, headerRows);\n const info = opts.rowInfo ?? defaultRowInfo;\n const bodyTop = rect.y + 1 + headerHeight;\n for (let row = 0; row < rowsToDraw; row++) paintRow(f, row, info(row), bodyTop + row * m.rowHeight);\n if (cue) {\n paintCue(f, bodyTop + rowsToDraw * m.rowHeight, opts.rowCount - rowsToDraw, hiddenColumns);\n } else if (clipped && opts.clippedCue !== false) {\n opts.labels?.omit({ role: 'other', reason: 'space', required: false, example: 'Additional rows or columns', path: '/dimensions' });\n }\n if (opts.footerRow) paintFooter(f, bodyTop + bodyRows * m.rowHeight);\n const rulesBottom = bodyTop + rowsToDraw * m.rowHeight;\n paintVerticalRules(f, bodyTop - headerHeight, rulesBottom, headerRows.length);\n if (opts.footerRow) paintVerticalRules(f, bodyTop + bodyRows * m.rowHeight, bodyTop + bodyRows * m.rowHeight + footerHeight, 0);\n ctx.restore();\n\n if (pen) pen.rect(rect.x, rect.y, frameWidth, frameHeight, { stroke: tokens.color.border });\n else {\n ctx.save();\n ctx.beginPath();\n roundedRect(ctx, rect.x + 0.5, rect.y + 0.5, Math.max(0, frameWidth - 1), Math.max(0, frameHeight - 1), style.radius);\n ctx.lineWidth = 1;\n ctx.strokeStyle = tokens.color.border;\n ctx.stroke();\n ctx.restore();\n }\n}\n\nfunction colX(f: Frame, col: number): number {\n return f.x0 + sumWidths(f.widths, 0, col);\n}\n\nfunction paintHeader(f: Frame, rows: HeaderCell[][]): void {\n const { o, style } = f;\n const m = style.metrics;\n const top = o.rect.y + 1;\n fillRect(f, f.x0, top, f.width - 2, rows.length * m.headerHeight, style.color.headerBg);\n rows.forEach((row, rowIndex) => {\n let cursor = 0;\n for (const cell of row) {\n const start = cell.colIndex ?? cursor;\n const span = Math.max(1, cell.colSpan ?? 1);\n cursor = start + span;\n if (start >= f.widths.length) {\n o.labels?.omit({ role: 'axis-label', reason: 'static-viewport', required: true, example: cell.title, path: '/columns' });\n continue;\n }\n const x = colX(f, start);\n const w = sumWidths(f.widths, start, Math.min(f.widths.length, start + span));\n const y = top + rowIndex * m.headerHeight;\n const h = m.headerHeight * Math.max(1, cell.rowSpan ?? 1);\n const band = cell.colIndex == null && span > 1;\n const sorted = cell.colIndex != null && o.sortState?.col === cell.colIndex;\n const arrow = sorted ? (o.sortState?.dir === 'desc' ? '\u2193' : '\u2191') : '';\n const align = cell.align ?? 'left';\n const arrowRoom = arrow ? 14 : 0;\n paintText(f, {\n x: align === 'right' ? x + arrowRoom : x, y, width: w - arrowRoom, height: h, text: cell.title, align,\n color: sorted ? style.color.text : style.color.headerText, weight: style.weight.bold,\n background: style.color.headerBg, role: 'axis-label', padLeft: m.paddingX, padRight: m.paddingX,\n });\n if (arrow) {\n const font = fontFor(style, style.weight.bold);\n const label = Math.min(measureText(cell.title, font).width, w - m.paddingX * 2 - arrowRoom);\n const ax = align === 'right' ? x + w - m.paddingX - label - 12 : align === 'center' ? x + (w + label) / 2 + 3 : x + m.paddingX + label + 3;\n paintCanvasText(f.ctx, { x: ax, y: y + h / 2, text: arrow, font, color: style.color.accent, size: m.fontSize, baseline: 'middle' });\n }\n hRule(f, x, x + w, y + h, band ? style.color.rule : style.color.ruleStrong);\n if (start > 0 && o.columns[start]?.groupStart) vRule(f, x, y, y + h, style.color.rule);\n }\n });\n}\n\nfunction paintRow(f: Frame, row: number, info: ViewRowInfo, y: number): void {\n const { o, style } = f;\n const m = style.metrics;\n const stripe = o.striped === true && row % 2 === 1 && info.kind === 'leaf';\n const rowBg = o.highlighted?.(row) ? style.color.highlight : rowBackground(style, info.kind, stripe);\n fillRect(f, f.x0, y, f.width - 2, m.rowHeight, rowBg);\n const kinds = o.formatKinds ?? DEFAULT_FORMAT_KINDS;\n const rowFormatters = o.rowFormatters ? o.rowFormatters(row) : kinds.includes(info.kind) ? f.formatters : null;\n for (let col = 0; col < f.widths.length; col++) {\n const cell = o.getCell(row, col);\n const formatter = rowFormatters?.[col] ?? null;\n const paint = formatter ? formatter(cell) : null;\n paintCell(f, row, col, info, cell, paint, y, rowBg);\n }\n if (info.kind === 'subtotal') hRule(f, f.x0, f.x0 + f.width - 2, y, style.color.rule);\n if (style.gridlines === 'horizontal' || style.gridlines === 'both') hRule(f, f.x0, f.x0 + f.width - 2, y + m.rowHeight, style.color.rule);\n}\n\nfunction paintCell(\n f: Frame, row: number, col: number, info: ViewRowInfo, cell: ViewCell, paint: CellPaint | null, y: number, rowBg: string,\n): void {\n const { o, style } = f;\n const m = style.metrics;\n const column = o.columns[col];\n const x = colX(f, col);\n const w = f.widths[col];\n const bg = paint?.background ?? rowBg;\n if (paint?.background) fillRect(f, x, y, w, m.rowHeight, paint.background);\n const strong = info.kind !== 'leaf';\n const weight = paint?.weight ?? (strong || column.total ? style.weight.bold : style.weight.normal);\n const color = paint?.color ?? negativeTextColor(cell.value, column, style.color.text, style.color.negative);\n const text = paint?.showValue === false ? '' : cellText(cell, column);\n if (countsAsMark(o, col, cell)) o.evidence?.mark('cell', x, y, w, m.rowHeight, color, 1, o.rect, 1, bg);\n if (column.rowHeader) {\n const indent = info.depth * m.indent;\n const toggleX = x + m.paddingX + indent;\n if (info.expandable) paintChevron(f, toggleX, y + m.rowHeight / 2, info.expanded !== false);\n const hierarchy = info.expandable || hasHierarchy(o);\n const left = m.paddingX + indent + (hierarchy ? m.toggle + 4 : 0);\n paintText(f, { x, y, width: w, height: m.rowHeight, text, align: 'left', color, weight, background: bg, padLeft: left, padRight: m.paddingX });\n return;\n }\n if (column.sparkline && Array.isArray(cell.value)) {\n paintSparkline(f, cell.value, column.sparkline, x + m.paddingX, y + 6, Math.max(0, w - m.paddingX * 2), m.rowHeight - 12);\n return;\n }\n if (paint?.bar) {\n const track = barTrack(w, m.paddingX, f.valueWidths[col] ?? 0, column.align, paint.showValue !== false);\n paintBar(f, x + track.left, y, track.width, paint, track.overlay);\n }\n const iconFont = fontFor(style, style.weight.bold);\n const iconW = paint?.icon ? measureText(paint.icon, iconFont).width : 0;\n const gap = paint?.icon ? 6 : 0;\n const font = fontFor(style, weight);\n const budget = Math.max(0, w - m.paddingX * 2 - iconW - gap);\n const shown = ellipsize(text, budget, font);\n const textW = measureText(shown, font).width;\n const group = textW + iconW + gap;\n const start = column.align === 'right' ? x + w - m.paddingX - group : column.align === 'center' ? x + (w - group) / 2 : x + m.paddingX;\n const iconFirst = paint?.icon && paint.iconPosition !== 'right';\n const textX = iconFirst ? start + iconW + gap : start;\n const midY = y + m.rowHeight / 2;\n if (paint?.icon) {\n const iconX = iconFirst ? start : start + textW + gap;\n const command = { x: iconX, y: midY, text: paint.icon, font: iconFont, color: paint.iconColor ?? color, size: m.fontSize, baseline: 'middle' as const };\n recordCanvasLabel(o.labels, command, { background: bg, clip: o.rect });\n paintCanvasText(f.ctx, command);\n }\n if (!text) return;\n const command = { x: textX, y: midY, text: shown, font, color, size: m.fontSize, baseline: 'middle' as const };\n recordCanvasLabel(o.labels, command, { fullText: text, budget, background: bg, clip: o.rect });\n if (!shown) o.labels?.omit({ role: 'data-label', reason: 'space', required: false });\n else paintCanvasText(f.ctx, command);\n}\n\nfunction hasHierarchy(o: CanvasTableOptions): boolean {\n const source = o.measure ?? o;\n const info = source.rowInfo;\n if (!info) return false;\n for (let i = 0; i < Math.min(source.rowCount, 200); i++) if (info(i).expandable) return true;\n return false;\n}\n\nfunction paintBar(f: Frame, left: number, y: number, track: number, paint: CellPaint, overlay: boolean): void {\n const { ctx, style } = f;\n const m = style.metrics;\n const bar = paint.bar!;\n const bx = left + bar.from * track;\n const bw = Math.max(0, (bar.to - bar.from) * track);\n const by = y + (m.rowHeight - m.barHeight) / 2;\n const fill = barFill(bar.color, overlay ? BAR_OVERLAY_ALPHA : BAR_LANE_ALPHA);\n if (bar.zero !== undefined) {\n const zx = Math.round(left + bar.zero * track) + 0.5;\n ctx.save();\n ctx.strokeStyle = style.color.ruleStrong;\n ctx.lineWidth = 1;\n ctx.beginPath();\n ctx.moveTo(zx, by - 2);\n ctx.lineTo(zx, by + m.barHeight + 2);\n ctx.stroke();\n ctx.restore();\n }\n if (bw <= 0) return;\n if (f.pen) {\n f.pen.rect(bx, by, bw, m.barHeight, { stroke: fill, fill, fillAlpha: 0.9, strokeAlpha: 0.9 });\n return;\n }\n ctx.save();\n ctx.beginPath();\n roundedRect(ctx, bx, by, bw, m.barHeight, Math.min(2, bw / 2));\n ctx.fillStyle = fill;\n ctx.fill();\n ctx.restore();\n}\n\nfunction paintSparkline(f: Frame, values: unknown[], spark: NonNullable<CanvasTableOptions['columns'][number]['sparkline']>, x: number, y: number, w: number, h: number): void {\n if (w <= 2 || h <= 2) return;\n const shape = sparklineGeometry(values, spark, w, h);\n if (!shape.points.length) return;\n const ctx = f.ctx;\n const color = spark.color ?? f.o.tokens.color.accent;\n ctx.save();\n ctx.translate(x, y);\n if (spark.type === 'bar') {\n ctx.fillStyle = barFill(color, 0.85);\n for (const p of shape.points) ctx.fillRect(p.x - shape.barWidth / 2, Math.min(p.y, p.base), shape.barWidth, Math.max(0.5, Math.abs(p.base - p.y)));\n } else {\n if (spark.type === 'area') {\n ctx.fillStyle = barFill(color, 0.18);\n for (const run of shape.runs) {\n if (run.length < 2) continue;\n ctx.beginPath();\n ctx.moveTo(run[0].x, run[0].base);\n for (const p of run) ctx.lineTo(p.x, p.y);\n ctx.lineTo(run[run.length - 1].x, run[run.length - 1].base);\n ctx.closePath();\n ctx.fill();\n }\n }\n ctx.strokeStyle = color;\n ctx.lineWidth = 1.5;\n ctx.lineJoin = 'round';\n ctx.lineCap = 'round';\n for (const run of shape.runs) {\n ctx.beginPath();\n run.forEach((p, i) => (i ? ctx.lineTo(p.x, p.y) : ctx.moveTo(p.x, p.y)));\n if (run.length === 1) ctx.lineTo(run[0].x + 0.01, run[0].y);\n ctx.stroke();\n }\n }\n ctx.restore();\n f.o.evidence?.segments(shape.points.length);\n}\n\nfunction paintChevron(f: Frame, x: number, cy: number, expanded: boolean): void {\n const { ctx, style } = f;\n const box = style.metrics.toggle;\n const cx = x + box / 2;\n ctx.save();\n ctx.strokeStyle = style.color.textMuted;\n ctx.lineWidth = 1.6;\n ctx.lineCap = 'round';\n ctx.lineJoin = 'round';\n ctx.beginPath();\n if (expanded) {\n ctx.moveTo(cx - 3, cy - 1.5);\n ctx.lineTo(cx, cy + 1.5);\n ctx.lineTo(cx + 3, cy - 1.5);\n } else {\n ctx.moveTo(cx - 1.5, cy - 3);\n ctx.lineTo(cx + 1.5, cy);\n ctx.lineTo(cx - 1.5, cy + 3);\n }\n ctx.stroke();\n ctx.restore();\n}\n\nfunction paintFooter(f: Frame, y: number): void {\n const { o, style } = f;\n const m = style.metrics;\n const kind: RowKind = o.footerRow?.kind === 'grandtotal' ? 'grandtotal' : 'subtotal';\n fillRect(f, f.x0, y, f.width - 2, m.rowHeight, style.color.totalBg);\n hRule(f, f.x0, f.x0 + f.width - 2, y, style.color.ruleStrong);\n for (let col = 0; col < f.widths.length; col++) {\n const cell = o.footerRow?.cells[col] ?? { value: null, raw: null };\n const info: ViewRowInfo = { kind, depth: 0 };\n if (o.dataRepresentation === 'aggregate' || o.columns[col]?.rowHeader) {\n paintCell(f, -1, col, info, cell, null, y, style.color.totalBg);\n continue;\n }\n const column = o.columns[col];\n const color = negativeTextColor(cell.value, column, style.color.text, style.color.negative);\n paintText(f, {\n x: colX(f, col), y, width: f.widths[col], height: m.rowHeight, text: cellText(cell, column), align: column.align,\n color, weight: style.weight.bold, background: style.color.totalBg, padLeft: m.paddingX, padRight: m.paddingX,\n });\n }\n}\n\nfunction paintCue(f: Frame, y: number, remaining: number, hiddenColumns: number): void {\n const { style } = f;\n const m = style.metrics;\n fillRect(f, f.x0, y, f.width - 2, m.rowHeight, style.color.background);\n paintText(f, {\n x: f.x0, y, width: f.width - 2, height: m.rowHeight,\n text: hiddenColumns\n ? `\u2026${remaining ? `${remaining} more rows \u00B7 ` : ''}${hiddenColumns} more columns`\n : `\u2026${remaining} more`,\n align: 'center', color: style.color.textMuted, weight: style.weight.medium,\n background: style.color.background, padLeft: m.paddingX, padRight: m.paddingX,\n });\n}\n\nfunction paintVerticalRules(f: Frame, top: number, bottom: number, headerRowCount: number): void {\n const { o, style } = f;\n const all = style.gridlines === 'vertical' || style.gridlines === 'both';\n const bodyTop = top + headerRowCount * style.metrics.headerHeight;\n for (let col = 1; col < f.widths.length; col++) {\n const x = colX(f, col);\n if (all) vRule(f, x, top, bottom, style.color.rule);\n else if (o.columns[col]?.groupStart) vRule(f, x, bodyTop, bottom, style.color.rule);\n if (col === (o.frozenColumns ?? 0) && col > 0 && !all) vRule(f, x, bodyTop, bottom, style.color.ruleStrong);\n }\n}\n\nfunction fillRect(f: Frame, x: number, y: number, w: number, h: number, color: string): void {\n f.ctx.fillStyle = color;\n f.ctx.fillRect(x, y, w, h);\n}\n\nfunction hRule(f: Frame, x1: number, x2: number, y: number, color: string): void {\n if (f.pen) {\n f.pen.polyline([{ x: x1, y }, { x: x2, y }], { stroke: f.o.tokens.color.border, strokeWidth: 1 });\n return;\n }\n const yy = Math.round(y) - 0.5;\n f.ctx.save();\n f.ctx.strokeStyle = color;\n f.ctx.lineWidth = 1;\n f.ctx.beginPath();\n f.ctx.moveTo(x1, yy);\n f.ctx.lineTo(x2, yy);\n f.ctx.stroke();\n f.ctx.restore();\n}\n\nfunction vRule(f: Frame, x: number, y1: number, y2: number, color: string): void {\n if (f.pen) {\n f.pen.polyline([{ x, y: y1 }, { x, y: y2 }], { stroke: f.o.tokens.color.border, strokeWidth: 1 });\n return;\n }\n const xx = Math.round(x) + 0.5;\n f.ctx.save();\n f.ctx.strokeStyle = color;\n f.ctx.lineWidth = 1;\n f.ctx.beginPath();\n f.ctx.moveTo(xx, y1);\n f.ctx.lineTo(xx, y2);\n f.ctx.stroke();\n f.ctx.restore();\n}\n\ninterface TextInput {\n x: number;\n y: number;\n width: number;\n height: number;\n text: string;\n align: 'left' | 'center' | 'right';\n color: string;\n weight: number;\n background: string;\n padLeft: number;\n padRight: number;\n role?: LabelRole;\n}\n\nfunction paintText(f: Frame, input: TextInput): void {\n const { o, style } = f;\n const font = fontFor(style, input.weight);\n const budget = Math.max(0, input.width - input.padLeft - input.padRight);\n const text = ellipsize(input.text, budget, font);\n const x = input.align === 'right'\n ? input.x + input.width - input.padRight\n : input.align === 'center'\n ? input.x + input.padLeft + budget / 2\n : input.x + input.padLeft;\n const command = { x, y: input.y + input.height / 2, text, font, color: input.color, size: style.metrics.fontSize, align: input.align, baseline: 'middle' as const };\n recordCanvasLabel(o.labels, command, { fullText: input.text, budget, background: input.background, role: input.role, clip: o.rect });\n if (!text && input.text) o.labels?.omit({ role: input.role ?? 'data-label', reason: 'space', required: input.role === 'axis-label' });\n if (text) paintCanvasText(f.ctx, command);\n}\n\nfunction countsAsMark(o: TableViewInput, col: number, cell: ViewCell): boolean {\n if (o.dataRepresentation !== 'aggregate') return true;\n return !o.columns[col]?.rowHeader && typeof cell.raw === 'number' && Number.isFinite(cell.raw);\n}\n\nexport { BAR_GAP };\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,uBAAuB;AAChC,SAAS,WAAW,mBAAmB;AACvC,SAAS,gBAAgB;AACzB,SAAS,mBAAmB;AAC5B,SAAS,yBAAyC;AAClD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,qBAAqB;AAC9B,SAAS,yBAAyB;AAClC,SAAS,SAAS,mBAAmB,qBAAsC;AAC3E;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAMK;AAUP,MAAM,uBAA2C,CAAC,MAAM;AAoBjD,SAAS,iBAAiB,MAAgC;AAC/D,QAAM,EAAE,KAAK,MAAM,OAAO,IAAI;AAC9B,QAAM,QAAQ,kBAAkB,QAAQ,KAAK,SAAS,KAAK,SAAS;AACpE,QAAM,IAAI,MAAM;AAChB,QAAM,aAAa,KAAK,cAAc,KAAK,QAAQ,IAAI,CAAC,QAAQ,MAC9D,qBAAqB,OAAO,mBAAmB,KAAK,qBAAqB,CAAC,KAAK,MAAM,QAAQ,MAAM,MAAM,UAAU,CAAC;AACtH,QAAM,YAAY,KAAK,IAAI,GAAG,KAAK,QAAQ,CAAC;AAC5C,QAAM,SAAS,cAAc,KAAK,UAAU,EAAE,GAAG,MAAM,GAAG,KAAK,QAAQ,IAAI,MAAM,OAAO,YAAY,WAAW,QAAQ;AACvH,QAAM,SAAS,OAAO,OAAO,MAAM,GAAG,OAAO,YAAY;AACzD,QAAM,gBAAgB,KAAK,QAAQ,SAAS,OAAO;AACnD,OAAK,SAAS;AAEd,QAAM,aAAa,qBAAqB,IAAI;AAC5C,QAAM,eAAe,WAAW,SAAS,EAAE;AAC3C,QAAM,eAAe,KAAK,YAAY,EAAE,YAAY;AACpD,QAAM,WAAW,KAAK,IAAI,GAAG,KAAK,OAAO,KAAK,SAAS,IAAI,eAAe,gBAAgB,EAAE,SAAS,CAAC;AACtG,QAAM,UAAU,WAAW,KAAK,YAAY,gBAAgB;AAC5D,QAAM,MAAM,WAAW,KAAK,eAAe,SAAS,WAAW;AAC/D,QAAM,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,UAAU,YAAY,MAAM,IAAI,EAAE,CAAC;AAChF,QAAM,WAAW,cAAc,MAAM,IAAI;AACzC,QAAM,cAAc,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,QAAQ,eAAe,WAAW,EAAE,YAAY,eAAe,CAAC,CAAC;AAC/G,QAAM,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,OAAO,UAAU,MAAM,IAAI,CAAC,CAAC;AAE1E,OAAK,QAAQ,KAAK;AAAA,IAAE,MAAM;AAAA,IAAc,QAAQ;AAAA,IAAmB,UAAU;AAAA,IAC3E,QAAQ,KAAK,WAAW,cAAc,KAAK,QAAQ,SAAS,aAAa;AAAA,IAAe,MAAM;AAAA,EAAc,CAAC;AAC/G,MAAI,KAAK,uBAAuB,OAAQ,MAAK,UAAU,KAAK,KAAK,QAAQ,SAAS,aAAa,CAAC;AAAA,WACvF,KAAK,uBAAuB,aAAa;AAChD,SAAK,UAAU,KAAK,KAAK,yBAAyB,KAAK,SAAS,SAAS,EAAE,KAAK,WAAW,WAAW;AAAA,EACxG;AAEA,QAAM,MAAM,KAAK,SAAS,IAAI,SAAS,KAAK,KAAK,MAAM,IAAI;AAC3D,QAAM,IAAW,EAAE,GAAG,MAAM,KAAK,OAAO,QAAQ,aAAa,OAAO,aAAa,YAAY,KAAK,IAAI,KAAK,IAAI,GAAG,OAAO,WAAW;AAEpI,MAAI,KAAK;AACT,MAAI,UAAU;AACd,MAAI,IAAK,KAAI,KAAK,KAAK,GAAG,KAAK,GAAG,YAAY,WAAW;AAAA,MACpD,aAAY,KAAK,KAAK,GAAG,KAAK,GAAG,YAAY,aAAa,MAAM,MAAM;AAC3E,MAAI,YAAY,MAAM,MAAM;AAC5B,MAAI,KAAK;AACT,MAAI,KAAK;AAET,cAAY,GAAG,UAAU;AACzB,QAAM,OAAO,KAAK,WAAW;AAC7B,QAAM,UAAU,KAAK,IAAI,IAAI;AAC7B,WAAS,MAAM,GAAG,MAAM,YAAY,MAAO,UAAS,GAAG,KAAK,KAAK,GAAG,GAAG,UAAU,MAAM,EAAE,SAAS;AAClG,MAAI,KAAK;AACP,aAAS,GAAG,UAAU,aAAa,EAAE,WAAW,KAAK,WAAW,YAAY,aAAa;AAAA,EAC3F,WAAW,WAAW,KAAK,eAAe,OAAO;AAC/C,SAAK,QAAQ,KAAK,EAAE,MAAM,SAAS,QAAQ,SAAS,UAAU,OAAO,SAAS,8BAA8B,MAAM,cAAc,CAAC;AAAA,EACnI;AACA,MAAI,KAAK,UAAW,aAAY,GAAG,UAAU,WAAW,EAAE,SAAS;AACnE,QAAM,cAAc,UAAU,aAAa,EAAE;AAC7C,qBAAmB,GAAG,UAAU,cAAc,aAAa,WAAW,MAAM;AAC5E,MAAI,KAAK,UAAW,oBAAmB,GAAG,UAAU,WAAW,EAAE,WAAW,UAAU,WAAW,EAAE,YAAY,cAAc,CAAC;AAC9H,MAAI,QAAQ;AAEZ,MAAI,IAAK,KAAI,KAAK,KAAK,GAAG,KAAK,GAAG,YAAY,aAAa,EAAE,QAAQ,OAAO,MAAM,OAAO,CAAC;AAAA,OACrF;AACH,QAAI,KAAK;AACT,QAAI,UAAU;AACd,gBAAY,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,aAAa,CAAC,GAAG,KAAK,IAAI,GAAG,cAAc,CAAC,GAAG,MAAM,MAAM;AACpH,QAAI,YAAY;AAChB,QAAI,cAAc,OAAO,MAAM;AAC/B,QAAI,OAAO;AACX,QAAI,QAAQ;AAAA,EACd;AACF;AAEA,SAAS,KAAK,GAAU,KAAqB;AAC3C,SAAO,EAAE,KAAK,UAAU,EAAE,QAAQ,GAAG,GAAG;AAC1C;AAEA,SAAS,YAAY,GAAU,MAA4B;AACzD,QAAM,EAAE,GAAG,MAAM,IAAI;AACrB,QAAM,IAAI,MAAM;AAChB,QAAM,MAAM,EAAE,KAAK,IAAI;AACvB,WAAS,GAAG,EAAE,IAAI,KAAK,EAAE,QAAQ,GAAG,KAAK,SAAS,EAAE,cAAc,MAAM,MAAM,QAAQ;AACtF,OAAK,QAAQ,CAAC,KAAK,aAAa;AAC9B,QAAI,SAAS;AACb,eAAW,QAAQ,KAAK;AACtB,YAAM,QAAQ,KAAK,YAAY;AAC/B,YAAM,OAAO,KAAK,IAAI,GAAG,KAAK,WAAW,CAAC;AAC1C,eAAS,QAAQ;AACjB,UAAI,SAAS,EAAE,OAAO,QAAQ;AAC5B,UAAE,QAAQ,KAAK,EAAE,MAAM,cAAc,QAAQ,mBAAmB,UAAU,MAAM,SAAS,KAAK,OAAO,MAAM,WAAW,CAAC;AACvH;AAAA,MACF;AACA,YAAM,IAAI,KAAK,GAAG,KAAK;AACvB,YAAM,IAAI,UAAU,EAAE,QAAQ,OAAO,KAAK,IAAI,EAAE,OAAO,QAAQ,QAAQ,IAAI,CAAC;AAC5E,YAAM,IAAI,MAAM,WAAW,EAAE;AAC7B,YAAM,IAAI,EAAE,eAAe,KAAK,IAAI,GAAG,KAAK,WAAW,CAAC;AACxD,YAAM,OAAO,KAAK,YAAY,QAAQ,OAAO;AAC7C,YAAM,SAAS,KAAK,YAAY,QAAQ,EAAE,WAAW,QAAQ,KAAK;AAClE,YAAM,QAAQ,SAAU,EAAE,WAAW,QAAQ,SAAS,WAAM,WAAO;AACnE,YAAM,QAAQ,KAAK,SAAS;AAC5B,YAAM,YAAY,QAAQ,KAAK;AAC/B,gBAAU,GAAG;AAAA,QACX,GAAG,UAAU,UAAU,IAAI,YAAY;AAAA,QAAG;AAAA,QAAG,OAAO,IAAI;AAAA,QAAW,QAAQ;AAAA,QAAG,MAAM,KAAK;AAAA,QAAO;AAAA,QAChG,OAAO,SAAS,MAAM,MAAM,OAAO,MAAM,MAAM;AAAA,QAAY,QAAQ,MAAM,OAAO;AAAA,QAChF,YAAY,MAAM,MAAM;AAAA,QAAU,MAAM;AAAA,QAAc,SAAS,EAAE;AAAA,QAAU,UAAU,EAAE;AAAA,MACzF,CAAC;AACD,UAAI,OAAO;AACT,cAAM,OAAO,QAAQ,OAAO,MAAM,OAAO,IAAI;AAC7C,cAAM,QAAQ,KAAK,IAAI,YAAY,KAAK,OAAO,IAAI,EAAE,OAAO,IAAI,EAAE,WAAW,IAAI,SAAS;AAC1F,cAAM,KAAK,UAAU,UAAU,IAAI,IAAI,EAAE,WAAW,QAAQ,KAAK,UAAU,WAAW,KAAK,IAAI,SAAS,IAAI,IAAI,IAAI,EAAE,WAAW,QAAQ;AACzI,wBAAgB,EAAE,KAAK,EAAE,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,MAAM,OAAO,MAAM,OAAO,MAAM,MAAM,QAAQ,MAAM,EAAE,UAAU,UAAU,SAAS,CAAC;AAAA,MACpI;AACA,YAAM,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,MAAM,MAAM,OAAO,MAAM,MAAM,UAAU;AAC1E,UAAI,QAAQ,KAAK,EAAE,QAAQ,KAAK,GAAG,WAAY,OAAM,GAAG,GAAG,GAAG,IAAI,GAAG,MAAM,MAAM,IAAI;AAAA,IACvF;AAAA,EACF,CAAC;AACH;AAEA,SAAS,SAAS,GAAU,KAAa,MAAmB,GAAiB;AAC3E,QAAM,EAAE,GAAG,MAAM,IAAI;AACrB,QAAM,IAAI,MAAM;AAChB,QAAM,SAAS,EAAE,YAAY,QAAQ,MAAM,MAAM,KAAK,KAAK,SAAS;AACpE,QAAM,QAAQ,EAAE,cAAc,GAAG,IAAI,MAAM,MAAM,YAAY,cAAc,OAAO,KAAK,MAAM,MAAM;AACnG,WAAS,GAAG,EAAE,IAAI,GAAG,EAAE,QAAQ,GAAG,EAAE,WAAW,KAAK;AACpD,QAAM,QAAQ,EAAE,eAAe;AAC/B,QAAM,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,GAAG,IAAI,MAAM,SAAS,KAAK,IAAI,IAAI,EAAE,aAAa;AAC1G,WAAS,MAAM,GAAG,MAAM,EAAE,OAAO,QAAQ,OAAO;AAC9C,UAAM,OAAO,EAAE,QAAQ,KAAK,GAAG;AAC/B,UAAM,YAAY,gBAAgB,GAAG,KAAK;AAC1C,UAAM,QAAQ,YAAY,UAAU,IAAI,IAAI;AAC5C,cAAU,GAAG,KAAK,KAAK,MAAM,MAAM,OAAO,GAAG,KAAK;AAAA,EACpD;AACA,MAAI,KAAK,SAAS,WAAY,OAAM,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,GAAG,GAAG,MAAM,MAAM,IAAI;AACpF,MAAI,MAAM,cAAc,gBAAgB,MAAM,cAAc,OAAQ,OAAM,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,GAAG,IAAI,EAAE,WAAW,MAAM,MAAM,IAAI;AAC1I;AAEA,SAAS,UACP,GAAU,KAAa,KAAa,MAAmB,MAAgB,OAAyB,GAAW,OACrG;AACN,QAAM,EAAE,GAAG,MAAM,IAAI;AACrB,QAAM,IAAI,MAAM;AAChB,QAAM,SAAS,EAAE,QAAQ,GAAG;AAC5B,QAAM,IAAI,KAAK,GAAG,GAAG;AACrB,QAAM,IAAI,EAAE,OAAO,GAAG;AACtB,QAAM,KAAK,OAAO,cAAc;AAChC,MAAI,OAAO,WAAY,UAAS,GAAG,GAAG,GAAG,GAAG,EAAE,WAAW,MAAM,UAAU;AACzE,QAAM,SAAS,KAAK,SAAS;AAC7B,QAAM,SAAS,OAAO,WAAW,UAAU,OAAO,QAAQ,MAAM,OAAO,OAAO,MAAM,OAAO;AAC3F,QAAM,QAAQ,OAAO,SAAS,kBAAkB,KAAK,OAAO,QAAQ,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAC1G,QAAM,OAAO,OAAO,cAAc,QAAQ,KAAK,SAAS,MAAM,MAAM;AACpE,MAAI,aAAa,GAAG,KAAK,IAAI,EAAG,GAAE,UAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,EAAE,WAAW,OAAO,GAAG,EAAE,MAAM,GAAG,EAAE;AACtG,MAAI,OAAO,WAAW;AACpB,UAAM,SAAS,KAAK,QAAQ,EAAE;AAC9B,UAAM,UAAU,IAAI,EAAE,WAAW;AACjC,QAAI,KAAK,WAAY,cAAa,GAAG,SAAS,IAAI,EAAE,YAAY,GAAG,KAAK,aAAa,KAAK;AAC1F,UAAM,YAAY,KAAK,cAAc,aAAa,CAAC;AACnD,UAAM,OAAO,EAAE,WAAW,UAAU,YAAY,EAAE,SAAS,IAAI;AAC/D,cAAU,GAAG,EAAE,GAAG,GAAG,OAAO,GAAG,QAAQ,EAAE,WAAW,MAAM,OAAO,QAAQ,OAAO,QAAQ,YAAY,IAAI,SAAS,MAAM,UAAU,EAAE,SAAS,CAAC;AAC7I;AAAA,EACF;AACA,MAAI,OAAO,aAAa,MAAM,QAAQ,KAAK,KAAK,GAAG;AACjD,mBAAe,GAAG,KAAK,OAAO,OAAO,WAAW,IAAI,EAAE,UAAU,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,YAAY,EAAE;AACxH;AAAA,EACF;AACA,MAAI,OAAO,KAAK;AACd,UAAM,QAAQ,SAAS,GAAG,EAAE,UAAU,EAAE,YAAY,GAAG,KAAK,GAAG,OAAO,OAAO,MAAM,cAAc,KAAK;AACtG,aAAS,GAAG,IAAI,MAAM,MAAM,GAAG,MAAM,OAAO,OAAO,MAAM,OAAO;AAAA,EAClE;AACA,QAAM,WAAW,QAAQ,OAAO,MAAM,OAAO,IAAI;AACjD,QAAM,QAAQ,OAAO,OAAO,YAAY,MAAM,MAAM,QAAQ,EAAE,QAAQ;AACtE,QAAM,MAAM,OAAO,OAAO,IAAI;AAC9B,QAAM,OAAO,QAAQ,OAAO,MAAM;AAClC,QAAM,SAAS,KAAK,IAAI,GAAG,IAAI,EAAE,WAAW,IAAI,QAAQ,GAAG;AAC3D,QAAM,QAAQ,UAAU,MAAM,QAAQ,IAAI;AAC1C,QAAM,QAAQ,YAAY,OAAO,IAAI,EAAE;AACvC,QAAM,QAAQ,QAAQ,QAAQ;AAC9B,QAAM,QAAQ,OAAO,UAAU,UAAU,IAAI,IAAI,EAAE,WAAW,QAAQ,OAAO,UAAU,WAAW,KAAK,IAAI,SAAS,IAAI,IAAI,EAAE;AAC9H,QAAM,YAAY,OAAO,QAAQ,MAAM,iBAAiB;AACxD,QAAM,QAAQ,YAAY,QAAQ,QAAQ,MAAM;AAChD,QAAM,OAAO,IAAI,EAAE,YAAY;AAC/B,MAAI,OAAO,MAAM;AACf,UAAM,QAAQ,YAAY,QAAQ,QAAQ,QAAQ;AAClD,UAAMA,WAAU,EAAE,GAAG,OAAO,GAAG,MAAM,MAAM,MAAM,MAAM,MAAM,UAAU,OAAO,MAAM,aAAa,OAAO,MAAM,EAAE,UAAU,UAAU,SAAkB;AACtJ,sBAAkB,EAAE,QAAQA,UAAS,EAAE,YAAY,IAAI,MAAM,EAAE,KAAK,CAAC;AACrE,oBAAgB,EAAE,KAAKA,QAAO;AAAA,EAChC;AACA,MAAI,CAAC,KAAM;AACX,QAAM,UAAU,EAAE,GAAG,OAAO,GAAG,MAAM,MAAM,OAAO,MAAM,OAAO,MAAM,EAAE,UAAU,UAAU,SAAkB;AAC7G,oBAAkB,EAAE,QAAQ,SAAS,EAAE,UAAU,MAAM,QAAQ,YAAY,IAAI,MAAM,EAAE,KAAK,CAAC;AAC7F,MAAI,CAAC,MAAO,GAAE,QAAQ,KAAK,EAAE,MAAM,cAAc,QAAQ,SAAS,UAAU,MAAM,CAAC;AAAA,MAC9E,iBAAgB,EAAE,KAAK,OAAO;AACrC;AAEA,SAAS,aAAa,GAAgC;AACpD,QAAM,SAAS,EAAE,WAAW;AAC5B,QAAM,OAAO,OAAO;AACpB,MAAI,CAAC,KAAM,QAAO;AAClB,WAAS,IAAI,GAAG,IAAI,KAAK,IAAI,OAAO,UAAU,GAAG,GAAG,IAAK,KAAI,KAAK,CAAC,EAAE,WAAY,QAAO;AACxF,SAAO;AACT;AAEA,SAAS,SAAS,GAAU,MAAc,GAAW,OAAe,OAAkB,SAAwB;AAC5G,QAAM,EAAE,KAAK,MAAM,IAAI;AACvB,QAAM,IAAI,MAAM;AAChB,QAAM,MAAM,MAAM;AAClB,QAAM,KAAK,OAAO,IAAI,OAAO;AAC7B,QAAM,KAAK,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,QAAQ,KAAK;AAClD,QAAM,KAAK,KAAK,EAAE,YAAY,EAAE,aAAa;AAC7C,QAAM,OAAO,QAAQ,IAAI,OAAO,UAAU,oBAAoB,cAAc;AAC5E,MAAI,IAAI,SAAS,QAAW;AAC1B,UAAM,KAAK,KAAK,MAAM,OAAO,IAAI,OAAO,KAAK,IAAI;AACjD,QAAI,KAAK;AACT,QAAI,cAAc,MAAM,MAAM;AAC9B,QAAI,YAAY;AAChB,QAAI,UAAU;AACd,QAAI,OAAO,IAAI,KAAK,CAAC;AACrB,QAAI,OAAO,IAAI,KAAK,EAAE,YAAY,CAAC;AACnC,QAAI,OAAO;AACX,QAAI,QAAQ;AAAA,EACd;AACA,MAAI,MAAM,EAAG;AACb,MAAI,EAAE,KAAK;AACT,MAAE,IAAI,KAAK,IAAI,IAAI,IAAI,EAAE,WAAW,EAAE,QAAQ,MAAM,MAAM,WAAW,KAAK,aAAa,IAAI,CAAC;AAC5F;AAAA,EACF;AACA,MAAI,KAAK;AACT,MAAI,UAAU;AACd,cAAY,KAAK,IAAI,IAAI,IAAI,EAAE,WAAW,KAAK,IAAI,GAAG,KAAK,CAAC,CAAC;AAC7D,MAAI,YAAY;AAChB,MAAI,KAAK;AACT,MAAI,QAAQ;AACd;AAEA,SAAS,eAAe,GAAU,QAAmB,OAAwE,GAAW,GAAW,GAAW,GAAiB;AAC7K,MAAI,KAAK,KAAK,KAAK,EAAG;AACtB,QAAM,QAAQ,kBAAkB,QAAQ,OAAO,GAAG,CAAC;AACnD,MAAI,CAAC,MAAM,OAAO,OAAQ;AAC1B,QAAM,MAAM,EAAE;AACd,QAAM,QAAQ,MAAM,SAAS,EAAE,EAAE,OAAO,MAAM;AAC9C,MAAI,KAAK;AACT,MAAI,UAAU,GAAG,CAAC;AAClB,MAAI,MAAM,SAAS,OAAO;AACxB,QAAI,YAAY,QAAQ,OAAO,IAAI;AACnC,eAAW,KAAK,MAAM,OAAQ,KAAI,SAAS,EAAE,IAAI,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,MAAM,UAAU,KAAK,IAAI,KAAK,KAAK,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AAAA,EACnJ,OAAO;AACL,QAAI,MAAM,SAAS,QAAQ;AACzB,UAAI,YAAY,QAAQ,OAAO,IAAI;AACnC,iBAAW,OAAO,MAAM,MAAM;AAC5B,YAAI,IAAI,SAAS,EAAG;AACpB,YAAI,UAAU;AACd,YAAI,OAAO,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI;AAChC,mBAAW,KAAK,IAAK,KAAI,OAAO,EAAE,GAAG,EAAE,CAAC;AACxC,YAAI,OAAO,IAAI,IAAI,SAAS,CAAC,EAAE,GAAG,IAAI,IAAI,SAAS,CAAC,EAAE,IAAI;AAC1D,YAAI,UAAU;AACd,YAAI,KAAK;AAAA,MACX;AAAA,IACF;AACA,QAAI,cAAc;AAClB,QAAI,YAAY;AAChB,QAAI,WAAW;AACf,QAAI,UAAU;AACd,eAAW,OAAO,MAAM,MAAM;AAC5B,UAAI,UAAU;AACd,UAAI,QAAQ,CAAC,GAAG,MAAO,IAAI,IAAI,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,OAAO,EAAE,GAAG,EAAE,CAAC,CAAE;AACvE,UAAI,IAAI,WAAW,EAAG,KAAI,OAAO,IAAI,CAAC,EAAE,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;AAC1D,UAAI,OAAO;AAAA,IACb;AAAA,EACF;AACA,MAAI,QAAQ;AACZ,IAAE,EAAE,UAAU,SAAS,MAAM,OAAO,MAAM;AAC5C;AAEA,SAAS,aAAa,GAAU,GAAW,IAAY,UAAyB;AAC9E,QAAM,EAAE,KAAK,MAAM,IAAI;AACvB,QAAM,MAAM,MAAM,QAAQ;AAC1B,QAAM,KAAK,IAAI,MAAM;AACrB,MAAI,KAAK;AACT,MAAI,cAAc,MAAM,MAAM;AAC9B,MAAI,YAAY;AAChB,MAAI,UAAU;AACd,MAAI,WAAW;AACf,MAAI,UAAU;AACd,MAAI,UAAU;AACZ,QAAI,OAAO,KAAK,GAAG,KAAK,GAAG;AAC3B,QAAI,OAAO,IAAI,KAAK,GAAG;AACvB,QAAI,OAAO,KAAK,GAAG,KAAK,GAAG;AAAA,EAC7B,OAAO;AACL,QAAI,OAAO,KAAK,KAAK,KAAK,CAAC;AAC3B,QAAI,OAAO,KAAK,KAAK,EAAE;AACvB,QAAI,OAAO,KAAK,KAAK,KAAK,CAAC;AAAA,EAC7B;AACA,MAAI,OAAO;AACX,MAAI,QAAQ;AACd;AAEA,SAAS,YAAY,GAAU,GAAiB;AAC9C,QAAM,EAAE,GAAG,MAAM,IAAI;AACrB,QAAM,IAAI,MAAM;AAChB,QAAM,OAAgB,EAAE,WAAW,SAAS,eAAe,eAAe;AAC1E,WAAS,GAAG,EAAE,IAAI,GAAG,EAAE,QAAQ,GAAG,EAAE,WAAW,MAAM,MAAM,OAAO;AAClE,QAAM,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,GAAG,GAAG,MAAM,MAAM,UAAU;AAC5D,WAAS,MAAM,GAAG,MAAM,EAAE,OAAO,QAAQ,OAAO;AAC9C,UAAM,OAAO,EAAE,WAAW,MAAM,GAAG,KAAK,EAAE,OAAO,MAAM,KAAK,KAAK;AACjE,UAAM,OAAoB,EAAE,MAAM,OAAO,EAAE;AAC3C,QAAI,EAAE,uBAAuB,eAAe,EAAE,QAAQ,GAAG,GAAG,WAAW;AACrE,gBAAU,GAAG,IAAI,KAAK,MAAM,MAAM,MAAM,GAAG,MAAM,MAAM,OAAO;AAC9D;AAAA,IACF;AACA,UAAM,SAAS,EAAE,QAAQ,GAAG;AAC5B,UAAM,QAAQ,kBAAkB,KAAK,OAAO,QAAQ,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ;AAC1F,cAAU,GAAG;AAAA,MACX,GAAG,KAAK,GAAG,GAAG;AAAA,MAAG;AAAA,MAAG,OAAO,EAAE,OAAO,GAAG;AAAA,MAAG,QAAQ,EAAE;AAAA,MAAW,MAAM,SAAS,MAAM,MAAM;AAAA,MAAG,OAAO,OAAO;AAAA,MAC3G;AAAA,MAAO,QAAQ,MAAM,OAAO;AAAA,MAAM,YAAY,MAAM,MAAM;AAAA,MAAS,SAAS,EAAE;AAAA,MAAU,UAAU,EAAE;AAAA,IACtG,CAAC;AAAA,EACH;AACF;AAEA,SAAS,SAAS,GAAU,GAAW,WAAmB,eAA6B;AACrF,QAAM,EAAE,MAAM,IAAI;AAClB,QAAM,IAAI,MAAM;AAChB,WAAS,GAAG,EAAE,IAAI,GAAG,EAAE,QAAQ,GAAG,EAAE,WAAW,MAAM,MAAM,UAAU;AACrE,YAAU,GAAG;AAAA,IACX,GAAG,EAAE;AAAA,IAAI;AAAA,IAAG,OAAO,EAAE,QAAQ;AAAA,IAAG,QAAQ,EAAE;AAAA,IAC1C,MAAM,gBACF,SAAI,YAAY,GAAG,SAAS,qBAAkB,EAAE,GAAG,aAAa,kBAChE,SAAI,SAAS;AAAA,IACjB,OAAO;AAAA,IAAU,OAAO,MAAM,MAAM;AAAA,IAAW,QAAQ,MAAM,OAAO;AAAA,IACpE,YAAY,MAAM,MAAM;AAAA,IAAY,SAAS,EAAE;AAAA,IAAU,UAAU,EAAE;AAAA,EACvE,CAAC;AACH;AAEA,SAAS,mBAAmB,GAAU,KAAa,QAAgB,gBAA8B;AAC/F,QAAM,EAAE,GAAG,MAAM,IAAI;AACrB,QAAM,MAAM,MAAM,cAAc,cAAc,MAAM,cAAc;AAClE,QAAM,UAAU,MAAM,iBAAiB,MAAM,QAAQ;AACrD,WAAS,MAAM,GAAG,MAAM,EAAE,OAAO,QAAQ,OAAO;AAC9C,UAAM,IAAI,KAAK,GAAG,GAAG;AACrB,QAAI,IAAK,OAAM,GAAG,GAAG,KAAK,QAAQ,MAAM,MAAM,IAAI;AAAA,aACzC,EAAE,QAAQ,GAAG,GAAG,WAAY,OAAM,GAAG,GAAG,SAAS,QAAQ,MAAM,MAAM,IAAI;AAClF,QAAI,SAAS,EAAE,iBAAiB,MAAM,MAAM,KAAK,CAAC,IAAK,OAAM,GAAG,GAAG,SAAS,QAAQ,MAAM,MAAM,UAAU;AAAA,EAC5G;AACF;AAEA,SAAS,SAAS,GAAU,GAAW,GAAW,GAAW,GAAW,OAAqB;AAC3F,IAAE,IAAI,YAAY;AAClB,IAAE,IAAI,SAAS,GAAG,GAAG,GAAG,CAAC;AAC3B;AAEA,SAAS,MAAM,GAAU,IAAY,IAAY,GAAW,OAAqB;AAC/E,MAAI,EAAE,KAAK;AACT,MAAE,IAAI,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,OAAO,MAAM,QAAQ,aAAa,EAAE,CAAC;AAChG;AAAA,EACF;AACA,QAAM,KAAK,KAAK,MAAM,CAAC,IAAI;AAC3B,IAAE,IAAI,KAAK;AACX,IAAE,IAAI,cAAc;AACpB,IAAE,IAAI,YAAY;AAClB,IAAE,IAAI,UAAU;AAChB,IAAE,IAAI,OAAO,IAAI,EAAE;AACnB,IAAE,IAAI,OAAO,IAAI,EAAE;AACnB,IAAE,IAAI,OAAO;AACb,IAAE,IAAI,QAAQ;AAChB;AAEA,SAAS,MAAM,GAAU,GAAW,IAAY,IAAY,OAAqB;AAC/E,MAAI,EAAE,KAAK;AACT,MAAE,IAAI,SAAS,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,OAAO,MAAM,QAAQ,aAAa,EAAE,CAAC;AAChG;AAAA,EACF;AACA,QAAM,KAAK,KAAK,MAAM,CAAC,IAAI;AAC3B,IAAE,IAAI,KAAK;AACX,IAAE,IAAI,cAAc;AACpB,IAAE,IAAI,YAAY;AAClB,IAAE,IAAI,UAAU;AAChB,IAAE,IAAI,OAAO,IAAI,EAAE;AACnB,IAAE,IAAI,OAAO,IAAI,EAAE;AACnB,IAAE,IAAI,OAAO;AACb,IAAE,IAAI,QAAQ;AAChB;AAiBA,SAAS,UAAU,GAAU,OAAwB;AACnD,QAAM,EAAE,GAAG,MAAM,IAAI;AACrB,QAAM,OAAO,QAAQ,OAAO,MAAM,MAAM;AACxC,QAAM,SAAS,KAAK,IAAI,GAAG,MAAM,QAAQ,MAAM,UAAU,MAAM,QAAQ;AACvE,QAAM,OAAO,UAAU,MAAM,MAAM,QAAQ,IAAI;AAC/C,QAAM,IAAI,MAAM,UAAU,UACtB,MAAM,IAAI,MAAM,QAAQ,MAAM,WAC9B,MAAM,UAAU,WACd,MAAM,IAAI,MAAM,UAAU,SAAS,IACnC,MAAM,IAAI,MAAM;AACtB,QAAM,UAAU,EAAE,GAAG,GAAG,MAAM,IAAI,MAAM,SAAS,GAAG,MAAM,MAAM,OAAO,MAAM,OAAO,MAAM,MAAM,QAAQ,UAAU,OAAO,MAAM,OAAO,UAAU,SAAkB;AAClK,oBAAkB,EAAE,QAAQ,SAAS,EAAE,UAAU,MAAM,MAAM,QAAQ,YAAY,MAAM,YAAY,MAAM,MAAM,MAAM,MAAM,EAAE,KAAK,CAAC;AACnI,MAAI,CAAC,QAAQ,MAAM,KAAM,GAAE,QAAQ,KAAK,EAAE,MAAM,MAAM,QAAQ,cAAc,QAAQ,SAAS,UAAU,MAAM,SAAS,aAAa,CAAC;AACpI,MAAI,KAAM,iBAAgB,EAAE,KAAK,OAAO;AAC1C;AAEA,SAAS,aAAa,GAAmB,KAAa,MAAyB;AAC7E,MAAI,EAAE,uBAAuB,YAAa,QAAO;AACjD,SAAO,CAAC,EAAE,QAAQ,GAAG,GAAG,aAAa,OAAO,KAAK,QAAQ,YAAY,OAAO,SAAS,KAAK,GAAG;AAC/F;",
|
|
6
|
+
"names": ["command"]
|
|
7
7
|
}
|
|
@@ -1,51 +1,77 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ConditionalFormat } from '../../spec/types.js';
|
|
2
2
|
import type { ThemeTokens } from '../../theme/index.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
raw: number | string | null;
|
|
8
|
-
}, rowBg: string, rowIndex?: number): void;
|
|
9
|
-
/**
|
|
10
|
-
* Build a hand-drawn data-bar as an embedded canvas positioned inside its cell.
|
|
11
|
-
* Geometry mirrors the headless `paintDataBar` (4px inset each side) so the DOM
|
|
12
|
-
* and PNG sketch bars are identical; a small pad keeps the outer wobble from
|
|
13
|
-
* being clipped at the canvas edge.
|
|
14
|
-
*/
|
|
15
|
-
export declare function buildSketchDataBar(sketch: ResolvedSketch, color: string, colWidth: number, rowHeight: number, leftRatio: number, widthRatio: number, seed: number): HTMLCanvasElement | null;
|
|
16
|
-
export declare function setCellBaseStyles(cell: HTMLTableCellElement, tokens: ThemeTokens, align: 'left' | 'center' | 'right', sticky: boolean, padding?: string, borderColor?: string): void;
|
|
17
|
-
/**
|
|
18
|
-
* Grid line color for the DOM table. In sketch mode the clean 1px borders are
|
|
19
|
-
* made transparent so they don't double up with the hand-drawn grid overlay
|
|
20
|
-
* (see `paintSketchGridOverlay`); the layout-reserving 1px is kept.
|
|
21
|
-
*/
|
|
22
|
-
export declare function gridBorderColor(opts: BuildTableOptions): string;
|
|
23
|
-
export declare function applyNegativeStyle(el: HTMLElement, value: unknown, column: Pick<ViewColumn, 'negativeStyle'>): void;
|
|
24
|
-
interface CanvasConditional {
|
|
3
|
+
import type { RGBA } from '../../types.js';
|
|
4
|
+
import { type Interpolator } from '../../color/index.js';
|
|
5
|
+
/** How a single cell is painted beyond its plain formatted value. */
|
|
6
|
+
export interface CellPaint {
|
|
25
7
|
background?: string;
|
|
26
8
|
color?: string;
|
|
27
|
-
weight?: number
|
|
9
|
+
weight?: number;
|
|
28
10
|
icon?: string;
|
|
29
11
|
iconColor?: string;
|
|
30
12
|
iconPosition?: 'left' | 'right';
|
|
13
|
+
/** False hides the formatted value (bar-only cells). */
|
|
31
14
|
showValue?: boolean;
|
|
32
|
-
bar?:
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
15
|
+
bar?: BarPaint;
|
|
16
|
+
}
|
|
17
|
+
/** A data bar as fractions of its column's bar track. */
|
|
18
|
+
export interface BarPaint {
|
|
19
|
+
from: number;
|
|
20
|
+
to: number;
|
|
21
|
+
/** Zero baseline for diverging bars (fraction of the track). */
|
|
22
|
+
zero?: number;
|
|
23
|
+
color: string;
|
|
37
24
|
}
|
|
38
|
-
export
|
|
25
|
+
export interface FormatCell {
|
|
39
26
|
value: unknown;
|
|
40
27
|
raw: number | string | null;
|
|
41
|
-
}
|
|
42
|
-
export
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
export declare
|
|
48
|
-
export declare
|
|
49
|
-
export declare function
|
|
50
|
-
|
|
28
|
+
}
|
|
29
|
+
export type ColumnFormatter = (cell: FormatCell) => CellPaint | null;
|
|
30
|
+
/** Fill alpha for bars that sit beside their value, and for bars drawn under text in narrow columns. */
|
|
31
|
+
export declare const BAR_LANE_ALPHA = 0.88;
|
|
32
|
+
export declare const BAR_OVERLAY_ALPHA = 0.26;
|
|
33
|
+
/** Narrowest bar track worth drawing beside the value; below it the bar sits under the text. */
|
|
34
|
+
export declare const MIN_BAR_LANE = 28;
|
|
35
|
+
export declare const BAR_GAP = 8;
|
|
36
|
+
export declare function resolveConditionalDomain(conditionalFormat: ConditionalFormat | undefined, values: readonly (number | null | undefined)[]): [number, number] | null;
|
|
37
|
+
/**
|
|
38
|
+
* Compile a column's conditional format once: color ramps, domains and theme
|
|
39
|
+
* adaptations are resolved here so each visible cell only maps its value.
|
|
40
|
+
*/
|
|
41
|
+
export declare function buildColumnFormatter(cf: ConditionalFormat | undefined, domain: [number, number] | null, tokens: ThemeTokens, background: string): ColumnFormatter | null;
|
|
42
|
+
/** Bar track geometry inside a cell, relative to the cell's left edge. */
|
|
43
|
+
export interface BarTrack {
|
|
44
|
+
left: number;
|
|
45
|
+
width: number;
|
|
46
|
+
/** True when the bar sits under the value text (narrow columns). */
|
|
47
|
+
overlay: boolean;
|
|
48
|
+
}
|
|
49
|
+
export declare function barTrack(cellWidth: number, paddingX: number, valueWidth: number, align: 'left' | 'center' | 'right', showValue: boolean): BarTrack;
|
|
50
|
+
/**
|
|
51
|
+
* On dark surfaces a ramp whose neutral end is near-white glares, and its most
|
|
52
|
+
* intense end is darkest. Mirror lightness (keeping hue/chroma) so "more" reads
|
|
53
|
+
* brighter and the neutral end sinks toward the background.
|
|
54
|
+
*/
|
|
55
|
+
export declare function adaptRampForDark(interpolator: Interpolator, neutralAt: number): Interpolator;
|
|
56
|
+
/** Nudge a text color's lightness until it reaches `min` contrast on `bg`. */
|
|
57
|
+
export declare function ensureContrast(color: RGBA, bg: RGBA, min: number): RGBA;
|
|
58
|
+
export declare function semanticTonePalette(tokens: {
|
|
59
|
+
dark?: boolean;
|
|
60
|
+
color: {
|
|
61
|
+
positive: string;
|
|
62
|
+
negative: string;
|
|
63
|
+
};
|
|
64
|
+
}): {
|
|
65
|
+
up: string;
|
|
66
|
+
mid: string;
|
|
67
|
+
down: string;
|
|
68
|
+
};
|
|
69
|
+
export declare function isNegative(value: unknown): boolean;
|
|
70
|
+
/** Text color for a value whose column paints negatives red. */
|
|
71
|
+
export declare function negativeTextColor(value: unknown, column: {
|
|
72
|
+
negativeStyle?: 'sign' | 'parens' | 'red' | 'parens-red';
|
|
73
|
+
}, fallback: string, negative: string): string;
|
|
74
|
+
/** Translucent CSS color for a bar fill. */
|
|
75
|
+
export declare function barFill(color: string, alpha: number): string;
|
|
76
|
+
export declare function normalized(value: number, domain: [number, number]): number;
|
|
51
77
|
//# sourceMappingURL=conditional.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conditional.d.ts","sourceRoot":"","sources":["../../../src/charts/tableView/conditional.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"conditional.d.ts","sourceRoot":"","sources":["../../../src/charts/tableView/conditional.ts"],"names":[],"mappings":"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"}
|