@deephaven/grid 0.31.2-beta.6 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Grid.d.ts +13 -4
- package/dist/Grid.d.ts.map +1 -1
- package/dist/Grid.js +77 -53
- package/dist/Grid.js.map +1 -1
- package/dist/GridMetricCalculator.d.ts +1 -9
- package/dist/GridMetricCalculator.d.ts.map +1 -1
- package/dist/GridMetricCalculator.js +4 -17
- package/dist/GridMetricCalculator.js.map +1 -1
- package/dist/GridModel.d.ts +10 -0
- package/dist/GridModel.d.ts.map +1 -1
- package/dist/GridModel.js +40 -4
- package/dist/GridModel.js.map +1 -1
- package/dist/GridRenderer.d.ts +14 -2
- package/dist/GridRenderer.d.ts.map +1 -1
- package/dist/GridRenderer.js +159 -18
- package/dist/GridRenderer.js.map +1 -1
- package/dist/GridTheme.d.ts +1 -0
- package/dist/GridTheme.d.ts.map +1 -1
- package/dist/GridTheme.js +1 -0
- package/dist/GridTheme.js.map +1 -1
- package/dist/GridUtils.d.ts +27 -0
- package/dist/GridUtils.d.ts.map +1 -1
- package/dist/GridUtils.js +39 -0
- package/dist/GridUtils.js.map +1 -1
- package/dist/MockGridModel.d.ts +8 -8
- package/dist/MockGridModel.d.ts.map +1 -1
- package/dist/MockGridModel.js.map +1 -1
- package/dist/mouse-handlers/GridRowMoveMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridRowMoveMouseHandler.js +1 -1
- package/dist/mouse-handlers/GridRowMoveMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowTreeMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridRowTreeMouseHandler.js +1 -1
- package/dist/mouse-handlers/GridRowTreeMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridSeparatorMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridSeparatorMouseHandler.js +1 -1
- package/dist/mouse-handlers/GridSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridTokenMouseHandler.d.ts +24 -0
- package/dist/mouse-handlers/GridTokenMouseHandler.d.ts.map +1 -0
- package/dist/mouse-handlers/GridTokenMouseHandler.js +143 -0
- package/dist/mouse-handlers/GridTokenMouseHandler.js.map +1 -0
- package/dist/mouse-handlers/index.d.ts +1 -0
- package/dist/mouse-handlers/index.d.ts.map +1 -1
- package/dist/mouse-handlers/index.js +1 -0
- package/dist/mouse-handlers/index.js.map +1 -1
- package/package.json +5 -4
package/dist/GridModel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridModel.d.ts","sourceRoot":"","sources":["../src/GridModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"GridModel.d.ts","sourceRoot":"","sources":["../src/GridModel.ts"],"names":[],"mappings":"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"}
|
package/dist/GridModel.js
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
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); }
|
|
1
4
|
import { EventTarget } from 'event-target-shim';
|
|
5
|
+
import { find as linkifyFind } from 'linkifyjs';
|
|
6
|
+
import memoizeClear from "./memoizeClear.js";
|
|
7
|
+
var LINK_TRUNCATION_LENGTH = 5000;
|
|
8
|
+
|
|
2
9
|
/* eslint class-methods-use-this: "off" */
|
|
3
10
|
/* eslint no-unused-vars: "off" */
|
|
4
11
|
/**
|
|
@@ -7,10 +14,26 @@ import { EventTarget } from 'event-target-shim';
|
|
|
7
14
|
* If data needs to be loaded asynchronously, return something immediately, then trigger an event for the table to refresh (Not yet implemented).
|
|
8
15
|
*/
|
|
9
16
|
class GridModel extends EventTarget {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
17
|
+
constructor() {
|
|
18
|
+
super(...arguments);
|
|
19
|
+
_defineProperty(this, "getCachedTokensInText", memoizeClear((text, visibleLength) => {
|
|
20
|
+
// If no text is truncated, then directly search in text
|
|
21
|
+
if (visibleLength >= text.length) {
|
|
22
|
+
return linkifyFind(text);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// To check for links, we should check to the first space after the truncatedText length
|
|
26
|
+
var indexOfProceedingWhitespace = text.slice(visibleLength - 1, LINK_TRUNCATION_LENGTH).search(/\s/); // index or -1 if not found
|
|
27
|
+
|
|
28
|
+
var lengthOfContent = visibleLength + indexOfProceedingWhitespace;
|
|
29
|
+
// If it doesn't exist, set lengthOfContent to the minimum between length of the original text and 5000
|
|
30
|
+
if (indexOfProceedingWhitespace === -1) {
|
|
31
|
+
lengthOfContent = Math.min(LINK_TRUNCATION_LENGTH, text.length);
|
|
32
|
+
}
|
|
33
|
+
var contentToCheckForLinks = text.substring(0, lengthOfContent);
|
|
34
|
+
return linkifyFind(contentToCheckForLinks);
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
14
37
|
/** Count of rows that are frozen (or 'floating') at the top */
|
|
15
38
|
get floatingTopRowCount() {
|
|
16
39
|
return 0;
|
|
@@ -149,6 +172,19 @@ class GridModel extends EventTarget {
|
|
|
149
172
|
getColumnHeaderParentGroup(modelIndex, depth) {
|
|
150
173
|
return undefined;
|
|
151
174
|
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Gets the tokens in the cell at column and row, based on the visible text
|
|
178
|
+
* @param column The model column
|
|
179
|
+
* @param row The model row
|
|
180
|
+
* @param visibleLength The length of the visible text
|
|
181
|
+
* @returns An array of Tokens in the cell
|
|
182
|
+
*/
|
|
183
|
+
tokensForCell(column, row) {
|
|
184
|
+
var visibleLength = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : LINK_TRUNCATION_LENGTH;
|
|
185
|
+
var text = this.textForCell(column, row);
|
|
186
|
+
return this.getCachedTokensInText(text, visibleLength);
|
|
187
|
+
}
|
|
152
188
|
}
|
|
153
189
|
export default GridModel;
|
|
154
190
|
//# sourceMappingURL=GridModel.js.map
|
package/dist/GridModel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridModel.js","names":["EventTarget","GridModel","floatingTopRowCount","floatingBottomRowCount","floatingLeftColumnCount","floatingRightColumnCount","columnHeaderMaxDepth","truncationCharForCell","column","row","undefined","textAlignForCell","colorForCell","theme","textColor","backgroundColorForCell","colorForColumnHeader","depth","textForRowHeader","textForRowFooter","isColumnMovable","isRowMovable","getColumnHeaderGroup","modelIndex","getColumnHeaderParentGroup"],"sources":["../src/GridModel.ts"],"sourcesContent":["import { EventTarget, Event } from 'event-target-shim';\nimport type { IColumnHeaderGroup } from './ColumnHeaderGroup';\nimport { ModelIndex } from './GridMetrics';\nimport { GridColor, GridTheme, NullableGridColor } from './GridTheme';\n\n/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\n/**\n * Model for a Grid\n * All of these methods should return very quickly, as they will be called many times in the render cycle.\n * If data needs to be loaded asynchronously, return something immediately, then trigger an event for the table to refresh (Not yet implemented).\n */\nabstract class GridModel<\n TEventMap extends Record<string, Event<string>> = Record<\n string,\n Event<string>\n >,\n TMode extends 'standard' | 'strict' = 'standard'\n> extends EventTarget<TEventMap, TMode> {\n /** Count of rows in the grid */\n abstract get rowCount(): number;\n\n /** Count of columns in the grid */\n abstract get columnCount(): number;\n\n /** Count of rows that are frozen (or 'floating') at the top */\n get floatingTopRowCount(): number {\n return 0;\n }\n\n /** Count of rows that are frozen at the bottom */\n get floatingBottomRowCount(): number {\n return 0;\n }\n\n /** Count of columns that are frozen (or 'floating') at the left */\n get floatingLeftColumnCount(): number {\n return 0;\n }\n\n /** Count of columns that are frozen (or 'floating') at the right */\n get floatingRightColumnCount(): number {\n return 0;\n }\n\n /**\n * How many columns header levels are in the grid\n * Used for column grouping where columns at depth 0 are the base columns\n *\n * A grid with 1-level grouping would have a columnHeaderDepth of 2\n * and column headers at depths 0 and 1\n */\n get columnHeaderMaxDepth(): number {\n return 1;\n }\n\n /**\n * Get the text for the specified cell\n * @param column Column to get the text for\n * @param row Row to get the text for\n * @returns Text for the specified cell\n */\n abstract textForCell(column: ModelIndex, row: ModelIndex): string;\n\n /**\n * Get the character to replace text when truncated for a specific cell.\n * Leave undefined to show text truncated with ellipsis\n * @param column Column to get the truncation character for\n * @param row Row to get the truncation character for\n * @returns Truncation character for the specified cell\n */\n truncationCharForCell(\n column: ModelIndex,\n row: ModelIndex\n ): string | undefined {\n return undefined;\n }\n\n /**\n * Get the text alignment for the specified cell\n * @param column Column to get the alignment for\n * @param row Row to get the alignment for\n * @returns Text alignment for the specified cell\n */\n textAlignForCell(column: ModelIndex, row: ModelIndex): CanvasTextAlign {\n return 'left';\n }\n\n /**\n * Get the color for the text in the specified cell\n * @param column Column to get the color for\n * @param row Row to get the color for\n * @param theme Theme applied to the grid\n * @returns Color for the text in the cell\n */\n colorForCell(\n column: ModelIndex,\n row: ModelIndex,\n theme: GridTheme\n ): GridColor {\n return theme.textColor;\n }\n\n /**\n * Get the background color for the cell\n * @param column Column to get the background color for\n * @param row Row to get the background color for\n * @param theme Theme applied to the grid\n * @returns Background color for the cell\n */\n backgroundColorForCell(\n column: ModelIndex,\n row: ModelIndex,\n theme: GridTheme\n ): NullableGridColor {\n return null;\n }\n\n /**\n * Text for the column header\n * @param column Column to get the header for\n * @param depth Depth to get the header text for. 0 is base columns\n * @returns Text to put in the column header\n */\n abstract textForColumnHeader(\n column: ModelIndex,\n depth?: number\n ): string | undefined;\n\n /** Color for column header\n * @param column Column to get the color for\n * @param depth Header depth to get the color for\n * @returns Color for the header at the depth or null\n */\n colorForColumnHeader(column: ModelIndex, depth = 0): string | null {\n return null;\n }\n\n /**\n * Text for the row header\n * @param row Row to get the header for\n * @returns Text to put in the row header\n */\n textForRowHeader(row: ModelIndex): string {\n return '';\n }\n\n /**\n * Text for the row footer\n * @param row Row to get the footer for\n * @returns Text to put in the row footer\n */\n textForRowFooter(row: ModelIndex): string {\n return '';\n }\n\n /**\n * @param column Column to check\n * @returns True if the column is movable\n */\n isColumnMovable(column: ModelIndex, depth = 0): boolean {\n return true;\n }\n\n /**\n * @param row Row to check\n * @returns True if the row is movable\n */\n isRowMovable(row: ModelIndex): boolean {\n return true;\n }\n\n getColumnHeaderGroup(\n modelIndex: ModelIndex,\n depth: number\n ): IColumnHeaderGroup | undefined {\n return undefined;\n }\n\n getColumnHeaderParentGroup(\n modelIndex: ModelIndex,\n depth: number\n ): IColumnHeaderGroup | undefined {\n return undefined;\n }\n}\n\nexport default GridModel;\n"],"mappings":"AAAA,SAASA,WAAW,QAAe,mBAAmB;AAKtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAeC,SAAS,SAMdD,WAAW,CAAmB;EACtC;;EAGA;;EAGA;EACA,IAAIE,mBAAmB,GAAW;IAChC,OAAO,CAAC;EACV;;EAEA;EACA,IAAIC,sBAAsB,GAAW;IACnC,OAAO,CAAC;EACV;;EAEA;EACA,IAAIC,uBAAuB,GAAW;IACpC,OAAO,CAAC;EACV;;EAEA;EACA,IAAIC,wBAAwB,GAAW;IACrC,OAAO,CAAC;EACV;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,IAAIC,oBAAoB,GAAW;IACjC,OAAO,CAAC;EACV;;EAEA;AACF;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,qBAAqB,CACnBC,MAAkB,EAClBC,GAAe,EACK;IACpB,OAAOC,SAAS;EAClB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEC,gBAAgB,CAACH,MAAkB,EAAEC,GAAe,EAAmB;IACrE,OAAO,MAAM;EACf;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEG,YAAY,CACVJ,MAAkB,EAClBC,GAAe,EACfI,KAAgB,EACL;IACX,OAAOA,KAAK,CAACC,SAAS;EACxB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,sBAAsB,CACpBP,MAAkB,EAClBC,GAAe,EACfI,KAAgB,EACG;IACnB,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;AACA;;EAME;AACF;AACA;AACA;AACA;EACEG,oBAAoB,CAACR,MAAkB,EAA4B;IAAA,IAA1BS,KAAK,uEAAG,CAAC;IAChD,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;EACEC,gBAAgB,CAACT,GAAe,EAAU;IACxC,OAAO,EAAE;EACX;;EAEA;AACF;AACA;AACA;AACA;EACEU,gBAAgB,CAACV,GAAe,EAAU;IACxC,OAAO,EAAE;EACX;;EAEA;AACF;AACA;AACA;EACEW,eAAe,CAACZ,MAAkB,EAAsB;IAAA,IAApBS,KAAK,uEAAG,CAAC;IAC3C,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;EACEI,YAAY,CAACZ,GAAe,EAAW;IACrC,OAAO,IAAI;EACb;EAEAa,oBAAoB,CAClBC,UAAsB,EACtBN,KAAa,EACmB;IAChC,OAAOP,SAAS;EAClB;EAEAc,0BAA0B,CACxBD,UAAsB,EACtBN,KAAa,EACmB;IAChC,OAAOP,SAAS;EAClB;AACF;AAEA,eAAeT,SAAS"}
|
|
1
|
+
{"version":3,"file":"GridModel.js","names":["EventTarget","find","linkifyFind","memoizeClear","LINK_TRUNCATION_LENGTH","GridModel","text","visibleLength","length","indexOfProceedingWhitespace","slice","search","lengthOfContent","Math","min","contentToCheckForLinks","substring","floatingTopRowCount","floatingBottomRowCount","floatingLeftColumnCount","floatingRightColumnCount","columnHeaderMaxDepth","truncationCharForCell","column","row","undefined","textAlignForCell","colorForCell","theme","textColor","backgroundColorForCell","colorForColumnHeader","depth","textForRowHeader","textForRowFooter","isColumnMovable","isRowMovable","getColumnHeaderGroup","modelIndex","getColumnHeaderParentGroup","tokensForCell","textForCell","getCachedTokensInText"],"sources":["../src/GridModel.ts"],"sourcesContent":["import { EventTarget, Event } from 'event-target-shim';\nimport { find as linkifyFind } from 'linkifyjs';\nimport type { IColumnHeaderGroup } from './ColumnHeaderGroup';\nimport { ModelIndex } from './GridMetrics';\nimport { GridColor, GridTheme, NullableGridColor } from './GridTheme';\nimport memoizeClear from './memoizeClear';\nimport { Token } from './GridUtils';\n\nconst LINK_TRUNCATION_LENGTH = 5000;\n\n/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\n/**\n * Model for a Grid\n * All of these methods should return very quickly, as they will be called many times in the render cycle.\n * If data needs to be loaded asynchronously, return something immediately, then trigger an event for the table to refresh (Not yet implemented).\n */\nabstract class GridModel<\n TEventMap extends Record<string, Event<string>> = Record<\n string,\n Event<string>\n >,\n TMode extends 'standard' | 'strict' = 'standard'\n> extends EventTarget<TEventMap, TMode> {\n /** Count of rows in the grid */\n abstract get rowCount(): number;\n\n /** Count of columns in the grid */\n abstract get columnCount(): number;\n\n /** Count of rows that are frozen (or 'floating') at the top */\n get floatingTopRowCount(): number {\n return 0;\n }\n\n /** Count of rows that are frozen at the bottom */\n get floatingBottomRowCount(): number {\n return 0;\n }\n\n /** Count of columns that are frozen (or 'floating') at the left */\n get floatingLeftColumnCount(): number {\n return 0;\n }\n\n /** Count of columns that are frozen (or 'floating') at the right */\n get floatingRightColumnCount(): number {\n return 0;\n }\n\n /**\n * How many columns header levels are in the grid\n * Used for column grouping where columns at depth 0 are the base columns\n *\n * A grid with 1-level grouping would have a columnHeaderDepth of 2\n * and column headers at depths 0 and 1\n */\n get columnHeaderMaxDepth(): number {\n return 1;\n }\n\n /**\n * Get the text for the specified cell\n * @param column Column to get the text for\n * @param row Row to get the text for\n * @returns Text for the specified cell\n */\n abstract textForCell(column: ModelIndex, row: ModelIndex): string;\n\n /**\n * Get the character to replace text when truncated for a specific cell.\n * Leave undefined to show text truncated with ellipsis\n * @param column Column to get the truncation character for\n * @param row Row to get the truncation character for\n * @returns Truncation character for the specified cell\n */\n truncationCharForCell(\n column: ModelIndex,\n row: ModelIndex\n ): string | undefined {\n return undefined;\n }\n\n /**\n * Get the text alignment for the specified cell\n * @param column Column to get the alignment for\n * @param row Row to get the alignment for\n * @returns Text alignment for the specified cell\n */\n textAlignForCell(column: ModelIndex, row: ModelIndex): CanvasTextAlign {\n return 'left';\n }\n\n /**\n * Get the color for the text in the specified cell\n * @param column Column to get the color for\n * @param row Row to get the color for\n * @param theme Theme applied to the grid\n * @returns Color for the text in the cell\n */\n colorForCell(\n column: ModelIndex,\n row: ModelIndex,\n theme: GridTheme\n ): GridColor {\n return theme.textColor;\n }\n\n /**\n * Get the background color for the cell\n * @param column Column to get the background color for\n * @param row Row to get the background color for\n * @param theme Theme applied to the grid\n * @returns Background color for the cell\n */\n backgroundColorForCell(\n column: ModelIndex,\n row: ModelIndex,\n theme: GridTheme\n ): NullableGridColor {\n return null;\n }\n\n /**\n * Text for the column header\n * @param column Column to get the header for\n * @param depth Depth to get the header text for. 0 is base columns\n * @returns Text to put in the column header\n */\n abstract textForColumnHeader(\n column: ModelIndex,\n depth?: number\n ): string | undefined;\n\n /** Color for column header\n * @param column Column to get the color for\n * @param depth Header depth to get the color for\n * @returns Color for the header at the depth or null\n */\n colorForColumnHeader(column: ModelIndex, depth = 0): string | null {\n return null;\n }\n\n /**\n * Text for the row header\n * @param row Row to get the header for\n * @returns Text to put in the row header\n */\n textForRowHeader(row: ModelIndex): string {\n return '';\n }\n\n /**\n * Text for the row footer\n * @param row Row to get the footer for\n * @returns Text to put in the row footer\n */\n textForRowFooter(row: ModelIndex): string {\n return '';\n }\n\n /**\n * @param column Column to check\n * @returns True if the column is movable\n */\n isColumnMovable(column: ModelIndex, depth = 0): boolean {\n return true;\n }\n\n /**\n * @param row Row to check\n * @returns True if the row is movable\n */\n isRowMovable(row: ModelIndex): boolean {\n return true;\n }\n\n getColumnHeaderGroup(\n modelIndex: ModelIndex,\n depth: number\n ): IColumnHeaderGroup | undefined {\n return undefined;\n }\n\n getColumnHeaderParentGroup(\n modelIndex: ModelIndex,\n depth: number\n ): IColumnHeaderGroup | undefined {\n return undefined;\n }\n\n /**\n * Gets the tokens in the cell at column and row, based on the visible text\n * @param column The model column\n * @param row The model row\n * @param visibleLength The length of the visible text\n * @returns An array of Tokens in the cell\n */\n tokensForCell(\n column: ModelIndex,\n row: ModelIndex,\n visibleLength: number = LINK_TRUNCATION_LENGTH\n ): Token[] {\n const text = this.textForCell(column, row);\n return this.getCachedTokensInText(text, visibleLength);\n }\n\n getCachedTokensInText = memoizeClear(\n (text: string, visibleLength: number): Token[] => {\n // If no text is truncated, then directly search in text\n if (visibleLength >= text.length) {\n return linkifyFind(text);\n }\n\n // To check for links, we should check to the first space after the truncatedText length\n const indexOfProceedingWhitespace = text\n .slice(visibleLength - 1, LINK_TRUNCATION_LENGTH)\n .search(/\\s/); // index or -1 if not found\n\n let lengthOfContent = visibleLength + indexOfProceedingWhitespace;\n // If it doesn't exist, set lengthOfContent to the minimum between length of the original text and 5000\n if (indexOfProceedingWhitespace === -1) {\n lengthOfContent = Math.min(LINK_TRUNCATION_LENGTH, text.length);\n }\n const contentToCheckForLinks = text.substring(0, lengthOfContent);\n return linkifyFind(contentToCheckForLinks);\n }\n );\n}\n\nexport default GridModel;\n"],"mappings":"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"}
|
package/dist/GridRenderer.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Token, TokenBox } from './GridUtils';
|
|
1
2
|
import { GridColor, GridColorWay, GridTheme, NullableGridColor } from './GridTheme';
|
|
2
3
|
import GridModel from './GridModel';
|
|
3
4
|
import GridRange from './GridRange';
|
|
@@ -106,13 +107,12 @@ export declare class GridRenderer {
|
|
|
106
107
|
* The textWidth returned is the width that the text can occupy accounting for any other cell markings
|
|
107
108
|
* The width accounts for tree table indents and cell padding, so it is the width the text may consume
|
|
108
109
|
*
|
|
109
|
-
* @param context Canvas context
|
|
110
110
|
* @param state GridRenderState to get the text metrics for
|
|
111
111
|
* @param column Column of cell to get text metrics for
|
|
112
112
|
* @param row Row of cell to get text metrics for
|
|
113
113
|
* @returns Object with width, x, and y of the text
|
|
114
114
|
*/
|
|
115
|
-
getTextRenderMetrics(
|
|
115
|
+
getTextRenderMetrics(state: GridRenderState, column: VisibleIndex, row: VisibleIndex): {
|
|
116
116
|
width: number;
|
|
117
117
|
x: number;
|
|
118
118
|
y: number;
|
|
@@ -183,6 +183,18 @@ export declare class GridRenderer {
|
|
|
183
183
|
drawDraggingColumn(context: CanvasRenderingContext2D, state: GridRenderState): void;
|
|
184
184
|
drawDraggingRow(context: CanvasRenderingContext2D, state: GridRenderState): void;
|
|
185
185
|
drawScrollBars(context: CanvasRenderingContext2D, state: GridRenderState): void;
|
|
186
|
+
/**
|
|
187
|
+
* Gets the token boxes that are visible in the cell
|
|
188
|
+
* @param column The visible column
|
|
189
|
+
* @param row The visible row
|
|
190
|
+
* @param state The GridRenderState
|
|
191
|
+
* @returns An array of TokenBox of visible tokens or empty array with coordinates relative to gridX and gridY
|
|
192
|
+
*/
|
|
193
|
+
getTokenBoxesForVisibleCell(column: VisibleIndex, row: VisibleIndex, state: GridRenderState): TokenBox[];
|
|
194
|
+
/**
|
|
195
|
+
* Returns an array of token boxes with the coordinates relative to the top left corner of the text
|
|
196
|
+
*/
|
|
197
|
+
getCachedTokenBoxesForVisibleCell: ((truncatedText: string, tokens: Token[], _font: string, _baseline: CanvasTextBaseline, textHeight: number, context: CanvasRenderingContext2D) => TokenBox[]) & import("@types/memoizee").Memoized<(truncatedText: string, tokens: Token[], _font: string, _baseline: CanvasTextBaseline, textHeight: number, context: CanvasRenderingContext2D) => TokenBox[]>;
|
|
186
198
|
}
|
|
187
199
|
export default GridRenderer;
|
|
188
200
|
//# sourceMappingURL=GridRenderer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridRenderer.d.ts","sourceRoot":"","sources":["../src/GridRenderer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GridRenderer.d.ts","sourceRoot":"","sources":["../src/GridRenderer.ts"],"names":[],"mappings":"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"}
|
package/dist/GridRenderer.js
CHANGED
|
@@ -2,12 +2,11 @@ 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
|
import clamp from 'lodash.clamp';
|
|
5
|
-
import { ColorUtils } from '@deephaven/utils';
|
|
5
|
+
import { ColorUtils, EMPTY_ARRAY, getOrThrow } from '@deephaven/utils';
|
|
6
6
|
import memoizeClear from "./memoizeClear.js";
|
|
7
7
|
import GridUtils from "./GridUtils.js";
|
|
8
8
|
import GridColorUtils from "./GridColorUtils.js";
|
|
9
9
|
import { isExpandableGridModel } from "./ExpandableGridModel.js";
|
|
10
|
-
import { getOrThrow } from "./GridMetricCalculator.js";
|
|
11
10
|
import { isEditableGridModel } from "./EditableGridModel.js";
|
|
12
11
|
import GridColumnSeparatorMouseHandler from "./mouse-handlers/GridColumnSeparatorMouseHandler.js";
|
|
13
12
|
/* eslint react/destructuring-assignment: "off" */
|
|
@@ -38,6 +37,48 @@ export class GridRenderer {
|
|
|
38
37
|
_defineProperty(this, "getCachedColorIsDark", memoizeClear(color => ColorUtils.isDark(color), {
|
|
39
38
|
max: 1000
|
|
40
39
|
}));
|
|
40
|
+
_defineProperty(this, "getCachedTokenBoxesForVisibleCell", memoizeClear((truncatedText, tokens, _font, _baseline, textHeight, context) => {
|
|
41
|
+
var top = 0;
|
|
42
|
+
var bottom = textHeight;
|
|
43
|
+
var tokenBoxes = [];
|
|
44
|
+
|
|
45
|
+
// The index where the last token ended
|
|
46
|
+
var lastTokenEnd = 0;
|
|
47
|
+
// The width of the text preceding the current token
|
|
48
|
+
var currentTextWidth = 0;
|
|
49
|
+
// Loop through array and push them to array
|
|
50
|
+
for (var i = 0; i < tokens.length; i += 1) {
|
|
51
|
+
var token = tokens[i];
|
|
52
|
+
var {
|
|
53
|
+
start: _start,
|
|
54
|
+
end: _end
|
|
55
|
+
} = token;
|
|
56
|
+
// The last token value is calculated based on the full text so the value needs to be truncated
|
|
57
|
+
var value = _end > truncatedText.length ? truncatedText.substring(_start) : token.value;
|
|
58
|
+
|
|
59
|
+
// Add the width of the text in between this token and the last token
|
|
60
|
+
currentTextWidth += context.measureText(truncatedText.substring(lastTokenEnd, _start)).width;
|
|
61
|
+
var tokenWidth = context.measureText(value).width;
|
|
62
|
+
|
|
63
|
+
// Check if the x position is less than the grid x, then tokenWidth should be shifted by gridX - startX
|
|
64
|
+
|
|
65
|
+
var left = currentTextWidth;
|
|
66
|
+
var right = left + tokenWidth;
|
|
67
|
+
var newTokenBox = {
|
|
68
|
+
x1: left,
|
|
69
|
+
y1: top,
|
|
70
|
+
x2: right,
|
|
71
|
+
y2: bottom,
|
|
72
|
+
token
|
|
73
|
+
};
|
|
74
|
+
tokenBoxes.push(newTokenBox);
|
|
75
|
+
lastTokenEnd = _end;
|
|
76
|
+
currentTextWidth += tokenWidth;
|
|
77
|
+
}
|
|
78
|
+
return tokenBoxes;
|
|
79
|
+
}, {
|
|
80
|
+
max: 10000
|
|
81
|
+
}));
|
|
41
82
|
}
|
|
42
83
|
/**
|
|
43
84
|
* Truncate a string to the specified length and add ellipses if necessary
|
|
@@ -780,16 +821,12 @@ export class GridRenderer {
|
|
|
780
821
|
* The textWidth returned is the width that the text can occupy accounting for any other cell markings
|
|
781
822
|
* The width accounts for tree table indents and cell padding, so it is the width the text may consume
|
|
782
823
|
*
|
|
783
|
-
* @param context Canvas context
|
|
784
824
|
* @param state GridRenderState to get the text metrics for
|
|
785
825
|
* @param column Column of cell to get text metrics for
|
|
786
826
|
* @param row Row of cell to get text metrics for
|
|
787
827
|
* @returns Object with width, x, and y of the text
|
|
788
828
|
*/
|
|
789
|
-
getTextRenderMetrics(
|
|
790
|
-
var {
|
|
791
|
-
textAlign
|
|
792
|
-
} = context;
|
|
829
|
+
getTextRenderMetrics(state, column, row) {
|
|
793
830
|
var {
|
|
794
831
|
metrics,
|
|
795
832
|
model,
|
|
@@ -800,13 +837,18 @@ export class GridRenderer {
|
|
|
800
837
|
allColumnXs,
|
|
801
838
|
allColumnWidths,
|
|
802
839
|
allRowYs,
|
|
803
|
-
allRowHeights
|
|
840
|
+
allRowHeights,
|
|
841
|
+
modelRows,
|
|
842
|
+
modelColumns
|
|
804
843
|
} = metrics;
|
|
805
844
|
var {
|
|
806
845
|
cellHorizontalPadding,
|
|
807
846
|
treeDepthIndent,
|
|
808
847
|
treeHorizontalPadding
|
|
809
848
|
} = theme;
|
|
849
|
+
var modelRow = getOrThrow(modelRows, row);
|
|
850
|
+
var modelColumn = getOrThrow(modelColumns, column);
|
|
851
|
+
var textAlign = model.textAlignForCell(modelColumn, modelRow);
|
|
810
852
|
var x = getOrThrow(allColumnXs, column);
|
|
811
853
|
var y = getOrThrow(allRowYs, row);
|
|
812
854
|
var columnWidth = getOrThrow(allColumnWidths, column);
|
|
@@ -859,16 +901,48 @@ export class GridRenderer {
|
|
|
859
901
|
context.textAlign = textAlign;
|
|
860
902
|
var color = model.colorForCell(modelColumn, modelRow, theme) || textColor;
|
|
861
903
|
context.fillStyle = color;
|
|
904
|
+
context.save();
|
|
862
905
|
var {
|
|
863
906
|
width: textWidth,
|
|
864
907
|
x: textX,
|
|
865
908
|
y: textY
|
|
866
|
-
} = this.getTextRenderMetrics(
|
|
909
|
+
} = this.getTextRenderMetrics(state, column, row);
|
|
867
910
|
var fontWidth = (_fontWidths$get = fontWidths.get(context.font)) !== null && _fontWidths$get !== void 0 ? _fontWidths$get : GridRenderer.DEFAULT_FONT_WIDTH;
|
|
868
911
|
var truncatedText = this.getCachedTruncatedString(context, text, textWidth, fontWidth, truncationChar);
|
|
912
|
+
var tokens = model.tokensForCell(modelColumn, modelRow, truncatedText.length);
|
|
869
913
|
if (truncatedText) {
|
|
870
|
-
|
|
914
|
+
var tokenIndex = 0;
|
|
915
|
+
var textStart = 0;
|
|
916
|
+
var left = textX;
|
|
917
|
+
var {
|
|
918
|
+
actualBoundingBoxDescent
|
|
919
|
+
} = context.measureText(truncatedText);
|
|
920
|
+
while (textStart < truncatedText.length) {
|
|
921
|
+
var _ref, _token$end;
|
|
922
|
+
var nextToken = tokens[tokenIndex];
|
|
923
|
+
var token = textStart === (nextToken === null || nextToken === void 0 ? void 0 : nextToken.start) ? nextToken : null;
|
|
924
|
+
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;
|
|
925
|
+
var value = truncatedText.substring(textStart, textEnd);
|
|
926
|
+
var {
|
|
927
|
+
width
|
|
928
|
+
} = context.measureText(value);
|
|
929
|
+
var widthOfUnderline = value.endsWith('…') ? context.measureText(value.substring(0, value.length - 1)).width : width;
|
|
930
|
+
|
|
931
|
+
// Set the styling based on the token, then draw the text
|
|
932
|
+
if (token != null) {
|
|
933
|
+
context.fillStyle = theme.hyperlinkColor;
|
|
934
|
+
context.fillText(value, left, textY);
|
|
935
|
+
context.fillRect(left, textY + actualBoundingBoxDescent, widthOfUnderline, 1);
|
|
936
|
+
} else {
|
|
937
|
+
context.fillStyle = color;
|
|
938
|
+
context.fillText(value, left, textY);
|
|
939
|
+
}
|
|
940
|
+
left += width;
|
|
941
|
+
textStart = textEnd;
|
|
942
|
+
if (token != null) tokenIndex += 1;
|
|
943
|
+
}
|
|
871
944
|
}
|
|
945
|
+
context.restore();
|
|
872
946
|
}
|
|
873
947
|
if (isFirstColumn && isExpandableGridModel(model) && model.hasExpandableRows) {
|
|
874
948
|
this.drawCellRowTreeMarker(context, state, row);
|
|
@@ -1038,11 +1112,11 @@ export class GridRenderer {
|
|
|
1038
1112
|
}
|
|
1039
1113
|
if (headerSeparatorColor) {
|
|
1040
1114
|
context.strokeStyle = headerSeparatorColor;
|
|
1041
|
-
var hiddenColumns = [...allColumnWidths.entries()].filter(
|
|
1042
|
-
var [_, w] =
|
|
1115
|
+
var hiddenColumns = [...allColumnWidths.entries()].filter(_ref2 => {
|
|
1116
|
+
var [_, w] = _ref2;
|
|
1043
1117
|
return w === 0;
|
|
1044
|
-
}).map(
|
|
1045
|
-
var [index] =
|
|
1118
|
+
}).map(_ref3 => {
|
|
1119
|
+
var [index] = _ref3;
|
|
1046
1120
|
return index;
|
|
1047
1121
|
});
|
|
1048
1122
|
|
|
@@ -1183,25 +1257,25 @@ export class GridRenderer {
|
|
|
1183
1257
|
// The group will be drawn as if it were a column with a max width of the bounds width
|
|
1184
1258
|
var prevColumnIndex = columnIndex - 1;
|
|
1185
1259
|
while (prevColumnIndex >= 0 && (columnGroupRight - columnGroupLeft < visibleWidth || columnGroupLeft > minX)) {
|
|
1186
|
-
var _modelColumns$get,
|
|
1260
|
+
var _modelColumns$get, _ref4, _userColumnWidths$get;
|
|
1187
1261
|
var prevModelIndex = (_modelColumns$get = modelColumns.get(prevColumnIndex)) !== null && _modelColumns$get !== void 0 ? _modelColumns$get : GridUtils.getModelIndex(prevColumnIndex, movedColumns);
|
|
1188
1262
|
if (prevModelIndex == null || model.textForColumnHeader(prevModelIndex, depth) !== columnGroupName) {
|
|
1189
1263
|
// Previous column not in the same group
|
|
1190
1264
|
break;
|
|
1191
1265
|
}
|
|
1192
|
-
var prevColumnWidth = (
|
|
1266
|
+
var prevColumnWidth = (_ref4 = (_userColumnWidths$get = userColumnWidths.get(prevModelIndex)) !== null && _userColumnWidths$get !== void 0 ? _userColumnWidths$get : allColumnWidths.get(prevColumnIndex)) !== null && _ref4 !== void 0 ? _ref4 : columnWidth;
|
|
1193
1267
|
columnGroupLeft -= prevColumnWidth;
|
|
1194
1268
|
prevColumnIndex -= 1;
|
|
1195
1269
|
}
|
|
1196
1270
|
var nextColumnIndex = columnIndex + 1;
|
|
1197
1271
|
while (nextColumnIndex < columnCount && (columnGroupRight - columnGroupLeft < visibleWidth || columnGroupRight < maxX)) {
|
|
1198
|
-
var _modelColumns$get2,
|
|
1272
|
+
var _modelColumns$get2, _ref5, _userColumnWidths$get2;
|
|
1199
1273
|
var nextModelIndex = (_modelColumns$get2 = modelColumns.get(nextColumnIndex)) !== null && _modelColumns$get2 !== void 0 ? _modelColumns$get2 : GridUtils.getModelIndex(nextColumnIndex, movedColumns);
|
|
1200
1274
|
if (model.textForColumnHeader(nextModelIndex, depth) !== columnGroupName) {
|
|
1201
1275
|
// Next column not in the same group
|
|
1202
1276
|
break;
|
|
1203
1277
|
}
|
|
1204
|
-
var nextColumnWidth = (
|
|
1278
|
+
var nextColumnWidth = (_ref5 = (_userColumnWidths$get2 = userColumnWidths.get(nextModelIndex)) !== null && _userColumnWidths$get2 !== void 0 ? _userColumnWidths$get2 : allColumnWidths.get(nextColumnIndex)) !== null && _ref5 !== void 0 ? _ref5 : columnWidth;
|
|
1205
1279
|
columnGroupRight += nextColumnWidth;
|
|
1206
1280
|
nextColumnIndex += 1;
|
|
1207
1281
|
}
|
|
@@ -2154,6 +2228,73 @@ export class GridRenderer {
|
|
|
2154
2228
|
}
|
|
2155
2229
|
context.translate(-barLeft, -barTop);
|
|
2156
2230
|
}
|
|
2231
|
+
|
|
2232
|
+
/**
|
|
2233
|
+
* Gets the token boxes that are visible in the cell
|
|
2234
|
+
* @param column The visible column
|
|
2235
|
+
* @param row The visible row
|
|
2236
|
+
* @param state The GridRenderState
|
|
2237
|
+
* @returns An array of TokenBox of visible tokens or empty array with coordinates relative to gridX and gridY
|
|
2238
|
+
*/
|
|
2239
|
+
getTokenBoxesForVisibleCell(column, row, state) {
|
|
2240
|
+
var _fontWidths$get3;
|
|
2241
|
+
var {
|
|
2242
|
+
metrics,
|
|
2243
|
+
context,
|
|
2244
|
+
model,
|
|
2245
|
+
theme
|
|
2246
|
+
} = state;
|
|
2247
|
+
if (context == null || metrics == null) {
|
|
2248
|
+
return EMPTY_ARRAY;
|
|
2249
|
+
}
|
|
2250
|
+
var {
|
|
2251
|
+
modelRows,
|
|
2252
|
+
modelColumns
|
|
2253
|
+
} = metrics;
|
|
2254
|
+
var modelRow = getOrThrow(modelRows, row);
|
|
2255
|
+
var modelColumn = getOrThrow(modelColumns, column);
|
|
2256
|
+
var text = model.textForCell(modelColumn, modelRow);
|
|
2257
|
+
var {
|
|
2258
|
+
width: textWidth,
|
|
2259
|
+
x: textX,
|
|
2260
|
+
y: textY
|
|
2261
|
+
} = this.getTextRenderMetrics(state, column, row);
|
|
2262
|
+
var {
|
|
2263
|
+
fontWidths
|
|
2264
|
+
} = metrics;
|
|
2265
|
+
|
|
2266
|
+
// Set the font and baseline and change it back after
|
|
2267
|
+
context.save();
|
|
2268
|
+
this.configureContext(context, state);
|
|
2269
|
+
var fontWidth = (_fontWidths$get3 = fontWidths === null || fontWidths === void 0 ? void 0 : fontWidths.get(context.font)) !== null && _fontWidths$get3 !== void 0 ? _fontWidths$get3 : GridRenderer.DEFAULT_FONT_WIDTH;
|
|
2270
|
+
var truncationChar = model.truncationCharForCell(modelColumn, modelRow);
|
|
2271
|
+
var truncatedText = this.getCachedTruncatedString(context, text, textWidth, fontWidth, truncationChar);
|
|
2272
|
+
var {
|
|
2273
|
+
actualBoundingBoxAscent,
|
|
2274
|
+
actualBoundingBoxDescent
|
|
2275
|
+
} = context.measureText(truncatedText);
|
|
2276
|
+
var textHeight = actualBoundingBoxAscent + actualBoundingBoxDescent;
|
|
2277
|
+
var tokens = model.tokensForCell(modelColumn, modelRow, truncatedText.length);
|
|
2278
|
+
|
|
2279
|
+
// Check if the truncated text contains a link
|
|
2280
|
+
if (tokens.length === 0) {
|
|
2281
|
+
context.restore();
|
|
2282
|
+
return EMPTY_ARRAY;
|
|
2283
|
+
}
|
|
2284
|
+
var cachedTokenBoxes = this.getCachedTokenBoxesForVisibleCell(truncatedText, tokens, theme.font, 'middle', textHeight, context).map(tokenBox => ({
|
|
2285
|
+
x1: tokenBox.x1 + textX,
|
|
2286
|
+
y1: tokenBox.y1 + (textY - actualBoundingBoxAscent),
|
|
2287
|
+
x2: tokenBox.x2 + textX,
|
|
2288
|
+
y2: tokenBox.y2 + (textY - actualBoundingBoxAscent),
|
|
2289
|
+
token: tokenBox.token
|
|
2290
|
+
}));
|
|
2291
|
+
context.restore();
|
|
2292
|
+
return cachedTokenBoxes;
|
|
2293
|
+
}
|
|
2294
|
+
|
|
2295
|
+
/**
|
|
2296
|
+
* Returns an array of token boxes with the coordinates relative to the top left corner of the text
|
|
2297
|
+
*/
|
|
2157
2298
|
}
|
|
2158
2299
|
_defineProperty(GridRenderer, "DEFAULT_FONT_WIDTH", 10);
|
|
2159
2300
|
_defineProperty(GridRenderer, "DEFAULT_EDGE_RADIUS", 2);
|