@deephaven/grid 0.41.0 → 0.41.2-beta.3

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 (61) hide show
  1. package/dist/CellRenderer.d.ts +12 -0
  2. package/dist/CellRenderer.d.ts.map +1 -0
  3. package/dist/CellRenderer.js +64 -0
  4. package/dist/CellRenderer.js.map +1 -0
  5. package/dist/DataBarCellRenderer.d.ts +38 -0
  6. package/dist/DataBarCellRenderer.d.ts.map +1 -0
  7. package/dist/DataBarCellRenderer.js +404 -0
  8. package/dist/DataBarCellRenderer.js.map +1 -0
  9. package/dist/DataBarGridModel.d.ts +47 -0
  10. package/dist/DataBarGridModel.d.ts.map +1 -0
  11. package/dist/DataBarGridModel.js +27 -0
  12. package/dist/DataBarGridModel.js.map +1 -0
  13. package/dist/Grid.d.ts +4 -0
  14. package/dist/Grid.d.ts.map +1 -1
  15. package/dist/GridColorUtils.d.ts +15 -0
  16. package/dist/GridColorUtils.d.ts.map +1 -1
  17. package/dist/GridColorUtils.js +117 -1
  18. package/dist/GridColorUtils.js.map +1 -1
  19. package/dist/GridMetricCalculator.d.ts.map +1 -1
  20. package/dist/GridMetricCalculator.js +9 -2
  21. package/dist/GridMetricCalculator.js.map +1 -1
  22. package/dist/GridModel.d.ts +2 -0
  23. package/dist/GridModel.d.ts.map +1 -1
  24. package/dist/GridModel.js +3 -0
  25. package/dist/GridModel.js.map +1 -1
  26. package/dist/GridRenderer.d.ts +8 -34
  27. package/dist/GridRenderer.d.ts.map +1 -1
  28. package/dist/GridRenderer.js +29 -294
  29. package/dist/GridRenderer.js.map +1 -1
  30. package/dist/GridRendererTypes.d.ts +1 -0
  31. package/dist/GridRendererTypes.d.ts.map +1 -1
  32. package/dist/GridRendererTypes.js +2 -1
  33. package/dist/GridRendererTypes.js.map +1 -1
  34. package/dist/GridTheme.d.ts +4 -0
  35. package/dist/GridTheme.d.ts.map +1 -1
  36. package/dist/GridTheme.js +6 -1
  37. package/dist/GridTheme.js.map +1 -1
  38. package/dist/GridUtils.d.ts +16 -0
  39. package/dist/GridUtils.d.ts.map +1 -1
  40. package/dist/GridUtils.js +60 -1
  41. package/dist/GridUtils.js.map +1 -1
  42. package/dist/MockDataBarGridModel.d.ts +29 -0
  43. package/dist/MockDataBarGridModel.d.ts.map +1 -0
  44. package/dist/MockDataBarGridModel.js +119 -0
  45. package/dist/MockDataBarGridModel.js.map +1 -0
  46. package/dist/TextCellRenderer.d.ts +23 -0
  47. package/dist/TextCellRenderer.d.ts.map +1 -0
  48. package/dist/TextCellRenderer.js +210 -0
  49. package/dist/TextCellRenderer.js.map +1 -0
  50. package/dist/TokenBoxCellRenderer.d.ts +10 -0
  51. package/dist/TokenBoxCellRenderer.d.ts.map +1 -0
  52. package/dist/TokenBoxCellRenderer.js +4 -0
  53. package/dist/TokenBoxCellRenderer.js.map +1 -0
  54. package/dist/index.d.ts +5 -0
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +4 -0
  57. package/dist/index.js.map +1 -1
  58. package/dist/mouse-handlers/GridTokenMouseHandler.d.ts.map +1 -1
  59. package/dist/mouse-handlers/GridTokenMouseHandler.js +20 -2
  60. package/dist/mouse-handlers/GridTokenMouseHandler.js.map +1 -1
  61. package/package.json +4 -4
@@ -0,0 +1,210 @@
1
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
3
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
4
+ /* eslint-disable class-methods-use-this */
5
+ import { EMPTY_ARRAY, getOrThrow } from '@deephaven/utils';
6
+ import CellRenderer from "./CellRenderer.js";
7
+ import { isExpandableGridModel } from "./ExpandableGridModel.js";
8
+ import { DEFAULT_FONT_WIDTH } from "./GridRendererTypes.js";
9
+ import GridUtils from "./GridUtils.js";
10
+ import memoizeClear from "./memoizeClear.js";
11
+ class TextCellRenderer extends CellRenderer {
12
+ constructor() {
13
+ super(...arguments);
14
+ _defineProperty(this, "getCachedTokenBoxesForVisibleCell", memoizeClear((truncatedText, tokens, _font, _baseline, textHeight, context) => {
15
+ var top = 0;
16
+ var bottom = textHeight;
17
+ var tokenBoxes = [];
18
+
19
+ // The index where the last token ended
20
+ var lastTokenEnd = 0;
21
+ // The width of the text preceding the current token
22
+ var currentTextWidth = 0;
23
+ // Loop through array and push them to array
24
+ for (var i = 0; i < tokens.length; i += 1) {
25
+ var token = tokens[i];
26
+ var {
27
+ start,
28
+ end
29
+ } = token;
30
+ // The last token value is calculated based on the full text so the value needs to be truncated
31
+ var value = end > truncatedText.length ? truncatedText.substring(start) : token.value;
32
+
33
+ // Add the width of the text in between this token and the last token
34
+ currentTextWidth += context.measureText(truncatedText.substring(lastTokenEnd, start)).width;
35
+ var tokenWidth = context.measureText(value).width;
36
+
37
+ // Check if the x position is less than the grid x, then tokenWidth should be shifted by gridX - startX
38
+
39
+ var left = currentTextWidth;
40
+ var right = left + tokenWidth;
41
+ var newTokenBox = {
42
+ x1: left,
43
+ y1: top,
44
+ x2: right,
45
+ y2: bottom,
46
+ token
47
+ };
48
+ tokenBoxes.push(newTokenBox);
49
+ lastTokenEnd = end;
50
+ currentTextWidth += tokenWidth;
51
+ }
52
+ return tokenBoxes;
53
+ }, {
54
+ max: 10000
55
+ }));
56
+ }
57
+ drawCellContent(context, state, column, row) {
58
+ var {
59
+ metrics,
60
+ model,
61
+ theme
62
+ } = state;
63
+ var {
64
+ fontWidths,
65
+ modelColumns,
66
+ modelRows,
67
+ allRowHeights,
68
+ firstColumn
69
+ } = metrics;
70
+ var isFirstColumn = column === firstColumn;
71
+ var {
72
+ textColor
73
+ } = theme;
74
+ var rowHeight = getOrThrow(allRowHeights, row);
75
+ var modelRow = getOrThrow(modelRows, row);
76
+ var modelColumn = getOrThrow(modelColumns, column);
77
+ var text = model.textForCell(modelColumn, modelRow);
78
+ var truncationChar = model.truncationCharForCell(modelColumn, modelRow);
79
+ if (text && rowHeight > 0) {
80
+ var _fontWidths$get;
81
+ var textAlign = model.textAlignForCell(modelColumn, modelRow) || 'left';
82
+ context.textAlign = textAlign;
83
+ var color = model.colorForCell(modelColumn, modelRow, theme) || textColor;
84
+ context.fillStyle = color;
85
+ context.save();
86
+ var {
87
+ width: textWidth,
88
+ x: textX,
89
+ y: textY
90
+ } = GridUtils.getTextRenderMetrics(state, column, row);
91
+ var fontWidth = (_fontWidths$get = fontWidths.get(context.font)) !== null && _fontWidths$get !== void 0 ? _fontWidths$get : DEFAULT_FONT_WIDTH;
92
+ var truncatedText = this.getCachedTruncatedString(context, text, textWidth, fontWidth, truncationChar);
93
+ var tokens = model.tokensForCell(modelColumn, modelRow, truncatedText.length);
94
+ if (truncatedText) {
95
+ var tokenIndex = 0;
96
+ var textStart = 0;
97
+ var left = textX;
98
+ var {
99
+ actualBoundingBoxDescent
100
+ } = context.measureText(truncatedText);
101
+ while (textStart < truncatedText.length) {
102
+ var _ref, _token$end;
103
+ var nextToken = tokens[tokenIndex];
104
+ var token = textStart === (nextToken === null || nextToken === void 0 ? void 0 : nextToken.start) ? nextToken : null;
105
+ var textEnd = (_ref = (_token$end = token === null || token === void 0 ? void 0 : token.end) !== null && _token$end !== void 0 ? _token$end : nextToken === null || nextToken === void 0 ? void 0 : nextToken.start) !== null && _ref !== void 0 ? _ref : truncatedText.length;
106
+ var value = truncatedText.substring(textStart, textEnd);
107
+ var {
108
+ width
109
+ } = context.measureText(value);
110
+ var widthOfUnderline = value.endsWith('…') ? context.measureText(value.substring(0, value.length - 1)).width : width;
111
+
112
+ // Set the styling based on the token, then draw the text
113
+ if (token != null) {
114
+ context.fillStyle = theme.hyperlinkColor;
115
+ context.fillText(value, left, textY);
116
+ context.fillRect(left, textY + actualBoundingBoxDescent, widthOfUnderline, 1);
117
+ } else {
118
+ context.fillStyle = color;
119
+ context.fillText(value, left, textY);
120
+ }
121
+ left += width;
122
+ textStart = textEnd;
123
+ if (token != null) tokenIndex += 1;
124
+ }
125
+ }
126
+ context.restore();
127
+ }
128
+ if (isFirstColumn && isExpandableGridModel(model) && model.hasExpandableRows) {
129
+ this.drawCellRowTreeMarker(context, state, row);
130
+ }
131
+ }
132
+
133
+ /**
134
+ * Gets the token boxes that are visible in the cell
135
+ * @param column The visible column
136
+ * @param row The visible row
137
+ * @param state The GridRenderState
138
+ * @returns An array of TokenBox of visible tokens or empty array with coordinates relative to gridX and gridY
139
+ */
140
+ getTokenBoxesForVisibleCell(column, row, state) {
141
+ var _fontWidths$get2;
142
+ var {
143
+ metrics,
144
+ context,
145
+ model,
146
+ theme
147
+ } = state;
148
+ if (context == null || metrics == null) {
149
+ return EMPTY_ARRAY;
150
+ }
151
+ var {
152
+ modelRows,
153
+ modelColumns
154
+ } = metrics;
155
+ var modelRow = getOrThrow(modelRows, row);
156
+ var modelColumn = getOrThrow(modelColumns, column);
157
+ var text = model.textForCell(modelColumn, modelRow);
158
+ var {
159
+ width: textWidth,
160
+ x: textX,
161
+ y: textY
162
+ } = GridUtils.getTextRenderMetrics(state, column, row);
163
+ var {
164
+ fontWidths
165
+ } = metrics;
166
+
167
+ // Set the font and baseline and change it back after
168
+ context.save();
169
+ this.configureContext(context, state);
170
+ var fontWidth = (_fontWidths$get2 = fontWidths === null || fontWidths === void 0 ? void 0 : fontWidths.get(context.font)) !== null && _fontWidths$get2 !== void 0 ? _fontWidths$get2 : DEFAULT_FONT_WIDTH;
171
+ var truncationChar = model.truncationCharForCell(modelColumn, modelRow);
172
+ var truncatedText = this.getCachedTruncatedString(context, text, textWidth, fontWidth, truncationChar);
173
+ var {
174
+ actualBoundingBoxAscent,
175
+ actualBoundingBoxDescent
176
+ } = context.measureText(truncatedText);
177
+ var textHeight = actualBoundingBoxAscent + actualBoundingBoxDescent;
178
+ var tokens = model.tokensForCell(modelColumn, modelRow, truncatedText.length);
179
+
180
+ // Check if the truncated text contains a link
181
+ if (tokens.length === 0) {
182
+ context.restore();
183
+ return EMPTY_ARRAY;
184
+ }
185
+ var cachedTokenBoxes = this.getCachedTokenBoxesForVisibleCell(truncatedText, tokens, theme.font, 'middle', textHeight, context).map(tokenBox => ({
186
+ x1: tokenBox.x1 + textX,
187
+ y1: tokenBox.y1 + (textY - actualBoundingBoxAscent),
188
+ x2: tokenBox.x2 + textX,
189
+ y2: tokenBox.y2 + (textY - actualBoundingBoxAscent),
190
+ token: tokenBox.token
191
+ }));
192
+ context.restore();
193
+ return cachedTokenBoxes;
194
+ }
195
+ configureContext(context, state) {
196
+ var {
197
+ theme
198
+ } = state;
199
+ context.font = theme.font;
200
+ context.textBaseline = 'middle';
201
+ context.lineCap = 'butt';
202
+ }
203
+
204
+ /**
205
+ * Returns an array of token boxes with the coordinates relative to the top left corner of the text
206
+ */
207
+ }
208
+
209
+ export default TextCellRenderer;
210
+ //# sourceMappingURL=TextCellRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextCellRenderer.js","names":["EMPTY_ARRAY","getOrThrow","CellRenderer","isExpandableGridModel","DEFAULT_FONT_WIDTH","GridUtils","memoizeClear","TextCellRenderer","truncatedText","tokens","_font","_baseline","textHeight","context","top","bottom","tokenBoxes","lastTokenEnd","currentTextWidth","i","length","token","start","end","value","substring","measureText","width","tokenWidth","left","right","newTokenBox","x1","y1","x2","y2","push","max","drawCellContent","state","column","row","metrics","model","theme","fontWidths","modelColumns","modelRows","allRowHeights","firstColumn","isFirstColumn","textColor","rowHeight","modelRow","modelColumn","text","textForCell","truncationChar","truncationCharForCell","textAlign","textAlignForCell","color","colorForCell","fillStyle","save","textWidth","x","textX","y","textY","getTextRenderMetrics","fontWidth","get","font","getCachedTruncatedString","tokensForCell","tokenIndex","textStart","actualBoundingBoxDescent","nextToken","textEnd","widthOfUnderline","endsWith","hyperlinkColor","fillText","fillRect","restore","hasExpandableRows","drawCellRowTreeMarker","getTokenBoxesForVisibleCell","configureContext","actualBoundingBoxAscent","cachedTokenBoxes","getCachedTokenBoxesForVisibleCell","map","tokenBox","textBaseline","lineCap"],"sources":["../src/TextCellRenderer.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport { EMPTY_ARRAY, getOrThrow } from '@deephaven/utils';\nimport CellRenderer from './CellRenderer';\nimport { isExpandableGridModel } from './ExpandableGridModel';\nimport { VisibleIndex } from './GridMetrics';\nimport { DEFAULT_FONT_WIDTH, GridRenderState } from './GridRendererTypes';\nimport GridUtils, { TokenBox, Token } from './GridUtils';\nimport memoizeClear from './memoizeClear';\nimport TokenBoxCellRenderer from './TokenBoxCellRenderer';\n\nclass TextCellRenderer extends CellRenderer implements TokenBoxCellRenderer {\n drawCellContent(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): void {\n const { metrics, model, theme } = state;\n const {\n fontWidths,\n modelColumns,\n modelRows,\n allRowHeights,\n firstColumn,\n } = metrics;\n const isFirstColumn = column === firstColumn;\n const { textColor } = theme;\n const rowHeight = getOrThrow(allRowHeights, row);\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = getOrThrow(modelColumns, column);\n const text = model.textForCell(modelColumn, modelRow);\n const truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n\n if (text && rowHeight > 0) {\n const textAlign = model.textAlignForCell(modelColumn, modelRow) || 'left';\n context.textAlign = textAlign;\n\n const color =\n model.colorForCell(modelColumn, modelRow, theme) || textColor;\n context.fillStyle = color;\n\n context.save();\n\n const {\n width: textWidth,\n x: textX,\n y: textY,\n } = GridUtils.getTextRenderMetrics(state, column, row);\n\n const fontWidth = fontWidths.get(context.font) ?? DEFAULT_FONT_WIDTH;\n const truncatedText = this.getCachedTruncatedString(\n context,\n text,\n textWidth,\n fontWidth,\n truncationChar\n );\n\n const tokens = model.tokensForCell(\n modelColumn,\n modelRow,\n truncatedText.length\n );\n\n if (truncatedText) {\n let tokenIndex = 0;\n let textStart = 0;\n let left = textX;\n const { actualBoundingBoxDescent } = context.measureText(truncatedText);\n\n while (textStart < truncatedText.length) {\n const nextToken = tokens[tokenIndex];\n const token = textStart === nextToken?.start ? nextToken : null;\n const textEnd =\n token?.end ?? nextToken?.start ?? truncatedText.length;\n const value = truncatedText.substring(textStart, textEnd);\n const { width } = context.measureText(value);\n const widthOfUnderline = value.endsWith('…')\n ? context.measureText(value.substring(0, value.length - 1)).width\n : width;\n\n // Set the styling based on the token, then draw the text\n if (token != null) {\n context.fillStyle = theme.hyperlinkColor;\n context.fillText(value, left, textY);\n context.fillRect(\n left,\n textY + actualBoundingBoxDescent,\n widthOfUnderline,\n 1\n );\n } else {\n context.fillStyle = color;\n context.fillText(value, left, textY);\n }\n\n left += width;\n textStart = textEnd;\n if (token != null) tokenIndex += 1;\n }\n }\n context.restore();\n }\n\n if (\n isFirstColumn &&\n isExpandableGridModel(model) &&\n model.hasExpandableRows\n ) {\n this.drawCellRowTreeMarker(context, state, row);\n }\n }\n\n /**\n * Gets the token boxes that are visible in the cell\n * @param column The visible column\n * @param row The visible row\n * @param state The GridRenderState\n * @returns An array of TokenBox of visible tokens or empty array with coordinates relative to gridX and gridY\n */\n getTokenBoxesForVisibleCell(\n column: VisibleIndex,\n row: VisibleIndex,\n state: GridRenderState\n ): TokenBox[] {\n const { metrics, context, model, theme } = state;\n\n if (context == null || metrics == null) {\n return (EMPTY_ARRAY as unknown) as TokenBox[];\n }\n\n const { modelRows, modelColumns } = metrics;\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = getOrThrow(modelColumns, column);\n\n const text = model.textForCell(modelColumn, modelRow);\n const {\n width: textWidth,\n x: textX,\n y: textY,\n } = GridUtils.getTextRenderMetrics(state, column, row);\n\n const { fontWidths } = metrics;\n\n // Set the font and baseline and change it back after\n context.save();\n this.configureContext(context, state);\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 actualBoundingBoxAscent,\n actualBoundingBoxDescent,\n } = context.measureText(truncatedText);\n const textHeight = actualBoundingBoxAscent + actualBoundingBoxDescent;\n\n const tokens = model.tokensForCell(\n modelColumn,\n modelRow,\n truncatedText.length\n );\n\n // Check if the truncated text contains a link\n if (tokens.length === 0) {\n context.restore();\n return (EMPTY_ARRAY as unknown) as TokenBox[];\n }\n\n const cachedTokenBoxes = this.getCachedTokenBoxesForVisibleCell(\n truncatedText,\n tokens,\n theme.font,\n 'middle',\n textHeight,\n context\n ).map(tokenBox => ({\n x1: tokenBox.x1 + textX,\n y1: tokenBox.y1 + (textY - actualBoundingBoxAscent),\n x2: tokenBox.x2 + textX,\n y2: tokenBox.y2 + (textY - actualBoundingBoxAscent),\n token: tokenBox.token,\n }));\n\n context.restore();\n\n return cachedTokenBoxes;\n }\n\n configureContext(\n context: CanvasRenderingContext2D,\n state: GridRenderState\n ): void {\n const { theme } = state;\n context.font = theme.font;\n context.textBaseline = 'middle';\n context.lineCap = 'butt';\n }\n\n /**\n * Returns an array of token boxes with the coordinates relative to the top left corner of the text\n */\n getCachedTokenBoxesForVisibleCell = memoizeClear(\n (\n truncatedText: string,\n tokens: Token[],\n // _font and _baseline are passed in so value is re-calculated when they change\n // They should already be set on the `context`, so they are not used in this method\n _font: string,\n _baseline: CanvasTextBaseline,\n textHeight: number,\n context: CanvasRenderingContext2D\n ): TokenBox[] => {\n const top = 0;\n const bottom = textHeight;\n\n const tokenBoxes: TokenBox[] = [];\n\n // The index where the last token ended\n let lastTokenEnd = 0;\n // The width of the text preceding the current token\n let currentTextWidth = 0;\n // Loop through array and push them to array\n for (let i = 0; i < tokens.length; i += 1) {\n const token = tokens[i];\n const { start, end } = token;\n // The last token value is calculated based on the full text so the value needs to be truncated\n const value =\n end > truncatedText.length\n ? truncatedText.substring(start)\n : token.value;\n\n // Add the width of the text in between this token and the last token\n currentTextWidth += context.measureText(\n truncatedText.substring(lastTokenEnd, start)\n ).width;\n const tokenWidth = context.measureText(value).width;\n\n // Check if the x position is less than the grid x, then tokenWidth should be shifted by gridX - startX\n\n const left = currentTextWidth;\n const right = left + tokenWidth;\n\n const newTokenBox: TokenBox = {\n x1: left,\n y1: top,\n x2: right,\n y2: bottom,\n token,\n };\n\n tokenBoxes.push(newTokenBox);\n\n lastTokenEnd = end;\n currentTextWidth += tokenWidth;\n }\n\n return tokenBoxes;\n },\n { max: 10000 }\n );\n}\n\nexport default TextCellRenderer;\n"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import CellRenderer from './CellRenderer';
2
+ import { VisibleIndex } from './GridMetrics';
3
+ import { GridRenderState } from './GridRendererTypes';
4
+ import { TokenBox } from './GridUtils';
5
+ export declare function isTokenBoxCellRenderer(cellRenderer: CellRenderer): cellRenderer is TokenBoxCellRenderer;
6
+ interface TokenBoxCellRenderer extends CellRenderer {
7
+ getTokenBoxesForVisibleCell(column: VisibleIndex, row: VisibleIndex, state: GridRenderState): TokenBox[];
8
+ }
9
+ export default TokenBoxCellRenderer;
10
+ //# sourceMappingURL=TokenBoxCellRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenBoxCellRenderer.d.ts","sourceRoot":"","sources":["../src/TokenBoxCellRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,YAAY,GACzB,YAAY,IAAI,oBAAoB,CAKtC;AAED,UAAU,oBAAqB,SAAQ,YAAY;IACjD,2BAA2B,CACzB,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,eAAe,GACrB,QAAQ,EAAE,CAAC;CACf;AAED,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export function isTokenBoxCellRenderer(cellRenderer) {
2
+ return (cellRenderer === null || cellRenderer === void 0 ? void 0 : cellRenderer.getTokenBoxesForVisibleCell) !== undefined;
3
+ }
4
+ //# sourceMappingURL=TokenBoxCellRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenBoxCellRenderer.js","names":["isTokenBoxCellRenderer","cellRenderer","getTokenBoxesForVisibleCell","undefined"],"sources":["../src/TokenBoxCellRenderer.ts"],"sourcesContent":["import CellRenderer from './CellRenderer';\nimport { VisibleIndex } from './GridMetrics';\nimport { GridRenderState } from './GridRendererTypes';\nimport { TokenBox } from './GridUtils';\n\nexport function isTokenBoxCellRenderer(\n cellRenderer: CellRenderer\n): cellRenderer is TokenBoxCellRenderer {\n return (\n (cellRenderer as TokenBoxCellRenderer)?.getTokenBoxesForVisibleCell !==\n undefined\n );\n}\n\ninterface TokenBoxCellRenderer extends CellRenderer {\n getTokenBoxesForVisibleCell(\n column: VisibleIndex,\n row: VisibleIndex,\n state: GridRenderState\n ): TokenBox[];\n}\n\nexport default TokenBoxCellRenderer;\n"],"mappings":"AAKA,OAAO,SAASA,sBAAsB,CACpCC,YAA0B,EACY;EACtC,OACE,CAACA,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAA2BC,2BAA2B,MACnEC,SAAS;AAEb"}
package/dist/index.d.ts CHANGED
@@ -20,10 +20,15 @@ export { default as MockTreeGridModel } from './MockTreeGridModel';
20
20
  export { default as memoizeClear } from './memoizeClear';
21
21
  export { default as StaticDataGridModel } from './StaticDataGridModel';
22
22
  export { default as ViewportDataGridModel } from './ViewportDataGridModel';
23
+ export { default as MockDataBarGridModel } from './MockDataBarGridModel';
23
24
  export * from './key-handlers';
24
25
  export * from './mouse-handlers';
25
26
  export * from './errors';
26
27
  export * from './EventHandlerResult';
27
28
  export { default as ThemeContext } from './ThemeContext';
29
+ export type { default as CellRenderer, CellRenderType } from './CellRenderer';
30
+ export { default as TextCellRenderer } from './TextCellRenderer';
31
+ export { default as DataBarCellRenderer } from './DataBarCellRenderer';
32
+ export * from './TokenBoxCellRenderer';
28
33
  export * from './GridRendererTypes';
29
34
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,cAAc,QAAQ,CAAC;AACvB,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9D,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAC3E,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,cAAc,QAAQ,CAAC;AACvB,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9D,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACzE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,YAAY,EAAE,OAAO,IAAI,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvE,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -19,10 +19,14 @@ export { default as MockTreeGridModel } from "./MockTreeGridModel.js";
19
19
  export { default as memoizeClear } from "./memoizeClear.js";
20
20
  export { default as StaticDataGridModel } from "./StaticDataGridModel.js";
21
21
  export { default as ViewportDataGridModel } from "./ViewportDataGridModel.js";
22
+ export { default as MockDataBarGridModel } from "./MockDataBarGridModel.js";
22
23
  export * from "./key-handlers/index.js";
23
24
  export * from "./mouse-handlers/index.js";
24
25
  export * from "./errors/index.js";
25
26
  export * from "./EventHandlerResult.js";
26
27
  export { default as ThemeContext } from "./ThemeContext.js";
28
+ export { default as TextCellRenderer } from "./TextCellRenderer.js";
29
+ export { default as DataBarCellRenderer } from "./DataBarCellRenderer.js";
30
+ export * from "./TokenBoxCellRenderer.js";
27
31
  export * from "./GridRendererTypes.js";
28
32
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["default","Grid","GridModel","GridTestUtils","GridTheme","KeyHandler","MockGridModel","MockTreeGridModel","memoizeClear","StaticDataGridModel","ViewportDataGridModel","ThemeContext"],"sources":["../src/index.ts"],"sourcesContent":["export * from './ColumnHeaderGroup';\nexport * from './EditableGridModel';\nexport * from './ExpandableGridModel';\nexport { default as Grid } from './Grid';\nexport * from './Grid';\nexport * from './GridMetricCalculator';\nexport * from './GridMetrics';\nexport { default as GridModel } from './GridModel';\nexport * from './GridMouseHandler';\nexport * from './GridRange';\nexport * from './GridAxisRange';\nexport * from './GridRenderer';\nexport { default as GridTestUtils } from './GridTestUtils';\nexport { default as GridTheme } from './GridTheme';\nexport type { GridTheme as GridThemeType } from './GridTheme';\nexport * from './GridUtils';\nexport { default as KeyHandler } from './KeyHandler';\nexport { default as MockGridModel } from './MockGridModel';\nexport { default as MockTreeGridModel } from './MockTreeGridModel';\nexport { default as memoizeClear } from './memoizeClear';\nexport { default as StaticDataGridModel } from './StaticDataGridModel';\nexport { default as ViewportDataGridModel } from './ViewportDataGridModel';\nexport * from './key-handlers';\nexport * from './mouse-handlers';\nexport * from './errors';\nexport * from './EventHandlerResult';\nexport { default as ThemeContext } from './ThemeContext';\nexport * from './GridRendererTypes';\n"],"mappings":";;;SAGSA,OAAO,IAAIC,IAAI;AAAA;AAAA;AAAA;AAAA,SAIfD,OAAO,IAAIE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,SAKpBF,OAAO,IAAIG,aAAa;AAAA,SACxBH,OAAO,IAAII,SAAS;AAAA;AAAA,SAGpBJ,OAAO,IAAIK,UAAU;AAAA,SACrBL,OAAO,IAAIM,aAAa;AAAA,SACxBN,OAAO,IAAIO,iBAAiB;AAAA,SAC5BP,OAAO,IAAIQ,YAAY;AAAA,SACvBR,OAAO,IAAIS,mBAAmB;AAAA,SAC9BT,OAAO,IAAIU,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,SAKhCV,OAAO,IAAIW,YAAY;AAAA"}
1
+ {"version":3,"file":"index.js","names":["default","Grid","GridModel","GridTestUtils","GridTheme","KeyHandler","MockGridModel","MockTreeGridModel","memoizeClear","StaticDataGridModel","ViewportDataGridModel","MockDataBarGridModel","ThemeContext","TextCellRenderer","DataBarCellRenderer"],"sources":["../src/index.ts"],"sourcesContent":["export * from './ColumnHeaderGroup';\nexport * from './EditableGridModel';\nexport * from './ExpandableGridModel';\nexport { default as Grid } from './Grid';\nexport * from './Grid';\nexport * from './GridMetricCalculator';\nexport * from './GridMetrics';\nexport { default as GridModel } from './GridModel';\nexport * from './GridMouseHandler';\nexport * from './GridRange';\nexport * from './GridAxisRange';\nexport * from './GridRenderer';\nexport { default as GridTestUtils } from './GridTestUtils';\nexport { default as GridTheme } from './GridTheme';\nexport type { GridTheme as GridThemeType } from './GridTheme';\nexport * from './GridUtils';\nexport { default as KeyHandler } from './KeyHandler';\nexport { default as MockGridModel } from './MockGridModel';\nexport { default as MockTreeGridModel } from './MockTreeGridModel';\nexport { default as memoizeClear } from './memoizeClear';\nexport { default as StaticDataGridModel } from './StaticDataGridModel';\nexport { default as ViewportDataGridModel } from './ViewportDataGridModel';\nexport { default as MockDataBarGridModel } from './MockDataBarGridModel';\nexport * from './key-handlers';\nexport * from './mouse-handlers';\nexport * from './errors';\nexport * from './EventHandlerResult';\nexport { default as ThemeContext } from './ThemeContext';\nexport type { default as CellRenderer, CellRenderType } from './CellRenderer';\nexport { default as TextCellRenderer } from './TextCellRenderer';\nexport { default as DataBarCellRenderer } from './DataBarCellRenderer';\nexport * from './TokenBoxCellRenderer';\nexport * from './GridRendererTypes';\n"],"mappings":";;;SAGSA,OAAO,IAAIC,IAAI;AAAA;AAAA;AAAA;AAAA,SAIfD,OAAO,IAAIE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,SAKpBF,OAAO,IAAIG,aAAa;AAAA,SACxBH,OAAO,IAAII,SAAS;AAAA;AAAA,SAGpBJ,OAAO,IAAIK,UAAU;AAAA,SACrBL,OAAO,IAAIM,aAAa;AAAA,SACxBN,OAAO,IAAIO,iBAAiB;AAAA,SAC5BP,OAAO,IAAIQ,YAAY;AAAA,SACvBR,OAAO,IAAIS,mBAAmB;AAAA,SAC9BT,OAAO,IAAIU,qBAAqB;AAAA,SAChCV,OAAO,IAAIW,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA,SAK/BX,OAAO,IAAIY,YAAY;AAAA,SAEvBZ,OAAO,IAAIa,gBAAgB;AAAA,SAC3Bb,OAAO,IAAIc,mBAAmB;AAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"GridTokenMouseHandler.d.ts","sourceRoot":"","sources":["../../src/mouse-handlers/GridTokenMouseHandler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,gBAAgB,EAAE,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEvE,OAAkB,EAAE,SAAS,EAAyB,MAAM,cAAc,CAAC;AAE3E,cAAM,qBAAsB,SAAQ,gBAAgB;IAClD,SAAS,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IAE1C,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,MAAM,CAAS;IAGvB,OAAO,CAAC,cAAc,CAAC,CAAW;IAElC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAQ;IAElC,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;IA2CzD;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IASjB,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;IAI5D,MAAM,CACJ,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,cAAc,GACpB,kBAAkB;IAwCrB,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;CAyB9D;AAED,eAAe,qBAAqB,CAAC"}
1
+ {"version":3,"file":"GridTokenMouseHandler.d.ts","sourceRoot":"","sources":["../../src/mouse-handlers/GridTokenMouseHandler.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,gBAAgB,EAAE,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEvE,OAAkB,EAAE,SAAS,EAAyB,MAAM,cAAc,CAAC;AAG3E,cAAM,qBAAsB,SAAQ,gBAAgB;IAClD,SAAS,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IAE1C,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,MAAM,CAAS;IAGvB,OAAO,CAAC,cAAc,CAAC,CAAW;IAElC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAQ;IAElC,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;IAuDzD;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IASjB,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;IAI5D,MAAM,CACJ,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,cAAc,GACpB,kBAAkB;IAwCrB,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;CAyB9D;AAED,eAAe,qBAAqB,CAAC"}
@@ -2,10 +2,13 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
2
2
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
3
3
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
4
4
  /* eslint class-methods-use-this: "off" */
5
+
6
+ import { getOrThrow } from '@deephaven/utils';
5
7
  import { isEditableGridModel } from "../EditableGridModel.js";
6
8
  import GridMouseHandler from "../GridMouseHandler.js";
7
9
  import GridRange from "../GridRange.js";
8
10
  import GridUtils, { isLinkToken } from "../GridUtils.js";
11
+ import { isTokenBoxCellRenderer } from "../TokenBoxCellRenderer.js";
9
12
  class GridTokenMouseHandler extends GridMouseHandler {
10
13
  constructor() {
11
14
  super(...arguments);
@@ -23,12 +26,27 @@ class GridTokenMouseHandler extends GridMouseHandler {
23
26
  } = gridPoint;
24
27
  var {
25
28
  renderer,
26
- metrics
29
+ metrics,
30
+ props
27
31
  } = grid;
32
+ var {
33
+ model
34
+ } = props;
28
35
  if (column == null || row == null || metrics == null) {
29
36
  this.currentLinkBox = undefined;
30
37
  return false;
31
38
  }
39
+ var {
40
+ modelRows,
41
+ modelColumns
42
+ } = metrics;
43
+ var modelRow = getOrThrow(modelRows, row);
44
+ var modelColumn = getOrThrow(modelColumns, column);
45
+ var renderType = model.renderTypeForCell(modelColumn, modelRow);
46
+ var cellRenderer = renderer.getCellRenderer(renderType);
47
+ if (!isTokenBoxCellRenderer(cellRenderer)) {
48
+ return false;
49
+ }
32
50
  if (this.currentLinkBox != null) {
33
51
  var {
34
52
  x1: left,
@@ -41,7 +59,7 @@ class GridTokenMouseHandler extends GridMouseHandler {
41
59
  }
42
60
  }
43
61
  var renderState = grid.updateRenderState();
44
- var tokensInCell = renderer.getTokenBoxesForVisibleCell(column, row, renderState);
62
+ var tokensInCell = cellRenderer.getTokenBoxesForVisibleCell(column, row, renderState);
45
63
 
46
64
  // Loop through each link and check if cursor is in bounds
47
65
  for (var i = 0; i < tokensInCell.length; i += 1) {
@@ -1 +1 @@
1
- {"version":3,"file":"GridTokenMouseHandler.js","names":["isEditableGridModel","GridMouseHandler","GridRange","GridUtils","isLinkToken","GridTokenMouseHandler","isHoveringLink","gridPoint","grid","column","row","x","y","renderer","metrics","currentLinkBox","undefined","x1","left","y1","top","x2","right","y2","bottom","renderState","updateRenderState","tokensInCell","getTokenBoxesForVisibleCell","i","length","token","translatedTokenBox","translateTokenBox","setCursor","cursor","onMove","onDown","event","isUserHoveringLink","isModifierKeyDown","shiftKey","isDown","timeoutId","clearTimeout","isHold","setTimeout","model","props","clearSelectedRanges","focus","moveCursorToPosition","isEditableRange","makeCell","startEditing","HOLD_LENGTH","onClick","onTokenClicked"],"sources":["../../src/mouse-handlers/GridTokenMouseHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\n\nimport { isEditableGridModel } from '../EditableGridModel';\nimport { EventHandlerResult } from '../EventHandlerResult';\nimport Grid from '../Grid';\nimport GridMouseHandler, { GridMouseEvent } from '../GridMouseHandler';\nimport GridRange from '../GridRange';\nimport GridUtils, { GridPoint, isLinkToken, TokenBox } from '../GridUtils';\n\nclass GridTokenMouseHandler extends GridMouseHandler {\n timeoutId?: ReturnType<typeof setTimeout>;\n\n private isHold = false;\n\n private isDown = false;\n\n // Stores the current hovered token box if it exists with translated coordinates\n private currentLinkBox?: TokenBox;\n\n private static HOLD_LENGTH = 1000;\n\n isHoveringLink(gridPoint: GridPoint, grid: Grid): boolean {\n const { column, row, x, y } = gridPoint;\n const { renderer, metrics } = grid;\n\n if (column == null || row == null || metrics == null) {\n this.currentLinkBox = undefined;\n return false;\n }\n\n if (this.currentLinkBox != null) {\n const { x1: left, y1: top, x2: right, y2: bottom } = this.currentLinkBox;\n if (x >= left && x <= right && y >= top && y <= bottom) {\n return true;\n }\n }\n\n const renderState = grid.updateRenderState();\n const tokensInCell = renderer.getTokenBoxesForVisibleCell(\n column,\n row,\n renderState\n );\n\n // Loop through each link and check if cursor is in bounds\n for (let i = 0; i < tokensInCell.length; i += 1) {\n if (isLinkToken(tokensInCell[i].token)) {\n const translatedTokenBox = GridUtils.translateTokenBox(\n tokensInCell[i],\n metrics\n );\n const { x1: left, x2: right, y1: top, y2: bottom } = translatedTokenBox;\n if (x >= left && x <= right && y >= top && y <= bottom) {\n this.currentLinkBox = translatedTokenBox;\n return true;\n }\n }\n }\n\n // If this point is reached, that means the cursor was not hovering any of the links or there are no links\n this.currentLinkBox = undefined;\n return false;\n }\n\n /**\n * Set the cursor to pointer when hovering over a link\n * @param gridPoint Mouse position information\n * @param grid The grid\n * @returns False\n */\n private setCursor(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n if (this.isHoveringLink(gridPoint, grid)) {\n this.cursor = 'pointer';\n } else {\n this.cursor = null;\n }\n return false;\n }\n\n onMove(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n return this.setCursor(gridPoint, grid);\n }\n\n onDown(\n gridPoint: GridPoint,\n grid: Grid,\n event: GridMouseEvent\n ): EventHandlerResult {\n const isUserHoveringLink = this.isHoveringLink(gridPoint, grid);\n\n // If a modifier key or shift is down, we don't want to handle it and set isDown to false so onUp won't handle it either\n if (\n GridUtils.isModifierKeyDown(event) ||\n event.shiftKey ||\n !isUserHoveringLink\n ) {\n return false;\n }\n\n this.isDown = true;\n\n if (this.timeoutId != null) {\n clearTimeout(this.timeoutId);\n }\n this.isHold = false;\n this.timeoutId = setTimeout(() => {\n this.isHold = true;\n const { column, row } = gridPoint;\n const { model } = grid.props;\n\n // After 1 second, select the row and if it is an input table, start editing\n grid.clearSelectedRanges();\n grid.focus();\n grid.moveCursorToPosition(column, row);\n if (\n isEditableGridModel(model) &&\n column != null &&\n row != null &&\n model.isEditableRange(GridRange.makeCell(column, row))\n ) {\n grid.startEditing(column, row);\n }\n }, GridTokenMouseHandler.HOLD_LENGTH);\n\n return true;\n }\n\n onClick(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n const isUserHoveringLink = this.isHoveringLink(gridPoint, grid);\n\n if (!isUserHoveringLink || !this.isDown || this.currentLinkBox == null) {\n this.isDown = false;\n this.isHold = false;\n return false;\n }\n\n // User is hovering a link, isDown is true\n // If isHold is true, then the select already happened so onUp shouldn't do anything\n if (!this.isHold) {\n // Cancel the timeout and open a new tab with the link\n if (this.timeoutId != null) {\n clearTimeout(this.timeoutId);\n }\n this.timeoutId = undefined;\n grid.props.onTokenClicked(this.currentLinkBox?.token);\n }\n\n this.isHold = false;\n this.isDown = false;\n\n return true;\n }\n}\n\nexport default GridTokenMouseHandler;\n"],"mappings":";;;AAAA;AAAA,SAESA,mBAAmB;AAAA,OAGrBC,gBAAgB;AAAA,OAChBC,SAAS;AAAA,OACTC,SAAS,IAAeC,WAAW;AAE1C,MAAMC,qBAAqB,SAASJ,gBAAgB,CAAC;EAAA;IAAA;IAAA;IAAA,gCAGlC,KAAK;IAAA,gCAEL,KAAK;IAAA;EAAA;EAOtBK,cAAc,CAACC,SAAoB,EAAEC,IAAU,EAAW;IACxD,IAAM;MAAEC,MAAM;MAAEC,GAAG;MAAEC,CAAC;MAAEC;IAAE,CAAC,GAAGL,SAAS;IACvC,IAAM;MAAEM,QAAQ;MAAEC;IAAQ,CAAC,GAAGN,IAAI;IAElC,IAAIC,MAAM,IAAI,IAAI,IAAIC,GAAG,IAAI,IAAI,IAAII,OAAO,IAAI,IAAI,EAAE;MACpD,IAAI,CAACC,cAAc,GAAGC,SAAS;MAC/B,OAAO,KAAK;IACd;IAEA,IAAI,IAAI,CAACD,cAAc,IAAI,IAAI,EAAE;MAC/B,IAAM;QAAEE,EAAE,EAAEC,IAAI;QAAEC,EAAE,EAAEC,GAAG;QAAEC,EAAE,EAAEC,KAAK;QAAEC,EAAE,EAAEC;MAAO,CAAC,GAAG,IAAI,CAACT,cAAc;MACxE,IAAIJ,CAAC,IAAIO,IAAI,IAAIP,CAAC,IAAIW,KAAK,IAAIV,CAAC,IAAIQ,GAAG,IAAIR,CAAC,IAAIY,MAAM,EAAE;QACtD,OAAO,IAAI;MACb;IACF;IAEA,IAAMC,WAAW,GAAGjB,IAAI,CAACkB,iBAAiB,EAAE;IAC5C,IAAMC,YAAY,GAAGd,QAAQ,CAACe,2BAA2B,CACvDnB,MAAM,EACNC,GAAG,EACHe,WAAW,CACZ;;IAED;IACA,KAAK,IAAII,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,YAAY,CAACG,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;MAC/C,IAAIzB,WAAW,CAACuB,YAAY,CAACE,CAAC,CAAC,CAACE,KAAK,CAAC,EAAE;QACtC,IAAMC,kBAAkB,GAAG7B,SAAS,CAAC8B,iBAAiB,CACpDN,YAAY,CAACE,CAAC,CAAC,EACff,OAAO,CACR;QACD,IAAM;UAAEG,EAAE,EAAEC,KAAI;UAAEG,EAAE,EAAEC,MAAK;UAAEH,EAAE,EAAEC,IAAG;UAAEG,EAAE,EAAEC;QAAO,CAAC,GAAGQ,kBAAkB;QACvE,IAAIrB,CAAC,IAAIO,KAAI,IAAIP,CAAC,IAAIW,MAAK,IAAIV,CAAC,IAAIQ,IAAG,IAAIR,CAAC,IAAIY,OAAM,EAAE;UACtD,IAAI,CAACT,cAAc,GAAGiB,kBAAkB;UACxC,OAAO,IAAI;QACb;MACF;IACF;;IAEA;IACA,IAAI,CAACjB,cAAc,GAAGC,SAAS;IAC/B,OAAO,KAAK;EACd;;EAEA;AACF;AACA;AACA;AACA;AACA;EACUkB,SAAS,CAAC3B,SAAoB,EAAEC,IAAU,EAAsB;IACtE,IAAI,IAAI,CAACF,cAAc,CAACC,SAAS,EAAEC,IAAI,CAAC,EAAE;MACxC,IAAI,CAAC2B,MAAM,GAAG,SAAS;IACzB,CAAC,MAAM;MACL,IAAI,CAACA,MAAM,GAAG,IAAI;IACpB;IACA,OAAO,KAAK;EACd;EAEAC,MAAM,CAAC7B,SAAoB,EAAEC,IAAU,EAAsB;IAC3D,OAAO,IAAI,CAAC0B,SAAS,CAAC3B,SAAS,EAAEC,IAAI,CAAC;EACxC;EAEA6B,MAAM,CACJ9B,SAAoB,EACpBC,IAAU,EACV8B,KAAqB,EACD;IACpB,IAAMC,kBAAkB,GAAG,IAAI,CAACjC,cAAc,CAACC,SAAS,EAAEC,IAAI,CAAC;;IAE/D;IACA,IACEL,SAAS,CAACqC,iBAAiB,CAACF,KAAK,CAAC,IAClCA,KAAK,CAACG,QAAQ,IACd,CAACF,kBAAkB,EACnB;MACA,OAAO,KAAK;IACd;IAEA,IAAI,CAACG,MAAM,GAAG,IAAI;IAElB,IAAI,IAAI,CAACC,SAAS,IAAI,IAAI,EAAE;MAC1BC,YAAY,CAAC,IAAI,CAACD,SAAS,CAAC;IAC9B;IACA,IAAI,CAACE,MAAM,GAAG,KAAK;IACnB,IAAI,CAACF,SAAS,GAAGG,UAAU,CAAC,MAAM;MAChC,IAAI,CAACD,MAAM,GAAG,IAAI;MAClB,IAAM;QAAEpC,MAAM;QAAEC;MAAI,CAAC,GAAGH,SAAS;MACjC,IAAM;QAAEwC;MAAM,CAAC,GAAGvC,IAAI,CAACwC,KAAK;;MAE5B;MACAxC,IAAI,CAACyC,mBAAmB,EAAE;MAC1BzC,IAAI,CAAC0C,KAAK,EAAE;MACZ1C,IAAI,CAAC2C,oBAAoB,CAAC1C,MAAM,EAAEC,GAAG,CAAC;MACtC,IACEV,mBAAmB,CAAC+C,KAAK,CAAC,IAC1BtC,MAAM,IAAI,IAAI,IACdC,GAAG,IAAI,IAAI,IACXqC,KAAK,CAACK,eAAe,CAAClD,SAAS,CAACmD,QAAQ,CAAC5C,MAAM,EAAEC,GAAG,CAAC,CAAC,EACtD;QACAF,IAAI,CAAC8C,YAAY,CAAC7C,MAAM,EAAEC,GAAG,CAAC;MAChC;IACF,CAAC,EAAEL,qBAAqB,CAACkD,WAAW,CAAC;IAErC,OAAO,IAAI;EACb;EAEAC,OAAO,CAACjD,SAAoB,EAAEC,IAAU,EAAsB;IAC5D,IAAM+B,kBAAkB,GAAG,IAAI,CAACjC,cAAc,CAACC,SAAS,EAAEC,IAAI,CAAC;IAE/D,IAAI,CAAC+B,kBAAkB,IAAI,CAAC,IAAI,CAACG,MAAM,IAAI,IAAI,CAAC3B,cAAc,IAAI,IAAI,EAAE;MACtE,IAAI,CAAC2B,MAAM,GAAG,KAAK;MACnB,IAAI,CAACG,MAAM,GAAG,KAAK;MACnB,OAAO,KAAK;IACd;;IAEA;IACA;IACA,IAAI,CAAC,IAAI,CAACA,MAAM,EAAE;MAAA;MAChB;MACA,IAAI,IAAI,CAACF,SAAS,IAAI,IAAI,EAAE;QAC1BC,YAAY,CAAC,IAAI,CAACD,SAAS,CAAC;MAC9B;MACA,IAAI,CAACA,SAAS,GAAG3B,SAAS;MAC1BR,IAAI,CAACwC,KAAK,CAACS,cAAc,yBAAC,IAAI,CAAC1C,cAAc,yDAAnB,qBAAqBgB,KAAK,CAAC;IACvD;IAEA,IAAI,CAACc,MAAM,GAAG,KAAK;IACnB,IAAI,CAACH,MAAM,GAAG,KAAK;IAEnB,OAAO,IAAI;EACb;AACF;AAAC,gBA/IKrC,qBAAqB,iBAUI,IAAI;AAuInC,eAAeA,qBAAqB"}
1
+ {"version":3,"file":"GridTokenMouseHandler.js","names":["getOrThrow","isEditableGridModel","GridMouseHandler","GridRange","GridUtils","isLinkToken","isTokenBoxCellRenderer","GridTokenMouseHandler","isHoveringLink","gridPoint","grid","column","row","x","y","renderer","metrics","props","model","currentLinkBox","undefined","modelRows","modelColumns","modelRow","modelColumn","renderType","renderTypeForCell","cellRenderer","getCellRenderer","x1","left","y1","top","x2","right","y2","bottom","renderState","updateRenderState","tokensInCell","getTokenBoxesForVisibleCell","i","length","token","translatedTokenBox","translateTokenBox","setCursor","cursor","onMove","onDown","event","isUserHoveringLink","isModifierKeyDown","shiftKey","isDown","timeoutId","clearTimeout","isHold","setTimeout","clearSelectedRanges","focus","moveCursorToPosition","isEditableRange","makeCell","startEditing","HOLD_LENGTH","onClick","onTokenClicked"],"sources":["../../src/mouse-handlers/GridTokenMouseHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\n\nimport { getOrThrow } from '@deephaven/utils';\nimport { isEditableGridModel } from '../EditableGridModel';\nimport { EventHandlerResult } from '../EventHandlerResult';\nimport Grid from '../Grid';\nimport GridMouseHandler, { GridMouseEvent } from '../GridMouseHandler';\nimport GridRange from '../GridRange';\nimport GridUtils, { GridPoint, isLinkToken, TokenBox } from '../GridUtils';\nimport { isTokenBoxCellRenderer } from '../TokenBoxCellRenderer';\n\nclass GridTokenMouseHandler extends GridMouseHandler {\n timeoutId?: ReturnType<typeof setTimeout>;\n\n private isHold = false;\n\n private isDown = false;\n\n // Stores the current hovered token box if it exists with translated coordinates\n private currentLinkBox?: TokenBox;\n\n private static HOLD_LENGTH = 1000;\n\n isHoveringLink(gridPoint: GridPoint, grid: Grid): boolean {\n const { column, row, x, y } = gridPoint;\n const { renderer, metrics, props } = grid;\n const { model } = props;\n\n if (column == null || row == null || metrics == null) {\n this.currentLinkBox = undefined;\n return false;\n }\n\n const { modelRows, modelColumns } = metrics;\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = getOrThrow(modelColumns, column);\n\n const renderType = model.renderTypeForCell(modelColumn, modelRow);\n const cellRenderer = renderer.getCellRenderer(renderType);\n if (!isTokenBoxCellRenderer(cellRenderer)) {\n return false;\n }\n\n if (this.currentLinkBox != null) {\n const { x1: left, y1: top, x2: right, y2: bottom } = this.currentLinkBox;\n if (x >= left && x <= right && y >= top && y <= bottom) {\n return true;\n }\n }\n\n const renderState = grid.updateRenderState();\n\n const tokensInCell = cellRenderer.getTokenBoxesForVisibleCell(\n column,\n row,\n renderState\n );\n\n // Loop through each link and check if cursor is in bounds\n for (let i = 0; i < tokensInCell.length; i += 1) {\n if (isLinkToken(tokensInCell[i].token)) {\n const translatedTokenBox = GridUtils.translateTokenBox(\n tokensInCell[i],\n metrics\n );\n const { x1: left, x2: right, y1: top, y2: bottom } = translatedTokenBox;\n if (x >= left && x <= right && y >= top && y <= bottom) {\n this.currentLinkBox = translatedTokenBox;\n return true;\n }\n }\n }\n\n // If this point is reached, that means the cursor was not hovering any of the links or there are no links\n this.currentLinkBox = undefined;\n return false;\n }\n\n /**\n * Set the cursor to pointer when hovering over a link\n * @param gridPoint Mouse position information\n * @param grid The grid\n * @returns False\n */\n private setCursor(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n if (this.isHoveringLink(gridPoint, grid)) {\n this.cursor = 'pointer';\n } else {\n this.cursor = null;\n }\n return false;\n }\n\n onMove(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n return this.setCursor(gridPoint, grid);\n }\n\n onDown(\n gridPoint: GridPoint,\n grid: Grid,\n event: GridMouseEvent\n ): EventHandlerResult {\n const isUserHoveringLink = this.isHoveringLink(gridPoint, grid);\n\n // If a modifier key or shift is down, we don't want to handle it and set isDown to false so onUp won't handle it either\n if (\n GridUtils.isModifierKeyDown(event) ||\n event.shiftKey ||\n !isUserHoveringLink\n ) {\n return false;\n }\n\n this.isDown = true;\n\n if (this.timeoutId != null) {\n clearTimeout(this.timeoutId);\n }\n this.isHold = false;\n this.timeoutId = setTimeout(() => {\n this.isHold = true;\n const { column, row } = gridPoint;\n const { model } = grid.props;\n\n // After 1 second, select the row and if it is an input table, start editing\n grid.clearSelectedRanges();\n grid.focus();\n grid.moveCursorToPosition(column, row);\n if (\n isEditableGridModel(model) &&\n column != null &&\n row != null &&\n model.isEditableRange(GridRange.makeCell(column, row))\n ) {\n grid.startEditing(column, row);\n }\n }, GridTokenMouseHandler.HOLD_LENGTH);\n\n return true;\n }\n\n onClick(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n const isUserHoveringLink = this.isHoveringLink(gridPoint, grid);\n\n if (!isUserHoveringLink || !this.isDown || this.currentLinkBox == null) {\n this.isDown = false;\n this.isHold = false;\n return false;\n }\n\n // User is hovering a link, isDown is true\n // If isHold is true, then the select already happened so onUp shouldn't do anything\n if (!this.isHold) {\n // Cancel the timeout and open a new tab with the link\n if (this.timeoutId != null) {\n clearTimeout(this.timeoutId);\n }\n this.timeoutId = undefined;\n grid.props.onTokenClicked(this.currentLinkBox?.token);\n }\n\n this.isHold = false;\n this.isDown = false;\n\n return true;\n }\n}\n\nexport default GridTokenMouseHandler;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/grid",
3
- "version": "0.41.0",
3
+ "version": "0.41.2-beta.3+626de830",
4
4
  "description": "Deephaven React grid component",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -25,7 +25,7 @@
25
25
  "react": "^17.x"
26
26
  },
27
27
  "devDependencies": {
28
- "@deephaven/tsconfig": "^0.41.0"
28
+ "@deephaven/tsconfig": "^0.41.2-beta.3+626de830"
29
29
  },
30
30
  "files": [
31
31
  "dist"
@@ -34,7 +34,7 @@
34
34
  "*.css"
35
35
  ],
36
36
  "dependencies": {
37
- "@deephaven/utils": "^0.41.0",
37
+ "@deephaven/utils": "^0.41.2-beta.3+626de830",
38
38
  "classnames": "^2.3.1",
39
39
  "color-convert": "^2.0.1",
40
40
  "event-target-shim": "^6.0.2",
@@ -47,5 +47,5 @@
47
47
  "publishConfig": {
48
48
  "access": "public"
49
49
  },
50
- "gitHead": "d1ce14073728613d8e7751cc844f00f2cba62f51"
50
+ "gitHead": "626de830ba4f580c90b0d0e2ee51ce8fd0452ad9"
51
51
  }