@deephaven/grid 0.106.1-beta.0 → 0.106.2-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.
- package/dist/GridModel.d.ts.map +1 -1
- package/dist/GridModel.js +2 -0
- package/dist/GridModel.js.map +1 -1
- package/dist/MockTreeGridModel.d.ts.map +1 -1
- package/dist/MockTreeGridModel.js +12 -0
- package/dist/MockTreeGridModel.js.map +1 -1
- package/dist/memoizeClear.d.ts +3 -1
- package/dist/memoizeClear.d.ts.map +1 -1
- package/dist/memoizeClear.js +3 -2
- package/dist/memoizeClear.js.map +1 -1
- package/package.json +3 -3
package/dist/GridModel.d.ts.map
CHANGED
@@ -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
package/dist/GridModel.js.map
CHANGED
@@ -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","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 );\n\n renderTypeForCell(column: ModelIndex, row: ModelIndex): CellRenderType {\n return 'text';\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","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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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"MockTreeGridModel.d.ts","sourceRoot":"","sources":["../src/MockTreeGridModel.ts"],"names":[],"mappings":"AAEA,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,OAAO,KAAK,mBAAmB,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,KAAK,eAAe,GAAG,GAAG,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;AAE1D;;;GAGG;AACH,cAAM,iBAAkB,SAAQ,aAAc,YAAW,mBAAmB;IAC1E,MAAM,CAAC,iBAAiB,SAAc;IAEtC,MAAM,CAAC,oBAAoB,SAAO;IAElC,sHAAsH;IACtH,MAAM,CAAC,8BAA8B,SAAQ;IAE7C,MAAM,CAAC,mBAAmB,SAAM;IAEhC,MAAM,CAAC,SAAS,SAAM;IAEtB,OAAO,CAAC,QAAQ,CAAkB;IAElC,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,QAAQ,CAAS;gBAEb,EACV,QAA8C,EAC9C,WAAoD,EACpD,QAAoB,EACpB,aAKC,EACD,QAAsC,GACvC,GAAE;QACD,QAAQ,CAAC,EAAE,eAAe,CAAC;QAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACd;IAQN,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,MAAM;IAIxD,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM;IAIzC,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO;IAItC,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED,IAAI,oBAAoB,IAAI,OAAO,CAElC;IAED,IAAI,sBAAsB,IAAI,MAAM,CAEnC;IAED,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO;IAIzC,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO;IAIvC,cAAc,CACZ,GAAG,EAAE,UAAU,EACf,UAAU,EAAE,OAAO,EACnB,iBAAiB,UAAQ,GACxB,IAAI;IA8BP,SAAS,IAAI,IAAI;IAIjB,WAAW,IAAI,IAAI;IAInB,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM;IAIpC;;;;OAIG;IACH,uBAAuB,cAET,eAAe,OACpB,UAAU,KACd;QAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,kDAFxC,eAAe,OACpB,UAAU,KACd;QAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,
|
1
|
+
{"version":3,"file":"MockTreeGridModel.d.ts","sourceRoot":"","sources":["../src/MockTreeGridModel.ts"],"names":[],"mappings":"AAEA,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,OAAO,KAAK,mBAAmB,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,KAAK,eAAe,GAAG,GAAG,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;AAE1D;;;GAGG;AACH,cAAM,iBAAkB,SAAQ,aAAc,YAAW,mBAAmB;IAC1E,MAAM,CAAC,iBAAiB,SAAc;IAEtC,MAAM,CAAC,oBAAoB,SAAO;IAElC,sHAAsH;IACtH,MAAM,CAAC,8BAA8B,SAAQ;IAE7C,MAAM,CAAC,mBAAmB,SAAM;IAEhC,MAAM,CAAC,SAAS,SAAM;IAEtB,OAAO,CAAC,QAAQ,CAAkB;IAElC,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,QAAQ,CAAS;gBAEb,EACV,QAA8C,EAC9C,WAAoD,EACpD,QAAoB,EACpB,aAKC,EACD,QAAsC,GACvC,GAAE;QACD,QAAQ,CAAC,EAAE,eAAe,CAAC;QAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACd;IAQN,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,MAAM;IAIxD,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM;IAIzC,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO;IAItC,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED,IAAI,oBAAoB,IAAI,OAAO,CAElC;IAED,IAAI,sBAAsB,IAAI,MAAM,CAEnC;IAED,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO;IAIzC,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO;IAIvC,cAAc,CACZ,GAAG,EAAE,UAAU,EACf,UAAU,EAAE,OAAO,EACnB,iBAAiB,UAAQ,GACxB,IAAI;IA8BP,SAAS,IAAI,IAAI;IAIjB,WAAW,IAAI,IAAI;IAInB,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM;IAIpC;;;;OAIG;IACH,uBAAuB,cAET,eAAe,OACpB,UAAU,KACd;QAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,kDAFxC,eAAe,OACpB,UAAU,KACd;QAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,EAsBpD;IAEF,yBAAyB,cACZ,eAAe,OAAO,UAAU,KAAG,MAAM,kDAAzC,eAAe,OAAO,UAAU,KAAG,MAAM,EAapD;IAEF,oBAAoB,cAEN,eAAe,UACjB,UAAU,OACb,UAAU,KACd,MAAM,kDAHG,eAAe,UACjB,UAAU,OACb,UAAU,KACd,MAAM,EAaT;IAEF,wBAAwB,cACX,eAAe,OAAO,UAAU,YAAY,MAAM,KAAG,OAAO,kDAA5D,eAAe,OAAO,UAAU,YAAY,MAAM,KAAG,OAAO,EAMvE;IAEF,sBAAsB,cACT,eAAe,OAAO,UAAU,KAAG,OAAO,kDAA1C,eAAe,OAAO,UAAU,KAAG,OAAO,EAarD;IAEF,oBAAoB,cACP,eAAe,OAAO,UAAU,KAAG,MAAM,kDAAzC,eAAe,OAAO,UAAU,KAAG,MAAM,EAapD;CACH;AAED,eAAe,iBAAiB,CAAC"}
|
@@ -49,6 +49,8 @@ class MockTreeGridModel extends MockGridModel {
|
|
49
49
|
key,
|
50
50
|
offsetRow
|
51
51
|
};
|
52
|
+
}, {
|
53
|
+
max: 10000
|
52
54
|
}));
|
53
55
|
_defineProperty(this, "getCachedTextForRowHeader", memoizeClear((children, row) => {
|
54
56
|
var {
|
@@ -62,6 +64,8 @@ class MockTreeGridModel extends MockGridModel {
|
|
62
64
|
}
|
63
65
|
}
|
64
66
|
return "".concat(offsetRow);
|
67
|
+
}, {
|
68
|
+
max: 10000
|
65
69
|
}));
|
66
70
|
_defineProperty(this, "getCachedTextForCell", memoizeClear((children, column, row) => {
|
67
71
|
var {
|
@@ -75,10 +79,14 @@ class MockTreeGridModel extends MockGridModel {
|
|
75
79
|
}
|
76
80
|
}
|
77
81
|
return "".concat(column, ",").concat(offsetRow);
|
82
|
+
}, {
|
83
|
+
max: 10000
|
78
84
|
}));
|
79
85
|
_defineProperty(this, "getCachedIsRowExpandable", memoizeClear((children, row, maxDepth) => {
|
80
86
|
var depth = this.getCachedDepthForRow(children, row);
|
81
87
|
return depth < maxDepth;
|
88
|
+
}, {
|
89
|
+
max: 10000
|
82
90
|
}));
|
83
91
|
_defineProperty(this, "getCachedIsRowExpanded", memoizeClear((children, row) => {
|
84
92
|
var {
|
@@ -92,6 +100,8 @@ class MockTreeGridModel extends MockGridModel {
|
|
92
100
|
}
|
93
101
|
}
|
94
102
|
return children.has(offsetRow);
|
103
|
+
}, {
|
104
|
+
max: 10000
|
95
105
|
}));
|
96
106
|
_defineProperty(this, "getCachedDepthForRow", memoizeClear((children, row) => {
|
97
107
|
var {
|
@@ -105,6 +115,8 @@ class MockTreeGridModel extends MockGridModel {
|
|
105
115
|
}
|
106
116
|
}
|
107
117
|
return 0;
|
118
|
+
}, {
|
119
|
+
max: 10000
|
108
120
|
}));
|
109
121
|
this.children = _children;
|
110
122
|
this.childRowCount = _childRowCount;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"MockTreeGridModel.js","names":["MockGridModel","memoizeClear","MockTreeGridModel","constructor","rowCount","DEFAULT_ROW_COUNT","columnCount","DEFAULT_COLUMN_COUNT","children","Map","childRowCount","Math","ceil","max","MIN_CHILD_ROW_COUNT","DEFAULT_CHILD_ROW_COUNT_FACTOR","maxDepth","MAX_DEPTH","arguments","length","undefined","_defineProperty","row","key","offsetRow","sortedEntries","sort","a","b","i","childRow","childModel","getCachedModelRowOffset","model","get","concat","textForRowHeader","column","textForCell","depth","getCachedDepthForRow","isRowExpanded","has","depthForRow","getCachedTextForCell","getCachedTextForRowHeader","isRowMovable","hasExpandableRows","isExpandAllAvailable","floatingBottomRowCount","isRowExpandable","getCachedIsRowExpandable","getCachedIsRowExpanded","setRowExpanded","isExpanded","expandDescendants","originalChildRowCount","numRows","delete","child","numColumns","set","expandAll","Error","collapseAll"],"sources":["../src/MockTreeGridModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\nimport MockGridModel from './MockGridModel';\nimport memoizeClear from './memoizeClear';\nimport type ExpandableGridModel from './ExpandableGridModel';\nimport { type ModelIndex } from './GridMetrics';\n\ntype ChildrenTreeMap = Map<ModelIndex, MockTreeGridModel>;\n\n/**\n * A class to mock a tree model so can test out tree models.\n * Whenever a row is expanded, it creates a child model for that row, which can then make a child for those rows, etc.\n */\nclass MockTreeGridModel extends MockGridModel implements ExpandableGridModel {\n static DEFAULT_ROW_COUNT = 1000000000;\n\n static DEFAULT_COLUMN_COUNT = 100;\n\n /** How many rows a child tree should have related to the parent. Eg. if parent has 10000 rows, child will have 100 */\n static DEFAULT_CHILD_ROW_COUNT_FACTOR = 0.01;\n\n static MIN_CHILD_ROW_COUNT = 10;\n\n static MAX_DEPTH = 10;\n\n private children: ChildrenTreeMap;\n\n private childRowCount: number;\n\n private maxDepth: number;\n\n constructor({\n rowCount = MockTreeGridModel.DEFAULT_ROW_COUNT,\n columnCount = MockTreeGridModel.DEFAULT_COLUMN_COUNT,\n children = new Map(),\n childRowCount = Math.ceil(\n Math.max(\n MockTreeGridModel.MIN_CHILD_ROW_COUNT,\n rowCount * MockTreeGridModel.DEFAULT_CHILD_ROW_COUNT_FACTOR\n )\n ),\n maxDepth = MockTreeGridModel.MAX_DEPTH,\n }: {\n children?: ChildrenTreeMap;\n columnCount?: number;\n rowCount?: number;\n childRowCount?: number;\n maxDepth?: number;\n } = {}) {\n super({ rowCount, columnCount });\n\n this.children = children;\n this.childRowCount = childRowCount;\n this.maxDepth = maxDepth;\n }\n\n textForCell(column: ModelIndex, row: ModelIndex): string {\n return this.getCachedTextForCell(this.children, column, row);\n }\n\n textForRowHeader(row: ModelIndex): string {\n return this.getCachedTextForRowHeader(this.children, row);\n }\n\n isRowMovable(row: ModelIndex): boolean {\n return false;\n }\n\n get hasExpandableRows(): boolean {\n return true;\n }\n\n get isExpandAllAvailable(): boolean {\n return false;\n }\n\n get floatingBottomRowCount(): number {\n return 0;\n }\n\n isRowExpandable(row: ModelIndex): boolean {\n return this.getCachedIsRowExpandable(this.children, row, this.maxDepth);\n }\n\n isRowExpanded(row: ModelIndex): boolean {\n return this.getCachedIsRowExpanded(this.children, row);\n }\n\n setRowExpanded(\n row: ModelIndex,\n isExpanded: boolean,\n expandDescendants = false\n ): void {\n const { key, offsetRow } = this.getCachedModelRowOffset(this.children, row);\n\n // We always set a new map so that our memoize functions work properly\n const children = new Map(this.children);\n if (key != null) {\n const model = this.children.get(key);\n if (model !== undefined) {\n const { rowCount: originalChildRowCount } = model;\n model.setRowExpanded(offsetRow, isExpanded, expandDescendants);\n this.numRows += model.rowCount - originalChildRowCount;\n }\n } else if (!isExpanded) {\n const childModel = children.get(offsetRow);\n if (childModel !== undefined) {\n this.numRows -= childModel.rowCount;\n children.delete(offsetRow);\n }\n } else {\n const child = new MockTreeGridModel({\n rowCount: this.childRowCount,\n columnCount: this.numColumns,\n });\n children.set(offsetRow, child);\n this.numRows += child.rowCount;\n }\n\n this.children = children;\n }\n\n expandAll(): void {\n throw new Error('Expand all not implemented.');\n }\n\n collapseAll(): void {\n throw new Error('Collapse all not implemented.');\n }\n\n depthForRow(row: ModelIndex): number {\n return this.getCachedDepthForRow(this.children, row);\n }\n\n /**\n * Returns the map key and the offsetRow given the provided children and row index.\n * If the returned key is null, then this offset row is within this model.\n * Only returning the key instead of the model so that memoize doesn't cache a bunch of the children models after they've been deleted (collapsed).\n */\n getCachedModelRowOffset = memoizeClear(\n (\n children: ChildrenTreeMap,\n row: ModelIndex\n ): { key: ModelIndex | null; offsetRow: ModelIndex } => {\n let key = null;\n let offsetRow = row;\n // Need to iterate through the map in order... sort it first\n const sortedEntries = [...children].sort((a, b) => a[0] - b[0]);\n for (let i = 0; i < sortedEntries.length; i += 1) {\n const [childRow, childModel] = sortedEntries[i];\n if (offsetRow <= childRow) {\n break;\n }\n const childRowCount = childModel.rowCount;\n if (offsetRow <= childRow + childRowCount) {\n key = childRow;\n offsetRow = offsetRow - childRow - 1;\n break;\n }\n offsetRow -= childRowCount;\n }\n\n return { key, offsetRow };\n }\n );\n\n getCachedTextForRowHeader = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex): string => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return `${key}.${model.textForRowHeader(offsetRow)}`;\n }\n }\n\n return `${offsetRow}`;\n }\n );\n\n getCachedTextForCell = memoizeClear(\n (\n children: ChildrenTreeMap,\n column: ModelIndex,\n row: ModelIndex\n ): string => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return `${key}.${model.textForCell(column, offsetRow)}`;\n }\n }\n\n return `${column},${offsetRow}`;\n }\n );\n\n getCachedIsRowExpandable = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex, maxDepth: number): boolean => {\n const depth = this.getCachedDepthForRow(children, row);\n\n return depth < maxDepth;\n }\n );\n\n getCachedIsRowExpanded = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex): boolean => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return model.isRowExpanded(offsetRow);\n }\n }\n\n return children.has(offsetRow);\n }\n );\n\n getCachedDepthForRow = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex): number => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return model.depthForRow(offsetRow) + 1;\n }\n }\n\n return 0;\n }\n );\n}\n\nexport default MockTreeGridModel;\n"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"MockTreeGridModel.js","names":["MockGridModel","memoizeClear","MockTreeGridModel","constructor","rowCount","DEFAULT_ROW_COUNT","columnCount","DEFAULT_COLUMN_COUNT","children","Map","childRowCount","Math","ceil","max","MIN_CHILD_ROW_COUNT","DEFAULT_CHILD_ROW_COUNT_FACTOR","maxDepth","MAX_DEPTH","arguments","length","undefined","_defineProperty","row","key","offsetRow","sortedEntries","sort","a","b","i","childRow","childModel","getCachedModelRowOffset","model","get","concat","textForRowHeader","column","textForCell","depth","getCachedDepthForRow","isRowExpanded","has","depthForRow","getCachedTextForCell","getCachedTextForRowHeader","isRowMovable","hasExpandableRows","isExpandAllAvailable","floatingBottomRowCount","isRowExpandable","getCachedIsRowExpandable","getCachedIsRowExpanded","setRowExpanded","isExpanded","expandDescendants","originalChildRowCount","numRows","delete","child","numColumns","set","expandAll","Error","collapseAll"],"sources":["../src/MockTreeGridModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\nimport MockGridModel from './MockGridModel';\nimport memoizeClear from './memoizeClear';\nimport type ExpandableGridModel from './ExpandableGridModel';\nimport { type ModelIndex } from './GridMetrics';\n\ntype ChildrenTreeMap = Map<ModelIndex, MockTreeGridModel>;\n\n/**\n * A class to mock a tree model so can test out tree models.\n * Whenever a row is expanded, it creates a child model for that row, which can then make a child for those rows, etc.\n */\nclass MockTreeGridModel extends MockGridModel implements ExpandableGridModel {\n static DEFAULT_ROW_COUNT = 1000000000;\n\n static DEFAULT_COLUMN_COUNT = 100;\n\n /** How many rows a child tree should have related to the parent. Eg. if parent has 10000 rows, child will have 100 */\n static DEFAULT_CHILD_ROW_COUNT_FACTOR = 0.01;\n\n static MIN_CHILD_ROW_COUNT = 10;\n\n static MAX_DEPTH = 10;\n\n private children: ChildrenTreeMap;\n\n private childRowCount: number;\n\n private maxDepth: number;\n\n constructor({\n rowCount = MockTreeGridModel.DEFAULT_ROW_COUNT,\n columnCount = MockTreeGridModel.DEFAULT_COLUMN_COUNT,\n children = new Map(),\n childRowCount = Math.ceil(\n Math.max(\n MockTreeGridModel.MIN_CHILD_ROW_COUNT,\n rowCount * MockTreeGridModel.DEFAULT_CHILD_ROW_COUNT_FACTOR\n )\n ),\n maxDepth = MockTreeGridModel.MAX_DEPTH,\n }: {\n children?: ChildrenTreeMap;\n columnCount?: number;\n rowCount?: number;\n childRowCount?: number;\n maxDepth?: number;\n } = {}) {\n super({ rowCount, columnCount });\n\n this.children = children;\n this.childRowCount = childRowCount;\n this.maxDepth = maxDepth;\n }\n\n textForCell(column: ModelIndex, row: ModelIndex): string {\n return this.getCachedTextForCell(this.children, column, row);\n }\n\n textForRowHeader(row: ModelIndex): string {\n return this.getCachedTextForRowHeader(this.children, row);\n }\n\n isRowMovable(row: ModelIndex): boolean {\n return false;\n }\n\n get hasExpandableRows(): boolean {\n return true;\n }\n\n get isExpandAllAvailable(): boolean {\n return false;\n }\n\n get floatingBottomRowCount(): number {\n return 0;\n }\n\n isRowExpandable(row: ModelIndex): boolean {\n return this.getCachedIsRowExpandable(this.children, row, this.maxDepth);\n }\n\n isRowExpanded(row: ModelIndex): boolean {\n return this.getCachedIsRowExpanded(this.children, row);\n }\n\n setRowExpanded(\n row: ModelIndex,\n isExpanded: boolean,\n expandDescendants = false\n ): void {\n const { key, offsetRow } = this.getCachedModelRowOffset(this.children, row);\n\n // We always set a new map so that our memoize functions work properly\n const children = new Map(this.children);\n if (key != null) {\n const model = this.children.get(key);\n if (model !== undefined) {\n const { rowCount: originalChildRowCount } = model;\n model.setRowExpanded(offsetRow, isExpanded, expandDescendants);\n this.numRows += model.rowCount - originalChildRowCount;\n }\n } else if (!isExpanded) {\n const childModel = children.get(offsetRow);\n if (childModel !== undefined) {\n this.numRows -= childModel.rowCount;\n children.delete(offsetRow);\n }\n } else {\n const child = new MockTreeGridModel({\n rowCount: this.childRowCount,\n columnCount: this.numColumns,\n });\n children.set(offsetRow, child);\n this.numRows += child.rowCount;\n }\n\n this.children = children;\n }\n\n expandAll(): void {\n throw new Error('Expand all not implemented.');\n }\n\n collapseAll(): void {\n throw new Error('Collapse all not implemented.');\n }\n\n depthForRow(row: ModelIndex): number {\n return this.getCachedDepthForRow(this.children, row);\n }\n\n /**\n * Returns the map key and the offsetRow given the provided children and row index.\n * If the returned key is null, then this offset row is within this model.\n * Only returning the key instead of the model so that memoize doesn't cache a bunch of the children models after they've been deleted (collapsed).\n */\n getCachedModelRowOffset = memoizeClear(\n (\n children: ChildrenTreeMap,\n row: ModelIndex\n ): { key: ModelIndex | null; offsetRow: ModelIndex } => {\n let key = null;\n let offsetRow = row;\n // Need to iterate through the map in order... sort it first\n const sortedEntries = [...children].sort((a, b) => a[0] - b[0]);\n for (let i = 0; i < sortedEntries.length; i += 1) {\n const [childRow, childModel] = sortedEntries[i];\n if (offsetRow <= childRow) {\n break;\n }\n const childRowCount = childModel.rowCount;\n if (offsetRow <= childRow + childRowCount) {\n key = childRow;\n offsetRow = offsetRow - childRow - 1;\n break;\n }\n offsetRow -= childRowCount;\n }\n\n return { key, offsetRow };\n },\n { max: 10000 }\n );\n\n getCachedTextForRowHeader = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex): string => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return `${key}.${model.textForRowHeader(offsetRow)}`;\n }\n }\n\n return `${offsetRow}`;\n },\n { max: 10000 }\n );\n\n getCachedTextForCell = memoizeClear(\n (\n children: ChildrenTreeMap,\n column: ModelIndex,\n row: ModelIndex\n ): string => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return `${key}.${model.textForCell(column, offsetRow)}`;\n }\n }\n\n return `${column},${offsetRow}`;\n },\n { max: 10000 }\n );\n\n getCachedIsRowExpandable = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex, maxDepth: number): boolean => {\n const depth = this.getCachedDepthForRow(children, row);\n\n return depth < maxDepth;\n },\n { max: 10000 }\n );\n\n getCachedIsRowExpanded = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex): boolean => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return model.isRowExpanded(offsetRow);\n }\n }\n\n return children.has(offsetRow);\n },\n { max: 10000 }\n );\n\n getCachedDepthForRow = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex): number => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return model.depthForRow(offsetRow) + 1;\n }\n }\n\n return 0;\n },\n { max: 10000 }\n );\n}\n\nexport default MockTreeGridModel;\n"],"mappings":"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"}
|
package/dist/memoizeClear.d.ts
CHANGED
@@ -9,6 +9,8 @@ import memoizee from 'memoizee';
|
|
9
9
|
* @param fn The function to memoize
|
10
10
|
* @param options The options to set for memoization
|
11
11
|
*/
|
12
|
-
export declare
|
12
|
+
export declare function memoizeClear<F extends Function>(fn: F, options: memoizee.Options<F> & {
|
13
|
+
max: number;
|
14
|
+
}): F & memoizee.Memoized<F>;
|
13
15
|
export default memoizeClear;
|
14
16
|
//# sourceMappingURL=memoizeClear.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"memoizeClear.d.ts","sourceRoot":"","sources":["../src/memoizeClear.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC;;;GAGG;
|
1
|
+
{"version":3,"file":"memoizeClear.d.ts","sourceRoot":"","sources":["../src/memoizeClear.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC;;;GAGG;AAEH,wBAAgB,YAAY,CAAC,CAAC,SAAS,QAAQ,EAC7C,EAAE,EAAE,CAAC,EACL,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAC7C,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAe1B;AAED,eAAe,YAAY,CAAC"}
|
package/dist/memoizeClear.js
CHANGED
@@ -15,7 +15,8 @@ import memoizee from 'memoizee';
|
|
15
15
|
* @param fn The function to memoize
|
16
16
|
* @param options The options to set for memoization
|
17
17
|
*/
|
18
|
-
|
18
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
19
|
+
export function memoizeClear(fn, options) {
|
19
20
|
var isClearingCache = false;
|
20
21
|
var memoizedFn = memoizee(fn, _objectSpread(_objectSpread({}, options), {}, {
|
21
22
|
dispose: () => {
|
@@ -28,6 +29,6 @@ export var memoizeClear = (fn, options) => {
|
|
28
29
|
}
|
29
30
|
}));
|
30
31
|
return memoizedFn;
|
31
|
-
}
|
32
|
+
}
|
32
33
|
export default memoizeClear;
|
33
34
|
//# sourceMappingURL=memoizeClear.js.map
|
package/dist/memoizeClear.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"memoizeClear.js","names":["memoizee","memoizeClear","fn","options","isClearingCache","memoizedFn","_objectSpread","dispose","clear"],"sources":["../src/memoizeClear.ts"],"sourcesContent":["/**\n * Extension of memoizee that clears the entire cache when it's full.\n * This avoids the situation where LRU cache starts thrashing when it fills up.\n * Could look at writing our own memoize with a smarter cache to avoid overhead of\n * LRU queue, but this should be sufficient for now.\n */\nimport memoizee from 'memoizee';\n\n/**\n * @param fn The function to memoize\n * @param options The options to set for memoization\n */\nexport
|
1
|
+
{"version":3,"file":"memoizeClear.js","names":["memoizee","memoizeClear","fn","options","isClearingCache","memoizedFn","_objectSpread","dispose","clear"],"sources":["../src/memoizeClear.ts"],"sourcesContent":["/**\n * Extension of memoizee that clears the entire cache when it's full.\n * This avoids the situation where LRU cache starts thrashing when it fills up.\n * Could look at writing our own memoize with a smarter cache to avoid overhead of\n * LRU queue, but this should be sufficient for now.\n */\nimport memoizee from 'memoizee';\n\n/**\n * @param fn The function to memoize\n * @param options The options to set for memoization\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function memoizeClear<F extends Function>(\n fn: F,\n options: memoizee.Options<F> & { max: number }\n): F & memoizee.Memoized<F> {\n let isClearingCache = false;\n const memoizedFn = memoizee(fn, {\n ...options,\n dispose: () => {\n // Need to track when we're clearing because dispose gets called for all items removed\n if (!isClearingCache) {\n isClearingCache = true;\n memoizedFn.clear();\n isClearingCache = false;\n }\n },\n });\n\n return memoizedFn;\n}\n\nexport default memoizeClear;\n"],"mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,QAAQ,MAAM,UAAU;;AAE/B;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,YAAYA,CAC1BC,EAAK,EACLC,OAA8C,EACpB;EAC1B,IAAIC,eAAe,GAAG,KAAK;EAC3B,IAAMC,UAAU,GAAGL,QAAQ,CAACE,EAAE,EAAAI,aAAA,CAAAA,aAAA,KACzBH,OAAO;IACVI,OAAO,EAAEA,CAAA,KAAM;MACb;MACA,IAAI,CAACH,eAAe,EAAE;QACpBA,eAAe,GAAG,IAAI;QACtBC,UAAU,CAACG,KAAK,CAAC,CAAC;QAClBJ,eAAe,GAAG,KAAK;MACzB;IACF;EAAC,EACF,CAAC;EAEF,OAAOC,UAAU;AACnB;AAEA,eAAeJ,YAAY"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@deephaven/grid",
|
3
|
-
"version": "0.106.
|
3
|
+
"version": "0.106.2-beta.1+d44370b1",
|
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": "^0.106.
|
34
|
+
"@deephaven/utils": "^0.106.2-beta.1+d44370b1",
|
35
35
|
"classnames": "^2.3.1",
|
36
36
|
"color-convert": "^2.0.1",
|
37
37
|
"event-target-shim": "^6.0.2",
|
@@ -44,5 +44,5 @@
|
|
44
44
|
"publishConfig": {
|
45
45
|
"access": "public"
|
46
46
|
},
|
47
|
-
"gitHead": "
|
47
|
+
"gitHead": "d44370b18b16f153403eaf95094e29755d673d4e"
|
48
48
|
}
|