@deephaven/grid 0.85.7 → 0.85.13

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.
@@ -1,7 +1,6 @@
1
1
  /// <reference types="memoizee" />
2
2
  import CellRenderer from './CellRenderer';
3
3
  import { ModelIndex, VisibleIndex, VisibleToModelMap } from './GridMetrics';
4
- import { Oklab } from './GridColorUtils';
5
4
  import { GridRenderState } from './GridRendererTypes';
6
5
  import GridModel from './GridModel';
7
6
  interface DataBarRenderMetrics {
@@ -25,11 +24,10 @@ interface DataBarRenderMetrics {
25
24
  markerXs: number[];
26
25
  }
27
26
  declare class DataBarCellRenderer extends CellRenderer {
28
- private heightOfDigits?;
27
+ static getGradient: ((width: number, colors: string[]) => CanvasGradient) & import("@types/memoizee").Memoized<(width: number, colors: string[]) => CanvasGradient>;
29
28
  drawCellContent(context: CanvasRenderingContext2D, state: GridRenderState, column: VisibleIndex, row: VisibleIndex): void;
30
29
  getDataBarRenderMetrics(context: CanvasRenderingContext2D, state: GridRenderState, column: VisibleIndex, row: VisibleIndex): DataBarRenderMetrics;
31
- drawGradient(context: CanvasRenderingContext2D, leftColor: Oklab, rightColor: Oklab, x: number, y: number, width: number, height: number): void;
32
- drawGradientPart(context: CanvasRenderingContext2D, x: number, y: number, width: number, height: number, color: string): void;
30
+ getCachedWidth: ((context: CanvasRenderingContext2D, text: string) => number) & import("@types/memoizee").Memoized<(context: CanvasRenderingContext2D, text: string) => number>;
33
31
  /**
34
32
  * Returns the width of the widest value in pixels
35
33
  */
@@ -1 +1 @@
1
- {"version":3,"file":"DataBarCellRenderer.d.ts","sourceRoot":"","sources":["../src/DataBarCellRenderer.ts"],"names":[],"mappings":";AAEA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAuB,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGzD,OAAO,EAAsB,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,UAAU,oBAAoB;IAC5B,kHAAkH;IAClH,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,CAAC,EAAE,MAAM,CAAC;IACV,4CAA4C;IAC5C,CAAC,EAAE,MAAM,CAAC;IACV,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB,0CAA0C;IAC1C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,8EAA8E;IAC9E,eAAe,EAAE,MAAM,CAAC;IACxB,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AACD,cAAM,mBAAoB,SAAQ,YAAY;IAC5C,OAAO,CAAC,cAAc,CAAC,CAAS;IAEhC,eAAe,CACb,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,YAAY,GAChB,IAAI;IAkQP,uBAAuB,CACrB,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,YAAY,GAChB,oBAAoB;IAwOvB,YAAY,CACV,OAAO,EAAE,wBAAwB,EACjC,SAAS,EAAE,KAAK,EAChB,UAAU,EAAE,KAAK,EACjB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI;IAqBP,gBAAgB,CACd,OAAO,EAAE,wBAAwB,EACjC,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,IAAI;IAKP;;OAEG;IACH,6BAA6B,aAEhB,wBAAwB,eACpB,SAAS,YAAY,EAAE,uCAE7B,SAAS,UACR,UAAU,KACjB,MAAM,iDALE,wBAAwB,eACpB,SAAS,YAAY,EAAE,uCAE7B,SAAS,UACR,UAAU,KACjB,MAAM,EAYT;CACH;AAED,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"DataBarCellRenderer.d.ts","sourceRoot":"","sources":["../src/DataBarCellRenderer.ts"],"names":[],"mappings":";AAEA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAI5E,OAAO,EAAsB,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,UAAU,oBAAoB;IAC5B,kHAAkH;IAClH,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,CAAC,EAAE,MAAM,CAAC;IACV,4CAA4C;IAC5C,CAAC,EAAE,MAAM,CAAC;IACV,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB,0CAA0C;IAC1C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,8EAA8E;IAC9E,eAAe,EAAE,MAAM,CAAC;IACxB,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AACD,cAAM,mBAAoB,SAAQ,YAAY;IAC5C,MAAM,CAAC,WAAW,WACR,MAAM,UAAU,MAAM,EAAE,KAAG,cAAc,+CAAzC,MAAM,UAAU,MAAM,EAAE,KAAG,cAAc,EAiCjD;IAEF,eAAe,CACb,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,YAAY,GAChB,IAAI;IAwMP,uBAAuB,CACrB,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,YAAY,GAChB,oBAAoB;IAwOvB,cAAc,aACF,wBAAwB,QAAQ,MAAM,KAAG,MAAM,iDAA/C,wBAAwB,QAAQ,MAAM,KAAG,MAAM,EAGzD;IAEF;;OAEG;IACH,6BAA6B,aAEhB,wBAAwB,eACpB,SAAS,YAAY,EAAE,uCAE7B,SAAS,UACR,UAAU,KACjB,MAAM,iDALE,wBAAwB,eACpB,SAAS,YAAY,EAAE,uCAE7B,SAAS,UACR,UAAU,KACjB,MAAM,EAYT;CACH;AAED,eAAe,mBAAmB,CAAC"}
@@ -13,14 +13,16 @@ import { DEFAULT_FONT_WIDTH } from "./GridRendererTypes.js";
13
13
  class DataBarCellRenderer extends CellRenderer {
14
14
  constructor() {
15
15
  super(...arguments);
16
- _defineProperty(this, "heightOfDigits", void 0);
16
+ _defineProperty(this, "getCachedWidth", memoizeClear((context, text) => context.measureText(text).width, {
17
+ max: 10000
18
+ }));
17
19
  _defineProperty(this, "getCachedWidestValueForColumn", memoizeClear((context, visibleRows, modelRows, model, column) => {
18
20
  var widestValue = 0;
19
21
  for (var i = 0; i < visibleRows.length; i += 1) {
20
22
  var row = visibleRows[i];
21
23
  var modelRow = getOrThrow(modelRows, row);
22
24
  var text = model.textForCell(column, modelRow);
23
- widestValue = Math.max(widestValue, context.measureText(text).width);
25
+ widestValue = Math.max(widestValue, this.getCachedWidth(context, text));
24
26
  }
25
27
  return widestValue;
26
28
  }, {
@@ -54,6 +56,7 @@ class DataBarCellRenderer extends CellRenderer {
54
56
  var text = model.textForCell(modelColumn, modelRow);
55
57
  var {
56
58
  x: textX,
59
+ y: textY,
57
60
  width: textWidth
58
61
  } = GridUtils.getTextRenderMetrics(state, column, row);
59
62
  var fontWidth = (_fontWidths$get = fontWidths === null || fontWidths === void 0 ? void 0 : fontWidths.get(context.font)) !== null && _fontWidths$get !== void 0 ? _fontWidths$get : DEFAULT_FONT_WIDTH;
@@ -70,7 +73,7 @@ class DataBarCellRenderer extends CellRenderer {
70
73
  direction,
71
74
  value
72
75
  } = model.dataBarOptionsForCell(modelColumn, modelRow, theme);
73
- var hasGradient = Array.isArray(dataBarColor);
76
+ var hasGradient = Array.isArray(dataBarColor) && dataBarColor.length > 1;
74
77
  if (columnMin == null || columnMax == null) {
75
78
  return;
76
79
  }
@@ -84,101 +87,86 @@ class DataBarCellRenderer extends CellRenderer {
84
87
  totalValueRange,
85
88
  dataBarWidth
86
89
  } = this.getDataBarRenderMetrics(context, state, column, row);
87
- if (this.heightOfDigits === undefined) {
88
- var {
89
- actualBoundingBoxAscent,
90
- actualBoundingBoxDescent
91
- } = context.measureText('1234567890');
92
- this.heightOfDigits = actualBoundingBoxAscent + actualBoundingBoxDescent;
93
- }
94
90
  context.save();
95
91
  context.textAlign = textAlign;
96
92
  if (hasGradient) {
97
93
  var color = value >= 0 ? dataBarColor[dataBarColor.length - 1] : dataBarColor[0];
98
94
  context.fillStyle = color;
99
95
  } else {
100
- context.fillStyle = dataBarColor;
96
+ context.fillStyle = Array.isArray(dataBarColor) ? dataBarColor[0] : dataBarColor;
101
97
  }
102
- context.textBaseline = 'top';
98
+ context.textBaseline = 'middle';
103
99
  context.font = theme.font;
104
100
  if (valuePlacement !== 'hide') {
105
- context.fillText(truncatedText, textX, rowY + (rowHeight - this.heightOfDigits) / 2);
101
+ context.fillText(truncatedText, textX, textY);
106
102
  }
103
+ var hasRowDividers = theme.gridRowColor != null;
104
+ var yOffset = hasRowDividers ? 2 : 1;
105
+ context.save();
106
+ context.beginPath();
107
+ context.roundRect(dataBarX, rowY + yOffset,
108
+ // yOffset includes 1px for top padding
109
+ dataBarWidth, rowHeight - 1 - yOffset,
110
+ // 1px for bottom padding
111
+ 1);
112
+ context.clip();
113
+ context.globalAlpha = opacity;
107
114
 
108
115
  // Draw bar
109
116
  if (hasGradient) {
110
117
  // Draw gradient bar
111
118
 
112
- var dataBarColorsOklab = dataBarColor.map(color => GridColorUtils.linearSRGBToOklab(GridColorUtils.hexToRgb(color)));
119
+ var gradientWidth = 0;
120
+ var gradientX = 0;
113
121
  context.save();
114
- context.beginPath();
115
- context.roundRect(dataBarX, dataBarY, dataBarWidth, rowHeight - 2, 1);
116
- context.clip();
122
+
123
+ // Translate the context so its origin is at the start of the gradient
124
+ // and increasing x value moves towards the end of the gradient.
125
+ // For RTL, scale x by -1 to flip across the x-axis
117
126
  if (value < 0) {
118
127
  if (direction === 'LTR') {
119
- var totalGradientWidth = Math.round(Math.abs(columnMin) / totalValueRange * maxWidth);
120
- var partGradientWidth = totalGradientWidth / (dataBarColor.length - 1);
121
- var gradientX = Math.round(leftmostPosition);
122
- for (var i = 0; i < dataBarColor.length - 1; i += 1) {
123
- var leftColor = dataBarColorsOklab[i];
124
- var rightColor = dataBarColorsOklab[i + 1];
125
- this.drawGradient(context, leftColor, rightColor, gradientX, rowY + 1, partGradientWidth, rowHeight);
126
- gradientX += partGradientWidth;
127
- }
128
+ gradientWidth = Math.round(Math.abs(columnMin) / totalValueRange * maxWidth);
129
+ gradientX = Math.round(leftmostPosition);
130
+ context.translate(gradientX, 0);
128
131
  } else if (direction === 'RTL') {
129
- var _totalGradientWidth = Math.round(maxWidth - Math.abs(columnMax) / totalValueRange * maxWidth);
130
- var _partGradientWidth = _totalGradientWidth / (dataBarColor.length - 1);
131
- var _gradientX = Math.round(zeroPosition);
132
- for (var _i = dataBarColor.length - 1; _i > 0; _i -= 1) {
133
- var _leftColor = dataBarColorsOklab[_i];
134
- var _rightColor = dataBarColorsOklab[_i - 1];
135
- this.drawGradient(context, _leftColor, _rightColor, _gradientX, rowY + 1, _partGradientWidth, rowHeight);
136
- _gradientX += _partGradientWidth;
137
- }
132
+ gradientWidth = Math.round(maxWidth - Math.abs(columnMax) / totalValueRange * maxWidth);
133
+ gradientX = Math.round(zeroPosition);
134
+ context.translate(gradientX + gradientWidth, 0);
135
+ context.scale(-1, 1);
138
136
  }
139
137
  } else if (direction === 'LTR') {
140
138
  // Value is greater than or equal to 0
141
- var _totalGradientWidth2 = Math.round(maxWidth - Math.abs(columnMin) / totalValueRange * maxWidth) - 1;
142
- var _partGradientWidth2 = _totalGradientWidth2 / (dataBarColor.length - 1);
143
- var _gradientX2 = Math.round(zeroPosition);
144
- for (var _i2 = 0; _i2 < dataBarColor.length - 1; _i2 += 1) {
145
- var _leftColor2 = dataBarColorsOklab[_i2];
146
- var _rightColor2 = dataBarColorsOklab[_i2 + 1];
147
- this.drawGradient(context, _leftColor2, _rightColor2, _gradientX2, rowY + 1, _partGradientWidth2, rowHeight - 2);
148
- _gradientX2 += _partGradientWidth2;
149
- }
139
+ gradientWidth = Math.round(maxWidth - Math.abs(columnMin) / totalValueRange * maxWidth) - 1;
140
+ gradientX = Math.round(zeroPosition);
141
+ context.translate(gradientX, 0);
150
142
  } else if (direction === 'RTL') {
151
143
  // Value is greater than or equal to 0
152
- var _totalGradientWidth3 = Math.round(Math.abs(columnMax) / totalValueRange * maxWidth);
153
- var _partGradientWidth3 = _totalGradientWidth3 / (dataBarColor.length - 1);
154
- var _gradientX3 = Math.round(leftmostPosition);
155
- for (var _i3 = dataBarColor.length - 1; _i3 > 0; _i3 -= 1) {
156
- var _leftColor3 = dataBarColorsOklab[_i3];
157
- var _rightColor3 = dataBarColorsOklab[_i3 - 1];
158
- this.drawGradient(context, _leftColor3, _rightColor3, _gradientX3, rowY + 1, _partGradientWidth3, rowHeight - 2);
159
- _gradientX3 += _partGradientWidth3;
160
- }
144
+ gradientWidth = Math.round(Math.abs(columnMax) / totalValueRange * maxWidth);
145
+ gradientX = Math.round(leftmostPosition);
146
+ context.translate(gradientX + gradientWidth, 0);
147
+ context.scale(-1, 1);
161
148
  }
162
-
163
- // restore clip
164
- context.restore();
149
+ var gradient = DataBarCellRenderer.getGradient(gradientWidth, dataBarColor);
150
+ context.fillStyle = gradient;
151
+ context.fillRect(0, dataBarY, gradientWidth, rowHeight);
152
+ context.restore(); // Restore gradient translate/scale
165
153
  } else {
166
154
  // Draw normal bar
167
- context.save();
168
- context.globalAlpha = opacity;
169
155
  context.beginPath();
170
- context.roundRect(dataBarX, dataBarY, dataBarWidth, rowHeight - 2, 1);
156
+ context.roundRect(dataBarX, dataBarY, dataBarWidth, rowHeight, 1);
171
157
  context.fill();
172
- context.restore();
173
158
  }
174
159
 
175
160
  // Draw markers
176
161
  if (maxWidth > 0) {
177
162
  markerXs.forEach((markerX, index) => {
178
163
  context.fillStyle = markers[index].color;
179
- context.fillRect(markerX, dataBarY, 1, rowHeight - 2);
164
+ context.fillRect(markerX, dataBarY, 1, rowHeight);
180
165
  });
181
166
  }
167
+
168
+ // restore clip
169
+ context.restore();
182
170
  var shouldRenderDashedLine = !(axis === 'directional' && (valuePlacement === 'beside' && textAlign === 'right' && direction === 'LTR' || valuePlacement === 'beside' && textAlign === 'left' && direction === 'RTL' || valuePlacement !== 'beside'));
183
171
 
184
172
  // Draw dashed line
@@ -368,7 +356,7 @@ class DataBarCellRenderer extends CellRenderer {
368
356
  return {
369
357
  maxWidth,
370
358
  x: dataBarX,
371
- y: y + 1.5,
359
+ y,
372
360
  zeroPosition,
373
361
  leftmostPosition,
374
362
  rightmostPosition,
@@ -377,23 +365,34 @@ class DataBarCellRenderer extends CellRenderer {
377
365
  markerXs
378
366
  };
379
367
  }
380
- drawGradient(context, leftColor, rightColor, x, y, width, height) {
381
- var currentColor = leftColor;
382
- // Increase by 0.5 because half-pixel will render weird on different zooms
383
- for (var currentX = x; currentX <= x + width; currentX += 0.5) {
384
- this.drawGradientPart(context, currentX, y, 1, height, GridColorUtils.rgbToHex(GridColorUtils.OklabToLinearSRGB(currentColor)));
385
- currentColor = GridColorUtils.lerpColor(leftColor, rightColor, (currentX - x) / width);
386
- }
387
- }
388
- drawGradientPart(context, x, y, width, height, color) {
389
- context.fillStyle = color;
390
- context.fillRect(x, y, width, height);
391
- }
392
368
 
393
369
  /**
394
370
  * Returns the width of the widest value in pixels
395
371
  */
396
372
  }
373
+ _defineProperty(DataBarCellRenderer, "getGradient", memoizeClear((width, colors) => {
374
+ var canvas = document.createElement('canvas');
375
+ var ctx = canvas.getContext('2d');
376
+ if (ctx == null) {
377
+ throw new Error('Failed to create canvas context');
378
+ }
379
+ if (Number.isNaN(width)) {
380
+ return ctx.createLinearGradient(0, 0, 0, 0);
381
+ }
382
+ var gradient = ctx.createLinearGradient(0, 0, width, 0);
383
+ var oklabColors = colors.map(color => GridColorUtils.linearSRGBToOklab(GridColorUtils.hexToRgb(color)));
384
+ for (var i = 0; i < width; i += 1) {
385
+ var colorStop = i / width;
386
+ var colorChangeInterval = 1 / (colors.length - 1);
387
+ var leftColorIndex = Math.floor(colorStop / colorChangeInterval);
388
+ var color = GridColorUtils.lerpColor(oklabColors[leftColorIndex], oklabColors[leftColorIndex + 1], colorStop % colorChangeInterval / colorChangeInterval);
389
+ gradient.addColorStop(i / width, GridColorUtils.rgbToHex(GridColorUtils.OklabToLinearSRGB(color)));
390
+ }
391
+ return gradient;
392
+ }, {
393
+ max: 1000,
394
+ primitive: true // Stringify the arguments for memoization. Lets the color arrays be different arrays in memory, but still cache hit
395
+ }));
397
396
 
398
397
  export default DataBarCellRenderer;
399
398
  //# sourceMappingURL=DataBarCellRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataBarCellRenderer.js","names":["getOrThrow","CellRenderer","isExpandableGridModel","isDataBarGridModel","GridColorUtils","GridUtils","memoizeClear","DEFAULT_FONT_WIDTH","DataBarCellRenderer","constructor","arguments","_defineProperty","context","visibleRows","modelRows","model","column","widestValue","i","length","row","modelRow","text","textForCell","Math","max","measureText","width","drawCellContent","state","_fontWidths$get","metrics","theme","modelColumns","allRowHeights","allRowYs","firstColumn","fontWidths","isFirstColumn","rowHeight","modelColumn","rowY","textAlign","textAlignForCell","x","textX","textWidth","getTextRenderMetrics","fontWidth","get","font","truncationChar","truncationCharForCell","truncatedText","getCachedTruncatedString","columnMin","columnMax","axis","color","dataBarColor","valuePlacement","opacity","markers","direction","value","dataBarOptionsForCell","hasGradient","Array","isArray","maxWidth","dataBarX","y","dataBarY","zeroPosition","leftmostPosition","markerXs","totalValueRange","dataBarWidth","getDataBarRenderMetrics","heightOfDigits","undefined","actualBoundingBoxAscent","actualBoundingBoxDescent","save","fillStyle","textBaseline","fillText","dataBarColorsOklab","map","linearSRGBToOklab","hexToRgb","beginPath","roundRect","clip","totalGradientWidth","round","abs","partGradientWidth","gradientX","leftColor","rightColor","drawGradient","restore","globalAlpha","fill","forEach","markerX","index","fillRect","shouldRenderDashedLine","strokeStyle","zeroLineColor","setLineDash","moveTo","lineTo","stroke","hasExpandableRows","drawCellRowTreeMarker","Error","allColumnXs","allColumnWidths","cellHorizontalPadding","treeDepthIndent","treeHorizontalPadding","columnWidth","treeIndent","depthForRow","longestValueWidth","getCachedWidestValueForColumn","leftPadding","rightPadding","columnLongest","marker","markerValue","offset","rightmostPosition","height","currentColor","currentX","drawGradientPart","rgbToHex","OklabToLinearSRGB","lerpColor"],"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 { ModelIndex, VisibleIndex, VisibleToModelMap } from './GridMetrics';\nimport GridColorUtils, { Oklab } from './GridColorUtils';\nimport GridUtils from './GridUtils';\nimport memoizeClear from './memoizeClear';\nimport { DEFAULT_FONT_WIDTH, GridRenderState } from './GridRendererTypes';\nimport 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 private heightOfDigits?: number;\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 fontWidths,\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 { x: textX, width: textWidth } = GridUtils.getTextRenderMetrics(\n state,\n column,\n row\n );\n\n const fontWidth = fontWidths?.get(context.font) ?? DEFAULT_FONT_WIDTH;\n const truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n const truncatedText = this.getCachedTruncatedString(\n context,\n text,\n textWidth,\n fontWidth,\n truncationChar\n );\n\n const {\n columnMin,\n columnMax,\n axis,\n color: dataBarColor,\n valuePlacement,\n opacity,\n markers,\n direction,\n value,\n } = model.dataBarOptionsForCell(modelColumn, modelRow, theme);\n\n const hasGradient = Array.isArray(dataBarColor);\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 if (this.heightOfDigits === undefined) {\n const { actualBoundingBoxAscent, actualBoundingBoxDescent } =\n context.measureText('1234567890');\n this.heightOfDigits = actualBoundingBoxAscent + actualBoundingBoxDescent;\n }\n\n context.save();\n context.textAlign = textAlign;\n if (hasGradient) {\n const color =\n value >= 0 ? dataBarColor[dataBarColor.length - 1] : dataBarColor[0];\n context.fillStyle = color;\n } else {\n context.fillStyle = dataBarColor;\n }\n context.textBaseline = 'top';\n context.font = theme.font;\n\n if (valuePlacement !== 'hide') {\n context.fillText(\n truncatedText,\n textX,\n rowY + (rowHeight - this.heightOfDigits) / 2\n );\n }\n\n // Draw bar\n if (hasGradient) {\n // Draw gradient bar\n\n const dataBarColorsOklab: Oklab[] = dataBarColor.map(color =>\n GridColorUtils.linearSRGBToOklab(GridColorUtils.hexToRgb(color))\n );\n\n context.save();\n\n context.beginPath();\n\n context.roundRect(dataBarX, dataBarY, dataBarWidth, rowHeight - 2, 1);\n context.clip();\n\n if (value < 0) {\n if (direction === 'LTR') {\n const totalGradientWidth = Math.round(\n (Math.abs(columnMin) / totalValueRange) * maxWidth\n );\n const partGradientWidth =\n totalGradientWidth / (dataBarColor.length - 1);\n let gradientX = Math.round(leftmostPosition);\n for (let i = 0; i < dataBarColor.length - 1; i += 1) {\n const leftColor = dataBarColorsOklab[i];\n const rightColor = dataBarColorsOklab[i + 1];\n this.drawGradient(\n context,\n leftColor,\n rightColor,\n gradientX,\n rowY + 1,\n partGradientWidth,\n rowHeight\n );\n\n gradientX += partGradientWidth;\n }\n } else if (direction === 'RTL') {\n const totalGradientWidth = Math.round(\n maxWidth - (Math.abs(columnMax) / totalValueRange) * maxWidth\n );\n const partGradientWidth =\n totalGradientWidth / (dataBarColor.length - 1);\n let gradientX = Math.round(zeroPosition);\n for (let i = dataBarColor.length - 1; i > 0; i -= 1) {\n const leftColor = dataBarColorsOklab[i];\n const rightColor = dataBarColorsOklab[i - 1];\n this.drawGradient(\n context,\n leftColor,\n rightColor,\n gradientX,\n rowY + 1,\n partGradientWidth,\n rowHeight\n );\n\n gradientX += partGradientWidth;\n }\n }\n } else if (direction === 'LTR') {\n // Value is greater than or equal to 0\n const totalGradientWidth =\n Math.round(\n maxWidth - (Math.abs(columnMin) / totalValueRange) * maxWidth\n ) - 1;\n const partGradientWidth =\n totalGradientWidth / (dataBarColor.length - 1);\n let gradientX = Math.round(zeroPosition);\n\n for (let i = 0; i < dataBarColor.length - 1; i += 1) {\n const leftColor = dataBarColorsOklab[i];\n const rightColor = dataBarColorsOklab[i + 1];\n this.drawGradient(\n context,\n leftColor,\n rightColor,\n gradientX,\n rowY + 1,\n partGradientWidth,\n rowHeight - 2\n );\n\n gradientX += partGradientWidth;\n }\n } else if (direction === 'RTL') {\n // Value is greater than or equal to 0\n const totalGradientWidth = Math.round(\n (Math.abs(columnMax) / totalValueRange) * maxWidth\n );\n const partGradientWidth =\n totalGradientWidth / (dataBarColor.length - 1);\n let gradientX = Math.round(leftmostPosition);\n\n for (let i = dataBarColor.length - 1; i > 0; i -= 1) {\n const leftColor = dataBarColorsOklab[i];\n const rightColor = dataBarColorsOklab[i - 1];\n this.drawGradient(\n context,\n leftColor,\n rightColor,\n gradientX,\n rowY + 1,\n partGradientWidth,\n rowHeight - 2\n );\n\n gradientX += partGradientWidth;\n }\n }\n\n // restore clip\n context.restore();\n } else {\n // Draw normal bar\n context.save();\n\n context.globalAlpha = opacity;\n context.beginPath();\n context.roundRect(dataBarX, dataBarY, dataBarWidth, rowHeight - 2, 1);\n context.fill();\n\n context.restore();\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 - 2);\n });\n }\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: y + 1.5,\n zeroPosition,\n leftmostPosition,\n rightmostPosition,\n totalValueRange,\n dataBarWidth,\n markerXs,\n };\n }\n\n drawGradient(\n context: CanvasRenderingContext2D,\n leftColor: Oklab,\n rightColor: Oklab,\n x: number,\n y: number,\n width: number,\n height: number\n ): void {\n let currentColor = leftColor;\n // Increase by 0.5 because half-pixel will render weird on different zooms\n for (let currentX = x; currentX <= x + width; currentX += 0.5) {\n this.drawGradientPart(\n context,\n currentX,\n y,\n 1,\n height,\n GridColorUtils.rgbToHex(GridColorUtils.OklabToLinearSRGB(currentColor))\n );\n\n currentColor = GridColorUtils.lerpColor(\n leftColor,\n rightColor,\n (currentX - x) / width\n );\n }\n }\n\n drawGradientPart(\n context: CanvasRenderingContext2D,\n x: number,\n y: number,\n width: number,\n height: number,\n color: string\n ): void {\n context.fillStyle = color;\n context.fillRect(x, y, width, height);\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, context.measureText(text).width);\n }\n\n return widestValue;\n },\n { max: 1000 }\n );\n}\n\nexport default DataBarCellRenderer;\n"],"mappings":"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"}
1
+ {"version":3,"file":"DataBarCellRenderer.js","names":["getOrThrow","CellRenderer","isExpandableGridModel","isDataBarGridModel","GridColorUtils","GridUtils","memoizeClear","DEFAULT_FONT_WIDTH","DataBarCellRenderer","constructor","arguments","_defineProperty","context","text","measureText","width","max","visibleRows","modelRows","model","column","widestValue","i","length","row","modelRow","textForCell","Math","getCachedWidth","drawCellContent","state","_fontWidths$get","metrics","theme","modelColumns","allRowHeights","allRowYs","firstColumn","fontWidths","isFirstColumn","rowHeight","modelColumn","rowY","textAlign","textAlignForCell","x","textX","y","textY","textWidth","getTextRenderMetrics","fontWidth","get","font","truncationChar","truncationCharForCell","truncatedText","getCachedTruncatedString","columnMin","columnMax","axis","color","dataBarColor","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","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 { ModelIndex, VisibleIndex, VisibleToModelMap } from './GridMetrics';\nimport GridColorUtils from './GridColorUtils';\nimport GridUtils from './GridUtils';\nimport memoizeClear from './memoizeClear';\nimport { DEFAULT_FONT_WIDTH, GridRenderState } from './GridRendererTypes';\nimport 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 fontWidths,\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 fontWidth = fontWidths?.get(context.font) ?? DEFAULT_FONT_WIDTH;\n const truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n const truncatedText = this.getCachedTruncatedString(\n context,\n text,\n textWidth,\n fontWidth,\n truncationChar\n );\n\n const {\n columnMin,\n columnMax,\n axis,\n color: dataBarColor,\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 if (hasGradient) {\n const color =\n value >= 0 ? dataBarColor[dataBarColor.length - 1] : dataBarColor[0];\n context.fillStyle = color;\n } else {\n context.fillStyle = Array.isArray(dataBarColor)\n ? dataBarColor[0]\n : dataBarColor;\n }\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 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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"}
@@ -461,6 +461,11 @@ export declare class GridMetricCalculator {
461
461
  * @param column The column model index to reset
462
462
  */
463
463
  resetColumnWidth(column: ModelIndex): void;
464
+ /**
465
+ * Resets all the calculated column widths
466
+ * Useful if the theme minimum column width changes
467
+ */
468
+ resetCalculatedColumnWidths(): void;
464
469
  /**
465
470
  * Sets the width for the specified row
466
471
  * @param row The row model index to set
@@ -472,6 +477,11 @@ export declare class GridMetricCalculator {
472
477
  * @param row The row model index to reset
473
478
  */
474
479
  resetRowHeight(row: ModelIndex): void;
480
+ /**
481
+ * Resets all the calculated row heights
482
+ * Useful if the theme row height changes
483
+ */
484
+ resetCalculatedRowHeights(): void;
475
485
  }
476
486
  export default GridMetricCalculator;
477
487
  //# sourceMappingURL=GridMetricCalculator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GridMetricCalculator.d.ts","sourceRoot":"","sources":["../src/GridMetricCalculator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GridMetricCalculator.d.ts","sourceRoot":"","sources":["../src/GridMetricCalculator.ts"],"names":[],"mappings":"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"}
@@ -1462,6 +1462,14 @@ export class GridMetricCalculator {
1462
1462
  this.userColumnWidths = userColumnWidths;
1463
1463
  }
1464
1464
 
1465
+ /**
1466
+ * Resets all the calculated column widths
1467
+ * Useful if the theme minimum column width changes
1468
+ */
1469
+ resetCalculatedColumnWidths() {
1470
+ this.calculatedColumnWidths = new Map();
1471
+ }
1472
+
1465
1473
  /**
1466
1474
  * Sets the width for the specified row
1467
1475
  * @param row The row model index to set
@@ -1486,6 +1494,14 @@ export class GridMetricCalculator {
1486
1494
  this.userRowHeights = userRowHeights;
1487
1495
  this.calculatedRowHeights.delete(row);
1488
1496
  }
1497
+
1498
+ /**
1499
+ * Resets all the calculated row heights
1500
+ * Useful if the theme row height changes
1501
+ */
1502
+ resetCalculatedRowHeights() {
1503
+ this.calculatedRowHeights = new Map();
1504
+ }
1489
1505
  }
1490
1506
  _defineProperty(GridMetricCalculator, "CACHE_SIZE", 10000);
1491
1507
  _defineProperty(GridMetricCalculator, "MAX_COLUMN_WIDTH", 0.8);