@deephaven/grid 0.7.3-beta.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/dist/CellInputField.d.ts +4 -4
  2. package/dist/CellInputField.d.ts.map +1 -1
  3. package/dist/CellInputField.js +10 -11
  4. package/dist/CellInputField.js.map +1 -1
  5. package/dist/EditableGridModel.d.ts +70 -0
  6. package/dist/EditableGridModel.d.ts.map +1 -0
  7. package/dist/EditableGridModel.js +13 -0
  8. package/dist/EditableGridModel.js.map +1 -0
  9. package/dist/EventHandlerResult.d.ts +17 -0
  10. package/dist/EventHandlerResult.d.ts.map +1 -0
  11. package/dist/EventHandlerResult.js +2 -0
  12. package/dist/EventHandlerResult.js.map +1 -0
  13. package/dist/ExpandableGridModel.d.ts +34 -0
  14. package/dist/ExpandableGridModel.d.ts.map +1 -0
  15. package/dist/ExpandableGridModel.js +7 -0
  16. package/dist/ExpandableGridModel.js.map +1 -0
  17. package/dist/Grid.d.ts +283 -234
  18. package/dist/Grid.d.ts.map +1 -1
  19. package/dist/Grid.js +397 -165
  20. package/dist/Grid.js.map +1 -1
  21. package/dist/GridColorUtils.d.ts +22 -12
  22. package/dist/GridColorUtils.d.ts.map +1 -1
  23. package/dist/GridColorUtils.js +26 -21
  24. package/dist/GridColorUtils.js.map +1 -1
  25. package/dist/GridMetricCalculator.d.ts.map +1 -1
  26. package/dist/GridMetricCalculator.js +8 -4
  27. package/dist/GridMetricCalculator.js.map +1 -1
  28. package/dist/GridModel.d.ts +54 -60
  29. package/dist/GridModel.d.ts.map +1 -1
  30. package/dist/GridModel.js +54 -122
  31. package/dist/GridModel.js.map +1 -1
  32. package/dist/GridMouseHandler.d.ts +23 -24
  33. package/dist/GridMouseHandler.d.ts.map +1 -1
  34. package/dist/GridMouseHandler.js +8 -14
  35. package/dist/GridMouseHandler.js.map +1 -1
  36. package/dist/GridRange.d.ts +2 -2
  37. package/dist/GridRange.d.ts.map +1 -1
  38. package/dist/GridRange.js +1 -1
  39. package/dist/GridRange.js.map +1 -1
  40. package/dist/GridRenderer.d.ts +117 -69
  41. package/dist/GridRenderer.d.ts.map +1 -1
  42. package/dist/GridRenderer.js +183 -168
  43. package/dist/GridRenderer.js.map +1 -1
  44. package/dist/GridUtils.d.ts +4 -4
  45. package/dist/GridUtils.js +4 -4
  46. package/dist/GridUtils.js.map +1 -1
  47. package/dist/KeyHandler.d.ts +10 -7
  48. package/dist/KeyHandler.d.ts.map +1 -1
  49. package/dist/KeyHandler.js +6 -5
  50. package/dist/KeyHandler.js.map +1 -1
  51. package/dist/MockGridData.d.ts +1 -1
  52. package/dist/MockGridData.d.ts.map +1 -1
  53. package/dist/MockGridData.js.map +1 -1
  54. package/dist/MockGridModel.d.ts +39 -12
  55. package/dist/MockGridModel.d.ts.map +1 -1
  56. package/dist/MockGridModel.js +43 -10
  57. package/dist/MockGridModel.js.map +1 -1
  58. package/dist/MockTreeGridModel.d.ts +37 -22
  59. package/dist/MockTreeGridModel.d.ts.map +1 -1
  60. package/dist/MockTreeGridModel.js +38 -20
  61. package/dist/MockTreeGridModel.js.map +1 -1
  62. package/dist/errors/AssertionError.d.ts +5 -0
  63. package/dist/errors/AssertionError.d.ts.map +1 -0
  64. package/dist/errors/AssertionError.js +12 -0
  65. package/dist/errors/AssertionError.js.map +1 -0
  66. package/dist/errors/PasteError.d.ts +1 -1
  67. package/dist/errors/PasteError.d.ts.map +1 -1
  68. package/dist/errors/PasteError.js +1 -2
  69. package/dist/errors/PasteError.js.map +1 -1
  70. package/dist/errors/assertIsDefined.d.ts +3 -0
  71. package/dist/errors/assertIsDefined.d.ts.map +1 -0
  72. package/dist/errors/assertIsDefined.js +8 -0
  73. package/dist/errors/assertIsDefined.js.map +1 -0
  74. package/dist/errors/index.d.ts +2 -0
  75. package/dist/errors/index.d.ts.map +1 -1
  76. package/dist/errors/index.js +2 -1
  77. package/dist/errors/index.js.map +1 -1
  78. package/dist/index.d.ts +1 -0
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.js +1 -0
  81. package/dist/index.js.map +1 -1
  82. package/dist/key-handlers/EditKeyHandler.d.ts +3 -2
  83. package/dist/key-handlers/EditKeyHandler.d.ts.map +1 -1
  84. package/dist/key-handlers/EditKeyHandler.js +10 -9
  85. package/dist/key-handlers/EditKeyHandler.js.map +1 -1
  86. package/dist/key-handlers/PasteKeyHandler.d.ts +3 -5
  87. package/dist/key-handlers/PasteKeyHandler.d.ts.map +1 -1
  88. package/dist/key-handlers/PasteKeyHandler.js +3 -3
  89. package/dist/key-handlers/PasteKeyHandler.js.map +1 -1
  90. package/dist/key-handlers/SelectionKeyHandler.d.ts +5 -5
  91. package/dist/key-handlers/SelectionKeyHandler.d.ts.map +1 -1
  92. package/dist/key-handlers/SelectionKeyHandler.js +16 -15
  93. package/dist/key-handlers/SelectionKeyHandler.js.map +1 -1
  94. package/dist/key-handlers/TreeKeyHandler.d.ts +2 -2
  95. package/dist/key-handlers/TreeKeyHandler.d.ts.map +1 -1
  96. package/dist/key-handlers/TreeKeyHandler.js +14 -12
  97. package/dist/key-handlers/TreeKeyHandler.js.map +1 -1
  98. package/dist/memoizeClear.d.ts +13 -3
  99. package/dist/memoizeClear.d.ts.map +1 -1
  100. package/dist/memoizeClear.js +7 -7
  101. package/dist/memoizeClear.js.map +1 -1
  102. package/dist/mouse-handlers/EditMouseHandler.d.ts +3 -4
  103. package/dist/mouse-handlers/EditMouseHandler.d.ts.map +1 -1
  104. package/dist/mouse-handlers/EditMouseHandler.js +3 -2
  105. package/dist/mouse-handlers/EditMouseHandler.js.map +1 -1
  106. package/dist/mouse-handlers/GridColumnMoveMouseHandler.d.ts +12 -5
  107. package/dist/mouse-handlers/GridColumnMoveMouseHandler.d.ts.map +1 -1
  108. package/dist/mouse-handlers/GridColumnMoveMouseHandler.js +13 -10
  109. package/dist/mouse-handlers/GridColumnMoveMouseHandler.js.map +1 -1
  110. package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.d.ts +24 -3
  111. package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.d.ts.map +1 -1
  112. package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js +2 -1
  113. package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js.map +1 -1
  114. package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.d.ts +16 -6
  115. package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.d.ts.map +1 -1
  116. package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js +41 -37
  117. package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js.map +1 -1
  118. package/dist/mouse-handlers/GridRowMoveMouseHandler.d.ts +10 -3
  119. package/dist/mouse-handlers/GridRowMoveMouseHandler.d.ts.map +1 -1
  120. package/dist/mouse-handlers/GridRowMoveMouseHandler.js +14 -11
  121. package/dist/mouse-handlers/GridRowMoveMouseHandler.js.map +1 -1
  122. package/dist/mouse-handlers/GridRowSeparatorMouseHandler.d.ts +24 -3
  123. package/dist/mouse-handlers/GridRowSeparatorMouseHandler.d.ts.map +1 -1
  124. package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js +4 -3
  125. package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js.map +1 -1
  126. package/dist/mouse-handlers/GridRowTreeMouseHandler.d.ts +8 -3
  127. package/dist/mouse-handlers/GridRowTreeMouseHandler.d.ts.map +1 -1
  128. package/dist/mouse-handlers/GridRowTreeMouseHandler.js +12 -7
  129. package/dist/mouse-handlers/GridRowTreeMouseHandler.js.map +1 -1
  130. package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.d.ts +9 -3
  131. package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.d.ts.map +1 -1
  132. package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js +2 -1
  133. package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js.map +1 -1
  134. package/dist/mouse-handlers/GridSelectionMouseHandler.d.ts +15 -9
  135. package/dist/mouse-handlers/GridSelectionMouseHandler.d.ts.map +1 -1
  136. package/dist/mouse-handlers/GridSelectionMouseHandler.js +26 -16
  137. package/dist/mouse-handlers/GridSelectionMouseHandler.js.map +1 -1
  138. package/dist/mouse-handlers/GridSeparatorMouseHandler.d.ts +46 -28
  139. package/dist/mouse-handlers/GridSeparatorMouseHandler.d.ts.map +1 -1
  140. package/dist/mouse-handlers/GridSeparatorMouseHandler.js +57 -74
  141. package/dist/mouse-handlers/GridSeparatorMouseHandler.js.map +1 -1
  142. package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.d.ts +16 -6
  143. package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.d.ts.map +1 -1
  144. package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js +41 -37
  145. package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js.map +1 -1
  146. package/dist/tsconfig.tsbuildinfo +1 -1
  147. package/package.json +3 -3
@@ -2,10 +2,11 @@
2
2
  import GridUtils from "../GridUtils.js";
3
3
  import GridRange from "../GridRange.js";
4
4
  import KeyHandler from "../KeyHandler.js";
5
+ import { isEditableGridModel } from "../EditableGridModel.js";
5
6
 
6
7
  class EditKeyHandler extends KeyHandler {
7
- onDown(e, grid) {
8
- if (GridUtils.isModifierKeyDown(e)) {
8
+ onDown(event, grid) {
9
+ if (GridUtils.isModifierKeyDown(event)) {
9
10
  return false;
10
11
  }
11
12
 
@@ -17,7 +18,7 @@ class EditKeyHandler extends KeyHandler {
17
18
  cursorRow
18
19
  } = grid.state;
19
20
 
20
- if (cursorColumn == null || cursorRow == null || !model.isEditableRange(GridRange.makeCell(cursorColumn, cursorRow))) {
21
+ if (cursorColumn == null || cursorRow == null || !isEditableGridModel(model) || !model.isEditableRange(GridRange.makeCell(cursorColumn, cursorRow))) {
21
22
  return false;
22
23
  }
23
24
 
@@ -28,22 +29,22 @@ class EditKeyHandler extends KeyHandler {
28
29
  return false;
29
30
  }
30
31
 
31
- if (e.key.length === 1) {
32
- grid.startEditing(column, row, true, [1, 1], e.key);
32
+ if (event.key.length === 1) {
33
+ grid.startEditing(column, row, true, [1, 1], event.key);
33
34
  return true;
34
35
  }
35
36
 
36
- if (e.key === 'F2') {
37
+ if (event.key === 'F2') {
37
38
  grid.startEditing(column, row);
38
39
  return true;
39
40
  }
40
41
 
41
- if (e.key === 'Backspace') {
42
- grid.startEditing(column, row, true, null, '');
42
+ if (event.key === 'Backspace') {
43
+ grid.startEditing(column, row, true, undefined, '');
43
44
  return true;
44
45
  }
45
46
 
46
- if (e.key === 'Delete') {
47
+ if (event.key === 'Delete') {
47
48
  grid.setValueForCell(column, row, '');
48
49
  return true;
49
50
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/key-handlers/EditKeyHandler.ts"],"names":["GridUtils","GridRange","KeyHandler","EditKeyHandler","onDown","e","grid","isModifierKeyDown","model","props","cursorColumn","cursorRow","state","isEditableRange","makeCell","column","row","key","length","startEditing","setValueForCell"],"mappings":"AAAA;OACOA,S;OAEAC,S;OACAC,U;;AAEP,MAAMC,cAAN,SAA6BD,UAA7B,CAAwC;AACtCE,EAAAA,MAAM,CAACC,CAAD,EAAmBC,IAAnB,EAAwC;AAC5C,QAAIN,SAAS,CAACO,iBAAV,CAA4BF,CAA5B,CAAJ,EAAoC;AAClC,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,CAACH,KAAK,CAACK,eAAN,CAAsBZ,SAAS,CAACa,QAAV,CAAmBJ,YAAnB,EAAiCC,SAAjC,CAAtB,CAHH,EAIE;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,CAAC,CAACY,GAAF,CAAMC,MAAN,KAAiB,CAArB,EAAwB;AACtBZ,MAAAA,IAAI,CAACa,YAAL,CAAkBJ,MAAlB,EAA0BC,GAA1B,EAA+B,IAA/B,EAAqC,CAAC,CAAD,EAAI,CAAJ,CAArC,EAA6CX,CAAC,CAACY,GAA/C;AACA,aAAO,IAAP;AACD;;AAED,QAAIZ,CAAC,CAACY,GAAF,KAAU,IAAd,EAAoB;AAClBX,MAAAA,IAAI,CAACa,YAAL,CAAkBJ,MAAlB,EAA0BC,GAA1B;AACA,aAAO,IAAP;AACD;;AAED,QAAIX,CAAC,CAACY,GAAF,KAAU,WAAd,EAA2B;AACzBX,MAAAA,IAAI,CAACa,YAAL,CAAkBJ,MAAlB,EAA0BC,GAA1B,EAA+B,IAA/B,EAAqC,IAArC,EAA2C,EAA3C;AACA,aAAO,IAAP;AACD;;AAED,QAAIX,CAAC,CAACY,GAAF,KAAU,QAAd,EAAwB;AACtBX,MAAAA,IAAI,CAACc,eAAL,CAAqBL,MAArB,EAA6BC,GAA7B,EAAkC,EAAlC;AACA,aAAO,IAAP;AACD;;AACD,WAAO,KAAP;AACD;;AAzCqC;;AA4CxC,eAAeb,cAAf","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport GridUtils from '../GridUtils';\nimport Grid from '../Grid';\nimport GridRange from '../GridRange';\nimport KeyHandler from '../KeyHandler';\n\nclass EditKeyHandler extends KeyHandler {\n onDown(e: KeyboardEvent, grid: Grid): boolean {\n if (GridUtils.isModifierKeyDown(e)) {\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 !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 (e.key.length === 1) {\n grid.startEditing(column, row, true, [1, 1], e.key);\n return true;\n }\n\n if (e.key === 'F2') {\n grid.startEditing(column, row);\n return true;\n }\n\n if (e.key === 'Backspace') {\n grid.startEditing(column, row, true, null, '');\n return true;\n }\n\n if (e.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
+ {"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,5 +1,6 @@
1
+ import { EventHandlerResult } from '../EventHandlerResult';
1
2
  import Grid from '../Grid';
2
- import KeyHandler from '../KeyHandler';
3
+ import KeyHandler, { GridKeyboardEvent } from '../KeyHandler';
3
4
  /**
4
5
  * Parse out data from an HTML table. Currently does not support colspan/rowspan
5
6
  * @param table HTML Table
@@ -18,10 +19,7 @@ export declare function parseValueFromElement(element: HTMLElement): string | st
18
19
  * Handles the paste key combination
19
20
  */
20
21
  declare class PasteKeyHandler extends KeyHandler {
21
- onDown(e: KeyboardEvent, grid: Grid): boolean | {
22
- stopPropagation?: boolean;
23
- preventDefault?: boolean;
24
- };
22
+ onDown(event: GridKeyboardEvent, grid: Grid): EventHandlerResult;
25
23
  }
26
24
  export default PasteKeyHandler;
27
25
  //# sourceMappingURL=PasteKeyHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PasteKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/PasteKeyHandler.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,OAAO,UAAU,MAAM,eAAe,CAAC;AAEvC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,EAAE,EAAE,CAevE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,EAAE,CAY5E;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,GACnB,MAAM,GAAG,MAAM,EAAE,EAAE,GAAG,IAAI,CAiC5B;AAED;;GAEG;AACH,cAAM,eAAgB,SAAQ,UAAU;IACtC,MAAM,CACJ,CAAC,EAAE,aAAa,EAChB,IAAI,EAAE,IAAI,GACT,OAAO,GAAG;QAAE,eAAe,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE;CA0CrE;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"PasteKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/PasteKeyHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,OAAO,UAAU,EAAE,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE9D;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,EAAE,EAAE,CAevE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,EAAE,CAY5E;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,GACnB,MAAM,GAAG,MAAM,EAAE,EAAE,GAAG,IAAI,CAiC5B;AAED;;GAEG;AACH,cAAM,eAAgB,SAAQ,UAAU;IACtC,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;CA0CjE;AAED,eAAe,eAAe,CAAC"}
@@ -96,10 +96,10 @@ export function parseValueFromElement(element) {
96
96
  */
97
97
 
98
98
  class PasteKeyHandler extends KeyHandler {
99
- onDown(e, grid) {
100
- switch (e.key) {
99
+ onDown(event, grid) {
100
+ switch (event.key) {
101
101
  case 'v':
102
- if (GridUtils.isModifierKeyDown(e)) {
102
+ if (GridUtils.isModifierKeyDown(event)) {
103
103
  // Chrome doesn't allow the paste event on canvas elements
104
104
  // Instead, we capture the ctrl+v keydown, then do this to capture the input
105
105
  var dummyInput = document.createElement('div');
@@ -1 +1 @@
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","e","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 Grid from '../Grid';\nimport GridUtils from '../GridUtils';\nimport KeyHandler 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(\n e: KeyboardEvent,\n grid: Grid\n ): boolean | { stopPropagation?: boolean; preventDefault?: boolean } {\n switch (e.key) {\n case 'v':\n if (GridUtils.isModifierKeyDown(e)) {\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
+ {"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,10 +1,10 @@
1
1
  import Grid from '../Grid';
2
- import KeyHandler from '../KeyHandler';
2
+ import KeyHandler, { GridKeyboardEvent } from '../KeyHandler';
3
3
  declare class SelectionKeyHandler extends KeyHandler {
4
- onDown(e: KeyboardEvent, grid: Grid): boolean;
5
- handleArrowMove(deltaColumn: number, deltaRow: number, event: KeyboardEvent, grid: Grid): boolean;
6
- handlePageUp(e: KeyboardEvent, grid: Grid): boolean;
7
- handlePageDown(e: KeyboardEvent, grid: Grid): boolean;
4
+ onDown(event: GridKeyboardEvent, grid: Grid): boolean;
5
+ handleArrowMove(deltaColumn: number, deltaRow: number, event: GridKeyboardEvent, grid: Grid): boolean;
6
+ handlePageUp(e: GridKeyboardEvent, grid: Grid): boolean;
7
+ handlePageDown(e: GridKeyboardEvent, grid: Grid): boolean;
8
8
  }
9
9
  export default SelectionKeyHandler;
10
10
  //# sourceMappingURL=SelectionKeyHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectionKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/SelectionKeyHandler.ts"],"names":[],"mappings":"AAEA,OAAO,IAAI,MAAM,SAAS,CAAC;AAG3B,OAAO,UAAU,MAAM,eAAe,CAAC;AAEvC,cAAM,mBAAoB,SAAQ,UAAU;IAC1C,MAAM,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;IA2F7C,eAAe,CACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,IAAI,GACT,OAAO;IAyEV,YAAY,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;IA2CnD,cAAc,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;CA8CtD;AAED,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"SelectionKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/SelectionKeyHandler.ts"],"names":[],"mappings":"AAEA,OAAO,IAAI,MAAM,SAAS,CAAC;AAG3B,OAAO,UAAU,EAAE,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE9D,cAAM,mBAAoB,SAAQ,UAAU;IAC1C,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;IA6FrD,eAAe,CACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,IAAI,GACT,OAAO;IA2EV,YAAY,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;IA2CvD,cAAc,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;CA8C1D;AAED,eAAe,mBAAmB,CAAC"}
@@ -5,10 +5,10 @@ import GridUtils from "../GridUtils.js";
5
5
  import KeyHandler from "../KeyHandler.js";
6
6
 
7
7
  class SelectionKeyHandler extends KeyHandler {
8
- onDown(e, grid) {
9
- switch (e.key) {
8
+ onDown(event, grid) {
9
+ switch (event.key) {
10
10
  case 'a':
11
- if (GridUtils.isModifierKeyDown(e)) {
11
+ if (GridUtils.isModifierKeyDown(event)) {
12
12
  grid.selectAll();
13
13
  return true;
14
14
  }
@@ -16,25 +16,25 @@ class SelectionKeyHandler extends KeyHandler {
16
16
  break;
17
17
 
18
18
  case 'ArrowUp':
19
- return this.handleArrowMove(0, -1, e, grid);
19
+ return this.handleArrowMove(0, -1, event, grid);
20
20
 
21
21
  case 'ArrowDown':
22
- return this.handleArrowMove(0, 1, e, grid);
22
+ return this.handleArrowMove(0, 1, event, grid);
23
23
 
24
24
  case 'ArrowRight':
25
- return this.handleArrowMove(1, 0, e, grid);
25
+ return this.handleArrowMove(1, 0, event, grid);
26
26
 
27
27
  case 'ArrowLeft':
28
- return this.handleArrowMove(-1, 0, e, grid);
28
+ return this.handleArrowMove(-1, 0, event, grid);
29
29
 
30
30
  case 'k': // h/j/k/l keys are grouped together for quick navigation by power users
31
31
 
32
32
  case 'PageUp':
33
- return this.handlePageUp(e, grid);
33
+ return this.handlePageUp(event, grid);
34
34
 
35
35
  case 'j':
36
36
  case 'PageDown':
37
- return this.handlePageDown(e, grid);
37
+ return this.handlePageDown(event, grid);
38
38
 
39
39
  case 'h':
40
40
  grid.clearSelectedRanges();
@@ -55,11 +55,11 @@ class SelectionKeyHandler extends KeyHandler {
55
55
  }
56
56
 
57
57
  case 'Home':
58
- if (!e.shiftKey) {
58
+ if (!event.shiftKey) {
59
59
  grid.clearSelectedRanges();
60
60
  }
61
61
 
62
- grid.moveCursorToPosition(GridUtils.isModifierKeyDown(e) ? grid.state.cursorColumn : 0, GridUtils.isModifierKeyDown(e) ? 0 : grid.state.cursorRow, e.shiftKey, true, true);
62
+ grid.moveCursorToPosition(GridUtils.isModifierKeyDown(event) ? grid.state.cursorColumn : 0, GridUtils.isModifierKeyDown(event) ? 0 : grid.state.cursorRow, event.shiftKey, true, true);
63
63
  return true;
64
64
 
65
65
  case 'End':
@@ -72,11 +72,11 @@ class SelectionKeyHandler extends KeyHandler {
72
72
  rowCount
73
73
  } = _model;
74
74
 
75
- if (!e.shiftKey) {
75
+ if (!event.shiftKey) {
76
76
  grid.clearSelectedRanges();
77
77
  }
78
78
 
79
- grid.moveCursorToPosition(GridUtils.isModifierKeyDown(e) ? grid.state.cursorColumn : _columnCount - 1, GridUtils.isModifierKeyDown(e) ? rowCount - 1 : grid.state.cursorRow, e.shiftKey, true, true);
79
+ grid.moveCursorToPosition(GridUtils.isModifierKeyDown(event) ? grid.state.cursorColumn : _columnCount - 1, GridUtils.isModifierKeyDown(event) ? rowCount - 1 : grid.state.cursorRow, event.shiftKey, true, true);
80
80
  return true;
81
81
  }
82
82
 
@@ -86,7 +86,7 @@ class SelectionKeyHandler extends KeyHandler {
86
86
 
87
87
  case 'Enter':
88
88
  if (grid.state.selectedRanges.length > 0) {
89
- grid.moveCursorInDirection(e.shiftKey ? GridRange.SELECTION_DIRECTION.UP : GridRange.SELECTION_DIRECTION.DOWN);
89
+ grid.moveCursorInDirection(event.shiftKey ? GridRange.SELECTION_DIRECTION.UP : GridRange.SELECTION_DIRECTION.DOWN);
90
90
  return true;
91
91
  }
92
92
 
@@ -94,7 +94,7 @@ class SelectionKeyHandler extends KeyHandler {
94
94
 
95
95
  case 'Tab':
96
96
  if (grid.state.selectedRanges.length > 0) {
97
- grid.moveCursorInDirection(e.shiftKey ? GridRange.SELECTION_DIRECTION.LEFT : GridRange.SELECTION_DIRECTION.RIGHT);
97
+ grid.moveCursorInDirection(event.shiftKey ? GridRange.SELECTION_DIRECTION.LEFT : GridRange.SELECTION_DIRECTION.RIGHT);
98
98
  return true;
99
99
  }
100
100
 
@@ -156,6 +156,7 @@ class SelectionKeyHandler extends KeyHandler {
156
156
  grid.moveCursorToPosition(moveToColumn, moveToRow, isShiftKey, true, maximizePreviousRange);
157
157
  }
158
158
  } else {
159
+ if (!grid.metrics) throw new Error('grid.metrics are not set');
159
160
  var {
160
161
  theme
161
162
  } = grid.props;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/key-handlers/SelectionKeyHandler.ts"],"names":["clamp","GridRange","GridUtils","KeyHandler","SelectionKeyHandler","onDown","e","grid","key","isModifierKeyDown","selectAll","handleArrowMove","handlePageUp","handlePageDown","clearSelectedRanges","moveCursorToPosition","state","cursorRow","model","props","columnCount","shiftKey","cursorColumn","rowCount","selectedRanges","length","moveCursorInDirection","SELECTION_DIRECTION","UP","DOWN","LEFT","RIGHT","deltaColumn","deltaRow","event","isShiftKey","isModifierKey","trimSelectedRanges","selectionEndColumn","selectionEndRow","column","row","maximizePreviousRange","moveToColumn","moveToRow","theme","autoSelectRow","autoSelectColumn","lastLeft","metrics","left","setViewState","lastTop","top","moveCursor","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 from '../KeyHandler';\n\nclass SelectionKeyHandler extends KeyHandler {\n onDown(e: KeyboardEvent, grid: Grid): boolean {\n switch (e.key) {\n case 'a':\n if (GridUtils.isModifierKeyDown(e)) {\n grid.selectAll();\n return true;\n }\n break;\n case 'ArrowUp':\n return this.handleArrowMove(0, -1, e, grid);\n case 'ArrowDown':\n return this.handleArrowMove(0, 1, e, grid);\n case 'ArrowRight':\n return this.handleArrowMove(1, 0, e, grid);\n case 'ArrowLeft':\n return this.handleArrowMove(-1, 0, e, grid);\n case 'k': // h/j/k/l keys are grouped together for quick navigation by power users\n case 'PageUp':\n return this.handlePageUp(e, grid);\n case 'j':\n case 'PageDown':\n return this.handlePageDown(e, grid);\n case 'h':\n grid.clearSelectedRanges();\n grid.moveCursorToPosition(0, grid.state.cursorRow);\n return true;\n case 'l': {\n const { model } = grid.props;\n const { columnCount } = model;\n grid.clearSelectedRanges();\n grid.moveCursorToPosition(columnCount - 1, grid.state.cursorRow);\n return true;\n }\n case 'Home':\n if (!e.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(\n GridUtils.isModifierKeyDown(e) ? grid.state.cursorColumn : 0,\n GridUtils.isModifierKeyDown(e) ? 0 : grid.state.cursorRow,\n e.shiftKey,\n true,\n true\n );\n return true;\n case 'End': {\n const { model } = grid.props;\n const { columnCount, rowCount } = model;\n if (!e.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(\n GridUtils.isModifierKeyDown(e)\n ? grid.state.cursorColumn\n : columnCount - 1,\n GridUtils.isModifierKeyDown(e) ? rowCount - 1 : grid.state.cursorRow,\n e.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 e.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 e.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: KeyboardEvent,\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 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: KeyboardEvent, 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: KeyboardEvent, 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
+ {"version":3,"sources":["../../src/key-handlers/SelectionKeyHandler.ts"],"names":["clamp","GridRange","GridUtils","KeyHandler","SelectionKeyHandler","onDown","event","grid","key","isModifierKeyDown","selectAll","handleArrowMove","handlePageUp","handlePageDown","clearSelectedRanges","moveCursorToPosition","state","cursorRow","model","props","columnCount","shiftKey","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 case 'k': // h/j/k/l keys are grouped together for quick navigation by power users\n case 'PageUp':\n return this.handlePageUp(event, grid);\n case 'j':\n case 'PageDown':\n return this.handlePageDown(event, grid);\n case 'h':\n grid.clearSelectedRanges();\n grid.moveCursorToPosition(0, grid.state.cursorRow);\n return true;\n case 'l': {\n const { model } = grid.props;\n const { columnCount } = model;\n grid.clearSelectedRanges();\n grid.moveCursorToPosition(columnCount - 1, grid.state.cursorRow);\n return true;\n }\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,8 +1,8 @@
1
1
  import Grid from '../Grid';
2
2
  import KeyHandler from '../KeyHandler';
3
3
  declare class TreeKeyHandler extends KeyHandler {
4
- onDown(e: KeyboardEvent, grid: Grid): boolean;
5
- handleExpandKey(e: KeyboardEvent, grid: Grid): boolean;
4
+ onDown(event: KeyboardEvent, grid: Grid): boolean;
5
+ handleExpandKey(event: KeyboardEvent, grid: Grid): boolean;
6
6
  }
7
7
  export default TreeKeyHandler;
8
8
  //# sourceMappingURL=TreeKeyHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TreeKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/TreeKeyHandler.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,OAAO,UAAU,MAAM,eAAe,CAAC;AAEvC,cAAM,cAAe,SAAQ,UAAU;IACrC,MAAM,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;IAY7C,eAAe,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;CAuBvD;AAED,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"TreeKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/TreeKeyHandler.ts"],"names":[],"mappings":"AAEA,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,OAAO,UAAU,MAAM,eAAe,CAAC;AAEvC,cAAM,cAAe,SAAQ,UAAU;IACrC,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;IAYjD,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;CA2B3D;AAED,eAAe,cAAc,CAAC"}
@@ -1,13 +1,14 @@
1
1
  /* eslint class-methods-use-this: "off" */
2
+ import { isExpandableGridModel } from "../ExpandableGridModel.js";
2
3
  import KeyHandler from "../KeyHandler.js";
3
4
 
4
5
  class TreeKeyHandler extends KeyHandler {
5
- onDown(e, grid) {
6
- switch (e.key) {
6
+ onDown(event, grid) {
7
+ switch (event.key) {
7
8
  case 'Enter':
8
9
  case ' ':
9
10
  {
10
- return this.handleExpandKey(e, grid);
11
+ return this.handleExpandKey(event, grid);
11
12
  }
12
13
 
13
14
  default:
@@ -17,7 +18,7 @@ class TreeKeyHandler extends KeyHandler {
17
18
  return false;
18
19
  }
19
20
 
20
- handleExpandKey(e, grid) {
21
+ handleExpandKey(event, grid) {
21
22
  var {
22
23
  selectedRanges
23
24
  } = grid.state;
@@ -26,21 +27,22 @@ class TreeKeyHandler extends KeyHandler {
26
27
  var range = selectedRanges[0];
27
28
 
28
29
  if (range.startRow === range.endRow && range.startColumn === range.endColumn) {
30
+ if (!grid.metrics) throw new Error('grid.metrics not set');
29
31
  var {
30
32
  model
31
33
  } = grid.props;
32
- var {
33
- modelRows
34
- } = grid.metrics;
35
34
  var {
36
35
  startRow: row,
37
36
  startColumn: column
38
- } = selectedRanges[0];
39
- var modelRow = modelRows.get(row);
37
+ } = range;
38
+
39
+ if (row != null) {
40
+ var modelRow = grid.getModelRow(row);
40
41
 
41
- if ((column === 0 || column == null) && model.isRowExpandable(modelRow)) {
42
- grid.toggleRowExpanded(row);
43
- return true;
42
+ if ((column === 0 || column == null) && isExpandableGridModel(model) && model.isRowExpandable(modelRow)) {
43
+ grid.toggleRowExpanded(row);
44
+ return true;
45
+ }
44
46
  }
45
47
  }
46
48
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/key-handlers/TreeKeyHandler.ts"],"names":["KeyHandler","TreeKeyHandler","onDown","e","grid","key","handleExpandKey","selectedRanges","state","length","range","startRow","endRow","startColumn","endColumn","model","props","modelRows","metrics","row","column","modelRow","get","isRowExpandable","toggleRowExpanded"],"mappings":"AAAA;OAGOA,U;;AAEP,MAAMC,cAAN,SAA6BD,UAA7B,CAAwC;AACtCE,EAAAA,MAAM,CAACC,CAAD,EAAmBC,IAAnB,EAAwC;AAC5C,YAAQD,CAAC,CAACE,GAAV;AACE,WAAK,OAAL;AACA,WAAK,GAAL;AAAU;AACR,iBAAO,KAAKC,eAAL,CAAqBH,CAArB,EAAwBC,IAAxB,CAAP;AACD;;AACD;AACE;AANJ;;AAQA,WAAO,KAAP;AACD;;AAEDE,EAAAA,eAAe,CAACH,CAAD,EAAmBC,IAAnB,EAAwC;AACrD,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,YAAM;AAAEC,UAAAA;AAAF,YAAYX,IAAI,CAACY,KAAvB;AACA,YAAM;AAAEC,UAAAA;AAAF,YAAgBb,IAAI,CAACc,OAA3B;AACA,YAAM;AAAEP,UAAAA,QAAQ,EAAEQ,GAAZ;AAAiBN,UAAAA,WAAW,EAAEO;AAA9B,YAAyCb,cAAc,CAAC,CAAD,CAA7D;AACA,YAAMc,QAAQ,GAAGJ,SAAS,CAACK,GAAV,CAAcH,GAAd,CAAjB;;AACA,YACE,CAACC,MAAM,KAAK,CAAX,IAAgBA,MAAM,IAAI,IAA3B,KACAL,KAAK,CAACQ,eAAN,CAAsBF,QAAtB,CAFF,EAGE;AACAjB,UAAAA,IAAI,CAACoB,iBAAL,CAAuBL,GAAvB;AACA,iBAAO,IAAP;AACD;AACF;AACF;;AACD,WAAO,KAAP;AACD;;AAnCqC;;AAsCxC,eAAelB,cAAf","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport Grid from '../Grid';\nimport GridRange from '../GridRange';\nimport KeyHandler from '../KeyHandler';\n\nclass TreeKeyHandler extends KeyHandler {\n onDown(e: KeyboardEvent, grid: Grid): boolean {\n switch (e.key) {\n case 'Enter':\n case ' ': {\n return this.handleExpandKey(e, grid);\n }\n default:\n break;\n }\n return false;\n }\n\n handleExpandKey(e: 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 const { model } = grid.props;\n const { modelRows } = grid.metrics;\n const { startRow: row, startColumn: column } = selectedRanges[0];\n const modelRow = modelRows.get(row);\n if (\n (column === 0 || column == null) &&\n model.isRowExpandable(modelRow)\n ) {\n grid.toggleRowExpanded(row);\n return true;\n }\n }\n }\n return false;\n }\n}\n\nexport default TreeKeyHandler;\n"],"file":"TreeKeyHandler.js"}
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,4 +1,14 @@
1
- declare function _default(fn: Function, options?: Object): ((...args: any[]) => any) & memoize.Memoized<(...args: any[]) => any>;
2
- export default _default;
3
- import memoize from "memoizee";
1
+ /**
2
+ * Extension of memoizee that clears the entire cache when it's full.
3
+ * This avoids the situation where LRU cache starts thrashing when it fills up.
4
+ * Could look at writing our own memoize with a smarter cache to avoid overhead of
5
+ * LRU queue, but this should be sufficient for now.
6
+ */
7
+ import memoizee from 'memoizee';
8
+ /**
9
+ * @param fn The function to memoize
10
+ * @param options The options to set for memoization
11
+ */
12
+ export declare const memoizeClear: typeof memoizee;
13
+ export default memoizeClear;
4
14
  //# sourceMappingURL=memoizeClear.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"memoizeClear.d.ts","sourceRoot":"","sources":["../src/memoizeClear.js"],"names":[],"mappings":"AAYe,kDAFJ,MAAM,yEAiBhB"}
1
+ {"version":3,"file":"memoizeClear.d.ts","sourceRoot":"","sources":["../src/memoizeClear.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,OAAO,QAejC,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -10,16 +10,15 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
10
10
  * Could look at writing our own memoize with a smarter cache to avoid overhead of
11
11
  * LRU queue, but this should be sufficient for now.
12
12
  */
13
- import memoize from 'memoizee';
13
+ import memoizee from 'memoizee';
14
14
  /**
15
- * @param {Function} fn The function to memoize
16
- * @param {Object} options The options to set for memoization
15
+ * @param fn The function to memoize
16
+ * @param options The options to set for memoization
17
17
  */
18
18
 
19
- export default (function (fn) {
20
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
19
+ export var memoizeClear = (fn, options) => {
21
20
  var isClearingCache = false;
22
- var memoizedFn = memoize(fn, _objectSpread(_objectSpread({}, options), {}, {
21
+ var memoizedFn = memoizee(fn, _objectSpread(_objectSpread({}, options), {}, {
23
22
  dispose: () => {
24
23
  // Need to track when we're clearing because dispose gets called for all items removed
25
24
  if (!isClearingCache) {
@@ -30,5 +29,6 @@ export default (function (fn) {
30
29
  }
31
30
  }));
32
31
  return memoizedFn;
33
- });
32
+ };
33
+ export default memoizeClear;
34
34
  //# sourceMappingURL=memoizeClear.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/memoizeClear.js"],"names":["memoize","fn","options","isClearingCache","memoizedFn","dispose","clear"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,OAAP,MAAoB,UAApB;AAEA;AACA;AACA;AACA;;AACA,gBAAe,UAACC,EAAD,EAAsB;AAAA,MAAjBC,OAAiB,uEAAP,EAAO;AACnC,MAAIC,eAAe,GAAG,KAAtB;AACA,MAAMC,UAAU,GAAGJ,OAAO,CAACC,EAAD,kCACrBC,OADqB;AAExBG,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;AATuB,KAA1B;AAYA,SAAOC,UAAP;AACD,CAfD","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 memoize from 'memoizee';\n\n/**\n * @param {Function} fn The function to memoize\n * @param {Object} options The options to set for memoization\n */\nexport default (fn, options = {}) => {\n let isClearingCache = false;\n const memoizedFn = memoize(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"],"file":"memoizeClear.js"}
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,13 +1,12 @@
1
+ import { EventHandlerResult } from '../EventHandlerResult';
1
2
  import Grid from '../Grid';
2
3
  import GridMouseHandler from '../GridMouseHandler';
4
+ import { GridPoint } from '../GridUtils';
3
5
  /**
4
6
  * Handles clicking on a cell to edit it in an editable grid
5
7
  */
6
8
  declare class EditMouseHandler extends GridMouseHandler {
7
- onDoubleClick({ column, row }: {
8
- column: number;
9
- row: number;
10
- }, grid: Grid): boolean;
9
+ onDoubleClick({ column, row }: GridPoint, grid: Grid): EventHandlerResult;
11
10
  }
12
11
  export default EditMouseHandler;
13
12
  //# sourceMappingURL=EditMouseHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditMouseHandler.d.ts","sourceRoot":"","sources":["../../src/mouse-handlers/EditMouseHandler.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AAGnD;;GAEG;AACH,cAAM,gBAAiB,SAAQ,gBAAgB;IAC7C,aAAa,CACX,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAChD,IAAI,EAAE,IAAI,GACT,OAAO;CAQX;AAED,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"EditMouseHandler.d.ts","sourceRoot":"","sources":["../../src/mouse-handlers/EditMouseHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC;;GAEG;AACH,cAAM,gBAAiB,SAAQ,gBAAgB;IAC7C,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;CAa1E;AAED,eAAe,gBAAgB,CAAC"}
@@ -1,10 +1,11 @@
1
1
  /* eslint class-methods-use-this: "off" */
2
+ import { isEditableGridModel } from "../EditableGridModel.js";
2
3
  import GridMouseHandler from "../GridMouseHandler.js";
3
4
  import GridRange from "../GridRange.js";
5
+
4
6
  /**
5
7
  * Handles clicking on a cell to edit it in an editable grid
6
8
  */
7
-
8
9
  class EditMouseHandler extends GridMouseHandler {
9
10
  onDoubleClick(_ref, grid) {
10
11
  var {
@@ -15,7 +16,7 @@ class EditMouseHandler extends GridMouseHandler {
15
16
  model
16
17
  } = grid.props;
17
18
 
18
- if (model.isEditableRange(GridRange.makeCell(column, row))) {
19
+ if (isEditableGridModel(model) && column != null && row != null && model.isEditableRange(GridRange.makeCell(column, row))) {
19
20
  grid.startEditing(column, row);
20
21
  return true;
21
22
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/mouse-handlers/EditMouseHandler.ts"],"names":["GridMouseHandler","GridRange","EditMouseHandler","onDoubleClick","grid","column","row","model","props","isEditableRange","makeCell","startEditing"],"mappings":"AAAA;OAEOA,gB;OACAC,S;AAEP;AACA;AACA;;AACA,MAAMC,gBAAN,SAA+BF,gBAA/B,CAAgD;AAC9CG,EAAAA,aAAa,OAEXC,IAFW,EAGF;AAAA,QAFT;AAAEC,MAAAA,MAAF;AAAUC,MAAAA;AAAV,KAES;AACT,QAAM;AAAEC,MAAAA;AAAF,QAAYH,IAAI,CAACI,KAAvB;;AACA,QAAID,KAAK,CAACE,eAAN,CAAsBR,SAAS,CAACS,QAAV,CAAmBL,MAAnB,EAA2BC,GAA3B,CAAtB,CAAJ,EAA4D;AAC1DF,MAAAA,IAAI,CAACO,YAAL,CAAkBN,MAAlB,EAA0BC,GAA1B;AACA,aAAO,IAAP;AACD;;AACD,WAAO,KAAP;AACD;;AAX6C;;AAchD,eAAeJ,gBAAf","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport Grid from '../Grid';\nimport GridMouseHandler from '../GridMouseHandler';\nimport GridRange from '../GridRange';\n\n/**\n * Handles clicking on a cell to edit it in an editable grid\n */\nclass EditMouseHandler extends GridMouseHandler {\n onDoubleClick(\n { column, row }: { column: number; row: number },\n grid: Grid\n ): boolean {\n const { model } = grid.props;\n if (model.isEditableRange(GridRange.makeCell(column, row))) {\n grid.startEditing(column, row);\n return true;\n }\n return false;\n }\n}\n\nexport default EditMouseHandler;\n"],"file":"EditMouseHandler.js"}
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,8 +1,15 @@
1
- export default GridColumnMoveMouseHandler;
1
+ import Grid from '../Grid';
2
+ import { GridPoint } from '../GridUtils';
3
+ import GridMouseHandler from '../GridMouseHandler';
4
+ import { EventHandlerResult } from '../EventHandlerResult';
2
5
  declare class GridColumnMoveMouseHandler extends GridMouseHandler {
3
- draggingOffset: any;
4
- startingGridPoint: any;
5
- sloppyClickThreshold: boolean;
6
+ cursor: string | null;
7
+ private draggingOffset?;
8
+ private startingGridPoint?;
9
+ private sloppyClickThreshold;
10
+ onDown(gridPoint: GridPoint, grid: Grid): EventHandlerResult;
11
+ onDrag(gridPoint: GridPoint, grid: Grid): EventHandlerResult;
12
+ onUp(gridPoint: GridPoint, grid: Grid): EventHandlerResult;
6
13
  }
7
- import GridMouseHandler from "../GridMouseHandler";
14
+ export default GridColumnMoveMouseHandler;
8
15
  //# sourceMappingURL=GridColumnMoveMouseHandler.d.ts.map