@deephaven/grid 0.7.3-beta.8 → 0.8.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.
Files changed (147) hide show
  1. package/dist/CellInputField.d.ts +4 -4
  2. package/dist/CellInputField.d.ts.map +1 -1
  3. package/dist/CellInputField.js +10 -11
  4. package/dist/CellInputField.js.map +1 -1
  5. package/dist/EditableGridModel.d.ts +70 -0
  6. package/dist/EditableGridModel.d.ts.map +1 -0
  7. package/dist/EditableGridModel.js +13 -0
  8. package/dist/EditableGridModel.js.map +1 -0
  9. package/dist/EventHandlerResult.d.ts +17 -0
  10. package/dist/EventHandlerResult.d.ts.map +1 -0
  11. package/dist/EventHandlerResult.js +2 -0
  12. package/dist/EventHandlerResult.js.map +1 -0
  13. package/dist/ExpandableGridModel.d.ts +34 -0
  14. package/dist/ExpandableGridModel.d.ts.map +1 -0
  15. package/dist/ExpandableGridModel.js +7 -0
  16. package/dist/ExpandableGridModel.js.map +1 -0
  17. package/dist/Grid.d.ts +283 -234
  18. package/dist/Grid.d.ts.map +1 -1
  19. package/dist/Grid.js +397 -165
  20. package/dist/Grid.js.map +1 -1
  21. package/dist/GridColorUtils.d.ts +22 -12
  22. package/dist/GridColorUtils.d.ts.map +1 -1
  23. package/dist/GridColorUtils.js +26 -21
  24. package/dist/GridColorUtils.js.map +1 -1
  25. package/dist/GridMetricCalculator.d.ts.map +1 -1
  26. package/dist/GridMetricCalculator.js +8 -4
  27. package/dist/GridMetricCalculator.js.map +1 -1
  28. package/dist/GridModel.d.ts +54 -60
  29. package/dist/GridModel.d.ts.map +1 -1
  30. package/dist/GridModel.js +54 -122
  31. package/dist/GridModel.js.map +1 -1
  32. package/dist/GridMouseHandler.d.ts +23 -24
  33. package/dist/GridMouseHandler.d.ts.map +1 -1
  34. package/dist/GridMouseHandler.js +8 -14
  35. package/dist/GridMouseHandler.js.map +1 -1
  36. package/dist/GridRange.d.ts +2 -2
  37. package/dist/GridRange.d.ts.map +1 -1
  38. package/dist/GridRange.js +1 -1
  39. package/dist/GridRange.js.map +1 -1
  40. package/dist/GridRenderer.d.ts +117 -69
  41. package/dist/GridRenderer.d.ts.map +1 -1
  42. package/dist/GridRenderer.js +183 -168
  43. package/dist/GridRenderer.js.map +1 -1
  44. package/dist/GridUtils.d.ts +4 -4
  45. package/dist/GridUtils.js +4 -4
  46. package/dist/GridUtils.js.map +1 -1
  47. package/dist/KeyHandler.d.ts +10 -7
  48. package/dist/KeyHandler.d.ts.map +1 -1
  49. package/dist/KeyHandler.js +6 -5
  50. package/dist/KeyHandler.js.map +1 -1
  51. package/dist/MockGridData.d.ts +1 -1
  52. package/dist/MockGridData.d.ts.map +1 -1
  53. package/dist/MockGridData.js.map +1 -1
  54. package/dist/MockGridModel.d.ts +39 -12
  55. package/dist/MockGridModel.d.ts.map +1 -1
  56. package/dist/MockGridModel.js +43 -10
  57. package/dist/MockGridModel.js.map +1 -1
  58. package/dist/MockTreeGridModel.d.ts +37 -22
  59. package/dist/MockTreeGridModel.d.ts.map +1 -1
  60. package/dist/MockTreeGridModel.js +38 -20
  61. package/dist/MockTreeGridModel.js.map +1 -1
  62. package/dist/errors/AssertionError.d.ts +5 -0
  63. package/dist/errors/AssertionError.d.ts.map +1 -0
  64. package/dist/errors/AssertionError.js +12 -0
  65. package/dist/errors/AssertionError.js.map +1 -0
  66. package/dist/errors/PasteError.d.ts +1 -1
  67. package/dist/errors/PasteError.d.ts.map +1 -1
  68. package/dist/errors/PasteError.js +1 -2
  69. package/dist/errors/PasteError.js.map +1 -1
  70. package/dist/errors/assertIsDefined.d.ts +3 -0
  71. package/dist/errors/assertIsDefined.d.ts.map +1 -0
  72. package/dist/errors/assertIsDefined.js +8 -0
  73. package/dist/errors/assertIsDefined.js.map +1 -0
  74. package/dist/errors/index.d.ts +2 -0
  75. package/dist/errors/index.d.ts.map +1 -1
  76. package/dist/errors/index.js +2 -1
  77. package/dist/errors/index.js.map +1 -1
  78. package/dist/index.d.ts +1 -0
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.js +1 -0
  81. package/dist/index.js.map +1 -1
  82. package/dist/key-handlers/EditKeyHandler.d.ts +3 -2
  83. package/dist/key-handlers/EditKeyHandler.d.ts.map +1 -1
  84. package/dist/key-handlers/EditKeyHandler.js +10 -9
  85. package/dist/key-handlers/EditKeyHandler.js.map +1 -1
  86. package/dist/key-handlers/PasteKeyHandler.d.ts +3 -5
  87. package/dist/key-handlers/PasteKeyHandler.d.ts.map +1 -1
  88. package/dist/key-handlers/PasteKeyHandler.js +3 -3
  89. package/dist/key-handlers/PasteKeyHandler.js.map +1 -1
  90. package/dist/key-handlers/SelectionKeyHandler.d.ts +5 -5
  91. package/dist/key-handlers/SelectionKeyHandler.d.ts.map +1 -1
  92. package/dist/key-handlers/SelectionKeyHandler.js +16 -15
  93. package/dist/key-handlers/SelectionKeyHandler.js.map +1 -1
  94. package/dist/key-handlers/TreeKeyHandler.d.ts +2 -2
  95. package/dist/key-handlers/TreeKeyHandler.d.ts.map +1 -1
  96. package/dist/key-handlers/TreeKeyHandler.js +14 -12
  97. package/dist/key-handlers/TreeKeyHandler.js.map +1 -1
  98. package/dist/memoizeClear.d.ts +13 -3
  99. package/dist/memoizeClear.d.ts.map +1 -1
  100. package/dist/memoizeClear.js +7 -7
  101. package/dist/memoizeClear.js.map +1 -1
  102. package/dist/mouse-handlers/EditMouseHandler.d.ts +3 -4
  103. package/dist/mouse-handlers/EditMouseHandler.d.ts.map +1 -1
  104. package/dist/mouse-handlers/EditMouseHandler.js +3 -2
  105. package/dist/mouse-handlers/EditMouseHandler.js.map +1 -1
  106. package/dist/mouse-handlers/GridColumnMoveMouseHandler.d.ts +12 -5
  107. package/dist/mouse-handlers/GridColumnMoveMouseHandler.d.ts.map +1 -1
  108. package/dist/mouse-handlers/GridColumnMoveMouseHandler.js +13 -10
  109. package/dist/mouse-handlers/GridColumnMoveMouseHandler.js.map +1 -1
  110. package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.d.ts +24 -3
  111. package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.d.ts.map +1 -1
  112. package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js +2 -1
  113. package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js.map +1 -1
  114. package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.d.ts +16 -6
  115. package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.d.ts.map +1 -1
  116. package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js +41 -37
  117. package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js.map +1 -1
  118. package/dist/mouse-handlers/GridRowMoveMouseHandler.d.ts +10 -3
  119. package/dist/mouse-handlers/GridRowMoveMouseHandler.d.ts.map +1 -1
  120. package/dist/mouse-handlers/GridRowMoveMouseHandler.js +14 -11
  121. package/dist/mouse-handlers/GridRowMoveMouseHandler.js.map +1 -1
  122. package/dist/mouse-handlers/GridRowSeparatorMouseHandler.d.ts +24 -3
  123. package/dist/mouse-handlers/GridRowSeparatorMouseHandler.d.ts.map +1 -1
  124. package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js +4 -3
  125. package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js.map +1 -1
  126. package/dist/mouse-handlers/GridRowTreeMouseHandler.d.ts +8 -3
  127. package/dist/mouse-handlers/GridRowTreeMouseHandler.d.ts.map +1 -1
  128. package/dist/mouse-handlers/GridRowTreeMouseHandler.js +12 -7
  129. package/dist/mouse-handlers/GridRowTreeMouseHandler.js.map +1 -1
  130. package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.d.ts +9 -3
  131. package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.d.ts.map +1 -1
  132. package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js +2 -1
  133. package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js.map +1 -1
  134. package/dist/mouse-handlers/GridSelectionMouseHandler.d.ts +15 -9
  135. package/dist/mouse-handlers/GridSelectionMouseHandler.d.ts.map +1 -1
  136. package/dist/mouse-handlers/GridSelectionMouseHandler.js +26 -16
  137. package/dist/mouse-handlers/GridSelectionMouseHandler.js.map +1 -1
  138. package/dist/mouse-handlers/GridSeparatorMouseHandler.d.ts +46 -28
  139. package/dist/mouse-handlers/GridSeparatorMouseHandler.d.ts.map +1 -1
  140. package/dist/mouse-handlers/GridSeparatorMouseHandler.js +57 -74
  141. package/dist/mouse-handlers/GridSeparatorMouseHandler.js.map +1 -1
  142. package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.d.ts +16 -6
  143. package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.d.ts.map +1 -1
  144. package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js +41 -37
  145. package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js.map +1 -1
  146. package/dist/tsconfig.tsbuildinfo +1 -1
  147. package/package.json +3 -3
@@ -3,6 +3,10 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
3
3
  import memoizeClear from "./memoizeClear.js";
4
4
  import GridUtils from "./GridUtils.js";
5
5
  import GridColorUtils from "./GridColorUtils.js";
6
+ import { isExpandableGridModel } from "./ExpandableGridModel.js";
7
+ import { getOrThrow } from "./GridMetricCalculator.js";
8
+ import { isEditableGridModel } from "./EditableGridModel.js";
9
+
6
10
  /* eslint react/destructuring-assignment: "off" */
7
11
 
8
12
  /* eslint class-methods-use-this: "off" */
@@ -14,8 +18,7 @@ import GridColorUtils from "./GridColorUtils.js";
14
18
  * This default rendering just renders a basic grid. Extend this class and implement
15
19
  * your own methods to customize drawing of the grid (eg. Draw icons or special features)
16
20
  */
17
-
18
- class GridRenderer {
21
+ export class GridRenderer {
19
22
  constructor() {
20
23
  _defineProperty(this, "getCachedTruncatedString", memoizeClear((context, text, width, fontWidth) => GridRenderer.truncateToWidth(context, text, width, fontWidth), {
21
24
  max: 10000
@@ -39,9 +42,10 @@ class GridRenderer {
39
42
  }
40
43
 
41
44
  /**
42
- * Truncate a string and add ellipses if necessary
43
- * @param {string} str The string to truncate
44
- * @param {number} len The length to truncate the string to. If longer than the actual string, just returns the string
45
+ * Truncate a string to the specified length and add ellipses if necessary
46
+ * @param str The string to truncate
47
+ * @param len The length to truncate the string to. If longer than the actual string, just returns the string
48
+ * @returns The truncated string
45
49
  */
46
50
  static truncate(str, len) {
47
51
  if (len < str.length) {
@@ -53,11 +57,12 @@ class GridRenderer {
53
57
  }
54
58
  /**
55
59
  * Uses binary search to truncate a string to fit in the provided width
56
- * @param {Context} context The drawing context to measure the text in
57
- * @param {string} str The string to get the maximum length it can draw
58
- * @param {number} width The width to truncate it to
59
- * @param {number} start The low boundary to start the search
60
- * @param {number} end The high boundary to start the search
60
+ * @param context The drawing context to measure the text in
61
+ * @param str The string to get the maximum length it can draw
62
+ * @param width The width to truncate it to
63
+ * @param start The low boundary to start the search
64
+ * @param end The high boundary to start the search
65
+ * @returns The truncated string
61
66
  */
62
67
 
63
68
 
@@ -105,11 +110,11 @@ class GridRenderer {
105
110
  * Truncate a string (if necessary) to fit in the specified width.
106
111
  * First uses the estimated font width to calculate a lower/upper bound
107
112
  * Then uses binary search within those bounds to find the exact max length
108
- * @param {Context} context The drawing context
109
- * @param {string} str The string to calculate max length for
110
- * @param {number} width The width to truncate within
111
- * @param {number} fontWidth The estimated width of each character
112
- * @returns {string} The truncated string that fits within the width provided
113
+ * @param context The drawing context
114
+ * @param str The string to calculate max length for
115
+ * @param width The width to truncate within
116
+ * @param fontWidth The estimated width of each character
117
+ * @returns The truncated string that fits within the width provided
113
118
  */
114
119
 
115
120
 
@@ -128,9 +133,8 @@ class GridRenderer {
128
133
  return GridRenderer.binaryTruncateToWidth(context, str, width, lo, hi);
129
134
  }
130
135
  /**
131
- *
132
- * @param {CanvasRenderingContext2D} context The context to draw the grid in
133
- * @param {GridState} state State of the grid, { left, top, mouseX, mouseY, selectedRanges, theme, model, metrics }
136
+ * Draw the grid canvas with the state provided
137
+ * @param state The state of the grid
134
138
  */
135
139
 
136
140
 
@@ -192,12 +196,12 @@ class GridRenderer {
192
196
 
193
197
  drawFloatingRows(context, state) {
194
198
  var {
199
+ draggingRow,
200
+ draggingColumn,
195
201
  metrics,
196
202
  theme
197
203
  } = state;
198
204
  var {
199
- draggingRow,
200
- draggingColumn,
201
205
  floatingTopRowCount,
202
206
  floatingBottomRowCount,
203
207
  floatingRows,
@@ -227,17 +231,17 @@ class GridRenderer {
227
231
  this.drawSelectedRanges(context, state, {
228
232
  top: 0,
229
233
  bottom: floatingTopRowCount - 1,
230
- maxY: visibleRowYs.get(floatingTopRowCount - 1) + visibleRowHeights.get(floatingTopRowCount - 1) - 0.5
231
- }, true);
234
+ maxY: getOrThrow(visibleRowYs, floatingTopRowCount - 1) + getOrThrow(visibleRowHeights, floatingTopRowCount - 1) - 0.5
235
+ });
232
236
  }
233
237
 
234
238
  if (floatingBottomRowCount > 0) {
235
239
  this.drawSelectedRanges(context, state, {
236
240
  top: rowCount - floatingBottomRowCount - 1,
237
241
  bottom: rowCount - 1,
238
- minY: visibleRowYs.get(rowCount - floatingBottomRowCount) + 0.5,
239
- maxY: visibleRowYs.get(rowCount - 1) + visibleRowHeights.get(rowCount - 1) - 0.5
240
- }, true);
242
+ minY: getOrThrow(visibleRowYs, rowCount - floatingBottomRowCount) + 0.5,
243
+ maxY: getOrThrow(visibleRowYs, rowCount - 1) + getOrThrow(visibleRowHeights, rowCount - 1) - 0.5
244
+ });
241
245
  } // Draw the cell content...
242
246
 
243
247
 
@@ -253,12 +257,12 @@ class GridRenderer {
253
257
 
254
258
  drawFloatingColumns(context, state) {
255
259
  var {
260
+ draggingRow,
261
+ draggingColumn,
256
262
  metrics,
257
263
  theme
258
264
  } = state;
259
265
  var {
260
- draggingRow,
261
- draggingColumn,
262
266
  floatingLeftColumnCount,
263
267
  floatingRightColumnCount,
264
268
  floatingLeftWidth,
@@ -300,17 +304,17 @@ class GridRenderer {
300
304
  if (floatingLeftColumnCount > 0) {
301
305
  this.drawSelectedRanges(context, state, {
302
306
  left: 0,
303
- maxX: visibleColumnXs.get(floatingLeftColumnCount - 1) + visibleColumnWidths.get(floatingLeftColumnCount - 1)
304
- }, true);
307
+ maxX: getOrThrow(visibleColumnXs, floatingLeftColumnCount - 1) + getOrThrow(visibleColumnWidths, floatingLeftColumnCount - 1)
308
+ });
305
309
  }
306
310
 
307
311
  if (floatingRightColumnCount > 0) {
308
312
  this.drawSelectedRanges(context, state, {
309
313
  left: columnCount - floatingRightColumnCount,
310
314
  right: columnCount - 1,
311
- minX: visibleColumnXs.get(columnCount - floatingRightColumnCount) + 0.5,
312
- maxX: visibleColumnXs.get(columnCount - 1) + visibleColumnWidths.get(columnCount - 1)
313
- }, true);
315
+ minX: getOrThrow(visibleColumnXs, columnCount - floatingRightColumnCount) + 0.5,
316
+ maxX: getOrThrow(visibleColumnXs, columnCount - 1) + getOrThrow(visibleColumnWidths, columnCount - 1)
317
+ });
314
318
  } // Draw the cell content...
315
319
 
316
320
 
@@ -352,26 +356,26 @@ class GridRenderer {
352
356
  context.strokeStyle = floatingDividerOuterColor;
353
357
 
354
358
  if (floatingTopRowCount > 0) {
355
- var y = visibleRowYs.get(floatingTopRowCount - 1) + visibleRowHeights.get(floatingTopRowCount - 1) + 0.5;
359
+ var y = getOrThrow(visibleRowYs, floatingTopRowCount - 1) + getOrThrow(visibleRowHeights, floatingTopRowCount - 1) + 0.5;
356
360
  context.moveTo(0.5, y);
357
361
  context.lineTo(maxX - 0.5, y);
358
362
  }
359
363
 
360
364
  if (floatingBottomRowCount > 0) {
361
- var _y = visibleRowYs.get(rowCount - floatingBottomRowCount) - 0.5;
365
+ var _y = getOrThrow(visibleRowYs, rowCount - floatingBottomRowCount) - 0.5;
362
366
 
363
367
  context.moveTo(0.5, _y);
364
368
  context.lineTo(maxX - 0.5, _y);
365
369
  }
366
370
 
367
371
  if (floatingLeftColumnCount > 0) {
368
- var x = visibleColumnXs.get(floatingLeftColumnCount - 1) + visibleColumnWidths.get(floatingLeftColumnCount - 1) + 0.5;
372
+ var x = getOrThrow(visibleColumnXs, floatingLeftColumnCount - 1) + getOrThrow(visibleColumnWidths, floatingLeftColumnCount - 1) + 0.5;
369
373
  context.moveTo(x, 0.5);
370
374
  context.lineTo(x, maxY - 0.5);
371
375
  }
372
376
 
373
377
  if (floatingRightColumnCount > 0) {
374
- var _x = visibleColumnXs.get(columnCount - floatingRightColumnCount) - 0.5;
378
+ var _x = getOrThrow(visibleColumnXs, columnCount - floatingRightColumnCount) - 0.5;
375
379
 
376
380
  context.moveTo(_x, 0.5);
377
381
  context.lineTo(_x, maxY - 0.5);
@@ -383,28 +387,28 @@ class GridRenderer {
383
387
  context.strokeStyle = floatingDividerInnerColor;
384
388
 
385
389
  if (floatingTopRowCount > 0) {
386
- var _y2 = visibleRowYs.get(floatingTopRowCount - 1) + visibleRowHeights.get(floatingTopRowCount - 1) + 0.5;
390
+ var _y2 = getOrThrow(visibleRowYs, floatingTopRowCount - 1) + getOrThrow(visibleRowHeights, floatingTopRowCount - 1) + 0.5;
387
391
 
388
392
  context.moveTo(0.5, _y2);
389
393
  context.lineTo(maxX - 0.5, _y2);
390
394
  }
391
395
 
392
396
  if (floatingBottomRowCount > 0) {
393
- var _y3 = visibleRowYs.get(rowCount - floatingBottomRowCount) - 0.5;
397
+ var _y3 = getOrThrow(visibleRowYs, rowCount - floatingBottomRowCount) - 0.5;
394
398
 
395
399
  context.moveTo(0.5, _y3);
396
400
  context.lineTo(maxX - 0.5, _y3);
397
401
  }
398
402
 
399
403
  if (floatingLeftColumnCount > 0) {
400
- var _x2 = visibleColumnXs.get(floatingLeftColumnCount - 1) + visibleColumnWidths.get(floatingLeftColumnCount - 1) + 0.5;
404
+ var _x2 = getOrThrow(visibleColumnXs, floatingLeftColumnCount - 1) + getOrThrow(visibleColumnWidths, floatingLeftColumnCount - 1) + 0.5;
401
405
 
402
406
  context.moveTo(_x2, 0.5);
403
407
  context.lineTo(_x2, maxY - 0.5);
404
408
  }
405
409
 
406
410
  if (floatingRightColumnCount > 0) {
407
- var _x3 = visibleColumnXs.get(columnCount - floatingRightColumnCount) - 0.5;
411
+ var _x3 = getOrThrow(visibleColumnXs, columnCount - floatingRightColumnCount) - 0.5;
408
412
 
409
413
  context.moveTo(_x3, 0.5);
410
414
  context.lineTo(_x3, maxY - 0.5);
@@ -433,7 +437,7 @@ class GridRenderer {
433
437
  floatingBottomRowCount,
434
438
  floatingLeftColumnCount,
435
439
  floatingRightColumnCount,
436
- floatingTopColumnCount,
440
+ floatingTopRowCount,
437
441
  columnCount,
438
442
  rowCount,
439
443
  visibleRowHeights,
@@ -446,10 +450,10 @@ class GridRenderer {
446
450
  this.drawSelectedRanges(context, state, {
447
451
  bottom: Math.min(bottom, rowCount - floatingBottomRowCount - 1),
448
452
  right: Math.min(right, columnCount - floatingRightColumnCount - 1),
449
- minX: floatingLeftColumnCount > 0 && visibleColumnXs.has(floatingLeftColumnCount + 1) ? visibleColumnXs.get(floatingLeftColumnCount + 1) : -10,
450
- minY: floatingTopColumnCount > 0 && visibleRowYs.has(floatingTopColumnCount + 1) ? visibleRowYs.get(floatingTopColumnCount + 1) : -10,
451
- maxX: floatingRightColumnCount > 0 && visibleColumnXs.has(columnCount - floatingRightColumnCount - 1) ? visibleColumnXs.get(columnCount - floatingRightColumnCount - 1) + visibleColumnWidths.get(columnCount - floatingRightColumnCount - 1) - 0.5 : width + 10,
452
- maxY: floatingBottomRowCount > 0 && visibleRowYs.has(rowCount - floatingBottomRowCount - 1) ? visibleRowYs.get(rowCount - floatingBottomRowCount - 1) + visibleRowHeights.get(rowCount - floatingBottomRowCount - 1) - 0.5 : height + 10
453
+ minX: floatingLeftColumnCount > 0 && visibleColumnXs.has(floatingLeftColumnCount + 1) ? getOrThrow(visibleColumnXs, floatingLeftColumnCount + 1) : -10,
454
+ minY: floatingTopRowCount > 0 && visibleRowYs.has(floatingTopRowCount + 1) ? getOrThrow(visibleRowYs, floatingTopRowCount + 1) : -10,
455
+ maxX: floatingRightColumnCount > 0 && visibleColumnXs.has(columnCount - floatingRightColumnCount - 1) ? getOrThrow(visibleColumnXs, columnCount - floatingRightColumnCount - 1) + getOrThrow(visibleColumnWidths, columnCount - floatingRightColumnCount - 1) - 0.5 : width + 10,
456
+ maxY: floatingBottomRowCount > 0 && visibleRowYs.has(rowCount - floatingBottomRowCount - 1) ? getOrThrow(visibleRowYs, rowCount - floatingBottomRowCount - 1) + getOrThrow(visibleRowHeights, rowCount - floatingBottomRowCount - 1) - 0.5 : height + 10
453
457
  });
454
458
  }
455
459
 
@@ -497,7 +501,7 @@ class GridRenderer {
497
501
  var bottomShadowRows = [];
498
502
 
499
503
  var addRowToColorMap = (row, rowAbove) => {
500
- var depth = model.depthForRow(row);
504
+ var depth = isExpandableGridModel(model) ? model.depthForRow(row) : 0;
501
505
  var colorSet = colorSets[row % colorSets.length];
502
506
  var color = colorSet[Math.min(depth, colorSet.length - 1)];
503
507
 
@@ -508,7 +512,7 @@ class GridRenderer {
508
512
  colorRowMap.get(color).push(row);
509
513
 
510
514
  if (rowAbove != null) {
511
- var depthAbove = model.depthForRow(rowAbove);
515
+ var depthAbove = isExpandableGridModel(model) ? model.depthForRow(rowAbove) : 0;
512
516
 
513
517
  if (depthAbove < depth) {
514
518
  topShadowRows.push(row);
@@ -521,7 +525,7 @@ class GridRenderer {
521
525
 
522
526
  for (var i = 0; i < rows.length; i += 1) {
523
527
  var row = rows[i];
524
- var rowAbove = i > 0 ? rows[i - 1] : null;
528
+ var rowAbove = i > 0 ? rows[i - 1] : undefined;
525
529
  addRowToColorMap(row, rowAbove);
526
530
  }
527
531
 
@@ -531,8 +535,8 @@ class GridRenderer {
531
535
 
532
536
  for (var _i = 0; _i < colorRows.length; _i += 1) {
533
537
  var _row = colorRows[_i];
534
- var y = visibleRowYs.get(_row);
535
- var rowHeight = visibleRowHeights.get(_row);
538
+ var y = getOrThrow(visibleRowYs, _row);
539
+ var rowHeight = getOrThrow(visibleRowHeights, _row);
536
540
  context.rect(minX, y, maxX, rowHeight);
537
541
  }
538
542
 
@@ -550,7 +554,7 @@ class GridRenderer {
550
554
 
551
555
  for (var _i2 = 0; _i2 < topShadowRows.length; _i2 += 1) {
552
556
  var _row2 = topShadowRows[_i2];
553
- var y = visibleRowYs.get(_row2); // Use a translate so we can reuse the gradient
557
+ var y = getOrThrow(visibleRowYs, _row2); // Use a translate so we can reuse the gradient
554
558
 
555
559
  context.translate(0, y);
556
560
  context.fillRect(minX, 0, maxX, shadowBlur);
@@ -578,9 +582,9 @@ class GridRenderer {
578
582
  for (var _i3 = 0; _i3 < bottomShadowRows.length; _i3 += 1) {
579
583
  var _row3 = bottomShadowRows[_i3];
580
584
 
581
- var _y4 = visibleRowYs.get(_row3);
585
+ var _y4 = getOrThrow(visibleRowYs, _row3);
582
586
 
583
- var rowHeight = visibleRowHeights.get(_row3);
587
+ var rowHeight = getOrThrow(visibleRowHeights, _row3);
584
588
  var gradientY = _y4 + rowHeight - shadowBlur; // Use a translate so we can reuse the gradient
585
589
 
586
590
  context.translate(0, gradientY);
@@ -599,6 +603,7 @@ class GridRenderer {
599
603
  theme,
600
604
  metrics
601
605
  } = state;
606
+ if (mouseX == null || mouseY == null) return;
602
607
  var mouseColumn = GridUtils.getColumnAtX(mouseX, metrics);
603
608
 
604
609
  if (mouseColumn == null || !theme.columnHoverBackgroundColor) {
@@ -615,8 +620,8 @@ class GridRenderer {
615
620
  return;
616
621
  }
617
622
 
618
- var x = visibleColumnXs.get(mouseColumn);
619
- var columnWidth = visibleColumnWidths.get(mouseColumn);
623
+ var x = getOrThrow(visibleColumnXs, mouseColumn);
624
+ var columnWidth = getOrThrow(visibleColumnWidths, mouseColumn);
620
625
  context.fillStyle = theme.columnHoverBackgroundColor;
621
626
  context.fillRect(x, 0, columnWidth, maxY);
622
627
  }
@@ -628,6 +633,7 @@ class GridRenderer {
628
633
  theme,
629
634
  metrics
630
635
  } = state;
636
+ if (mouseX == null || mouseY == null) return;
631
637
  var {
632
638
  maxX
633
639
  } = metrics;
@@ -660,7 +666,7 @@ class GridRenderer {
660
666
  rowFooterWidth
661
667
  } = metrics;
662
668
 
663
- if (mouseX > maxX + rowFooterWidth || !theme.rowHoverBackgroundColor) {
669
+ if (mouseX == null || mouseY == null || mouseX > maxX + rowFooterWidth || !theme.rowHoverBackgroundColor) {
664
670
  return;
665
671
  }
666
672
 
@@ -682,13 +688,24 @@ class GridRenderer {
682
688
  visibleRowYs,
683
689
  maxX
684
690
  } = metrics;
685
- var y = visibleRowYs.get(row);
686
- var rowHeight = visibleRowHeights.get(row);
687
- context.fillStyle = theme.rowHoverBackgroundColor;
691
+ var y = getOrThrow(visibleRowYs, row);
692
+ var rowHeight = getOrThrow(visibleRowHeights, row);
693
+
694
+ if (theme.rowHoverBackgroundColor) {
695
+ context.fillStyle = theme.rowHoverBackgroundColor;
696
+ }
688
697
 
689
698
  for (var i = 0; i < selectedRanges.length; i += 1) {
690
- if (selectedRanges[i].startRow <= row && selectedRanges[i].endRow >= row) {
691
- context.fillStyle = theme.selectedRowHoverBackgroundColor;
699
+ var {
700
+ startRow,
701
+ endRow
702
+ } = selectedRanges[i];
703
+
704
+ if (startRow != null && endRow != null && startRow <= row && endRow >= row) {
705
+ if (theme.selectedRowHoverBackgroundColor) {
706
+ context.fillStyle = theme.selectedRowHoverBackgroundColor;
707
+ }
708
+
692
709
  break;
693
710
  }
694
711
  }
@@ -740,7 +757,7 @@ class GridRenderer {
740
757
 
741
758
  for (var i = 0; i < columns.length; i += 1) {
742
759
  var column = columns[i];
743
- var x = visibleColumnXs.get(column) + 0.5;
760
+ var x = getOrThrow(visibleColumnXs, column) + 0.5;
744
761
  context.moveTo(x, 0);
745
762
  context.lineTo(x, maxY);
746
763
  }
@@ -758,7 +775,7 @@ class GridRenderer {
758
775
 
759
776
  for (var i = 0; i < rows.length; i += 1) {
760
777
  var row = rows[i];
761
- var y = visibleRowYs.get(row) + 0.5;
778
+ var y = getOrThrow(visibleRowYs, row) + 0.5;
762
779
  context.moveTo(0.5, y);
763
780
  context.lineTo(maxX - 0.5, y);
764
781
  }
@@ -783,7 +800,7 @@ class GridRenderer {
783
800
 
784
801
  for (var j = 0; j < rows.length; j += 1) {
785
802
  var row = rows[j];
786
- var rowAfter = j + 1 < rows.length ? rows[j + 1] : null;
803
+ var rowAfter = j + 1 < rows.length ? rows[j + 1] : undefined;
787
804
  this.drawCellBackground(context, state, column, row, rowAfter);
788
805
  }
789
806
  }
@@ -795,9 +812,6 @@ class GridRenderer {
795
812
  var {
796
813
  metrics,
797
814
  model,
798
- model: {
799
- hasExpandableRows
800
- },
801
815
  theme
802
816
  } = state;
803
817
  var {
@@ -809,16 +823,17 @@ class GridRenderer {
809
823
  visibleRowYs,
810
824
  visibleRowHeights
811
825
  } = metrics;
812
- var modelRow = modelRows.get(row);
813
- var modelColumn = modelColumns.get(column);
826
+ var modelRow = getOrThrow(modelRows, row);
827
+ var modelColumn = getOrThrow(modelColumns, column);
814
828
  var backgroundColor = model.backgroundColorForCell(modelColumn, modelRow, theme);
815
829
  var isFirstColumn = column === firstColumn;
830
+ var hasExpandableRows = isExpandableGridModel(model) && model.hasExpandableRows;
816
831
 
817
832
  if (backgroundColor) {
818
- var x = visibleColumnXs.get(column) + 1;
819
- var y = visibleRowYs.get(row) + 1;
820
- var columnWidth = visibleColumnWidths.get(column) - 1;
821
- var rowHeight = visibleRowHeights.get(row) - 1;
833
+ var x = getOrThrow(visibleColumnXs, column) + 1;
834
+ var y = getOrThrow(visibleRowYs, row) + 1;
835
+ var columnWidth = getOrThrow(visibleColumnWidths, column) - 1;
836
+ var rowHeight = getOrThrow(visibleRowHeights, row) - 1;
822
837
  context.fillStyle = backgroundColor;
823
838
  context.fillRect(x, y, columnWidth, rowHeight);
824
839
  }
@@ -852,8 +867,8 @@ class GridRenderer {
852
867
  visibleRows,
853
868
  height
854
869
  } = metrics;
855
- var x = visibleColumnXs.get(column);
856
- var columnWidth = visibleColumnWidths.get(column);
870
+ var x = getOrThrow(visibleColumnXs, column);
871
+ var columnWidth = getOrThrow(visibleColumnWidths, column);
857
872
  context.save();
858
873
  context.beginPath();
859
874
  context.rect(x, 0, columnWidth, height);
@@ -871,9 +886,6 @@ class GridRenderer {
871
886
  var {
872
887
  metrics,
873
888
  model,
874
- model: {
875
- hasExpandableRows
876
- },
877
889
  theme
878
890
  } = state;
879
891
  var {
@@ -892,23 +904,25 @@ class GridRenderer {
892
904
  treeHorizontalPadding,
893
905
  textColor
894
906
  } = theme;
895
- var x = visibleColumnXs.get(column);
896
- var y = visibleRowYs.get(row);
897
- var columnWidth = visibleColumnWidths.get(column);
898
- var rowHeight = visibleRowHeights.get(row);
899
- var modelRow = modelRows.get(row);
900
- var modelColumn = modelColumns.get(column);
907
+ var x = getOrThrow(visibleColumnXs, column);
908
+ var y = getOrThrow(visibleRowYs, row);
909
+ var columnWidth = getOrThrow(visibleColumnWidths, column);
910
+ var rowHeight = getOrThrow(visibleRowHeights, row);
911
+ var modelRow = getOrThrow(modelRows, row);
912
+ var modelColumn = getOrThrow(modelColumns, column);
901
913
  var text = model.textForCell(modelColumn, modelRow);
902
914
  var isFirstColumn = column === firstColumn;
903
915
 
904
916
  if (text && rowHeight > 0) {
917
+ var _fontWidths$get;
918
+
905
919
  var textAlign = model.textAlignForCell(modelColumn, modelRow) || 'left';
906
920
  context.textAlign = textAlign;
907
921
  var color = model.colorForCell(modelColumn, modelRow, theme) || textColor;
908
922
  context.fillStyle = color;
909
923
  var treeIndent = 0;
910
924
 
911
- if (hasExpandableRows && isFirstColumn) {
925
+ if (isExpandableGridModel(model) && model.hasExpandableRows && isFirstColumn) {
912
926
  treeIndent = treeDepthIndent * (model.depthForRow(row) + 1) + treeHorizontalPadding;
913
927
  }
914
928
 
@@ -925,7 +939,7 @@ class GridRenderer {
925
939
  }
926
940
 
927
941
  textX += treeIndent;
928
- var fontWidth = fontWidths.get(context.font);
942
+ var fontWidth = (_fontWidths$get = fontWidths.get(context.font)) !== null && _fontWidths$get !== void 0 ? _fontWidths$get : GridRenderer.DEFAULT_FONT_WIDTH;
929
943
  var truncatedText = this.getCachedTruncatedString(context, text, textWidth - cellHorizontalPadding * 2, fontWidth);
930
944
 
931
945
  if (truncatedText) {
@@ -933,7 +947,7 @@ class GridRenderer {
933
947
  }
934
948
  }
935
949
 
936
- if (isFirstColumn && hasExpandableRows) {
950
+ if (isFirstColumn && isExpandableGridModel(model) && model.hasExpandableRows) {
937
951
  this.drawCellRowTreeMarker(context, state, row);
938
952
  }
939
953
  }
@@ -960,18 +974,18 @@ class GridRenderer {
960
974
  treeMarkerColor,
961
975
  treeMarkerHoverColor
962
976
  } = theme;
963
- var columnX = visibleColumnXs.get(firstColumn);
964
- var columnWidth = visibleColumnWidths.get(firstColumn);
965
- var rowY = visibleRowYs.get(row);
966
- var rowHeight = visibleRowHeights.get(row);
967
- var isExpandable = model.isRowExpandable(row);
968
- var isExpanded = model.isRowExpanded(row);
969
-
970
- if (isExpandable) {
971
- var treeBox = visibleRowTreeBoxes.get(row);
972
- var color = mouseX >= gridX + columnX && mouseX <= gridX + columnX + columnWidth && mouseY >= gridY + rowY && mouseY <= gridY + rowY + rowHeight ? treeMarkerHoverColor : treeMarkerColor;
973
- this.drawTreeMarker(context, state, columnX, rowY, treeBox, color, isExpanded);
977
+ var columnX = getOrThrow(visibleColumnXs, firstColumn);
978
+ var columnWidth = getOrThrow(visibleColumnWidths, firstColumn);
979
+ var rowY = getOrThrow(visibleRowYs, row);
980
+ var rowHeight = getOrThrow(visibleRowHeights, row);
981
+
982
+ if (!isExpandableGridModel(model) || !model.isRowExpandable(row)) {
983
+ return;
974
984
  }
985
+
986
+ var treeBox = getOrThrow(visibleRowTreeBoxes, row);
987
+ var color = mouseX != null && mouseY != null && mouseX >= gridX + columnX && mouseX <= gridX + columnX + columnWidth && mouseY >= gridY + rowY && mouseY <= gridY + rowY + rowHeight ? treeMarkerHoverColor : treeMarkerColor;
988
+ this.drawTreeMarker(context, state, columnX, rowY, treeBox, color, model.isRowExpanded(row));
975
989
  }
976
990
 
977
991
  drawTreeMarker(context, state, columnX, rowY, treeBox, color, isExpanded) {
@@ -995,6 +1009,7 @@ class GridRenderer {
995
1009
  model,
996
1010
  theme
997
1011
  } = state;
1012
+ if (!isExpandableGridModel(model)) return;
998
1013
  var depth = model.depthForRow(row);
999
1014
  if (depth === 0) return;
1000
1015
  var {
@@ -1008,10 +1023,10 @@ class GridRenderer {
1008
1023
  treeHorizontalPadding,
1009
1024
  treeLineColor
1010
1025
  } = theme;
1011
- var columnX = visibleColumnXs.get(firstColumn);
1012
- var rowY = visibleRowYs.get(row);
1013
- var rowHeight = visibleRowHeights.get(row);
1014
- var depthRowAfter = model.depthForRow(rowAfter);
1026
+ var columnX = getOrThrow(visibleColumnXs, firstColumn);
1027
+ var rowY = getOrThrow(visibleRowYs, row);
1028
+ var rowHeight = getOrThrow(visibleRowHeights, row);
1029
+ var depthRowAfter = rowAfter !== undefined ? model.depthForRow(rowAfter) : 0;
1015
1030
  var depthDiff = depth > depthRowAfter ? depth - depthRowAfter : 0;
1016
1031
  context.strokeStyle = treeLineColor;
1017
1032
  context.lineWidth = 1; // draw normal depth lines
@@ -1108,13 +1123,13 @@ class GridRenderer {
1108
1123
 
1109
1124
  for (var i = 0; i < visibleColumns.length; i += 1) {
1110
1125
  var column = visibleColumns[i];
1111
- var columnWidth = visibleColumnWidths.get(column);
1112
- var x = visibleColumnXs.get(column) + gridX;
1126
+ var columnWidth = getOrThrow(visibleColumnWidths, column);
1127
+ var x = getOrThrow(visibleColumnXs, column) + gridX;
1113
1128
  this.drawColumnHeader(context, state, column, x, columnWidth);
1114
1129
  }
1115
1130
 
1116
1131
  if (containsFrozenColumns) {
1117
- floatingLeftColumnsWidth = visibleColumnXs.get(floatingLeftColumnCount - 1) + visibleColumnWidths.get(floatingLeftColumnCount - 1); // Frozen columns' background
1132
+ floatingLeftColumnsWidth = getOrThrow(visibleColumnXs, floatingLeftColumnCount - 1) + getOrThrow(visibleColumnWidths, floatingLeftColumnCount - 1); // Frozen columns' background
1118
1133
 
1119
1134
  context.fillStyle = headerBackgroundColor;
1120
1135
  context.fillRect(gridX, 0, floatingLeftColumnsWidth, columnHeaderHeight); // Frozen columns.
@@ -1124,9 +1139,9 @@ class GridRenderer {
1124
1139
  for (var _i5 = 0; _i5 < floatingColumns.length; _i5 += 1) {
1125
1140
  var _column = floatingColumns[_i5];
1126
1141
 
1127
- var _columnWidth = visibleColumnWidths.get(_column);
1142
+ var _columnWidth = getOrThrow(visibleColumnWidths, _column);
1128
1143
 
1129
- var _x4 = visibleColumnXs.get(_column) + gridX;
1144
+ var _x4 = getOrThrow(visibleColumnXs, _column) + gridX;
1130
1145
 
1131
1146
  this.drawColumnHeader(context, state, _column, _x4, _columnWidth);
1132
1147
  }
@@ -1142,9 +1157,9 @@ class GridRenderer {
1142
1157
 
1143
1158
  for (var _i6 = 0; _i6 < visibleColumns.length; _i6 += 1) {
1144
1159
  var _column2 = visibleColumns[_i6];
1145
- var columnX = visibleColumnXs.get(_column2);
1160
+ var columnX = getOrThrow(visibleColumnXs, _column2);
1146
1161
 
1147
- var _columnWidth2 = visibleColumnWidths.get(_column2);
1162
+ var _columnWidth2 = getOrThrow(visibleColumnWidths, _column2);
1148
1163
 
1149
1164
  if (!(columnX < floatingLeftColumnsWidth - _columnWidth2)) {
1150
1165
  if (_columnWidth2 > 0) {
@@ -1166,9 +1181,9 @@ class GridRenderer {
1166
1181
  for (var _i7 = 0; _i7 < floatingColumns.length; _i7 += 1) {
1167
1182
  var _column3 = floatingColumns[_i7];
1168
1183
 
1169
- var _columnX = visibleColumnXs.get(_column3);
1184
+ var _columnX = getOrThrow(visibleColumnXs, _column3);
1170
1185
 
1171
- var _columnWidth3 = visibleColumnWidths.get(_column3);
1186
+ var _columnWidth3 = getOrThrow(visibleColumnWidths, _column3);
1172
1187
 
1173
1188
  if (_columnWidth3 > 0) {
1174
1189
  var _x6 = gridX + _columnX + _columnWidth3 + 0.5;
@@ -1193,9 +1208,9 @@ class GridRenderer {
1193
1208
  for (var _i8 = 0; _i8 < hiddenColumns.length; _i8 += 1) {
1194
1209
  var _column4 = hiddenColumns[_i8];
1195
1210
 
1196
- var _columnX2 = visibleColumnXs.get(_column4);
1211
+ var _columnX2 = getOrThrow(visibleColumnXs, _column4);
1197
1212
 
1198
- var _columnWidth4 = visibleColumnWidths.get(_column4);
1213
+ var _columnWidth4 = getOrThrow(visibleColumnWidths, _column4);
1199
1214
 
1200
1215
  var minX = gridX + _columnX2 + _columnWidth4 + 0.5 - headerHiddenSeparatorSize * 0.5;
1201
1216
  context.rect(minX, hiddenY, headerHiddenSeparatorSize, hiddenSeparatorHeight);
@@ -1207,16 +1222,16 @@ class GridRenderer {
1207
1222
  if (headerSeparatorHoverColor) {
1208
1223
  var highlightedSeparator = draggingColumnSeparator;
1209
1224
 
1210
- if (highlightedSeparator == null) {
1225
+ if (highlightedSeparator == null && mouseX != null && mouseY != null) {
1211
1226
  highlightedSeparator = GridUtils.getColumnSeparatorIndex(mouseX, mouseY, metrics, theme);
1212
1227
  }
1213
1228
 
1214
1229
  if (highlightedSeparator != null && (!isDragging || draggingColumnSeparator != null)) {
1215
1230
  context.strokeStyle = headerSeparatorHoverColor;
1216
1231
 
1217
- var _columnX3 = visibleColumnXs.get(highlightedSeparator);
1232
+ var _columnX3 = getOrThrow(visibleColumnXs, highlightedSeparator);
1218
1233
 
1219
- var _columnWidth5 = visibleColumnWidths.get(highlightedSeparator);
1234
+ var _columnWidth5 = getOrThrow(visibleColumnWidths, highlightedSeparator);
1220
1235
 
1221
1236
  var _x7 = gridX + _columnX3 + _columnWidth5 + 0.5;
1222
1237
 
@@ -1259,7 +1274,7 @@ class GridRenderer {
1259
1274
  var {
1260
1275
  modelColumns
1261
1276
  } = metrics;
1262
- var modelColumn = modelColumns.get(column);
1277
+ var modelColumn = getOrThrow(modelColumns, column);
1263
1278
  var text = model.textForColumnHeader(modelColumn);
1264
1279
  var {
1265
1280
  headerHorizontalPadding
@@ -1345,8 +1360,8 @@ class GridRenderer {
1345
1360
 
1346
1361
  for (var i = 0; i < visibleRows.length; i += 1) {
1347
1362
  var row = visibleRows[i];
1348
- var rowY = visibleRowYs.get(row);
1349
- var rowHeight = visibleRowHeights.get(row);
1363
+ var rowY = getOrThrow(visibleRowYs, row);
1364
+ var rowHeight = getOrThrow(visibleRowHeights, row);
1350
1365
 
1351
1366
  if (rowHeight > 0) {
1352
1367
  var y = gridY + rowY + rowHeight + 0.5;
@@ -1370,9 +1385,9 @@ class GridRenderer {
1370
1385
  for (var _i9 = 0; _i9 < hiddenRows.length; _i9 += 1) {
1371
1386
  var _row4 = hiddenRows[_i9];
1372
1387
 
1373
- var _rowY = visibleRowYs.get(_row4);
1388
+ var _rowY = getOrThrow(visibleRowYs, _row4);
1374
1389
 
1375
- var _rowHeight = visibleRowHeights.get(_row4);
1390
+ var _rowHeight = getOrThrow(visibleRowHeights, _row4);
1376
1391
 
1377
1392
  var minY = gridY + _rowY + _rowHeight + 0.5 - headerHiddenSeparatorSize * 0.5;
1378
1393
  context.rect(hiddenX, minY, hiddenSeparatorWidth, headerHiddenSeparatorSize);
@@ -1384,16 +1399,16 @@ class GridRenderer {
1384
1399
  if (headerSeparatorHoverColor) {
1385
1400
  var highlightedSeparator = draggingRowSeparator;
1386
1401
 
1387
- if (highlightedSeparator == null) {
1402
+ if (highlightedSeparator == null && mouseX != null && mouseY != null) {
1388
1403
  highlightedSeparator = GridUtils.getRowSeparatorIndex(mouseX, mouseY, metrics, theme);
1389
1404
  }
1390
1405
 
1391
1406
  if (highlightedSeparator != null) {
1392
1407
  context.strokeStyle = headerSeparatorHoverColor;
1393
1408
 
1394
- var _rowY2 = visibleRowYs.get(highlightedSeparator);
1409
+ var _rowY2 = getOrThrow(visibleRowYs, highlightedSeparator);
1395
1410
 
1396
- var _rowHeight2 = visibleRowHeights.get(highlightedSeparator);
1411
+ var _rowHeight2 = getOrThrow(visibleRowHeights, highlightedSeparator);
1397
1412
 
1398
1413
  var _y6 = gridY + _rowY2 + _rowHeight2 + 0.5;
1399
1414
 
@@ -1429,9 +1444,9 @@ class GridRenderer {
1429
1444
  for (var _i10 = 0; _i10 < visibleRows.length; _i10 += 1) {
1430
1445
  var _row5 = visibleRows[_i10];
1431
1446
 
1432
- var _rowHeight3 = visibleRowHeights.get(_row5);
1447
+ var _rowHeight3 = getOrThrow(visibleRowHeights, _row5);
1433
1448
 
1434
- var _y7 = visibleRowYs.get(_row5) + gridY;
1449
+ var _y7 = getOrThrow(visibleRowYs, _row5) + gridY;
1435
1450
 
1436
1451
  this.drawRowHeader(context, state, _row5, _y7, _rowHeight3);
1437
1452
  }
@@ -1453,7 +1468,7 @@ class GridRenderer {
1453
1468
  modelRows,
1454
1469
  rowHeaderWidth
1455
1470
  } = metrics;
1456
- var modelRow = modelRows.get(row);
1471
+ var modelRow = getOrThrow(modelRows, row);
1457
1472
  var x = rowHeaderWidth - theme.cellHorizontalPadding;
1458
1473
  var y = rowY + rowHeight * 0.5;
1459
1474
  context.fillText(model.textForRowHeader(modelRow), x, y);
@@ -1514,8 +1529,8 @@ class GridRenderer {
1514
1529
 
1515
1530
  for (var i = 0; i < visibleRows.length; i += 1) {
1516
1531
  var row = visibleRows[i];
1517
- var rowY = visibleRowYs.get(row);
1518
- var rowHeight = visibleRowHeights.get(row);
1532
+ var rowY = getOrThrow(visibleRowYs, row);
1533
+ var rowHeight = getOrThrow(visibleRowHeights, row);
1519
1534
 
1520
1535
  if (rowHeight > 0) {
1521
1536
  var y = gridY + rowY + rowHeight + 0.5;
@@ -1539,9 +1554,9 @@ class GridRenderer {
1539
1554
  for (var _i11 = 0; _i11 < hiddenRows.length; _i11 += 1) {
1540
1555
  var _row6 = hiddenRows[_i11];
1541
1556
 
1542
- var _rowY3 = visibleRowYs.get(_row6);
1557
+ var _rowY3 = getOrThrow(visibleRowYs, _row6);
1543
1558
 
1544
- var _rowHeight4 = visibleRowHeights.get(_row6);
1559
+ var _rowHeight4 = getOrThrow(visibleRowHeights, _row6);
1545
1560
 
1546
1561
  var minY = gridY + _rowY3 + _rowHeight4 + 0.5 - headerHiddenSeparatorSize * 0.5;
1547
1562
  context.rect(x + hiddenX, minY, hiddenSeparatorWidth, headerHiddenSeparatorSize);
@@ -1553,16 +1568,16 @@ class GridRenderer {
1553
1568
  if (headerSeparatorHoverColor) {
1554
1569
  var highlightedSeparator = draggingRowSeparator;
1555
1570
 
1556
- if (highlightedSeparator == null) {
1571
+ if (highlightedSeparator == null && mouseX != null && mouseY != null) {
1557
1572
  highlightedSeparator = GridUtils.getRowSeparatorIndex(mouseX, mouseY, metrics, theme);
1558
1573
  }
1559
1574
 
1560
1575
  if (highlightedSeparator != null) {
1561
1576
  context.strokeStyle = headerSeparatorHoverColor;
1562
1577
 
1563
- var _rowY4 = visibleRowYs.get(highlightedSeparator);
1578
+ var _rowY4 = getOrThrow(visibleRowYs, highlightedSeparator);
1564
1579
 
1565
- var _rowHeight5 = visibleRowHeights.get(highlightedSeparator);
1580
+ var _rowHeight5 = getOrThrow(visibleRowHeights, highlightedSeparator);
1566
1581
 
1567
1582
  var _y8 = gridY + _rowY4 + _rowHeight5 + 0.5;
1568
1583
 
@@ -1599,12 +1614,12 @@ class GridRenderer {
1599
1614
  for (var _i12 = 0; _i12 < visibleRows.length; _i12 += 1) {
1600
1615
  var _row7 = visibleRows[_i12];
1601
1616
 
1602
- var _rowHeight6 = visibleRowHeights.get(_row7);
1617
+ var _rowHeight6 = getOrThrow(visibleRowHeights, _row7);
1603
1618
 
1604
1619
  if (_rowHeight6 > 0) {
1605
- var _rowY5 = visibleRowYs.get(_row7) + gridY;
1620
+ var _rowY5 = getOrThrow(visibleRowYs, _row7) + gridY;
1606
1621
 
1607
- var modelRow = modelRows.get(_row7);
1622
+ var modelRow = getOrThrow(modelRows, _row7);
1608
1623
  var textY = _rowY5 + _rowHeight6 * 0.5;
1609
1624
  context.fillText(model.textForRowFooter(modelRow), textX, textY);
1610
1625
  }
@@ -1649,14 +1664,14 @@ class GridRenderer {
1649
1664
  return;
1650
1665
  }
1651
1666
 
1652
- var isCursorVisible = model.isEditable && editingCell == null && draggingRow == null && draggingColumn == null && visibleColumnXs.has(column) && visibleRowYs.has(row);
1667
+ var isCursorVisible = isEditableGridModel(model) && model.isEditable && editingCell == null && draggingRow == null && draggingColumn == null && column != null && row != null && visibleColumnXs.has(column) && visibleRowYs.has(row);
1653
1668
 
1654
1669
  if (isCursorVisible) {
1655
1670
  // Punch a hole out where the active cell is, it gets styled differently.
1656
- var x = visibleColumnXs.get(column);
1657
- var y = visibleRowYs.get(row);
1658
- var w = visibleColumnWidths.get(column);
1659
- var h = visibleRowHeights.get(row);
1671
+ var x = getOrThrow(visibleColumnXs, column);
1672
+ var y = getOrThrow(visibleRowYs, row);
1673
+ var w = getOrThrow(visibleColumnWidths, column);
1674
+ var h = getOrThrow(visibleRowHeights, row);
1660
1675
  context.save();
1661
1676
  context.beginPath();
1662
1677
  context.rect(0, 0, width, height);
@@ -1676,12 +1691,12 @@ class GridRenderer {
1676
1691
 
1677
1692
  if (endRow >= top && bottom >= startRow && endColumn >= left && right >= startColumn) {
1678
1693
  // Need to offset the x/y coordinates so that the line draws nice and crisp
1679
- var _x9 = startColumn >= left && visibleColumnXs.has(startColumn) ? Math.round(visibleColumnXs.get(startColumn)) + 0.5 : minX;
1694
+ var _x9 = startColumn >= left && visibleColumnXs.has(startColumn) ? Math.round(getOrThrow(visibleColumnXs, startColumn)) + 0.5 : minX;
1680
1695
 
1681
- var _y9 = startRow >= top && visibleRowYs.has(startRow) ? Math.max(Math.round(visibleRowYs.get(startRow)) + 0.5, 0.5) : minY;
1696
+ var _y9 = startRow >= top && visibleRowYs.has(startRow) ? Math.max(Math.round(getOrThrow(visibleRowYs, startRow)) + 0.5, 0.5) : minY;
1682
1697
 
1683
- var endX = endColumn <= right && visibleColumnXs.has(endColumn) ? Math.round(visibleColumnXs.get(endColumn) + visibleColumnWidths.get(endColumn)) - 0.5 : maxX;
1684
- var endY = endRow <= bottom && visibleRowYs.has(endRow) ? Math.round(visibleRowYs.get(endRow) + visibleRowHeights.get(endRow)) - 0.5 : maxY;
1698
+ var endX = endColumn <= right && visibleColumnXs.has(endColumn) ? Math.round(getOrThrow(visibleColumnXs, endColumn) + getOrThrow(visibleColumnWidths, endColumn)) - 0.5 : maxX;
1699
+ var endY = endRow <= bottom && visibleRowYs.has(endRow) ? Math.round(getOrThrow(visibleRowYs, endRow) + getOrThrow(visibleRowHeights, endRow)) - 0.5 : maxY;
1685
1700
  context.rect(_x9, _y9, endX - _x9, endY - _y9);
1686
1701
  } // draw the inner transparent fill
1687
1702
 
@@ -1708,7 +1723,7 @@ class GridRenderer {
1708
1723
  context.stroke();
1709
1724
  }
1710
1725
 
1711
- if (isCursorVisible) {
1726
+ if (isCursorVisible && column != null && row != null) {
1712
1727
  context.restore();
1713
1728
  this.drawActiveCell(context, state, column, row);
1714
1729
  }
@@ -1726,10 +1741,10 @@ class GridRenderer {
1726
1741
  visibleRowHeights,
1727
1742
  visibleRowYs
1728
1743
  } = metrics;
1729
- var cellX = visibleColumnXs.get(column);
1730
- var cellY = visibleRowYs.get(row);
1731
- var cellW = visibleColumnWidths.get(column);
1732
- var cellH = visibleRowHeights.get(row); // Now get the outline for the active cell
1744
+ var cellX = getOrThrow(visibleColumnXs, column);
1745
+ var cellY = getOrThrow(visibleRowYs, row);
1746
+ var cellW = getOrThrow(visibleColumnWidths, column);
1747
+ var cellH = getOrThrow(visibleRowHeights, row); // Now get the outline for the active cell
1733
1748
 
1734
1749
  var x = cellX - borderWidth * 0.5;
1735
1750
  var y = cellY - borderWidth * 0.5;
@@ -1759,12 +1774,12 @@ class GridRenderer {
1759
1774
  /**
1760
1775
  * Draws a rounded rectangle using the current state of the canvas.
1761
1776
  *
1762
- * @param {CanvasRenderingContext2D} ctx
1763
- * @param {number} x coordinate of the left side
1764
- * @param {number} y coordinate of the top side
1765
- * @param {number} w width of the rectangle
1766
- * @param {number} h height of the rectangle
1767
- * @param {number} r corner radius of the rectangle
1777
+ * @param context The canvas context
1778
+ * @param x coordinate of the left side
1779
+ * @param y coordinate of the top side
1780
+ * @param w width of the rectangle
1781
+ * @param h height of the rectangle
1782
+ * @param r corner radius of the rectangle
1768
1783
  */
1769
1784
 
1770
1785
 
@@ -1792,7 +1807,7 @@ class GridRenderer {
1792
1807
  theme
1793
1808
  } = state;
1794
1809
 
1795
- if (draggingColumn == null) {
1810
+ if (draggingColumn == null || mouseX == null) {
1796
1811
  return;
1797
1812
  }
1798
1813
 
@@ -1803,8 +1818,8 @@ class GridRenderer {
1803
1818
  visibleColumnWidths,
1804
1819
  height
1805
1820
  } = metrics;
1806
- var x = visibleColumnXs.get(draggingColumn);
1807
- var columnWidth = visibleColumnWidths.get(draggingColumn) + 1;
1821
+ var x = getOrThrow(visibleColumnXs, draggingColumn);
1822
+ var columnWidth = getOrThrow(visibleColumnWidths, draggingColumn) + 1;
1808
1823
  var {
1809
1824
  backgroundColor,
1810
1825
  font,
@@ -1818,7 +1833,7 @@ class GridRenderer {
1818
1833
 
1819
1834
  context.fillStyle = backgroundColor;
1820
1835
  context.fillRect(x, 0, columnWidth, height);
1821
- context.translate(mouseX - x - gridX - draggingColumnOffset, gridY + reorderOffset); // Then draw the shadow of the moving column
1836
+ context.translate(mouseX - x - gridX - (draggingColumnOffset !== null && draggingColumnOffset !== void 0 ? draggingColumnOffset : 0), gridY + reorderOffset); // Then draw the shadow of the moving column
1822
1837
 
1823
1838
  context.save();
1824
1839
  context.shadowColor = shadowColor;
@@ -1849,7 +1864,7 @@ class GridRenderer {
1849
1864
  theme
1850
1865
  } = state;
1851
1866
 
1852
- if (draggingRow == null) {
1867
+ if (draggingRow == null || mouseY == null) {
1853
1868
  return;
1854
1869
  }
1855
1870
 
@@ -1860,8 +1875,8 @@ class GridRenderer {
1860
1875
  visibleRowHeights,
1861
1876
  width
1862
1877
  } = metrics;
1863
- var y = visibleRowYs.get(draggingRow);
1864
- var rowHeight = visibleRowHeights.get(draggingRow) + 1;
1878
+ var y = getOrThrow(visibleRowYs, draggingRow);
1879
+ var rowHeight = getOrThrow(visibleRowHeights, draggingRow) + 1;
1865
1880
  var {
1866
1881
  backgroundColor,
1867
1882
  font,
@@ -1875,7 +1890,7 @@ class GridRenderer {
1875
1890
 
1876
1891
  context.fillStyle = backgroundColor;
1877
1892
  context.fillRect(0, y, width, rowHeight);
1878
- context.translate(gridX + reorderOffset, mouseY - y - gridY - draggingRowOffset); // Then draw the shadow of the moving row
1893
+ context.translate(gridX + reorderOffset, mouseY - y - gridY - (draggingRowOffset !== null && draggingRowOffset !== void 0 ? draggingRowOffset : 0)); // Then draw the shadow of the moving row
1879
1894
 
1880
1895
  context.save();
1881
1896
  context.shadowColor = shadowColor;
@@ -1938,10 +1953,10 @@ class GridRenderer {
1938
1953
  scrollBarHoverSize,
1939
1954
  scrollBarCasingWidth
1940
1955
  } = theme;
1941
- var isInbounds = mouseX <= width && mouseY <= height;
1942
- var isVerticalBarHover = isDraggingVerticalScrollBar || hasVerticalBar && !isDraggingHorizontalScrollBar && !isDragging && mouseX >= width - scrollBarHoverSize && mouseY <= barHeight + columnHeaderHeight && isInbounds;
1956
+ var isInbounds = mouseX != null && mouseY != null && mouseX <= width && mouseY <= height;
1957
+ var isVerticalBarHover = isDraggingVerticalScrollBar || hasVerticalBar && !isDraggingHorizontalScrollBar && !isDragging && mouseX != null && mouseY != null && mouseX >= width - scrollBarHoverSize && mouseY <= barHeight + columnHeaderHeight && isInbounds;
1943
1958
  var isHorizontalBarHover = isDraggingHorizontalScrollBar || hasHorizontalBar && !isDraggingVerticalScrollBar && !isDragging && !isVerticalBarHover && // vert bar gets priorty in overlapped corner hover area
1944
- mouseY >= height - scrollBarHoverSize && mouseX <= barWidth - rowHeaderWidth && isInbounds;
1959
+ mouseX != null && mouseY != null && mouseY >= height - scrollBarHoverSize && mouseX <= barWidth - rowHeaderWidth && isInbounds;
1945
1960
  var hScrollBarSize = isHorizontalBarHover ? scrollBarHoverSize : scrollBarSize;
1946
1961
  var vScrollBarSize = isVerticalBarHover ? scrollBarHoverSize : scrollBarSize;
1947
1962
  context.translate(rowHeaderWidth, columnHeaderHeight);