@deephaven/grid 0.37.2 → 0.37.4-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +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;AAEvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEtE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAMpC;;;;GAIG;AACH,uBAAe,SAAS,CACtB,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CACtD,MAAM,EACN,KAAK,CAAC,MAAM,CAAC,CACd,EACD,KAAK,SAAS,UAAU,GAAG,QAAQ,GAAG,UAAU,CAChD,SAAQ,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC;IACrC,gCAAgC;IAChC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC;IAEhC,mCAAmC;IACnC,QAAQ,KAAK,WAAW,IAAI,MAAM,CAAC;IAEnC,+DAA+D;IAC/D,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IAED,kDAAkD;IAClD,IAAI,sBAAsB,IAAI,MAAM,CAEnC;IAED,mEAAmE;IACnE,IAAI,uBAAuB,IAAI,MAAM,CAEpC;IAED,oEAAoE;IACpE,IAAI,wBAAwB,IAAI,MAAM,CAErC;IAED;;;;;;OAMG;IACH,IAAI,oBAAoB,IAAI,MAAM,CAEjC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,MAAM;IAEjE;;;;;;OAMG;IACH,qBAAqB,CACnB,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,UAAU,GACd,MAAM,GAAG,SAAS;IAIrB;;;;;OAKG;IACH,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,eAAe;IAItE;;;;;;OAMG;IACH,YAAY,CACV,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,SAAS,GACf,SAAS;IAIZ;;;;;;OAMG;IACH,sBAAsB,CACpB,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,SAAS,GACf,iBAAiB;IAIpB;;;;;OAKG;IACH,QAAQ,CAAC,mBAAmB,CAC1B,MAAM,EAAE,UAAU,EAClB,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,GAAG,SAAS;IAErB;;;;OAIG;IACH,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,SAAI,GAAG,MAAM,GAAG,IAAI;IAIlE;;;;OAIG;IACH,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM;IAIzC;;;;OAIG;IACH,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM;IAIzC;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,SAAI,GAAG,OAAO;IAIvD;;;OAGG;IACH,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO;IAItC,oBAAoB,CAClB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,MAAM,GACZ,kBAAkB,GAAG,SAAS;IAIjC,0BAA0B,CACxB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,MAAM,GACZ,kBAAkB,GAAG,SAAS;IAIjC;;;;;;OAMG;IACH,aAAa,CACX,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,UAAU,EACf,aAAa,GAAE,MAA+B,GAC7C,KAAK,EAAE;IAKV,qBAAqB,UACZ,MAAM,iBAAiB,MAAM,KAAG,KAAK,EAAE,8CAAvC,MAAM,iBAAiB,MAAM,KAAG,KAAK,EAAE,EAmB9C;CACH;AAED,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"GridModel.d.ts","sourceRoot":"","sources":["../src/GridModel.ts"],"names":[],"mappings":"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"}
package/dist/GridModel.js CHANGED
@@ -2,8 +2,8 @@ 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 { EventTarget } from 'event-target-shim';
5
- import { find as linkifyFind } from 'linkifyjs';
6
5
  import memoizeClear from "./memoizeClear.js";
6
+ import GridUtils from "./GridUtils.js";
7
7
  var LINK_TRUNCATION_LENGTH = 5000;
8
8
 
9
9
  /* eslint class-methods-use-this: "off" */
@@ -19,7 +19,7 @@ class GridModel extends EventTarget {
19
19
  _defineProperty(this, "getCachedTokensInText", memoizeClear((text, visibleLength) => {
20
20
  // If no text is truncated, then directly search in text
21
21
  if (visibleLength >= text.length) {
22
- return linkifyFind(text);
22
+ return GridUtils.findTokensWithProtocolInText(text);
23
23
  }
24
24
 
25
25
  // To check for links, we should check to the first space after the truncatedText length
@@ -31,7 +31,7 @@ class GridModel extends EventTarget {
31
31
  lengthOfContent = Math.min(LINK_TRUNCATION_LENGTH, text.length);
32
32
  }
33
33
  var contentToCheckForLinks = text.substring(0, lengthOfContent);
34
- return linkifyFind(contentToCheckForLinks);
34
+ return GridUtils.findTokensWithProtocolInText(contentToCheckForLinks);
35
35
  }));
36
36
  }
37
37
  /** Count of rows that are frozen (or 'floating') at the top */
@@ -1 +1 @@
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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"}
1
+ {"version":3,"file":"GridModel.js","names":["EventTarget","memoizeClear","GridUtils","LINK_TRUNCATION_LENGTH","GridModel","text","visibleLength","length","findTokensWithProtocolInText","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 type { IColumnHeaderGroup } from './ColumnHeaderGroup';\nimport { ModelIndex } from './GridMetrics';\nimport { GridColor, GridTheme, NullableGridColor } from './GridTheme';\nimport memoizeClear from './memoizeClear';\nimport GridUtils, { 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 GridUtils.findTokensWithProtocolInText(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\n return GridUtils.findTokensWithProtocolInText(contentToCheckForLinks);\n }\n );\n}\n\nexport default GridModel;\n"],"mappings":"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"}
@@ -421,6 +421,12 @@ export declare class GridUtils {
421
421
  * @returns The token box with translated coordinates
422
422
  */
423
423
  static translateTokenBox(tokenBox: TokenBox, metrics: GridMetrics): TokenBox;
424
+ /**
425
+ * Finds tokens in text (urls, emails) that start with https:// or http://
426
+ * @param text The text to search in
427
+ * @returns An array of tokens
428
+ */
429
+ static findTokensWithProtocolInText(text: string): Token[];
424
430
  }
425
431
  export default GridUtils;
426
432
  //# sourceMappingURL=GridUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GridUtils.d.ts","sourceRoot":"","sources":["../src/GridUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GridUtils.d.ts","sourceRoot":"","sources":["../src/GridUtils.ts"],"names":[],"mappings":"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"}
package/dist/GridUtils.js CHANGED
@@ -4,6 +4,7 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
4
4
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
5
5
  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); }
6
6
  import clamp from 'lodash.clamp';
7
+ import { find as linkifyFind } from 'linkifyjs';
7
8
  import { EMPTY_ARRAY } from '@deephaven/utils';
8
9
  import GridRange from "./GridRange.js";
9
10
  import { isBoundedAxisRange } from "./GridAxisRange.js";
@@ -1117,6 +1118,21 @@ export class GridUtils {
1117
1118
  token: tokenBox.token
1118
1119
  };
1119
1120
  }
1121
+
1122
+ /**
1123
+ * Finds tokens in text (urls, emails) that start with https:// or http://
1124
+ * @param text The text to search in
1125
+ * @returns An array of tokens
1126
+ */
1127
+ static findTokensWithProtocolInText(text) {
1128
+ var tokens = linkifyFind(text);
1129
+ return tokens.filter(token => {
1130
+ if (token.type === 'url') {
1131
+ return /^https?:\/\//.test(token.value);
1132
+ }
1133
+ return true;
1134
+ });
1135
+ }
1120
1136
  }
1121
1137
  _defineProperty(GridUtils, "PIXELS_PER_LINE", 100 / 3);
1122
1138
  export default GridUtils;
@@ -1 +1 @@
1
- {"version":3,"file":"GridUtils.js","names":["clamp","EMPTY_ARRAY","GridRange","isBoundedAxisRange","isLinkToken","token","href","undefined","GridUtils","getGridPointFromXY","x","y","metrics","column","getColumnAtX","row","getRowAtY","columnHeaderDepth","getColumnHeaderDepthAtY","getCellInfoFromXY","allColumnWidths","allRowHeights","allColumnXs","allRowYs","modelColumns","modelRows","modelRow","get","modelColumn","left","top","columnWidth","rowHeight","columnHeaderHeight","columnHeaderMaxDepth","Math","ceil","iterateFloatingStart","start","total","callback","i","result","iterateFloatingEnd","end","iterateFloating","iterateAllItems","visibleStart","visibleEnd","floatingStartCount","floatingEndCount","totalCount","visibleStartIndex","max","visibleEndIndex","min","isInItem","itemIndex","itemCoordinates","itemSizes","coordinate","itemX","itemSize","getItemAtOffset","offset","itemCount","floatingStart","floatingEnd","items","ignoreFloating","floatingItem","item","length","columnCount","floatingLeftColumnCount","floatingRightColumnCount","visibleColumns","gridX","floatingTopRowCount","floatingBottomRowCount","rowCount","visibleRows","gridY","getNextShownItem","startIndex","modelIndexes","visibleItems","userSizes","visibleItemIndex","findIndex","value","modelIndex","getNextShownColumn","userColumnWidths","getNextShownRow","userRowHeights","getColumnSeparatorIndex","theme","rowHeaderWidth","floatingColumns","floatingLeftWidth","allowColumnResize","headerSeparatorHandleSize","halfSeparatorSize","isPreviousColumnHidden","columnX","isColumnHidden","midX","minX","maxX","isItemHidden","visibleSizes","columnIndex","isFloatingRow","isFloatingColumn","getHiddenItems","hiddenItems","push","getHiddenColumns","getRowSeparatorIndex","allowRowResize","isPreviousRowHidden","rowY","isRowHidden","midY","minY","maxY","rowIndex","getHiddenRows","moveItem","from","to","oldMovedItems","movedItems","lastMovedItem","pop","moveRange","toParam","isPreMoveTo","newLastMovedItem","moveItemOrRange","Array","isArray","applyItemMoves","reverse","fromItemOrRange","toItem","fromItem","fromStart","fromEnd","toStart","moveDistance","nextResult","currentStart","j","Number","NEGATIVE_INFINITY","currentEnd","POSITIVE_INFINITY","movedRange","currentResult","map","s","e","filter","range","flat","isFinite","translateRange","movedColumns","movedRows","columnRanges","startColumn","endColumn","rowRanges","startRow","endRow","ranges","c","r","getModelIndex","visibleIndex","getModelIndexes","visibleIndexes","getModelRangeIndexes","getModelRange","uiRange","getModelRanges","uiRanges","modelRanges","getVisibleRangeIndexes","getVisibleRange","modelRange","getVisibleRanges","visibleRanges","getVisibleIndex","getVisibleIndexes","isMacPlatform","platform","window","navigator","startsWith","getModifierKey","isModifierKeyDown","event","modifierKey","checkColumnHidden","checkAllColumnsHidden","columns","size","every","getScrollDragBounds","width","height","floatingRightWidth","floatingTopHeight","floatingBottomHeight","x1","y1","x2","y2","getScrollDelta","wheelEvent","pageWidth","pageHeight","lineWidth","lineHeight","deltaX","deltaY","shiftKey","deltaMode","WheelEvent","DOM_DELTA_PAGE","DOM_DELTA_LINE","round","PIXELS_PER_LINE","compareRanges","range1","range2","mergeSortedRanges","mergedRanges","translateTokenBox","tokenBox","right","bottom","gridWidth","gridHeight","verticalBarWidth","horizontalBarHeight","newLeft","newRight","newTop","newBottom"],"sources":["../src/GridUtils.ts"],"sourcesContent":["import React from 'react';\nimport clamp from 'lodash.clamp';\nimport { EMPTY_ARRAY } from '@deephaven/utils';\nimport GridRange, { GridRangeIndex } from './GridRange';\nimport {\n BoxCoordinates,\n Coordinate,\n CoordinateMap,\n VisibleIndex,\n VisibleToModelMap,\n ModelIndex,\n ModelSizeMap,\n MoveOperation,\n SizeMap,\n} from './GridMetrics';\nimport type { GridMetrics } from './GridMetrics';\nimport { GridTheme } from './GridTheme';\nimport { GridWheelEvent } from './GridMouseHandler';\nimport {\n AxisRange,\n BoundedAxisRange,\n isBoundedAxisRange,\n Range,\n} from './GridAxisRange';\n\nexport type GridPoint = {\n x: Coordinate;\n y: Coordinate;\n column: GridRangeIndex;\n row: GridRangeIndex;\n columnHeaderDepth?: number;\n};\n\nexport interface CellInfo {\n row: VisibleIndex | null;\n column: VisibleIndex | null;\n modelRow: ModelIndex | null;\n modelColumn: ModelIndex | null;\n left: Coordinate | null;\n top: Coordinate | null;\n columnWidth: number | null;\n rowHeight: number | null;\n}\n\nexport type Token = {\n value: string;\n type: string;\n start: number;\n end: number;\n isLink?: boolean;\n};\nexport type LinkToken = Token & { href: string };\nexport type URLToken = Token & { type: 'url' };\nexport type EmailToken = Token & { type: 'email' };\n\nexport function isLinkToken(token: Token): token is LinkToken {\n return (token as LinkToken)?.href !== undefined;\n}\n\nexport type TokenBox = BoxCoordinates & { token: Token };\n\nexport type IndexCallback<T> = (itemIndex: VisibleIndex) => T | undefined;\n\nexport class GridUtils {\n // use same constant as chrome source for windows\n // https://github.com/chromium/chromium/blob/973af9d461b6b5dc60208c8d3d66adc27e53da78/ui/events/blink/web_input_event_builders_win.cc#L285\n static PIXELS_PER_LINE = 100 / 3;\n\n /**\n * Get the GridPoint for the coordinates provided\n * @param x The grid x coordinate\n * @param y The grid y coordinate\n * @param metrics The grid metrics\n * @returns The GridPoint including the column/row information\n */\n static getGridPointFromXY(\n x: Coordinate,\n y: Coordinate,\n metrics: GridMetrics\n ): GridPoint {\n const column = GridUtils.getColumnAtX(x, metrics);\n const row = GridUtils.getRowAtY(y, metrics);\n const columnHeaderDepth = GridUtils.getColumnHeaderDepthAtY(y, metrics);\n\n return { x, y, row, column, columnHeaderDepth };\n }\n\n static getCellInfoFromXY(\n x: Coordinate,\n y: Coordinate,\n metrics: GridMetrics\n ): CellInfo {\n const { row, column } = GridUtils.getGridPointFromXY(x, y, metrics);\n\n const {\n allColumnWidths,\n allRowHeights,\n allColumnXs,\n allRowYs,\n modelColumns,\n modelRows,\n } = metrics;\n\n const modelRow = row !== null ? modelRows.get(row) : null;\n const modelColumn = column !== null ? modelColumns.get(column) : null;\n const left = column !== null ? allColumnXs.get(column) : null;\n const top = row !== null ? allRowYs.get(row) : null;\n const columnWidth = column !== null ? allColumnWidths.get(column) : null;\n const rowHeight = row !== null ? allRowHeights.get(row) : null;\n\n return {\n row,\n column,\n modelRow: modelRow ?? null,\n modelColumn: modelColumn ?? null,\n left: left ?? null,\n top: top ?? null,\n columnWidth: columnWidth ?? null,\n rowHeight: rowHeight ?? null,\n };\n }\n\n static getColumnHeaderDepthAtY(\n y: Coordinate,\n metrics: GridMetrics\n ): number | undefined {\n const row = GridUtils.getRowAtY(y, metrics);\n const { columnHeaderHeight, columnHeaderMaxDepth } = metrics;\n\n if (row === null && y <= columnHeaderHeight * columnHeaderMaxDepth) {\n return clamp(\n columnHeaderMaxDepth - Math.ceil(y / columnHeaderHeight),\n 0,\n columnHeaderMaxDepth - 1\n );\n }\n\n return undefined;\n }\n\n /**\n * Iterate through each floating item at the start and call a callback, returning the first result\n * @param start The count of floating items at the start\n * @param total The total number of items\n * @param callback Function to call for each item\n * @returns The result from the callback\n */\n static iterateFloatingStart<T>(\n start: number,\n total: number,\n callback: IndexCallback<T>\n ): T | undefined {\n for (let i = 0; i < start && i < total; i += 1) {\n const result = callback(i);\n if (result !== undefined) {\n return result;\n }\n }\n\n return undefined;\n }\n\n /**\n * Iterate through floating items at the end. Iterates in increasing order.\n * @param end The count of floating items at the end\n * @param total The total number of items\n * @param callback Function to call for each item\n * @returns The result from the callback\n */\n static iterateFloatingEnd<T>(\n end: number,\n total: number,\n callback: IndexCallback<T>\n ): T | undefined {\n for (let i = 0; i < end && total - (end - i) >= 0; i += 1) {\n const result = callback(total - (end - i));\n if (result !== undefined) {\n return result;\n }\n }\n\n return undefined;\n }\n\n /**\n * Iterate through all floating items in increasing order, starting with the top items.\n * @param start Count of start floating rows, e.g. floatingTopRowCount\n * @param end Count of end floating rows, e.g. floatingBottomRowCount\n * @param total Total number of items\n * @param callback Callback called for each value, stopping the iterating and returning the value if one is returned\n */\n static iterateFloating<T>(\n start: number,\n end: number,\n total: number,\n callback: IndexCallback<T>\n ): T | undefined {\n const result = GridUtils.iterateFloatingStart(start, total, callback);\n if (result !== undefined) {\n return result;\n }\n return GridUtils.iterateFloatingEnd(end, total, callback);\n }\n\n /**\n * Iterate through all items in one dimension on the grid - first floating, then visible.\n * Call the callback for each item, break if a result is returned and return that result.\n * @param visibleStart Index of the start of the visible viewport\n * @param visibleEnd Index of the end of the visible viewport\n * @param floatingStartCount Number of items floating at the start\n * @param floatingEndCount Number of items floating at the end\n * @param totalCount Total number of items\n * @param callback Callback to call for each item\n * @returns The first result from the callback called, or undefined\n */\n static iterateAllItems<T>(\n visibleStart: VisibleIndex,\n visibleEnd: VisibleIndex,\n floatingStartCount: number,\n floatingEndCount: number,\n totalCount: number,\n callback: IndexCallback<T>\n ): T | undefined {\n const visibleStartIndex = Math.max(visibleStart, floatingStartCount);\n const visibleEndIndex = Math.min(\n visibleEnd,\n totalCount - floatingEndCount - 1\n );\n let result = GridUtils.iterateFloating(\n floatingStartCount,\n floatingEndCount,\n totalCount,\n callback\n );\n if (result !== undefined) {\n return result;\n }\n\n for (let i = visibleStartIndex; i <= visibleEndIndex; i += 1) {\n result = callback(i);\n if (result !== undefined) {\n return result;\n }\n }\n\n return undefined;\n }\n\n /**\n * Check if the coordinate is within the item specified in this dimension\n * @param itemIndex Index of the item to check\n * @param itemCoordinatess Coordinate of all items in this dimension\n * @param itemSizes Size of all items in this dimension\n * @param coordinate The coordinate to check\n * @returns True if the coordinate is within the item specified, false otherwise\n */\n static isInItem(\n itemIndex: VisibleIndex,\n itemCoordinates: CoordinateMap,\n itemSizes: SizeMap,\n coordinate: Coordinate\n ): boolean {\n const itemX = itemCoordinates.get(itemIndex) ?? 0;\n const itemSize = itemSizes.get(itemIndex) ?? 0;\n return itemX <= coordinate && coordinate <= itemX + itemSize;\n }\n\n /**\n * Get the Index of the item at the provided offset\n * @param offset Coordinate of the offset to get the item of\n * @param itemCount The total count of items\n * @param floatingStart Count of floating items at the start\n * @param floatingEnd Count of floating items at the end\n * @param items Index of all items\n * @param itemCoordinates The coordinate of each item\n * @param itemSizes The size of each item\n * @returns The item index, or null if no item matches\n */\n static getItemAtOffset(\n offset: Coordinate,\n itemCount: number,\n floatingStart: number,\n floatingEnd: number,\n items: readonly VisibleIndex[],\n itemCoordinates: CoordinateMap,\n itemSizes: SizeMap,\n ignoreFloating = false\n ): VisibleIndex | null {\n const floatingItem = ignoreFloating\n ? undefined\n : GridUtils.iterateFloating(\n floatingStart,\n floatingEnd,\n itemCount,\n item => {\n if (GridUtils.isInItem(item, itemCoordinates, itemSizes, offset)) {\n return item;\n }\n return undefined;\n }\n );\n if (!ignoreFloating && floatingItem !== undefined) {\n return floatingItem;\n }\n\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n if (GridUtils.isInItem(item, itemCoordinates, itemSizes, offset)) {\n return item;\n }\n }\n\n return null;\n }\n\n /**\n * Get the index of the column at the specified x coordinate\n * @param x Coordinate to get the item of\n * @param metrics Grid metrics\n * @returns Index of the column at that coordinate, or null if no column matches\n */\n static getColumnAtX(\n x: Coordinate,\n metrics: GridMetrics,\n ignoreFloating = false\n ): VisibleIndex | null {\n const {\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n visibleColumns,\n allColumnXs,\n allColumnWidths,\n gridX,\n } = metrics;\n\n if (x < gridX) {\n return null;\n }\n\n return this.getItemAtOffset(\n x - gridX,\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n visibleColumns,\n allColumnXs,\n allColumnWidths,\n ignoreFloating\n );\n }\n\n /**\n * Get the index of the row at the specified y coordinate\n * @param y Coordinate to get the item of\n * @param metrics Grid metrics\n * @returns Index of the row at that coordinate, or null if no row matches\n */\n static getRowAtY(y: Coordinate, metrics: GridMetrics): VisibleIndex | null {\n const {\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount,\n visibleRows,\n allRowYs,\n allRowHeights,\n gridY,\n } = metrics;\n\n if (y < gridY) {\n return null;\n }\n\n return this.getItemAtOffset(\n y - gridY,\n rowCount,\n floatingTopRowCount,\n floatingBottomRowCount,\n visibleRows,\n allRowYs,\n allRowHeights\n );\n }\n\n /**\n * Iterate backward through the visible items until a shown item is hit\n * @param startIndex The index to start from\n * @param modelIndexes The mapping of model indexes\n * @param visibleItems The visible items\n * @param userSizes The user set sizes\n * @returns Index of the next visible item, or null if no more are visible\n */\n static getNextShownItem(\n startIndex: VisibleIndex,\n modelIndexes: VisibleToModelMap,\n visibleItems: readonly VisibleIndex[],\n userSizes: ModelSizeMap\n ): VisibleIndex | null {\n let visibleItemIndex =\n visibleItems.findIndex(value => value === startIndex) || 0;\n visibleItemIndex -= 1;\n while (visibleItemIndex != null && visibleItemIndex >= 0) {\n const item = visibleItems[visibleItemIndex];\n const modelIndex = modelIndexes.get(item);\n if (modelIndex != null && userSizes.get(modelIndex) !== 0) {\n return item;\n }\n\n visibleItemIndex -= 1;\n }\n\n return null;\n }\n\n /**\n * Iterate backward through the visible columns until a shown column is hit\n * @param columnIndex The column index to start iterating backward from\n * @param metrics The GridMetricCalculator metrics\n * @returns Index of the next visible item, or null if no more are visible\n */\n static getNextShownColumn(\n startIndex: VisibleIndex,\n metrics: GridMetrics\n ): VisibleIndex | null {\n const { modelColumns, visibleColumns, userColumnWidths } = metrics;\n return GridUtils.getNextShownItem(\n startIndex,\n modelColumns,\n visibleColumns,\n userColumnWidths\n );\n }\n\n /**\n * Iterate backward through the visible rows until a shown row is hit\n * @param rowIndex The row index to start iterating backward from\n * @param metrics The GridMetricCalculator metrics\n * @returns Index of the next visible item, or null if no more are visible\n */\n static getNextShownRow(\n startIndex: VisibleIndex,\n metrics: GridMetrics\n ): VisibleIndex | null {\n const { modelRows, visibleRows, userRowHeights } = metrics;\n return GridUtils.getNextShownItem(\n startIndex,\n modelRows,\n visibleRows,\n userRowHeights\n );\n }\n\n /**\n * Gets the column index if the x/y coordinates provided are close enough to the separator, otherwise null\n * @param x Mouse x coordinate\n * @param y Mouse y coordinate\n * @param metrics The grid metrics\n * @param theme The grid theme with potential user overrides\n * @returns Index of the column separator at the coordinates provided, or null if none match\n */\n static getColumnSeparatorIndex(\n x: Coordinate,\n y: Coordinate,\n metrics: GridMetrics,\n theme: GridTheme\n ): VisibleIndex | null {\n const {\n rowHeaderWidth,\n columnHeaderHeight,\n floatingColumns,\n floatingLeftWidth,\n visibleColumns,\n allColumnXs,\n allColumnWidths,\n columnHeaderMaxDepth,\n } = metrics;\n const { allowColumnResize, headerSeparatorHandleSize } = theme;\n\n if (\n columnHeaderMaxDepth * columnHeaderHeight < y ||\n !allowColumnResize ||\n headerSeparatorHandleSize <= 0\n ) {\n return null;\n }\n\n const gridX = x - rowHeaderWidth;\n const halfSeparatorSize = headerSeparatorHandleSize * 0.5;\n\n // Iterate through the floating columns first since they're on top\n let isPreviousColumnHidden = false;\n for (let i = floatingColumns.length - 1; i >= 0; i -= 1) {\n const column = floatingColumns[i];\n const columnX = allColumnXs.get(column) ?? 0;\n const columnWidth = allColumnWidths.get(column) ?? 0;\n const isColumnHidden = columnWidth === 0;\n if (!isPreviousColumnHidden || !isColumnHidden) {\n let midX = columnX + columnWidth;\n if (isColumnHidden) {\n midX += halfSeparatorSize;\n } else if (isPreviousColumnHidden) {\n midX -= halfSeparatorSize;\n }\n\n const minX = midX - halfSeparatorSize;\n const maxX = midX + halfSeparatorSize;\n if (minX <= gridX && gridX <= maxX) {\n return column;\n }\n\n isPreviousColumnHidden = isColumnHidden;\n }\n }\n\n // Iterate backward so that you can reveal hidden columns properly\n isPreviousColumnHidden = false;\n for (let i = visibleColumns.length - 1; i >= 0; i -= 1) {\n const column = visibleColumns[i];\n const columnX = allColumnXs.get(column) ?? 0;\n const columnWidth = allColumnWidths.get(column) ?? 0;\n const isColumnHidden = columnWidth === 0;\n\n // If this column is under the floating columns \"layer\". Terminate early.\n if (columnX < floatingLeftWidth - columnWidth) {\n return null;\n }\n\n if (!isPreviousColumnHidden || !isColumnHidden) {\n let midX = columnX + columnWidth;\n if (isColumnHidden) {\n midX += halfSeparatorSize;\n } else if (isPreviousColumnHidden) {\n midX -= halfSeparatorSize;\n }\n\n const minX = midX - halfSeparatorSize;\n const maxX = midX + halfSeparatorSize;\n if (minX <= gridX && gridX <= maxX) {\n return column;\n }\n\n isPreviousColumnHidden = isColumnHidden;\n }\n }\n\n return null;\n }\n\n /**\n * Check if the item specified is hidden\n * @param itemIndex Index of the item to check\n * @param visibleSizes Sizes of all visible items\n * @returns True if the item is hidden, false otherwise\n */\n static isItemHidden(itemIndex: VisibleIndex, visibleSizes: SizeMap): boolean {\n return visibleSizes.get(itemIndex) === 0;\n }\n\n /**\n * Check if the column specified is hidden\n * @param columnIndex Index of the column to check\n * @param metrics Grid metrics\n * @returns True if the column is hidden, false otherwise\n */\n static isColumnHidden(\n columnIndex: VisibleIndex,\n metrics: GridMetrics\n ): boolean {\n const { allColumnWidths } = metrics;\n return GridUtils.isItemHidden(columnIndex, allColumnWidths);\n }\n\n /**\n * Check if the provided row is a floating row\n * @param row The row index to check\n * @param metrics The grid metrics to check against\n * @returns True if it's a floating row, false otherwise\n */\n static isFloatingRow(row: VisibleIndex, metrics: GridMetrics): boolean {\n if (row == null) {\n return false;\n }\n\n const { floatingTopRowCount, floatingBottomRowCount, rowCount } = metrics;\n return (\n row < floatingTopRowCount || row >= rowCount - floatingBottomRowCount\n );\n }\n\n /**\n * Check if the provided column is a floating column\n * @param column The column index to check\n * @param metrics The grid metrics to check against\n * @returns True if it's a floating column, false otherwise\n */\n static isFloatingColumn(column: VisibleIndex, metrics: GridMetrics): boolean {\n if (column == null) {\n return false;\n }\n\n const {\n floatingLeftColumnCount,\n floatingRightColumnCount,\n columnCount,\n } = metrics;\n return (\n column < floatingLeftColumnCount ||\n column >= columnCount - floatingRightColumnCount\n );\n }\n\n /**\n * Get all the items that are hidden under the same Index\n * E.g. If columns are 1, 2, 3, 4, 5, and column 2, 3, 4 are hidden, and we check for item 4, the return will be [2, 3, 4]\n * @param itemIndex Index of the item to start at\n * @param visibleSizes Visible size map\n * @param visibleItems Visible items\n * @returns Array of items that are hidden\n */\n static getHiddenItems(\n itemIndex: VisibleIndex,\n visibleSizes: SizeMap,\n visibleItems: readonly VisibleIndex[]\n ): VisibleIndex[] {\n if (!GridUtils.isItemHidden(itemIndex, visibleSizes)) {\n return [];\n }\n\n const hiddenItems = [itemIndex];\n const visibleItemIndex = visibleItems.findIndex(\n value => value === itemIndex\n );\n for (let i = visibleItemIndex - 1; i >= 0; i -= 1) {\n const item = visibleItems[i];\n if (!GridUtils.isItemHidden(item, visibleSizes)) {\n break;\n }\n\n hiddenItems.push(item);\n }\n\n return hiddenItems;\n }\n\n /**\n * Get all the columns that are hidden under the same Index\n * @param columnIndex Index of the item to start at\n * @param metrics Grid metrics\n * @returns Array of items that are hidden\n */\n static getHiddenColumns(\n columnIndex: VisibleIndex,\n metrics: GridMetrics\n ): VisibleIndex[] {\n const { visibleColumns, allColumnWidths } = metrics;\n return GridUtils.getHiddenItems(\n columnIndex,\n allColumnWidths,\n visibleColumns\n );\n }\n\n /**\n * Returns the row index if the x/y coordinates provided are close enough to the separator, otherwise null\n * @param x X coordinate to check\n * @param y Y coordinate to check\n * @param metrics The grid metrics\n * @param theme The grid theme\n * @returns Index of the row separator at the coordinates provided, or null if none match\n */\n static getRowSeparatorIndex(\n x: Coordinate,\n y: Coordinate,\n metrics: GridMetrics,\n theme: GridTheme\n ): VisibleIndex | null {\n const {\n rowHeaderWidth,\n columnHeaderHeight,\n visibleRows,\n allRowYs,\n allRowHeights,\n } = metrics;\n const { allowRowResize, headerSeparatorHandleSize } = theme;\n\n if (\n rowHeaderWidth < x ||\n !allowRowResize ||\n headerSeparatorHandleSize <= 0\n ) {\n return null;\n }\n\n const gridY = y - columnHeaderHeight;\n const halfSeparatorSize = headerSeparatorHandleSize * 0.5;\n\n // Iterate backward so you can reveal hidden rows properly\n let isPreviousRowHidden = false;\n for (let i = visibleRows.length - 1; i >= 0; i -= 1) {\n const row = visibleRows[i];\n const rowY = allRowYs.get(row) ?? 0;\n const rowHeight = allRowHeights.get(row) ?? 0;\n const isRowHidden = rowHeight === 0;\n if (!isPreviousRowHidden || !isRowHidden) {\n let midY = rowY + rowHeight;\n if (isRowHidden) {\n midY += halfSeparatorSize;\n } else if (isPreviousRowHidden) {\n midY -= halfSeparatorSize;\n }\n\n const minY = midY - halfSeparatorSize;\n const maxY = midY + halfSeparatorSize;\n\n if (minY <= gridY && gridY <= maxY) {\n return row;\n }\n\n isPreviousRowHidden = isRowHidden;\n }\n }\n\n return null;\n }\n\n /**\n * Check if the row specified is hidden\n * @param rowIndex Index of the row to check\n * @param metrics Grid metrics\n * @returns True if the row is hidden, false otherwise\n */\n static isRowHidden(rowIndex: VisibleIndex, metrics: GridMetrics): boolean {\n const { allRowHeights } = metrics;\n return GridUtils.isItemHidden(rowIndex, allRowHeights);\n }\n\n /**\n * Get all the rows that are hidden under the same Index\n * @param rowIndex Index of the item to start at\n * @param metrics Grid metrics\n * @returns Array of items that are hidden\n */\n static getHiddenRows(\n rowIndex: VisibleIndex,\n metrics: GridMetrics\n ): VisibleIndex[] {\n const { visibleRows, allRowHeights } = metrics;\n return GridUtils.getHiddenItems(rowIndex, allRowHeights, visibleRows);\n }\n\n /**\n * Set a new order for items in the grid\n * @param from The visible index to move from\n * @param to The visible index to move the item to\n * @param oldMovedItems The old reordered items\n * @returns The new reordered items\n */\n static moveItem(\n from: VisibleIndex,\n to: VisibleIndex,\n oldMovedItems: readonly MoveOperation[]\n ): MoveOperation[] {\n if (from === to) {\n return [...oldMovedItems];\n }\n\n const movedItems: MoveOperation[] = [...oldMovedItems];\n const lastMovedItem = movedItems[movedItems.length - 1];\n\n // Check if we should combine with the previous move\n // E.g. 1 -> 2, 2 -> 3 can just be 1 -> 3\n if (\n lastMovedItem != null &&\n !isBoundedAxisRange(lastMovedItem.from) &&\n lastMovedItem.to === from\n ) {\n // Remove the move if it is now a no-op\n if (lastMovedItem.from === to) {\n movedItems.pop();\n } else {\n movedItems[movedItems.length - 1] = {\n ...lastMovedItem,\n to,\n };\n }\n } else {\n movedItems.push({ from, to });\n }\n\n return movedItems;\n }\n\n /**\n * Move a visible range in the grid\n *\n * This will effectively slice the range out of the grid,\n * re-index the remaining columns,\n * then insert the range with the first element at the provided index\n *\n * @param from The visible axis range to move\n * @param to The visible index to move the start of the range to\n * @param oldMovedItems The old reordered items\n * @param isPreMoveTo If toParam is the index before the movement\n * If true, this will account for the shift when moving\n * a range before the drop positin\n * E.g. Move range [0, 2] 1 item down (after element 3)\n * The move is [0, 2] -> 1 if this is false. [0, 2] -> 3 if this is true\n * Both will result in [0, 2] -> 1\n * @returns The new reordered items\n */\n static moveRange(\n from: BoundedAxisRange,\n toParam: VisibleIndex,\n oldMovedItems: readonly MoveOperation[],\n isPreMoveTo = false\n ): MoveOperation[] {\n if (from[0] === from[1]) {\n return GridUtils.moveItem(from[0], toParam, oldMovedItems);\n }\n\n let to = toParam;\n\n if (isPreMoveTo && from[0] < toParam) {\n to -= from[1] - from[0];\n }\n\n if (from[0] === to) {\n return [...oldMovedItems];\n }\n\n const movedItems: MoveOperation[] = [...oldMovedItems];\n const lastMovedItem = movedItems[movedItems.length - 1];\n\n // Check if we should combine with the previous move\n // E.g. [1, 2] -> 2, [2, 3] -> 3 can just be [1, 2] -> 3\n if (\n lastMovedItem != null &&\n isBoundedAxisRange(lastMovedItem.from) &&\n lastMovedItem.from[1] - lastMovedItem.from[0] === from[1] - from[0] &&\n lastMovedItem.to === from[0]\n ) {\n movedItems[movedItems.length - 1] = {\n ...lastMovedItem,\n to,\n };\n } else {\n movedItems.push({ from, to });\n }\n\n const newLastMovedItem = movedItems[movedItems.length - 1];\n // Remove the move if it is now a no-op\n if (\n isBoundedAxisRange(newLastMovedItem.from) &&\n newLastMovedItem.from[0] === newLastMovedItem.to\n ) {\n movedItems.pop();\n }\n\n return movedItems;\n }\n\n static moveItemOrRange(\n from: VisibleIndex | BoundedAxisRange,\n to: VisibleIndex,\n oldMovedItems: MoveOperation[],\n isPreMoveTo = false\n ): MoveOperation[] {\n return Array.isArray(from)\n ? GridUtils.moveRange(from, to, oldMovedItems, isPreMoveTo)\n : GridUtils.moveItem(from, to, oldMovedItems);\n }\n\n /**\n * Applies the items moves to the AxisRange\n * @param start The start index of the range\n * @param end The end index of the range\n * @param movedItems The move operations to apply\n * @param reverse If the moved items should be applied in reverse (this reverses the effects of the moves)\n * @returns A list of AxisRanges in the translated space. Possibly multiple non-continuous ranges\n */\n static applyItemMoves<T extends number | GridRangeIndex>(\n start: T,\n end: T,\n movedItems: readonly MoveOperation[],\n reverse = false\n ): Range<T>[] {\n let result: Range<T>[] = [[start, end]];\n\n for (\n let i = reverse ? movedItems.length - 1 : 0;\n reverse ? i >= 0 : i < movedItems.length;\n reverse ? (i -= 1) : (i += 1)\n ) {\n const { from: fromItemOrRange, to: toItem } = movedItems[i];\n let length = 1;\n let fromItem: number;\n if (isBoundedAxisRange(fromItemOrRange)) {\n length = fromItemOrRange[1] - fromItemOrRange[0] + 1; // Ranges are inclusive\n [fromItem] = fromItemOrRange;\n } else {\n fromItem = fromItemOrRange;\n }\n\n const fromStart = reverse ? toItem : fromItem;\n const fromEnd = fromStart + length - 1;\n const toStart = reverse ? fromItem : toItem;\n const moveDistance = toStart - fromStart;\n\n const nextResult: Range<number>[] = [];\n for (let j = 0; j < result.length; j += 1) {\n const currentStart = result[j][0] ?? Number.NEGATIVE_INFINITY;\n const currentEnd = result[j][1] ?? Number.POSITIVE_INFINITY;\n\n let movedRange: Range<number> | undefined;\n const currentResult: Range<number>[] = [\n [currentStart, fromStart - 1],\n [fromStart, fromEnd],\n [fromEnd + 1, currentEnd],\n ]\n .map(\n ([s, e]): Range<number> => [\n // Cap the ranges to within the current range bounds\n Math.max(s, currentStart),\n Math.min(e, currentEnd),\n ]\n )\n .filter(([s, e]) => s <= e) // Remove invalid ranges\n .map(\n (range): Range<number> => {\n const [s, e] = range;\n if (fromStart <= s && fromEnd >= e) {\n // Current range in moved range\n movedRange = [s + moveDistance, e + moveDistance];\n return movedRange;\n }\n\n if (fromEnd < s) {\n // Current range is after moved range\n return [s - length, e - length];\n }\n return range;\n }\n )\n .map((range): Range<number>[] => {\n const [s, e] = range;\n if (toStart > s && toStart <= e) {\n // Moved range splits this range\n return [\n [s, toStart - 1],\n [toStart + length, e + length],\n ];\n }\n\n if (range === movedRange) {\n // Moved range has already been shifted\n return [range];\n }\n\n if (toStart <= s) {\n // Moved range shifts this range right\n return [[s + length, e + length]];\n }\n return [range];\n })\n .flat();\n\n nextResult.push(...currentResult);\n }\n\n // Return infinity values back to null\n result = nextResult.map(([s, e]) => [\n Number.isFinite(s) ? s : null,\n Number.isFinite(e) ? e : null,\n ]) as Range<T>[];\n }\n return result;\n }\n\n /**\n * Applies the items moves to the givengrid range\n * @param range The grid range to translate\n * @param movedColumns The moved columns\n * @param movedRows The moved rows\n * @param reverse If the moved items should be reversed (i.e. visible to model range)\n * @returns A list of grid ranges in the translated space. Possibly multiple non-continuous ranges\n */\n static translateRange(\n range: GridRange,\n movedColumns: readonly MoveOperation[],\n movedRows: readonly MoveOperation[],\n reverse: boolean\n ): GridRange[] {\n const columnRanges = GridUtils.applyItemMoves(\n range.startColumn,\n range.endColumn,\n movedColumns,\n reverse\n );\n const rowRanges = GridUtils.applyItemMoves(\n range.startRow,\n range.endRow,\n movedRows,\n reverse\n );\n const ranges: GridRange[] = [];\n for (let i = 0; i < columnRanges.length; i += 1) {\n const c = columnRanges[i];\n for (let j = 0; j < rowRanges.length; j += 1) {\n const r = rowRanges[j];\n ranges.push(new GridRange(c[0], r[0], c[1], r[1]));\n }\n }\n return ranges;\n }\n\n /**\n * Retrieve the model index given the currently moved items\n * @param visibleIndex The visible index of the item to get the model index for\n * @param movedItems The moved items\n * @returns The model index of the item\n */\n static getModelIndex(\n visibleIndex: VisibleIndex,\n movedItems: readonly MoveOperation[]\n ): ModelIndex {\n const modelIndex = GridUtils.applyItemMoves(\n visibleIndex,\n visibleIndex,\n movedItems,\n true\n )[0][0];\n\n return modelIndex;\n }\n\n /**\n * Retrieve the model indexes given the currently moved items\n * @param visibleIndexes The visible indexes of the item to get the model indexes for\n * @param movedItems The moved items\n * @returns The model indexes of the item\n */\n static getModelIndexes(\n visibleIndexes: ModelIndex[],\n movedItems: MoveOperation[]\n ): VisibleIndex[] {\n return visibleIndexes.map(i => GridUtils.getModelIndex(i, movedItems));\n }\n\n /**\n * Translate the provided UI start/end indexes to the model start/end indexes by applying the `movedItems` transformations.\n * Since moved items can split apart a range, multiple pairs of indexes are returned\n *\n * @param start Start item in one dimension\n * @param end End item in one dimension\n * @param movedItems Moved item pairs in this dimension\n * @returns Array of start/end pairs of the indexes after transformations applied.\n */\n static getModelRangeIndexes(\n start: GridRangeIndex,\n end: GridRangeIndex,\n movedItems: readonly MoveOperation[]\n ): AxisRange[] {\n return GridUtils.applyItemMoves(start, end, movedItems, true);\n }\n\n /**\n * Translate the provided UI range into model range, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param uiRange The currently selected UI ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getModelRange(\n uiRange: GridRange,\n movedColumns: readonly MoveOperation[] = EMPTY_ARRAY,\n movedRows: readonly MoveOperation[] = EMPTY_ARRAY\n ): GridRange[] {\n return GridUtils.translateRange(uiRange, movedColumns, movedRows, true);\n }\n\n /**\n * Translate the provided UI range into model ranges, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param uiRanges The currently selected UI ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getModelRanges(\n uiRanges: readonly GridRange[],\n movedColumns: readonly MoveOperation[] = EMPTY_ARRAY,\n movedRows: readonly MoveOperation[] = EMPTY_ARRAY\n ): GridRange[] {\n const modelRanges = [];\n for (let i = 0; i < uiRanges.length; i += 1) {\n modelRanges.push(\n ...GridUtils.getModelRange(uiRanges[i], movedColumns, movedRows)\n );\n }\n return modelRanges;\n }\n\n /**\n * Translate the provided UI start/end indexes to the visible start/end indexes by applying the `movedItems` transformations.\n * Since moved items can split apart a range, multiple pairs of indexes are returned\n *\n * @param start Start item in one dimension\n * @param end End item in one dimension\n * @param movedItems Moved item pairs in this dimension\n * @returns Array of start/end pairs of the indexes after transformations applied.\n */\n static getVisibleRangeIndexes(\n start: GridRangeIndex,\n end: GridRangeIndex,\n movedItems: readonly MoveOperation[]\n ): AxisRange[] {\n return GridUtils.applyItemMoves(start, end, movedItems, false);\n }\n\n /**\n * Translate the provided UI range into visible range, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param uiRange The currently selected UI ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getVisibleRange(\n modelRange: GridRange,\n movedColumns: readonly MoveOperation[] = EMPTY_ARRAY,\n movedRows: readonly MoveOperation[] = EMPTY_ARRAY\n ): GridRange[] {\n return this.translateRange(modelRange, movedColumns, movedRows, false);\n }\n\n /**\n * Translate the provided model ranges into visible ranges, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param modelRanges The model ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getVisibleRanges(\n modelRanges: readonly GridRange[],\n movedColumns: readonly MoveOperation[] = EMPTY_ARRAY,\n movedRows: readonly MoveOperation[] = EMPTY_ARRAY\n ): GridRange[] {\n const visibleRanges = [];\n for (let i = 0; i < modelRanges.length; i += 1) {\n visibleRanges.push(\n ...GridUtils.getVisibleRange(modelRanges[i], movedColumns, movedRows)\n );\n }\n return visibleRanges;\n }\n\n /**\n * Retrieve the visible index given the currently moved items\n * @param modelIndex The model index to get the visible index for\n * @param movedItems Moved items\n * @returns The visible index of the item\n */\n static getVisibleIndex(\n modelIndex: ModelIndex,\n movedItems: readonly MoveOperation[]\n ): VisibleIndex {\n const visibleIndex = GridUtils.applyItemMoves(\n modelIndex,\n modelIndex,\n movedItems\n )[0][0];\n\n return visibleIndex;\n }\n\n /**\n * Retrieve the visible indexes given the currently moved items\n * @param modelIndexes The model indexes to get the visible indexes for\n * @param movedItems Moved items\n * @returns The visible indexes of the item\n */\n static getVisibleIndexes(\n modelIndexes: readonly ModelIndex[],\n movedItems: readonly MoveOperation[]\n ): VisibleIndex[] {\n return modelIndexes.map(i => GridUtils.getVisibleIndex(i, movedItems));\n }\n\n /**\n * Check if the current platform is Mac\n * @returns True if this platform is a Mac, false otherwise\n */\n static isMacPlatform(): boolean {\n const { platform } = window.navigator;\n return platform.startsWith('Mac');\n }\n\n /**\n * Get the modifier key for the current platform\n * @returns The modifier key for the current platform\n */\n static getModifierKey(): 'metaKey' | 'ctrlKey' {\n if (GridUtils.isMacPlatform()) {\n return 'metaKey';\n }\n\n return 'ctrlKey';\n }\n\n /**\n * Check if the modifier key is down for the given event\n * @param event The event to check\n * @returns True if the modifier key is down, false otherwise\n */\n static isModifierKeyDown(\n event: MouseEvent | KeyboardEvent | React.KeyboardEvent | React.MouseEvent\n ): boolean {\n const modifierKey = GridUtils.getModifierKey();\n return event[modifierKey];\n }\n\n /**\n * Check if the user has hidden the specified column\n * @param modelIndex The model index to check\n * @param userColumnWidths The user set column widths\n * @returns True if the user has hidden the column\n */\n static checkColumnHidden(\n modelIndex: ModelIndex,\n userColumnWidths: ModelSizeMap\n ): boolean {\n return userColumnWidths.get(modelIndex) === 0;\n }\n\n /**\n * Check if all the columns specified are hidden\n * @param columns Columns to check\n * @param userColumnWidths The user set column widths\n * @returns True if the user has hidden all of the columns\n */\n static checkAllColumnsHidden(\n columns: readonly ModelIndex[],\n userColumnWidths: ModelSizeMap\n ): boolean {\n if (userColumnWidths.size === 0) {\n return false;\n }\n return columns.every(column => userColumnWidths.get(column) === 0);\n }\n\n /**\n * Get the bounds the mouse needs to be dragged outside of from an initial selection before scrolling occurs.\n * Taking into account any floating rows that may be covering the viewport.\n * @param metrics Grid metrics\n * @param row The row they started dragging in\n * @param column The column they started the drag from\n * @returns Dimensions of the drag area in relation to the canvas they need to drag outside of to start scrolling\n */\n static getScrollDragBounds(\n metrics: GridMetrics,\n row: GridRangeIndex,\n column: GridRangeIndex\n ): BoxCoordinates {\n const {\n gridX,\n gridY,\n width,\n height,\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n floatingLeftWidth,\n floatingRightWidth,\n floatingTopHeight,\n floatingBottomHeight,\n columnCount,\n rowCount,\n } = metrics;\n let x1 = gridX;\n let y1 = gridY;\n let x2 = width;\n let y2 = height;\n if (column != null) {\n if (column > floatingLeftColumnCount) {\n x1 += floatingLeftWidth;\n }\n if (column < columnCount - floatingRightColumnCount) {\n x2 -= floatingRightWidth;\n }\n }\n\n if (row != null) {\n if (row > floatingTopRowCount) {\n y1 += floatingTopHeight;\n }\n if (row < rowCount - floatingBottomRowCount) {\n y2 -= floatingBottomHeight;\n }\n }\n return { x1, y1, x2, y2 };\n }\n\n /**\n * Converts the delta coordinates from the provided wheel event to pixels\n * Different platforms have different ways of providing the delta so this normalizes it\n * @param wheelEvent The mouse wheel event to get the scrolling delta for\n * @param pageWidth The width of the page that is scrolling\n * @param pageHeight The height of the page that is scrolling\n * @param lineWidth The width of the line scrolling in line mode\n * @param lineHeight The height of the line scrolling in line mode\n * @returns The delta coordinates normalized to pixels\n */\n static getScrollDelta(\n wheelEvent: GridWheelEvent,\n pageWidth = 1024,\n pageHeight = 768,\n lineWidth = 20,\n lineHeight = 20\n ): { deltaX: number; deltaY: number } {\n let { deltaX, deltaY } = wheelEvent;\n\n // Flip scroll direction if shiftKey is held on windows/linux.\n // On mac, deltaX/Y values are switched at the event level when shiftKey=true.\n // Guard on strictly Y only changing, to ignore trackpad diagonal motion,\n // through that guard may not be necessary, but it is difficult to determine for\n // all platforms/browser/scroll method combos.\n if (\n !GridUtils.isMacPlatform() &&\n wheelEvent.shiftKey &&\n wheelEvent.deltaX === 0 &&\n wheelEvent.deltaY !== 0\n ) {\n deltaX = wheelEvent.deltaY;\n deltaY = wheelEvent.deltaX;\n }\n\n // Normalize other deltaMode values to pixel units\n // deltaMode 0, is already in pixel units\n if (wheelEvent?.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n // Users can set OS to be in deltaMode page\n // scrolly by page units as pixels\n deltaX *= pageWidth;\n deltaY *= pageHeight;\n } else if (wheelEvent?.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n // Firefox reports deltaMode line\n // Normalize distance travelled between browsers\n // but remain ~platform/browser combo consistent\n if (GridUtils.isMacPlatform()) {\n // for mac treat lines as a standard row height\n // on mac, firefox travels less distance then chrome per tick\n deltaX = Math.round(deltaX * lineWidth);\n deltaY = Math.round(deltaY * lineHeight);\n } else {\n // for windows convert to pixels using the same method as chrome\n // chrome goes 100 per 3 lines, and firefox would go 102 per 3 (17 lineheight * 3 lines * 2)\n // make the behaviour the same between as it's close enough\n deltaX = Math.round(deltaX * this.PIXELS_PER_LINE);\n deltaY = Math.round(deltaY * this.PIXELS_PER_LINE);\n }\n }\n\n return { deltaX, deltaY };\n }\n\n static compareRanges(range1: AxisRange, range2: AxisRange): number {\n if (\n range1[0] == null ||\n range1[1] == null ||\n range2[0] == null ||\n range2[1] == null\n ) {\n return 0;\n }\n return range1[0] !== range2[0]\n ? range1[0] - range2[0]\n : range1[1] - range2[1];\n }\n\n static mergeSortedRanges(ranges: BoundedAxisRange[]): BoundedAxisRange[] {\n const mergedRanges: BoundedAxisRange[] = [];\n\n for (let i = 0; i < ranges.length; i += 1) {\n const range = ranges[i];\n const start = range[0];\n const end = range[1];\n if (i === 0) {\n mergedRanges.push([start, end]);\n } else if (start - 1 <= mergedRanges[mergedRanges.length - 1][1]) {\n mergedRanges[mergedRanges.length - 1][1] = Math.max(\n mergedRanges[mergedRanges.length - 1][1],\n end\n );\n } else {\n mergedRanges.push([start, end]);\n }\n }\n return mergedRanges;\n }\n\n /**\n * Translates coordinates that are relative to gridX/gridY to be translated by gridX and gridY\n * @param tokenBox The token box to translate\n * @param metrics The grid metrics\n * @returns The token box with translated coordinates\n */\n static translateTokenBox(tokenBox: TokenBox, metrics: GridMetrics): TokenBox {\n const { x1: left, y1: top, x2: right, y2: bottom } = tokenBox;\n const {\n gridX,\n gridY,\n width: gridWidth,\n height: gridHeight,\n verticalBarWidth,\n horizontalBarHeight,\n } = metrics;\n\n // Clamp the values within the grid\n const newLeft = clamp(gridX + left, gridX, gridWidth - verticalBarWidth);\n const newRight = clamp(gridX + right, gridX, gridWidth - verticalBarWidth);\n const newTop = clamp(gridY + top, gridY, gridHeight - horizontalBarHeight);\n const newBottom = clamp(\n gridY + bottom,\n gridY,\n gridHeight - horizontalBarHeight\n );\n\n return {\n x1: newLeft,\n y1: newTop,\n x2: newRight,\n y2: newBottom,\n token: tokenBox.token,\n };\n }\n}\n\nexport default GridUtils;\n"],"mappings":"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"}
1
+ {"version":3,"file":"GridUtils.js","names":["clamp","find","linkifyFind","EMPTY_ARRAY","GridRange","isBoundedAxisRange","isLinkToken","token","href","undefined","GridUtils","getGridPointFromXY","x","y","metrics","column","getColumnAtX","row","getRowAtY","columnHeaderDepth","getColumnHeaderDepthAtY","getCellInfoFromXY","allColumnWidths","allRowHeights","allColumnXs","allRowYs","modelColumns","modelRows","modelRow","get","modelColumn","left","top","columnWidth","rowHeight","columnHeaderHeight","columnHeaderMaxDepth","Math","ceil","iterateFloatingStart","start","total","callback","i","result","iterateFloatingEnd","end","iterateFloating","iterateAllItems","visibleStart","visibleEnd","floatingStartCount","floatingEndCount","totalCount","visibleStartIndex","max","visibleEndIndex","min","isInItem","itemIndex","itemCoordinates","itemSizes","coordinate","itemX","itemSize","getItemAtOffset","offset","itemCount","floatingStart","floatingEnd","items","ignoreFloating","floatingItem","item","length","columnCount","floatingLeftColumnCount","floatingRightColumnCount","visibleColumns","gridX","floatingTopRowCount","floatingBottomRowCount","rowCount","visibleRows","gridY","getNextShownItem","startIndex","modelIndexes","visibleItems","userSizes","visibleItemIndex","findIndex","value","modelIndex","getNextShownColumn","userColumnWidths","getNextShownRow","userRowHeights","getColumnSeparatorIndex","theme","rowHeaderWidth","floatingColumns","floatingLeftWidth","allowColumnResize","headerSeparatorHandleSize","halfSeparatorSize","isPreviousColumnHidden","columnX","isColumnHidden","midX","minX","maxX","isItemHidden","visibleSizes","columnIndex","isFloatingRow","isFloatingColumn","getHiddenItems","hiddenItems","push","getHiddenColumns","getRowSeparatorIndex","allowRowResize","isPreviousRowHidden","rowY","isRowHidden","midY","minY","maxY","rowIndex","getHiddenRows","moveItem","from","to","oldMovedItems","movedItems","lastMovedItem","pop","moveRange","toParam","isPreMoveTo","newLastMovedItem","moveItemOrRange","Array","isArray","applyItemMoves","reverse","fromItemOrRange","toItem","fromItem","fromStart","fromEnd","toStart","moveDistance","nextResult","currentStart","j","Number","NEGATIVE_INFINITY","currentEnd","POSITIVE_INFINITY","movedRange","currentResult","map","s","e","filter","range","flat","isFinite","translateRange","movedColumns","movedRows","columnRanges","startColumn","endColumn","rowRanges","startRow","endRow","ranges","c","r","getModelIndex","visibleIndex","getModelIndexes","visibleIndexes","getModelRangeIndexes","getModelRange","uiRange","getModelRanges","uiRanges","modelRanges","getVisibleRangeIndexes","getVisibleRange","modelRange","getVisibleRanges","visibleRanges","getVisibleIndex","getVisibleIndexes","isMacPlatform","platform","window","navigator","startsWith","getModifierKey","isModifierKeyDown","event","modifierKey","checkColumnHidden","checkAllColumnsHidden","columns","size","every","getScrollDragBounds","width","height","floatingRightWidth","floatingTopHeight","floatingBottomHeight","x1","y1","x2","y2","getScrollDelta","wheelEvent","pageWidth","pageHeight","lineWidth","lineHeight","deltaX","deltaY","shiftKey","deltaMode","WheelEvent","DOM_DELTA_PAGE","DOM_DELTA_LINE","round","PIXELS_PER_LINE","compareRanges","range1","range2","mergeSortedRanges","mergedRanges","translateTokenBox","tokenBox","right","bottom","gridWidth","gridHeight","verticalBarWidth","horizontalBarHeight","newLeft","newRight","newTop","newBottom","findTokensWithProtocolInText","text","tokens","type","test"],"sources":["../src/GridUtils.ts"],"sourcesContent":["import React from 'react';\nimport clamp from 'lodash.clamp';\nimport { find as linkifyFind } from 'linkifyjs';\nimport { EMPTY_ARRAY } from '@deephaven/utils';\nimport GridRange, { GridRangeIndex } from './GridRange';\nimport {\n BoxCoordinates,\n Coordinate,\n CoordinateMap,\n VisibleIndex,\n VisibleToModelMap,\n ModelIndex,\n ModelSizeMap,\n MoveOperation,\n SizeMap,\n} from './GridMetrics';\nimport type { GridMetrics } from './GridMetrics';\nimport { GridTheme } from './GridTheme';\nimport { GridWheelEvent } from './GridMouseHandler';\nimport {\n AxisRange,\n BoundedAxisRange,\n isBoundedAxisRange,\n Range,\n} from './GridAxisRange';\n\nexport type GridPoint = {\n x: Coordinate;\n y: Coordinate;\n column: GridRangeIndex;\n row: GridRangeIndex;\n columnHeaderDepth?: number;\n};\n\nexport interface CellInfo {\n row: VisibleIndex | null;\n column: VisibleIndex | null;\n modelRow: ModelIndex | null;\n modelColumn: ModelIndex | null;\n left: Coordinate | null;\n top: Coordinate | null;\n columnWidth: number | null;\n rowHeight: number | null;\n}\n\nexport type Token = {\n value: string;\n type: string;\n start: number;\n end: number;\n isLink?: boolean;\n};\nexport type LinkToken = Token & { href: string };\nexport type URLToken = Token & { type: 'url' };\nexport type EmailToken = Token & { type: 'email' };\n\nexport function isLinkToken(token: Token): token is LinkToken {\n return (token as LinkToken)?.href !== undefined;\n}\n\nexport type TokenBox = BoxCoordinates & { token: Token };\n\nexport type IndexCallback<T> = (itemIndex: VisibleIndex) => T | undefined;\n\nexport class GridUtils {\n // use same constant as chrome source for windows\n // https://github.com/chromium/chromium/blob/973af9d461b6b5dc60208c8d3d66adc27e53da78/ui/events/blink/web_input_event_builders_win.cc#L285\n static PIXELS_PER_LINE = 100 / 3;\n\n /**\n * Get the GridPoint for the coordinates provided\n * @param x The grid x coordinate\n * @param y The grid y coordinate\n * @param metrics The grid metrics\n * @returns The GridPoint including the column/row information\n */\n static getGridPointFromXY(\n x: Coordinate,\n y: Coordinate,\n metrics: GridMetrics\n ): GridPoint {\n const column = GridUtils.getColumnAtX(x, metrics);\n const row = GridUtils.getRowAtY(y, metrics);\n const columnHeaderDepth = GridUtils.getColumnHeaderDepthAtY(y, metrics);\n\n return { x, y, row, column, columnHeaderDepth };\n }\n\n static getCellInfoFromXY(\n x: Coordinate,\n y: Coordinate,\n metrics: GridMetrics\n ): CellInfo {\n const { row, column } = GridUtils.getGridPointFromXY(x, y, metrics);\n\n const {\n allColumnWidths,\n allRowHeights,\n allColumnXs,\n allRowYs,\n modelColumns,\n modelRows,\n } = metrics;\n\n const modelRow = row !== null ? modelRows.get(row) : null;\n const modelColumn = column !== null ? modelColumns.get(column) : null;\n const left = column !== null ? allColumnXs.get(column) : null;\n const top = row !== null ? allRowYs.get(row) : null;\n const columnWidth = column !== null ? allColumnWidths.get(column) : null;\n const rowHeight = row !== null ? allRowHeights.get(row) : null;\n\n return {\n row,\n column,\n modelRow: modelRow ?? null,\n modelColumn: modelColumn ?? null,\n left: left ?? null,\n top: top ?? null,\n columnWidth: columnWidth ?? null,\n rowHeight: rowHeight ?? null,\n };\n }\n\n static getColumnHeaderDepthAtY(\n y: Coordinate,\n metrics: GridMetrics\n ): number | undefined {\n const row = GridUtils.getRowAtY(y, metrics);\n const { columnHeaderHeight, columnHeaderMaxDepth } = metrics;\n\n if (row === null && y <= columnHeaderHeight * columnHeaderMaxDepth) {\n return clamp(\n columnHeaderMaxDepth - Math.ceil(y / columnHeaderHeight),\n 0,\n columnHeaderMaxDepth - 1\n );\n }\n\n return undefined;\n }\n\n /**\n * Iterate through each floating item at the start and call a callback, returning the first result\n * @param start The count of floating items at the start\n * @param total The total number of items\n * @param callback Function to call for each item\n * @returns The result from the callback\n */\n static iterateFloatingStart<T>(\n start: number,\n total: number,\n callback: IndexCallback<T>\n ): T | undefined {\n for (let i = 0; i < start && i < total; i += 1) {\n const result = callback(i);\n if (result !== undefined) {\n return result;\n }\n }\n\n return undefined;\n }\n\n /**\n * Iterate through floating items at the end. Iterates in increasing order.\n * @param end The count of floating items at the end\n * @param total The total number of items\n * @param callback Function to call for each item\n * @returns The result from the callback\n */\n static iterateFloatingEnd<T>(\n end: number,\n total: number,\n callback: IndexCallback<T>\n ): T | undefined {\n for (let i = 0; i < end && total - (end - i) >= 0; i += 1) {\n const result = callback(total - (end - i));\n if (result !== undefined) {\n return result;\n }\n }\n\n return undefined;\n }\n\n /**\n * Iterate through all floating items in increasing order, starting with the top items.\n * @param start Count of start floating rows, e.g. floatingTopRowCount\n * @param end Count of end floating rows, e.g. floatingBottomRowCount\n * @param total Total number of items\n * @param callback Callback called for each value, stopping the iterating and returning the value if one is returned\n */\n static iterateFloating<T>(\n start: number,\n end: number,\n total: number,\n callback: IndexCallback<T>\n ): T | undefined {\n const result = GridUtils.iterateFloatingStart(start, total, callback);\n if (result !== undefined) {\n return result;\n }\n return GridUtils.iterateFloatingEnd(end, total, callback);\n }\n\n /**\n * Iterate through all items in one dimension on the grid - first floating, then visible.\n * Call the callback for each item, break if a result is returned and return that result.\n * @param visibleStart Index of the start of the visible viewport\n * @param visibleEnd Index of the end of the visible viewport\n * @param floatingStartCount Number of items floating at the start\n * @param floatingEndCount Number of items floating at the end\n * @param totalCount Total number of items\n * @param callback Callback to call for each item\n * @returns The first result from the callback called, or undefined\n */\n static iterateAllItems<T>(\n visibleStart: VisibleIndex,\n visibleEnd: VisibleIndex,\n floatingStartCount: number,\n floatingEndCount: number,\n totalCount: number,\n callback: IndexCallback<T>\n ): T | undefined {\n const visibleStartIndex = Math.max(visibleStart, floatingStartCount);\n const visibleEndIndex = Math.min(\n visibleEnd,\n totalCount - floatingEndCount - 1\n );\n let result = GridUtils.iterateFloating(\n floatingStartCount,\n floatingEndCount,\n totalCount,\n callback\n );\n if (result !== undefined) {\n return result;\n }\n\n for (let i = visibleStartIndex; i <= visibleEndIndex; i += 1) {\n result = callback(i);\n if (result !== undefined) {\n return result;\n }\n }\n\n return undefined;\n }\n\n /**\n * Check if the coordinate is within the item specified in this dimension\n * @param itemIndex Index of the item to check\n * @param itemCoordinatess Coordinate of all items in this dimension\n * @param itemSizes Size of all items in this dimension\n * @param coordinate The coordinate to check\n * @returns True if the coordinate is within the item specified, false otherwise\n */\n static isInItem(\n itemIndex: VisibleIndex,\n itemCoordinates: CoordinateMap,\n itemSizes: SizeMap,\n coordinate: Coordinate\n ): boolean {\n const itemX = itemCoordinates.get(itemIndex) ?? 0;\n const itemSize = itemSizes.get(itemIndex) ?? 0;\n return itemX <= coordinate && coordinate <= itemX + itemSize;\n }\n\n /**\n * Get the Index of the item at the provided offset\n * @param offset Coordinate of the offset to get the item of\n * @param itemCount The total count of items\n * @param floatingStart Count of floating items at the start\n * @param floatingEnd Count of floating items at the end\n * @param items Index of all items\n * @param itemCoordinates The coordinate of each item\n * @param itemSizes The size of each item\n * @returns The item index, or null if no item matches\n */\n static getItemAtOffset(\n offset: Coordinate,\n itemCount: number,\n floatingStart: number,\n floatingEnd: number,\n items: readonly VisibleIndex[],\n itemCoordinates: CoordinateMap,\n itemSizes: SizeMap,\n ignoreFloating = false\n ): VisibleIndex | null {\n const floatingItem = ignoreFloating\n ? undefined\n : GridUtils.iterateFloating(\n floatingStart,\n floatingEnd,\n itemCount,\n item => {\n if (GridUtils.isInItem(item, itemCoordinates, itemSizes, offset)) {\n return item;\n }\n return undefined;\n }\n );\n if (!ignoreFloating && floatingItem !== undefined) {\n return floatingItem;\n }\n\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n if (GridUtils.isInItem(item, itemCoordinates, itemSizes, offset)) {\n return item;\n }\n }\n\n return null;\n }\n\n /**\n * Get the index of the column at the specified x coordinate\n * @param x Coordinate to get the item of\n * @param metrics Grid metrics\n * @returns Index of the column at that coordinate, or null if no column matches\n */\n static getColumnAtX(\n x: Coordinate,\n metrics: GridMetrics,\n ignoreFloating = false\n ): VisibleIndex | null {\n const {\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n visibleColumns,\n allColumnXs,\n allColumnWidths,\n gridX,\n } = metrics;\n\n if (x < gridX) {\n return null;\n }\n\n return this.getItemAtOffset(\n x - gridX,\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n visibleColumns,\n allColumnXs,\n allColumnWidths,\n ignoreFloating\n );\n }\n\n /**\n * Get the index of the row at the specified y coordinate\n * @param y Coordinate to get the item of\n * @param metrics Grid metrics\n * @returns Index of the row at that coordinate, or null if no row matches\n */\n static getRowAtY(y: Coordinate, metrics: GridMetrics): VisibleIndex | null {\n const {\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount,\n visibleRows,\n allRowYs,\n allRowHeights,\n gridY,\n } = metrics;\n\n if (y < gridY) {\n return null;\n }\n\n return this.getItemAtOffset(\n y - gridY,\n rowCount,\n floatingTopRowCount,\n floatingBottomRowCount,\n visibleRows,\n allRowYs,\n allRowHeights\n );\n }\n\n /**\n * Iterate backward through the visible items until a shown item is hit\n * @param startIndex The index to start from\n * @param modelIndexes The mapping of model indexes\n * @param visibleItems The visible items\n * @param userSizes The user set sizes\n * @returns Index of the next visible item, or null if no more are visible\n */\n static getNextShownItem(\n startIndex: VisibleIndex,\n modelIndexes: VisibleToModelMap,\n visibleItems: readonly VisibleIndex[],\n userSizes: ModelSizeMap\n ): VisibleIndex | null {\n let visibleItemIndex =\n visibleItems.findIndex(value => value === startIndex) || 0;\n visibleItemIndex -= 1;\n while (visibleItemIndex != null && visibleItemIndex >= 0) {\n const item = visibleItems[visibleItemIndex];\n const modelIndex = modelIndexes.get(item);\n if (modelIndex != null && userSizes.get(modelIndex) !== 0) {\n return item;\n }\n\n visibleItemIndex -= 1;\n }\n\n return null;\n }\n\n /**\n * Iterate backward through the visible columns until a shown column is hit\n * @param columnIndex The column index to start iterating backward from\n * @param metrics The GridMetricCalculator metrics\n * @returns Index of the next visible item, or null if no more are visible\n */\n static getNextShownColumn(\n startIndex: VisibleIndex,\n metrics: GridMetrics\n ): VisibleIndex | null {\n const { modelColumns, visibleColumns, userColumnWidths } = metrics;\n return GridUtils.getNextShownItem(\n startIndex,\n modelColumns,\n visibleColumns,\n userColumnWidths\n );\n }\n\n /**\n * Iterate backward through the visible rows until a shown row is hit\n * @param rowIndex The row index to start iterating backward from\n * @param metrics The GridMetricCalculator metrics\n * @returns Index of the next visible item, or null if no more are visible\n */\n static getNextShownRow(\n startIndex: VisibleIndex,\n metrics: GridMetrics\n ): VisibleIndex | null {\n const { modelRows, visibleRows, userRowHeights } = metrics;\n return GridUtils.getNextShownItem(\n startIndex,\n modelRows,\n visibleRows,\n userRowHeights\n );\n }\n\n /**\n * Gets the column index if the x/y coordinates provided are close enough to the separator, otherwise null\n * @param x Mouse x coordinate\n * @param y Mouse y coordinate\n * @param metrics The grid metrics\n * @param theme The grid theme with potential user overrides\n * @returns Index of the column separator at the coordinates provided, or null if none match\n */\n static getColumnSeparatorIndex(\n x: Coordinate,\n y: Coordinate,\n metrics: GridMetrics,\n theme: GridTheme\n ): VisibleIndex | null {\n const {\n rowHeaderWidth,\n columnHeaderHeight,\n floatingColumns,\n floatingLeftWidth,\n visibleColumns,\n allColumnXs,\n allColumnWidths,\n columnHeaderMaxDepth,\n } = metrics;\n const { allowColumnResize, headerSeparatorHandleSize } = theme;\n\n if (\n columnHeaderMaxDepth * columnHeaderHeight < y ||\n !allowColumnResize ||\n headerSeparatorHandleSize <= 0\n ) {\n return null;\n }\n\n const gridX = x - rowHeaderWidth;\n const halfSeparatorSize = headerSeparatorHandleSize * 0.5;\n\n // Iterate through the floating columns first since they're on top\n let isPreviousColumnHidden = false;\n for (let i = floatingColumns.length - 1; i >= 0; i -= 1) {\n const column = floatingColumns[i];\n const columnX = allColumnXs.get(column) ?? 0;\n const columnWidth = allColumnWidths.get(column) ?? 0;\n const isColumnHidden = columnWidth === 0;\n if (!isPreviousColumnHidden || !isColumnHidden) {\n let midX = columnX + columnWidth;\n if (isColumnHidden) {\n midX += halfSeparatorSize;\n } else if (isPreviousColumnHidden) {\n midX -= halfSeparatorSize;\n }\n\n const minX = midX - halfSeparatorSize;\n const maxX = midX + halfSeparatorSize;\n if (minX <= gridX && gridX <= maxX) {\n return column;\n }\n\n isPreviousColumnHidden = isColumnHidden;\n }\n }\n\n // Iterate backward so that you can reveal hidden columns properly\n isPreviousColumnHidden = false;\n for (let i = visibleColumns.length - 1; i >= 0; i -= 1) {\n const column = visibleColumns[i];\n const columnX = allColumnXs.get(column) ?? 0;\n const columnWidth = allColumnWidths.get(column) ?? 0;\n const isColumnHidden = columnWidth === 0;\n\n // If this column is under the floating columns \"layer\". Terminate early.\n if (columnX < floatingLeftWidth - columnWidth) {\n return null;\n }\n\n if (!isPreviousColumnHidden || !isColumnHidden) {\n let midX = columnX + columnWidth;\n if (isColumnHidden) {\n midX += halfSeparatorSize;\n } else if (isPreviousColumnHidden) {\n midX -= halfSeparatorSize;\n }\n\n const minX = midX - halfSeparatorSize;\n const maxX = midX + halfSeparatorSize;\n if (minX <= gridX && gridX <= maxX) {\n return column;\n }\n\n isPreviousColumnHidden = isColumnHidden;\n }\n }\n\n return null;\n }\n\n /**\n * Check if the item specified is hidden\n * @param itemIndex Index of the item to check\n * @param visibleSizes Sizes of all visible items\n * @returns True if the item is hidden, false otherwise\n */\n static isItemHidden(itemIndex: VisibleIndex, visibleSizes: SizeMap): boolean {\n return visibleSizes.get(itemIndex) === 0;\n }\n\n /**\n * Check if the column specified is hidden\n * @param columnIndex Index of the column to check\n * @param metrics Grid metrics\n * @returns True if the column is hidden, false otherwise\n */\n static isColumnHidden(\n columnIndex: VisibleIndex,\n metrics: GridMetrics\n ): boolean {\n const { allColumnWidths } = metrics;\n return GridUtils.isItemHidden(columnIndex, allColumnWidths);\n }\n\n /**\n * Check if the provided row is a floating row\n * @param row The row index to check\n * @param metrics The grid metrics to check against\n * @returns True if it's a floating row, false otherwise\n */\n static isFloatingRow(row: VisibleIndex, metrics: GridMetrics): boolean {\n if (row == null) {\n return false;\n }\n\n const { floatingTopRowCount, floatingBottomRowCount, rowCount } = metrics;\n return (\n row < floatingTopRowCount || row >= rowCount - floatingBottomRowCount\n );\n }\n\n /**\n * Check if the provided column is a floating column\n * @param column The column index to check\n * @param metrics The grid metrics to check against\n * @returns True if it's a floating column, false otherwise\n */\n static isFloatingColumn(column: VisibleIndex, metrics: GridMetrics): boolean {\n if (column == null) {\n return false;\n }\n\n const {\n floatingLeftColumnCount,\n floatingRightColumnCount,\n columnCount,\n } = metrics;\n return (\n column < floatingLeftColumnCount ||\n column >= columnCount - floatingRightColumnCount\n );\n }\n\n /**\n * Get all the items that are hidden under the same Index\n * E.g. If columns are 1, 2, 3, 4, 5, and column 2, 3, 4 are hidden, and we check for item 4, the return will be [2, 3, 4]\n * @param itemIndex Index of the item to start at\n * @param visibleSizes Visible size map\n * @param visibleItems Visible items\n * @returns Array of items that are hidden\n */\n static getHiddenItems(\n itemIndex: VisibleIndex,\n visibleSizes: SizeMap,\n visibleItems: readonly VisibleIndex[]\n ): VisibleIndex[] {\n if (!GridUtils.isItemHidden(itemIndex, visibleSizes)) {\n return [];\n }\n\n const hiddenItems = [itemIndex];\n const visibleItemIndex = visibleItems.findIndex(\n value => value === itemIndex\n );\n for (let i = visibleItemIndex - 1; i >= 0; i -= 1) {\n const item = visibleItems[i];\n if (!GridUtils.isItemHidden(item, visibleSizes)) {\n break;\n }\n\n hiddenItems.push(item);\n }\n\n return hiddenItems;\n }\n\n /**\n * Get all the columns that are hidden under the same Index\n * @param columnIndex Index of the item to start at\n * @param metrics Grid metrics\n * @returns Array of items that are hidden\n */\n static getHiddenColumns(\n columnIndex: VisibleIndex,\n metrics: GridMetrics\n ): VisibleIndex[] {\n const { visibleColumns, allColumnWidths } = metrics;\n return GridUtils.getHiddenItems(\n columnIndex,\n allColumnWidths,\n visibleColumns\n );\n }\n\n /**\n * Returns the row index if the x/y coordinates provided are close enough to the separator, otherwise null\n * @param x X coordinate to check\n * @param y Y coordinate to check\n * @param metrics The grid metrics\n * @param theme The grid theme\n * @returns Index of the row separator at the coordinates provided, or null if none match\n */\n static getRowSeparatorIndex(\n x: Coordinate,\n y: Coordinate,\n metrics: GridMetrics,\n theme: GridTheme\n ): VisibleIndex | null {\n const {\n rowHeaderWidth,\n columnHeaderHeight,\n visibleRows,\n allRowYs,\n allRowHeights,\n } = metrics;\n const { allowRowResize, headerSeparatorHandleSize } = theme;\n\n if (\n rowHeaderWidth < x ||\n !allowRowResize ||\n headerSeparatorHandleSize <= 0\n ) {\n return null;\n }\n\n const gridY = y - columnHeaderHeight;\n const halfSeparatorSize = headerSeparatorHandleSize * 0.5;\n\n // Iterate backward so you can reveal hidden rows properly\n let isPreviousRowHidden = false;\n for (let i = visibleRows.length - 1; i >= 0; i -= 1) {\n const row = visibleRows[i];\n const rowY = allRowYs.get(row) ?? 0;\n const rowHeight = allRowHeights.get(row) ?? 0;\n const isRowHidden = rowHeight === 0;\n if (!isPreviousRowHidden || !isRowHidden) {\n let midY = rowY + rowHeight;\n if (isRowHidden) {\n midY += halfSeparatorSize;\n } else if (isPreviousRowHidden) {\n midY -= halfSeparatorSize;\n }\n\n const minY = midY - halfSeparatorSize;\n const maxY = midY + halfSeparatorSize;\n\n if (minY <= gridY && gridY <= maxY) {\n return row;\n }\n\n isPreviousRowHidden = isRowHidden;\n }\n }\n\n return null;\n }\n\n /**\n * Check if the row specified is hidden\n * @param rowIndex Index of the row to check\n * @param metrics Grid metrics\n * @returns True if the row is hidden, false otherwise\n */\n static isRowHidden(rowIndex: VisibleIndex, metrics: GridMetrics): boolean {\n const { allRowHeights } = metrics;\n return GridUtils.isItemHidden(rowIndex, allRowHeights);\n }\n\n /**\n * Get all the rows that are hidden under the same Index\n * @param rowIndex Index of the item to start at\n * @param metrics Grid metrics\n * @returns Array of items that are hidden\n */\n static getHiddenRows(\n rowIndex: VisibleIndex,\n metrics: GridMetrics\n ): VisibleIndex[] {\n const { visibleRows, allRowHeights } = metrics;\n return GridUtils.getHiddenItems(rowIndex, allRowHeights, visibleRows);\n }\n\n /**\n * Set a new order for items in the grid\n * @param from The visible index to move from\n * @param to The visible index to move the item to\n * @param oldMovedItems The old reordered items\n * @returns The new reordered items\n */\n static moveItem(\n from: VisibleIndex,\n to: VisibleIndex,\n oldMovedItems: readonly MoveOperation[]\n ): MoveOperation[] {\n if (from === to) {\n return [...oldMovedItems];\n }\n\n const movedItems: MoveOperation[] = [...oldMovedItems];\n const lastMovedItem = movedItems[movedItems.length - 1];\n\n // Check if we should combine with the previous move\n // E.g. 1 -> 2, 2 -> 3 can just be 1 -> 3\n if (\n lastMovedItem != null &&\n !isBoundedAxisRange(lastMovedItem.from) &&\n lastMovedItem.to === from\n ) {\n // Remove the move if it is now a no-op\n if (lastMovedItem.from === to) {\n movedItems.pop();\n } else {\n movedItems[movedItems.length - 1] = {\n ...lastMovedItem,\n to,\n };\n }\n } else {\n movedItems.push({ from, to });\n }\n\n return movedItems;\n }\n\n /**\n * Move a visible range in the grid\n *\n * This will effectively slice the range out of the grid,\n * re-index the remaining columns,\n * then insert the range with the first element at the provided index\n *\n * @param from The visible axis range to move\n * @param to The visible index to move the start of the range to\n * @param oldMovedItems The old reordered items\n * @param isPreMoveTo If toParam is the index before the movement\n * If true, this will account for the shift when moving\n * a range before the drop positin\n * E.g. Move range [0, 2] 1 item down (after element 3)\n * The move is [0, 2] -> 1 if this is false. [0, 2] -> 3 if this is true\n * Both will result in [0, 2] -> 1\n * @returns The new reordered items\n */\n static moveRange(\n from: BoundedAxisRange,\n toParam: VisibleIndex,\n oldMovedItems: readonly MoveOperation[],\n isPreMoveTo = false\n ): MoveOperation[] {\n if (from[0] === from[1]) {\n return GridUtils.moveItem(from[0], toParam, oldMovedItems);\n }\n\n let to = toParam;\n\n if (isPreMoveTo && from[0] < toParam) {\n to -= from[1] - from[0];\n }\n\n if (from[0] === to) {\n return [...oldMovedItems];\n }\n\n const movedItems: MoveOperation[] = [...oldMovedItems];\n const lastMovedItem = movedItems[movedItems.length - 1];\n\n // Check if we should combine with the previous move\n // E.g. [1, 2] -> 2, [2, 3] -> 3 can just be [1, 2] -> 3\n if (\n lastMovedItem != null &&\n isBoundedAxisRange(lastMovedItem.from) &&\n lastMovedItem.from[1] - lastMovedItem.from[0] === from[1] - from[0] &&\n lastMovedItem.to === from[0]\n ) {\n movedItems[movedItems.length - 1] = {\n ...lastMovedItem,\n to,\n };\n } else {\n movedItems.push({ from, to });\n }\n\n const newLastMovedItem = movedItems[movedItems.length - 1];\n // Remove the move if it is now a no-op\n if (\n isBoundedAxisRange(newLastMovedItem.from) &&\n newLastMovedItem.from[0] === newLastMovedItem.to\n ) {\n movedItems.pop();\n }\n\n return movedItems;\n }\n\n static moveItemOrRange(\n from: VisibleIndex | BoundedAxisRange,\n to: VisibleIndex,\n oldMovedItems: MoveOperation[],\n isPreMoveTo = false\n ): MoveOperation[] {\n return Array.isArray(from)\n ? GridUtils.moveRange(from, to, oldMovedItems, isPreMoveTo)\n : GridUtils.moveItem(from, to, oldMovedItems);\n }\n\n /**\n * Applies the items moves to the AxisRange\n * @param start The start index of the range\n * @param end The end index of the range\n * @param movedItems The move operations to apply\n * @param reverse If the moved items should be applied in reverse (this reverses the effects of the moves)\n * @returns A list of AxisRanges in the translated space. Possibly multiple non-continuous ranges\n */\n static applyItemMoves<T extends number | GridRangeIndex>(\n start: T,\n end: T,\n movedItems: readonly MoveOperation[],\n reverse = false\n ): Range<T>[] {\n let result: Range<T>[] = [[start, end]];\n\n for (\n let i = reverse ? movedItems.length - 1 : 0;\n reverse ? i >= 0 : i < movedItems.length;\n reverse ? (i -= 1) : (i += 1)\n ) {\n const { from: fromItemOrRange, to: toItem } = movedItems[i];\n let length = 1;\n let fromItem: number;\n if (isBoundedAxisRange(fromItemOrRange)) {\n length = fromItemOrRange[1] - fromItemOrRange[0] + 1; // Ranges are inclusive\n [fromItem] = fromItemOrRange;\n } else {\n fromItem = fromItemOrRange;\n }\n\n const fromStart = reverse ? toItem : fromItem;\n const fromEnd = fromStart + length - 1;\n const toStart = reverse ? fromItem : toItem;\n const moveDistance = toStart - fromStart;\n\n const nextResult: Range<number>[] = [];\n for (let j = 0; j < result.length; j += 1) {\n const currentStart = result[j][0] ?? Number.NEGATIVE_INFINITY;\n const currentEnd = result[j][1] ?? Number.POSITIVE_INFINITY;\n\n let movedRange: Range<number> | undefined;\n const currentResult: Range<number>[] = [\n [currentStart, fromStart - 1],\n [fromStart, fromEnd],\n [fromEnd + 1, currentEnd],\n ]\n .map(\n ([s, e]): Range<number> => [\n // Cap the ranges to within the current range bounds\n Math.max(s, currentStart),\n Math.min(e, currentEnd),\n ]\n )\n .filter(([s, e]) => s <= e) // Remove invalid ranges\n .map(\n (range): Range<number> => {\n const [s, e] = range;\n if (fromStart <= s && fromEnd >= e) {\n // Current range in moved range\n movedRange = [s + moveDistance, e + moveDistance];\n return movedRange;\n }\n\n if (fromEnd < s) {\n // Current range is after moved range\n return [s - length, e - length];\n }\n return range;\n }\n )\n .map((range): Range<number>[] => {\n const [s, e] = range;\n if (toStart > s && toStart <= e) {\n // Moved range splits this range\n return [\n [s, toStart - 1],\n [toStart + length, e + length],\n ];\n }\n\n if (range === movedRange) {\n // Moved range has already been shifted\n return [range];\n }\n\n if (toStart <= s) {\n // Moved range shifts this range right\n return [[s + length, e + length]];\n }\n return [range];\n })\n .flat();\n\n nextResult.push(...currentResult);\n }\n\n // Return infinity values back to null\n result = nextResult.map(([s, e]) => [\n Number.isFinite(s) ? s : null,\n Number.isFinite(e) ? e : null,\n ]) as Range<T>[];\n }\n return result;\n }\n\n /**\n * Applies the items moves to the givengrid range\n * @param range The grid range to translate\n * @param movedColumns The moved columns\n * @param movedRows The moved rows\n * @param reverse If the moved items should be reversed (i.e. visible to model range)\n * @returns A list of grid ranges in the translated space. Possibly multiple non-continuous ranges\n */\n static translateRange(\n range: GridRange,\n movedColumns: readonly MoveOperation[],\n movedRows: readonly MoveOperation[],\n reverse: boolean\n ): GridRange[] {\n const columnRanges = GridUtils.applyItemMoves(\n range.startColumn,\n range.endColumn,\n movedColumns,\n reverse\n );\n const rowRanges = GridUtils.applyItemMoves(\n range.startRow,\n range.endRow,\n movedRows,\n reverse\n );\n const ranges: GridRange[] = [];\n for (let i = 0; i < columnRanges.length; i += 1) {\n const c = columnRanges[i];\n for (let j = 0; j < rowRanges.length; j += 1) {\n const r = rowRanges[j];\n ranges.push(new GridRange(c[0], r[0], c[1], r[1]));\n }\n }\n return ranges;\n }\n\n /**\n * Retrieve the model index given the currently moved items\n * @param visibleIndex The visible index of the item to get the model index for\n * @param movedItems The moved items\n * @returns The model index of the item\n */\n static getModelIndex(\n visibleIndex: VisibleIndex,\n movedItems: readonly MoveOperation[]\n ): ModelIndex {\n const modelIndex = GridUtils.applyItemMoves(\n visibleIndex,\n visibleIndex,\n movedItems,\n true\n )[0][0];\n\n return modelIndex;\n }\n\n /**\n * Retrieve the model indexes given the currently moved items\n * @param visibleIndexes The visible indexes of the item to get the model indexes for\n * @param movedItems The moved items\n * @returns The model indexes of the item\n */\n static getModelIndexes(\n visibleIndexes: ModelIndex[],\n movedItems: MoveOperation[]\n ): VisibleIndex[] {\n return visibleIndexes.map(i => GridUtils.getModelIndex(i, movedItems));\n }\n\n /**\n * Translate the provided UI start/end indexes to the model start/end indexes by applying the `movedItems` transformations.\n * Since moved items can split apart a range, multiple pairs of indexes are returned\n *\n * @param start Start item in one dimension\n * @param end End item in one dimension\n * @param movedItems Moved item pairs in this dimension\n * @returns Array of start/end pairs of the indexes after transformations applied.\n */\n static getModelRangeIndexes(\n start: GridRangeIndex,\n end: GridRangeIndex,\n movedItems: readonly MoveOperation[]\n ): AxisRange[] {\n return GridUtils.applyItemMoves(start, end, movedItems, true);\n }\n\n /**\n * Translate the provided UI range into model range, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param uiRange The currently selected UI ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getModelRange(\n uiRange: GridRange,\n movedColumns: readonly MoveOperation[] = EMPTY_ARRAY,\n movedRows: readonly MoveOperation[] = EMPTY_ARRAY\n ): GridRange[] {\n return GridUtils.translateRange(uiRange, movedColumns, movedRows, true);\n }\n\n /**\n * Translate the provided UI range into model ranges, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param uiRanges The currently selected UI ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getModelRanges(\n uiRanges: readonly GridRange[],\n movedColumns: readonly MoveOperation[] = EMPTY_ARRAY,\n movedRows: readonly MoveOperation[] = EMPTY_ARRAY\n ): GridRange[] {\n const modelRanges = [];\n for (let i = 0; i < uiRanges.length; i += 1) {\n modelRanges.push(\n ...GridUtils.getModelRange(uiRanges[i], movedColumns, movedRows)\n );\n }\n return modelRanges;\n }\n\n /**\n * Translate the provided UI start/end indexes to the visible start/end indexes by applying the `movedItems` transformations.\n * Since moved items can split apart a range, multiple pairs of indexes are returned\n *\n * @param start Start item in one dimension\n * @param end End item in one dimension\n * @param movedItems Moved item pairs in this dimension\n * @returns Array of start/end pairs of the indexes after transformations applied.\n */\n static getVisibleRangeIndexes(\n start: GridRangeIndex,\n end: GridRangeIndex,\n movedItems: readonly MoveOperation[]\n ): AxisRange[] {\n return GridUtils.applyItemMoves(start, end, movedItems, false);\n }\n\n /**\n * Translate the provided UI range into visible range, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param uiRange The currently selected UI ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getVisibleRange(\n modelRange: GridRange,\n movedColumns: readonly MoveOperation[] = EMPTY_ARRAY,\n movedRows: readonly MoveOperation[] = EMPTY_ARRAY\n ): GridRange[] {\n return this.translateRange(modelRange, movedColumns, movedRows, false);\n }\n\n /**\n * Translate the provided model ranges into visible ranges, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param modelRanges The model ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getVisibleRanges(\n modelRanges: readonly GridRange[],\n movedColumns: readonly MoveOperation[] = EMPTY_ARRAY,\n movedRows: readonly MoveOperation[] = EMPTY_ARRAY\n ): GridRange[] {\n const visibleRanges = [];\n for (let i = 0; i < modelRanges.length; i += 1) {\n visibleRanges.push(\n ...GridUtils.getVisibleRange(modelRanges[i], movedColumns, movedRows)\n );\n }\n return visibleRanges;\n }\n\n /**\n * Retrieve the visible index given the currently moved items\n * @param modelIndex The model index to get the visible index for\n * @param movedItems Moved items\n * @returns The visible index of the item\n */\n static getVisibleIndex(\n modelIndex: ModelIndex,\n movedItems: readonly MoveOperation[]\n ): VisibleIndex {\n const visibleIndex = GridUtils.applyItemMoves(\n modelIndex,\n modelIndex,\n movedItems\n )[0][0];\n\n return visibleIndex;\n }\n\n /**\n * Retrieve the visible indexes given the currently moved items\n * @param modelIndexes The model indexes to get the visible indexes for\n * @param movedItems Moved items\n * @returns The visible indexes of the item\n */\n static getVisibleIndexes(\n modelIndexes: readonly ModelIndex[],\n movedItems: readonly MoveOperation[]\n ): VisibleIndex[] {\n return modelIndexes.map(i => GridUtils.getVisibleIndex(i, movedItems));\n }\n\n /**\n * Check if the current platform is Mac\n * @returns True if this platform is a Mac, false otherwise\n */\n static isMacPlatform(): boolean {\n const { platform } = window.navigator;\n return platform.startsWith('Mac');\n }\n\n /**\n * Get the modifier key for the current platform\n * @returns The modifier key for the current platform\n */\n static getModifierKey(): 'metaKey' | 'ctrlKey' {\n if (GridUtils.isMacPlatform()) {\n return 'metaKey';\n }\n\n return 'ctrlKey';\n }\n\n /**\n * Check if the modifier key is down for the given event\n * @param event The event to check\n * @returns True if the modifier key is down, false otherwise\n */\n static isModifierKeyDown(\n event: MouseEvent | KeyboardEvent | React.KeyboardEvent | React.MouseEvent\n ): boolean {\n const modifierKey = GridUtils.getModifierKey();\n return event[modifierKey];\n }\n\n /**\n * Check if the user has hidden the specified column\n * @param modelIndex The model index to check\n * @param userColumnWidths The user set column widths\n * @returns True if the user has hidden the column\n */\n static checkColumnHidden(\n modelIndex: ModelIndex,\n userColumnWidths: ModelSizeMap\n ): boolean {\n return userColumnWidths.get(modelIndex) === 0;\n }\n\n /**\n * Check if all the columns specified are hidden\n * @param columns Columns to check\n * @param userColumnWidths The user set column widths\n * @returns True if the user has hidden all of the columns\n */\n static checkAllColumnsHidden(\n columns: readonly ModelIndex[],\n userColumnWidths: ModelSizeMap\n ): boolean {\n if (userColumnWidths.size === 0) {\n return false;\n }\n return columns.every(column => userColumnWidths.get(column) === 0);\n }\n\n /**\n * Get the bounds the mouse needs to be dragged outside of from an initial selection before scrolling occurs.\n * Taking into account any floating rows that may be covering the viewport.\n * @param metrics Grid metrics\n * @param row The row they started dragging in\n * @param column The column they started the drag from\n * @returns Dimensions of the drag area in relation to the canvas they need to drag outside of to start scrolling\n */\n static getScrollDragBounds(\n metrics: GridMetrics,\n row: GridRangeIndex,\n column: GridRangeIndex\n ): BoxCoordinates {\n const {\n gridX,\n gridY,\n width,\n height,\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n floatingLeftWidth,\n floatingRightWidth,\n floatingTopHeight,\n floatingBottomHeight,\n columnCount,\n rowCount,\n } = metrics;\n let x1 = gridX;\n let y1 = gridY;\n let x2 = width;\n let y2 = height;\n if (column != null) {\n if (column > floatingLeftColumnCount) {\n x1 += floatingLeftWidth;\n }\n if (column < columnCount - floatingRightColumnCount) {\n x2 -= floatingRightWidth;\n }\n }\n\n if (row != null) {\n if (row > floatingTopRowCount) {\n y1 += floatingTopHeight;\n }\n if (row < rowCount - floatingBottomRowCount) {\n y2 -= floatingBottomHeight;\n }\n }\n return { x1, y1, x2, y2 };\n }\n\n /**\n * Converts the delta coordinates from the provided wheel event to pixels\n * Different platforms have different ways of providing the delta so this normalizes it\n * @param wheelEvent The mouse wheel event to get the scrolling delta for\n * @param pageWidth The width of the page that is scrolling\n * @param pageHeight The height of the page that is scrolling\n * @param lineWidth The width of the line scrolling in line mode\n * @param lineHeight The height of the line scrolling in line mode\n * @returns The delta coordinates normalized to pixels\n */\n static getScrollDelta(\n wheelEvent: GridWheelEvent,\n pageWidth = 1024,\n pageHeight = 768,\n lineWidth = 20,\n lineHeight = 20\n ): { deltaX: number; deltaY: number } {\n let { deltaX, deltaY } = wheelEvent;\n\n // Flip scroll direction if shiftKey is held on windows/linux.\n // On mac, deltaX/Y values are switched at the event level when shiftKey=true.\n // Guard on strictly Y only changing, to ignore trackpad diagonal motion,\n // through that guard may not be necessary, but it is difficult to determine for\n // all platforms/browser/scroll method combos.\n if (\n !GridUtils.isMacPlatform() &&\n wheelEvent.shiftKey &&\n wheelEvent.deltaX === 0 &&\n wheelEvent.deltaY !== 0\n ) {\n deltaX = wheelEvent.deltaY;\n deltaY = wheelEvent.deltaX;\n }\n\n // Normalize other deltaMode values to pixel units\n // deltaMode 0, is already in pixel units\n if (wheelEvent?.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n // Users can set OS to be in deltaMode page\n // scrolly by page units as pixels\n deltaX *= pageWidth;\n deltaY *= pageHeight;\n } else if (wheelEvent?.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n // Firefox reports deltaMode line\n // Normalize distance travelled between browsers\n // but remain ~platform/browser combo consistent\n if (GridUtils.isMacPlatform()) {\n // for mac treat lines as a standard row height\n // on mac, firefox travels less distance then chrome per tick\n deltaX = Math.round(deltaX * lineWidth);\n deltaY = Math.round(deltaY * lineHeight);\n } else {\n // for windows convert to pixels using the same method as chrome\n // chrome goes 100 per 3 lines, and firefox would go 102 per 3 (17 lineheight * 3 lines * 2)\n // make the behaviour the same between as it's close enough\n deltaX = Math.round(deltaX * this.PIXELS_PER_LINE);\n deltaY = Math.round(deltaY * this.PIXELS_PER_LINE);\n }\n }\n\n return { deltaX, deltaY };\n }\n\n static compareRanges(range1: AxisRange, range2: AxisRange): number {\n if (\n range1[0] == null ||\n range1[1] == null ||\n range2[0] == null ||\n range2[1] == null\n ) {\n return 0;\n }\n return range1[0] !== range2[0]\n ? range1[0] - range2[0]\n : range1[1] - range2[1];\n }\n\n static mergeSortedRanges(ranges: BoundedAxisRange[]): BoundedAxisRange[] {\n const mergedRanges: BoundedAxisRange[] = [];\n\n for (let i = 0; i < ranges.length; i += 1) {\n const range = ranges[i];\n const start = range[0];\n const end = range[1];\n if (i === 0) {\n mergedRanges.push([start, end]);\n } else if (start - 1 <= mergedRanges[mergedRanges.length - 1][1]) {\n mergedRanges[mergedRanges.length - 1][1] = Math.max(\n mergedRanges[mergedRanges.length - 1][1],\n end\n );\n } else {\n mergedRanges.push([start, end]);\n }\n }\n return mergedRanges;\n }\n\n /**\n * Translates coordinates that are relative to gridX/gridY to be translated by gridX and gridY\n * @param tokenBox The token box to translate\n * @param metrics The grid metrics\n * @returns The token box with translated coordinates\n */\n static translateTokenBox(tokenBox: TokenBox, metrics: GridMetrics): TokenBox {\n const { x1: left, y1: top, x2: right, y2: bottom } = tokenBox;\n const {\n gridX,\n gridY,\n width: gridWidth,\n height: gridHeight,\n verticalBarWidth,\n horizontalBarHeight,\n } = metrics;\n\n // Clamp the values within the grid\n const newLeft = clamp(gridX + left, gridX, gridWidth - verticalBarWidth);\n const newRight = clamp(gridX + right, gridX, gridWidth - verticalBarWidth);\n const newTop = clamp(gridY + top, gridY, gridHeight - horizontalBarHeight);\n const newBottom = clamp(\n gridY + bottom,\n gridY,\n gridHeight - horizontalBarHeight\n );\n\n return {\n x1: newLeft,\n y1: newTop,\n x2: newRight,\n y2: newBottom,\n token: tokenBox.token,\n };\n }\n\n /**\n * Finds tokens in text (urls, emails) that start with https:// or http://\n * @param text The text to search in\n * @returns An array of tokens\n */\n static findTokensWithProtocolInText(text: string): Token[] {\n const tokens = linkifyFind(text);\n\n return tokens.filter(token => {\n if (token.type === 'url') {\n return /^https?:\\/\\//.test(token.value);\n }\n return true;\n });\n }\n}\n\nexport default GridUtils;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/grid",
3
- "version": "0.37.2",
3
+ "version": "0.37.4-beta.1+769d7533",
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.37.2"
28
+ "@deephaven/tsconfig": "^0.37.4-beta.1+769d7533"
29
29
  },
30
30
  "files": [
31
31
  "dist"
@@ -34,7 +34,7 @@
34
34
  "*.css"
35
35
  ],
36
36
  "dependencies": {
37
- "@deephaven/utils": "^0.37.2",
37
+ "@deephaven/utils": "^0.37.4-beta.1+769d7533",
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": "fa22e4b507d6b3a52ea05ca6b1256c0cb1432c18"
50
+ "gitHead": "769d7533cc2e840c83e2189d7ae20dce61eff3be"
51
51
  }