@deephaven/grid 1.23.1-alpha-pivot-builder.5e6a5fd.0 → 1.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -115,6 +115,20 @@ declare abstract class GridModel<TEventMap extends Record<string, Event<string>>
115
115
  tokensForCell(column: ModelIndex, row: ModelIndex, visibleLength?: number): Token[];
116
116
  getCachedTokensInText: ((text: string, visibleLength: number) => Token[]) & import("@types/memoizee").Memoized<(text: string, visibleLength: number) => Token[]>;
117
117
  renderTypeForCell(column: ModelIndex, row: ModelIndex): CellRenderType;
118
+ /**
119
+ * Get the column restrictions for a column, which can be used to determine
120
+ * what type of input component to render for cells in that column.
121
+ * @param column The model index of the column
122
+ * @returns The column restrictions, or an empty array if there are none
123
+ */
124
+ getColumnRestrictions(column: ModelIndex): ColumnRestriction[];
118
125
  }
126
+ /**
127
+ * Base type for a column restriction. Carries a `type` discriminator that
128
+ * can be used to narrow to a more specific restriction shape.
129
+ */
130
+ export type ColumnRestriction = {
131
+ type: string;
132
+ };
119
133
  export default GridModel;
120
134
  //# sourceMappingURL=GridModel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GridModel.d.ts","sourceRoot":"","sources":["../src/GridModel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GridModel.d.ts","sourceRoot":"","sources":["../src/GridModel.ts"],"names":[],"mappings":"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"}
package/dist/GridModel.js CHANGED
@@ -192,6 +192,22 @@ class GridModel extends EventTarget {
192
192
  renderTypeForCell(column, row) {
193
193
  return 'text';
194
194
  }
195
+
196
+ /**
197
+ * Get the column restrictions for a column, which can be used to determine
198
+ * what type of input component to render for cells in that column.
199
+ * @param column The model index of the column
200
+ * @returns The column restrictions, or an empty array if there are none
201
+ */
202
+ getColumnRestrictions(column) {
203
+ return [];
204
+ }
195
205
  }
206
+
207
+ /**
208
+ * Base type for a column restriction. Carries a `type` discriminator that
209
+ * can be used to narrow to a more specific restriction shape.
210
+ */
211
+
196
212
  export default GridModel;
197
213
  //# sourceMappingURL=GridModel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GridModel.js","names":["EventTarget","memoizeClear","GridUtils","LINK_TRUNCATION_LENGTH","GridModel","constructor","arguments","_defineProperty","text","visibleLength","length","findTokensWithProtocolInText","indexOfProceedingWhitespace","slice","search","lengthOfContent","Math","min","contentToCheckForLinks","substring","max","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","renderTypeForCell"],"sources":["../src/GridModel.ts"],"sourcesContent":["import { EventTarget, type Event } from 'event-target-shim';\nimport type { IColumnHeaderGroup } from './ColumnHeaderGroup';\nimport { type ModelIndex } from './GridMetrics';\nimport {\n type GridColor,\n type GridTheme,\n type NullableGridColor,\n} from './GridTheme';\nimport memoizeClear from './memoizeClear';\nimport GridUtils, { type Token } from './GridUtils';\nimport { type CellRenderType } from './CellRenderer';\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 { max: 10000 }\n );\n\n renderTypeForCell(column: ModelIndex, row: ModelIndex): CellRenderType {\n return 'text';\n }\n}\n\nexport default GridModel;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"GridModel.js","names":["EventTarget","memoizeClear","GridUtils","LINK_TRUNCATION_LENGTH","GridModel","constructor","arguments","_defineProperty","text","visibleLength","length","findTokensWithProtocolInText","indexOfProceedingWhitespace","slice","search","lengthOfContent","Math","min","contentToCheckForLinks","substring","max","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","renderTypeForCell","getColumnRestrictions"],"sources":["../src/GridModel.ts"],"sourcesContent":["import { EventTarget, type Event } from 'event-target-shim';\nimport type { IColumnHeaderGroup } from './ColumnHeaderGroup';\nimport { type ModelIndex } from './GridMetrics';\nimport {\n type GridColor,\n type GridTheme,\n type NullableGridColor,\n} from './GridTheme';\nimport memoizeClear from './memoizeClear';\nimport GridUtils, { type Token } from './GridUtils';\nimport { type CellRenderType } from './CellRenderer';\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 { max: 10000 }\n );\n\n renderTypeForCell(column: ModelIndex, row: ModelIndex): CellRenderType {\n return 'text';\n }\n\n /**\n * Get the column restrictions for a column, which can be used to determine\n * what type of input component to render for cells in that column.\n * @param column The model index of the column\n * @returns The column restrictions, or an empty array if there are none\n */\n getColumnRestrictions(column: ModelIndex): ColumnRestriction[] {\n return [];\n }\n}\n\n/**\n * Base type for a column restriction. Carries a `type` discriminator that\n * can be used to narrow to a more specific restriction shape.\n */\nexport type ColumnRestriction = {\n type: string;\n};\n\nexport default GridModel;\n"],"mappings":"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","ignoreList":[]}
@@ -1,3 +1,4 @@
1
+ import type React from 'react';
1
2
  import { type VisibleIndex, type Coordinate } from './GridMetrics';
2
3
  import type GridMetrics from './GridMetrics';
3
4
  import type GridModel from './GridModel';
@@ -5,7 +6,37 @@ import type GridRange from './GridRange';
5
6
  import { type GridTheme } from './GridTheme';
6
7
  import { type DraggingColumn } from './mouse-handlers/GridColumnMoveMouseHandler';
7
8
  import { type GridSeparator } from './mouse-handlers/GridSeparatorMouseHandler';
9
+ import type { CellInputFieldProps } from './CellInputField';
10
+ import type { ColumnRestriction } from './GridModel';
8
11
  export declare const DEFAULT_FONT_WIDTH = 10;
12
+ /**
13
+ * Props passed to a cell input renderer, combining the base CellInputField
14
+ * props with the restrictions that apply to the cell being edited.
15
+ */
16
+ export type CellInputProps = CellInputFieldProps & {
17
+ restrictions: readonly ColumnRestriction[];
18
+ };
19
+ /**
20
+ * A renderer for a single cell input field based on column restriction type.
21
+ *
22
+ * Set `preservesExistingValue = true` on the function to signal that
23
+ * keystroke-initiated edits should open the editor with the existing cell
24
+ * value rather than replacing it with the typed character.
25
+ */
26
+ export type CellInputRendererFn = ((props: CellInputProps) => React.ReactNode) & {
27
+ /**
28
+ * When true, keystroke-initiated edits preserve the existing cell value
29
+ * instead of replacing it with the typed character. Intended for renderers
30
+ * like dropdowns where the typed character has no meaning as a new value.
31
+ */
32
+ preservesExistingValue?: boolean;
33
+ };
34
+ /**
35
+ * A map from column restriction type string to a cell input renderer function.
36
+ * Grid looks up restrictions[0].type in this registry and falls back to
37
+ * CellInputField when there is no match.
38
+ */
39
+ export type CellInputRendererRegistry = ReadonlyMap<string, CellInputRendererFn>;
9
40
  export type EditingCellTextSelectionRange = [start: number, end: number];
10
41
  export type EditingCell = {
11
42
  column: VisibleIndex;
@@ -1 +1 @@
1
- {"version":3,"file":"GridRendererTypes.d.ts","sourceRoot":"","sources":["../src/GridRendererTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAGhF,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,MAAM,MAAM,6BAA6B,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AAEzE,MAAM,MAAM,WAAW,GAAG;IAExB,MAAM,EAAE,YAAY,CAAC;IACrB,GAAG,EAAE,YAAY,CAAC;IAGlB,cAAc,CAAC,EAAE,6BAA6B,CAAC;IAG/C,KAAK,EAAE,MAAM,CAAC;IAGd,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAE5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IAGf,OAAO,EAAE,wBAAwB,CAAC;IAGlC,KAAK,EAAE,SAAS,CAAC;IAGjB,KAAK,EAAE,SAAS,CAAC;IAGjB,OAAO,EAAE,WAAW,CAAC;IAGrB,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAG1B,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,SAAS,EAAE,YAAY,GAAG,IAAI,CAAC;IAG/B,cAAc,EAAE,SAAS,SAAS,EAAE,CAAC;IAGrC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,uBAAuB,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9C,WAAW,EAAE,YAAY,GAAG,IAAI,CAAC;IACjC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,oBAAoB,EAAE,aAAa,GAAG,IAAI,CAAC;IAG3C,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,6BAA6B,EAAE,OAAO,CAAC;IACvC,2BAA2B,EAAE,OAAO,CAAC;IACrC,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC"}
1
+ {"version":3,"file":"GridRendererTypes.d.ts","sourceRoot":"","sources":["../src/GridRendererTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,mBAAmB,GAAG;IACjD,YAAY,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAC5C,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CACjC,KAAK,EAAE,cAAc,KAClB,KAAK,CAAC,SAAS,CAAC,GAAG;IACtB;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,yBAAyB,GAAG,WAAW,CACjD,MAAM,EACN,mBAAmB,CACpB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AAEzE,MAAM,MAAM,WAAW,GAAG;IAExB,MAAM,EAAE,YAAY,CAAC;IACrB,GAAG,EAAE,YAAY,CAAC;IAGlB,cAAc,CAAC,EAAE,6BAA6B,CAAC;IAG/C,KAAK,EAAE,MAAM,CAAC;IAGd,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAE5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IAGf,OAAO,EAAE,wBAAwB,CAAC;IAGlC,KAAK,EAAE,SAAS,CAAC;IAGjB,KAAK,EAAE,SAAS,CAAC;IAGjB,OAAO,EAAE,WAAW,CAAC;IAGrB,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAG1B,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,SAAS,EAAE,YAAY,GAAG,IAAI,CAAC;IAG/B,cAAc,EAAE,SAAS,SAAS,EAAE,CAAC;IAGrC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,uBAAuB,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9C,WAAW,EAAE,YAAY,GAAG,IAAI,CAAC;IACjC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,oBAAoB,EAAE,aAAa,GAAG,IAAI,CAAC;IAG3C,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,6BAA6B,EAAE,OAAO,CAAC;IACvC,2BAA2B,EAAE,OAAO,CAAC;IACrC,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC"}
@@ -1,3 +1,22 @@
1
1
  // Default font width in pixels if it cannot be retrieved from the context
2
2
  export var DEFAULT_FONT_WIDTH = 10;
3
+
4
+ /**
5
+ * Props passed to a cell input renderer, combining the base CellInputField
6
+ * props with the restrictions that apply to the cell being edited.
7
+ */
8
+
9
+ /**
10
+ * A renderer for a single cell input field based on column restriction type.
11
+ *
12
+ * Set `preservesExistingValue = true` on the function to signal that
13
+ * keystroke-initiated edits should open the editor with the existing cell
14
+ * value rather than replacing it with the typed character.
15
+ */
16
+
17
+ /**
18
+ * A map from column restriction type string to a cell input renderer function.
19
+ * Grid looks up restrictions[0].type in this registry and falls back to
20
+ * CellInputField when there is no match.
21
+ */
3
22
  //# sourceMappingURL=GridRendererTypes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GridRendererTypes.js","names":["DEFAULT_FONT_WIDTH"],"sources":["../src/GridRendererTypes.ts"],"sourcesContent":["import { type VisibleIndex, type Coordinate } from './GridMetrics';\nimport type GridMetrics from './GridMetrics';\nimport type GridModel from './GridModel';\nimport type GridRange from './GridRange';\nimport { type GridTheme } from './GridTheme';\nimport { type DraggingColumn } from './mouse-handlers/GridColumnMoveMouseHandler';\nimport { type GridSeparator } from './mouse-handlers/GridSeparatorMouseHandler';\n\n// Default font width in pixels if it cannot be retrieved from the context\nexport const DEFAULT_FONT_WIDTH = 10;\n\nexport type EditingCellTextSelectionRange = [start: number, end: number];\n\nexport type EditingCell = {\n // Index of the editing cell\n column: VisibleIndex;\n row: VisibleIndex;\n\n // Selection within the text\n selectionRange?: EditingCellTextSelectionRange;\n\n // The value to use for the edit\n value: string;\n\n // Whether the selection was triggered with a quick edit action (e.g. Start typing with the cell in focus)\n isQuickEdit?: boolean;\n};\n\nexport type GridRenderState = {\n // Width and height of the total canvas area\n width: number;\n height: number;\n\n // The canvas context\n context: CanvasRenderingContext2D;\n\n // The grid theme\n theme: GridTheme;\n\n // The model used by the grid\n model: GridModel;\n\n // The grid metrics\n metrics: GridMetrics;\n\n // Location of the mouse on the grid\n mouseX: Coordinate | null;\n mouseY: Coordinate | null;\n\n // Where the keyboard cursor is located\n cursorColumn: VisibleIndex | null;\n cursorRow: VisibleIndex | null;\n\n // Currently selected ranges\n selectedRanges: readonly GridRange[];\n\n // Currently dragged column/row information\n draggingColumn: DraggingColumn | null;\n draggingColumnSeparator: GridSeparator | null;\n draggingRow: VisibleIndex | null;\n draggingRowOffset: number | null;\n draggingRowSeparator: GridSeparator | null;\n\n // The currently editing cell\n editingCell: EditingCell | null;\n isDraggingHorizontalScrollBar: boolean;\n isDraggingVerticalScrollBar: boolean;\n isDragging: boolean;\n};\n"],"mappings":"AAQA;AACA,OAAO,IAAMA,kBAAkB,GAAG,EAAE","ignoreList":[]}
1
+ {"version":3,"file":"GridRendererTypes.js","names":["DEFAULT_FONT_WIDTH"],"sources":["../src/GridRendererTypes.ts"],"sourcesContent":["import type React from 'react';\nimport { type VisibleIndex, type Coordinate } from './GridMetrics';\nimport type GridMetrics from './GridMetrics';\nimport type GridModel from './GridModel';\nimport type GridRange from './GridRange';\nimport { type GridTheme } from './GridTheme';\nimport { type DraggingColumn } from './mouse-handlers/GridColumnMoveMouseHandler';\nimport { type GridSeparator } from './mouse-handlers/GridSeparatorMouseHandler';\nimport type { CellInputFieldProps } from './CellInputField';\nimport type { ColumnRestriction } from './GridModel';\n\n// Default font width in pixels if it cannot be retrieved from the context\nexport const DEFAULT_FONT_WIDTH = 10;\n\n/**\n * Props passed to a cell input renderer, combining the base CellInputField\n * props with the restrictions that apply to the cell being edited.\n */\nexport type CellInputProps = CellInputFieldProps & {\n restrictions: readonly ColumnRestriction[];\n};\n\n/**\n * A renderer for a single cell input field based on column restriction type.\n *\n * Set `preservesExistingValue = true` on the function to signal that\n * keystroke-initiated edits should open the editor with the existing cell\n * value rather than replacing it with the typed character.\n */\nexport type CellInputRendererFn = ((\n props: CellInputProps\n) => React.ReactNode) & {\n /**\n * When true, keystroke-initiated edits preserve the existing cell value\n * instead of replacing it with the typed character. Intended for renderers\n * like dropdowns where the typed character has no meaning as a new value.\n */\n preservesExistingValue?: boolean;\n};\n\n/**\n * A map from column restriction type string to a cell input renderer function.\n * Grid looks up restrictions[0].type in this registry and falls back to\n * CellInputField when there is no match.\n */\nexport type CellInputRendererRegistry = ReadonlyMap<\n string,\n CellInputRendererFn\n>;\n\nexport type EditingCellTextSelectionRange = [start: number, end: number];\n\nexport type EditingCell = {\n // Index of the editing cell\n column: VisibleIndex;\n row: VisibleIndex;\n\n // Selection within the text\n selectionRange?: EditingCellTextSelectionRange;\n\n // The value to use for the edit\n value: string;\n\n // Whether the selection was triggered with a quick edit action (e.g. Start typing with the cell in focus)\n isQuickEdit?: boolean;\n};\n\nexport type GridRenderState = {\n // Width and height of the total canvas area\n width: number;\n height: number;\n\n // The canvas context\n context: CanvasRenderingContext2D;\n\n // The grid theme\n theme: GridTheme;\n\n // The model used by the grid\n model: GridModel;\n\n // The grid metrics\n metrics: GridMetrics;\n\n // Location of the mouse on the grid\n mouseX: Coordinate | null;\n mouseY: Coordinate | null;\n\n // Where the keyboard cursor is located\n cursorColumn: VisibleIndex | null;\n cursorRow: VisibleIndex | null;\n\n // Currently selected ranges\n selectedRanges: readonly GridRange[];\n\n // Currently dragged column/row information\n draggingColumn: DraggingColumn | null;\n draggingColumnSeparator: GridSeparator | null;\n draggingRow: VisibleIndex | null;\n draggingRowOffset: number | null;\n draggingRowSeparator: GridSeparator | null;\n\n // The currently editing cell\n editingCell: EditingCell | null;\n isDraggingHorizontalScrollBar: boolean;\n isDraggingVerticalScrollBar: boolean;\n isDragging: boolean;\n};\n"],"mappings":"AAWA;AACA,OAAO,IAAMA,kBAAkB,GAAG,EAAE;;AAEpC;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;;AAYA;AACA;AACA;AACA;AACA","ignoreList":[]}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,6 @@
1
+ export { default as CellInputField } from './CellInputField';
2
+ export * from './CellInputField';
3
+ export * from './GridRendererTypes';
1
4
  export * from './ColumnHeaderGroup';
2
5
  export * from './EditableGridModel';
3
6
  export * from './DeletableGridModel';
@@ -8,6 +11,7 @@ export * from './Grid';
8
11
  export * from './GridMetricCalculator';
9
12
  export * from './GridMetrics';
10
13
  export { default as GridModel } from './GridModel';
14
+ export * from './GridModel';
11
15
  export * from './GridMouseHandler';
12
16
  export * from './GridRange';
13
17
  export * from './GridAxisRange';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,cAAc,QAAQ,CAAC;AACvB,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9D,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACzE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvE,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,cAAc,QAAQ,CAAC;AACvB,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9D,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACzE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvE,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,6 @@
1
+ export { default as CellInputField } from "./CellInputField.js";
2
+ export * from "./CellInputField.js";
3
+ export * from "./GridRendererTypes.js";
1
4
  export * from "./ColumnHeaderGroup.js";
2
5
  export * from "./EditableGridModel.js";
3
6
  export * from "./DeletableGridModel.js";
@@ -8,6 +11,7 @@ export * from "./Grid.js";
8
11
  export * from "./GridMetricCalculator.js";
9
12
  export * from "./GridMetrics.js";
10
13
  export { default as GridModel } from "./GridModel.js";
14
+ export * from "./GridModel.js";
11
15
  export * from "./GridMouseHandler.js";
12
16
  export * from "./GridRange.js";
13
17
  export * from "./GridAxisRange.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["default","Grid","GridModel","GridTestUtils","GridTheme","KeyHandler","MockGridModel","MockTreeGridModel","memoizeClear","StaticDataGridModel","ViewportDataGridModel","MockDataBarGridModel","CellRenderer","TextCellRenderer","DataBarCellRenderer","GridColorUtils"],"sources":["../src/index.ts"],"sourcesContent":["export * from './ColumnHeaderGroup';\nexport * from './EditableGridModel';\nexport * from './DeletableGridModel';\nexport * from './ExpandableGridModel';\nexport * from './ExpandableColumnGridModel';\nexport { default as Grid } from './Grid';\nexport * from './Grid';\nexport * from './GridMetricCalculator';\nexport * from './GridMetrics';\nexport { default as GridModel } from './GridModel';\nexport * from './GridMouseHandler';\nexport * from './GridRange';\nexport * from './GridAxisRange';\nexport * from './GridRenderer';\nexport { default as GridTestUtils } from './GridTestUtils';\nexport * from './GridTheme';\nexport { default as GridTheme } from './GridTheme';\nexport type { GridTheme as GridThemeType } from './GridTheme';\nexport * from './GridUtils';\nexport { default as KeyHandler } from './KeyHandler';\nexport { default as MockGridModel } from './MockGridModel';\nexport { default as MockTreeGridModel } from './MockTreeGridModel';\nexport { default as memoizeClear } from './memoizeClear';\nexport { default as StaticDataGridModel } from './StaticDataGridModel';\nexport { default as ViewportDataGridModel } from './ViewportDataGridModel';\nexport { default as MockDataBarGridModel } from './MockDataBarGridModel';\nexport * from './key-handlers';\nexport * from './mouse-handlers';\nexport * from './errors';\nexport * from './EventHandlerResult';\nexport * from './ThemeContext';\nexport { default as CellRenderer } from './CellRenderer';\nexport type { CellRenderType } from './CellRenderer';\nexport { default as TextCellRenderer } from './TextCellRenderer';\nexport { default as DataBarCellRenderer } from './DataBarCellRenderer';\nexport * from './TokenBoxCellRenderer';\nexport * from './GridRendererTypes';\nexport * from './DataBarGridModel';\nexport { default as GridColorUtils } from './GridColorUtils';\nexport type { RGB, Oklab } from './GridColorUtils';\n"],"mappings":";;;;;SAKSA,OAAO,IAAIC,IAAI;AAAA;AAAA;AAAA;AAAA,SAIfD,OAAO,IAAIE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,SAKpBF,OAAO,IAAIG,aAAa;AAAA;AAAA,SAExBH,OAAO,IAAII,SAAS;AAAA;AAAA,SAGpBJ,OAAO,IAAIK,UAAU;AAAA,SACrBL,OAAO,IAAIM,aAAa;AAAA,SACxBN,OAAO,IAAIO,iBAAiB;AAAA,SAC5BP,OAAO,IAAIQ,YAAY;AAAA,SACvBR,OAAO,IAAIS,mBAAmB;AAAA,SAC9BT,OAAO,IAAIU,qBAAqB;AAAA,SAChCV,OAAO,IAAIW,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAM/BX,OAAO,IAAIY,YAAY;AAAA,SAEvBZ,OAAO,IAAIa,gBAAgB;AAAA,SAC3Bb,OAAO,IAAIc,mBAAmB;AAAA;AAAA;AAAA;AAAA,SAI9Bd,OAAO,IAAIe,cAAc","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["default","CellInputField","Grid","GridModel","GridTestUtils","GridTheme","KeyHandler","MockGridModel","MockTreeGridModel","memoizeClear","StaticDataGridModel","ViewportDataGridModel","MockDataBarGridModel","CellRenderer","TextCellRenderer","DataBarCellRenderer","GridColorUtils"],"sources":["../src/index.ts"],"sourcesContent":["export { default as CellInputField } from './CellInputField';\nexport * from './CellInputField';\nexport * from './GridRendererTypes';\nexport * from './ColumnHeaderGroup';\nexport * from './EditableGridModel';\nexport * from './DeletableGridModel';\nexport * from './ExpandableGridModel';\nexport * from './ExpandableColumnGridModel';\nexport { default as Grid } from './Grid';\nexport * from './Grid';\nexport * from './GridMetricCalculator';\nexport * from './GridMetrics';\nexport { default as GridModel } from './GridModel';\nexport * from './GridModel';\nexport * from './GridMouseHandler';\nexport * from './GridRange';\nexport * from './GridAxisRange';\nexport * from './GridRenderer';\nexport { default as GridTestUtils } from './GridTestUtils';\nexport * from './GridTheme';\nexport { default as GridTheme } from './GridTheme';\nexport type { GridTheme as GridThemeType } from './GridTheme';\nexport * from './GridUtils';\nexport { default as KeyHandler } from './KeyHandler';\nexport { default as MockGridModel } from './MockGridModel';\nexport { default as MockTreeGridModel } from './MockTreeGridModel';\nexport { default as memoizeClear } from './memoizeClear';\nexport { default as StaticDataGridModel } from './StaticDataGridModel';\nexport { default as ViewportDataGridModel } from './ViewportDataGridModel';\nexport { default as MockDataBarGridModel } from './MockDataBarGridModel';\nexport * from './key-handlers';\nexport * from './mouse-handlers';\nexport * from './errors';\nexport * from './EventHandlerResult';\nexport * from './ThemeContext';\nexport { default as CellRenderer } from './CellRenderer';\nexport type { CellRenderType } from './CellRenderer';\nexport { default as TextCellRenderer } from './TextCellRenderer';\nexport { default as DataBarCellRenderer } from './DataBarCellRenderer';\nexport * from './TokenBoxCellRenderer';\nexport * from './GridRendererTypes';\nexport * from './DataBarGridModel';\nexport { default as GridColorUtils } from './GridColorUtils';\nexport type { RGB, Oklab } from './GridColorUtils';\n"],"mappings":"SAASA,OAAO,IAAIC,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQzBD,OAAO,IAAIE,IAAI;AAAA;AAAA;AAAA;AAAA,SAIfF,OAAO,IAAIG,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAMpBH,OAAO,IAAII,aAAa;AAAA;AAAA,SAExBJ,OAAO,IAAIK,SAAS;AAAA;AAAA,SAGpBL,OAAO,IAAIM,UAAU;AAAA,SACrBN,OAAO,IAAIO,aAAa;AAAA,SACxBP,OAAO,IAAIQ,iBAAiB;AAAA,SAC5BR,OAAO,IAAIS,YAAY;AAAA,SACvBT,OAAO,IAAIU,mBAAmB;AAAA,SAC9BV,OAAO,IAAIW,qBAAqB;AAAA,SAChCX,OAAO,IAAIY,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAM/BZ,OAAO,IAAIa,YAAY;AAAA,SAEvBb,OAAO,IAAIc,gBAAgB;AAAA,SAC3Bd,OAAO,IAAIe,mBAAmB;AAAA;AAAA;AAAA;AAAA,SAI9Bf,OAAO,IAAIgB,cAAc","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"EditKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/EditKeyHandler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,OAAO,UAAU,EAAE,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEnE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,cAAM,cAAe,SAAQ,UAAU;IACrC,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;CA0CjE;AAED,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"EditKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/EditKeyHandler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,OAAO,UAAU,EAAE,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEnE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,cAAM,cAAe,SAAQ,UAAU;IACrC,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;CAiEjE;AAED,eAAe,cAAc,CAAC"}
@@ -12,28 +12,49 @@ class EditKeyHandler extends KeyHandler {
12
12
  var _grid$state = grid.state,
13
13
  cursorColumn = _grid$state.cursorColumn,
14
14
  cursorRow = _grid$state.cursorRow;
15
- if (cursorColumn == null || cursorRow == null || !isEditableGridModel(model) || !model.isEditableRange(GridRange.makeCell(cursorColumn, cursorRow))) {
15
+ if (cursorColumn == null || cursorRow == null || !isEditableGridModel(model)) {
16
16
  return false;
17
17
  }
18
- var column = cursorColumn;
19
- var row = cursorRow;
20
- if (column == null || row == null) {
18
+ var modelColumn;
19
+ var modelRow;
20
+ try {
21
+ modelColumn = grid.getModelColumn(cursorColumn);
22
+ modelRow = grid.getModelRow(cursorRow);
23
+ } catch (_unused) {
24
+ return false;
25
+ }
26
+ if (!model.isEditableRange(GridRange.makeCell(modelColumn, modelRow))) {
21
27
  return false;
22
28
  }
23
29
  if (event.key.length === 1) {
24
- grid.startEditing(column, row, true, [1, 1], event.key);
30
+ // If the renderer for this cell's restriction type preserves the existing
31
+ // value on keystroke (e.g. a dropdown), open the editor without replacing.
32
+ var cellInputRendererRegistry = grid.props.cellInputRendererRegistry;
33
+ var restrictions = model.getColumnRestrictions(modelColumn);
34
+ if (restrictions.length === 1) {
35
+ var renderer = cellInputRendererRegistry === null || cellInputRendererRegistry === void 0 ? void 0 : cellInputRendererRegistry.get(restrictions[0].type);
36
+ if ((renderer === null || renderer === void 0 ? void 0 : renderer.preservesExistingValue) === true) {
37
+ grid.startEditing(cursorColumn, cursorRow);
38
+ return true;
39
+ }
40
+ }
41
+ grid.startEditing(cursorColumn, cursorRow, true, [1, 1], event.key);
25
42
  return true;
26
43
  }
27
44
  if (event.key === 'F2') {
28
- grid.startEditing(column, row);
45
+ grid.startEditing(cursorColumn, cursorRow);
46
+ return true;
47
+ }
48
+ if (event.key === 'Enter') {
49
+ grid.startEditing(cursorColumn, cursorRow);
29
50
  return true;
30
51
  }
31
52
  if (event.key === 'Backspace') {
32
- grid.startEditing(column, row, true, undefined, '');
53
+ grid.startEditing(cursorColumn, cursorRow, true, undefined, '');
33
54
  return true;
34
55
  }
35
56
  if (event.key === 'Delete') {
36
- grid.setValueForCell(column, row, '');
57
+ grid.setValueForCell(cursorColumn, cursorRow, '');
37
58
  return true;
38
59
  }
39
60
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"EditKeyHandler.js","names":["GridUtils","GridRange","KeyHandler","isEditableGridModel","EditKeyHandler","onDown","event","grid","isModifierKeyDown","model","props","_grid$state","state","cursorColumn","cursorRow","isEditableRange","makeCell","column","row","key","length","startEditing","undefined","setValueForCell"],"sources":["../../src/key-handlers/EditKeyHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport GridUtils from '../GridUtils';\nimport type Grid from '../Grid';\nimport GridRange from '../GridRange';\nimport KeyHandler, { type GridKeyboardEvent } from '../KeyHandler';\nimport { isEditableGridModel } from '../EditableGridModel';\nimport { type EventHandlerResult } from '../EventHandlerResult';\n\nclass EditKeyHandler extends KeyHandler {\n onDown(event: GridKeyboardEvent, grid: Grid): EventHandlerResult {\n if (GridUtils.isModifierKeyDown(event)) {\n return false;\n }\n\n const { model } = grid.props;\n const { cursorColumn, cursorRow } = grid.state;\n if (\n cursorColumn == null ||\n cursorRow == null ||\n !isEditableGridModel(model) ||\n !model.isEditableRange(GridRange.makeCell(cursorColumn, cursorRow))\n ) {\n return false;\n }\n const column: number | null = cursorColumn;\n const row: number | null = cursorRow;\n if (column == null || row == null) {\n return false;\n }\n\n if (event.key.length === 1) {\n grid.startEditing(column, row, true, [1, 1], event.key);\n return true;\n }\n\n if (event.key === 'F2') {\n grid.startEditing(column, row);\n return true;\n }\n\n if (event.key === 'Backspace') {\n grid.startEditing(column, row, true, undefined, '');\n return true;\n }\n\n if (event.key === 'Delete') {\n grid.setValueForCell(column, row, '');\n return true;\n }\n return false;\n }\n}\n\nexport default EditKeyHandler;\n"],"mappings":"AAAA;AAAA,OACOA,SAAS;AAAA,OAETC,SAAS;AAAA,OACTC,UAAU;AAAA,SACRC,mBAAmB;AAG5B,MAAMC,cAAc,SAASF,UAAU,CAAC;EACtCG,MAAMA,CAACC,KAAwB,EAAEC,IAAU,EAAsB;IAC/D,IAAIP,SAAS,CAACQ,iBAAiB,CAACF,KAAK,CAAC,EAAE;MACtC,OAAO,KAAK;IACd;IAEA,IAAQG,KAAK,GAAKF,IAAI,CAACG,KAAK,CAApBD,KAAK;IACb,IAAAE,WAAA,GAAoCJ,IAAI,CAACK,KAAK;MAAtCC,YAAY,GAAAF,WAAA,CAAZE,YAAY;MAAEC,SAAS,GAAAH,WAAA,CAATG,SAAS;IAC/B,IACED,YAAY,IAAI,IAAI,IACpBC,SAAS,IAAI,IAAI,IACjB,CAACX,mBAAmB,CAACM,KAAK,CAAC,IAC3B,CAACA,KAAK,CAACM,eAAe,CAACd,SAAS,CAACe,QAAQ,CAACH,YAAY,EAAEC,SAAS,CAAC,CAAC,EACnE;MACA,OAAO,KAAK;IACd;IACA,IAAMG,MAAqB,GAAGJ,YAAY;IAC1C,IAAMK,GAAkB,GAAGJ,SAAS;IACpC,IAAIG,MAAM,IAAI,IAAI,IAAIC,GAAG,IAAI,IAAI,EAAE;MACjC,OAAO,KAAK;IACd;IAEA,IAAIZ,KAAK,CAACa,GAAG,CAACC,MAAM,KAAK,CAAC,EAAE;MAC1Bb,IAAI,CAACc,YAAY,CAACJ,MAAM,EAAEC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAEZ,KAAK,CAACa,GAAG,CAAC;MACvD,OAAO,IAAI;IACb;IAEA,IAAIb,KAAK,CAACa,GAAG,KAAK,IAAI,EAAE;MACtBZ,IAAI,CAACc,YAAY,CAACJ,MAAM,EAAEC,GAAG,CAAC;MAC9B,OAAO,IAAI;IACb;IAEA,IAAIZ,KAAK,CAACa,GAAG,KAAK,WAAW,EAAE;MAC7BZ,IAAI,CAACc,YAAY,CAACJ,MAAM,EAAEC,GAAG,EAAE,IAAI,EAAEI,SAAS,EAAE,EAAE,CAAC;MACnD,OAAO,IAAI;IACb;IAEA,IAAIhB,KAAK,CAACa,GAAG,KAAK,QAAQ,EAAE;MAC1BZ,IAAI,CAACgB,eAAe,CAACN,MAAM,EAAEC,GAAG,EAAE,EAAE,CAAC;MACrC,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;AACF;AAEA,eAAed,cAAc","ignoreList":[]}
1
+ {"version":3,"file":"EditKeyHandler.js","names":["GridUtils","GridRange","KeyHandler","isEditableGridModel","EditKeyHandler","onDown","event","grid","isModifierKeyDown","model","props","_grid$state","state","cursorColumn","cursorRow","modelColumn","modelRow","getModelColumn","getModelRow","_unused","isEditableRange","makeCell","key","length","cellInputRendererRegistry","restrictions","getColumnRestrictions","renderer","get","type","preservesExistingValue","startEditing","undefined","setValueForCell"],"sources":["../../src/key-handlers/EditKeyHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport GridUtils from '../GridUtils';\nimport type Grid from '../Grid';\nimport GridRange from '../GridRange';\nimport KeyHandler, { type GridKeyboardEvent } from '../KeyHandler';\nimport { isEditableGridModel } from '../EditableGridModel';\nimport { type EventHandlerResult } from '../EventHandlerResult';\n\nclass EditKeyHandler extends KeyHandler {\n onDown(event: GridKeyboardEvent, grid: Grid): EventHandlerResult {\n if (GridUtils.isModifierKeyDown(event)) {\n return false;\n }\n\n const { model } = grid.props;\n const { cursorColumn, cursorRow } = grid.state;\n if (\n cursorColumn == null ||\n cursorRow == null ||\n !isEditableGridModel(model)\n ) {\n return false;\n }\n\n let modelColumn: number;\n let modelRow: number;\n try {\n modelColumn = grid.getModelColumn(cursorColumn);\n modelRow = grid.getModelRow(cursorRow);\n } catch {\n return false;\n }\n\n if (!model.isEditableRange(GridRange.makeCell(modelColumn, modelRow))) {\n return false;\n }\n\n if (event.key.length === 1) {\n // If the renderer for this cell's restriction type preserves the existing\n // value on keystroke (e.g. a dropdown), open the editor without replacing.\n const { cellInputRendererRegistry } = grid.props;\n const restrictions = model.getColumnRestrictions(modelColumn);\n if (restrictions.length === 1) {\n const renderer = cellInputRendererRegistry?.get(restrictions[0].type);\n if (renderer?.preservesExistingValue === true) {\n grid.startEditing(cursorColumn, cursorRow);\n return true;\n }\n }\n grid.startEditing(cursorColumn, cursorRow, true, [1, 1], event.key);\n return true;\n }\n\n if (event.key === 'F2') {\n grid.startEditing(cursorColumn, cursorRow);\n return true;\n }\n\n if (event.key === 'Enter') {\n grid.startEditing(cursorColumn, cursorRow);\n return true;\n }\n\n if (event.key === 'Backspace') {\n grid.startEditing(cursorColumn, cursorRow, true, undefined, '');\n return true;\n }\n\n if (event.key === 'Delete') {\n grid.setValueForCell(cursorColumn, cursorRow, '');\n return true;\n }\n return false;\n }\n}\n\nexport default EditKeyHandler;\n"],"mappings":"AAAA;AAAA,OACOA,SAAS;AAAA,OAETC,SAAS;AAAA,OACTC,UAAU;AAAA,SACRC,mBAAmB;AAG5B,MAAMC,cAAc,SAASF,UAAU,CAAC;EACtCG,MAAMA,CAACC,KAAwB,EAAEC,IAAU,EAAsB;IAC/D,IAAIP,SAAS,CAACQ,iBAAiB,CAACF,KAAK,CAAC,EAAE;MACtC,OAAO,KAAK;IACd;IAEA,IAAQG,KAAK,GAAKF,IAAI,CAACG,KAAK,CAApBD,KAAK;IACb,IAAAE,WAAA,GAAoCJ,IAAI,CAACK,KAAK;MAAtCC,YAAY,GAAAF,WAAA,CAAZE,YAAY;MAAEC,SAAS,GAAAH,WAAA,CAATG,SAAS;IAC/B,IACED,YAAY,IAAI,IAAI,IACpBC,SAAS,IAAI,IAAI,IACjB,CAACX,mBAAmB,CAACM,KAAK,CAAC,EAC3B;MACA,OAAO,KAAK;IACd;IAEA,IAAIM,WAAmB;IACvB,IAAIC,QAAgB;IACpB,IAAI;MACFD,WAAW,GAAGR,IAAI,CAACU,cAAc,CAACJ,YAAY,CAAC;MAC/CG,QAAQ,GAAGT,IAAI,CAACW,WAAW,CAACJ,SAAS,CAAC;IACxC,CAAC,CAAC,OAAAK,OAAA,EAAM;MACN,OAAO,KAAK;IACd;IAEA,IAAI,CAACV,KAAK,CAACW,eAAe,CAACnB,SAAS,CAACoB,QAAQ,CAACN,WAAW,EAAEC,QAAQ,CAAC,CAAC,EAAE;MACrE,OAAO,KAAK;IACd;IAEA,IAAIV,KAAK,CAACgB,GAAG,CAACC,MAAM,KAAK,CAAC,EAAE;MAC1B;MACA;MACA,IAAQC,yBAAyB,GAAKjB,IAAI,CAACG,KAAK,CAAxCc,yBAAyB;MACjC,IAAMC,YAAY,GAAGhB,KAAK,CAACiB,qBAAqB,CAACX,WAAW,CAAC;MAC7D,IAAIU,YAAY,CAACF,MAAM,KAAK,CAAC,EAAE;QAC7B,IAAMI,QAAQ,GAAGH,yBAAyB,aAAzBA,yBAAyB,uBAAzBA,yBAAyB,CAAEI,GAAG,CAACH,YAAY,CAAC,CAAC,CAAC,CAACI,IAAI,CAAC;QACrE,IAAI,CAAAF,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEG,sBAAsB,MAAK,IAAI,EAAE;UAC7CvB,IAAI,CAACwB,YAAY,CAAClB,YAAY,EAAEC,SAAS,CAAC;UAC1C,OAAO,IAAI;QACb;MACF;MACAP,IAAI,CAACwB,YAAY,CAAClB,YAAY,EAAEC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAER,KAAK,CAACgB,GAAG,CAAC;MACnE,OAAO,IAAI;IACb;IAEA,IAAIhB,KAAK,CAACgB,GAAG,KAAK,IAAI,EAAE;MACtBf,IAAI,CAACwB,YAAY,CAAClB,YAAY,EAAEC,SAAS,CAAC;MAC1C,OAAO,IAAI;IACb;IAEA,IAAIR,KAAK,CAACgB,GAAG,KAAK,OAAO,EAAE;MACzBf,IAAI,CAACwB,YAAY,CAAClB,YAAY,EAAEC,SAAS,CAAC;MAC1C,OAAO,IAAI;IACb;IAEA,IAAIR,KAAK,CAACgB,GAAG,KAAK,WAAW,EAAE;MAC7Bf,IAAI,CAACwB,YAAY,CAAClB,YAAY,EAAEC,SAAS,EAAE,IAAI,EAAEkB,SAAS,EAAE,EAAE,CAAC;MAC/D,OAAO,IAAI;IACb;IAEA,IAAI1B,KAAK,CAACgB,GAAG,KAAK,QAAQ,EAAE;MAC1Bf,IAAI,CAAC0B,eAAe,CAACpB,YAAY,EAAEC,SAAS,EAAE,EAAE,CAAC;MACjD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;AACF;AAEA,eAAeV,cAAc","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"PasteKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/PasteKeyHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,OAAO,UAAU,EAAE,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEnE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,EAAE,EAAE,CAevE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,EAAE,CAW5E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,EAAE,CASpE;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,GACnB,MAAM,GAAG,MAAM,EAAE,EAAE,GAAG,IAAI,CAmC5B;AAED;;GAEG;AACH,cAAM,eAAgB,SAAQ,UAAU;IACtC,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;CAwDjE;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"PasteKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/PasteKeyHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,OAAO,UAAU,EAAE,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEnE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,EAAE,EAAE,CAevE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,EAAE,CAW5E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,EAAE,CAcpE;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,GACnB,MAAM,GAAG,MAAM,EAAE,EAAE,GAAG,IAAI,CAmC5B;AAED;;GAEG;AACH,cAAM,eAAgB,SAAQ,UAAU;IACtC,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;CAwDjE;AAED,eAAe,eAAe,CAAC"}
@@ -43,7 +43,12 @@ export function parseValueFromNodes(nodes) {
43
43
  return result;
44
44
  }
45
45
  export function parseValueFromText(text) {
46
- var rows = text.trim().split('\n').map(row => row.split('\t'));
46
+ var rows = text
47
+ // Normalize Windows (\r\n) and old Mac (\r) line endings to \n. Some
48
+ // clipboard sources (e.g. Excel on Windows via navigator.clipboard.readText)
49
+ // preserve carriage returns, which would otherwise leave stray \r
50
+ // characters on each row's final cell and produce a trailing empty row.
51
+ .replace(/\r\n?/g, '\n').trim().split('\n').map(row => row.split('\t'));
47
52
  if (rows.length === 1 && rows[0].length === 1) {
48
53
  return rows[0][0];
49
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PasteKeyHandler.js","names":["GridUtils","KeyHandler","parseValueFromTable","table","data","rows","querySelectorAll","r","length","row","cells","rowData","c","_cell$textContent$tri","_cell$textContent","cell","push","textContent","trim","parseValueFromNodes","nodes","result","forEach","node","_node$textContent","text","split","parseValueFromText","map","parseValueFromElement","element","_element$textContent$","_element$textContent","querySelector","childNodes","hasTabChar","includes","hasFirefoxTab","PasteKeyHandler","onDown","event","grid","key","isModifierKeyDown","dummyInput","document","createElement","body","appendChild","setAttribute","cleanup","removeEventListener","pasteListener","inputListener","remove","focus","plainText","e","_clipboardEvent$clipb","_clipboardEvent$clipb2","clipboardEvent","clipboardData","getData","_ref","value","pasteValue","addEventListener","preventDefault","stopPropagation"],"sources":["../../src/key-handlers/PasteKeyHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport { type EventHandlerResult } from '../EventHandlerResult';\nimport type Grid from '../Grid';\nimport GridUtils from '../GridUtils';\nimport KeyHandler, { type GridKeyboardEvent } from '../KeyHandler';\n\n/**\n * Parse out data from an HTML table. Currently does not support colspan/rowspan\n * @param table HTML Table\n * @returns A two dimensional array with the data found in the table\n */\nexport function parseValueFromTable(table: HTMLTableElement): string[][] {\n const data = [];\n const rows = table.querySelectorAll('tr');\n for (let r = 0; r < rows.length; r += 1) {\n const row = rows[r];\n const cells = row.querySelectorAll('td');\n const rowData = [];\n for (let c = 0; c < cells.length; c += 1) {\n const cell = cells[c];\n rowData.push(cell.textContent?.trim() ?? '');\n }\n data.push(rowData);\n }\n\n return data;\n}\n\n/**\n * Parses out a table of data from HTML elements. Treats each element as one rows.\n * Filters out blank rows.\n * @param rows The elements to parse out\n * @returns A string table of data\n */\nexport function parseValueFromNodes(nodes: NodeListOf<ChildNode>): string[][] {\n const result = [] as string[][];\n nodes.forEach(node => {\n const text = node.textContent ?? '';\n if (text.length > 0) {\n // When Chrome pastes a table from text, it preserves the tab characters\n // In Firefox, it breaks it into a combination of non-breaking spaces and spaces\n result.push(text.split(/\\t|\\u00a0\\u00a0\\u00a0 /));\n }\n });\n return result;\n}\n\nexport function parseValueFromText(text: string): string | string[][] {\n const rows = text\n .trim()\n .split('\\n')\n .map(row => row.split('\\t'));\n if (rows.length === 1 && rows[0].length === 1) {\n return rows[0][0];\n }\n return rows;\n}\n\nexport function parseValueFromElement(\n element: HTMLElement\n): string | string[][] | null {\n // Check first if there's an HTML table element that we can use\n const table = element.querySelector('table');\n if (table != null) {\n return parseValueFromTable(table);\n }\n\n // Otherwise check if there's any text content at all\n const text = element.textContent?.trim() ?? '';\n if (text.length > 0) {\n // If there's text content, try and parse out a table from the child nodes. Each node is a row.\n // If there's only one row and it doesn't contain a tab, then just treat it as a regular value\n const { childNodes } = element;\n const hasTabChar = text.includes('\\t');\n const hasFirefoxTab = text.includes('\\u00a0\\u00a0\\u00a0 ');\n if (\n hasTabChar &&\n childNodes.length !== 0 &&\n (childNodes.length === 1 ||\n (childNodes.length > 1 &&\n (childNodes[0].textContent == null ||\n !childNodes[0].textContent.includes('\\t'))))\n ) {\n // When Chrome pastes a single row, it gets split into multiple child nodes\n // If we check the first child node and it doesn't have a tab character, but the full element text content does, then\n // just parse the text out separated by the tab chars\n return text.split('\\n').map(row => row.split('\\t'));\n }\n if (childNodes.length > 1 || hasFirefoxTab) {\n return parseValueFromNodes(element.childNodes);\n }\n // If there's no tabs or no multiple rows, than just treat it as one value\n return text;\n }\n return null;\n}\n\n/**\n * Handles the paste key combination\n */\nclass PasteKeyHandler extends KeyHandler {\n onDown(event: GridKeyboardEvent, grid: Grid): EventHandlerResult {\n switch (event.key) {\n case 'v':\n if (GridUtils.isModifierKeyDown(event)) {\n // Chrome doesn't allow the paste event on canvas elements\n // Instead, we capture the ctrl+v keydown, then do this to capture the input\n const dummyInput = document.createElement('div');\n document.body.appendChild(dummyInput);\n dummyInput.setAttribute('contenteditable', 'true');\n\n // Give it invisible styling\n dummyInput.setAttribute(\n 'style',\n 'clip-path: \"inset(50%)\"; height: 1px; width: 1px; margin: -1px; overflow: hidden; padding 0; position: absolute;'\n );\n\n const cleanup = (): void => {\n dummyInput.removeEventListener('paste', pasteListener);\n dummyInput.removeEventListener('input', inputListener);\n dummyInput.remove();\n grid.focus();\n };\n\n let plainText = '';\n\n // Capture text/plain from the clipboard during the paste event.\n // HTML element parsing is used as a fallback if text/plain is unavailable.\n const pasteListener = (e: Event): void => {\n const clipboardEvent = e as ClipboardEvent;\n plainText =\n clipboardEvent.clipboardData?.getData('text/plain') ?? '';\n };\n\n const inputListener = (): void => {\n cleanup();\n const value =\n (plainText.length > 0 ? parseValueFromText(plainText) : null) ??\n parseValueFromElement(dummyInput);\n if (value != null) {\n grid.pasteValue(value);\n }\n };\n\n dummyInput.addEventListener('paste', pasteListener);\n dummyInput.addEventListener('input', inputListener);\n\n // Focus the element so it receives the paste event\n dummyInput.focus();\n\n // Don't block the paste event from updating our dummy input\n return { preventDefault: false, stopPropagation: true };\n }\n break;\n }\n return false;\n }\n}\n\nexport default PasteKeyHandler;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"PasteKeyHandler.js","names":["GridUtils","KeyHandler","parseValueFromTable","table","data","rows","querySelectorAll","r","length","row","cells","rowData","c","_cell$textContent$tri","_cell$textContent","cell","push","textContent","trim","parseValueFromNodes","nodes","result","forEach","node","_node$textContent","text","split","parseValueFromText","replace","map","parseValueFromElement","element","_element$textContent$","_element$textContent","querySelector","childNodes","hasTabChar","includes","hasFirefoxTab","PasteKeyHandler","onDown","event","grid","key","isModifierKeyDown","dummyInput","document","createElement","body","appendChild","setAttribute","cleanup","removeEventListener","pasteListener","inputListener","remove","focus","plainText","e","_clipboardEvent$clipb","_clipboardEvent$clipb2","clipboardEvent","clipboardData","getData","_ref","value","pasteValue","addEventListener","preventDefault","stopPropagation"],"sources":["../../src/key-handlers/PasteKeyHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport { type EventHandlerResult } from '../EventHandlerResult';\nimport type Grid from '../Grid';\nimport GridUtils from '../GridUtils';\nimport KeyHandler, { type GridKeyboardEvent } from '../KeyHandler';\n\n/**\n * Parse out data from an HTML table. Currently does not support colspan/rowspan\n * @param table HTML Table\n * @returns A two dimensional array with the data found in the table\n */\nexport function parseValueFromTable(table: HTMLTableElement): string[][] {\n const data = [];\n const rows = table.querySelectorAll('tr');\n for (let r = 0; r < rows.length; r += 1) {\n const row = rows[r];\n const cells = row.querySelectorAll('td');\n const rowData = [];\n for (let c = 0; c < cells.length; c += 1) {\n const cell = cells[c];\n rowData.push(cell.textContent?.trim() ?? '');\n }\n data.push(rowData);\n }\n\n return data;\n}\n\n/**\n * Parses out a table of data from HTML elements. Treats each element as one rows.\n * Filters out blank rows.\n * @param rows The elements to parse out\n * @returns A string table of data\n */\nexport function parseValueFromNodes(nodes: NodeListOf<ChildNode>): string[][] {\n const result = [] as string[][];\n nodes.forEach(node => {\n const text = node.textContent ?? '';\n if (text.length > 0) {\n // When Chrome pastes a table from text, it preserves the tab characters\n // In Firefox, it breaks it into a combination of non-breaking spaces and spaces\n result.push(text.split(/\\t|\\u00a0\\u00a0\\u00a0 /));\n }\n });\n return result;\n}\n\nexport function parseValueFromText(text: string): string | string[][] {\n const rows = text\n // Normalize Windows (\\r\\n) and old Mac (\\r) line endings to \\n. Some\n // clipboard sources (e.g. Excel on Windows via navigator.clipboard.readText)\n // preserve carriage returns, which would otherwise leave stray \\r\n // characters on each row's final cell and produce a trailing empty row.\n .replace(/\\r\\n?/g, '\\n')\n .trim()\n .split('\\n')\n .map(row => row.split('\\t'));\n if (rows.length === 1 && rows[0].length === 1) {\n return rows[0][0];\n }\n return rows;\n}\n\nexport function parseValueFromElement(\n element: HTMLElement\n): string | string[][] | null {\n // Check first if there's an HTML table element that we can use\n const table = element.querySelector('table');\n if (table != null) {\n return parseValueFromTable(table);\n }\n\n // Otherwise check if there's any text content at all\n const text = element.textContent?.trim() ?? '';\n if (text.length > 0) {\n // If there's text content, try and parse out a table from the child nodes. Each node is a row.\n // If there's only one row and it doesn't contain a tab, then just treat it as a regular value\n const { childNodes } = element;\n const hasTabChar = text.includes('\\t');\n const hasFirefoxTab = text.includes('\\u00a0\\u00a0\\u00a0 ');\n if (\n hasTabChar &&\n childNodes.length !== 0 &&\n (childNodes.length === 1 ||\n (childNodes.length > 1 &&\n (childNodes[0].textContent == null ||\n !childNodes[0].textContent.includes('\\t'))))\n ) {\n // When Chrome pastes a single row, it gets split into multiple child nodes\n // If we check the first child node and it doesn't have a tab character, but the full element text content does, then\n // just parse the text out separated by the tab chars\n return text.split('\\n').map(row => row.split('\\t'));\n }\n if (childNodes.length > 1 || hasFirefoxTab) {\n return parseValueFromNodes(element.childNodes);\n }\n // If there's no tabs or no multiple rows, than just treat it as one value\n return text;\n }\n return null;\n}\n\n/**\n * Handles the paste key combination\n */\nclass PasteKeyHandler extends KeyHandler {\n onDown(event: GridKeyboardEvent, grid: Grid): EventHandlerResult {\n switch (event.key) {\n case 'v':\n if (GridUtils.isModifierKeyDown(event)) {\n // Chrome doesn't allow the paste event on canvas elements\n // Instead, we capture the ctrl+v keydown, then do this to capture the input\n const dummyInput = document.createElement('div');\n document.body.appendChild(dummyInput);\n dummyInput.setAttribute('contenteditable', 'true');\n\n // Give it invisible styling\n dummyInput.setAttribute(\n 'style',\n 'clip-path: \"inset(50%)\"; height: 1px; width: 1px; margin: -1px; overflow: hidden; padding 0; position: absolute;'\n );\n\n const cleanup = (): void => {\n dummyInput.removeEventListener('paste', pasteListener);\n dummyInput.removeEventListener('input', inputListener);\n dummyInput.remove();\n grid.focus();\n };\n\n let plainText = '';\n\n // Capture text/plain from the clipboard during the paste event.\n // HTML element parsing is used as a fallback if text/plain is unavailable.\n const pasteListener = (e: Event): void => {\n const clipboardEvent = e as ClipboardEvent;\n plainText =\n clipboardEvent.clipboardData?.getData('text/plain') ?? '';\n };\n\n const inputListener = (): void => {\n cleanup();\n const value =\n (plainText.length > 0 ? parseValueFromText(plainText) : null) ??\n parseValueFromElement(dummyInput);\n if (value != null) {\n grid.pasteValue(value);\n }\n };\n\n dummyInput.addEventListener('paste', pasteListener);\n dummyInput.addEventListener('input', inputListener);\n\n // Focus the element so it receives the paste event\n dummyInput.focus();\n\n // Don't block the paste event from updating our dummy input\n return { preventDefault: false, stopPropagation: true };\n }\n break;\n }\n return false;\n }\n}\n\nexport default PasteKeyHandler;\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  export { default as SelectionKeyHandler } from './SelectionKeyHandler';
2
2
  export { default as TreeKeyHandler } from './TreeKeyHandler';
3
3
  export { default as EditKeyHandler } from './EditKeyHandler';
4
- export { default as PasteKeyHandler } from './PasteKeyHandler';
4
+ export { default as PasteKeyHandler, parseValueFromElement, parseValueFromNodes, parseValueFromTable, parseValueFromText, } from './PasteKeyHandler';
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/key-handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/key-handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EACL,OAAO,IAAI,eAAe,EAC1B,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export { default as SelectionKeyHandler } from "./SelectionKeyHandler.js";
2
2
  export { default as TreeKeyHandler } from "./TreeKeyHandler.js";
3
3
  export { default as EditKeyHandler } from "./EditKeyHandler.js";
4
- export { default as PasteKeyHandler } from "./PasteKeyHandler.js";
4
+ export { default as PasteKeyHandler, parseValueFromElement, parseValueFromNodes, parseValueFromTable, parseValueFromText } from "./PasteKeyHandler.js";
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["default","SelectionKeyHandler","TreeKeyHandler","EditKeyHandler","PasteKeyHandler"],"sources":["../../src/key-handlers/index.ts"],"sourcesContent":["export { default as SelectionKeyHandler } from './SelectionKeyHandler';\nexport { default as TreeKeyHandler } from './TreeKeyHandler';\nexport { default as EditKeyHandler } from './EditKeyHandler';\nexport { default as PasteKeyHandler } from './PasteKeyHandler';\n"],"mappings":"SAASA,OAAO,IAAIC,mBAAmB;AAAA,SAC9BD,OAAO,IAAIE,cAAc;AAAA,SACzBF,OAAO,IAAIG,cAAc;AAAA,SACzBH,OAAO,IAAII,eAAe","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["default","SelectionKeyHandler","TreeKeyHandler","EditKeyHandler","PasteKeyHandler","parseValueFromElement","parseValueFromNodes","parseValueFromTable","parseValueFromText"],"sources":["../../src/key-handlers/index.ts"],"sourcesContent":["export { default as SelectionKeyHandler } from './SelectionKeyHandler';\nexport { default as TreeKeyHandler } from './TreeKeyHandler';\nexport { default as EditKeyHandler } from './EditKeyHandler';\nexport {\n default as PasteKeyHandler,\n parseValueFromElement,\n parseValueFromNodes,\n parseValueFromTable,\n parseValueFromText,\n} from './PasteKeyHandler';\n"],"mappings":"SAASA,OAAO,IAAIC,mBAAmB;AAAA,SAC9BD,OAAO,IAAIE,cAAc;AAAA,SACzBF,OAAO,IAAIG,cAAc;AAAA,SAEhCH,OAAO,IAAII,eAAe,EAC1BC,qBAAqB,EACrBC,mBAAmB,EACnBC,mBAAmB,EACnBC,kBAAkB","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/grid",
3
- "version": "1.23.1-alpha-pivot-builder.5e6a5fd.0+5e6a5fd",
3
+ "version": "1.25.0",
4
4
  "description": "Deephaven React grid component",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -31,7 +31,7 @@
31
31
  "*.css"
32
32
  ],
33
33
  "dependencies": {
34
- "@deephaven/utils": "^1.23.1-alpha-pivot-builder.5e6a5fd.0+5e6a5fd",
34
+ "@deephaven/utils": "^1.10.0",
35
35
  "classnames": "^2.3.1",
36
36
  "color-convert": "^2.0.1",
37
37
  "event-target-shim": "^6.0.2",
@@ -43,5 +43,5 @@
43
43
  "publishConfig": {
44
44
  "access": "public"
45
45
  },
46
- "gitHead": "5e6a5fd5dd807416aa31fe5032dd014fed27774a"
46
+ "gitHead": "de176de003d3058c39373cc8390652795b0896d4"
47
47
  }