@deephaven/grid 1.22.1-alpha-pivot-builder.0 → 1.22.2-alpha-pivot-builder.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/CellInputField.js +41 -22
- package/dist/CellInputField.js.map +1 -1
- package/dist/CellRenderer.js +19 -27
- package/dist/CellRenderer.js.map +1 -1
- package/dist/DataBarCellRenderer.js +61 -87
- package/dist/DataBarCellRenderer.js.map +1 -1
- package/dist/Grid.js +281 -455
- package/dist/Grid.js.map +1 -1
- package/dist/GridColorUtils.js +23 -21
- package/dist/GridColorUtils.js.map +1 -1
- package/dist/GridMetricCalculator.js +192 -303
- package/dist/GridMetricCalculator.js.map +1 -1
- package/dist/GridRange.js +18 -28
- package/dist/GridRange.js.map +1 -1
- package/dist/GridRenderer.d.ts.map +1 -1
- package/dist/GridRenderer.js +432 -604
- package/dist/GridRenderer.js.map +1 -1
- package/dist/GridUtils.d.ts +33 -16
- package/dist/GridUtils.d.ts.map +1 -1
- package/dist/GridUtils.js +183 -213
- package/dist/GridUtils.js.map +1 -1
- package/dist/MockGridModel.js +17 -10
- package/dist/MockGridModel.js.map +1 -1
- package/dist/MockTreeGridModel.js +36 -31
- package/dist/MockTreeGridModel.js.map +1 -1
- package/dist/TextCellRenderer.js +36 -57
- package/dist/TextCellRenderer.js.map +1 -1
- package/dist/key-handlers/EditKeyHandler.js +4 -7
- package/dist/key-handlers/EditKeyHandler.js.map +1 -1
- package/dist/key-handlers/PasteKeyHandler.js +1 -3
- package/dist/key-handlers/PasteKeyHandler.js.map +1 -1
- package/dist/key-handlers/SelectionKeyHandler.js +40 -71
- package/dist/key-handlers/SelectionKeyHandler.js.map +1 -1
- package/dist/key-handlers/TreeKeyHandler.js +4 -10
- package/dist/key-handlers/TreeKeyHandler.js.map +1 -1
- package/dist/mouse-handlers/EditMouseHandler.js +3 -7
- package/dist/mouse-handlers/EditMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.js +54 -82
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js +4 -8
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js +31 -55
- package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowMoveMouseHandler.js +26 -46
- package/dist/mouse-handlers/GridRowMoveMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js +2 -4
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowTreeMouseHandler.js +14 -22
- package/dist/mouse-handlers/GridRowTreeMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js +8 -16
- package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridSelectionMouseHandler.js +47 -75
- package/dist/mouse-handlers/GridSelectionMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridSeparatorMouseHandler.js +9 -23
- package/dist/mouse-handlers/GridSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridTokenMouseHandler.js +24 -39
- package/dist/mouse-handlers/GridTokenMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js +31 -55
- package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataBarCellRenderer.js","names":["getOrThrow","CellRenderer","isExpandableGridModel","isDataBarGridModel","GridColorUtils","GridUtils","memoizeClear","DataBarCellRenderer","constructor","arguments","_defineProperty","context","text","measureText","width","max","visibleRows","modelRows","model","column","widestValue","i","length","row","modelRow","textForCell","Math","getCachedWidth","drawCellContent","state","metrics","theme","modelColumns","allRowHeights","allRowYs","firstColumn","fontWidthsLower","fontWidthsUpper","isFirstColumn","rowHeight","modelColumn","rowY","textAlign","textAlignForCell","x","textX","y","textY","textWidth","getTextRenderMetrics","fontWidthLower","get","font","fontWidthUpper","truncationChar","truncationCharForCell","truncatedText","getCachedTruncatedString","columnMin","columnMax","axis","color","dataBarColor","textColor","valuePlacement","opacity","markers","direction","value","dataBarOptionsForCell","hasGradient","Array","isArray","maxWidth","dataBarX","dataBarY","zeroPosition","leftmostPosition","markerXs","totalValueRange","dataBarWidth","getDataBarRenderMetrics","save","fillStyle","textBaseline","fillText","hasRowDividers","gridRowColor","yOffset","beginPath","roundRect","clip","globalAlpha","gradientWidth","gradientX","round","abs","translate","scale","gradient","getGradient","fillRect","restore","barColor","fill","forEach","markerX","index","shouldRenderDashedLine","strokeStyle","zeroLineColor","setLineDash","moveTo","lineTo","stroke","hasExpandableRows","drawCellRowTreeMarker","Error","allColumnXs","allColumnWidths","cellHorizontalPadding","treeDepthIndent","treeHorizontalPadding","columnWidth","treeIndent","depthForRow","longestValueWidth","getCachedWidestValueForColumn","leftPadding","rightPadding","columnLongest","map","marker","markerValue","offset","rightmostPosition","colors","canvas","document","createElement","ctx","getContext","Number","isNaN","createLinearGradient","oklabColors","linearSRGBToOklab","hexToRgb","colorStop","colorChangeInterval","leftColorIndex","floor","lerpColor","addColorStop","rgbToHex","OklabToLinearSRGB","primitive"],"sources":["../src/DataBarCellRenderer.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport { getOrThrow } from '@deephaven/utils';\nimport CellRenderer from './CellRenderer';\nimport { isExpandableGridModel } from './ExpandableGridModel';\nimport { isDataBarGridModel } from './DataBarGridModel';\nimport {\n type ModelIndex,\n type VisibleIndex,\n type VisibleToModelMap,\n} from './GridMetrics';\nimport GridColorUtils from './GridColorUtils';\nimport GridUtils from './GridUtils';\nimport memoizeClear from './memoizeClear';\nimport { type GridRenderState } from './GridRendererTypes';\nimport type GridModel from './GridModel';\n\ninterface DataBarRenderMetrics {\n /** The total width the entire bar from the min to max value can take up (rightmostPosition - leftmostPosition) */\n maxWidth: number;\n /** The x coordinate of the bar (the left) */\n x: number;\n /** The y coordinate of the bar (the top) */\n y: number;\n /** The position of the zero line */\n zeroPosition: number;\n /** The position of the leftmost point */\n leftmostPosition: number;\n /** The position of the rightmost point */\n rightmostPosition: number;\n /** The range of values (e.g. max of 100 and min of -50 means range of 150) */\n totalValueRange: number;\n /** The width of the databar */\n dataBarWidth: number;\n /** The x coordinates of the markers (the left) */\n markerXs: number[];\n}\nclass DataBarCellRenderer extends CellRenderer {\n static getGradient = memoizeClear(\n (width: number, colors: string[]): CanvasGradient => {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n if (ctx == null) {\n throw new Error('Failed to create canvas context');\n }\n if (Number.isNaN(width)) {\n return ctx.createLinearGradient(0, 0, 0, 0);\n }\n const gradient = ctx.createLinearGradient(0, 0, width, 0);\n const oklabColors = colors.map(color =>\n GridColorUtils.linearSRGBToOklab(GridColorUtils.hexToRgb(color))\n );\n for (let i = 0; i < width; i += 1) {\n const colorStop = i / width;\n const colorChangeInterval = 1 / (colors.length - 1);\n const leftColorIndex = Math.floor(colorStop / colorChangeInterval);\n const color = GridColorUtils.lerpColor(\n oklabColors[leftColorIndex],\n oklabColors[leftColorIndex + 1],\n (colorStop % colorChangeInterval) / colorChangeInterval\n );\n gradient.addColorStop(\n i / width,\n GridColorUtils.rgbToHex(GridColorUtils.OklabToLinearSRGB(color))\n );\n }\n return gradient;\n },\n {\n max: 1000,\n primitive: true, // Stringify the arguments for memoization. Lets the color arrays be different arrays in memory, but still cache hit\n }\n );\n\n drawCellContent(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): void {\n const { metrics, model, theme } = state;\n if (!isDataBarGridModel(model)) {\n return;\n }\n const {\n modelColumns,\n modelRows,\n allRowHeights,\n allRowYs,\n firstColumn,\n fontWidthsLower,\n fontWidthsUpper,\n } = metrics;\n\n const isFirstColumn = column === firstColumn;\n const rowHeight = getOrThrow(allRowHeights, row);\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = getOrThrow(modelColumns, column);\n const rowY = getOrThrow(allRowYs, row);\n const textAlign = model.textAlignForCell(modelColumn, modelRow);\n const text = model.textForCell(modelColumn, modelRow);\n const {\n x: textX,\n y: textY,\n width: textWidth,\n } = GridUtils.getTextRenderMetrics(state, column, row);\n\n const fontWidthLower = fontWidthsLower.get(context.font);\n const fontWidthUpper = fontWidthsUpper.get(context.font);\n const truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n const truncatedText = this.getCachedTruncatedString(\n context,\n text,\n textWidth,\n fontWidthLower,\n fontWidthUpper,\n truncationChar\n );\n\n const {\n columnMin,\n columnMax,\n axis,\n color: dataBarColor,\n textColor,\n valuePlacement,\n opacity,\n markers,\n direction,\n value,\n } = model.dataBarOptionsForCell(modelColumn, modelRow, theme);\n\n const hasGradient = Array.isArray(dataBarColor) && dataBarColor.length > 1;\n if (columnMin == null || columnMax == null) {\n return;\n }\n\n const {\n maxWidth,\n x: dataBarX,\n y: dataBarY,\n zeroPosition,\n leftmostPosition,\n markerXs,\n totalValueRange,\n dataBarWidth,\n } = this.getDataBarRenderMetrics(context, state, column, row);\n\n context.save();\n context.textAlign = textAlign;\n context.fillStyle = textColor;\n context.textBaseline = 'middle';\n context.font = theme.font;\n\n if (valuePlacement !== 'hide') {\n context.fillText(truncatedText, textX, textY);\n }\n\n const hasRowDividers = theme.gridRowColor != null;\n const yOffset = hasRowDividers ? 2 : 1;\n\n context.save();\n context.beginPath();\n context.roundRect(\n dataBarX,\n rowY + yOffset, // yOffset includes 1px for top padding\n dataBarWidth,\n rowHeight - 1 - yOffset, // 1px for bottom padding\n 1\n );\n context.clip();\n context.globalAlpha = opacity;\n\n // Draw bar\n if (hasGradient) {\n // Draw gradient bar\n\n let gradientWidth = 0;\n let gradientX = 0;\n context.save();\n\n // Translate the context so its origin is at the start of the gradient\n // and increasing x value moves towards the end of the gradient.\n // For RTL, scale x by -1 to flip across the x-axis\n if (value < 0) {\n if (direction === 'LTR') {\n gradientWidth = Math.round(\n (Math.abs(columnMin) / totalValueRange) * maxWidth\n );\n gradientX = Math.round(leftmostPosition);\n context.translate(gradientX, 0);\n } else if (direction === 'RTL') {\n gradientWidth = Math.round(\n maxWidth - (Math.abs(columnMax) / totalValueRange) * maxWidth\n );\n gradientX = Math.round(zeroPosition);\n context.translate(gradientX + gradientWidth, 0);\n context.scale(-1, 1);\n }\n } else if (direction === 'LTR') {\n // Value is greater than or equal to 0\n gradientWidth =\n Math.round(\n maxWidth - (Math.abs(columnMin) / totalValueRange) * maxWidth\n ) - 1;\n gradientX = Math.round(zeroPosition);\n context.translate(gradientX, 0);\n } else if (direction === 'RTL') {\n // Value is greater than or equal to 0\n gradientWidth = Math.round(\n (Math.abs(columnMax) / totalValueRange) * maxWidth\n );\n gradientX = Math.round(leftmostPosition);\n context.translate(gradientX + gradientWidth, 0);\n context.scale(-1, 1);\n }\n\n const gradient = DataBarCellRenderer.getGradient(\n gradientWidth,\n dataBarColor\n );\n context.fillStyle = gradient;\n context.fillRect(0, dataBarY, gradientWidth, rowHeight);\n context.restore(); // Restore gradient translate/scale\n } else {\n // Draw normal bar\n const barColor = Array.isArray(dataBarColor)\n ? dataBarColor[0]\n : dataBarColor;\n context.fillStyle = barColor;\n context.beginPath();\n context.roundRect(dataBarX, dataBarY, dataBarWidth, rowHeight, 1);\n context.fill();\n }\n\n // Draw markers\n if (maxWidth > 0) {\n markerXs.forEach((markerX, index) => {\n context.fillStyle = markers[index].color;\n context.fillRect(markerX, dataBarY, 1, rowHeight);\n });\n }\n\n // restore clip\n context.restore();\n\n const shouldRenderDashedLine = !(\n axis === 'directional' &&\n ((valuePlacement === 'beside' &&\n textAlign === 'right' &&\n direction === 'LTR') ||\n (valuePlacement === 'beside' &&\n textAlign === 'left' &&\n direction === 'RTL') ||\n valuePlacement !== 'beside')\n );\n\n // Draw dashed line\n if (shouldRenderDashedLine) {\n context.strokeStyle = theme.zeroLineColor;\n context.beginPath();\n context.setLineDash([2, 1]);\n context.moveTo(zeroPosition, rowY);\n context.lineTo(zeroPosition, rowY + rowHeight);\n context.stroke();\n }\n\n context.restore();\n\n // Draw tree marker\n if (\n isFirstColumn &&\n isExpandableGridModel(model) &&\n model.hasExpandableRows\n ) {\n this.drawCellRowTreeMarker(context, state, row);\n }\n }\n\n getDataBarRenderMetrics(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): DataBarRenderMetrics {\n const { metrics, model, theme } = state;\n if (!isDataBarGridModel(model)) {\n throw new Error('Grid model is not a data bar grid model');\n }\n const {\n firstColumn,\n allColumnXs,\n allColumnWidths,\n allRowYs,\n modelColumns,\n modelRows,\n visibleRows,\n } = metrics;\n const { cellHorizontalPadding, treeDepthIndent, treeHorizontalPadding } =\n theme;\n\n const modelColumn = getOrThrow(modelColumns, column);\n const modelRow = getOrThrow(modelRows, row);\n const x = getOrThrow(allColumnXs, column);\n const y = getOrThrow(allRowYs, row);\n const columnWidth = getOrThrow(allColumnWidths, column);\n const isFirstColumn = column === firstColumn;\n let treeIndent = 0;\n if (\n isExpandableGridModel(model) &&\n model.hasExpandableRows &&\n isFirstColumn\n ) {\n treeIndent =\n treeDepthIndent * (model.depthForRow(row) + 1) + treeHorizontalPadding;\n }\n\n const textAlign = model.textAlignForCell(modelColumn, modelRow);\n const {\n columnMin,\n columnMax,\n axis,\n valuePlacement,\n markers,\n direction,\n value,\n } = model.dataBarOptionsForCell(modelColumn, modelRow, theme);\n const longestValueWidth = this.getCachedWidestValueForColumn(\n context,\n visibleRows,\n modelRows,\n model,\n modelColumn\n );\n\n const leftPadding = 2;\n const rightPadding =\n valuePlacement === 'beside' && textAlign === 'right' ? 2 : 1;\n\n // The value of the total range (e.g. max - column)\n let totalValueRange = columnMax - columnMin;\n // If min and max are both positive or min and max are equal, the max length is columnMax\n if ((columnMax >= 0 && columnMin >= 0) || columnMin === columnMax) {\n totalValueRange = columnMax;\n } else if (columnMax <= 0 && columnMin <= 0) {\n // If min and max are both negative, the max length is the absolute value of columnMin\n totalValueRange = Math.abs(columnMin);\n }\n\n let maxWidth = columnWidth - treeIndent - rightPadding - leftPadding;\n if (valuePlacement === 'beside') {\n maxWidth = maxWidth - cellHorizontalPadding - longestValueWidth;\n }\n\n if (maxWidth < 0) {\n maxWidth = 0;\n }\n\n const columnLongest = Math.max(Math.abs(columnMin), Math.abs(columnMax));\n // If axis is proportional, totalValueRange is proportional to maxWidth\n let dataBarWidth = (Math.abs(value) / totalValueRange) * maxWidth;\n\n if (maxWidth === 0) {\n dataBarWidth = 0;\n } else if (axis === 'middle') {\n // The longest bar is proportional to half of the maxWidth\n dataBarWidth = (Math.abs(value) / columnLongest) * (maxWidth / 2);\n } else if (axis === 'directional') {\n // The longest bar is proportional to the maxWidth\n dataBarWidth = (Math.abs(value) / columnLongest) * maxWidth;\n }\n\n // Default: proportional, beside, LTR, right text align\n // All positions are assuming the left side is 0 and the right side is maxWidth\n let zeroPosition =\n columnMin >= 0 ? 0 : (Math.abs(columnMin) / totalValueRange) * maxWidth;\n let dataBarX =\n value >= 0\n ? zeroPosition\n : zeroPosition - (Math.abs(value) / totalValueRange) * maxWidth;\n let markerXs = markers.map(marker => {\n const { value: markerValue } = marker;\n const offset = (Math.abs(markerValue) / totalValueRange) * maxWidth;\n return markerValue >= 0 ? zeroPosition + offset : zeroPosition - offset;\n });\n let leftmostPosition =\n valuePlacement === 'beside' && textAlign === 'left'\n ? cellHorizontalPadding + longestValueWidth + leftPadding\n : leftPadding;\n let rightmostPosition =\n valuePlacement === 'beside' && textAlign === 'right'\n ? columnWidth - cellHorizontalPadding - longestValueWidth - rightPadding\n : rightPadding;\n\n // Proportional, RTL\n if (direction === 'RTL') {\n zeroPosition =\n columnMin >= 0\n ? columnWidth\n : columnWidth - (Math.abs(columnMin) / totalValueRange) * maxWidth;\n dataBarX =\n value >= 0\n ? zeroPosition - (value / totalValueRange) * maxWidth\n : zeroPosition;\n markerXs = markers.map(marker => {\n const { value: markerValue } = marker;\n return markerValue >= 0\n ? zeroPosition - (Math.abs(markerValue) / totalValueRange) * maxWidth\n : zeroPosition + (Math.abs(markerValue) / totalValueRange) * maxWidth;\n });\n }\n\n if (axis === 'middle') {\n zeroPosition = maxWidth / 2;\n if (direction === 'LTR') {\n // Middle, LTR\n dataBarX =\n value >= 0\n ? zeroPosition\n : zeroPosition - (Math.abs(value) / columnLongest) * (maxWidth / 2);\n markerXs = markers.map(marker => {\n const { value: markerValue } = marker;\n\n return markerValue >= 0\n ? zeroPosition +\n (Math.abs(markerValue) / columnLongest) * (maxWidth / 2)\n : zeroPosition -\n (Math.abs(markerValue) / columnLongest) * (maxWidth / 2);\n });\n } else if (direction === 'RTL') {\n // Middle, RTL\n dataBarX =\n value <= 0\n ? zeroPosition\n : zeroPosition - (Math.abs(value) / columnLongest) * (maxWidth / 2);\n markerXs = markers.map(marker => {\n const { value: markerValue } = marker;\n\n return markerValue <= 0\n ? zeroPosition +\n (Math.abs(markerValue) / columnLongest) * (maxWidth / 2)\n : zeroPosition -\n (Math.abs(markerValue) / columnLongest) * (maxWidth / 2);\n });\n }\n } else if (axis === 'directional') {\n if (direction === 'LTR') {\n // Directional, LTR\n zeroPosition = 0;\n dataBarX = zeroPosition;\n markerXs = markers.map(marker => {\n const { value: markerValue } = marker;\n\n return (\n zeroPosition + (Math.abs(markerValue) / columnLongest) * maxWidth\n );\n });\n } else if (direction === 'RTL') {\n // Directional, RTL\n zeroPosition = columnWidth;\n dataBarX = zeroPosition - (Math.abs(value) / columnLongest) * maxWidth;\n markerXs = markers.map(marker => {\n const { value: markerValue } = marker;\n\n return (\n zeroPosition - (Math.abs(markerValue) / columnLongest) * maxWidth\n );\n });\n }\n }\n\n // Offset all values by the actual x value and padding\n if (direction === 'LTR') {\n zeroPosition += x + leftPadding + treeIndent;\n dataBarX += x + leftPadding + treeIndent;\n markerXs = markerXs.map(\n markerX => markerX + x + leftPadding + treeIndent\n );\n\n if (valuePlacement === 'beside' && textAlign === 'left') {\n zeroPosition += longestValueWidth + cellHorizontalPadding;\n dataBarX += longestValueWidth + cellHorizontalPadding;\n markerXs = markerXs.map(\n markerX => markerX + longestValueWidth + cellHorizontalPadding\n );\n }\n } else if (direction === 'RTL') {\n zeroPosition = zeroPosition + x - rightPadding;\n dataBarX = dataBarX + x - rightPadding;\n markerXs = markerXs.map(markerX => markerX + x - rightPadding);\n\n if (valuePlacement === 'beside' && textAlign === 'right') {\n zeroPosition = zeroPosition - cellHorizontalPadding - longestValueWidth;\n dataBarX = dataBarX - cellHorizontalPadding - longestValueWidth;\n markerXs = markerXs.map(\n markerX => markerX - cellHorizontalPadding - longestValueWidth\n );\n }\n }\n\n leftmostPosition += x + treeIndent;\n rightmostPosition += x;\n\n return {\n maxWidth,\n x: dataBarX,\n y,\n zeroPosition,\n leftmostPosition,\n rightmostPosition,\n totalValueRange,\n dataBarWidth,\n markerXs,\n };\n }\n\n getCachedWidth = memoizeClear(\n (context: CanvasRenderingContext2D, text: string): number =>\n context.measureText(text).width,\n { max: 10000 }\n );\n\n /**\n * Returns the width of the widest value in pixels\n */\n getCachedWidestValueForColumn = memoizeClear(\n (\n context: CanvasRenderingContext2D,\n visibleRows: readonly VisibleIndex[],\n modelRows: VisibleToModelMap,\n model: GridModel,\n column: ModelIndex\n ): number => {\n let widestValue = 0;\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n const modelRow = getOrThrow(modelRows, row);\n const text = model.textForCell(column, modelRow);\n widestValue = Math.max(widestValue, this.getCachedWidth(context, text));\n }\n\n return widestValue;\n },\n { max: 1000 }\n );\n}\n\nexport default DataBarCellRenderer;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"DataBarCellRenderer.js","names":["getOrThrow","CellRenderer","isExpandableGridModel","isDataBarGridModel","GridColorUtils","GridUtils","memoizeClear","DataBarCellRenderer","constructor","arguments","_defineProperty","context","text","measureText","width","max","visibleRows","modelRows","model","column","widestValue","i","length","row","modelRow","textForCell","Math","getCachedWidth","drawCellContent","state","metrics","theme","modelColumns","allRowHeights","allRowYs","firstColumn","fontWidthsLower","fontWidthsUpper","isFirstColumn","rowHeight","modelColumn","rowY","textAlign","textAlignForCell","_GridUtils$getTextRen","getTextRenderMetrics","textX","x","textY","y","textWidth","fontWidthLower","get","font","fontWidthUpper","truncationChar","truncationCharForCell","truncatedText","getCachedTruncatedString","_model$dataBarOptions","dataBarOptionsForCell","columnMin","columnMax","axis","dataBarColor","color","textColor","valuePlacement","opacity","markers","direction","value","hasGradient","Array","isArray","_this$getDataBarRende","getDataBarRenderMetrics","maxWidth","dataBarX","dataBarY","zeroPosition","leftmostPosition","markerXs","totalValueRange","dataBarWidth","save","fillStyle","textBaseline","fillText","hasRowDividers","gridRowColor","yOffset","beginPath","roundRect","clip","globalAlpha","gradientWidth","gradientX","round","abs","translate","scale","gradient","getGradient","fillRect","restore","barColor","fill","forEach","markerX","index","shouldRenderDashedLine","strokeStyle","zeroLineColor","setLineDash","moveTo","lineTo","stroke","hasExpandableRows","drawCellRowTreeMarker","Error","allColumnXs","allColumnWidths","cellHorizontalPadding","treeDepthIndent","treeHorizontalPadding","columnWidth","treeIndent","depthForRow","_model$dataBarOptions2","longestValueWidth","getCachedWidestValueForColumn","leftPadding","rightPadding","columnLongest","map","marker","markerValue","offset","rightmostPosition","colors","canvas","document","createElement","ctx","getContext","Number","isNaN","createLinearGradient","oklabColors","linearSRGBToOklab","hexToRgb","colorStop","colorChangeInterval","leftColorIndex","floor","lerpColor","addColorStop","rgbToHex","OklabToLinearSRGB","primitive"],"sources":["../src/DataBarCellRenderer.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport { getOrThrow } from '@deephaven/utils';\nimport CellRenderer from './CellRenderer';\nimport { isExpandableGridModel } from './ExpandableGridModel';\nimport { isDataBarGridModel } from './DataBarGridModel';\nimport {\n type ModelIndex,\n type VisibleIndex,\n type VisibleToModelMap,\n} from './GridMetrics';\nimport GridColorUtils from './GridColorUtils';\nimport GridUtils from './GridUtils';\nimport memoizeClear from './memoizeClear';\nimport { type GridRenderState } from './GridRendererTypes';\nimport type GridModel from './GridModel';\n\ninterface DataBarRenderMetrics {\n /** The total width the entire bar from the min to max value can take up (rightmostPosition - leftmostPosition) */\n maxWidth: number;\n /** The x coordinate of the bar (the left) */\n x: number;\n /** The y coordinate of the bar (the top) */\n y: number;\n /** The position of the zero line */\n zeroPosition: number;\n /** The position of the leftmost point */\n leftmostPosition: number;\n /** The position of the rightmost point */\n rightmostPosition: number;\n /** The range of values (e.g. max of 100 and min of -50 means range of 150) */\n totalValueRange: number;\n /** The width of the databar */\n dataBarWidth: number;\n /** The x coordinates of the markers (the left) */\n markerXs: number[];\n}\nclass DataBarCellRenderer extends CellRenderer {\n static getGradient = memoizeClear(\n (width: number, colors: string[]): CanvasGradient => {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n if (ctx == null) {\n throw new Error('Failed to create canvas context');\n }\n if (Number.isNaN(width)) {\n return ctx.createLinearGradient(0, 0, 0, 0);\n }\n const gradient = ctx.createLinearGradient(0, 0, width, 0);\n const oklabColors = colors.map(color =>\n GridColorUtils.linearSRGBToOklab(GridColorUtils.hexToRgb(color))\n );\n for (let i = 0; i < width; i += 1) {\n const colorStop = i / width;\n const colorChangeInterval = 1 / (colors.length - 1);\n const leftColorIndex = Math.floor(colorStop / colorChangeInterval);\n const color = GridColorUtils.lerpColor(\n oklabColors[leftColorIndex],\n oklabColors[leftColorIndex + 1],\n (colorStop % colorChangeInterval) / colorChangeInterval\n );\n gradient.addColorStop(\n i / width,\n GridColorUtils.rgbToHex(GridColorUtils.OklabToLinearSRGB(color))\n );\n }\n return gradient;\n },\n {\n max: 1000,\n primitive: true, // Stringify the arguments for memoization. Lets the color arrays be different arrays in memory, but still cache hit\n }\n );\n\n drawCellContent(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): void {\n const { metrics, model, theme } = state;\n if (!isDataBarGridModel(model)) {\n return;\n }\n const {\n modelColumns,\n modelRows,\n allRowHeights,\n allRowYs,\n firstColumn,\n fontWidthsLower,\n fontWidthsUpper,\n } = metrics;\n\n const isFirstColumn = column === firstColumn;\n const rowHeight = getOrThrow(allRowHeights, row);\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = getOrThrow(modelColumns, column);\n const rowY = getOrThrow(allRowYs, row);\n const textAlign = model.textAlignForCell(modelColumn, modelRow);\n const text = model.textForCell(modelColumn, modelRow);\n const {\n x: textX,\n y: textY,\n width: textWidth,\n } = GridUtils.getTextRenderMetrics(state, column, row);\n\n const fontWidthLower = fontWidthsLower.get(context.font);\n const fontWidthUpper = fontWidthsUpper.get(context.font);\n const truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n const truncatedText = this.getCachedTruncatedString(\n context,\n text,\n textWidth,\n fontWidthLower,\n fontWidthUpper,\n truncationChar\n );\n\n const {\n columnMin,\n columnMax,\n axis,\n color: dataBarColor,\n textColor,\n valuePlacement,\n opacity,\n markers,\n direction,\n value,\n } = model.dataBarOptionsForCell(modelColumn, modelRow, theme);\n\n const hasGradient = Array.isArray(dataBarColor) && dataBarColor.length > 1;\n if (columnMin == null || columnMax == null) {\n return;\n }\n\n const {\n maxWidth,\n x: dataBarX,\n y: dataBarY,\n zeroPosition,\n leftmostPosition,\n markerXs,\n totalValueRange,\n dataBarWidth,\n } = this.getDataBarRenderMetrics(context, state, column, row);\n\n context.save();\n context.textAlign = textAlign;\n context.fillStyle = textColor;\n context.textBaseline = 'middle';\n context.font = theme.font;\n\n if (valuePlacement !== 'hide') {\n context.fillText(truncatedText, textX, textY);\n }\n\n const hasRowDividers = theme.gridRowColor != null;\n const yOffset = hasRowDividers ? 2 : 1;\n\n context.save();\n context.beginPath();\n context.roundRect(\n dataBarX,\n rowY + yOffset, // yOffset includes 1px for top padding\n dataBarWidth,\n rowHeight - 1 - yOffset, // 1px for bottom padding\n 1\n );\n context.clip();\n context.globalAlpha = opacity;\n\n // Draw bar\n if (hasGradient) {\n // Draw gradient bar\n\n let gradientWidth = 0;\n let gradientX = 0;\n context.save();\n\n // Translate the context so its origin is at the start of the gradient\n // and increasing x value moves towards the end of the gradient.\n // For RTL, scale x by -1 to flip across the x-axis\n if (value < 0) {\n if (direction === 'LTR') {\n gradientWidth = Math.round(\n (Math.abs(columnMin) / totalValueRange) * maxWidth\n );\n gradientX = Math.round(leftmostPosition);\n context.translate(gradientX, 0);\n } else if (direction === 'RTL') {\n gradientWidth = Math.round(\n maxWidth - (Math.abs(columnMax) / totalValueRange) * maxWidth\n );\n gradientX = Math.round(zeroPosition);\n context.translate(gradientX + gradientWidth, 0);\n context.scale(-1, 1);\n }\n } else if (direction === 'LTR') {\n // Value is greater than or equal to 0\n gradientWidth =\n Math.round(\n maxWidth - (Math.abs(columnMin) / totalValueRange) * maxWidth\n ) - 1;\n gradientX = Math.round(zeroPosition);\n context.translate(gradientX, 0);\n } else if (direction === 'RTL') {\n // Value is greater than or equal to 0\n gradientWidth = Math.round(\n (Math.abs(columnMax) / totalValueRange) * maxWidth\n );\n gradientX = Math.round(leftmostPosition);\n context.translate(gradientX + gradientWidth, 0);\n context.scale(-1, 1);\n }\n\n const gradient = DataBarCellRenderer.getGradient(\n gradientWidth,\n dataBarColor\n );\n context.fillStyle = gradient;\n context.fillRect(0, dataBarY, gradientWidth, rowHeight);\n context.restore(); // Restore gradient translate/scale\n } else {\n // Draw normal bar\n const barColor = Array.isArray(dataBarColor)\n ? dataBarColor[0]\n : dataBarColor;\n context.fillStyle = barColor;\n context.beginPath();\n context.roundRect(dataBarX, dataBarY, dataBarWidth, rowHeight, 1);\n context.fill();\n }\n\n // Draw markers\n if (maxWidth > 0) {\n markerXs.forEach((markerX, index) => {\n context.fillStyle = markers[index].color;\n context.fillRect(markerX, dataBarY, 1, rowHeight);\n });\n }\n\n // restore clip\n context.restore();\n\n const shouldRenderDashedLine = !(\n axis === 'directional' &&\n ((valuePlacement === 'beside' &&\n textAlign === 'right' &&\n direction === 'LTR') ||\n (valuePlacement === 'beside' &&\n textAlign === 'left' &&\n direction === 'RTL') ||\n valuePlacement !== 'beside')\n );\n\n // Draw dashed line\n if (shouldRenderDashedLine) {\n context.strokeStyle = theme.zeroLineColor;\n context.beginPath();\n context.setLineDash([2, 1]);\n context.moveTo(zeroPosition, rowY);\n context.lineTo(zeroPosition, rowY + rowHeight);\n context.stroke();\n }\n\n context.restore();\n\n // Draw tree marker\n if (\n isFirstColumn &&\n isExpandableGridModel(model) &&\n model.hasExpandableRows\n ) {\n this.drawCellRowTreeMarker(context, state, row);\n }\n }\n\n getDataBarRenderMetrics(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): DataBarRenderMetrics {\n const { metrics, model, theme } = state;\n if (!isDataBarGridModel(model)) {\n throw new Error('Grid model is not a data bar grid model');\n }\n const {\n firstColumn,\n allColumnXs,\n allColumnWidths,\n allRowYs,\n modelColumns,\n modelRows,\n visibleRows,\n } = metrics;\n const { cellHorizontalPadding, treeDepthIndent, treeHorizontalPadding } =\n theme;\n\n const modelColumn = getOrThrow(modelColumns, column);\n const modelRow = getOrThrow(modelRows, row);\n const x = getOrThrow(allColumnXs, column);\n const y = getOrThrow(allRowYs, row);\n const columnWidth = getOrThrow(allColumnWidths, column);\n const isFirstColumn = column === firstColumn;\n let treeIndent = 0;\n if (\n isExpandableGridModel(model) &&\n model.hasExpandableRows &&\n isFirstColumn\n ) {\n treeIndent =\n treeDepthIndent * (model.depthForRow(row) + 1) + treeHorizontalPadding;\n }\n\n const textAlign = model.textAlignForCell(modelColumn, modelRow);\n const {\n columnMin,\n columnMax,\n axis,\n valuePlacement,\n markers,\n direction,\n value,\n } = model.dataBarOptionsForCell(modelColumn, modelRow, theme);\n const longestValueWidth = this.getCachedWidestValueForColumn(\n context,\n visibleRows,\n modelRows,\n model,\n modelColumn\n );\n\n const leftPadding = 2;\n const rightPadding =\n valuePlacement === 'beside' && textAlign === 'right' ? 2 : 1;\n\n // The value of the total range (e.g. max - column)\n let totalValueRange = columnMax - columnMin;\n // If min and max are both positive or min and max are equal, the max length is columnMax\n if ((columnMax >= 0 && columnMin >= 0) || columnMin === columnMax) {\n totalValueRange = columnMax;\n } else if (columnMax <= 0 && columnMin <= 0) {\n // If min and max are both negative, the max length is the absolute value of columnMin\n totalValueRange = Math.abs(columnMin);\n }\n\n let maxWidth = columnWidth - treeIndent - rightPadding - leftPadding;\n if (valuePlacement === 'beside') {\n maxWidth = maxWidth - cellHorizontalPadding - longestValueWidth;\n }\n\n if (maxWidth < 0) {\n maxWidth = 0;\n }\n\n const columnLongest = Math.max(Math.abs(columnMin), Math.abs(columnMax));\n // If axis is proportional, totalValueRange is proportional to maxWidth\n let dataBarWidth = (Math.abs(value) / totalValueRange) * maxWidth;\n\n if (maxWidth === 0) {\n dataBarWidth = 0;\n } else if (axis === 'middle') {\n // The longest bar is proportional to half of the maxWidth\n dataBarWidth = (Math.abs(value) / columnLongest) * (maxWidth / 2);\n } else if (axis === 'directional') {\n // The longest bar is proportional to the maxWidth\n dataBarWidth = (Math.abs(value) / columnLongest) * maxWidth;\n }\n\n // Default: proportional, beside, LTR, right text align\n // All positions are assuming the left side is 0 and the right side is maxWidth\n let zeroPosition =\n columnMin >= 0 ? 0 : (Math.abs(columnMin) / totalValueRange) * maxWidth;\n let dataBarX =\n value >= 0\n ? zeroPosition\n : zeroPosition - (Math.abs(value) / totalValueRange) * maxWidth;\n let markerXs = markers.map(marker => {\n const { value: markerValue } = marker;\n const offset = (Math.abs(markerValue) / totalValueRange) * maxWidth;\n return markerValue >= 0 ? zeroPosition + offset : zeroPosition - offset;\n });\n let leftmostPosition =\n valuePlacement === 'beside' && textAlign === 'left'\n ? cellHorizontalPadding + longestValueWidth + leftPadding\n : leftPadding;\n let rightmostPosition =\n valuePlacement === 'beside' && textAlign === 'right'\n ? columnWidth - cellHorizontalPadding - longestValueWidth - rightPadding\n : rightPadding;\n\n // Proportional, RTL\n if (direction === 'RTL') {\n zeroPosition =\n columnMin >= 0\n ? columnWidth\n : columnWidth - (Math.abs(columnMin) / totalValueRange) * maxWidth;\n dataBarX =\n value >= 0\n ? zeroPosition - (value / totalValueRange) * maxWidth\n : zeroPosition;\n markerXs = markers.map(marker => {\n const { value: markerValue } = marker;\n return markerValue >= 0\n ? zeroPosition - (Math.abs(markerValue) / totalValueRange) * maxWidth\n : zeroPosition + (Math.abs(markerValue) / totalValueRange) * maxWidth;\n });\n }\n\n if (axis === 'middle') {\n zeroPosition = maxWidth / 2;\n if (direction === 'LTR') {\n // Middle, LTR\n dataBarX =\n value >= 0\n ? zeroPosition\n : zeroPosition - (Math.abs(value) / columnLongest) * (maxWidth / 2);\n markerXs = markers.map(marker => {\n const { value: markerValue } = marker;\n\n return markerValue >= 0\n ? zeroPosition +\n (Math.abs(markerValue) / columnLongest) * (maxWidth / 2)\n : zeroPosition -\n (Math.abs(markerValue) / columnLongest) * (maxWidth / 2);\n });\n } else if (direction === 'RTL') {\n // Middle, RTL\n dataBarX =\n value <= 0\n ? zeroPosition\n : zeroPosition - (Math.abs(value) / columnLongest) * (maxWidth / 2);\n markerXs = markers.map(marker => {\n const { value: markerValue } = marker;\n\n return markerValue <= 0\n ? zeroPosition +\n (Math.abs(markerValue) / columnLongest) * (maxWidth / 2)\n : zeroPosition -\n (Math.abs(markerValue) / columnLongest) * (maxWidth / 2);\n });\n }\n } else if (axis === 'directional') {\n if (direction === 'LTR') {\n // Directional, LTR\n zeroPosition = 0;\n dataBarX = zeroPosition;\n markerXs = markers.map(marker => {\n const { value: markerValue } = marker;\n\n return (\n zeroPosition + (Math.abs(markerValue) / columnLongest) * maxWidth\n );\n });\n } else if (direction === 'RTL') {\n // Directional, RTL\n zeroPosition = columnWidth;\n dataBarX = zeroPosition - (Math.abs(value) / columnLongest) * maxWidth;\n markerXs = markers.map(marker => {\n const { value: markerValue } = marker;\n\n return (\n zeroPosition - (Math.abs(markerValue) / columnLongest) * maxWidth\n );\n });\n }\n }\n\n // Offset all values by the actual x value and padding\n if (direction === 'LTR') {\n zeroPosition += x + leftPadding + treeIndent;\n dataBarX += x + leftPadding + treeIndent;\n markerXs = markerXs.map(\n markerX => markerX + x + leftPadding + treeIndent\n );\n\n if (valuePlacement === 'beside' && textAlign === 'left') {\n zeroPosition += longestValueWidth + cellHorizontalPadding;\n dataBarX += longestValueWidth + cellHorizontalPadding;\n markerXs = markerXs.map(\n markerX => markerX + longestValueWidth + cellHorizontalPadding\n );\n }\n } else if (direction === 'RTL') {\n zeroPosition = zeroPosition + x - rightPadding;\n dataBarX = dataBarX + x - rightPadding;\n markerXs = markerXs.map(markerX => markerX + x - rightPadding);\n\n if (valuePlacement === 'beside' && textAlign === 'right') {\n zeroPosition = zeroPosition - cellHorizontalPadding - longestValueWidth;\n dataBarX = dataBarX - cellHorizontalPadding - longestValueWidth;\n markerXs = markerXs.map(\n markerX => markerX - cellHorizontalPadding - longestValueWidth\n );\n }\n }\n\n leftmostPosition += x + treeIndent;\n rightmostPosition += x;\n\n return {\n maxWidth,\n x: dataBarX,\n y,\n zeroPosition,\n leftmostPosition,\n rightmostPosition,\n totalValueRange,\n dataBarWidth,\n markerXs,\n };\n }\n\n getCachedWidth = memoizeClear(\n (context: CanvasRenderingContext2D, text: string): number =>\n context.measureText(text).width,\n { max: 10000 }\n );\n\n /**\n * Returns the width of the widest value in pixels\n */\n getCachedWidestValueForColumn = memoizeClear(\n (\n context: CanvasRenderingContext2D,\n visibleRows: readonly VisibleIndex[],\n modelRows: VisibleToModelMap,\n model: GridModel,\n column: ModelIndex\n ): number => {\n let widestValue = 0;\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n const modelRow = getOrThrow(modelRows, row);\n const text = model.textForCell(column, modelRow);\n widestValue = Math.max(widestValue, this.getCachedWidth(context, text));\n }\n\n return widestValue;\n },\n { max: 1000 }\n );\n}\n\nexport default DataBarCellRenderer;\n"],"mappings":"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","ignoreList":[]}
|