@deephaven/grid 0.15.6-vite.21 → 0.15.6
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/CellInputField.js.map +1 -1
- package/dist/ColumnHeaderGroup.js.map +1 -1
- package/dist/EditableGridModel.js.map +1 -1
- package/dist/EventHandlerResult.js.map +1 -1
- package/dist/ExpandableGridModel.js.map +1 -1
- package/dist/Grid.js.map +1 -1
- package/dist/GridAxisRange.js.map +1 -1
- package/dist/GridColorUtils.js.map +1 -1
- package/dist/GridMetricCalculator.js.map +1 -1
- package/dist/GridMetrics.js.map +1 -1
- package/dist/GridModel.js.map +1 -1
- package/dist/GridMouseHandler.js.map +1 -1
- package/dist/GridRange.js.map +1 -1
- package/dist/GridRenderer.js.map +1 -1
- package/dist/GridTestUtils.js.map +1 -1
- package/dist/GridTheme.js.map +1 -1
- package/dist/GridUtils.js.map +1 -1
- package/dist/KeyHandler.js.map +1 -1
- package/dist/MockGridData.js.map +1 -1
- package/dist/MockGridModel.js.map +1 -1
- package/dist/MockTreeGridModel.js.map +1 -1
- package/dist/StaticDataGridModel.js.map +1 -1
- package/dist/ThemeContext.js.map +1 -1
- package/dist/ViewportDataGridModel.js.map +1 -1
- package/dist/errors/AssertionError.js.map +1 -1
- package/dist/errors/PasteError.js.map +1 -1
- package/dist/errors/assertIsDefined.js.map +1 -1
- package/dist/errors/index.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/key-handlers/EditKeyHandler.js.map +1 -1
- package/dist/key-handlers/PasteKeyHandler.js.map +1 -1
- package/dist/key-handlers/SelectionKeyHandler.js.map +1 -1
- package/dist/key-handlers/TreeKeyHandler.js.map +1 -1
- package/dist/key-handlers/index.js.map +1 -1
- package/dist/memoizeClear.js.map +1 -1
- package/dist/mouse-handlers/EditMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowMoveMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowTreeMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridSelectionMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/StaticDataGridModel.ts"],"names":["GridModel","StaticDataGridModel","constructor","data","columnHeaders","numberOfColumns","Math","max","map","row","length","rowCount","columnCount","textForCell","column","textForColumnHeader"],"mappings":";;OAAOA,S;AAEP;AACA;AACA;;AACA,MAAMC,mBAAN,SAAkCD,SAAlC,CAA4C;AAO1C;AACF;AACA;AACA;AACA;AACEE,EAAAA,WAAW,CAACC,IAAD,EAAoBC,aAApB,EAA8C;AAAA;;AACvD;;AADuD;;AAAA;;AAAA;;AAGvD,SAAKD,IAAL,GAAYA,IAAZ;AACA,SAAKE,eAAL,GAAuBC,IAAI,CAACC,GAAL,CACrB,GAAGJ,IAAI,CAACK,GAAL,CAASC,GAAG,IAAIA,GAAG,CAACC,MAApB,CADkB,2BAErBN,aAFqB,aAErBA,aAFqB,uBAErBA,aAAa,CAAEM,MAFM,yEAEI,CAFJ,CAAvB;AAIA,SAAKN,aAAL,GAAqBA,aAArB;AACD;;AAEW,MAARO,QAAQ,GAAW;AACrB,WAAO,KAAKR,IAAL,CAAUO,MAAjB;AACD;;AAEc,MAAXE,WAAW,GAAW;AACxB,WAAO,KAAKP,eAAZ;AACD;;AAEDQ,EAAAA,WAAW,CAACC,MAAD,EAAiBL,GAAjB,EAAsC;AAAA;;AAC/C,uCAAU,KAAKN,IAAL,CAAUM,GAAV,CAAV,mDAAU,eAAiBK,MAAjB,CAAV;AACD;;AAEDC,EAAAA,mBAAmB,CAACD,MAAD,EAAyB;AAAA;;AAC1C,2DAAO,KAAKV,aAAZ,wDAAO,oBAAqBU,MAArB,CAAP,yEAAuC,EAAvC;AACD;;AArCyC;;AAwC5C,eAAeb,mBAAf","sourcesContent":["import GridModel from './GridModel';\n\n/**\n * A simple model that displays static data\n */\nclass StaticDataGridModel extends GridModel {\n private data: unknown[][];\n\n private columnHeaders?: string[];\n\n private numberOfColumns: number;\n\n /**\n * Create a model using the static data provided\n * @param data Row data to display. First dimension is the number of rows, second dimension is the value for each column. Row/column count is derived from the data, and it is stringified for display.\n * @param columnHeaders Optional names for the column headers\n */\n constructor(data: unknown[][], columnHeaders?: string[]) {\n super();\n\n this.data = data;\n this.numberOfColumns = Math.max(\n ...data.map(row => row.length),\n columnHeaders?.length ?? 0\n );\n this.columnHeaders = columnHeaders;\n }\n\n get rowCount(): number {\n return this.data.length;\n }\n\n get columnCount(): number {\n return this.numberOfColumns;\n }\n\n textForCell(column: number, row: number): string {\n return `${this.data[row]?.[column]}`;\n }\n\n textForColumnHeader(column: number): string {\n return this.columnHeaders?.[column] ?? '';\n }\n}\n\nexport default StaticDataGridModel;\n"],"file":"StaticDataGridModel.js"}
|
package/dist/ThemeContext.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/ThemeContext.ts"],"names":["React","ThemeContext","createContext"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AAGA,OAAO,IAAMC,YAEZ,gBAAGD,KAAK,CAACE,aAAN,CAAoB,EAApB,CAFG;AAIP,eAAeD,YAAf","sourcesContent":["import React from 'react';\nimport { GridTheme as GridThemeType } from './GridTheme';\n\nexport const ThemeContext: React.Context<\n Partial<GridThemeType>\n> = React.createContext({});\n\nexport default ThemeContext;\n"],"file":"ThemeContext.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/ViewportDataGridModel.ts"],"names":["GridModel","ViewportDataGridModel","constructor","columnCount","rowCount","numberOfColumns","numberOfRows","textForCell","column","row","viewportRow","viewportData","rowOffset","viewportColumn","columnOffset","data","textForColumnHeader","textForRowHeader"],"mappings":";;AAAA;OACOA,S;AAEP;AACA;AACA;;AACA,MAAMC,qBAAN,SAAoCD,SAApC,CAA8C;AAW5C;AACF;AACA;AACA;AACA;AACEE,EAAAA,WAAW,CAACC,WAAD,EAAsBC,QAAtB,EAAwC;AACjD;;AADiD;;AAAA;;AAAA;;AAGjD,SAAKC,eAAL,GAAuBF,WAAvB;AACA,SAAKG,YAAL,GAAoBF,QAApB;AACD;;AAEc,MAAXD,WAAW,GAAW;AACxB,WAAO,KAAKE,eAAZ;AACD;;AAEW,MAARD,QAAQ,GAAW;AACrB,WAAO,KAAKE,YAAZ;AACD;;AAEDC,EAAAA,WAAW,CAACC,MAAD,EAAiBC,GAAjB,EAAsC;AAAA;;AAC/C,QAAMC,WAAW,GAAGD,GAAG,mDAAI,KAAKE,YAAT,uDAAI,mBAAmBC,SAAvB,yEAAoC,CAApC,CAAvB;AACA,QAAMC,cAAc,GAAGL,MAAM,oDAAI,KAAKG,YAAT,wDAAI,oBAAmBG,YAAvB,yEAAuC,CAAvC,CAA7B;AACA,qEAAU,KAAKH,YAAf,iFAAU,oBAAmBI,IAAnB,CAAwBL,WAAxB,CAAV,0DAAU,sBAAuCG,cAAvC,CAAV,yEAAoE,EAApE;AACD;;AAEDG,EAAAA,mBAAmB,CAACR,MAAD,EAAyB;AAC1C,qBAAUA,MAAV;AACD;;AAEDS,EAAAA,gBAAgB,CAACR,GAAD,EAAsB;AACpC,qBAAUA,GAAV;AACD;;AA3C2C;;AA8C9C,eAAeR,qBAAf","sourcesContent":["/* eslint-disable class-methods-use-this */\nimport GridModel from './GridModel';\n\n/**\n * A simple model that displays a viewport of data\n */\nclass ViewportDataGridModel extends GridModel {\n private numberOfColumns: number;\n\n private numberOfRows: number;\n\n public viewportData?: {\n rowOffset: number;\n columnOffset: number;\n data: unknown[][];\n };\n\n /**\n * Model for fetching data asynchonously. Set the viewported data when data is fetched.\n * @param columnCount Number of columns\n * @param rowCount Number of rows\n */\n constructor(columnCount: number, rowCount: number) {\n super();\n\n this.numberOfColumns = columnCount;\n this.numberOfRows = rowCount;\n }\n\n get columnCount(): number {\n return this.numberOfColumns;\n }\n\n get rowCount(): number {\n return this.numberOfRows;\n }\n\n textForCell(column: number, row: number): string {\n const viewportRow = row - (this.viewportData?.rowOffset ?? 0);\n const viewportColumn = column - (this.viewportData?.columnOffset ?? 0);\n return `${this.viewportData?.data[viewportRow]?.[viewportColumn] ?? ''}`;\n }\n\n textForColumnHeader(column: number): string {\n return `${column}`;\n }\n\n textForRowHeader(row: number): string {\n return `${row}`;\n }\n}\n\nexport default ViewportDataGridModel;\n"],"file":"ViewportDataGridModel.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/errors/AssertionError.ts"],"names":["AssertionError","Error"],"mappings":";;AAAA,OAAO,MAAMA,cAAN,SAA6BC,KAA7B,CAAmC;AAAA;AAAA;;AAAA,+CACpB,IADoB;AAAA;;AAAA;AAI1C,eAAeD,cAAf","sourcesContent":["export class AssertionError extends Error {\n isAssertionFailed = true;\n}\n\nexport default AssertionError;\n"],"file":"AssertionError.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/errors/PasteError.ts"],"names":["PasteError","Error"],"mappings":";;AAAA,OAAO,MAAMA,UAAN,SAAyBC,KAAzB,CAA+B;AAAA;AAAA;;AAAA,0CACrB,IADqB;AAAA;;AAAA;AAItC,eAAeD,UAAf","sourcesContent":["export class PasteError extends Error {\n isPasteError = true;\n}\n\nexport default PasteError;\n"],"file":"PasteError.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/errors/assertIsDefined.ts"],"names":["AssertionError","assertIsDefined","val","undefined"],"mappings":"OAAOA,c;AAEP,OAAO,SAASC,eAAT,CAA4BC,GAA5B,EAAmE;AACxE,MAAIA,GAAG,KAAKC,SAAR,IAAqBD,GAAG,KAAK,IAAjC,EAAuC;AACrC,UAAM,IAAIF,cAAJ,sDAC0CE,GAD1C,EAAN;AAGD;AACF;AAED,eAAeD,eAAf","sourcesContent":["import AssertionError from './AssertionError';\n\nexport function assertIsDefined<T>(val: T): asserts val is NonNullable<T> {\n if (val === undefined || val === null) {\n throw new AssertionError(\n `Expected 'val' to be defined, but received ${val}`\n );\n }\n}\n\nexport default assertIsDefined;\n"],"file":"assertIsDefined.js"}
|
package/dist/errors/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/errors/index.ts"],"names":["default","assertIsDefined","AssertionError","PasteError"],"mappings":"SAASA,OAAO,IAAIC,e;SACXD,OAAO,IAAIE,c;SACXF,OAAO,IAAIG,U","sourcesContent":["export { default as assertIsDefined } from './assertIsDefined';\nexport { default as AssertionError } from './AssertionError';\nexport { default as PasteError } from './PasteError';\n"],"file":"index.js"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":["default","Grid","GridModel","GridTestUtils","GridTheme","KeyHandler","MockGridModel","MockTreeGridModel","memoizeClear","StaticDataGridModel","ViewportDataGridModel","ThemeContext"],"mappings":";;;SAGSA,OAAO,IAAIC,I;;;;SAIXD,OAAO,IAAIE,S;;;;;SAKXF,OAAO,IAAIG,a;SACXH,OAAO,IAAII,S;;SAGXJ,OAAO,IAAIK,U;SACXL,OAAO,IAAIM,a;SACXN,OAAO,IAAIO,iB;SACXP,OAAO,IAAIQ,Y;SACXR,OAAO,IAAIS,mB;SACXT,OAAO,IAAIU,qB;;;;;SAKXV,OAAO,IAAIW,Y","sourcesContent":["export * from './ColumnHeaderGroup';\nexport * from './EditableGridModel';\nexport * from './ExpandableGridModel';\nexport { default as Grid } from './Grid';\nexport * from './Grid';\nexport * from './GridMetricCalculator';\nexport * from './GridMetrics';\nexport { default as GridModel } from './GridModel';\nexport * from './GridMouseHandler';\nexport * from './GridRange';\nexport * from './GridAxisRange';\nexport * from './GridRenderer';\nexport { default as GridTestUtils } from './GridTestUtils';\nexport { default as GridTheme } from './GridTheme';\nexport type { GridTheme as GridThemeType } from './GridTheme';\nexport * from './GridUtils';\nexport { default as KeyHandler } from './KeyHandler';\nexport { default as MockGridModel } from './MockGridModel';\nexport { default as MockTreeGridModel } from './MockTreeGridModel';\nexport { default as memoizeClear } from './memoizeClear';\nexport { default as StaticDataGridModel } from './StaticDataGridModel';\nexport { default as ViewportDataGridModel } from './ViewportDataGridModel';\nexport * from './key-handlers';\nexport * from './mouse-handlers';\nexport * from './errors';\nexport * from './EventHandlerResult';\nexport { default as ThemeContext } from './ThemeContext';\n"],"file":"index.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/key-handlers/EditKeyHandler.ts"],"names":["GridUtils","GridRange","KeyHandler","isEditableGridModel","EditKeyHandler","onDown","event","grid","isModifierKeyDown","model","props","cursorColumn","cursorRow","state","isEditableRange","makeCell","column","row","key","length","startEditing","undefined","setValueForCell"],"mappings":"AAAA;OACOA,S;OAEAC,S;OACAC,U;SACEC,mB;;AAGT,MAAMC,cAAN,SAA6BF,UAA7B,CAAwC;AACtCG,EAAAA,MAAM,CAACC,KAAD,EAA2BC,IAA3B,EAA2D;AAC/D,QAAIP,SAAS,CAACQ,iBAAV,CAA4BF,KAA5B,CAAJ,EAAwC;AACtC,aAAO,KAAP;AACD;;AAED,QAAM;AAAEG,MAAAA;AAAF,QAAYF,IAAI,CAACG,KAAvB;AACA,QAAM;AAAEC,MAAAA,YAAF;AAAgBC,MAAAA;AAAhB,QAA8BL,IAAI,CAACM,KAAzC;;AACA,QACEF,YAAY,IAAI,IAAhB,IACAC,SAAS,IAAI,IADb,IAEA,CAACT,mBAAmB,CAACM,KAAD,CAFpB,IAGA,CAACA,KAAK,CAACK,eAAN,CAAsBb,SAAS,CAACc,QAAV,CAAmBJ,YAAnB,EAAiCC,SAAjC,CAAtB,CAJH,EAKE;AACA,aAAO,KAAP;AACD;;AACD,QAAMI,MAAqB,GAAGL,YAA9B;AACA,QAAMM,GAAkB,GAAGL,SAA3B;;AACA,QAAII,MAAM,IAAI,IAAV,IAAkBC,GAAG,IAAI,IAA7B,EAAmC;AACjC,aAAO,KAAP;AACD;;AAED,QAAIX,KAAK,CAACY,GAAN,CAAUC,MAAV,KAAqB,CAAzB,EAA4B;AAC1BZ,MAAAA,IAAI,CAACa,YAAL,CAAkBJ,MAAlB,EAA0BC,GAA1B,EAA+B,IAA/B,EAAqC,CAAC,CAAD,EAAI,CAAJ,CAArC,EAA6CX,KAAK,CAACY,GAAnD;AACA,aAAO,IAAP;AACD;;AAED,QAAIZ,KAAK,CAACY,GAAN,KAAc,IAAlB,EAAwB;AACtBX,MAAAA,IAAI,CAACa,YAAL,CAAkBJ,MAAlB,EAA0BC,GAA1B;AACA,aAAO,IAAP;AACD;;AAED,QAAIX,KAAK,CAACY,GAAN,KAAc,WAAlB,EAA+B;AAC7BX,MAAAA,IAAI,CAACa,YAAL,CAAkBJ,MAAlB,EAA0BC,GAA1B,EAA+B,IAA/B,EAAqCI,SAArC,EAAgD,EAAhD;AACA,aAAO,IAAP;AACD;;AAED,QAAIf,KAAK,CAACY,GAAN,KAAc,QAAlB,EAA4B;AAC1BX,MAAAA,IAAI,CAACe,eAAL,CAAqBN,MAArB,EAA6BC,GAA7B,EAAkC,EAAlC;AACA,aAAO,IAAP;AACD;;AACD,WAAO,KAAP;AACD;;AA1CqC;;AA6CxC,eAAeb,cAAf","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport GridUtils from '../GridUtils';\nimport Grid from '../Grid';\nimport GridRange from '../GridRange';\nimport KeyHandler, { GridKeyboardEvent } from '../KeyHandler';\nimport { isEditableGridModel } from '../EditableGridModel';\nimport { 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"],"file":"EditKeyHandler.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/key-handlers/PasteKeyHandler.ts"],"names":["GridUtils","KeyHandler","parseValueFromTable","table","data","rows","querySelectorAll","r","length","row","cells","rowData","c","cell","push","textContent","trim","parseValueFromNodes","nodes","result","forEach","node","text","split","parseValueFromElement","element","querySelector","childNodes","hasTabChar","includes","hasFirefoxTab","map","PasteKeyHandler","onDown","event","grid","key","isModifierKeyDown","dummyInput","document","createElement","body","appendChild","setAttribute","listener","removeEventListener","remove","focus","value","pasteValue","addEventListener","preventDefault","stopPropagation"],"mappings":"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","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport { EventHandlerResult } from '../EventHandlerResult';\nimport Grid from '../Grid';\nimport GridUtils from '../GridUtils';\nimport KeyHandler, { 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\n return result;\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 && !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 listener = () => {\n dummyInput.removeEventListener('input', listener);\n dummyInput.remove();\n\n grid.focus();\n const value = parseValueFromElement(dummyInput);\n if (value != null) {\n grid.pasteValue(value);\n }\n };\n\n // Listen for the `input` event, when there's a change to the HTML\n // We could also listen to the `paste` event to get the clipboard data, but that's just text data\n // By listening to `input`, we can get a table that's already parsed in HTML, which is easier to consume\n dummyInput.addEventListener('input', listener);\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"],"file":"PasteKeyHandler.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionKeyHandler.js","names":["clamp","GridRange","GridUtils","KeyHandler","SelectionKeyHandler","onDown","event","grid","key","isModifierKeyDown","selectAll","handleArrowMove","handlePageUp","handlePageDown","shiftKey","clearSelectedRanges","moveCursorToPosition","state","cursorRow","model","props","columnCount","cursorColumn","rowCount","selectedRanges","length","moveCursorInDirection","SELECTION_DIRECTION","UP","DOWN","LEFT","RIGHT","deltaColumn","deltaRow","isShiftKey","isModifierKey","trimSelectedRanges","selectionEndColumn","selectionEndRow","column","row","maximizePreviousRange","moveToColumn","moveToRow","metrics","Error","theme","autoSelectRow","autoSelectColumn","lastLeft","left","setViewState","lastTop","top","moveCursor","e","metricState","getMetricState","metricCalculator","bottomVisible","topVisible","hasHorizontalBar","getMetrics","selectRangeEndPosition","Math","max","viewportPosition","lastRowIndex","min"],"sources":["../../src/key-handlers/SelectionKeyHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport clamp from 'lodash.clamp';\nimport Grid from '../Grid';\nimport GridRange from '../GridRange';\nimport GridUtils from '../GridUtils';\nimport KeyHandler, { GridKeyboardEvent } from '../KeyHandler';\n\nclass SelectionKeyHandler extends KeyHandler {\n onDown(event: GridKeyboardEvent, grid: Grid): boolean {\n switch (event.key) {\n case 'a':\n if (GridUtils.isModifierKeyDown(event)) {\n grid.selectAll();\n return true;\n }\n break;\n case 'ArrowUp':\n return this.handleArrowMove(0, -1, event, grid);\n case 'ArrowDown':\n return this.handleArrowMove(0, 1, event, grid);\n case 'ArrowRight':\n return this.handleArrowMove(1, 0, event, grid);\n case 'ArrowLeft':\n return this.handleArrowMove(-1, 0, event, grid);\n /**\n * h/j/k/l keys are grouped together for quick navigation by power users.\n * Bender added these as shortcuts in the original commit of keyboard shortcuts.\n * We have no idea why, or what might have inspired them (not excel, not swing, vim?).\n * Maybe lack of page up keys on a laptop at the time?\n */\n case 'k':\n case 'K':\n if (GridUtils.isModifierKeyDown(event)) return false;\n return this.handlePageUp(event, grid);\n case 'j':\n case 'J':\n if (GridUtils.isModifierKeyDown(event)) return false;\n return this.handlePageDown(event, grid);\n case 'h':\n case 'H':\n if (GridUtils.isModifierKeyDown(event)) return false;\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(0, grid.state.cursorRow, event.shiftKey);\n return true;\n case 'l':\n case 'L': {\n if (GridUtils.isModifierKeyDown(event)) return false;\n const { model } = grid.props;\n const { columnCount } = model;\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(\n columnCount - 1,\n grid.state.cursorRow,\n event.shiftKey\n );\n return true;\n }\n case 'PageDown':\n return this.handlePageDown(event, grid);\n case 'PageUp':\n return this.handlePageUp(event, grid);\n case 'Home':\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(\n GridUtils.isModifierKeyDown(event) ? grid.state.cursorColumn : 0,\n GridUtils.isModifierKeyDown(event) ? 0 : grid.state.cursorRow,\n event.shiftKey,\n true,\n true\n );\n return true;\n case 'End': {\n const { model } = grid.props;\n const { columnCount, rowCount } = model;\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(\n GridUtils.isModifierKeyDown(event)\n ? grid.state.cursorColumn\n : columnCount - 1,\n GridUtils.isModifierKeyDown(event)\n ? rowCount - 1\n : grid.state.cursorRow,\n event.shiftKey,\n true,\n true\n );\n return true;\n }\n case 'Escape':\n grid.clearSelectedRanges();\n return true;\n case 'Enter':\n if (grid.state.selectedRanges.length > 0) {\n grid.moveCursorInDirection(\n event.shiftKey\n ? GridRange.SELECTION_DIRECTION.UP\n : GridRange.SELECTION_DIRECTION.DOWN\n );\n return true;\n }\n break;\n case 'Tab':\n if (grid.state.selectedRanges.length > 0) {\n grid.moveCursorInDirection(\n event.shiftKey\n ? GridRange.SELECTION_DIRECTION.LEFT\n : GridRange.SELECTION_DIRECTION.RIGHT\n );\n return true;\n }\n break;\n default:\n break;\n }\n return false;\n }\n\n handleArrowMove(\n deltaColumn: number,\n deltaRow: number,\n event: GridKeyboardEvent,\n grid: Grid\n ): boolean {\n const isShiftKey = event.shiftKey;\n const isModifierKey = GridUtils.isModifierKeyDown(event);\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n\n const {\n cursorRow,\n cursorColumn,\n selectionEndColumn,\n selectionEndRow,\n } = grid.state;\n const column = isShiftKey ? selectionEndColumn : cursorColumn;\n const row = isShiftKey ? selectionEndRow : cursorRow;\n if (isModifierKey) {\n const { model } = grid.props;\n const { columnCount, rowCount } = model;\n const maximizePreviousRange = isModifierKey && isShiftKey;\n let moveToColumn = null;\n let moveToRow = null;\n if (deltaColumn < 0) {\n moveToColumn = 0;\n moveToRow = row;\n } else if (deltaColumn > 0) {\n moveToColumn = columnCount - 1;\n moveToRow = row;\n } else if (deltaRow < 0) {\n moveToColumn = column;\n moveToRow = 0;\n } else if (deltaRow > 0) {\n moveToColumn = column;\n moveToRow = rowCount - 1;\n }\n if (moveToColumn != null && moveToRow != null) {\n grid.moveCursorToPosition(\n moveToColumn,\n moveToRow,\n isShiftKey,\n true,\n maximizePreviousRange\n );\n }\n } else {\n if (!grid.metrics) throw new Error('grid.metrics are not set');\n\n const { theme } = grid.props;\n const { autoSelectRow, autoSelectColumn } = theme;\n if (autoSelectRow && deltaColumn !== 0) {\n const { lastLeft } = grid.metrics;\n let { left } = grid.state;\n\n left = clamp(left + deltaColumn, 0, lastLeft);\n\n grid.moveCursorToPosition(left, cursorRow, isShiftKey, false);\n\n grid.setViewState({ left });\n } else if (autoSelectColumn && deltaRow !== 0) {\n const { lastTop } = grid.metrics;\n let { top } = grid.state;\n\n top = clamp(top + deltaRow, 0, lastTop);\n\n grid.moveCursorToPosition(top, cursorColumn, isShiftKey, false);\n\n grid.setViewState({ top });\n } else {\n grid.moveCursor(deltaColumn, deltaRow, isShiftKey);\n }\n }\n return true;\n }\n\n handlePageUp(e: GridKeyboardEvent, grid: Grid): boolean {\n const isShiftKey = e.shiftKey;\n\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n\n const { cursorColumn, selectionEndRow } = grid.state;\n const row: number | null = selectionEndRow;\n const column: number | null = cursorColumn;\n if (row == null) {\n return false;\n }\n const metricState = grid.getMetricState();\n const { metricCalculator } = grid;\n const {\n bottomVisible,\n topVisible,\n hasHorizontalBar,\n } = metricCalculator.getMetrics(metricState);\n\n let selectRangeEndPosition = row - (bottomVisible - topVisible);\n selectRangeEndPosition -= hasHorizontalBar ? 0 : 1;\n\n // Don't move beyond the top table row.\n selectRangeEndPosition = Math.max(selectRangeEndPosition, 0);\n const viewportPosition = Math.max(\n selectRangeEndPosition - (row - topVisible),\n 0\n );\n\n grid.moveCursorToPosition(\n column,\n selectRangeEndPosition,\n isShiftKey,\n false\n );\n grid.setViewState({ top: viewportPosition });\n return true;\n }\n\n handlePageDown(e: GridKeyboardEvent, grid: Grid): boolean {\n const isShiftKey = e.shiftKey;\n\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n\n const { selectionEndRow, cursorColumn } = grid.state;\n const row: number | null = selectionEndRow;\n const column: number | null = cursorColumn;\n if (row === null) {\n return false;\n }\n const metricState = grid.getMetricState();\n const { metricCalculator } = grid;\n const {\n bottomVisible,\n topVisible,\n hasHorizontalBar,\n rowCount,\n lastTop,\n } = metricCalculator.getMetrics(metricState);\n const lastRowIndex = rowCount - 1;\n\n let selectRangeEndPosition = bottomVisible - topVisible + row;\n selectRangeEndPosition += hasHorizontalBar ? 0 : 1;\n\n // Don't move beyond the bottom table row.\n selectRangeEndPosition = Math.min(selectRangeEndPosition, lastRowIndex);\n\n const viewportPosition = Math.min(\n lastTop,\n selectRangeEndPosition - (row - topVisible)\n );\n grid.moveCursorToPosition(\n column,\n selectRangeEndPosition,\n isShiftKey,\n false\n );\n grid.setViewState({ top: viewportPosition });\n\n return true;\n }\n}\n\nexport default SelectionKeyHandler;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/key-handlers/SelectionKeyHandler.ts"],"names":["clamp","GridRange","GridUtils","KeyHandler","SelectionKeyHandler","onDown","event","grid","key","isModifierKeyDown","selectAll","handleArrowMove","handlePageUp","handlePageDown","shiftKey","clearSelectedRanges","moveCursorToPosition","state","cursorRow","model","props","columnCount","cursorColumn","rowCount","selectedRanges","length","moveCursorInDirection","SELECTION_DIRECTION","UP","DOWN","LEFT","RIGHT","deltaColumn","deltaRow","isShiftKey","isModifierKey","trimSelectedRanges","selectionEndColumn","selectionEndRow","column","row","maximizePreviousRange","moveToColumn","moveToRow","metrics","Error","theme","autoSelectRow","autoSelectColumn","lastLeft","left","setViewState","lastTop","top","moveCursor","e","metricState","getMetricState","metricCalculator","bottomVisible","topVisible","hasHorizontalBar","getMetrics","selectRangeEndPosition","Math","max","viewportPosition","lastRowIndex","min"],"mappings":"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","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport clamp from 'lodash.clamp';\nimport Grid from '../Grid';\nimport GridRange from '../GridRange';\nimport GridUtils from '../GridUtils';\nimport KeyHandler, { GridKeyboardEvent } from '../KeyHandler';\n\nclass SelectionKeyHandler extends KeyHandler {\n onDown(event: GridKeyboardEvent, grid: Grid): boolean {\n switch (event.key) {\n case 'a':\n if (GridUtils.isModifierKeyDown(event)) {\n grid.selectAll();\n return true;\n }\n break;\n case 'ArrowUp':\n return this.handleArrowMove(0, -1, event, grid);\n case 'ArrowDown':\n return this.handleArrowMove(0, 1, event, grid);\n case 'ArrowRight':\n return this.handleArrowMove(1, 0, event, grid);\n case 'ArrowLeft':\n return this.handleArrowMove(-1, 0, event, grid);\n /**\n * h/j/k/l keys are grouped together for quick navigation by power users.\n * Bender added these as shortcuts in the original commit of keyboard shortcuts.\n * We have no idea why, or what might have inspired them (not excel, not swing, vim?).\n * Maybe lack of page up keys on a laptop at the time?\n */\n case 'k':\n case 'K':\n if (GridUtils.isModifierKeyDown(event)) return false;\n return this.handlePageUp(event, grid);\n case 'j':\n case 'J':\n if (GridUtils.isModifierKeyDown(event)) return false;\n return this.handlePageDown(event, grid);\n case 'h':\n case 'H':\n if (GridUtils.isModifierKeyDown(event)) return false;\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(0, grid.state.cursorRow, event.shiftKey);\n return true;\n case 'l':\n case 'L': {\n if (GridUtils.isModifierKeyDown(event)) return false;\n const { model } = grid.props;\n const { columnCount } = model;\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(\n columnCount - 1,\n grid.state.cursorRow,\n event.shiftKey\n );\n return true;\n }\n case 'PageDown':\n return this.handlePageDown(event, grid);\n case 'PageUp':\n return this.handlePageUp(event, grid);\n case 'Home':\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(\n GridUtils.isModifierKeyDown(event) ? grid.state.cursorColumn : 0,\n GridUtils.isModifierKeyDown(event) ? 0 : grid.state.cursorRow,\n event.shiftKey,\n true,\n true\n );\n return true;\n case 'End': {\n const { model } = grid.props;\n const { columnCount, rowCount } = model;\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(\n GridUtils.isModifierKeyDown(event)\n ? grid.state.cursorColumn\n : columnCount - 1,\n GridUtils.isModifierKeyDown(event)\n ? rowCount - 1\n : grid.state.cursorRow,\n event.shiftKey,\n true,\n true\n );\n return true;\n }\n case 'Escape':\n grid.clearSelectedRanges();\n return true;\n case 'Enter':\n if (grid.state.selectedRanges.length > 0) {\n grid.moveCursorInDirection(\n event.shiftKey\n ? GridRange.SELECTION_DIRECTION.UP\n : GridRange.SELECTION_DIRECTION.DOWN\n );\n return true;\n }\n break;\n case 'Tab':\n if (grid.state.selectedRanges.length > 0) {\n grid.moveCursorInDirection(\n event.shiftKey\n ? GridRange.SELECTION_DIRECTION.LEFT\n : GridRange.SELECTION_DIRECTION.RIGHT\n );\n return true;\n }\n break;\n default:\n break;\n }\n return false;\n }\n\n handleArrowMove(\n deltaColumn: number,\n deltaRow: number,\n event: GridKeyboardEvent,\n grid: Grid\n ): boolean {\n const isShiftKey = event.shiftKey;\n const isModifierKey = GridUtils.isModifierKeyDown(event);\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n\n const {\n cursorRow,\n cursorColumn,\n selectionEndColumn,\n selectionEndRow,\n } = grid.state;\n const column = isShiftKey ? selectionEndColumn : cursorColumn;\n const row = isShiftKey ? selectionEndRow : cursorRow;\n if (isModifierKey) {\n const { model } = grid.props;\n const { columnCount, rowCount } = model;\n const maximizePreviousRange = isModifierKey && isShiftKey;\n let moveToColumn = null;\n let moveToRow = null;\n if (deltaColumn < 0) {\n moveToColumn = 0;\n moveToRow = row;\n } else if (deltaColumn > 0) {\n moveToColumn = columnCount - 1;\n moveToRow = row;\n } else if (deltaRow < 0) {\n moveToColumn = column;\n moveToRow = 0;\n } else if (deltaRow > 0) {\n moveToColumn = column;\n moveToRow = rowCount - 1;\n }\n if (moveToColumn != null && moveToRow != null) {\n grid.moveCursorToPosition(\n moveToColumn,\n moveToRow,\n isShiftKey,\n true,\n maximizePreviousRange\n );\n }\n } else {\n if (!grid.metrics) throw new Error('grid.metrics are not set');\n\n const { theme } = grid.props;\n const { autoSelectRow, autoSelectColumn } = theme;\n if (autoSelectRow && deltaColumn !== 0) {\n const { lastLeft } = grid.metrics;\n let { left } = grid.state;\n\n left = clamp(left + deltaColumn, 0, lastLeft);\n\n grid.moveCursorToPosition(left, cursorRow, isShiftKey, false);\n\n grid.setViewState({ left });\n } else if (autoSelectColumn && deltaRow !== 0) {\n const { lastTop } = grid.metrics;\n let { top } = grid.state;\n\n top = clamp(top + deltaRow, 0, lastTop);\n\n grid.moveCursorToPosition(top, cursorColumn, isShiftKey, false);\n\n grid.setViewState({ top });\n } else {\n grid.moveCursor(deltaColumn, deltaRow, isShiftKey);\n }\n }\n return true;\n }\n\n handlePageUp(e: GridKeyboardEvent, grid: Grid): boolean {\n const isShiftKey = e.shiftKey;\n\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n\n const { cursorColumn, selectionEndRow } = grid.state;\n const row: number | null = selectionEndRow;\n const column: number | null = cursorColumn;\n if (row == null) {\n return false;\n }\n const metricState = grid.getMetricState();\n const { metricCalculator } = grid;\n const {\n bottomVisible,\n topVisible,\n hasHorizontalBar,\n } = metricCalculator.getMetrics(metricState);\n\n let selectRangeEndPosition = row - (bottomVisible - topVisible);\n selectRangeEndPosition -= hasHorizontalBar ? 0 : 1;\n\n // Don't move beyond the top table row.\n selectRangeEndPosition = Math.max(selectRangeEndPosition, 0);\n const viewportPosition = Math.max(\n selectRangeEndPosition - (row - topVisible),\n 0\n );\n\n grid.moveCursorToPosition(\n column,\n selectRangeEndPosition,\n isShiftKey,\n false\n );\n grid.setViewState({ top: viewportPosition });\n return true;\n }\n\n handlePageDown(e: GridKeyboardEvent, grid: Grid): boolean {\n const isShiftKey = e.shiftKey;\n\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n\n const { selectionEndRow, cursorColumn } = grid.state;\n const row: number | null = selectionEndRow;\n const column: number | null = cursorColumn;\n if (row === null) {\n return false;\n }\n const metricState = grid.getMetricState();\n const { metricCalculator } = grid;\n const {\n bottomVisible,\n topVisible,\n hasHorizontalBar,\n rowCount,\n lastTop,\n } = metricCalculator.getMetrics(metricState);\n const lastRowIndex = rowCount - 1;\n\n let selectRangeEndPosition = bottomVisible - topVisible + row;\n selectRangeEndPosition += hasHorizontalBar ? 0 : 1;\n\n // Don't move beyond the bottom table row.\n selectRangeEndPosition = Math.min(selectRangeEndPosition, lastRowIndex);\n\n const viewportPosition = Math.min(\n lastTop,\n selectRangeEndPosition - (row - topVisible)\n );\n grid.moveCursorToPosition(\n column,\n selectRangeEndPosition,\n isShiftKey,\n false\n );\n grid.setViewState({ top: viewportPosition });\n\n return true;\n }\n}\n\nexport default SelectionKeyHandler;\n"],"file":"SelectionKeyHandler.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/key-handlers/TreeKeyHandler.ts"],"names":["isExpandableGridModel","KeyHandler","TreeKeyHandler","onDown","event","grid","key","handleExpandKey","selectedRanges","state","length","range","startRow","endRow","startColumn","endColumn","metrics","Error","model","props","row","column","modelRow","getModelRow","isRowExpandable","toggleRowExpanded"],"mappings":"AAAA;SACSA,qB;OAGFC,U;;AAEP,MAAMC,cAAN,SAA6BD,UAA7B,CAAwC;AACtCE,EAAAA,MAAM,CAACC,KAAD,EAAuBC,IAAvB,EAA4C;AAChD,YAAQD,KAAK,CAACE,GAAd;AACE,WAAK,OAAL;AACA,WAAK,GAAL;AAAU;AACR,iBAAO,KAAKC,eAAL,CAAqBH,KAArB,EAA4BC,IAA5B,CAAP;AACD;;AACD;AACE;AANJ;;AAQA,WAAO,KAAP;AACD;;AAEDE,EAAAA,eAAe,CAACH,KAAD,EAAuBC,IAAvB,EAA4C;AACzD,QAAM;AAAEG,MAAAA;AAAF,QAAqBH,IAAI,CAACI,KAAhC;;AACA,QAAID,cAAc,CAACE,MAAf,KAA0B,CAA9B,EAAiC;AAC/B,UAAMC,KAAK,GAAGH,cAAc,CAAC,CAAD,CAA5B;;AACA,UACEG,KAAK,CAACC,QAAN,KAAmBD,KAAK,CAACE,MAAzB,IACAF,KAAK,CAACG,WAAN,KAAsBH,KAAK,CAACI,SAF9B,EAGE;AACA,YAAI,CAACV,IAAI,CAACW,OAAV,EAAmB,MAAM,IAAIC,KAAJ,CAAU,sBAAV,CAAN;AAEnB,YAAM;AAAEC,UAAAA;AAAF,YAAYb,IAAI,CAACc,KAAvB;AACA,YAAM;AAAEP,UAAAA,QAAQ,EAAEQ,GAAZ;AAAiBN,UAAAA,WAAW,EAAEO;AAA9B,YAAyCV,KAA/C;;AACA,YAAIS,GAAG,IAAI,IAAX,EAAiB;AACf,cAAME,QAAQ,GAAGjB,IAAI,CAACkB,WAAL,CAAiBH,GAAjB,CAAjB;;AACA,cACE,CAACC,MAAM,KAAK,CAAX,IAAgBA,MAAM,IAAI,IAA3B,KACArB,qBAAqB,CAACkB,KAAD,CADrB,IAEAA,KAAK,CAACM,eAAN,CAAsBF,QAAtB,CAHF,EAIE;AACAjB,YAAAA,IAAI,CAACoB,iBAAL,CAAuBL,GAAvB;AACA,mBAAO,IAAP;AACD;AACF;AACF;AACF;;AACD,WAAO,KAAP;AACD;;AAvCqC;;AA0CxC,eAAelB,cAAf","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport { isExpandableGridModel } from '../ExpandableGridModel';\nimport Grid from '../Grid';\nimport GridRange from '../GridRange';\nimport KeyHandler from '../KeyHandler';\n\nclass TreeKeyHandler extends KeyHandler {\n onDown(event: KeyboardEvent, grid: Grid): boolean {\n switch (event.key) {\n case 'Enter':\n case ' ': {\n return this.handleExpandKey(event, grid);\n }\n default:\n break;\n }\n return false;\n }\n\n handleExpandKey(event: KeyboardEvent, grid: Grid): boolean {\n const { selectedRanges } = grid.state;\n if (selectedRanges.length === 1) {\n const range = selectedRanges[0] as GridRange;\n if (\n range.startRow === range.endRow &&\n range.startColumn === range.endColumn\n ) {\n if (!grid.metrics) throw new Error('grid.metrics not set');\n\n const { model } = grid.props;\n const { startRow: row, startColumn: column } = range;\n if (row != null) {\n const modelRow = grid.getModelRow(row);\n if (\n (column === 0 || column == null) &&\n isExpandableGridModel(model) &&\n model.isRowExpandable(modelRow)\n ) {\n grid.toggleRowExpanded(row);\n return true;\n }\n }\n }\n }\n return false;\n }\n}\n\nexport default TreeKeyHandler;\n"],"file":"TreeKeyHandler.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/key-handlers/index.ts"],"names":["default","SelectionKeyHandler","TreeKeyHandler","EditKeyHandler","PasteKeyHandler"],"mappings":"SAASA,OAAO,IAAIC,mB;SACXD,OAAO,IAAIE,c;SACXF,OAAO,IAAIG,c;SACXH,OAAO,IAAII,e","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"],"file":"index.js"}
|
package/dist/memoizeClear.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/memoizeClear.ts"],"names":["memoizee","memoizeClear","fn","options","isClearingCache","memoizedFn","dispose","clear"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,QAAP,MAAqB,UAArB;AAEA;AACA;AACA;AACA;;AACA,OAAO,IAAMC,YAA6B,GAAG,CAACC,EAAD,EAAKC,OAAL,KAAiB;AAC5D,MAAIC,eAAe,GAAG,KAAtB;AACA,MAAMC,UAAU,GAAGL,QAAQ,CAACE,EAAD,kCACtBC,OADsB;AAEzBG,IAAAA,OAAO,EAAE,MAAM;AACb;AACA,UAAI,CAACF,eAAL,EAAsB;AACpBA,QAAAA,eAAe,GAAG,IAAlB;AACAC,QAAAA,UAAU,CAACE,KAAX;AACAH,QAAAA,eAAe,GAAG,KAAlB;AACD;AACF;AATwB,KAA3B;AAYA,SAAOC,UAAP;AACD,CAfM;AAiBP,eAAeJ,YAAf","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 const memoizeClear: typeof memoizee = (fn, options) => {\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"],"file":"memoizeClear.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/mouse-handlers/EditMouseHandler.ts"],"names":["isEditableGridModel","GridMouseHandler","GridRange","EditMouseHandler","onDoubleClick","grid","column","row","model","props","isEditableRange","makeCell","startEditing"],"mappings":"AAAA;SACSA,mB;OAGFC,gB;OACAC,S;;AAGP;AACA;AACA;AACA,MAAMC,gBAAN,SAA+BF,gBAA/B,CAAgD;AAC9CG,EAAAA,aAAa,OAA6BC,IAA7B,EAA6D;AAAA,QAA5D;AAAEC,MAAAA,MAAF;AAAUC,MAAAA;AAAV,KAA4D;AACxE,QAAM;AAAEC,MAAAA;AAAF,QAAYH,IAAI,CAACI,KAAvB;;AACA,QACET,mBAAmB,CAACQ,KAAD,CAAnB,IACAF,MAAM,IAAI,IADV,IAEAC,GAAG,IAAI,IAFP,IAGAC,KAAK,CAACE,eAAN,CAAsBR,SAAS,CAACS,QAAV,CAAmBL,MAAnB,EAA2BC,GAA3B,CAAtB,CAJF,EAKE;AACAF,MAAAA,IAAI,CAACO,YAAL,CAAkBN,MAAlB,EAA0BC,GAA1B;AACA,aAAO,IAAP;AACD;;AACD,WAAO,KAAP;AACD;;AAb6C;;AAgBhD,eAAeJ,gBAAf","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport { isEditableGridModel } from '../EditableGridModel';\nimport { EventHandlerResult } from '../EventHandlerResult';\nimport Grid from '../Grid';\nimport GridMouseHandler from '../GridMouseHandler';\nimport GridRange from '../GridRange';\nimport { GridPoint } from '../GridUtils';\n\n/**\n * Handles clicking on a cell to edit it in an editable grid\n */\nclass EditMouseHandler extends GridMouseHandler {\n onDoubleClick({ column, row }: GridPoint, grid: Grid): EventHandlerResult {\n const { model } = grid.props;\n if (\n isEditableGridModel(model) &&\n column != null &&\n row != null &&\n model.isEditableRange(GridRange.makeCell(column, row))\n ) {\n grid.startEditing(column, row);\n return true;\n }\n return false;\n }\n}\n\nexport default EditMouseHandler;\n"],"file":"EditMouseHandler.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridColumnMoveMouseHandler.js","names":["clamp","GridUtils","GridMouseHandler","SLOPPY_CLICK_DISTANCE","SCROLL_INTERVAL","SCROLL_DELTA","getColumnInfo","visibleIndex","depth","metrics","model","modelColumns","movedColumns","visibleColumnXs","columnCount","visibleColumnWidths","userColumnWidths","calculatedColumnWidths","floatingLeftWidth","maxX","modelIndex","get","getModelIndex","group","getColumnHeaderGroup","isColumnGroup","left","right","range","startVisibleIndex","endVisibleIndex","getVisibleRange","possibleLeft","width","GridColumnMoveMouseHandler","setScrollInterval","grid","direction","scrollingInterval","scrollingDirection","window","setInterval","lastLeft","leftOffset","nextLeft","nextOffset","prevColumnWidth","undefined","leftColumnWidth","mouseX","mouseY","state","moveDraggingColumn","setState","clearScrollInterval","clearInterval","onLeave","onDown","gridPoint","props","x","column","columnHeaderDepth","Error","columnInfo","rowHeaderWidth","initialGridPoint","draggingColumn","cursor","isColumnMovable","draggingOffset","initialOffset","onDrag","event","y","Math","abs","initialColumnInfo","startColumn","endColumn","isDragging","movementX","deltaX","draggingColumnDepth","columnHeaderMaxDepth","isDraggingLeft","floatingDraggingLeft","floatingDraggingRight","swapColumn","getColumnAtX","parentGroup","getColumnHeaderParentGroup","parentVisibleRange","newMovedColumns","moveColumn","parentRight","toVisibleIndex","toColumnInfo","switchPoint","draggingParentGroup","maxDepthSwapGroup","maxSwapDepth","to","moveRange","moveItem","moveDistance","newDraggingRange","onUp"],"sources":["../../src/mouse-handlers/GridColumnMoveMouseHandler.ts"],"sourcesContent":["import clamp from 'lodash.clamp';\nimport Grid from '../Grid';\nimport GridUtils, { GridPoint } from '../GridUtils';\nimport GridMouseHandler, { GridMouseEvent } from '../GridMouseHandler';\nimport { EventHandlerResult } from '../EventHandlerResult';\nimport type {\n VisibleIndex,\n ModelIndex,\n GridMetrics,\n MoveOperation,\n Coordinate,\n} from '../GridMetrics';\nimport type { BoundedAxisRange } from '../GridAxisRange';\nimport type GridModel from '../GridModel';\nimport type { IColumnHeaderGroup } from '../ColumnHeaderGroup';\n\nconst SLOPPY_CLICK_DISTANCE = 5;\nconst SCROLL_INTERVAL = 1000 / 60;\nconst SCROLL_DELTA = 10;\n\nexport interface DraggingColumn {\n range: BoundedAxisRange;\n depth: number;\n left: Coordinate;\n width: number;\n}\n\ninterface ColumnInfo {\n visibleIndex: VisibleIndex;\n modelIndex: ModelIndex;\n left: number;\n right: number;\n width: number;\n isColumnGroup: boolean;\n range: BoundedAxisRange;\n depth: number;\n}\n\n/**\n * Gets info about a visible column\n * @param visibleIndex The visible index to get info for\n * @param depth The header depth to get info for\n * @param metrics Grid metrics\n * @param model Grid model\n * @returns The column info at the depth.\n * If the column is not in a group at that depth, returns the info for the base column.\n * Returns null if the column is not visible.\n */\nfunction getColumnInfo(\n visibleIndex: VisibleIndex | null,\n depth: number | undefined,\n metrics: GridMetrics,\n model: GridModel\n): ColumnInfo | null {\n const {\n modelColumns,\n movedColumns,\n visibleColumnXs,\n columnCount,\n visibleColumnWidths,\n userColumnWidths,\n calculatedColumnWidths,\n floatingLeftWidth,\n maxX,\n } = metrics;\n\n if (\n depth == null ||\n visibleIndex == null ||\n visibleIndex > columnCount ||\n visibleIndex < 0\n ) {\n return null;\n }\n\n const modelIndex =\n modelColumns.get(visibleIndex) ??\n GridUtils.getModelIndex(visibleIndex, movedColumns);\n\n const group = model.getColumnHeaderGroup(modelIndex, depth);\n const isColumnGroup = group != null;\n\n let left: number;\n let right: number;\n let range: BoundedAxisRange;\n\n if (group != null) {\n const [startVisibleIndex, endVisibleIndex] = group.getVisibleRange(\n movedColumns\n );\n\n left = visibleColumnXs.get(startVisibleIndex) ?? floatingLeftWidth;\n right =\n (visibleColumnXs.get(endVisibleIndex) ?? maxX) +\n (visibleColumnWidths.get(endVisibleIndex) ?? 0);\n range = [startVisibleIndex, endVisibleIndex];\n } else {\n const possibleLeft = visibleColumnXs.get(visibleIndex);\n if (possibleLeft == null) {\n return null;\n }\n\n left = possibleLeft;\n right =\n left +\n (visibleColumnWidths.get(visibleIndex) ??\n userColumnWidths.get(modelIndex) ??\n calculatedColumnWidths.get(modelIndex) ??\n 0);\n range = [visibleIndex, visibleIndex];\n }\n\n return {\n visibleIndex,\n modelIndex,\n left,\n right,\n width: right - left,\n isColumnGroup,\n range,\n depth,\n };\n}\n\nclass GridColumnMoveMouseHandler extends GridMouseHandler {\n cursor: string | null = null;\n\n private draggingOffset?: number;\n\n private initialOffset?: number;\n\n private initialGridPoint?: GridPoint;\n\n private scrollingInterval?: number;\n\n private scrollingDirection?: 'left' | 'right';\n\n private draggingColumn: DraggingColumn | null = null;\n\n private setScrollInterval(grid: Grid, direction: 'left' | 'right'): void {\n if (\n this.scrollingInterval != null &&\n direction === this.scrollingDirection\n ) {\n return;\n }\n\n this.scrollingDirection = direction;\n this.scrollingInterval = window.setInterval(() => {\n const { metrics } = grid;\n if (!metrics) {\n return;\n }\n\n const {\n left,\n lastLeft,\n leftOffset,\n userColumnWidths,\n calculatedColumnWidths,\n movedColumns,\n visibleColumnWidths,\n } = metrics;\n\n let nextLeft = left;\n let nextOffset = leftOffset;\n if (direction === 'left') {\n nextOffset -= SCROLL_DELTA;\n while (nextOffset < 0) {\n nextLeft -= 1;\n const modelIndex = GridUtils.getModelIndex(left - 1, movedColumns);\n const prevColumnWidth =\n userColumnWidths.get(modelIndex) ??\n calculatedColumnWidths.get(modelIndex);\n if (prevColumnWidth === undefined) {\n nextOffset = 0;\n } else {\n nextOffset += prevColumnWidth;\n }\n if (nextLeft < 0) {\n nextOffset = 0;\n nextLeft = 0;\n }\n }\n } else {\n nextOffset += SCROLL_DELTA;\n let leftColumnWidth = visibleColumnWidths.get(left);\n while (leftColumnWidth !== undefined && nextOffset > leftColumnWidth) {\n nextLeft += 1;\n nextOffset -= leftColumnWidth;\n const modelIndex = GridUtils.getModelIndex(left + 1, movedColumns);\n leftColumnWidth =\n userColumnWidths.get(modelIndex) ??\n calculatedColumnWidths.get(modelIndex);\n\n if (nextLeft > lastLeft) {\n nextOffset = 0;\n nextLeft = lastLeft;\n }\n }\n }\n\n const { mouseX, mouseY } = grid.state;\n\n if (!metrics || mouseX == null || mouseY == null) {\n return;\n }\n\n this.moveDraggingColumn(\n mouseX,\n grid,\n direction === 'left' ? -SCROLL_DELTA : SCROLL_DELTA\n );\n grid.setState({ left: nextLeft, leftOffset: nextOffset });\n\n if (\n (direction === 'left' && nextLeft === 0 && leftOffset === 0) ||\n (direction === 'right' && nextLeft === lastLeft)\n ) {\n this.clearScrollInterval();\n }\n }, SCROLL_INTERVAL);\n }\n\n private clearScrollInterval(): void {\n this.scrollingDirection = undefined;\n window.clearInterval(this.scrollingInterval);\n this.scrollingInterval = undefined;\n }\n\n onLeave(): EventHandlerResult {\n this.clearScrollInterval();\n return false;\n }\n\n onDown(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n const { model } = grid.props;\n const { x, column, columnHeaderDepth } = gridPoint;\n const { metrics } = grid;\n if (!metrics) throw new Error('Metrics not set');\n\n const columnInfo = getColumnInfo(column, columnHeaderDepth, metrics, model);\n\n if (column == null || columnInfo == null || columnHeaderDepth == null) {\n return false;\n }\n\n // Can't drag a base column from the empty group area\n if (columnHeaderDepth > 0 && !columnInfo.isColumnGroup) {\n return false;\n }\n\n const { rowHeaderWidth } = metrics;\n\n this.initialGridPoint = gridPoint;\n this.draggingColumn = null;\n this.cursor = null;\n\n if (\n columnInfo.modelIndex != null &&\n columnHeaderDepth != null &&\n model.isColumnMovable(columnInfo.modelIndex, columnHeaderDepth)\n ) {\n this.draggingOffset = x - columnInfo.left - rowHeaderWidth;\n this.initialOffset = this.draggingOffset;\n }\n return false;\n }\n\n onDrag(\n gridPoint: GridPoint,\n grid: Grid,\n event: GridMouseEvent\n ): EventHandlerResult {\n if (\n this.draggingOffset === undefined ||\n this.initialGridPoint === undefined ||\n this.initialOffset === undefined\n ) {\n return false;\n }\n\n const { x: mouseX, y: mouseY } = gridPoint;\n const { columnHeaderDepth } = this.initialGridPoint;\n\n const { model } = grid.props;\n let { draggingColumn } = this;\n const { metrics } = grid;\n\n if (!metrics) throw new Error('Metrics not set');\n\n // before considering it a drag, the mouse must have moved a minimum distance\n // this prevents click actions from triggering a drag state\n if (\n !draggingColumn &&\n Math.abs(this.initialGridPoint.x - mouseX) < SLOPPY_CLICK_DISTANCE &&\n Math.abs(this.initialGridPoint.y - mouseY) < SLOPPY_CLICK_DISTANCE\n ) {\n return false;\n }\n\n // Get the initial dragging column info\n if (draggingColumn == null) {\n const initialColumnInfo = getColumnInfo(\n this.initialGridPoint.column,\n columnHeaderDepth,\n metrics,\n model\n );\n\n if (!initialColumnInfo || columnHeaderDepth == null) {\n return false;\n }\n\n if (!model.isColumnMovable(initialColumnInfo.modelIndex)) {\n return false;\n }\n\n // Disallow dragging from the blank space in column header groups\n if (columnHeaderDepth > 0 && !initialColumnInfo.isColumnGroup) {\n return false;\n }\n\n if (initialColumnInfo.range[0] == null) {\n return false;\n }\n\n draggingColumn = {\n range: initialColumnInfo.range,\n depth: columnHeaderDepth,\n left: initialColumnInfo.left,\n width: initialColumnInfo.width,\n };\n\n const startColumn = getColumnInfo(\n draggingColumn.range[0],\n 0,\n metrics,\n model\n );\n const endColumn = getColumnInfo(\n draggingColumn.range[1],\n 0,\n metrics,\n model\n );\n\n // Group goes off the table. Drag and drop could be wonky here\n // Column draws only use columns that are partially visible too\n // So this could cause rendering errors if we tried dragging it\n if (!startColumn || !endColumn) {\n return false;\n }\n\n this.draggingColumn = draggingColumn;\n grid.setState({ draggingColumn, isDragging: true });\n }\n\n /**\n * At this point, we have determined we are actually dragging a column\n */\n this.cursor = 'move';\n\n this.moveDraggingColumn(gridPoint.x, grid, event.movementX);\n\n return true;\n }\n\n /**\n * Moves a dragging column, if possible, the specified distance\n * @param mouseX The point the move was initiated from\n * @param grid The Grid component\n * @param deltaX The distance of the move\n */\n moveDraggingColumn(mouseX: number, grid: Grid, deltaX: number): void {\n if (\n this.draggingOffset === undefined ||\n this.initialGridPoint === undefined ||\n this.initialOffset === undefined ||\n this.draggingColumn == null ||\n deltaX === 0\n ) {\n return;\n }\n\n // Cursor has moved past the column drag bounds, don't move the column until we hit the initial offset point again\n if (this.initialOffset !== this.draggingOffset) {\n // Pre move < Initial < Post move or vice-versa\n // User crossed back past the iniital offset point, so we can start moving again\n if (\n (this.draggingOffset < this.initialOffset &&\n this.initialOffset < this.draggingOffset + deltaX) ||\n (this.draggingOffset > this.initialOffset &&\n this.initialOffset > this.draggingOffset + deltaX)\n ) {\n this.draggingOffset = this.initialOffset;\n } else {\n // Column can't move since we aren't back at the initial offset yet\n this.draggingOffset += deltaX;\n }\n\n this.draggingColumn = {\n ...this.draggingColumn,\n left: mouseX - this.draggingOffset,\n };\n grid.setState({ draggingColumn: this.draggingColumn });\n return;\n }\n\n const { depth: draggingColumnDepth } = this.draggingColumn;\n\n const { model } = grid.props;\n const { movedColumns } = grid.state;\n const { metrics } = grid;\n if (!metrics) throw new Error('Metrics not set');\n\n const {\n floatingLeftWidth,\n width,\n columnHeaderMaxDepth,\n visibleColumnXs,\n } = metrics;\n\n const isDraggingLeft = deltaX < 0;\n\n const draggingColumn = getColumnInfo(\n this.draggingColumn.range[0],\n draggingColumnDepth,\n metrics,\n model\n );\n\n if (!draggingColumn) {\n return;\n }\n\n // The returned left/right are the original position, not dragged position\n // This is where the dragging column's floating position accounting for dragged distance\n const floatingDraggingLeft = mouseX - this.draggingOffset;\n const floatingDraggingRight = floatingDraggingLeft + draggingColumn.width;\n\n this.draggingColumn = {\n ...this.draggingColumn,\n left: floatingDraggingLeft,\n };\n grid.setState({\n draggingColumn: this.draggingColumn,\n });\n\n const swapColumn = getColumnInfo(\n GridUtils.getColumnAtX(\n clamp(\n isDraggingLeft ? floatingDraggingLeft : floatingDraggingRight,\n floatingLeftWidth,\n width\n ),\n metrics,\n true\n ),\n draggingColumnDepth,\n metrics,\n model\n );\n\n const parentGroup = model.getColumnHeaderParentGroup(\n draggingColumn.modelIndex,\n draggingColumn.depth\n );\n\n if (!swapColumn) {\n return;\n }\n\n // Check if we should pin to the edge of the parent\n if (parentGroup) {\n const parentVisibleRange = parentGroup.getVisibleRange(movedColumns);\n // Cannot move to this left position, pin to left of parent\n if (swapColumn.visibleIndex < parentVisibleRange[0]) {\n const newMovedColumns = this.moveColumn(\n draggingColumn,\n parentVisibleRange[0],\n movedColumns\n );\n\n this.draggingOffset =\n mouseX - (visibleColumnXs.get(parentVisibleRange[0]) ?? 0);\n this.draggingColumn = {\n ...this.draggingColumn,\n left: mouseX - this.draggingOffset,\n };\n this.clearScrollInterval();\n grid.setState({\n draggingColumn: this.draggingColumn,\n movedColumns: newMovedColumns,\n });\n return;\n }\n\n // Pin to the right of parent\n if (swapColumn.visibleIndex > parentVisibleRange[1]) {\n const newMovedColumns = this.moveColumn(\n draggingColumn,\n parentVisibleRange[1] -\n (draggingColumn.range[1] - draggingColumn.range[0]),\n movedColumns\n );\n\n const { right: parentRight = 0 } =\n getColumnInfo(parentVisibleRange[1], 0, metrics, model) ?? {};\n\n this.draggingOffset = mouseX - (parentRight - draggingColumn.width);\n this.draggingColumn = {\n ...this.draggingColumn,\n left: mouseX - this.draggingOffset,\n };\n this.clearScrollInterval();\n grid.setState({\n draggingColumn: this.draggingColumn,\n movedColumns: newMovedColumns,\n });\n return;\n }\n }\n\n // Hit an unmovable column, move to the first available position next to it\n if (!model.isColumnMovable(swapColumn.modelIndex)) {\n let toVisibleIndex = swapColumn.visibleIndex;\n if (isDraggingLeft) {\n toVisibleIndex += 1;\n while (\n toVisibleIndex < draggingColumn.visibleIndex &&\n !model.isColumnMovable(\n GridUtils.getModelIndex(toVisibleIndex, movedColumns)\n )\n ) {\n toVisibleIndex += 1;\n }\n } else {\n toVisibleIndex -= 1;\n while (\n toVisibleIndex > draggingColumn.visibleIndex &&\n !model.isColumnMovable(\n GridUtils.getModelIndex(toVisibleIndex, movedColumns)\n )\n ) {\n toVisibleIndex -= 1;\n }\n }\n\n if (toVisibleIndex !== draggingColumn.visibleIndex) {\n if (!isDraggingLeft) {\n // Offset for range if dragging right\n toVisibleIndex -= draggingColumn.range[1] - draggingColumn.range[0];\n }\n\n const newMovedColumns = this.moveColumn(\n draggingColumn,\n toVisibleIndex,\n movedColumns\n );\n\n grid.setState({\n movedColumns: newMovedColumns,\n draggingColumn: this.draggingColumn,\n });\n }\n\n const toColumnInfo = getColumnInfo(toVisibleIndex, 0, metrics, model);\n if (isDraggingLeft) {\n this.draggingOffset = mouseX - (toColumnInfo?.left ?? 0);\n } else {\n this.draggingOffset =\n mouseX - ((toColumnInfo?.right ?? 0) - draggingColumn.width);\n }\n\n this.draggingColumn = {\n ...this.draggingColumn,\n left: mouseX - this.draggingOffset,\n };\n\n grid.setState({\n draggingColumn: this.draggingColumn,\n });\n\n return;\n }\n\n if (floatingDraggingLeft <= floatingLeftWidth) {\n this.setScrollInterval(grid, 'left');\n } else if (floatingDraggingRight > width) {\n this.setScrollInterval(grid, 'right');\n } else {\n this.clearScrollInterval();\n }\n\n // Can't swap a column with itself\n if (swapColumn.visibleIndex === draggingColumn.visibleIndex) {\n return;\n }\n\n // Can't swap a column to the left when dragging right or vice versa\n if (\n (isDraggingLeft &&\n draggingColumn.visibleIndex < swapColumn.visibleIndex) ||\n (!isDraggingLeft && draggingColumn.visibleIndex > swapColumn.visibleIndex)\n ) {\n return;\n }\n\n const switchPoint = swapColumn.left + swapColumn.width * 0.5;\n const draggingParentGroup = model.getColumnHeaderParentGroup(\n draggingColumn.modelIndex,\n draggingColumn.depth\n );\n\n // Get the highest level group that is not the common base group\n // This group is what we need to drag past\n let maxDepthSwapGroup: IColumnHeaderGroup | undefined;\n let maxSwapDepth = (draggingParentGroup?.depth ?? columnHeaderMaxDepth) - 1;\n while (maxSwapDepth >= 0 && maxDepthSwapGroup === undefined) {\n maxDepthSwapGroup = model.getColumnHeaderGroup(\n swapColumn.modelIndex,\n maxSwapDepth\n );\n maxSwapDepth -= 1;\n }\n\n let newMovedColumns: MoveOperation[] | undefined;\n\n if (\n isDraggingLeft &&\n floatingDraggingLeft < switchPoint &&\n (!maxDepthSwapGroup ||\n swapColumn.visibleIndex ===\n maxDepthSwapGroup.getVisibleRange(movedColumns)[0])\n ) {\n newMovedColumns = this.moveColumn(\n draggingColumn,\n swapColumn.range[0],\n movedColumns\n );\n }\n\n if (\n !isDraggingLeft &&\n floatingDraggingRight > switchPoint &&\n (!maxDepthSwapGroup ||\n swapColumn.visibleIndex ===\n maxDepthSwapGroup.getVisibleRange(movedColumns)[1])\n ) {\n newMovedColumns = this.moveColumn(\n draggingColumn,\n swapColumn.range[1] -\n (draggingColumn.range[1] - draggingColumn.range[0]),\n movedColumns\n );\n }\n\n if (!newMovedColumns) {\n return;\n }\n\n this.draggingColumn = {\n ...this.draggingColumn,\n left: floatingDraggingLeft,\n };\n\n grid.setState({\n movedColumns: newMovedColumns,\n draggingColumn: this.draggingColumn,\n });\n }\n\n /**\n * Applies the column move and updates draggingColumn in the mouse handler\n * Does not check if the move is valid\n * @param draggingColumn The dragging column info\n * @param to The index to move the column or range to\n * @param movedColumns The array of column moves\n * @returns A new array of column moves\n */\n moveColumn(\n draggingColumn: ColumnInfo,\n to: number,\n movedColumns: MoveOperation[]\n ): MoveOperation[] {\n const newMovedColumns = draggingColumn.isColumnGroup\n ? GridUtils.moveRange(draggingColumn.range, to, movedColumns)\n : GridUtils.moveItem(draggingColumn.visibleIndex, to, movedColumns);\n\n const moveDistance = to - draggingColumn.range[0];\n const newDraggingRange: BoundedAxisRange = [\n draggingColumn.range[0] + moveDistance,\n draggingColumn.range[1] + moveDistance,\n ];\n\n if (this.draggingColumn) {\n this.draggingColumn = {\n ...this.draggingColumn,\n range: newDraggingRange,\n };\n }\n\n return newMovedColumns;\n }\n\n onUp(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n this.cursor = null;\n\n this.clearScrollInterval();\n\n if (this.draggingOffset != null) {\n this.draggingOffset = undefined;\n grid.setState({\n draggingColumn: null,\n isDragging: false,\n });\n return true;\n }\n\n return false;\n }\n}\n\nexport default GridColumnMoveMouseHandler;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/mouse-handlers/GridColumnMoveMouseHandler.ts"],"names":["clamp","GridUtils","GridMouseHandler","SLOPPY_CLICK_DISTANCE","SCROLL_INTERVAL","SCROLL_DELTA","getColumnInfo","visibleIndex","depth","metrics","model","modelColumns","movedColumns","visibleColumnXs","columnCount","visibleColumnWidths","userColumnWidths","calculatedColumnWidths","floatingLeftWidth","maxX","modelIndex","get","getModelIndex","group","getColumnHeaderGroup","isColumnGroup","left","right","range","startVisibleIndex","endVisibleIndex","getVisibleRange","possibleLeft","width","GridColumnMoveMouseHandler","setScrollInterval","grid","direction","scrollingInterval","scrollingDirection","window","setInterval","lastLeft","leftOffset","nextLeft","nextOffset","prevColumnWidth","undefined","leftColumnWidth","mouseX","mouseY","state","moveDraggingColumn","setState","clearScrollInterval","clearInterval","onLeave","onDown","gridPoint","props","x","column","columnHeaderDepth","Error","columnInfo","rowHeaderWidth","initialGridPoint","draggingColumn","cursor","isColumnMovable","draggingOffset","initialOffset","onDrag","event","y","Math","abs","initialColumnInfo","startColumn","endColumn","isDragging","movementX","deltaX","draggingColumnDepth","columnHeaderMaxDepth","isDraggingLeft","floatingDraggingLeft","floatingDraggingRight","swapColumn","getColumnAtX","parentGroup","getColumnHeaderParentGroup","parentVisibleRange","newMovedColumns","moveColumn","parentRight","toVisibleIndex","toColumnInfo","switchPoint","draggingParentGroup","maxDepthSwapGroup","maxSwapDepth","to","moveRange","moveItem","moveDistance","newDraggingRange","onUp"],"mappings":"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","sourcesContent":["import clamp from 'lodash.clamp';\nimport Grid from '../Grid';\nimport GridUtils, { GridPoint } from '../GridUtils';\nimport GridMouseHandler, { GridMouseEvent } from '../GridMouseHandler';\nimport { EventHandlerResult } from '../EventHandlerResult';\nimport type {\n VisibleIndex,\n ModelIndex,\n GridMetrics,\n MoveOperation,\n Coordinate,\n} from '../GridMetrics';\nimport type { BoundedAxisRange } from '../GridAxisRange';\nimport type GridModel from '../GridModel';\nimport type { IColumnHeaderGroup } from '../ColumnHeaderGroup';\n\nconst SLOPPY_CLICK_DISTANCE = 5;\nconst SCROLL_INTERVAL = 1000 / 60;\nconst SCROLL_DELTA = 10;\n\nexport interface DraggingColumn {\n range: BoundedAxisRange;\n depth: number;\n left: Coordinate;\n width: number;\n}\n\ninterface ColumnInfo {\n visibleIndex: VisibleIndex;\n modelIndex: ModelIndex;\n left: number;\n right: number;\n width: number;\n isColumnGroup: boolean;\n range: BoundedAxisRange;\n depth: number;\n}\n\n/**\n * Gets info about a visible column\n * @param visibleIndex The visible index to get info for\n * @param depth The header depth to get info for\n * @param metrics Grid metrics\n * @param model Grid model\n * @returns The column info at the depth.\n * If the column is not in a group at that depth, returns the info for the base column.\n * Returns null if the column is not visible.\n */\nfunction getColumnInfo(\n visibleIndex: VisibleIndex | null,\n depth: number | undefined,\n metrics: GridMetrics,\n model: GridModel\n): ColumnInfo | null {\n const {\n modelColumns,\n movedColumns,\n visibleColumnXs,\n columnCount,\n visibleColumnWidths,\n userColumnWidths,\n calculatedColumnWidths,\n floatingLeftWidth,\n maxX,\n } = metrics;\n\n if (\n depth == null ||\n visibleIndex == null ||\n visibleIndex > columnCount ||\n visibleIndex < 0\n ) {\n return null;\n }\n\n const modelIndex =\n modelColumns.get(visibleIndex) ??\n GridUtils.getModelIndex(visibleIndex, movedColumns);\n\n const group = model.getColumnHeaderGroup(modelIndex, depth);\n const isColumnGroup = group != null;\n\n let left: number;\n let right: number;\n let range: BoundedAxisRange;\n\n if (group != null) {\n const [startVisibleIndex, endVisibleIndex] = group.getVisibleRange(\n movedColumns\n );\n\n left = visibleColumnXs.get(startVisibleIndex) ?? floatingLeftWidth;\n right =\n (visibleColumnXs.get(endVisibleIndex) ?? maxX) +\n (visibleColumnWidths.get(endVisibleIndex) ?? 0);\n range = [startVisibleIndex, endVisibleIndex];\n } else {\n const possibleLeft = visibleColumnXs.get(visibleIndex);\n if (possibleLeft == null) {\n return null;\n }\n\n left = possibleLeft;\n right =\n left +\n (visibleColumnWidths.get(visibleIndex) ??\n userColumnWidths.get(modelIndex) ??\n calculatedColumnWidths.get(modelIndex) ??\n 0);\n range = [visibleIndex, visibleIndex];\n }\n\n return {\n visibleIndex,\n modelIndex,\n left,\n right,\n width: right - left,\n isColumnGroup,\n range,\n depth,\n };\n}\n\nclass GridColumnMoveMouseHandler extends GridMouseHandler {\n cursor: string | null = null;\n\n private draggingOffset?: number;\n\n private initialOffset?: number;\n\n private initialGridPoint?: GridPoint;\n\n private scrollingInterval?: number;\n\n private scrollingDirection?: 'left' | 'right';\n\n private draggingColumn: DraggingColumn | null = null;\n\n private setScrollInterval(grid: Grid, direction: 'left' | 'right'): void {\n if (\n this.scrollingInterval != null &&\n direction === this.scrollingDirection\n ) {\n return;\n }\n\n this.scrollingDirection = direction;\n this.scrollingInterval = window.setInterval(() => {\n const { metrics } = grid;\n if (!metrics) {\n return;\n }\n\n const {\n left,\n lastLeft,\n leftOffset,\n userColumnWidths,\n calculatedColumnWidths,\n movedColumns,\n visibleColumnWidths,\n } = metrics;\n\n let nextLeft = left;\n let nextOffset = leftOffset;\n if (direction === 'left') {\n nextOffset -= SCROLL_DELTA;\n while (nextOffset < 0) {\n nextLeft -= 1;\n const modelIndex = GridUtils.getModelIndex(left - 1, movedColumns);\n const prevColumnWidth =\n userColumnWidths.get(modelIndex) ??\n calculatedColumnWidths.get(modelIndex);\n if (prevColumnWidth === undefined) {\n nextOffset = 0;\n } else {\n nextOffset += prevColumnWidth;\n }\n if (nextLeft < 0) {\n nextOffset = 0;\n nextLeft = 0;\n }\n }\n } else {\n nextOffset += SCROLL_DELTA;\n let leftColumnWidth = visibleColumnWidths.get(left);\n while (leftColumnWidth !== undefined && nextOffset > leftColumnWidth) {\n nextLeft += 1;\n nextOffset -= leftColumnWidth;\n const modelIndex = GridUtils.getModelIndex(left + 1, movedColumns);\n leftColumnWidth =\n userColumnWidths.get(modelIndex) ??\n calculatedColumnWidths.get(modelIndex);\n\n if (nextLeft > lastLeft) {\n nextOffset = 0;\n nextLeft = lastLeft;\n }\n }\n }\n\n const { mouseX, mouseY } = grid.state;\n\n if (!metrics || mouseX == null || mouseY == null) {\n return;\n }\n\n this.moveDraggingColumn(\n mouseX,\n grid,\n direction === 'left' ? -SCROLL_DELTA : SCROLL_DELTA\n );\n grid.setState({ left: nextLeft, leftOffset: nextOffset });\n\n if (\n (direction === 'left' && nextLeft === 0 && leftOffset === 0) ||\n (direction === 'right' && nextLeft === lastLeft)\n ) {\n this.clearScrollInterval();\n }\n }, SCROLL_INTERVAL);\n }\n\n private clearScrollInterval(): void {\n this.scrollingDirection = undefined;\n window.clearInterval(this.scrollingInterval);\n this.scrollingInterval = undefined;\n }\n\n onLeave(): EventHandlerResult {\n this.clearScrollInterval();\n return false;\n }\n\n onDown(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n const { model } = grid.props;\n const { x, column, columnHeaderDepth } = gridPoint;\n const { metrics } = grid;\n if (!metrics) throw new Error('Metrics not set');\n\n const columnInfo = getColumnInfo(column, columnHeaderDepth, metrics, model);\n\n if (column == null || columnInfo == null || columnHeaderDepth == null) {\n return false;\n }\n\n // Can't drag a base column from the empty group area\n if (columnHeaderDepth > 0 && !columnInfo.isColumnGroup) {\n return false;\n }\n\n const { rowHeaderWidth } = metrics;\n\n this.initialGridPoint = gridPoint;\n this.draggingColumn = null;\n this.cursor = null;\n\n if (\n columnInfo.modelIndex != null &&\n columnHeaderDepth != null &&\n model.isColumnMovable(columnInfo.modelIndex, columnHeaderDepth)\n ) {\n this.draggingOffset = x - columnInfo.left - rowHeaderWidth;\n this.initialOffset = this.draggingOffset;\n }\n return false;\n }\n\n onDrag(\n gridPoint: GridPoint,\n grid: Grid,\n event: GridMouseEvent\n ): EventHandlerResult {\n if (\n this.draggingOffset === undefined ||\n this.initialGridPoint === undefined ||\n this.initialOffset === undefined\n ) {\n return false;\n }\n\n const { x: mouseX, y: mouseY } = gridPoint;\n const { columnHeaderDepth } = this.initialGridPoint;\n\n const { model } = grid.props;\n let { draggingColumn } = this;\n const { metrics } = grid;\n\n if (!metrics) throw new Error('Metrics not set');\n\n // before considering it a drag, the mouse must have moved a minimum distance\n // this prevents click actions from triggering a drag state\n if (\n !draggingColumn &&\n Math.abs(this.initialGridPoint.x - mouseX) < SLOPPY_CLICK_DISTANCE &&\n Math.abs(this.initialGridPoint.y - mouseY) < SLOPPY_CLICK_DISTANCE\n ) {\n return false;\n }\n\n // Get the initial dragging column info\n if (draggingColumn == null) {\n const initialColumnInfo = getColumnInfo(\n this.initialGridPoint.column,\n columnHeaderDepth,\n metrics,\n model\n );\n\n if (!initialColumnInfo || columnHeaderDepth == null) {\n return false;\n }\n\n if (!model.isColumnMovable(initialColumnInfo.modelIndex)) {\n return false;\n }\n\n // Disallow dragging from the blank space in column header groups\n if (columnHeaderDepth > 0 && !initialColumnInfo.isColumnGroup) {\n return false;\n }\n\n if (initialColumnInfo.range[0] == null) {\n return false;\n }\n\n draggingColumn = {\n range: initialColumnInfo.range,\n depth: columnHeaderDepth,\n left: initialColumnInfo.left,\n width: initialColumnInfo.width,\n };\n\n const startColumn = getColumnInfo(\n draggingColumn.range[0],\n 0,\n metrics,\n model\n );\n const endColumn = getColumnInfo(\n draggingColumn.range[1],\n 0,\n metrics,\n model\n );\n\n // Group goes off the table. Drag and drop could be wonky here\n // Column draws only use columns that are partially visible too\n // So this could cause rendering errors if we tried dragging it\n if (!startColumn || !endColumn) {\n return false;\n }\n\n this.draggingColumn = draggingColumn;\n grid.setState({ draggingColumn, isDragging: true });\n }\n\n /**\n * At this point, we have determined we are actually dragging a column\n */\n this.cursor = 'move';\n\n this.moveDraggingColumn(gridPoint.x, grid, event.movementX);\n\n return true;\n }\n\n /**\n * Moves a dragging column, if possible, the specified distance\n * @param mouseX The point the move was initiated from\n * @param grid The Grid component\n * @param deltaX The distance of the move\n */\n moveDraggingColumn(mouseX: number, grid: Grid, deltaX: number): void {\n if (\n this.draggingOffset === undefined ||\n this.initialGridPoint === undefined ||\n this.initialOffset === undefined ||\n this.draggingColumn == null ||\n deltaX === 0\n ) {\n return;\n }\n\n // Cursor has moved past the column drag bounds, don't move the column until we hit the initial offset point again\n if (this.initialOffset !== this.draggingOffset) {\n // Pre move < Initial < Post move or vice-versa\n // User crossed back past the iniital offset point, so we can start moving again\n if (\n (this.draggingOffset < this.initialOffset &&\n this.initialOffset < this.draggingOffset + deltaX) ||\n (this.draggingOffset > this.initialOffset &&\n this.initialOffset > this.draggingOffset + deltaX)\n ) {\n this.draggingOffset = this.initialOffset;\n } else {\n // Column can't move since we aren't back at the initial offset yet\n this.draggingOffset += deltaX;\n }\n\n this.draggingColumn = {\n ...this.draggingColumn,\n left: mouseX - this.draggingOffset,\n };\n grid.setState({ draggingColumn: this.draggingColumn });\n return;\n }\n\n const { depth: draggingColumnDepth } = this.draggingColumn;\n\n const { model } = grid.props;\n const { movedColumns } = grid.state;\n const { metrics } = grid;\n if (!metrics) throw new Error('Metrics not set');\n\n const {\n floatingLeftWidth,\n width,\n columnHeaderMaxDepth,\n visibleColumnXs,\n } = metrics;\n\n const isDraggingLeft = deltaX < 0;\n\n const draggingColumn = getColumnInfo(\n this.draggingColumn.range[0],\n draggingColumnDepth,\n metrics,\n model\n );\n\n if (!draggingColumn) {\n return;\n }\n\n // The returned left/right are the original position, not dragged position\n // This is where the dragging column's floating position accounting for dragged distance\n const floatingDraggingLeft = mouseX - this.draggingOffset;\n const floatingDraggingRight = floatingDraggingLeft + draggingColumn.width;\n\n this.draggingColumn = {\n ...this.draggingColumn,\n left: floatingDraggingLeft,\n };\n grid.setState({\n draggingColumn: this.draggingColumn,\n });\n\n const swapColumn = getColumnInfo(\n GridUtils.getColumnAtX(\n clamp(\n isDraggingLeft ? floatingDraggingLeft : floatingDraggingRight,\n floatingLeftWidth,\n width\n ),\n metrics,\n true\n ),\n draggingColumnDepth,\n metrics,\n model\n );\n\n const parentGroup = model.getColumnHeaderParentGroup(\n draggingColumn.modelIndex,\n draggingColumn.depth\n );\n\n if (!swapColumn) {\n return;\n }\n\n // Check if we should pin to the edge of the parent\n if (parentGroup) {\n const parentVisibleRange = parentGroup.getVisibleRange(movedColumns);\n // Cannot move to this left position, pin to left of parent\n if (swapColumn.visibleIndex < parentVisibleRange[0]) {\n const newMovedColumns = this.moveColumn(\n draggingColumn,\n parentVisibleRange[0],\n movedColumns\n );\n\n this.draggingOffset =\n mouseX - (visibleColumnXs.get(parentVisibleRange[0]) ?? 0);\n this.draggingColumn = {\n ...this.draggingColumn,\n left: mouseX - this.draggingOffset,\n };\n this.clearScrollInterval();\n grid.setState({\n draggingColumn: this.draggingColumn,\n movedColumns: newMovedColumns,\n });\n return;\n }\n\n // Pin to the right of parent\n if (swapColumn.visibleIndex > parentVisibleRange[1]) {\n const newMovedColumns = this.moveColumn(\n draggingColumn,\n parentVisibleRange[1] -\n (draggingColumn.range[1] - draggingColumn.range[0]),\n movedColumns\n );\n\n const { right: parentRight = 0 } =\n getColumnInfo(parentVisibleRange[1], 0, metrics, model) ?? {};\n\n this.draggingOffset = mouseX - (parentRight - draggingColumn.width);\n this.draggingColumn = {\n ...this.draggingColumn,\n left: mouseX - this.draggingOffset,\n };\n this.clearScrollInterval();\n grid.setState({\n draggingColumn: this.draggingColumn,\n movedColumns: newMovedColumns,\n });\n return;\n }\n }\n\n // Hit an unmovable column, move to the first available position next to it\n if (!model.isColumnMovable(swapColumn.modelIndex)) {\n let toVisibleIndex = swapColumn.visibleIndex;\n if (isDraggingLeft) {\n toVisibleIndex += 1;\n while (\n toVisibleIndex < draggingColumn.visibleIndex &&\n !model.isColumnMovable(\n GridUtils.getModelIndex(toVisibleIndex, movedColumns)\n )\n ) {\n toVisibleIndex += 1;\n }\n } else {\n toVisibleIndex -= 1;\n while (\n toVisibleIndex > draggingColumn.visibleIndex &&\n !model.isColumnMovable(\n GridUtils.getModelIndex(toVisibleIndex, movedColumns)\n )\n ) {\n toVisibleIndex -= 1;\n }\n }\n\n if (toVisibleIndex !== draggingColumn.visibleIndex) {\n if (!isDraggingLeft) {\n // Offset for range if dragging right\n toVisibleIndex -= draggingColumn.range[1] - draggingColumn.range[0];\n }\n\n const newMovedColumns = this.moveColumn(\n draggingColumn,\n toVisibleIndex,\n movedColumns\n );\n\n grid.setState({\n movedColumns: newMovedColumns,\n draggingColumn: this.draggingColumn,\n });\n }\n\n const toColumnInfo = getColumnInfo(toVisibleIndex, 0, metrics, model);\n if (isDraggingLeft) {\n this.draggingOffset = mouseX - (toColumnInfo?.left ?? 0);\n } else {\n this.draggingOffset =\n mouseX - ((toColumnInfo?.right ?? 0) - draggingColumn.width);\n }\n\n this.draggingColumn = {\n ...this.draggingColumn,\n left: mouseX - this.draggingOffset,\n };\n\n grid.setState({\n draggingColumn: this.draggingColumn,\n });\n\n return;\n }\n\n if (floatingDraggingLeft <= floatingLeftWidth) {\n this.setScrollInterval(grid, 'left');\n } else if (floatingDraggingRight > width) {\n this.setScrollInterval(grid, 'right');\n } else {\n this.clearScrollInterval();\n }\n\n // Can't swap a column with itself\n if (swapColumn.visibleIndex === draggingColumn.visibleIndex) {\n return;\n }\n\n // Can't swap a column to the left when dragging right or vice versa\n if (\n (isDraggingLeft &&\n draggingColumn.visibleIndex < swapColumn.visibleIndex) ||\n (!isDraggingLeft && draggingColumn.visibleIndex > swapColumn.visibleIndex)\n ) {\n return;\n }\n\n const switchPoint = swapColumn.left + swapColumn.width * 0.5;\n const draggingParentGroup = model.getColumnHeaderParentGroup(\n draggingColumn.modelIndex,\n draggingColumn.depth\n );\n\n // Get the highest level group that is not the common base group\n // This group is what we need to drag past\n let maxDepthSwapGroup: IColumnHeaderGroup | undefined;\n let maxSwapDepth = (draggingParentGroup?.depth ?? columnHeaderMaxDepth) - 1;\n while (maxSwapDepth >= 0 && maxDepthSwapGroup === undefined) {\n maxDepthSwapGroup = model.getColumnHeaderGroup(\n swapColumn.modelIndex,\n maxSwapDepth\n );\n maxSwapDepth -= 1;\n }\n\n let newMovedColumns: MoveOperation[] | undefined;\n\n if (\n isDraggingLeft &&\n floatingDraggingLeft < switchPoint &&\n (!maxDepthSwapGroup ||\n swapColumn.visibleIndex ===\n maxDepthSwapGroup.getVisibleRange(movedColumns)[0])\n ) {\n newMovedColumns = this.moveColumn(\n draggingColumn,\n swapColumn.range[0],\n movedColumns\n );\n }\n\n if (\n !isDraggingLeft &&\n floatingDraggingRight > switchPoint &&\n (!maxDepthSwapGroup ||\n swapColumn.visibleIndex ===\n maxDepthSwapGroup.getVisibleRange(movedColumns)[1])\n ) {\n newMovedColumns = this.moveColumn(\n draggingColumn,\n swapColumn.range[1] -\n (draggingColumn.range[1] - draggingColumn.range[0]),\n movedColumns\n );\n }\n\n if (!newMovedColumns) {\n return;\n }\n\n this.draggingColumn = {\n ...this.draggingColumn,\n left: floatingDraggingLeft,\n };\n\n grid.setState({\n movedColumns: newMovedColumns,\n draggingColumn: this.draggingColumn,\n });\n }\n\n /**\n * Applies the column move and updates draggingColumn in the mouse handler\n * Does not check if the move is valid\n * @param draggingColumn The dragging column info\n * @param to The index to move the column or range to\n * @param movedColumns The array of column moves\n * @returns A new array of column moves\n */\n moveColumn(\n draggingColumn: ColumnInfo,\n to: number,\n movedColumns: MoveOperation[]\n ): MoveOperation[] {\n const newMovedColumns = draggingColumn.isColumnGroup\n ? GridUtils.moveRange(draggingColumn.range, to, movedColumns)\n : GridUtils.moveItem(draggingColumn.visibleIndex, to, movedColumns);\n\n const moveDistance = to - draggingColumn.range[0];\n const newDraggingRange: BoundedAxisRange = [\n draggingColumn.range[0] + moveDistance,\n draggingColumn.range[1] + moveDistance,\n ];\n\n if (this.draggingColumn) {\n this.draggingColumn = {\n ...this.draggingColumn,\n range: newDraggingRange,\n };\n }\n\n return newMovedColumns;\n }\n\n onUp(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n this.cursor = null;\n\n this.clearScrollInterval();\n\n if (this.draggingOffset != null) {\n this.draggingOffset = undefined;\n grid.setState({\n draggingColumn: null,\n isDragging: false,\n });\n return true;\n }\n\n return false;\n }\n}\n\nexport default GridColumnMoveMouseHandler;\n"],"file":"GridColumnMoveMouseHandler.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/mouse-handlers/GridColumnSeparatorMouseHandler.ts"],"names":["GridUtils","GridSeparatorMouseHandler","GridColumnSeparatorMouseHandler","getHiddenColumns","getNextShownColumn","getColumnSeparator","gridPoint","metrics","model","theme","allowColumnResize","x","y","columnHeaderDepth","modelColumns","separatorIndex","getColumnSeparatorIndex","columnIndex","get","index","depth","setSize","metricCalculator","modelIndex","size","setColumnWidth","resetSize","resetColumnWidth","updateSeparator","grid","separator","setState","draggingColumnSeparator","isDragging"],"mappings":";;AAAA;OAMOA,S;OACAC,yB;;AAIP,MAAMC,+BAAN,SAA8CD,yBAA9C,CAAwE;AAAA;AAAA;;AAAA,0CAuCvD,UAvCuD;;AAAA,2CAyCtD,YAzCsD;;AAAA,2CA2CtD,GA3CsD;;AAAA,+CA6ClD,kBA7CkD;;AAAA,mDA+C9C,iBA/C8C;;AAAA,kDAiD/C,qBAjD+C;;AAAA,4CAmDrD,gBAnDqD;;AAAA,qDAqD5C,wBArD4C;;AAAA,kDAuD/C,cAvD+C;;AAAA,gDAyDjD,aAzDiD;;AAAA,iDA2DhD,cA3DgD;;AAAA,4CA6DrDD,SAAS,CAACG,gBA7D2C;;AAAA,8CA+DnDH,SAAS,CAACI,kBA/DyC;;AAAA,0CAuFvDF,+BAA+B,CAACG,kBAvFuB;AAAA;;AAC7C,SAAlBA,kBAAkB,CACvBC,SADuB,EAEvBC,OAFuB,EAGvBC,KAHuB,EAIvBC,KAJuB,EAKD;AACtB,QAAI,CAACA,KAAK,CAACC,iBAAX,EAA8B;AAC5B,aAAO,IAAP;AACD;;AAED,QAAM;AAAEC,MAAAA,CAAF;AAAKC,MAAAA,CAAL;AAAQC,MAAAA;AAAR,QAA8BP,SAApC;AAEA,QAAM;AAAEQ,MAAAA;AAAF,QAAmBP,OAAzB;AAEA,QAAMQ,cAAc,GAAGf,SAAS,CAACgB,uBAAV,CACrBL,CADqB,EAErBC,CAFqB,EAGrBL,OAHqB,EAIrBE,KAJqB,CAAvB,CATsB,CAgBtB;;AACA,QACEM,cAAc,IAAI,IAAlB,IACAF,iBAAiB,IAAI,IADrB,IAEAA,iBAAiB,GAAG,CAHtB,EAIE;AACA,aAAO,IAAP;AACD;;AAED,QAAMI,WAAW,GAAGH,YAAY,CAACI,GAAb,CAAiBH,cAAjB,CAApB;;AACA,QAAIE,WAAW,IAAI,IAAnB,EAAyB;AACvB,aAAO;AAAEE,QAAAA,KAAK,EAAEJ,cAAT;AAAyBK,QAAAA,KAAK,EAAE;AAAhC,OAAP;AACD;;AAED,WAAO,IAAP;AACD;;AA4BDC,EAAAA,OAAO,CACLC,gBADK,EAELC,UAFK,EAGLC,IAHK,EAIC;AACNF,IAAAA,gBAAgB,CAACG,cAAjB,CAAgCF,UAAhC,EAA4CC,IAA5C;AACD;;AAEDE,EAAAA,SAAS,CACPJ,gBADO,EAEPC,UAFO,EAGD;AACND,IAAAA,gBAAgB,CAACK,gBAAjB,CAAkCJ,UAAlC;AACD;;AAEDK,EAAAA,eAAe,CAACC,IAAD,EAAaC,SAAb,EAAoD;AACjED,IAAAA,IAAI,CAACE,QAAL,CAAc;AACZC,MAAAA,uBAAuB,EAAEF,SADb;AAEZG,MAAAA,UAAU,EAAEH,SAAS,KAAK;AAFd,KAAd;AAID;;AArFqE;;AA0FxE,eAAe5B,+BAAf","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport Grid from '../Grid';\nimport GridMetricCalculator from '../GridMetricCalculator';\nimport type { ModelIndex, GridMetrics } from '../GridMetrics';\nimport type GridModel from '../GridModel';\nimport type { GridTheme } from '../GridTheme';\nimport GridUtils, { GridPoint } from '../GridUtils';\nimport GridSeparatorMouseHandler, {\n GridSeparator,\n} from './GridSeparatorMouseHandler';\n\nclass GridColumnSeparatorMouseHandler extends GridSeparatorMouseHandler {\n static getColumnSeparator(\n gridPoint: GridPoint,\n metrics: GridMetrics,\n model: GridModel,\n theme: GridTheme\n ): GridSeparator | null {\n if (!theme.allowColumnResize) {\n return null;\n }\n\n const { x, y, columnHeaderDepth } = gridPoint;\n\n const { modelColumns } = metrics;\n\n const separatorIndex = GridUtils.getColumnSeparatorIndex(\n x,\n y,\n metrics,\n theme\n );\n\n // TODO #695: Allow resizing of column groups as well. Right now just allow resizing from base columns\n if (\n separatorIndex == null ||\n columnHeaderDepth == null ||\n columnHeaderDepth > 0\n ) {\n return null;\n }\n\n const columnIndex = modelColumns.get(separatorIndex);\n if (columnIndex != null) {\n return { index: separatorIndex, depth: 0 };\n }\n\n return null;\n }\n\n hiddenCursor = 'e-resize';\n\n defaultCursor = 'col-resize';\n\n pointProperty = 'x' as const;\n\n userSizesProperty = 'userColumnWidths' as const;\n\n visibleOffsetProperty = 'visibleColumnXs' as const;\n\n visibleSizesProperty = 'visibleColumnWidths' as const;\n\n marginProperty = 'rowHeaderWidth' as const;\n\n calculatedSizesProperty = 'calculatedColumnWidths' as const;\n\n modelIndexesProperty = 'modelColumns' as const;\n\n firstIndexProperty = 'firstColumn' as const;\n\n treePaddingProperty = 'treePaddingX' as const;\n\n getHiddenItems = GridUtils.getHiddenColumns;\n\n getNextShownItem = GridUtils.getNextShownColumn;\n\n setSize(\n metricCalculator: GridMetricCalculator,\n modelIndex: ModelIndex,\n size: number\n ): void {\n metricCalculator.setColumnWidth(modelIndex, size);\n }\n\n resetSize(\n metricCalculator: GridMetricCalculator,\n modelIndex: ModelIndex\n ): void {\n metricCalculator.resetColumnWidth(modelIndex);\n }\n\n updateSeparator(grid: Grid, separator: GridSeparator | null): void {\n grid.setState({\n draggingColumnSeparator: separator,\n isDragging: separator !== null,\n });\n }\n\n getSeparator = GridColumnSeparatorMouseHandler.getColumnSeparator;\n}\n\nexport default GridColumnSeparatorMouseHandler;\n"],"file":"GridColumnSeparatorMouseHandler.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/mouse-handlers/GridHorizontalScrollBarMouseHandler.ts"],"names":["clamp","GridMouseHandler","GridHorizontalScrollBarMouseHandler","getLeftWithOffsetFromRawLeft","grid","rawLeft","theme","getTheme","metrics","metricCalculator","Error","scrollSnapToColumn","left","Math","round","leftOffset","floor","leftOffsetPercent","columnWidth","visibleColumnWidths","get","metricState","getMetricState","getVisibleColumnWidth","isInScrollBar","gridPoint","scrollBarSize","scrollBarHoverSize","x","y","barLeft","barWidth","height","hasHorizontalBar","getLeftWithOffset","handleWidth","lastLeft","columnCount","scrollableContentWidth","scrollableViewportWidth","mouseBarX","scrollPercent","dragOffset","onDown","scrollX","setState","isDraggingHorizontalScrollBar","newLeft","newLeftOffset","setViewState","isDragging","onDrag","onMove","onUp","undefined","onClick"],"mappings":"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","sourcesContent":["import clamp from 'lodash.clamp';\nimport { EventHandlerResult } from '../EventHandlerResult';\nimport Grid from '../Grid';\nimport { VisibleIndex } from '../GridMetrics';\nimport GridMouseHandler from '../GridMouseHandler';\nimport { GridPoint } from '../GridUtils';\n\n/* eslint class-methods-use-this: \"off\" */\nclass GridHorizontalScrollBarMouseHandler extends GridMouseHandler {\n static getLeftWithOffsetFromRawLeft(\n grid: Grid,\n rawLeft: number\n ): { left: VisibleIndex; leftOffset: number } {\n const theme = grid.getTheme();\n const { metrics, metricCalculator } = grid;\n if (!metrics) throw new Error('metrics not set');\n\n if (theme.scrollSnapToColumn) {\n const left = Math.round(rawLeft);\n const leftOffset = 0;\n\n return { left, leftOffset };\n }\n const left = Math.floor(rawLeft);\n const leftOffsetPercent = rawLeft - left;\n let columnWidth = metrics.visibleColumnWidths.get(left);\n if (columnWidth == null) {\n const metricState = grid.getMetricState();\n columnWidth = metricCalculator.getVisibleColumnWidth(left, metricState);\n }\n const leftOffset = columnWidth * leftOffsetPercent;\n\n return { left, leftOffset };\n }\n\n private dragOffset?: number;\n\n // to trigger pointer event blocking\n cursor = 'default';\n\n isInScrollBar(gridPoint: GridPoint, grid: Grid): boolean {\n const theme = grid.getTheme();\n\n const { scrollBarSize, scrollBarHoverSize } = theme;\n const { metrics } = grid;\n if (!metrics) throw new Error('metrics not set');\n\n const { x, y } = gridPoint;\n const { barLeft, barWidth, height, hasHorizontalBar } = metrics;\n\n return (\n hasHorizontalBar &&\n scrollBarSize > 0 &&\n y >= height - scrollBarHoverSize &&\n y < height &&\n x > barLeft &&\n x < barLeft + barWidth\n );\n }\n\n getLeftWithOffset(\n gridPoint: GridPoint,\n grid: Grid\n ): { left: number; leftOffset: number } {\n const { metrics } = grid;\n if (!metrics) throw new Error('metrics not set');\n\n const { x } = gridPoint;\n const {\n barWidth,\n handleWidth,\n lastLeft,\n barLeft,\n columnCount,\n scrollableContentWidth,\n scrollableViewportWidth,\n } = metrics;\n\n const mouseBarX = x - barLeft;\n const scrollPercent = clamp(\n (mouseBarX - (this.dragOffset ?? 0)) / (barWidth - handleWidth),\n 0,\n 1\n );\n\n if (columnCount === 1) {\n return {\n left: 0,\n leftOffset:\n scrollPercent * (scrollableContentWidth - scrollableViewportWidth),\n };\n }\n\n const rawLeft = scrollPercent * lastLeft;\n return GridHorizontalScrollBarMouseHandler.getLeftWithOffsetFromRawLeft(\n grid,\n rawLeft\n );\n }\n\n onDown(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n const { metrics } = grid;\n if (!metrics) throw new Error('metrics not set');\n\n const { x } = gridPoint;\n const { handleWidth, barLeft, scrollX } = metrics;\n if (!this.isInScrollBar(gridPoint, grid)) {\n return false;\n }\n\n const mouseBarX = x - barLeft;\n if (mouseBarX >= scrollX && mouseBarX <= scrollX + handleWidth) {\n // Grabbed the horizontal handle\n this.dragOffset = mouseBarX - scrollX;\n grid.setState({ isDraggingHorizontalScrollBar: true });\n } else {\n this.dragOffset = 0;\n\n const {\n left: newLeft,\n leftOffset: newLeftOffset,\n } = this.getLeftWithOffset(gridPoint, grid);\n\n grid.setViewState({\n left: newLeft,\n leftOffset: newLeftOffset,\n isDraggingHorizontalScrollBar: true,\n isDragging: true,\n });\n }\n\n return true;\n }\n\n onDrag(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n if (this.dragOffset != null) {\n const {\n left: newLeft,\n leftOffset: newLeftOffset,\n } = this.getLeftWithOffset(gridPoint, grid);\n\n grid.setViewState({\n left: newLeft,\n leftOffset: newLeftOffset,\n isDraggingHorizontalScrollBar: true,\n isDragging: true,\n });\n\n return true;\n }\n return false;\n }\n\n onMove(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n return this.isInScrollBar(gridPoint, grid);\n }\n\n onUp(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n if (this.dragOffset !== undefined) {\n this.dragOffset = undefined;\n grid.setState({\n isDraggingHorizontalScrollBar: false,\n isDragging: false,\n });\n }\n\n return this.isInScrollBar(gridPoint, grid);\n }\n\n onClick(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n return this.isInScrollBar(gridPoint, grid);\n }\n}\n\nexport default GridHorizontalScrollBarMouseHandler;\n"],"file":"GridHorizontalScrollBarMouseHandler.js"}
|