@deephaven/grid 0.94.1-beta.0 → 0.95.1-beta.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 (115) hide show
  1. package/dist/CellRenderer.d.ts +3 -3
  2. package/dist/CellRenderer.d.ts.map +1 -1
  3. package/dist/CellRenderer.js.map +1 -1
  4. package/dist/ColumnHeaderGroup.d.ts +2 -2
  5. package/dist/ColumnHeaderGroup.d.ts.map +1 -1
  6. package/dist/ColumnHeaderGroup.js.map +1 -1
  7. package/dist/DataBarCellRenderer.d.ts +3 -3
  8. package/dist/DataBarCellRenderer.d.ts.map +1 -1
  9. package/dist/DataBarCellRenderer.js.map +1 -1
  10. package/dist/DataBarGridModel.d.ts +3 -3
  11. package/dist/DataBarGridModel.d.ts.map +1 -1
  12. package/dist/DataBarGridModel.js.map +1 -1
  13. package/dist/DeletableGridModel.d.ts +2 -2
  14. package/dist/DeletableGridModel.d.ts.map +1 -1
  15. package/dist/DeletableGridModel.js.map +1 -1
  16. package/dist/EditableGridModel.d.ts +3 -3
  17. package/dist/EditableGridModel.d.ts.map +1 -1
  18. package/dist/EditableGridModel.js.map +1 -1
  19. package/dist/ExpandableGridModel.d.ts +2 -2
  20. package/dist/ExpandableGridModel.d.ts.map +1 -1
  21. package/dist/ExpandableGridModel.js.map +1 -1
  22. package/dist/Grid.d.ts +15 -12
  23. package/dist/Grid.d.ts.map +1 -1
  24. package/dist/Grid.js.map +1 -1
  25. package/dist/GridColorUtils.d.ts +2 -2
  26. package/dist/GridColorUtils.d.ts.map +1 -1
  27. package/dist/GridColorUtils.js.map +1 -1
  28. package/dist/GridMetricCalculator.d.ts +3 -3
  29. package/dist/GridMetricCalculator.d.ts.map +1 -1
  30. package/dist/GridMetricCalculator.js.map +1 -1
  31. package/dist/GridModel.d.ts +5 -5
  32. package/dist/GridModel.d.ts.map +1 -1
  33. package/dist/GridModel.js.map +1 -1
  34. package/dist/GridMouseHandler.d.ts +3 -3
  35. package/dist/GridMouseHandler.d.ts.map +1 -1
  36. package/dist/GridMouseHandler.js.map +1 -1
  37. package/dist/GridRenderer.d.ts +6 -5
  38. package/dist/GridRenderer.d.ts.map +1 -1
  39. package/dist/GridRenderer.js.map +1 -1
  40. package/dist/GridRendererTypes.d.ts +7 -6
  41. package/dist/GridRendererTypes.d.ts.map +1 -1
  42. package/dist/GridRendererTypes.js.map +1 -1
  43. package/dist/GridUtils.d.ts +7 -7
  44. package/dist/GridUtils.d.ts.map +1 -1
  45. package/dist/GridUtils.js.map +1 -1
  46. package/dist/KeyHandler.d.ts +2 -2
  47. package/dist/KeyHandler.d.ts.map +1 -1
  48. package/dist/KeyHandler.js.map +1 -1
  49. package/dist/MockDataBarGridModel.d.ts +3 -3
  50. package/dist/MockDataBarGridModel.d.ts.map +1 -1
  51. package/dist/MockDataBarGridModel.js.map +1 -1
  52. package/dist/MockGridModel.d.ts +4 -3
  53. package/dist/MockGridModel.d.ts.map +1 -1
  54. package/dist/MockGridModel.js.map +1 -1
  55. package/dist/MockTreeGridModel.d.ts +2 -2
  56. package/dist/MockTreeGridModel.d.ts.map +1 -1
  57. package/dist/MockTreeGridModel.js.map +1 -1
  58. package/dist/TextCellRenderer.d.ts +4 -4
  59. package/dist/TextCellRenderer.d.ts.map +1 -1
  60. package/dist/TextCellRenderer.js.map +1 -1
  61. package/dist/ThemeContext.d.ts +1 -1
  62. package/dist/ThemeContext.d.ts.map +1 -1
  63. package/dist/ThemeContext.js.map +1 -1
  64. package/dist/TokenBoxCellRenderer.d.ts +4 -4
  65. package/dist/TokenBoxCellRenderer.d.ts.map +1 -1
  66. package/dist/TokenBoxCellRenderer.js.map +1 -1
  67. package/dist/key-handlers/EditKeyHandler.d.ts +3 -3
  68. package/dist/key-handlers/EditKeyHandler.d.ts.map +1 -1
  69. package/dist/key-handlers/EditKeyHandler.js.map +1 -1
  70. package/dist/key-handlers/PasteKeyHandler.d.ts +3 -3
  71. package/dist/key-handlers/PasteKeyHandler.d.ts.map +1 -1
  72. package/dist/key-handlers/PasteKeyHandler.js.map +1 -1
  73. package/dist/key-handlers/SelectionKeyHandler.d.ts +3 -3
  74. package/dist/key-handlers/SelectionKeyHandler.d.ts.map +1 -1
  75. package/dist/key-handlers/SelectionKeyHandler.js.map +1 -1
  76. package/dist/key-handlers/TreeKeyHandler.d.ts +1 -1
  77. package/dist/key-handlers/TreeKeyHandler.d.ts.map +1 -1
  78. package/dist/key-handlers/TreeKeyHandler.js.map +1 -1
  79. package/dist/mouse-handlers/EditMouseHandler.d.ts +3 -3
  80. package/dist/mouse-handlers/EditMouseHandler.d.ts.map +1 -1
  81. package/dist/mouse-handlers/EditMouseHandler.js.map +1 -1
  82. package/dist/mouse-handlers/GridColumnMoveMouseHandler.d.ts +4 -4
  83. package/dist/mouse-handlers/GridColumnMoveMouseHandler.d.ts.map +1 -1
  84. package/dist/mouse-handlers/GridColumnMoveMouseHandler.js.map +1 -1
  85. package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.d.ts +4 -4
  86. package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.d.ts.map +1 -1
  87. package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js.map +1 -1
  88. package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.d.ts +4 -4
  89. package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.d.ts.map +1 -1
  90. package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js.map +1 -1
  91. package/dist/mouse-handlers/GridRowMoveMouseHandler.d.ts +3 -3
  92. package/dist/mouse-handlers/GridRowMoveMouseHandler.d.ts.map +1 -1
  93. package/dist/mouse-handlers/GridRowMoveMouseHandler.js.map +1 -1
  94. package/dist/mouse-handlers/GridRowSeparatorMouseHandler.d.ts +5 -5
  95. package/dist/mouse-handlers/GridRowSeparatorMouseHandler.d.ts.map +1 -1
  96. package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js.map +1 -1
  97. package/dist/mouse-handlers/GridRowTreeMouseHandler.d.ts +3 -3
  98. package/dist/mouse-handlers/GridRowTreeMouseHandler.d.ts.map +1 -1
  99. package/dist/mouse-handlers/GridRowTreeMouseHandler.js.map +1 -1
  100. package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.d.ts +3 -3
  101. package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.d.ts.map +1 -1
  102. package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js.map +1 -1
  103. package/dist/mouse-handlers/GridSelectionMouseHandler.d.ts +4 -4
  104. package/dist/mouse-handlers/GridSelectionMouseHandler.d.ts.map +1 -1
  105. package/dist/mouse-handlers/GridSelectionMouseHandler.js.map +1 -1
  106. package/dist/mouse-handlers/GridSeparatorMouseHandler.d.ts +3 -2
  107. package/dist/mouse-handlers/GridSeparatorMouseHandler.d.ts.map +1 -1
  108. package/dist/mouse-handlers/GridSeparatorMouseHandler.js.map +1 -1
  109. package/dist/mouse-handlers/GridTokenMouseHandler.d.ts +4 -4
  110. package/dist/mouse-handlers/GridTokenMouseHandler.d.ts.map +1 -1
  111. package/dist/mouse-handlers/GridTokenMouseHandler.js.map +1 -1
  112. package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.d.ts +4 -4
  113. package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.d.ts.map +1 -1
  114. package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js.map +1 -1
  115. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"MockDataBarGridModel.js","names":["getOrThrow","GridModel","GridTheme","DEFAULT_AXIS","DEFAULT_POSITIVE_COLOR","positiveBarColor","DEFAULT_NEGATIVE_COLOR","negativeBarColor","DEFAULT_VALUE_PLACEMENT","DEFAULT_DIRECTION","DEFAULT_TEXT_ALIGNMENT","isArrayOfNumbers","value","Array","isArray","every","item","MockDataBarGridModel","constructor","data","columnAxes","arguments","length","undefined","Map","positiveColors","negativeColors","valuePlacements","opacities","directions","textAlignments","markers","_defineProperty","numberOfRows","Math","max","map","row","numberOfColumns","columnMins","columnMaxs","i","column","set","min","rowCount","columnCount","textForCell","_this$data$column","concat","textForColumnHeader","textAlignForCell","_this$textAlignments$","get","renderTypeForCell","dataBarOptionsForCell","_this$columnAxes$get","_this$valuePlacements","_this$directions$get","_this$positiveColors$","_this$negativeColors$","_this$data$column2","_this$markers$get","columnMin","columnMax","axis","valuePlacement","opacity","direction","positiveColor","negativeColor","Number","color"],"sources":["../src/MockDataBarGridModel.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport { getOrThrow } from '@deephaven/utils';\nimport { CellRenderType } from './CellRenderer';\nimport {\n AxisOption,\n ColorMap,\n ColumnAxisMap,\n DataBarGridModel,\n DataBarOptions,\n DirectionMap,\n MarkerMap,\n MaxMap,\n MinMap,\n OpacityMap,\n TextAlignmentMap,\n ValuePlacementMap,\n} from './DataBarGridModel';\nimport { ModelIndex } from './GridMetrics';\nimport GridModel from './GridModel';\nimport GridTheme from './GridTheme';\n\nconst DEFAULT_AXIS: AxisOption = 'proportional';\nconst DEFAULT_POSITIVE_COLOR = GridTheme.positiveBarColor;\nconst DEFAULT_NEGATIVE_COLOR = GridTheme.negativeBarColor;\nconst DEFAULT_VALUE_PLACEMENT = 'beside';\nconst DEFAULT_DIRECTION = 'LTR';\nconst DEFAULT_TEXT_ALIGNMENT = 'right';\n\nfunction isArrayOfNumbers(value: unknown): value is number[] {\n return Array.isArray(value) && value.every(item => typeof item === 'number');\n}\n\nclass MockDataBarGridModel extends GridModel implements DataBarGridModel {\n private numberOfColumns;\n\n private numberOfRows;\n\n private data: unknown[][];\n\n columnMins: MinMap;\n\n columnMaxs: MaxMap;\n\n columnAxes: ColumnAxisMap;\n\n valuePlacements: ValuePlacementMap;\n\n directions: DirectionMap;\n\n positiveColors: ColorMap;\n\n negativeColors: ColorMap;\n\n // Opacities should be between 0 and 1\n opacities: OpacityMap;\n\n textAlignments: TextAlignmentMap;\n\n markers: MarkerMap;\n\n constructor(\n data: unknown[][],\n columnAxes = new Map(),\n positiveColors = new Map(),\n negativeColors = new Map(),\n valuePlacements = new Map(),\n opacities = new Map(),\n directions = new Map(),\n textAlignments = new Map(),\n markers: MarkerMap = new Map()\n ) {\n super();\n\n this.positiveColors = positiveColors;\n this.negativeColors = negativeColors;\n this.data = data;\n this.columnAxes = columnAxes;\n this.valuePlacements = valuePlacements;\n this.opacities = opacities;\n this.directions = directions;\n this.textAlignments = textAlignments;\n this.markers = markers;\n this.numberOfRows = Math.max(...data.map(row => row.length));\n this.numberOfColumns = data.length;\n this.columnMins = new Map();\n this.columnMaxs = new Map();\n\n for (let i = 0; i < data.length; i += 1) {\n const column = data[i];\n if (isArrayOfNumbers(column)) {\n this.columnMins.set(i, Math.min(...column));\n this.columnMaxs.set(i, Math.max(...column));\n }\n }\n }\n\n get rowCount(): number {\n return this.numberOfRows;\n }\n\n get columnCount(): number {\n return this.numberOfColumns;\n }\n\n textForCell(column: number, row: number): string {\n return `${this.data[column]?.[row]}`;\n }\n\n textForColumnHeader(column: number): string {\n return `${column}`;\n }\n\n textAlignForCell(column: number, row: number): CanvasTextAlign {\n return this.textAlignments.get(column) ?? DEFAULT_TEXT_ALIGNMENT;\n }\n\n renderTypeForCell(column: ModelIndex, row: ModelIndex): CellRenderType {\n if (column < 20) {\n return 'dataBar';\n }\n return column % 2 === row % 2 ? 'dataBar' : 'text';\n }\n\n dataBarOptionsForCell(column: ModelIndex, row: ModelIndex): DataBarOptions {\n const columnMin = getOrThrow(this.columnMins, column);\n const columnMax = getOrThrow(this.columnMaxs, column);\n const axis = this.columnAxes.get(column) ?? DEFAULT_AXIS;\n const valuePlacement =\n this.valuePlacements.get(column) ?? DEFAULT_VALUE_PLACEMENT;\n let opacity = this.opacities.get(column);\n if (opacity == null || opacity > 1) {\n opacity = 1;\n } else if (opacity < 0) {\n opacity = 0;\n }\n const direction = this.directions.get(column) ?? DEFAULT_DIRECTION;\n const positiveColor =\n this.positiveColors.get(column) ?? DEFAULT_POSITIVE_COLOR;\n const negativeColor =\n this.negativeColors.get(column) ?? DEFAULT_NEGATIVE_COLOR;\n\n const value = Number(this.data[column]?.[row]);\n const color = value >= 0 ? positiveColor : negativeColor;\n const markers = this.markers.get(column) ?? [];\n\n return {\n columnMin,\n columnMax,\n axis,\n color,\n valuePlacement,\n opacity,\n markers,\n direction,\n value,\n };\n }\n}\n\nexport default MockDataBarGridModel;\n"],"mappings":"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"}
1
+ {"version":3,"file":"MockDataBarGridModel.js","names":["getOrThrow","GridModel","GridTheme","DEFAULT_AXIS","DEFAULT_POSITIVE_COLOR","positiveBarColor","DEFAULT_NEGATIVE_COLOR","negativeBarColor","DEFAULT_VALUE_PLACEMENT","DEFAULT_DIRECTION","DEFAULT_TEXT_ALIGNMENT","isArrayOfNumbers","value","Array","isArray","every","item","MockDataBarGridModel","constructor","data","columnAxes","arguments","length","undefined","Map","positiveColors","negativeColors","valuePlacements","opacities","directions","textAlignments","markers","_defineProperty","numberOfRows","Math","max","map","row","numberOfColumns","columnMins","columnMaxs","i","column","set","min","rowCount","columnCount","textForCell","_this$data$column","concat","textForColumnHeader","textAlignForCell","_this$textAlignments$","get","renderTypeForCell","dataBarOptionsForCell","_this$columnAxes$get","_this$valuePlacements","_this$directions$get","_this$positiveColors$","_this$negativeColors$","_this$data$column2","_this$markers$get","columnMin","columnMax","axis","valuePlacement","opacity","direction","positiveColor","negativeColor","Number","color"],"sources":["../src/MockDataBarGridModel.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport { getOrThrow } from '@deephaven/utils';\nimport { type CellRenderType } from './CellRenderer';\nimport {\n type AxisOption,\n type ColorMap,\n type ColumnAxisMap,\n type DataBarGridModel,\n type DataBarOptions,\n type DirectionMap,\n type MarkerMap,\n type MaxMap,\n type MinMap,\n type OpacityMap,\n type TextAlignmentMap,\n type ValuePlacementMap,\n} from './DataBarGridModel';\nimport { type ModelIndex } from './GridMetrics';\nimport GridModel from './GridModel';\nimport GridTheme from './GridTheme';\n\nconst DEFAULT_AXIS: AxisOption = 'proportional';\nconst DEFAULT_POSITIVE_COLOR = GridTheme.positiveBarColor;\nconst DEFAULT_NEGATIVE_COLOR = GridTheme.negativeBarColor;\nconst DEFAULT_VALUE_PLACEMENT = 'beside';\nconst DEFAULT_DIRECTION = 'LTR';\nconst DEFAULT_TEXT_ALIGNMENT = 'right';\n\nfunction isArrayOfNumbers(value: unknown): value is number[] {\n return Array.isArray(value) && value.every(item => typeof item === 'number');\n}\n\nclass MockDataBarGridModel extends GridModel implements DataBarGridModel {\n private numberOfColumns;\n\n private numberOfRows;\n\n private data: unknown[][];\n\n columnMins: MinMap;\n\n columnMaxs: MaxMap;\n\n columnAxes: ColumnAxisMap;\n\n valuePlacements: ValuePlacementMap;\n\n directions: DirectionMap;\n\n positiveColors: ColorMap;\n\n negativeColors: ColorMap;\n\n // Opacities should be between 0 and 1\n opacities: OpacityMap;\n\n textAlignments: TextAlignmentMap;\n\n markers: MarkerMap;\n\n constructor(\n data: unknown[][],\n columnAxes = new Map(),\n positiveColors = new Map(),\n negativeColors = new Map(),\n valuePlacements = new Map(),\n opacities = new Map(),\n directions = new Map(),\n textAlignments = new Map(),\n markers: MarkerMap = new Map()\n ) {\n super();\n\n this.positiveColors = positiveColors;\n this.negativeColors = negativeColors;\n this.data = data;\n this.columnAxes = columnAxes;\n this.valuePlacements = valuePlacements;\n this.opacities = opacities;\n this.directions = directions;\n this.textAlignments = textAlignments;\n this.markers = markers;\n this.numberOfRows = Math.max(...data.map(row => row.length));\n this.numberOfColumns = data.length;\n this.columnMins = new Map();\n this.columnMaxs = new Map();\n\n for (let i = 0; i < data.length; i += 1) {\n const column = data[i];\n if (isArrayOfNumbers(column)) {\n this.columnMins.set(i, Math.min(...column));\n this.columnMaxs.set(i, Math.max(...column));\n }\n }\n }\n\n get rowCount(): number {\n return this.numberOfRows;\n }\n\n get columnCount(): number {\n return this.numberOfColumns;\n }\n\n textForCell(column: number, row: number): string {\n return `${this.data[column]?.[row]}`;\n }\n\n textForColumnHeader(column: number): string {\n return `${column}`;\n }\n\n textAlignForCell(column: number, row: number): CanvasTextAlign {\n return this.textAlignments.get(column) ?? DEFAULT_TEXT_ALIGNMENT;\n }\n\n renderTypeForCell(column: ModelIndex, row: ModelIndex): CellRenderType {\n if (column < 20) {\n return 'dataBar';\n }\n return column % 2 === row % 2 ? 'dataBar' : 'text';\n }\n\n dataBarOptionsForCell(column: ModelIndex, row: ModelIndex): DataBarOptions {\n const columnMin = getOrThrow(this.columnMins, column);\n const columnMax = getOrThrow(this.columnMaxs, column);\n const axis = this.columnAxes.get(column) ?? DEFAULT_AXIS;\n const valuePlacement =\n this.valuePlacements.get(column) ?? DEFAULT_VALUE_PLACEMENT;\n let opacity = this.opacities.get(column);\n if (opacity == null || opacity > 1) {\n opacity = 1;\n } else if (opacity < 0) {\n opacity = 0;\n }\n const direction = this.directions.get(column) ?? DEFAULT_DIRECTION;\n const positiveColor =\n this.positiveColors.get(column) ?? DEFAULT_POSITIVE_COLOR;\n const negativeColor =\n this.negativeColors.get(column) ?? DEFAULT_NEGATIVE_COLOR;\n\n const value = Number(this.data[column]?.[row]);\n const color = value >= 0 ? positiveColor : negativeColor;\n const markers = this.markers.get(column) ?? [];\n\n return {\n columnMin,\n columnMax,\n axis,\n color,\n valuePlacement,\n opacity,\n markers,\n direction,\n value,\n };\n }\n}\n\nexport default MockDataBarGridModel;\n"],"mappings":"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"}
@@ -1,8 +1,9 @@
1
- import EditableGridModel, { EditOperation } from './EditableGridModel';
2
- import { ModelIndex } from './GridMetrics';
1
+ import { type EditOperation } from './EditableGridModel';
2
+ import type EditableGridModel from './EditableGridModel';
3
+ import { type ModelIndex } from './GridMetrics';
3
4
  import GridModel from './GridModel';
4
5
  import GridRange from './GridRange';
5
- import { GridColor, GridTheme } from './GridTheme';
6
+ import { type GridColor, type GridTheme } from './GridTheme';
6
7
  /**
7
8
  * Mock model implementing GridModel for testing out grid functionality
8
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"MockGridModel.d.ts","sourceRoot":"","sources":["../src/MockGridModel.ts"],"names":[],"mappings":"AAEA,OAAO,iBAAiB,EAAE,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEnD;;GAEG;AACH,cAAM,aAAc,SAAQ,SAAU,YAAW,iBAAiB;IAChE,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAE1B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAE7B,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAE9B,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IAEjC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC;IAE/B,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAEhC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE5B,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC;gBAErB,EACV,QAAqB,EACrB,WAAiB,EACjB,mBAAuB,EACvB,sBAA0B,EAC1B,uBAA2B,EAC3B,wBAA4B,EAC5B,UAAkB,EAClB,UAAe,GAChB,GAAE;QACD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAChC,uBAAuB,CAAC,EAAE,MAAM,CAAC;QACjC,wBAAwB,CAAC,EAAE,MAAM,CAAC;QAClC,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;KACpB;IAaN,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IAED,IAAI,sBAAsB,IAAI,MAAM,CAEnC;IAED,IAAI,uBAAuB,IAAI,MAAM,CAEpC;IAED,IAAI,wBAAwB,IAAI,MAAM,CAErC;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,MAAM;IAIxD,YAAY,CACV,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,SAAS,GACf,SAAS;IAIZ,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,SAAI,GAAG,MAAM;IAI1D,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM;IAIzC,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM;IAInC,eAAe,CACnB,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC;IAOV,iBAAiB,CACrB,MAAM,EAAE,SAAS,SAAS,EAAE,EAC5B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC;IAMV,SAAS,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAW/D,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,MAAM;IAI7D,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAI3E,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO;IAI1C,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAG3C;AAED,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"MockGridModel.d.ts","sourceRoot":"","sources":["../src/MockGridModel.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,iBAAiB,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7D;;GAEG;AACH,cAAM,aAAc,SAAQ,SAAU,YAAW,iBAAiB;IAChE,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAE1B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAE7B,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAE9B,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IAEjC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC;IAE/B,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAEhC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE5B,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC;gBAErB,EACV,QAAqB,EACrB,WAAiB,EACjB,mBAAuB,EACvB,sBAA0B,EAC1B,uBAA2B,EAC3B,wBAA4B,EAC5B,UAAkB,EAClB,UAAe,GAChB,GAAE;QACD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAChC,uBAAuB,CAAC,EAAE,MAAM,CAAC;QACjC,wBAAwB,CAAC,EAAE,MAAM,CAAC;QAClC,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;KACpB;IAaN,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IAED,IAAI,sBAAsB,IAAI,MAAM,CAEnC;IAED,IAAI,uBAAuB,IAAI,MAAM,CAEpC;IAED,IAAI,wBAAwB,IAAI,MAAM,CAErC;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,MAAM;IAIxD,YAAY,CACV,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,SAAS,GACf,SAAS;IAIZ,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,SAAI,GAAG,MAAM;IAI1D,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM;IAIzC,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM;IAInC,eAAe,CACnB,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC;IAOV,iBAAiB,CACrB,MAAM,EAAE,SAAS,SAAS,EAAE,EAC5B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC;IAMV,SAAS,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAW/D,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,MAAM;IAI7D,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAI3E,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO;IAI1C,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAG3C;AAED,eAAe,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"MockGridModel.js","names":["GridModel","GridRange","MockGridModel","constructor","rowCount","columnCount","floatingTopRowCount","floatingBottomRowCount","floatingLeftColumnCount","floatingRightColumnCount","isEditable","editedData","arguments","length","undefined","_defineProperty","numRows","numColumns","floatingTop","floatingBottom","floatingLeft","floatingRight","editable","textForCell","column","row","_this$editedData$colu","_this$editedData$colu2","concat","colorForCell","theme","textColor","textForColumnHeader","depth","textForRowHeader","textForRowFooter","setValueForCell","value","_this","_asyncToGenerator","setValueForRanges","ranges","text","_this2","forEachCell","x","y","setValues","edits","_this3","i","_edit$column","_edit$row","edit","editValueForCell","isValidForCell","isEditableRange","range","delete","Error"],"sources":["../src/MockGridModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\nimport EditableGridModel, { EditOperation } from './EditableGridModel';\nimport { ModelIndex } from './GridMetrics';\nimport GridModel from './GridModel';\nimport GridRange from './GridRange';\nimport { GridColor, GridTheme } from './GridTheme';\n\n/**\n * Mock model implementing GridModel for testing out grid functionality\n */\nclass MockGridModel extends GridModel implements EditableGridModel {\n protected numRows: number;\n\n protected numColumns: number;\n\n protected floatingTop: number;\n\n protected floatingBottom: number;\n\n protected floatingLeft: number;\n\n protected floatingRight: number;\n\n protected editable: boolean;\n\n protected editedData: string[][];\n\n constructor({\n rowCount = 1000000000,\n columnCount = 100,\n floatingTopRowCount = 0,\n floatingBottomRowCount = 0,\n floatingLeftColumnCount = 0,\n floatingRightColumnCount = 0,\n isEditable = false,\n editedData = [],\n }: {\n rowCount?: number;\n columnCount?: number;\n floatingTopRowCount?: number;\n floatingBottomRowCount?: number;\n floatingLeftColumnCount?: number;\n floatingRightColumnCount?: number;\n isEditable?: boolean;\n editedData?: string[][];\n } = {}) {\n super();\n\n this.numRows = rowCount;\n this.numColumns = columnCount;\n this.floatingTop = floatingTopRowCount;\n this.floatingBottom = floatingBottomRowCount;\n this.floatingLeft = floatingLeftColumnCount;\n this.floatingRight = floatingRightColumnCount;\n this.editable = isEditable;\n this.editedData = editedData;\n }\n\n get rowCount(): number {\n return this.numRows;\n }\n\n get columnCount(): number {\n return this.numColumns;\n }\n\n get floatingTopRowCount(): number {\n return this.floatingTop;\n }\n\n get floatingBottomRowCount(): number {\n return this.floatingBottom;\n }\n\n get floatingLeftColumnCount(): number {\n return this.floatingLeft;\n }\n\n get floatingRightColumnCount(): number {\n return this.floatingRight;\n }\n\n get isEditable(): boolean {\n return this.editable;\n }\n\n textForCell(column: ModelIndex, row: ModelIndex): string {\n return this.editedData[column]?.[row] ?? `${column},${row}`;\n }\n\n colorForCell(\n column: ModelIndex,\n row: ModelIndex,\n theme: GridTheme\n ): GridColor {\n return theme.textColor;\n }\n\n textForColumnHeader(column: ModelIndex, depth = 0): string {\n return `${column}`;\n }\n\n textForRowHeader(row: ModelIndex): string {\n return `${row}`;\n }\n\n textForRowFooter(row: ModelIndex): string {\n return `${row}`;\n }\n\n async setValueForCell(\n column: ModelIndex,\n row: ModelIndex,\n value: string\n ): Promise<void> {\n if (this.editedData[column] == null) {\n this.editedData[column] = [];\n }\n this.editedData[column][row] = `${value}`;\n }\n\n async setValueForRanges(\n ranges: readonly GridRange[],\n text: string\n ): Promise<void> {\n GridRange.forEachCell(ranges, (x, y) => {\n this.setValueForCell(x, y, text);\n });\n }\n\n async setValues(edits: readonly EditOperation[]): Promise<void> {\n for (let i = 0; i < edits.length; i += 1) {\n const edit = edits[i];\n this.setValueForCell(\n edit.column ?? edit.x,\n edit.row ?? edit.y,\n edit.text\n );\n }\n }\n\n editValueForCell(column: ModelIndex, row: ModelIndex): string {\n return this.textForCell(column, row);\n }\n\n isValidForCell(column: ModelIndex, row: ModelIndex, value: string): boolean {\n return true;\n }\n\n isEditableRange(range: GridRange): boolean {\n return this.isEditable;\n }\n\n delete(ranges: GridRange[]): Promise<void> {\n throw new Error('Method not implemented.');\n }\n}\n\nexport default MockGridModel;\n"],"mappings":"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"}
1
+ {"version":3,"file":"MockGridModel.js","names":["GridModel","GridRange","MockGridModel","constructor","rowCount","columnCount","floatingTopRowCount","floatingBottomRowCount","floatingLeftColumnCount","floatingRightColumnCount","isEditable","editedData","arguments","length","undefined","_defineProperty","numRows","numColumns","floatingTop","floatingBottom","floatingLeft","floatingRight","editable","textForCell","column","row","_this$editedData$colu","_this$editedData$colu2","concat","colorForCell","theme","textColor","textForColumnHeader","depth","textForRowHeader","textForRowFooter","setValueForCell","value","_this","_asyncToGenerator","setValueForRanges","ranges","text","_this2","forEachCell","x","y","setValues","edits","_this3","i","_edit$column","_edit$row","edit","editValueForCell","isValidForCell","isEditableRange","range","delete","Error"],"sources":["../src/MockGridModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\nimport { type EditOperation } from './EditableGridModel';\nimport type EditableGridModel from './EditableGridModel';\nimport { type ModelIndex } from './GridMetrics';\nimport GridModel from './GridModel';\nimport GridRange from './GridRange';\nimport { type GridColor, type GridTheme } from './GridTheme';\n\n/**\n * Mock model implementing GridModel for testing out grid functionality\n */\nclass MockGridModel extends GridModel implements EditableGridModel {\n protected numRows: number;\n\n protected numColumns: number;\n\n protected floatingTop: number;\n\n protected floatingBottom: number;\n\n protected floatingLeft: number;\n\n protected floatingRight: number;\n\n protected editable: boolean;\n\n protected editedData: string[][];\n\n constructor({\n rowCount = 1000000000,\n columnCount = 100,\n floatingTopRowCount = 0,\n floatingBottomRowCount = 0,\n floatingLeftColumnCount = 0,\n floatingRightColumnCount = 0,\n isEditable = false,\n editedData = [],\n }: {\n rowCount?: number;\n columnCount?: number;\n floatingTopRowCount?: number;\n floatingBottomRowCount?: number;\n floatingLeftColumnCount?: number;\n floatingRightColumnCount?: number;\n isEditable?: boolean;\n editedData?: string[][];\n } = {}) {\n super();\n\n this.numRows = rowCount;\n this.numColumns = columnCount;\n this.floatingTop = floatingTopRowCount;\n this.floatingBottom = floatingBottomRowCount;\n this.floatingLeft = floatingLeftColumnCount;\n this.floatingRight = floatingRightColumnCount;\n this.editable = isEditable;\n this.editedData = editedData;\n }\n\n get rowCount(): number {\n return this.numRows;\n }\n\n get columnCount(): number {\n return this.numColumns;\n }\n\n get floatingTopRowCount(): number {\n return this.floatingTop;\n }\n\n get floatingBottomRowCount(): number {\n return this.floatingBottom;\n }\n\n get floatingLeftColumnCount(): number {\n return this.floatingLeft;\n }\n\n get floatingRightColumnCount(): number {\n return this.floatingRight;\n }\n\n get isEditable(): boolean {\n return this.editable;\n }\n\n textForCell(column: ModelIndex, row: ModelIndex): string {\n return this.editedData[column]?.[row] ?? `${column},${row}`;\n }\n\n colorForCell(\n column: ModelIndex,\n row: ModelIndex,\n theme: GridTheme\n ): GridColor {\n return theme.textColor;\n }\n\n textForColumnHeader(column: ModelIndex, depth = 0): string {\n return `${column}`;\n }\n\n textForRowHeader(row: ModelIndex): string {\n return `${row}`;\n }\n\n textForRowFooter(row: ModelIndex): string {\n return `${row}`;\n }\n\n async setValueForCell(\n column: ModelIndex,\n row: ModelIndex,\n value: string\n ): Promise<void> {\n if (this.editedData[column] == null) {\n this.editedData[column] = [];\n }\n this.editedData[column][row] = `${value}`;\n }\n\n async setValueForRanges(\n ranges: readonly GridRange[],\n text: string\n ): Promise<void> {\n GridRange.forEachCell(ranges, (x, y) => {\n this.setValueForCell(x, y, text);\n });\n }\n\n async setValues(edits: readonly EditOperation[]): Promise<void> {\n for (let i = 0; i < edits.length; i += 1) {\n const edit = edits[i];\n this.setValueForCell(\n edit.column ?? edit.x,\n edit.row ?? edit.y,\n edit.text\n );\n }\n }\n\n editValueForCell(column: ModelIndex, row: ModelIndex): string {\n return this.textForCell(column, row);\n }\n\n isValidForCell(column: ModelIndex, row: ModelIndex, value: string): boolean {\n return true;\n }\n\n isEditableRange(range: GridRange): boolean {\n return this.isEditable;\n }\n\n delete(ranges: GridRange[]): Promise<void> {\n throw new Error('Method not implemented.');\n }\n}\n\nexport default MockGridModel;\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import MockGridModel from './MockGridModel';
2
- import ExpandableGridModel from './ExpandableGridModel';
3
- import { ModelIndex } from './GridMetrics';
2
+ import type ExpandableGridModel from './ExpandableGridModel';
3
+ import { type ModelIndex } from './GridMetrics';
4
4
  type ChildrenTreeMap = Map<ModelIndex, MockTreeGridModel>;
5
5
  /**
6
6
  * A class to mock a tree model so can test out tree models.
@@ -1 +1 @@
1
- {"version":3,"file":"MockTreeGridModel.d.ts","sourceRoot":"","sources":["../src/MockTreeGridModel.ts"],"names":[],"mappings":"AAEA,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,KAAK,eAAe,GAAG,GAAG,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;AAE1D;;;GAGG;AACH,cAAM,iBAAkB,SAAQ,aAAc,YAAW,mBAAmB;IAC1E,MAAM,CAAC,iBAAiB,SAAc;IAEtC,MAAM,CAAC,oBAAoB,SAAO;IAElC,sHAAsH;IACtH,MAAM,CAAC,8BAA8B,SAAQ;IAE7C,MAAM,CAAC,mBAAmB,SAAM;IAEhC,MAAM,CAAC,SAAS,SAAM;IAEtB,OAAO,CAAC,QAAQ,CAAkB;IAElC,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,QAAQ,CAAS;gBAEb,EACV,QAA8C,EAC9C,WAAoD,EACpD,QAAoB,EACpB,aAKC,EACD,QAAsC,GACvC,GAAE;QACD,QAAQ,CAAC,EAAE,eAAe,CAAC;QAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACd;IAQN,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,MAAM;IAIxD,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM;IAIzC,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO;IAItC,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED,IAAI,oBAAoB,IAAI,OAAO,CAElC;IAED,IAAI,sBAAsB,IAAI,MAAM,CAEnC;IAED,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO;IAIzC,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO;IAIvC,cAAc,CACZ,GAAG,EAAE,UAAU,EACf,UAAU,EAAE,OAAO,EACnB,iBAAiB,UAAQ,GACxB,IAAI;IA8BP,SAAS,IAAI,IAAI;IAIjB,WAAW,IAAI,IAAI;IAInB,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM;IAIpC;;;;OAIG;IACH,uBAAuB,cAET,eAAe,OACpB,UAAU,KACd;QAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,kDAFxC,eAAe,OACpB,UAAU,KACd;QAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,EAqBpD;IAEF,yBAAyB,cACZ,eAAe,OAAO,UAAU,KAAG,MAAM,kDAAzC,eAAe,OAAO,UAAU,KAAG,MAAM,EAYpD;IAEF,oBAAoB,cAEN,eAAe,UACjB,UAAU,OACb,UAAU,KACd,MAAM,kDAHG,eAAe,UACjB,UAAU,OACb,UAAU,KACd,MAAM,EAYT;IAEF,wBAAwB,cACX,eAAe,OAAO,UAAU,YAAY,MAAM,KAAG,OAAO,kDAA5D,eAAe,OAAO,UAAU,YAAY,MAAM,KAAG,OAAO,EAKvE;IAEF,sBAAsB,cACT,eAAe,OAAO,UAAU,KAAG,OAAO,kDAA1C,eAAe,OAAO,UAAU,KAAG,OAAO,EAYrD;IAEF,oBAAoB,cACP,eAAe,OAAO,UAAU,KAAG,MAAM,kDAAzC,eAAe,OAAO,UAAU,KAAG,MAAM,EAYpD;CACH;AAED,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"MockTreeGridModel.d.ts","sourceRoot":"","sources":["../src/MockTreeGridModel.ts"],"names":[],"mappings":"AAEA,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,OAAO,KAAK,mBAAmB,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,KAAK,eAAe,GAAG,GAAG,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;AAE1D;;;GAGG;AACH,cAAM,iBAAkB,SAAQ,aAAc,YAAW,mBAAmB;IAC1E,MAAM,CAAC,iBAAiB,SAAc;IAEtC,MAAM,CAAC,oBAAoB,SAAO;IAElC,sHAAsH;IACtH,MAAM,CAAC,8BAA8B,SAAQ;IAE7C,MAAM,CAAC,mBAAmB,SAAM;IAEhC,MAAM,CAAC,SAAS,SAAM;IAEtB,OAAO,CAAC,QAAQ,CAAkB;IAElC,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,QAAQ,CAAS;gBAEb,EACV,QAA8C,EAC9C,WAAoD,EACpD,QAAoB,EACpB,aAKC,EACD,QAAsC,GACvC,GAAE;QACD,QAAQ,CAAC,EAAE,eAAe,CAAC;QAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACd;IAQN,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,MAAM;IAIxD,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM;IAIzC,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO;IAItC,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED,IAAI,oBAAoB,IAAI,OAAO,CAElC;IAED,IAAI,sBAAsB,IAAI,MAAM,CAEnC;IAED,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO;IAIzC,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO;IAIvC,cAAc,CACZ,GAAG,EAAE,UAAU,EACf,UAAU,EAAE,OAAO,EACnB,iBAAiB,UAAQ,GACxB,IAAI;IA8BP,SAAS,IAAI,IAAI;IAIjB,WAAW,IAAI,IAAI;IAInB,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM;IAIpC;;;;OAIG;IACH,uBAAuB,cAET,eAAe,OACpB,UAAU,KACd;QAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,kDAFxC,eAAe,OACpB,UAAU,KACd;QAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,EAqBpD;IAEF,yBAAyB,cACZ,eAAe,OAAO,UAAU,KAAG,MAAM,kDAAzC,eAAe,OAAO,UAAU,KAAG,MAAM,EAYpD;IAEF,oBAAoB,cAEN,eAAe,UACjB,UAAU,OACb,UAAU,KACd,MAAM,kDAHG,eAAe,UACjB,UAAU,OACb,UAAU,KACd,MAAM,EAYT;IAEF,wBAAwB,cACX,eAAe,OAAO,UAAU,YAAY,MAAM,KAAG,OAAO,kDAA5D,eAAe,OAAO,UAAU,YAAY,MAAM,KAAG,OAAO,EAKvE;IAEF,sBAAsB,cACT,eAAe,OAAO,UAAU,KAAG,OAAO,kDAA1C,eAAe,OAAO,UAAU,KAAG,OAAO,EAYrD;IAEF,oBAAoB,cACP,eAAe,OAAO,UAAU,KAAG,MAAM,kDAAzC,eAAe,OAAO,UAAU,KAAG,MAAM,EAYpD;CACH;AAED,eAAe,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"MockTreeGridModel.js","names":["MockGridModel","memoizeClear","MockTreeGridModel","constructor","rowCount","DEFAULT_ROW_COUNT","columnCount","DEFAULT_COLUMN_COUNT","children","Map","childRowCount","Math","ceil","max","MIN_CHILD_ROW_COUNT","DEFAULT_CHILD_ROW_COUNT_FACTOR","maxDepth","MAX_DEPTH","arguments","length","undefined","_defineProperty","row","key","offsetRow","sortedEntries","sort","a","b","i","childRow","childModel","getCachedModelRowOffset","model","get","concat","textForRowHeader","column","textForCell","depth","getCachedDepthForRow","isRowExpanded","has","depthForRow","getCachedTextForCell","getCachedTextForRowHeader","isRowMovable","hasExpandableRows","isExpandAllAvailable","floatingBottomRowCount","isRowExpandable","getCachedIsRowExpandable","getCachedIsRowExpanded","setRowExpanded","isExpanded","expandDescendants","originalChildRowCount","numRows","delete","child","numColumns","set","expandAll","Error","collapseAll"],"sources":["../src/MockTreeGridModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\nimport MockGridModel from './MockGridModel';\nimport memoizeClear from './memoizeClear';\nimport ExpandableGridModel from './ExpandableGridModel';\nimport { ModelIndex } from './GridMetrics';\n\ntype ChildrenTreeMap = Map<ModelIndex, MockTreeGridModel>;\n\n/**\n * A class to mock a tree model so can test out tree models.\n * Whenever a row is expanded, it creates a child model for that row, which can then make a child for those rows, etc.\n */\nclass MockTreeGridModel extends MockGridModel implements ExpandableGridModel {\n static DEFAULT_ROW_COUNT = 1000000000;\n\n static DEFAULT_COLUMN_COUNT = 100;\n\n /** How many rows a child tree should have related to the parent. Eg. if parent has 10000 rows, child will have 100 */\n static DEFAULT_CHILD_ROW_COUNT_FACTOR = 0.01;\n\n static MIN_CHILD_ROW_COUNT = 10;\n\n static MAX_DEPTH = 10;\n\n private children: ChildrenTreeMap;\n\n private childRowCount: number;\n\n private maxDepth: number;\n\n constructor({\n rowCount = MockTreeGridModel.DEFAULT_ROW_COUNT,\n columnCount = MockTreeGridModel.DEFAULT_COLUMN_COUNT,\n children = new Map(),\n childRowCount = Math.ceil(\n Math.max(\n MockTreeGridModel.MIN_CHILD_ROW_COUNT,\n rowCount * MockTreeGridModel.DEFAULT_CHILD_ROW_COUNT_FACTOR\n )\n ),\n maxDepth = MockTreeGridModel.MAX_DEPTH,\n }: {\n children?: ChildrenTreeMap;\n columnCount?: number;\n rowCount?: number;\n childRowCount?: number;\n maxDepth?: number;\n } = {}) {\n super({ rowCount, columnCount });\n\n this.children = children;\n this.childRowCount = childRowCount;\n this.maxDepth = maxDepth;\n }\n\n textForCell(column: ModelIndex, row: ModelIndex): string {\n return this.getCachedTextForCell(this.children, column, row);\n }\n\n textForRowHeader(row: ModelIndex): string {\n return this.getCachedTextForRowHeader(this.children, row);\n }\n\n isRowMovable(row: ModelIndex): boolean {\n return false;\n }\n\n get hasExpandableRows(): boolean {\n return true;\n }\n\n get isExpandAllAvailable(): boolean {\n return false;\n }\n\n get floatingBottomRowCount(): number {\n return 0;\n }\n\n isRowExpandable(row: ModelIndex): boolean {\n return this.getCachedIsRowExpandable(this.children, row, this.maxDepth);\n }\n\n isRowExpanded(row: ModelIndex): boolean {\n return this.getCachedIsRowExpanded(this.children, row);\n }\n\n setRowExpanded(\n row: ModelIndex,\n isExpanded: boolean,\n expandDescendants = false\n ): void {\n const { key, offsetRow } = this.getCachedModelRowOffset(this.children, row);\n\n // We always set a new map so that our memoize functions work properly\n const children = new Map(this.children);\n if (key != null) {\n const model = this.children.get(key);\n if (model !== undefined) {\n const { rowCount: originalChildRowCount } = model;\n model.setRowExpanded(offsetRow, isExpanded, expandDescendants);\n this.numRows += model.rowCount - originalChildRowCount;\n }\n } else if (!isExpanded) {\n const childModel = children.get(offsetRow);\n if (childModel !== undefined) {\n this.numRows -= childModel.rowCount;\n children.delete(offsetRow);\n }\n } else {\n const child = new MockTreeGridModel({\n rowCount: this.childRowCount,\n columnCount: this.numColumns,\n });\n children.set(offsetRow, child);\n this.numRows += child.rowCount;\n }\n\n this.children = children;\n }\n\n expandAll(): void {\n throw new Error('Expand all not implemented.');\n }\n\n collapseAll(): void {\n throw new Error('Collapse all not implemented.');\n }\n\n depthForRow(row: ModelIndex): number {\n return this.getCachedDepthForRow(this.children, row);\n }\n\n /**\n * Returns the map key and the offsetRow given the provided children and row index.\n * If the returned key is null, then this offset row is within this model.\n * Only returning the key instead of the model so that memoize doesn't cache a bunch of the children models after they've been deleted (collapsed).\n */\n getCachedModelRowOffset = memoizeClear(\n (\n children: ChildrenTreeMap,\n row: ModelIndex\n ): { key: ModelIndex | null; offsetRow: ModelIndex } => {\n let key = null;\n let offsetRow = row;\n // Need to iterate through the map in order... sort it first\n const sortedEntries = [...children].sort((a, b) => a[0] - b[0]);\n for (let i = 0; i < sortedEntries.length; i += 1) {\n const [childRow, childModel] = sortedEntries[i];\n if (offsetRow <= childRow) {\n break;\n }\n const childRowCount = childModel.rowCount;\n if (offsetRow <= childRow + childRowCount) {\n key = childRow;\n offsetRow = offsetRow - childRow - 1;\n break;\n }\n offsetRow -= childRowCount;\n }\n\n return { key, offsetRow };\n }\n );\n\n getCachedTextForRowHeader = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex): string => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return `${key}.${model.textForRowHeader(offsetRow)}`;\n }\n }\n\n return `${offsetRow}`;\n }\n );\n\n getCachedTextForCell = memoizeClear(\n (\n children: ChildrenTreeMap,\n column: ModelIndex,\n row: ModelIndex\n ): string => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return `${key}.${model.textForCell(column, offsetRow)}`;\n }\n }\n\n return `${column},${offsetRow}`;\n }\n );\n\n getCachedIsRowExpandable = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex, maxDepth: number): boolean => {\n const depth = this.getCachedDepthForRow(children, row);\n\n return depth < maxDepth;\n }\n );\n\n getCachedIsRowExpanded = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex): boolean => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return model.isRowExpanded(offsetRow);\n }\n }\n\n return children.has(offsetRow);\n }\n );\n\n getCachedDepthForRow = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex): number => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return model.depthForRow(offsetRow) + 1;\n }\n }\n\n return 0;\n }\n );\n}\n\nexport default MockTreeGridModel;\n"],"mappings":";;;AAAA;AACA;AAAA,OACOA,aAAa;AAAA,OACbC,YAAY;AAMnB;AACA;AACA;AACA;AACA,MAAMC,iBAAiB,SAASF,aAAa,CAAgC;EAK3E;;EAaAG,WAAWA,CAAA,EAiBH;IAAA,IAjBI;MACVC,QAAQ,GAAGF,iBAAiB,CAACG,iBAAiB;MAC9CC,WAAW,GAAGJ,iBAAiB,CAACK,oBAAoB;MACpDC,QAAQ,EAARA,SAAQ,GAAG,IAAIC,GAAG,CAAC,CAAC;MACpBC,aAAa,EAAbA,cAAa,GAAGC,IAAI,CAACC,IAAI,CACvBD,IAAI,CAACE,GAAG,CACNX,iBAAiB,CAACY,mBAAmB,EACrCV,QAAQ,GAAGF,iBAAiB,CAACa,8BAC/B,CACF,CAAC;MACDC,QAAQ,EAARA,SAAQ,GAAGd,iBAAiB,CAACe;IAO/B,CAAC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IACJ,KAAK,CAAC;MAAEd,QAAQ;MAAEE;IAAY,CAAC,CAAC;IAACe,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA,kCA0FTpB,YAAY,CACpC,CACEO,QAAyB,EACzBc,GAAe,KACuC;MACtD,IAAIC,GAAG,GAAG,IAAI;MACd,IAAIC,SAAS,GAAGF,GAAG;MACnB;MACA,IAAMG,aAAa,GAAG,CAAC,GAAGjB,QAAQ,CAAC,CAACkB,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC;MAC/D,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,aAAa,CAACN,MAAM,EAAEU,CAAC,IAAI,CAAC,EAAE;QAChD,IAAM,CAACC,QAAQ,EAAEC,UAAU,CAAC,GAAGN,aAAa,CAACI,CAAC,CAAC;QAC/C,IAAIL,SAAS,IAAIM,QAAQ,EAAE;UACzB;QACF;QACA,IAAMpB,aAAa,GAAGqB,UAAU,CAAC3B,QAAQ;QACzC,IAAIoB,SAAS,IAAIM,QAAQ,GAAGpB,aAAa,EAAE;UACzCa,GAAG,GAAGO,QAAQ;UACdN,SAAS,GAAGA,SAAS,GAAGM,QAAQ,GAAG,CAAC;UACpC;QACF;QACAN,SAAS,IAAId,aAAa;MAC5B;MAEA,OAAO;QAAEa,GAAG;QAAEC;MAAU,CAAC;IAC3B,CACF,CAAC;IAAAH,eAAA,oCAE2BpB,YAAY,CACtC,CAACO,QAAyB,EAAEc,GAAe,KAAa;MACtD,IAAM;QAAEC,GAAG;QAAEC;MAAU,CAAC,GAAG,IAAI,CAACQ,uBAAuB,CAACxB,QAAQ,EAAEc,GAAG,CAAC;MAEtE,IAAIC,GAAG,IAAI,IAAI,EAAE;QACf,IAAMU,KAAK,GAAGzB,QAAQ,CAAC0B,GAAG,CAACX,GAAG,CAAC;QAC/B,IAAIU,KAAK,KAAKb,SAAS,EAAE;UACvB,UAAAe,MAAA,CAAUZ,GAAG,OAAAY,MAAA,CAAIF,KAAK,CAACG,gBAAgB,CAACZ,SAAS,CAAC;QACpD;MACF;MAEA,UAAAW,MAAA,CAAUX,SAAS;IACrB,CACF,CAAC;IAAAH,eAAA,+BAEsBpB,YAAY,CACjC,CACEO,QAAyB,EACzB6B,MAAkB,EAClBf,GAAe,KACJ;MACX,IAAM;QAAEC,GAAG;QAAEC;MAAU,CAAC,GAAG,IAAI,CAACQ,uBAAuB,CAACxB,QAAQ,EAAEc,GAAG,CAAC;MAEtE,IAAIC,GAAG,IAAI,IAAI,EAAE;QACf,IAAMU,KAAK,GAAGzB,QAAQ,CAAC0B,GAAG,CAACX,GAAG,CAAC;QAC/B,IAAIU,KAAK,KAAKb,SAAS,EAAE;UACvB,UAAAe,MAAA,CAAUZ,GAAG,OAAAY,MAAA,CAAIF,KAAK,CAACK,WAAW,CAACD,MAAM,EAAEb,SAAS,CAAC;QACvD;MACF;MAEA,UAAAW,MAAA,CAAUE,MAAM,OAAAF,MAAA,CAAIX,SAAS;IAC/B,CACF,CAAC;IAAAH,eAAA,mCAE0BpB,YAAY,CACrC,CAACO,QAAyB,EAAEc,GAAe,EAAEN,QAAgB,KAAc;MACzE,IAAMuB,KAAK,GAAG,IAAI,CAACC,oBAAoB,CAAChC,QAAQ,EAAEc,GAAG,CAAC;MAEtD,OAAOiB,KAAK,GAAGvB,QAAQ;IACzB,CACF,CAAC;IAAAK,eAAA,iCAEwBpB,YAAY,CACnC,CAACO,QAAyB,EAAEc,GAAe,KAAc;MACvD,IAAM;QAAEC,GAAG;QAAEC;MAAU,CAAC,GAAG,IAAI,CAACQ,uBAAuB,CAACxB,QAAQ,EAAEc,GAAG,CAAC;MAEtE,IAAIC,GAAG,IAAI,IAAI,EAAE;QACf,IAAMU,KAAK,GAAGzB,QAAQ,CAAC0B,GAAG,CAACX,GAAG,CAAC;QAC/B,IAAIU,KAAK,KAAKb,SAAS,EAAE;UACvB,OAAOa,KAAK,CAACQ,aAAa,CAACjB,SAAS,CAAC;QACvC;MACF;MAEA,OAAOhB,QAAQ,CAACkC,GAAG,CAAClB,SAAS,CAAC;IAChC,CACF,CAAC;IAAAH,eAAA,+BAEsBpB,YAAY,CACjC,CAACO,QAAyB,EAAEc,GAAe,KAAa;MACtD,IAAM;QAAEC,GAAG;QAAEC;MAAU,CAAC,GAAG,IAAI,CAACQ,uBAAuB,CAACxB,QAAQ,EAAEc,GAAG,CAAC;MAEtE,IAAIC,GAAG,IAAI,IAAI,EAAE;QACf,IAAMU,KAAK,GAAGzB,QAAQ,CAAC0B,GAAG,CAACX,GAAG,CAAC;QAC/B,IAAIU,KAAK,KAAKb,SAAS,EAAE;UACvB,OAAOa,KAAK,CAACU,WAAW,CAACnB,SAAS,CAAC,GAAG,CAAC;QACzC;MACF;MAEA,OAAO,CAAC;IACV,CACF,CAAC;IAzLC,IAAI,CAAChB,QAAQ,GAAGA,SAAQ;IACxB,IAAI,CAACE,aAAa,GAAGA,cAAa;IAClC,IAAI,CAACM,QAAQ,GAAGA,SAAQ;EAC1B;EAEAsB,WAAWA,CAACD,MAAkB,EAAEf,GAAe,EAAU;IACvD,OAAO,IAAI,CAACsB,oBAAoB,CAAC,IAAI,CAACpC,QAAQ,EAAE6B,MAAM,EAAEf,GAAG,CAAC;EAC9D;EAEAc,gBAAgBA,CAACd,GAAe,EAAU;IACxC,OAAO,IAAI,CAACuB,yBAAyB,CAAC,IAAI,CAACrC,QAAQ,EAAEc,GAAG,CAAC;EAC3D;EAEAwB,YAAYA,CAACxB,GAAe,EAAW;IACrC,OAAO,KAAK;EACd;EAEA,IAAIyB,iBAAiBA,CAAA,EAAY;IAC/B,OAAO,IAAI;EACb;EAEA,IAAIC,oBAAoBA,CAAA,EAAY;IAClC,OAAO,KAAK;EACd;EAEA,IAAIC,sBAAsBA,CAAA,EAAW;IACnC,OAAO,CAAC;EACV;EAEAC,eAAeA,CAAC5B,GAAe,EAAW;IACxC,OAAO,IAAI,CAAC6B,wBAAwB,CAAC,IAAI,CAAC3C,QAAQ,EAAEc,GAAG,EAAE,IAAI,CAACN,QAAQ,CAAC;EACzE;EAEAyB,aAAaA,CAACnB,GAAe,EAAW;IACtC,OAAO,IAAI,CAAC8B,sBAAsB,CAAC,IAAI,CAAC5C,QAAQ,EAAEc,GAAG,CAAC;EACxD;EAEA+B,cAAcA,CACZ/B,GAAe,EACfgC,UAAmB,EAEb;IAAA,IADNC,iBAAiB,GAAArC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;IAEzB,IAAM;MAAEK,GAAG;MAAEC;IAAU,CAAC,GAAG,IAAI,CAACQ,uBAAuB,CAAC,IAAI,CAACxB,QAAQ,EAAEc,GAAG,CAAC;;IAE3E;IACA,IAAMd,QAAQ,GAAG,IAAIC,GAAG,CAAC,IAAI,CAACD,QAAQ,CAAC;IACvC,IAAIe,GAAG,IAAI,IAAI,EAAE;MACf,IAAMU,KAAK,GAAG,IAAI,CAACzB,QAAQ,CAAC0B,GAAG,CAACX,GAAG,CAAC;MACpC,IAAIU,KAAK,KAAKb,SAAS,EAAE;QACvB,IAAM;UAAEhB,QAAQ,EAAEoD;QAAsB,CAAC,GAAGvB,KAAK;QACjDA,KAAK,CAACoB,cAAc,CAAC7B,SAAS,EAAE8B,UAAU,EAAEC,iBAAiB,CAAC;QAC9D,IAAI,CAACE,OAAO,IAAIxB,KAAK,CAAC7B,QAAQ,GAAGoD,qBAAqB;MACxD;IACF,CAAC,MAAM,IAAI,CAACF,UAAU,EAAE;MACtB,IAAMvB,UAAU,GAAGvB,QAAQ,CAAC0B,GAAG,CAACV,SAAS,CAAC;MAC1C,IAAIO,UAAU,KAAKX,SAAS,EAAE;QAC5B,IAAI,CAACqC,OAAO,IAAI1B,UAAU,CAAC3B,QAAQ;QACnCI,QAAQ,CAACkD,MAAM,CAAClC,SAAS,CAAC;MAC5B;IACF,CAAC,MAAM;MACL,IAAMmC,KAAK,GAAG,IAAIzD,iBAAiB,CAAC;QAClCE,QAAQ,EAAE,IAAI,CAACM,aAAa;QAC5BJ,WAAW,EAAE,IAAI,CAACsD;MACpB,CAAC,CAAC;MACFpD,QAAQ,CAACqD,GAAG,CAACrC,SAAS,EAAEmC,KAAK,CAAC;MAC9B,IAAI,CAACF,OAAO,IAAIE,KAAK,CAACvD,QAAQ;IAChC;IAEA,IAAI,CAACI,QAAQ,GAAGA,QAAQ;EAC1B;EAEAsD,SAASA,CAAA,EAAS;IAChB,MAAM,IAAIC,KAAK,CAAC,6BAA6B,CAAC;EAChD;EAEAC,WAAWA,CAAA,EAAS;IAClB,MAAM,IAAID,KAAK,CAAC,+BAA+B,CAAC;EAClD;EAEApB,WAAWA,CAACrB,GAAe,EAAU;IACnC,OAAO,IAAI,CAACkB,oBAAoB,CAAC,IAAI,CAAChC,QAAQ,EAAEc,GAAG,CAAC;EACtD;;EAEA;AACF;AACA;AACA;AACA;AAmGA;AAACD,eAAA,CAhOKnB,iBAAiB,uBACM,UAAU;AAAAmB,eAAA,CADjCnB,iBAAiB,0BAGS,GAAG;AAAAmB,eAAA,CAH7BnB,iBAAiB,oCAMmB,IAAI;AAAAmB,eAAA,CANxCnB,iBAAiB,yBAQQ,EAAE;AAAAmB,eAAA,CAR3BnB,iBAAiB,eAUF,EAAE;AAwNvB,eAAeA,iBAAiB"}
1
+ {"version":3,"file":"MockTreeGridModel.js","names":["MockGridModel","memoizeClear","MockTreeGridModel","constructor","rowCount","DEFAULT_ROW_COUNT","columnCount","DEFAULT_COLUMN_COUNT","children","Map","childRowCount","Math","ceil","max","MIN_CHILD_ROW_COUNT","DEFAULT_CHILD_ROW_COUNT_FACTOR","maxDepth","MAX_DEPTH","arguments","length","undefined","_defineProperty","row","key","offsetRow","sortedEntries","sort","a","b","i","childRow","childModel","getCachedModelRowOffset","model","get","concat","textForRowHeader","column","textForCell","depth","getCachedDepthForRow","isRowExpanded","has","depthForRow","getCachedTextForCell","getCachedTextForRowHeader","isRowMovable","hasExpandableRows","isExpandAllAvailable","floatingBottomRowCount","isRowExpandable","getCachedIsRowExpandable","getCachedIsRowExpanded","setRowExpanded","isExpanded","expandDescendants","originalChildRowCount","numRows","delete","child","numColumns","set","expandAll","Error","collapseAll"],"sources":["../src/MockTreeGridModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\nimport MockGridModel from './MockGridModel';\nimport memoizeClear from './memoizeClear';\nimport type ExpandableGridModel from './ExpandableGridModel';\nimport { type ModelIndex } from './GridMetrics';\n\ntype ChildrenTreeMap = Map<ModelIndex, MockTreeGridModel>;\n\n/**\n * A class to mock a tree model so can test out tree models.\n * Whenever a row is expanded, it creates a child model for that row, which can then make a child for those rows, etc.\n */\nclass MockTreeGridModel extends MockGridModel implements ExpandableGridModel {\n static DEFAULT_ROW_COUNT = 1000000000;\n\n static DEFAULT_COLUMN_COUNT = 100;\n\n /** How many rows a child tree should have related to the parent. Eg. if parent has 10000 rows, child will have 100 */\n static DEFAULT_CHILD_ROW_COUNT_FACTOR = 0.01;\n\n static MIN_CHILD_ROW_COUNT = 10;\n\n static MAX_DEPTH = 10;\n\n private children: ChildrenTreeMap;\n\n private childRowCount: number;\n\n private maxDepth: number;\n\n constructor({\n rowCount = MockTreeGridModel.DEFAULT_ROW_COUNT,\n columnCount = MockTreeGridModel.DEFAULT_COLUMN_COUNT,\n children = new Map(),\n childRowCount = Math.ceil(\n Math.max(\n MockTreeGridModel.MIN_CHILD_ROW_COUNT,\n rowCount * MockTreeGridModel.DEFAULT_CHILD_ROW_COUNT_FACTOR\n )\n ),\n maxDepth = MockTreeGridModel.MAX_DEPTH,\n }: {\n children?: ChildrenTreeMap;\n columnCount?: number;\n rowCount?: number;\n childRowCount?: number;\n maxDepth?: number;\n } = {}) {\n super({ rowCount, columnCount });\n\n this.children = children;\n this.childRowCount = childRowCount;\n this.maxDepth = maxDepth;\n }\n\n textForCell(column: ModelIndex, row: ModelIndex): string {\n return this.getCachedTextForCell(this.children, column, row);\n }\n\n textForRowHeader(row: ModelIndex): string {\n return this.getCachedTextForRowHeader(this.children, row);\n }\n\n isRowMovable(row: ModelIndex): boolean {\n return false;\n }\n\n get hasExpandableRows(): boolean {\n return true;\n }\n\n get isExpandAllAvailable(): boolean {\n return false;\n }\n\n get floatingBottomRowCount(): number {\n return 0;\n }\n\n isRowExpandable(row: ModelIndex): boolean {\n return this.getCachedIsRowExpandable(this.children, row, this.maxDepth);\n }\n\n isRowExpanded(row: ModelIndex): boolean {\n return this.getCachedIsRowExpanded(this.children, row);\n }\n\n setRowExpanded(\n row: ModelIndex,\n isExpanded: boolean,\n expandDescendants = false\n ): void {\n const { key, offsetRow } = this.getCachedModelRowOffset(this.children, row);\n\n // We always set a new map so that our memoize functions work properly\n const children = new Map(this.children);\n if (key != null) {\n const model = this.children.get(key);\n if (model !== undefined) {\n const { rowCount: originalChildRowCount } = model;\n model.setRowExpanded(offsetRow, isExpanded, expandDescendants);\n this.numRows += model.rowCount - originalChildRowCount;\n }\n } else if (!isExpanded) {\n const childModel = children.get(offsetRow);\n if (childModel !== undefined) {\n this.numRows -= childModel.rowCount;\n children.delete(offsetRow);\n }\n } else {\n const child = new MockTreeGridModel({\n rowCount: this.childRowCount,\n columnCount: this.numColumns,\n });\n children.set(offsetRow, child);\n this.numRows += child.rowCount;\n }\n\n this.children = children;\n }\n\n expandAll(): void {\n throw new Error('Expand all not implemented.');\n }\n\n collapseAll(): void {\n throw new Error('Collapse all not implemented.');\n }\n\n depthForRow(row: ModelIndex): number {\n return this.getCachedDepthForRow(this.children, row);\n }\n\n /**\n * Returns the map key and the offsetRow given the provided children and row index.\n * If the returned key is null, then this offset row is within this model.\n * Only returning the key instead of the model so that memoize doesn't cache a bunch of the children models after they've been deleted (collapsed).\n */\n getCachedModelRowOffset = memoizeClear(\n (\n children: ChildrenTreeMap,\n row: ModelIndex\n ): { key: ModelIndex | null; offsetRow: ModelIndex } => {\n let key = null;\n let offsetRow = row;\n // Need to iterate through the map in order... sort it first\n const sortedEntries = [...children].sort((a, b) => a[0] - b[0]);\n for (let i = 0; i < sortedEntries.length; i += 1) {\n const [childRow, childModel] = sortedEntries[i];\n if (offsetRow <= childRow) {\n break;\n }\n const childRowCount = childModel.rowCount;\n if (offsetRow <= childRow + childRowCount) {\n key = childRow;\n offsetRow = offsetRow - childRow - 1;\n break;\n }\n offsetRow -= childRowCount;\n }\n\n return { key, offsetRow };\n }\n );\n\n getCachedTextForRowHeader = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex): string => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return `${key}.${model.textForRowHeader(offsetRow)}`;\n }\n }\n\n return `${offsetRow}`;\n }\n );\n\n getCachedTextForCell = memoizeClear(\n (\n children: ChildrenTreeMap,\n column: ModelIndex,\n row: ModelIndex\n ): string => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return `${key}.${model.textForCell(column, offsetRow)}`;\n }\n }\n\n return `${column},${offsetRow}`;\n }\n );\n\n getCachedIsRowExpandable = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex, maxDepth: number): boolean => {\n const depth = this.getCachedDepthForRow(children, row);\n\n return depth < maxDepth;\n }\n );\n\n getCachedIsRowExpanded = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex): boolean => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return model.isRowExpanded(offsetRow);\n }\n }\n\n return children.has(offsetRow);\n }\n );\n\n getCachedDepthForRow = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex): number => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return model.depthForRow(offsetRow) + 1;\n }\n }\n\n return 0;\n }\n );\n}\n\nexport default MockTreeGridModel;\n"],"mappings":";;;AAAA;AACA;AAAA,OACOA,aAAa;AAAA,OACbC,YAAY;AAMnB;AACA;AACA;AACA;AACA,MAAMC,iBAAiB,SAASF,aAAa,CAAgC;EAK3E;;EAaAG,WAAWA,CAAA,EAiBH;IAAA,IAjBI;MACVC,QAAQ,GAAGF,iBAAiB,CAACG,iBAAiB;MAC9CC,WAAW,GAAGJ,iBAAiB,CAACK,oBAAoB;MACpDC,QAAQ,EAARA,SAAQ,GAAG,IAAIC,GAAG,CAAC,CAAC;MACpBC,aAAa,EAAbA,cAAa,GAAGC,IAAI,CAACC,IAAI,CACvBD,IAAI,CAACE,GAAG,CACNX,iBAAiB,CAACY,mBAAmB,EACrCV,QAAQ,GAAGF,iBAAiB,CAACa,8BAC/B,CACF,CAAC;MACDC,QAAQ,EAARA,SAAQ,GAAGd,iBAAiB,CAACe;IAO/B,CAAC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IACJ,KAAK,CAAC;MAAEd,QAAQ;MAAEE;IAAY,CAAC,CAAC;IAACe,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA,kCA0FTpB,YAAY,CACpC,CACEO,QAAyB,EACzBc,GAAe,KACuC;MACtD,IAAIC,GAAG,GAAG,IAAI;MACd,IAAIC,SAAS,GAAGF,GAAG;MACnB;MACA,IAAMG,aAAa,GAAG,CAAC,GAAGjB,QAAQ,CAAC,CAACkB,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC;MAC/D,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,aAAa,CAACN,MAAM,EAAEU,CAAC,IAAI,CAAC,EAAE;QAChD,IAAM,CAACC,QAAQ,EAAEC,UAAU,CAAC,GAAGN,aAAa,CAACI,CAAC,CAAC;QAC/C,IAAIL,SAAS,IAAIM,QAAQ,EAAE;UACzB;QACF;QACA,IAAMpB,aAAa,GAAGqB,UAAU,CAAC3B,QAAQ;QACzC,IAAIoB,SAAS,IAAIM,QAAQ,GAAGpB,aAAa,EAAE;UACzCa,GAAG,GAAGO,QAAQ;UACdN,SAAS,GAAGA,SAAS,GAAGM,QAAQ,GAAG,CAAC;UACpC;QACF;QACAN,SAAS,IAAId,aAAa;MAC5B;MAEA,OAAO;QAAEa,GAAG;QAAEC;MAAU,CAAC;IAC3B,CACF,CAAC;IAAAH,eAAA,oCAE2BpB,YAAY,CACtC,CAACO,QAAyB,EAAEc,GAAe,KAAa;MACtD,IAAM;QAAEC,GAAG;QAAEC;MAAU,CAAC,GAAG,IAAI,CAACQ,uBAAuB,CAACxB,QAAQ,EAAEc,GAAG,CAAC;MAEtE,IAAIC,GAAG,IAAI,IAAI,EAAE;QACf,IAAMU,KAAK,GAAGzB,QAAQ,CAAC0B,GAAG,CAACX,GAAG,CAAC;QAC/B,IAAIU,KAAK,KAAKb,SAAS,EAAE;UACvB,UAAAe,MAAA,CAAUZ,GAAG,OAAAY,MAAA,CAAIF,KAAK,CAACG,gBAAgB,CAACZ,SAAS,CAAC;QACpD;MACF;MAEA,UAAAW,MAAA,CAAUX,SAAS;IACrB,CACF,CAAC;IAAAH,eAAA,+BAEsBpB,YAAY,CACjC,CACEO,QAAyB,EACzB6B,MAAkB,EAClBf,GAAe,KACJ;MACX,IAAM;QAAEC,GAAG;QAAEC;MAAU,CAAC,GAAG,IAAI,CAACQ,uBAAuB,CAACxB,QAAQ,EAAEc,GAAG,CAAC;MAEtE,IAAIC,GAAG,IAAI,IAAI,EAAE;QACf,IAAMU,KAAK,GAAGzB,QAAQ,CAAC0B,GAAG,CAACX,GAAG,CAAC;QAC/B,IAAIU,KAAK,KAAKb,SAAS,EAAE;UACvB,UAAAe,MAAA,CAAUZ,GAAG,OAAAY,MAAA,CAAIF,KAAK,CAACK,WAAW,CAACD,MAAM,EAAEb,SAAS,CAAC;QACvD;MACF;MAEA,UAAAW,MAAA,CAAUE,MAAM,OAAAF,MAAA,CAAIX,SAAS;IAC/B,CACF,CAAC;IAAAH,eAAA,mCAE0BpB,YAAY,CACrC,CAACO,QAAyB,EAAEc,GAAe,EAAEN,QAAgB,KAAc;MACzE,IAAMuB,KAAK,GAAG,IAAI,CAACC,oBAAoB,CAAChC,QAAQ,EAAEc,GAAG,CAAC;MAEtD,OAAOiB,KAAK,GAAGvB,QAAQ;IACzB,CACF,CAAC;IAAAK,eAAA,iCAEwBpB,YAAY,CACnC,CAACO,QAAyB,EAAEc,GAAe,KAAc;MACvD,IAAM;QAAEC,GAAG;QAAEC;MAAU,CAAC,GAAG,IAAI,CAACQ,uBAAuB,CAACxB,QAAQ,EAAEc,GAAG,CAAC;MAEtE,IAAIC,GAAG,IAAI,IAAI,EAAE;QACf,IAAMU,KAAK,GAAGzB,QAAQ,CAAC0B,GAAG,CAACX,GAAG,CAAC;QAC/B,IAAIU,KAAK,KAAKb,SAAS,EAAE;UACvB,OAAOa,KAAK,CAACQ,aAAa,CAACjB,SAAS,CAAC;QACvC;MACF;MAEA,OAAOhB,QAAQ,CAACkC,GAAG,CAAClB,SAAS,CAAC;IAChC,CACF,CAAC;IAAAH,eAAA,+BAEsBpB,YAAY,CACjC,CAACO,QAAyB,EAAEc,GAAe,KAAa;MACtD,IAAM;QAAEC,GAAG;QAAEC;MAAU,CAAC,GAAG,IAAI,CAACQ,uBAAuB,CAACxB,QAAQ,EAAEc,GAAG,CAAC;MAEtE,IAAIC,GAAG,IAAI,IAAI,EAAE;QACf,IAAMU,KAAK,GAAGzB,QAAQ,CAAC0B,GAAG,CAACX,GAAG,CAAC;QAC/B,IAAIU,KAAK,KAAKb,SAAS,EAAE;UACvB,OAAOa,KAAK,CAACU,WAAW,CAACnB,SAAS,CAAC,GAAG,CAAC;QACzC;MACF;MAEA,OAAO,CAAC;IACV,CACF,CAAC;IAzLC,IAAI,CAAChB,QAAQ,GAAGA,SAAQ;IACxB,IAAI,CAACE,aAAa,GAAGA,cAAa;IAClC,IAAI,CAACM,QAAQ,GAAGA,SAAQ;EAC1B;EAEAsB,WAAWA,CAACD,MAAkB,EAAEf,GAAe,EAAU;IACvD,OAAO,IAAI,CAACsB,oBAAoB,CAAC,IAAI,CAACpC,QAAQ,EAAE6B,MAAM,EAAEf,GAAG,CAAC;EAC9D;EAEAc,gBAAgBA,CAACd,GAAe,EAAU;IACxC,OAAO,IAAI,CAACuB,yBAAyB,CAAC,IAAI,CAACrC,QAAQ,EAAEc,GAAG,CAAC;EAC3D;EAEAwB,YAAYA,CAACxB,GAAe,EAAW;IACrC,OAAO,KAAK;EACd;EAEA,IAAIyB,iBAAiBA,CAAA,EAAY;IAC/B,OAAO,IAAI;EACb;EAEA,IAAIC,oBAAoBA,CAAA,EAAY;IAClC,OAAO,KAAK;EACd;EAEA,IAAIC,sBAAsBA,CAAA,EAAW;IACnC,OAAO,CAAC;EACV;EAEAC,eAAeA,CAAC5B,GAAe,EAAW;IACxC,OAAO,IAAI,CAAC6B,wBAAwB,CAAC,IAAI,CAAC3C,QAAQ,EAAEc,GAAG,EAAE,IAAI,CAACN,QAAQ,CAAC;EACzE;EAEAyB,aAAaA,CAACnB,GAAe,EAAW;IACtC,OAAO,IAAI,CAAC8B,sBAAsB,CAAC,IAAI,CAAC5C,QAAQ,EAAEc,GAAG,CAAC;EACxD;EAEA+B,cAAcA,CACZ/B,GAAe,EACfgC,UAAmB,EAEb;IAAA,IADNC,iBAAiB,GAAArC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;IAEzB,IAAM;MAAEK,GAAG;MAAEC;IAAU,CAAC,GAAG,IAAI,CAACQ,uBAAuB,CAAC,IAAI,CAACxB,QAAQ,EAAEc,GAAG,CAAC;;IAE3E;IACA,IAAMd,QAAQ,GAAG,IAAIC,GAAG,CAAC,IAAI,CAACD,QAAQ,CAAC;IACvC,IAAIe,GAAG,IAAI,IAAI,EAAE;MACf,IAAMU,KAAK,GAAG,IAAI,CAACzB,QAAQ,CAAC0B,GAAG,CAACX,GAAG,CAAC;MACpC,IAAIU,KAAK,KAAKb,SAAS,EAAE;QACvB,IAAM;UAAEhB,QAAQ,EAAEoD;QAAsB,CAAC,GAAGvB,KAAK;QACjDA,KAAK,CAACoB,cAAc,CAAC7B,SAAS,EAAE8B,UAAU,EAAEC,iBAAiB,CAAC;QAC9D,IAAI,CAACE,OAAO,IAAIxB,KAAK,CAAC7B,QAAQ,GAAGoD,qBAAqB;MACxD;IACF,CAAC,MAAM,IAAI,CAACF,UAAU,EAAE;MACtB,IAAMvB,UAAU,GAAGvB,QAAQ,CAAC0B,GAAG,CAACV,SAAS,CAAC;MAC1C,IAAIO,UAAU,KAAKX,SAAS,EAAE;QAC5B,IAAI,CAACqC,OAAO,IAAI1B,UAAU,CAAC3B,QAAQ;QACnCI,QAAQ,CAACkD,MAAM,CAAClC,SAAS,CAAC;MAC5B;IACF,CAAC,MAAM;MACL,IAAMmC,KAAK,GAAG,IAAIzD,iBAAiB,CAAC;QAClCE,QAAQ,EAAE,IAAI,CAACM,aAAa;QAC5BJ,WAAW,EAAE,IAAI,CAACsD;MACpB,CAAC,CAAC;MACFpD,QAAQ,CAACqD,GAAG,CAACrC,SAAS,EAAEmC,KAAK,CAAC;MAC9B,IAAI,CAACF,OAAO,IAAIE,KAAK,CAACvD,QAAQ;IAChC;IAEA,IAAI,CAACI,QAAQ,GAAGA,QAAQ;EAC1B;EAEAsD,SAASA,CAAA,EAAS;IAChB,MAAM,IAAIC,KAAK,CAAC,6BAA6B,CAAC;EAChD;EAEAC,WAAWA,CAAA,EAAS;IAClB,MAAM,IAAID,KAAK,CAAC,+BAA+B,CAAC;EAClD;EAEApB,WAAWA,CAACrB,GAAe,EAAU;IACnC,OAAO,IAAI,CAACkB,oBAAoB,CAAC,IAAI,CAAChC,QAAQ,EAAEc,GAAG,CAAC;EACtD;;EAEA;AACF;AACA;AACA;AACA;AAmGA;AAACD,eAAA,CAhOKnB,iBAAiB,uBACM,UAAU;AAAAmB,eAAA,CADjCnB,iBAAiB,0BAGS,GAAG;AAAAmB,eAAA,CAH7BnB,iBAAiB,oCAMmB,IAAI;AAAAmB,eAAA,CANxCnB,iBAAiB,yBAQQ,EAAE;AAAAmB,eAAA,CAR3BnB,iBAAiB,eAUF,EAAE;AAwNvB,eAAeA,iBAAiB"}
@@ -1,8 +1,8 @@
1
1
  import CellRenderer from './CellRenderer';
2
- import { VisibleIndex } from './GridMetrics';
3
- import { GridRenderState } from './GridRendererTypes';
4
- import { TokenBox, Token } from './GridUtils';
5
- import TokenBoxCellRenderer from './TokenBoxCellRenderer';
2
+ import { type VisibleIndex } from './GridMetrics';
3
+ import { type GridRenderState } from './GridRendererTypes';
4
+ import { type TokenBox, type Token } from './GridUtils';
5
+ import type TokenBoxCellRenderer from './TokenBoxCellRenderer';
6
6
  declare class TextCellRenderer extends CellRenderer implements TokenBoxCellRenderer {
7
7
  drawCellContent(context: CanvasRenderingContext2D, state: GridRenderState, column: VisibleIndex, row: VisibleIndex): void;
8
8
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"TextCellRenderer.d.ts","sourceRoot":"","sources":["../src/TextCellRenderer.ts"],"names":[],"mappings":"AAEA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAsB,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAkB,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAE1D,cAAM,gBAAiB,SAAQ,YAAa,YAAW,oBAAoB;IACzE,eAAe,CACb,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,YAAY,GAChB,IAAI;IA4FP;;;;;;OAMG;IACH,2BAA2B,CACzB,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,eAAe,GACrB,QAAQ,EAAE;IAsEb,gBAAgB,CACd,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,eAAe,GACrB,IAAI;IAOP;;OAEG;IACH,iCAAiC,mBAEd,MAAM,UACb,KAAK,EAAE,SAGR,MAAM,aACF,kBAAkB,cACjB,MAAM,WACT,wBAAwB,KAChC,QAAQ,EAAE,uDARI,MAAM,UACb,KAAK,EAAE,SAGR,MAAM,aACF,kBAAkB,cACjB,MAAM,WACT,wBAAwB,KAChC,QAAQ,EAAE,EAgDb;CACH;AAED,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"TextCellRenderer.d.ts","sourceRoot":"","sources":["../src/TextCellRenderer.ts"],"names":[],"mappings":"AAEA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAkB,EAAE,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,KAAK,oBAAoB,MAAM,wBAAwB,CAAC;AAE/D,cAAM,gBAAiB,SAAQ,YAAa,YAAW,oBAAoB;IACzE,eAAe,CACb,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,YAAY,GAChB,IAAI;IA4FP;;;;;;OAMG;IACH,2BAA2B,CACzB,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,eAAe,GACrB,QAAQ,EAAE;IAsEb,gBAAgB,CACd,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,eAAe,GACrB,IAAI;IAOP;;OAEG;IACH,iCAAiC,mBAEd,MAAM,UACb,KAAK,EAAE,SAGR,MAAM,aACF,kBAAkB,cACjB,MAAM,WACT,wBAAwB,KAChC,QAAQ,EAAE,uDARI,MAAM,UACb,KAAK,EAAE,SAGR,MAAM,aACF,kBAAkB,cACjB,MAAM,WACT,wBAAwB,KAChC,QAAQ,EAAE,EAgDb;CACH;AAED,eAAe,gBAAgB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"TextCellRenderer.js","names":["EMPTY_ARRAY","getOrThrow","CellRenderer","isExpandableGridModel","DEFAULT_FONT_WIDTH","GridUtils","memoizeClear","TextCellRenderer","constructor","arguments","_defineProperty","truncatedText","tokens","_font","_baseline","textHeight","context","top","bottom","tokenBoxes","lastTokenEnd","currentTextWidth","i","length","token","start","end","value","substring","measureText","width","tokenWidth","left","right","newTokenBox","x1","y1","x2","y2","push","max","drawCellContent","state","column","row","metrics","model","theme","fontWidths","modelColumns","modelRows","allRowHeights","firstColumn","isFirstColumn","textColor","rowHeight","modelRow","modelColumn","text","textForCell","truncationChar","truncationCharForCell","_fontWidths$get","textAlign","textAlignForCell","color","colorForCell","fillStyle","save","textWidth","x","textX","y","textY","getTextRenderMetrics","fontWidth","get","font","getCachedTruncatedString","tokensForCell","tokenIndex","textStart","actualBoundingBoxDescent","_ref","_token$end","nextToken","textEnd","widthOfUnderline","endsWith","hyperlinkColor","fillText","fillRect","restore","hasExpandableRows","drawCellRowTreeMarker","getTokenBoxesForVisibleCell","_fontWidths$get2","configureContext","actualBoundingBoxAscent","cachedTokenBoxes","getCachedTokenBoxesForVisibleCell","map","tokenBox","textBaseline","lineCap"],"sources":["../src/TextCellRenderer.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport { EMPTY_ARRAY, getOrThrow } from '@deephaven/utils';\nimport CellRenderer from './CellRenderer';\nimport { isExpandableGridModel } from './ExpandableGridModel';\nimport { VisibleIndex } from './GridMetrics';\nimport { DEFAULT_FONT_WIDTH, GridRenderState } from './GridRendererTypes';\nimport GridUtils, { TokenBox, Token } from './GridUtils';\nimport memoizeClear from './memoizeClear';\nimport TokenBoxCellRenderer from './TokenBoxCellRenderer';\n\nclass TextCellRenderer extends CellRenderer implements TokenBoxCellRenderer {\n drawCellContent(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): void {\n const { metrics, model, theme } = state;\n const { fontWidths, modelColumns, modelRows, allRowHeights, firstColumn } =\n metrics;\n const isFirstColumn = column === firstColumn;\n const { textColor } = theme;\n const rowHeight = getOrThrow(allRowHeights, row);\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = getOrThrow(modelColumns, column);\n const text = model.textForCell(modelColumn, modelRow);\n const truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n\n if (text && rowHeight > 0) {\n const textAlign = model.textAlignForCell(modelColumn, modelRow) || 'left';\n context.textAlign = textAlign;\n\n const color =\n model.colorForCell(modelColumn, modelRow, theme) || textColor;\n context.fillStyle = color;\n\n context.save();\n\n const {\n width: textWidth,\n x: textX,\n y: textY,\n } = GridUtils.getTextRenderMetrics(state, column, row);\n\n const fontWidth = fontWidths.get(context.font) ?? DEFAULT_FONT_WIDTH;\n const truncatedText = this.getCachedTruncatedString(\n context,\n text,\n textWidth,\n fontWidth,\n truncationChar\n );\n\n const tokens = model.tokensForCell(\n modelColumn,\n modelRow,\n truncatedText.length\n );\n\n if (truncatedText) {\n let tokenIndex = 0;\n let textStart = 0;\n let left = textX;\n const { actualBoundingBoxDescent } = context.measureText(truncatedText);\n\n while (textStart < truncatedText.length) {\n const nextToken = tokens[tokenIndex];\n const token = textStart === nextToken?.start ? nextToken : null;\n const textEnd =\n token?.end ?? nextToken?.start ?? truncatedText.length;\n const value = truncatedText.substring(textStart, textEnd);\n const { width } = context.measureText(value);\n const widthOfUnderline = value.endsWith('…')\n ? context.measureText(value.substring(0, value.length - 1)).width\n : width;\n\n // Set the styling based on the token, then draw the text\n if (token != null) {\n context.fillStyle = theme.hyperlinkColor;\n context.fillText(value, left, textY);\n context.fillRect(\n left,\n textY + actualBoundingBoxDescent,\n widthOfUnderline,\n 1\n );\n } else {\n context.fillStyle = color;\n context.fillText(value, left, textY);\n }\n\n left += width;\n textStart = textEnd;\n if (token != null) tokenIndex += 1;\n }\n }\n context.restore();\n }\n\n if (\n isFirstColumn &&\n isExpandableGridModel(model) &&\n model.hasExpandableRows\n ) {\n this.drawCellRowTreeMarker(context, state, row);\n }\n }\n\n /**\n * Gets the token boxes that are visible in the cell\n * @param column The visible column\n * @param row The visible row\n * @param state The GridRenderState\n * @returns An array of TokenBox of visible tokens or empty array with coordinates relative to gridX and gridY\n */\n getTokenBoxesForVisibleCell(\n column: VisibleIndex,\n row: VisibleIndex,\n state: GridRenderState\n ): TokenBox[] {\n const { metrics, context, model, theme } = state;\n\n if (context == null || metrics == null) {\n return EMPTY_ARRAY as unknown as TokenBox[];\n }\n\n const { modelRows, modelColumns } = metrics;\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = getOrThrow(modelColumns, column);\n\n const text = model.textForCell(modelColumn, modelRow);\n const {\n width: textWidth,\n x: textX,\n y: textY,\n } = GridUtils.getTextRenderMetrics(state, column, row);\n\n const { fontWidths } = metrics;\n\n // Set the font and baseline and change it back after\n context.save();\n this.configureContext(context, state);\n\n const fontWidth = fontWidths?.get(context.font) ?? DEFAULT_FONT_WIDTH;\n const truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n const truncatedText = this.getCachedTruncatedString(\n context,\n text,\n textWidth,\n fontWidth,\n truncationChar\n );\n\n const { actualBoundingBoxAscent, actualBoundingBoxDescent } =\n context.measureText(truncatedText);\n const textHeight = actualBoundingBoxAscent + actualBoundingBoxDescent;\n\n const tokens = model.tokensForCell(\n modelColumn,\n modelRow,\n truncatedText.length\n );\n\n // Check if the truncated text contains a link\n if (tokens.length === 0) {\n context.restore();\n return EMPTY_ARRAY as unknown as TokenBox[];\n }\n\n const cachedTokenBoxes = this.getCachedTokenBoxesForVisibleCell(\n truncatedText,\n tokens,\n theme.font,\n 'middle',\n textHeight,\n context\n ).map(tokenBox => ({\n x1: tokenBox.x1 + textX,\n y1: tokenBox.y1 + (textY - actualBoundingBoxAscent),\n x2: tokenBox.x2 + textX,\n y2: tokenBox.y2 + (textY - actualBoundingBoxAscent),\n token: tokenBox.token,\n }));\n\n context.restore();\n\n return cachedTokenBoxes;\n }\n\n configureContext(\n context: CanvasRenderingContext2D,\n state: GridRenderState\n ): void {\n const { theme } = state;\n context.font = theme.font;\n context.textBaseline = 'middle';\n context.lineCap = 'butt';\n }\n\n /**\n * Returns an array of token boxes with the coordinates relative to the top left corner of the text\n */\n getCachedTokenBoxesForVisibleCell = memoizeClear(\n (\n truncatedText: string,\n tokens: Token[],\n // _font and _baseline are passed in so value is re-calculated when they change\n // They should already be set on the `context`, so they are not used in this method\n _font: string,\n _baseline: CanvasTextBaseline,\n textHeight: number,\n context: CanvasRenderingContext2D\n ): TokenBox[] => {\n const top = 0;\n const bottom = textHeight;\n\n const tokenBoxes: TokenBox[] = [];\n\n // The index where the last token ended\n let lastTokenEnd = 0;\n // The width of the text preceding the current token\n let currentTextWidth = 0;\n // Loop through array and push them to array\n for (let i = 0; i < tokens.length; i += 1) {\n const token = tokens[i];\n const { start, end } = token;\n // The last token value is calculated based on the full text so the value needs to be truncated\n const value =\n end > truncatedText.length\n ? truncatedText.substring(start)\n : token.value;\n\n // Add the width of the text in between this token and the last token\n currentTextWidth += context.measureText(\n truncatedText.substring(lastTokenEnd, start)\n ).width;\n const tokenWidth = context.measureText(value).width;\n\n // Check if the x position is less than the grid x, then tokenWidth should be shifted by gridX - startX\n\n const left = currentTextWidth;\n const right = left + tokenWidth;\n\n const newTokenBox: TokenBox = {\n x1: left,\n y1: top,\n x2: right,\n y2: bottom,\n token,\n };\n\n tokenBoxes.push(newTokenBox);\n\n lastTokenEnd = end;\n currentTextWidth += tokenWidth;\n }\n\n return tokenBoxes;\n },\n { max: 10000 }\n );\n}\n\nexport default TextCellRenderer;\n"],"mappings":"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"}
1
+ {"version":3,"file":"TextCellRenderer.js","names":["EMPTY_ARRAY","getOrThrow","CellRenderer","isExpandableGridModel","DEFAULT_FONT_WIDTH","GridUtils","memoizeClear","TextCellRenderer","constructor","arguments","_defineProperty","truncatedText","tokens","_font","_baseline","textHeight","context","top","bottom","tokenBoxes","lastTokenEnd","currentTextWidth","i","length","token","start","end","value","substring","measureText","width","tokenWidth","left","right","newTokenBox","x1","y1","x2","y2","push","max","drawCellContent","state","column","row","metrics","model","theme","fontWidths","modelColumns","modelRows","allRowHeights","firstColumn","isFirstColumn","textColor","rowHeight","modelRow","modelColumn","text","textForCell","truncationChar","truncationCharForCell","_fontWidths$get","textAlign","textAlignForCell","color","colorForCell","fillStyle","save","textWidth","x","textX","y","textY","getTextRenderMetrics","fontWidth","get","font","getCachedTruncatedString","tokensForCell","tokenIndex","textStart","actualBoundingBoxDescent","_ref","_token$end","nextToken","textEnd","widthOfUnderline","endsWith","hyperlinkColor","fillText","fillRect","restore","hasExpandableRows","drawCellRowTreeMarker","getTokenBoxesForVisibleCell","_fontWidths$get2","configureContext","actualBoundingBoxAscent","cachedTokenBoxes","getCachedTokenBoxesForVisibleCell","map","tokenBox","textBaseline","lineCap"],"sources":["../src/TextCellRenderer.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport { EMPTY_ARRAY, getOrThrow } from '@deephaven/utils';\nimport CellRenderer from './CellRenderer';\nimport { isExpandableGridModel } from './ExpandableGridModel';\nimport { type VisibleIndex } from './GridMetrics';\nimport { DEFAULT_FONT_WIDTH, type GridRenderState } from './GridRendererTypes';\nimport GridUtils, { type TokenBox, type Token } from './GridUtils';\nimport memoizeClear from './memoizeClear';\nimport type TokenBoxCellRenderer from './TokenBoxCellRenderer';\n\nclass TextCellRenderer extends CellRenderer implements TokenBoxCellRenderer {\n drawCellContent(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): void {\n const { metrics, model, theme } = state;\n const { fontWidths, modelColumns, modelRows, allRowHeights, firstColumn } =\n metrics;\n const isFirstColumn = column === firstColumn;\n const { textColor } = theme;\n const rowHeight = getOrThrow(allRowHeights, row);\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = getOrThrow(modelColumns, column);\n const text = model.textForCell(modelColumn, modelRow);\n const truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n\n if (text && rowHeight > 0) {\n const textAlign = model.textAlignForCell(modelColumn, modelRow) || 'left';\n context.textAlign = textAlign;\n\n const color =\n model.colorForCell(modelColumn, modelRow, theme) || textColor;\n context.fillStyle = color;\n\n context.save();\n\n const {\n width: textWidth,\n x: textX,\n y: textY,\n } = GridUtils.getTextRenderMetrics(state, column, row);\n\n const fontWidth = fontWidths.get(context.font) ?? DEFAULT_FONT_WIDTH;\n const truncatedText = this.getCachedTruncatedString(\n context,\n text,\n textWidth,\n fontWidth,\n truncationChar\n );\n\n const tokens = model.tokensForCell(\n modelColumn,\n modelRow,\n truncatedText.length\n );\n\n if (truncatedText) {\n let tokenIndex = 0;\n let textStart = 0;\n let left = textX;\n const { actualBoundingBoxDescent } = context.measureText(truncatedText);\n\n while (textStart < truncatedText.length) {\n const nextToken = tokens[tokenIndex];\n const token = textStart === nextToken?.start ? nextToken : null;\n const textEnd =\n token?.end ?? nextToken?.start ?? truncatedText.length;\n const value = truncatedText.substring(textStart, textEnd);\n const { width } = context.measureText(value);\n const widthOfUnderline = value.endsWith('…')\n ? context.measureText(value.substring(0, value.length - 1)).width\n : width;\n\n // Set the styling based on the token, then draw the text\n if (token != null) {\n context.fillStyle = theme.hyperlinkColor;\n context.fillText(value, left, textY);\n context.fillRect(\n left,\n textY + actualBoundingBoxDescent,\n widthOfUnderline,\n 1\n );\n } else {\n context.fillStyle = color;\n context.fillText(value, left, textY);\n }\n\n left += width;\n textStart = textEnd;\n if (token != null) tokenIndex += 1;\n }\n }\n context.restore();\n }\n\n if (\n isFirstColumn &&\n isExpandableGridModel(model) &&\n model.hasExpandableRows\n ) {\n this.drawCellRowTreeMarker(context, state, row);\n }\n }\n\n /**\n * Gets the token boxes that are visible in the cell\n * @param column The visible column\n * @param row The visible row\n * @param state The GridRenderState\n * @returns An array of TokenBox of visible tokens or empty array with coordinates relative to gridX and gridY\n */\n getTokenBoxesForVisibleCell(\n column: VisibleIndex,\n row: VisibleIndex,\n state: GridRenderState\n ): TokenBox[] {\n const { metrics, context, model, theme } = state;\n\n if (context == null || metrics == null) {\n return EMPTY_ARRAY as unknown as TokenBox[];\n }\n\n const { modelRows, modelColumns } = metrics;\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = getOrThrow(modelColumns, column);\n\n const text = model.textForCell(modelColumn, modelRow);\n const {\n width: textWidth,\n x: textX,\n y: textY,\n } = GridUtils.getTextRenderMetrics(state, column, row);\n\n const { fontWidths } = metrics;\n\n // Set the font and baseline and change it back after\n context.save();\n this.configureContext(context, state);\n\n const fontWidth = fontWidths?.get(context.font) ?? DEFAULT_FONT_WIDTH;\n const truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n const truncatedText = this.getCachedTruncatedString(\n context,\n text,\n textWidth,\n fontWidth,\n truncationChar\n );\n\n const { actualBoundingBoxAscent, actualBoundingBoxDescent } =\n context.measureText(truncatedText);\n const textHeight = actualBoundingBoxAscent + actualBoundingBoxDescent;\n\n const tokens = model.tokensForCell(\n modelColumn,\n modelRow,\n truncatedText.length\n );\n\n // Check if the truncated text contains a link\n if (tokens.length === 0) {\n context.restore();\n return EMPTY_ARRAY as unknown as TokenBox[];\n }\n\n const cachedTokenBoxes = this.getCachedTokenBoxesForVisibleCell(\n truncatedText,\n tokens,\n theme.font,\n 'middle',\n textHeight,\n context\n ).map(tokenBox => ({\n x1: tokenBox.x1 + textX,\n y1: tokenBox.y1 + (textY - actualBoundingBoxAscent),\n x2: tokenBox.x2 + textX,\n y2: tokenBox.y2 + (textY - actualBoundingBoxAscent),\n token: tokenBox.token,\n }));\n\n context.restore();\n\n return cachedTokenBoxes;\n }\n\n configureContext(\n context: CanvasRenderingContext2D,\n state: GridRenderState\n ): void {\n const { theme } = state;\n context.font = theme.font;\n context.textBaseline = 'middle';\n context.lineCap = 'butt';\n }\n\n /**\n * Returns an array of token boxes with the coordinates relative to the top left corner of the text\n */\n getCachedTokenBoxesForVisibleCell = memoizeClear(\n (\n truncatedText: string,\n tokens: Token[],\n // _font and _baseline are passed in so value is re-calculated when they change\n // They should already be set on the `context`, so they are not used in this method\n _font: string,\n _baseline: CanvasTextBaseline,\n textHeight: number,\n context: CanvasRenderingContext2D\n ): TokenBox[] => {\n const top = 0;\n const bottom = textHeight;\n\n const tokenBoxes: TokenBox[] = [];\n\n // The index where the last token ended\n let lastTokenEnd = 0;\n // The width of the text preceding the current token\n let currentTextWidth = 0;\n // Loop through array and push them to array\n for (let i = 0; i < tokens.length; i += 1) {\n const token = tokens[i];\n const { start, end } = token;\n // The last token value is calculated based on the full text so the value needs to be truncated\n const value =\n end > truncatedText.length\n ? truncatedText.substring(start)\n : token.value;\n\n // Add the width of the text in between this token and the last token\n currentTextWidth += context.measureText(\n truncatedText.substring(lastTokenEnd, start)\n ).width;\n const tokenWidth = context.measureText(value).width;\n\n // Check if the x position is less than the grid x, then tokenWidth should be shifted by gridX - startX\n\n const left = currentTextWidth;\n const right = left + tokenWidth;\n\n const newTokenBox: TokenBox = {\n x1: left,\n y1: top,\n x2: right,\n y2: bottom,\n token,\n };\n\n tokenBoxes.push(newTokenBox);\n\n lastTokenEnd = end;\n currentTextWidth += tokenWidth;\n }\n\n return tokenBoxes;\n },\n { max: 10000 }\n );\n}\n\nexport default TextCellRenderer;\n"],"mappings":";;;AAAA;AACA,SAASA,WAAW,EAAEC,UAAU,QAAQ,kBAAkB;AAAC,OACpDC,YAAY;AAAA,SACVC,qBAAqB;AAAA,SAErBC,kBAAkB;AAAA,OACpBC,SAAS;AAAA,OACTC,YAAY;AAGnB,MAAMC,gBAAgB,SAASL,YAAY,CAAiC;EAAAM,YAAA;IAAA,SAAAC,SAAA;IAAAC,eAAA,4CAgMtCJ,YAAY,CAC9C,CACEK,aAAqB,EACrBC,MAAe,EAGfC,KAAa,EACbC,SAA6B,EAC7BC,UAAkB,EAClBC,OAAiC,KAClB;MACf,IAAMC,GAAG,GAAG,CAAC;MACb,IAAMC,MAAM,GAAGH,UAAU;MAEzB,IAAMI,UAAsB,GAAG,EAAE;;MAEjC;MACA,IAAIC,YAAY,GAAG,CAAC;MACpB;MACA,IAAIC,gBAAgB,GAAG,CAAC;MACxB;MACA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGV,MAAM,CAACW,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;QACzC,IAAME,KAAK,GAAGZ,MAAM,CAACU,CAAC,CAAC;QACvB,IAAM;UAAEG,KAAK;UAAEC;QAAI,CAAC,GAAGF,KAAK;QAC5B;QACA,IAAMG,KAAK,GACTD,GAAG,GAAGf,aAAa,CAACY,MAAM,GACtBZ,aAAa,CAACiB,SAAS,CAACH,KAAK,CAAC,GAC9BD,KAAK,CAACG,KAAK;;QAEjB;QACAN,gBAAgB,IAAIL,OAAO,CAACa,WAAW,CACrClB,aAAa,CAACiB,SAAS,CAACR,YAAY,EAAEK,KAAK,CAC7C,CAAC,CAACK,KAAK;QACP,IAAMC,UAAU,GAAGf,OAAO,CAACa,WAAW,CAACF,KAAK,CAAC,CAACG,KAAK;;QAEnD;;QAEA,IAAME,IAAI,GAAGX,gBAAgB;QAC7B,IAAMY,KAAK,GAAGD,IAAI,GAAGD,UAAU;QAE/B,IAAMG,WAAqB,GAAG;UAC5BC,EAAE,EAAEH,IAAI;UACRI,EAAE,EAAEnB,GAAG;UACPoB,EAAE,EAAEJ,KAAK;UACTK,EAAE,EAAEpB,MAAM;UACVM;QACF,CAAC;QAEDL,UAAU,CAACoB,IAAI,CAACL,WAAW,CAAC;QAE5Bd,YAAY,GAAGM,GAAG;QAClBL,gBAAgB,IAAIU,UAAU;MAChC;MAEA,OAAOZ,UAAU;IACnB,CAAC,EACD;MAAEqB,GAAG,EAAE;IAAM,CACf,CAAC;EAAA;EAzPDC,eAAeA,CACbzB,OAAiC,EACjC0B,KAAsB,EACtBC,MAAoB,EACpBC,GAAiB,EACX;IACN,IAAM;MAAEC,OAAO;MAAEC,KAAK;MAAEC;IAAM,CAAC,GAAGL,KAAK;IACvC,IAAM;MAAEM,UAAU;MAAEC,YAAY;MAAEC,SAAS;MAAEC,aAAa;MAAEC;IAAY,CAAC,GACvEP,OAAO;IACT,IAAMQ,aAAa,GAAGV,MAAM,KAAKS,WAAW;IAC5C,IAAM;MAAEE;IAAU,CAAC,GAAGP,KAAK;IAC3B,IAAMQ,SAAS,GAAGtD,UAAU,CAACkD,aAAa,EAAEP,GAAG,CAAC;IAChD,IAAMY,QAAQ,GAAGvD,UAAU,CAACiD,SAAS,EAAEN,GAAG,CAAC;IAC3C,IAAMa,WAAW,GAAGxD,UAAU,CAACgD,YAAY,EAAEN,MAAM,CAAC;IACpD,IAAMe,IAAI,GAAGZ,KAAK,CAACa,WAAW,CAACF,WAAW,EAAED,QAAQ,CAAC;IACrD,IAAMI,cAAc,GAAGd,KAAK,CAACe,qBAAqB,CAACJ,WAAW,EAAED,QAAQ,CAAC;IAEzE,IAAIE,IAAI,IAAIH,SAAS,GAAG,CAAC,EAAE;MAAA,IAAAO,eAAA;MACzB,IAAMC,SAAS,GAAGjB,KAAK,CAACkB,gBAAgB,CAACP,WAAW,EAAED,QAAQ,CAAC,IAAI,MAAM;MACzExC,OAAO,CAAC+C,SAAS,GAAGA,SAAS;MAE7B,IAAME,KAAK,GACTnB,KAAK,CAACoB,YAAY,CAACT,WAAW,EAAED,QAAQ,EAAET,KAAK,CAAC,IAAIO,SAAS;MAC/DtC,OAAO,CAACmD,SAAS,GAAGF,KAAK;MAEzBjD,OAAO,CAACoD,IAAI,CAAC,CAAC;MAEd,IAAM;QACJtC,KAAK,EAAEuC,SAAS;QAChBC,CAAC,EAAEC,KAAK;QACRC,CAAC,EAAEC;MACL,CAAC,GAAGpE,SAAS,CAACqE,oBAAoB,CAAChC,KAAK,EAAEC,MAAM,EAAEC,GAAG,CAAC;MAEtD,IAAM+B,SAAS,IAAAb,eAAA,GAAGd,UAAU,CAAC4B,GAAG,CAAC5D,OAAO,CAAC6D,IAAI,CAAC,cAAAf,eAAA,cAAAA,eAAA,GAAI1D,kBAAkB;MACpE,IAAMO,aAAa,GAAG,IAAI,CAACmE,wBAAwB,CACjD9D,OAAO,EACP0C,IAAI,EACJW,SAAS,EACTM,SAAS,EACTf,cACF,CAAC;MAED,IAAMhD,MAAM,GAAGkC,KAAK,CAACiC,aAAa,CAChCtB,WAAW,EACXD,QAAQ,EACR7C,aAAa,CAACY,MAChB,CAAC;MAED,IAAIZ,aAAa,EAAE;QACjB,IAAIqE,UAAU,GAAG,CAAC;QAClB,IAAIC,SAAS,GAAG,CAAC;QACjB,IAAIjD,IAAI,GAAGuC,KAAK;QAChB,IAAM;UAAEW;QAAyB,CAAC,GAAGlE,OAAO,CAACa,WAAW,CAAClB,aAAa,CAAC;QAEvE,OAAOsE,SAAS,GAAGtE,aAAa,CAACY,MAAM,EAAE;UAAA,IAAA4D,IAAA,EAAAC,UAAA;UACvC,IAAMC,SAAS,GAAGzE,MAAM,CAACoE,UAAU,CAAC;UACpC,IAAMxD,KAAK,GAAGyD,SAAS,MAAKI,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAE5D,KAAK,IAAG4D,SAAS,GAAG,IAAI;UAC/D,IAAMC,OAAO,IAAAH,IAAA,IAAAC,UAAA,GACX5D,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEE,GAAG,cAAA0D,UAAA,cAAAA,UAAA,GAAIC,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAE5D,KAAK,cAAA0D,IAAA,cAAAA,IAAA,GAAIxE,aAAa,CAACY,MAAM;UACxD,IAAMI,KAAK,GAAGhB,aAAa,CAACiB,SAAS,CAACqD,SAAS,EAAEK,OAAO,CAAC;UACzD,IAAM;YAAExD;UAAM,CAAC,GAAGd,OAAO,CAACa,WAAW,CAACF,KAAK,CAAC;UAC5C,IAAM4D,gBAAgB,GAAG5D,KAAK,CAAC6D,QAAQ,CAAC,GAAG,CAAC,GACxCxE,OAAO,CAACa,WAAW,CAACF,KAAK,CAACC,SAAS,CAAC,CAAC,EAAED,KAAK,CAACJ,MAAM,GAAG,CAAC,CAAC,CAAC,CAACO,KAAK,GAC/DA,KAAK;;UAET;UACA,IAAIN,KAAK,IAAI,IAAI,EAAE;YACjBR,OAAO,CAACmD,SAAS,GAAGpB,KAAK,CAAC0C,cAAc;YACxCzE,OAAO,CAAC0E,QAAQ,CAAC/D,KAAK,EAAEK,IAAI,EAAEyC,KAAK,CAAC;YACpCzD,OAAO,CAAC2E,QAAQ,CACd3D,IAAI,EACJyC,KAAK,GAAGS,wBAAwB,EAChCK,gBAAgB,EAChB,CACF,CAAC;UACH,CAAC,MAAM;YACLvE,OAAO,CAACmD,SAAS,GAAGF,KAAK;YACzBjD,OAAO,CAAC0E,QAAQ,CAAC/D,KAAK,EAAEK,IAAI,EAAEyC,KAAK,CAAC;UACtC;UAEAzC,IAAI,IAAIF,KAAK;UACbmD,SAAS,GAAGK,OAAO;UACnB,IAAI9D,KAAK,IAAI,IAAI,EAAEwD,UAAU,IAAI,CAAC;QACpC;MACF;MACAhE,OAAO,CAAC4E,OAAO,CAAC,CAAC;IACnB;IAEA,IACEvC,aAAa,IACblD,qBAAqB,CAAC2C,KAAK,CAAC,IAC5BA,KAAK,CAAC+C,iBAAiB,EACvB;MACA,IAAI,CAACC,qBAAqB,CAAC9E,OAAO,EAAE0B,KAAK,EAAEE,GAAG,CAAC;IACjD;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEmD,2BAA2BA,CACzBpD,MAAoB,EACpBC,GAAiB,EACjBF,KAAsB,EACV;IAAA,IAAAsD,gBAAA;IACZ,IAAM;MAAEnD,OAAO;MAAE7B,OAAO;MAAE8B,KAAK;MAAEC;IAAM,CAAC,GAAGL,KAAK;IAEhD,IAAI1B,OAAO,IAAI,IAAI,IAAI6B,OAAO,IAAI,IAAI,EAAE;MACtC,OAAO7C,WAAW;IACpB;IAEA,IAAM;MAAEkD,SAAS;MAAED;IAAa,CAAC,GAAGJ,OAAO;IAC3C,IAAMW,QAAQ,GAAGvD,UAAU,CAACiD,SAAS,EAAEN,GAAG,CAAC;IAC3C,IAAMa,WAAW,GAAGxD,UAAU,CAACgD,YAAY,EAAEN,MAAM,CAAC;IAEpD,IAAMe,IAAI,GAAGZ,KAAK,CAACa,WAAW,CAACF,WAAW,EAAED,QAAQ,CAAC;IACrD,IAAM;MACJ1B,KAAK,EAAEuC,SAAS;MAChBC,CAAC,EAAEC,KAAK;MACRC,CAAC,EAAEC;IACL,CAAC,GAAGpE,SAAS,CAACqE,oBAAoB,CAAChC,KAAK,EAAEC,MAAM,EAAEC,GAAG,CAAC;IAEtD,IAAM;MAAEI;IAAW,CAAC,GAAGH,OAAO;;IAE9B;IACA7B,OAAO,CAACoD,IAAI,CAAC,CAAC;IACd,IAAI,CAAC6B,gBAAgB,CAACjF,OAAO,EAAE0B,KAAK,CAAC;IAErC,IAAMiC,SAAS,IAAAqB,gBAAA,GAAGhD,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAE4B,GAAG,CAAC5D,OAAO,CAAC6D,IAAI,CAAC,cAAAmB,gBAAA,cAAAA,gBAAA,GAAI5F,kBAAkB;IACrE,IAAMwD,cAAc,GAAGd,KAAK,CAACe,qBAAqB,CAACJ,WAAW,EAAED,QAAQ,CAAC;IACzE,IAAM7C,aAAa,GAAG,IAAI,CAACmE,wBAAwB,CACjD9D,OAAO,EACP0C,IAAI,EACJW,SAAS,EACTM,SAAS,EACTf,cACF,CAAC;IAED,IAAM;MAAEsC,uBAAuB;MAAEhB;IAAyB,CAAC,GACzDlE,OAAO,CAACa,WAAW,CAAClB,aAAa,CAAC;IACpC,IAAMI,UAAU,GAAGmF,uBAAuB,GAAGhB,wBAAwB;IAErE,IAAMtE,MAAM,GAAGkC,KAAK,CAACiC,aAAa,CAChCtB,WAAW,EACXD,QAAQ,EACR7C,aAAa,CAACY,MAChB,CAAC;;IAED;IACA,IAAIX,MAAM,CAACW,MAAM,KAAK,CAAC,EAAE;MACvBP,OAAO,CAAC4E,OAAO,CAAC,CAAC;MACjB,OAAO5F,WAAW;IACpB;IAEA,IAAMmG,gBAAgB,GAAG,IAAI,CAACC,iCAAiC,CAC7DzF,aAAa,EACbC,MAAM,EACNmC,KAAK,CAAC8B,IAAI,EACV,QAAQ,EACR9D,UAAU,EACVC,OACF,CAAC,CAACqF,GAAG,CAACC,QAAQ,KAAK;MACjBnE,EAAE,EAAEmE,QAAQ,CAACnE,EAAE,GAAGoC,KAAK;MACvBnC,EAAE,EAAEkE,QAAQ,CAAClE,EAAE,IAAIqC,KAAK,GAAGyB,uBAAuB,CAAC;MACnD7D,EAAE,EAAEiE,QAAQ,CAACjE,EAAE,GAAGkC,KAAK;MACvBjC,EAAE,EAAEgE,QAAQ,CAAChE,EAAE,IAAImC,KAAK,GAAGyB,uBAAuB,CAAC;MACnD1E,KAAK,EAAE8E,QAAQ,CAAC9E;IAClB,CAAC,CAAC,CAAC;IAEHR,OAAO,CAAC4E,OAAO,CAAC,CAAC;IAEjB,OAAOO,gBAAgB;EACzB;EAEAF,gBAAgBA,CACdjF,OAAiC,EACjC0B,KAAsB,EAChB;IACN,IAAM;MAAEK;IAAM,CAAC,GAAGL,KAAK;IACvB1B,OAAO,CAAC6D,IAAI,GAAG9B,KAAK,CAAC8B,IAAI;IACzB7D,OAAO,CAACuF,YAAY,GAAG,QAAQ;IAC/BvF,OAAO,CAACwF,OAAO,GAAG,MAAM;EAC1B;;EAEA;AACF;AACA;AA4DA;;AAEA,eAAejG,gBAAgB"}
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { GridTheme as GridThemeType } from './GridTheme';
2
+ import { type GridTheme as GridThemeType } from './GridTheme';
3
3
  export type ThemeContextValue = Partial<GridThemeType>;
4
4
  export declare const ThemeContext: React.Context<ThemeContextValue>;
5
5
  export default ThemeContext;
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeContext.d.ts","sourceRoot":"","sources":["../src/ThemeContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,aAAa,CAAC;AAEzD,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAEvD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,iBAAiB,CACjC,CAAC;AAE1B,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"ThemeContext.d.ts","sourceRoot":"","sources":["../src/ThemeContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,SAAS,IAAI,aAAa,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAEvD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,iBAAiB,CACjC,CAAC;AAE1B,eAAe,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeContext.js","names":["React","ThemeContext","createContext"],"sources":["../src/ThemeContext.ts"],"sourcesContent":["import React from 'react';\nimport { GridTheme as GridThemeType } from './GridTheme';\n\nexport type ThemeContextValue = Partial<GridThemeType>;\n\nexport const ThemeContext: React.Context<ThemeContextValue> =\n React.createContext({});\n\nexport default ThemeContext;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAKzB,OAAO,IAAMC,YAA8C,gBACzDD,KAAK,CAACE,aAAa,CAAC,CAAC,CAAC,CAAC;AAEzB,eAAeD,YAAY"}
1
+ {"version":3,"file":"ThemeContext.js","names":["React","ThemeContext","createContext"],"sources":["../src/ThemeContext.ts"],"sourcesContent":["import React from 'react';\nimport { type GridTheme as GridThemeType } from './GridTheme';\n\nexport type ThemeContextValue = Partial<GridThemeType>;\n\nexport const ThemeContext: React.Context<ThemeContextValue> =\n React.createContext({});\n\nexport default ThemeContext;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAKzB,OAAO,IAAMC,YAA8C,gBACzDD,KAAK,CAACE,aAAa,CAAC,CAAC,CAAC,CAAC;AAEzB,eAAeD,YAAY"}
@@ -1,7 +1,7 @@
1
- import CellRenderer from './CellRenderer';
2
- import { VisibleIndex } from './GridMetrics';
3
- import { GridRenderState } from './GridRendererTypes';
4
- import { TokenBox } from './GridUtils';
1
+ import type CellRenderer from './CellRenderer';
2
+ import { type VisibleIndex } from './GridMetrics';
3
+ import { type GridRenderState } from './GridRendererTypes';
4
+ import { type TokenBox } from './GridUtils';
5
5
  export declare function isTokenBoxCellRenderer(cellRenderer: CellRenderer): cellRenderer is TokenBoxCellRenderer;
6
6
  interface TokenBoxCellRenderer extends CellRenderer {
7
7
  getTokenBoxesForVisibleCell: (column: VisibleIndex, row: VisibleIndex, state: GridRenderState) => TokenBox[];
@@ -1 +1 @@
1
- {"version":3,"file":"TokenBoxCellRenderer.d.ts","sourceRoot":"","sources":["../src/TokenBoxCellRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,YAAY,GACzB,YAAY,IAAI,oBAAoB,CAKtC;AAED,UAAU,oBAAqB,SAAQ,YAAY;IACjD,2BAA2B,EAAE,CAC3B,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,eAAe,KACnB,QAAQ,EAAE,CAAC;CACjB;AAED,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"TokenBoxCellRenderer.d.ts","sourceRoot":"","sources":["../src/TokenBoxCellRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,YAAY,GACzB,YAAY,IAAI,oBAAoB,CAKtC;AAED,UAAU,oBAAqB,SAAQ,YAAY;IACjD,2BAA2B,EAAE,CAC3B,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,eAAe,KACnB,QAAQ,EAAE,CAAC;CACjB;AAED,eAAe,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"TokenBoxCellRenderer.js","names":["isTokenBoxCellRenderer","cellRenderer","getTokenBoxesForVisibleCell","undefined"],"sources":["../src/TokenBoxCellRenderer.ts"],"sourcesContent":["import CellRenderer from './CellRenderer';\nimport { VisibleIndex } from './GridMetrics';\nimport { GridRenderState } from './GridRendererTypes';\nimport { TokenBox } from './GridUtils';\n\nexport function isTokenBoxCellRenderer(\n cellRenderer: CellRenderer\n): cellRenderer is TokenBoxCellRenderer {\n return (\n (cellRenderer as TokenBoxCellRenderer)?.getTokenBoxesForVisibleCell !==\n undefined\n );\n}\n\ninterface TokenBoxCellRenderer extends CellRenderer {\n getTokenBoxesForVisibleCell: (\n column: VisibleIndex,\n row: VisibleIndex,\n state: GridRenderState\n ) => TokenBox[];\n}\n\nexport default TokenBoxCellRenderer;\n"],"mappings":"AAKA,OAAO,SAASA,sBAAsBA,CACpCC,YAA0B,EACY;EACtC,OACE,CAACA,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAA2BC,2BAA2B,MACnEC,SAAS;AAEb"}
1
+ {"version":3,"file":"TokenBoxCellRenderer.js","names":["isTokenBoxCellRenderer","cellRenderer","getTokenBoxesForVisibleCell","undefined"],"sources":["../src/TokenBoxCellRenderer.ts"],"sourcesContent":["import type CellRenderer from './CellRenderer';\nimport { type VisibleIndex } from './GridMetrics';\nimport { type GridRenderState } from './GridRendererTypes';\nimport { type TokenBox } from './GridUtils';\n\nexport function isTokenBoxCellRenderer(\n cellRenderer: CellRenderer\n): cellRenderer is TokenBoxCellRenderer {\n return (\n (cellRenderer as TokenBoxCellRenderer)?.getTokenBoxesForVisibleCell !==\n undefined\n );\n}\n\ninterface TokenBoxCellRenderer extends CellRenderer {\n getTokenBoxesForVisibleCell: (\n column: VisibleIndex,\n row: VisibleIndex,\n state: GridRenderState\n ) => TokenBox[];\n}\n\nexport default TokenBoxCellRenderer;\n"],"mappings":"AAKA,OAAO,SAASA,sBAAsBA,CACpCC,YAA0B,EACY;EACtC,OACE,CAACA,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAA2BC,2BAA2B,MACnEC,SAAS;AAEb"}
@@ -1,6 +1,6 @@
1
- import Grid from '../Grid';
2
- import KeyHandler, { GridKeyboardEvent } from '../KeyHandler';
3
- import { EventHandlerResult } from '../EventHandlerResult';
1
+ import type Grid from '../Grid';
2
+ import KeyHandler, { type GridKeyboardEvent } from '../KeyHandler';
3
+ import { type EventHandlerResult } from '../EventHandlerResult';
4
4
  declare class EditKeyHandler extends KeyHandler {
5
5
  onDown(event: GridKeyboardEvent, grid: Grid): EventHandlerResult;
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"EditKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/EditKeyHandler.ts"],"names":[],"mappings":"AAEA,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,OAAO,UAAU,EAAE,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,cAAM,cAAe,SAAQ,UAAU;IACrC,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;CA0CjE;AAED,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"EditKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/EditKeyHandler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,OAAO,UAAU,EAAE,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEnE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,cAAM,cAAe,SAAQ,UAAU;IACrC,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;CA0CjE;AAED,eAAe,cAAc,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"EditKeyHandler.js","names":["GridUtils","GridRange","KeyHandler","isEditableGridModel","EditKeyHandler","onDown","event","grid","isModifierKeyDown","model","props","cursorColumn","cursorRow","state","isEditableRange","makeCell","column","row","key","length","startEditing","undefined","setValueForCell"],"sources":["../../src/key-handlers/EditKeyHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport GridUtils from '../GridUtils';\nimport 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"],"mappings":"AAAA;AAAA,OACOA,SAAS;AAAA,OAETC,SAAS;AAAA,OACTC,UAAU;AAAA,SACRC,mBAAmB;AAG5B,MAAMC,cAAc,SAASF,UAAU,CAAC;EACtCG,MAAMA,CAACC,KAAwB,EAAEC,IAAU,EAAsB;IAC/D,IAAIP,SAAS,CAACQ,iBAAiB,CAACF,KAAK,CAAC,EAAE;MACtC,OAAO,KAAK;IACd;IAEA,IAAM;MAAEG;IAAM,CAAC,GAAGF,IAAI,CAACG,KAAK;IAC5B,IAAM;MAAEC,YAAY;MAAEC;IAAU,CAAC,GAAGL,IAAI,CAACM,KAAK;IAC9C,IACEF,YAAY,IAAI,IAAI,IACpBC,SAAS,IAAI,IAAI,IACjB,CAACT,mBAAmB,CAACM,KAAK,CAAC,IAC3B,CAACA,KAAK,CAACK,eAAe,CAACb,SAAS,CAACc,QAAQ,CAACJ,YAAY,EAAEC,SAAS,CAAC,CAAC,EACnE;MACA,OAAO,KAAK;IACd;IACA,IAAMI,MAAqB,GAAGL,YAAY;IAC1C,IAAMM,GAAkB,GAAGL,SAAS;IACpC,IAAII,MAAM,IAAI,IAAI,IAAIC,GAAG,IAAI,IAAI,EAAE;MACjC,OAAO,KAAK;IACd;IAEA,IAAIX,KAAK,CAACY,GAAG,CAACC,MAAM,KAAK,CAAC,EAAE;MAC1BZ,IAAI,CAACa,YAAY,CAACJ,MAAM,EAAEC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAEX,KAAK,CAACY,GAAG,CAAC;MACvD,OAAO,IAAI;IACb;IAEA,IAAIZ,KAAK,CAACY,GAAG,KAAK,IAAI,EAAE;MACtBX,IAAI,CAACa,YAAY,CAACJ,MAAM,EAAEC,GAAG,CAAC;MAC9B,OAAO,IAAI;IACb;IAEA,IAAIX,KAAK,CAACY,GAAG,KAAK,WAAW,EAAE;MAC7BX,IAAI,CAACa,YAAY,CAACJ,MAAM,EAAEC,GAAG,EAAE,IAAI,EAAEI,SAAS,EAAE,EAAE,CAAC;MACnD,OAAO,IAAI;IACb;IAEA,IAAIf,KAAK,CAACY,GAAG,KAAK,QAAQ,EAAE;MAC1BX,IAAI,CAACe,eAAe,CAACN,MAAM,EAAEC,GAAG,EAAE,EAAE,CAAC;MACrC,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;AACF;AAEA,eAAeb,cAAc"}
1
+ {"version":3,"file":"EditKeyHandler.js","names":["GridUtils","GridRange","KeyHandler","isEditableGridModel","EditKeyHandler","onDown","event","grid","isModifierKeyDown","model","props","cursorColumn","cursorRow","state","isEditableRange","makeCell","column","row","key","length","startEditing","undefined","setValueForCell"],"sources":["../../src/key-handlers/EditKeyHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport GridUtils from '../GridUtils';\nimport type Grid from '../Grid';\nimport GridRange from '../GridRange';\nimport KeyHandler, { type GridKeyboardEvent } from '../KeyHandler';\nimport { isEditableGridModel } from '../EditableGridModel';\nimport { type EventHandlerResult } from '../EventHandlerResult';\n\nclass EditKeyHandler extends KeyHandler {\n onDown(event: GridKeyboardEvent, grid: Grid): EventHandlerResult {\n if (GridUtils.isModifierKeyDown(event)) {\n return false;\n }\n\n const { model } = grid.props;\n const { cursorColumn, cursorRow } = grid.state;\n if (\n cursorColumn == null ||\n cursorRow == null ||\n !isEditableGridModel(model) ||\n !model.isEditableRange(GridRange.makeCell(cursorColumn, cursorRow))\n ) {\n return false;\n }\n const column: number | null = cursorColumn;\n const row: number | null = cursorRow;\n if (column == null || row == null) {\n return false;\n }\n\n if (event.key.length === 1) {\n grid.startEditing(column, row, true, [1, 1], event.key);\n return true;\n }\n\n if (event.key === 'F2') {\n grid.startEditing(column, row);\n return true;\n }\n\n if (event.key === 'Backspace') {\n grid.startEditing(column, row, true, undefined, '');\n return true;\n }\n\n if (event.key === 'Delete') {\n grid.setValueForCell(column, row, '');\n return true;\n }\n return false;\n }\n}\n\nexport default EditKeyHandler;\n"],"mappings":"AAAA;AAAA,OACOA,SAAS;AAAA,OAETC,SAAS;AAAA,OACTC,UAAU;AAAA,SACRC,mBAAmB;AAG5B,MAAMC,cAAc,SAASF,UAAU,CAAC;EACtCG,MAAMA,CAACC,KAAwB,EAAEC,IAAU,EAAsB;IAC/D,IAAIP,SAAS,CAACQ,iBAAiB,CAACF,KAAK,CAAC,EAAE;MACtC,OAAO,KAAK;IACd;IAEA,IAAM;MAAEG;IAAM,CAAC,GAAGF,IAAI,CAACG,KAAK;IAC5B,IAAM;MAAEC,YAAY;MAAEC;IAAU,CAAC,GAAGL,IAAI,CAACM,KAAK;IAC9C,IACEF,YAAY,IAAI,IAAI,IACpBC,SAAS,IAAI,IAAI,IACjB,CAACT,mBAAmB,CAACM,KAAK,CAAC,IAC3B,CAACA,KAAK,CAACK,eAAe,CAACb,SAAS,CAACc,QAAQ,CAACJ,YAAY,EAAEC,SAAS,CAAC,CAAC,EACnE;MACA,OAAO,KAAK;IACd;IACA,IAAMI,MAAqB,GAAGL,YAAY;IAC1C,IAAMM,GAAkB,GAAGL,SAAS;IACpC,IAAII,MAAM,IAAI,IAAI,IAAIC,GAAG,IAAI,IAAI,EAAE;MACjC,OAAO,KAAK;IACd;IAEA,IAAIX,KAAK,CAACY,GAAG,CAACC,MAAM,KAAK,CAAC,EAAE;MAC1BZ,IAAI,CAACa,YAAY,CAACJ,MAAM,EAAEC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAEX,KAAK,CAACY,GAAG,CAAC;MACvD,OAAO,IAAI;IACb;IAEA,IAAIZ,KAAK,CAACY,GAAG,KAAK,IAAI,EAAE;MACtBX,IAAI,CAACa,YAAY,CAACJ,MAAM,EAAEC,GAAG,CAAC;MAC9B,OAAO,IAAI;IACb;IAEA,IAAIX,KAAK,CAACY,GAAG,KAAK,WAAW,EAAE;MAC7BX,IAAI,CAACa,YAAY,CAACJ,MAAM,EAAEC,GAAG,EAAE,IAAI,EAAEI,SAAS,EAAE,EAAE,CAAC;MACnD,OAAO,IAAI;IACb;IAEA,IAAIf,KAAK,CAACY,GAAG,KAAK,QAAQ,EAAE;MAC1BX,IAAI,CAACe,eAAe,CAACN,MAAM,EAAEC,GAAG,EAAE,EAAE,CAAC;MACrC,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;AACF;AAEA,eAAeb,cAAc"}
@@ -1,6 +1,6 @@
1
- import { EventHandlerResult } from '../EventHandlerResult';
2
- import Grid from '../Grid';
3
- import KeyHandler, { GridKeyboardEvent } from '../KeyHandler';
1
+ import { type EventHandlerResult } from '../EventHandlerResult';
2
+ import type Grid from '../Grid';
3
+ import KeyHandler, { type GridKeyboardEvent } from '../KeyHandler';
4
4
  /**
5
5
  * Parse out data from an HTML table. Currently does not support colspan/rowspan
6
6
  * @param table HTML Table
@@ -1 +1 @@
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,CAmC5B;AAED;;GAEG;AACH,cAAM,eAAgB,SAAQ,UAAU;IACtC,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;CA0CjE;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"PasteKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/PasteKeyHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,OAAO,UAAU,EAAE,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEnE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,EAAE,EAAE,CAevE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,EAAE,CAY5E;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,GACnB,MAAM,GAAG,MAAM,EAAE,EAAE,GAAG,IAAI,CAmC5B;AAED;;GAEG;AACH,cAAM,eAAgB,SAAQ,UAAU;IACtC,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;CA0CjE;AAED,eAAe,eAAe,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"PasteKeyHandler.js","names":["GridUtils","KeyHandler","parseValueFromTable","table","data","rows","querySelectorAll","r","length","row","cells","rowData","c","_cell$textContent$tri","_cell$textContent","cell","push","textContent","trim","parseValueFromNodes","nodes","result","forEach","node","_node$textContent","text","split","parseValueFromElement","element","_element$textContent$","_element$textContent","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"],"sources":["../../src/key-handlers/PasteKeyHandler.ts"],"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 &&\n (childNodes[0].textContent == null ||\n !childNodes[0].textContent.includes('\\t'))))\n ) {\n // When Chrome pastes a single row, it gets split into multiple child nodes\n // If we check the first child node and it doesn't have a tab character, but the full element text content does, then\n // just parse the text out separated by the tab chars\n return text.split('\\n').map(row => row.split('\\t'));\n }\n if (childNodes.length > 1 || hasFirefoxTab) {\n return parseValueFromNodes(element.childNodes);\n }\n // If there's no tabs or no multiple rows, than just treat it as one value\n return text;\n }\n return null;\n}\n\n/**\n * Handles the paste key combination\n */\nclass PasteKeyHandler extends KeyHandler {\n onDown(event: GridKeyboardEvent, grid: Grid): EventHandlerResult {\n switch (event.key) {\n case 'v':\n if (GridUtils.isModifierKeyDown(event)) {\n // Chrome doesn't allow the paste event on canvas elements\n // Instead, we capture the ctrl+v keydown, then do this to capture the input\n const dummyInput = document.createElement('div');\n document.body.appendChild(dummyInput);\n dummyInput.setAttribute('contenteditable', 'true');\n\n // Give it invisible styling\n dummyInput.setAttribute(\n 'style',\n 'clip-path: \"inset(50%)\"; height: 1px; width: 1px; margin: -1px; overflow: hidden; padding 0; position: absolute;'\n );\n\n const listener = (): void => {\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"],"mappings":"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"}
1
+ {"version":3,"file":"PasteKeyHandler.js","names":["GridUtils","KeyHandler","parseValueFromTable","table","data","rows","querySelectorAll","r","length","row","cells","rowData","c","_cell$textContent$tri","_cell$textContent","cell","push","textContent","trim","parseValueFromNodes","nodes","result","forEach","node","_node$textContent","text","split","parseValueFromElement","element","_element$textContent$","_element$textContent","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"],"sources":["../../src/key-handlers/PasteKeyHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport { type EventHandlerResult } from '../EventHandlerResult';\nimport type Grid from '../Grid';\nimport GridUtils from '../GridUtils';\nimport KeyHandler, { type GridKeyboardEvent } from '../KeyHandler';\n\n/**\n * Parse out data from an HTML table. Currently does not support colspan/rowspan\n * @param table HTML Table\n * @returns A two dimensional array with the data found in the table\n */\nexport function parseValueFromTable(table: HTMLTableElement): string[][] {\n const data = [];\n const rows = table.querySelectorAll('tr');\n for (let r = 0; r < rows.length; r += 1) {\n const row = rows[r];\n const cells = row.querySelectorAll('td');\n const rowData = [];\n for (let c = 0; c < cells.length; c += 1) {\n const cell = cells[c];\n rowData.push(cell.textContent?.trim() ?? '');\n }\n data.push(rowData);\n }\n\n return data;\n}\n\n/**\n * Parses out a table of data from HTML elements. Treats each element as one rows.\n * Filters out blank rows.\n * @param rows The elements to parse out\n * @returns A string table of data\n */\nexport function parseValueFromNodes(nodes: NodeListOf<ChildNode>): string[][] {\n const result = [] as string[][];\n nodes.forEach(node => {\n const text = node.textContent ?? '';\n if (text.length > 0) {\n // When Chrome pastes a table from text, it preserves the tab characters\n // In Firefox, it breaks it into a combination of non-breaking spaces and spaces\n result.push(text.split(/\\t|\\u00a0\\u00a0 \\u00a0/));\n }\n });\n\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 &&\n (childNodes[0].textContent == null ||\n !childNodes[0].textContent.includes('\\t'))))\n ) {\n // When Chrome pastes a single row, it gets split into multiple child nodes\n // If we check the first child node and it doesn't have a tab character, but the full element text content does, then\n // just parse the text out separated by the tab chars\n return text.split('\\n').map(row => row.split('\\t'));\n }\n if (childNodes.length > 1 || hasFirefoxTab) {\n return parseValueFromNodes(element.childNodes);\n }\n // If there's no tabs or no multiple rows, than just treat it as one value\n return text;\n }\n return null;\n}\n\n/**\n * Handles the paste key combination\n */\nclass PasteKeyHandler extends KeyHandler {\n onDown(event: GridKeyboardEvent, grid: Grid): EventHandlerResult {\n switch (event.key) {\n case 'v':\n if (GridUtils.isModifierKeyDown(event)) {\n // Chrome doesn't allow the paste event on canvas elements\n // Instead, we capture the ctrl+v keydown, then do this to capture the input\n const dummyInput = document.createElement('div');\n document.body.appendChild(dummyInput);\n dummyInput.setAttribute('contenteditable', 'true');\n\n // Give it invisible styling\n dummyInput.setAttribute(\n 'style',\n 'clip-path: \"inset(50%)\"; height: 1px; width: 1px; margin: -1px; overflow: hidden; padding 0; position: absolute;'\n );\n\n const listener = (): void => {\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"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { EventHandlerResult } from '../EventHandlerResult';
2
- import Grid from '../Grid';
3
- import KeyHandler, { GridKeyboardEvent } from '../KeyHandler';
1
+ import { type EventHandlerResult } from '../EventHandlerResult';
2
+ import type Grid from '../Grid';
3
+ import KeyHandler, { type GridKeyboardEvent } from '../KeyHandler';
4
4
  declare class SelectionKeyHandler extends KeyHandler {
5
5
  onDown(event: GridKeyboardEvent, grid: Grid): EventHandlerResult;
6
6
  handleArrowMove(deltaColumn: number, deltaRow: number, event: GridKeyboardEvent, grid: Grid): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"SelectionKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/SelectionKeyHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,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,kBAAkB;IAuHhE,eAAe,CACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,IAAI,GACT,OAAO;IAuEV,YAAY,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;IAwCvD,cAAc,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;CAyC1D;AAED,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"SelectionKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/SelectionKeyHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAGhC,OAAO,UAAU,EAAE,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEnE,cAAM,mBAAoB,SAAQ,UAAU;IAC1C,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;IAuHhE,eAAe,CACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,IAAI,GACT,OAAO;IAuEV,YAAY,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;IAwCvD,cAAc,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;CAyC1D;AAED,eAAe,mBAAmB,CAAC"}