@deephaven/iris-grid 0.43.0 → 0.44.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 (282) hide show
  1. package/dist/AdvancedFilterCreator.css +106 -0
  2. package/dist/AdvancedFilterCreator.css.map +1 -0
  3. package/dist/AdvancedFilterCreator.js +541 -0
  4. package/dist/AdvancedFilterCreator.js.map +1 -0
  5. package/dist/AdvancedFilterCreatorFilterItem.css +9 -0
  6. package/dist/AdvancedFilterCreatorFilterItem.css.map +1 -0
  7. package/dist/AdvancedFilterCreatorFilterItem.js +184 -0
  8. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -0
  9. package/dist/AdvancedFilterCreatorSelectValue.css +50 -0
  10. package/dist/AdvancedFilterCreatorSelectValue.css.map +1 -0
  11. package/dist/AdvancedFilterCreatorSelectValue.js +301 -0
  12. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -0
  13. package/dist/AdvancedFilterCreatorSelectValueList.js +272 -0
  14. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -0
  15. package/dist/ColumnHeaderGroup.js +61 -0
  16. package/dist/ColumnHeaderGroup.js.map +1 -0
  17. package/dist/ColumnStatistics.css +76 -0
  18. package/dist/ColumnStatistics.css.map +1 -0
  19. package/dist/ColumnStatistics.js +202 -0
  20. package/dist/ColumnStatistics.js.map +1 -0
  21. package/dist/CommonTypes.js +2 -0
  22. package/dist/CommonTypes.js.map +1 -0
  23. package/dist/CrossColumnSearch.css +35 -0
  24. package/dist/CrossColumnSearch.css.map +1 -0
  25. package/dist/CrossColumnSearch.js +199 -0
  26. package/dist/CrossColumnSearch.js.map +1 -0
  27. package/dist/FilterInputField.css +56 -0
  28. package/dist/FilterInputField.css.map +1 -0
  29. package/dist/FilterInputField.js +232 -0
  30. package/dist/FilterInputField.js.map +1 -0
  31. package/dist/GotoRow.css +45 -0
  32. package/dist/GotoRow.css.map +1 -0
  33. package/dist/GotoRow.js +298 -0
  34. package/dist/GotoRow.js.map +1 -0
  35. package/dist/IrisGrid.css +359 -0
  36. package/dist/IrisGrid.css.map +1 -0
  37. package/dist/IrisGrid.js +3651 -0
  38. package/dist/IrisGrid.js.map +1 -0
  39. package/dist/IrisGridBottomBar.css +85 -0
  40. package/dist/IrisGridBottomBar.css.map +1 -0
  41. package/dist/IrisGridBottomBar.js +36 -0
  42. package/dist/IrisGridBottomBar.js.map +1 -0
  43. package/dist/IrisGridCellOverflowModal.css +17 -0
  44. package/dist/IrisGridCellOverflowModal.css.map +1 -0
  45. package/dist/IrisGridCellOverflowModal.js +157 -0
  46. package/dist/IrisGridCellOverflowModal.js.map +1 -0
  47. package/dist/IrisGridCellRendererUtils.js +20 -0
  48. package/dist/IrisGridCellRendererUtils.js.map +1 -0
  49. package/dist/IrisGridCopyHandler.css +64 -0
  50. package/dist/IrisGridCopyHandler.css.map +1 -0
  51. package/dist/IrisGridCopyHandler.js +331 -0
  52. package/dist/IrisGridCopyHandler.js.map +1 -0
  53. package/dist/IrisGridDataBarCellRenderer.js +10 -0
  54. package/dist/IrisGridDataBarCellRenderer.js.map +1 -0
  55. package/dist/IrisGridIcons.js +25 -0
  56. package/dist/IrisGridIcons.js.map +1 -0
  57. package/dist/IrisGridMetricCalculator.js +33 -0
  58. package/dist/IrisGridMetricCalculator.js.map +1 -0
  59. package/dist/IrisGridModel.js +263 -0
  60. package/dist/IrisGridModel.js.map +1 -0
  61. package/dist/IrisGridModelFactory.js +27 -0
  62. package/dist/IrisGridModelFactory.js.map +1 -0
  63. package/dist/IrisGridModelUpdater.js +96 -0
  64. package/dist/IrisGridModelUpdater.js.map +1 -0
  65. package/dist/IrisGridPartitionSelector.css +48 -0
  66. package/dist/IrisGridPartitionSelector.css.map +1 -0
  67. package/dist/IrisGridPartitionSelector.js +198 -0
  68. package/dist/IrisGridPartitionSelector.js.map +1 -0
  69. package/dist/IrisGridProxyModel.js +530 -0
  70. package/dist/IrisGridProxyModel.js.map +1 -0
  71. package/dist/IrisGridRenderer.js +779 -0
  72. package/dist/IrisGridRenderer.js.map +1 -0
  73. package/dist/IrisGridShortcuts.js +59 -0
  74. package/dist/IrisGridShortcuts.js.map +1 -0
  75. package/dist/IrisGridTableModel.js +273 -0
  76. package/dist/IrisGridTableModel.js.map +1 -0
  77. package/dist/IrisGridTableModelTemplate.js +1589 -0
  78. package/dist/IrisGridTableModelTemplate.js.map +1 -0
  79. package/dist/IrisGridTestUtils.js +121 -0
  80. package/dist/IrisGridTestUtils.js.map +1 -0
  81. package/dist/IrisGridTextCellRenderer.js +139 -0
  82. package/dist/IrisGridTextCellRenderer.js.map +1 -0
  83. package/dist/IrisGridTheme.js +96 -0
  84. package/dist/IrisGridTheme.js.map +1 -0
  85. package/dist/IrisGridTheme.module.css +69 -0
  86. package/dist/IrisGridTheme.module.css.map +1 -0
  87. package/dist/IrisGridTreeTableModel.js +145 -0
  88. package/dist/IrisGridTreeTableModel.js.map +1 -0
  89. package/dist/IrisGridUtils.js +1279 -0
  90. package/dist/IrisGridUtils.js.map +1 -0
  91. package/dist/MissingKeyError.js +15 -0
  92. package/dist/MissingKeyError.js.map +1 -0
  93. package/dist/PartitionSelectorSearch.css +22 -0
  94. package/dist/PartitionSelectorSearch.css.map +1 -0
  95. package/dist/PartitionSelectorSearch.js +317 -0
  96. package/dist/PartitionSelectorSearch.js.map +1 -0
  97. package/dist/PendingDataBottomBar.css +13 -0
  98. package/dist/PendingDataBottomBar.css.map +1 -0
  99. package/dist/PendingDataBottomBar.js +98 -0
  100. package/dist/PendingDataBottomBar.js.map +1 -0
  101. package/dist/TableViewportUpdater.js +156 -0
  102. package/dist/TableViewportUpdater.js.map +1 -0
  103. package/dist/ToastBottomBar.js +42 -0
  104. package/dist/ToastBottomBar.js.map +1 -0
  105. package/dist/TreeTableViewportUpdater.js +96 -0
  106. package/dist/TreeTableViewportUpdater.js.map +1 -0
  107. package/dist/declaration.d.js +2 -0
  108. package/dist/declaration.d.js.map +1 -0
  109. package/dist/format-context-menus/CustomFormatAction.css +25 -0
  110. package/dist/format-context-menus/CustomFormatAction.css.map +1 -0
  111. package/dist/format-context-menus/CustomFormatAction.js +132 -0
  112. package/dist/format-context-menus/CustomFormatAction.js.map +1 -0
  113. package/dist/format-context-menus/DateTimeFormatContextMenu.js +53 -0
  114. package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +1 -0
  115. package/dist/format-context-menus/DecimalFormatContextMenu.js +59 -0
  116. package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -0
  117. package/dist/format-context-menus/FormatContextMenuUtils.js +63 -0
  118. package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -0
  119. package/dist/format-context-menus/IntegerFormatContextMenu.js +43 -0
  120. package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -0
  121. package/dist/format-context-menus/index.js +4 -0
  122. package/dist/format-context-menus/index.js.map +1 -0
  123. package/dist/index.js +24 -0
  124. package/dist/index.js.map +1 -0
  125. package/dist/key-handlers/ClearFilterKeyHandler.js +21 -0
  126. package/dist/key-handlers/ClearFilterKeyHandler.js.map +1 -0
  127. package/dist/key-handlers/CopyKeyHandler.js +31 -0
  128. package/dist/key-handlers/CopyKeyHandler.js.map +1 -0
  129. package/dist/key-handlers/ReverseKeyHandler.js +32 -0
  130. package/dist/key-handlers/ReverseKeyHandler.js.map +1 -0
  131. package/dist/key-handlers/index.js +4 -0
  132. package/dist/key-handlers/index.js.map +1 -0
  133. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +175 -0
  134. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -0
  135. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +139 -0
  136. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -0
  137. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +83 -0
  138. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -0
  139. package/dist/mousehandlers/IrisGridContextMenuHandler.css +19 -0
  140. package/dist/mousehandlers/IrisGridContextMenuHandler.css.map +1 -0
  141. package/dist/mousehandlers/IrisGridContextMenuHandler.js +1220 -0
  142. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -0
  143. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +28 -0
  144. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -0
  145. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +80 -0
  146. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -0
  147. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js +126 -0
  148. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js.map +1 -0
  149. package/dist/mousehandlers/IrisGridSortMouseHandler.js +46 -0
  150. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -0
  151. package/dist/mousehandlers/IrisGridTokenMouseHandler.js +151 -0
  152. package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +1 -0
  153. package/dist/mousehandlers/PendingMouseHandler.js +39 -0
  154. package/dist/mousehandlers/PendingMouseHandler.js.map +1 -0
  155. package/dist/mousehandlers/index.js +11 -0
  156. package/dist/mousehandlers/index.js.map +1 -0
  157. package/dist/sidebar/AdvancedSettings.js +6 -0
  158. package/dist/sidebar/AdvancedSettings.js.map +1 -0
  159. package/dist/sidebar/AdvancedSettingsMenu.js +29 -0
  160. package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -0
  161. package/dist/sidebar/AdvancedSettingsType.js +7 -0
  162. package/dist/sidebar/AdvancedSettingsType.js.map +1 -0
  163. package/dist/sidebar/ChartBuilder.css +56 -0
  164. package/dist/sidebar/ChartBuilder.css.map +1 -0
  165. package/dist/sidebar/ChartBuilder.js +443 -0
  166. package/dist/sidebar/ChartBuilder.js.map +1 -0
  167. package/dist/sidebar/CustomColumnBuilder.css +58 -0
  168. package/dist/sidebar/CustomColumnBuilder.css.map +1 -0
  169. package/dist/sidebar/CustomColumnBuilder.js +384 -0
  170. package/dist/sidebar/CustomColumnBuilder.js.map +1 -0
  171. package/dist/sidebar/CustomColumnInput.d.ts.map +1 -1
  172. package/dist/sidebar/CustomColumnInput.js +91 -0
  173. package/dist/sidebar/CustomColumnInput.js.map +1 -0
  174. package/dist/sidebar/InputEditor.css +35 -0
  175. package/dist/sidebar/InputEditor.css.map +1 -0
  176. package/dist/sidebar/InputEditor.d.ts +4 -2
  177. package/dist/sidebar/InputEditor.d.ts.map +1 -1
  178. package/dist/sidebar/InputEditor.js +180 -0
  179. package/dist/sidebar/InputEditor.js.map +1 -0
  180. package/dist/sidebar/OptionType.js +19 -0
  181. package/dist/sidebar/OptionType.js.map +1 -0
  182. package/dist/sidebar/RollupRows.css +120 -0
  183. package/dist/sidebar/RollupRows.css.map +1 -0
  184. package/dist/sidebar/RollupRows.js +519 -0
  185. package/dist/sidebar/RollupRows.js.map +1 -0
  186. package/dist/sidebar/SelectDistinctBuilder.css +41 -0
  187. package/dist/sidebar/SelectDistinctBuilder.css.map +1 -0
  188. package/dist/sidebar/SelectDistinctBuilder.js +155 -0
  189. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -0
  190. package/dist/sidebar/TableCsvExporter.css +32 -0
  191. package/dist/sidebar/TableCsvExporter.css.map +1 -0
  192. package/dist/sidebar/TableCsvExporter.js +399 -0
  193. package/dist/sidebar/TableCsvExporter.js.map +1 -0
  194. package/dist/sidebar/TableSaver.js +487 -0
  195. package/dist/sidebar/TableSaver.js.map +1 -0
  196. package/dist/sidebar/aggregations/AggregationEdit.css +61 -0
  197. package/dist/sidebar/aggregations/AggregationEdit.css.map +1 -0
  198. package/dist/sidebar/aggregations/AggregationEdit.js +155 -0
  199. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -0
  200. package/dist/sidebar/aggregations/AggregationOperation.js +19 -0
  201. package/dist/sidebar/aggregations/AggregationOperation.js.map +1 -0
  202. package/dist/sidebar/aggregations/AggregationUtils.js +59 -0
  203. package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -0
  204. package/dist/sidebar/aggregations/Aggregations.css +43 -0
  205. package/dist/sidebar/aggregations/Aggregations.css.map +1 -0
  206. package/dist/sidebar/aggregations/Aggregations.js +178 -0
  207. package/dist/sidebar/aggregations/Aggregations.js.map +1 -0
  208. package/dist/sidebar/aggregations/index.js +2 -0
  209. package/dist/sidebar/aggregations/index.js.map +1 -0
  210. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +123 -0
  211. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -0
  212. package/dist/sidebar/conditional-formatting/ConditionEditor.js +243 -0
  213. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -0
  214. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.css +22 -0
  215. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.css.map +1 -0
  216. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +109 -0
  217. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -0
  218. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js +18 -0
  219. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -0
  220. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.css +57 -0
  221. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.css.map +1 -0
  222. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +150 -0
  223. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -0
  224. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +635 -0
  225. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -0
  226. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +122 -0
  227. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -0
  228. package/dist/sidebar/conditional-formatting/StyleEditor.css +55 -0
  229. package/dist/sidebar/conditional-formatting/StyleEditor.css.map +1 -0
  230. package/dist/sidebar/conditional-formatting/StyleEditor.js +150 -0
  231. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -0
  232. package/dist/sidebar/icons/BarIcon.js +24 -0
  233. package/dist/sidebar/icons/BarIcon.js.map +1 -0
  234. package/dist/sidebar/icons/FormatColumnWhereIcon.js +42 -0
  235. package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +1 -0
  236. package/dist/sidebar/icons/FormatRowWhereIcon.js +36 -0
  237. package/dist/sidebar/icons/FormatRowWhereIcon.js.map +1 -0
  238. package/dist/sidebar/icons/HistogramIcon.js +24 -0
  239. package/dist/sidebar/icons/HistogramIcon.js.map +1 -0
  240. package/dist/sidebar/icons/LineIcon.js +27 -0
  241. package/dist/sidebar/icons/LineIcon.js.map +1 -0
  242. package/dist/sidebar/icons/PieIcon.js +24 -0
  243. package/dist/sidebar/icons/PieIcon.js.map +1 -0
  244. package/dist/sidebar/icons/ScatterIcon.js +74 -0
  245. package/dist/sidebar/icons/ScatterIcon.js.map +1 -0
  246. package/dist/sidebar/icons/index.js +8 -0
  247. package/dist/sidebar/icons/index.js.map +1 -0
  248. package/dist/sidebar/index.d.ts +1 -0
  249. package/dist/sidebar/index.d.ts.map +1 -1
  250. package/dist/sidebar/index.js +19 -0
  251. package/dist/sidebar/index.js.map +1 -0
  252. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.css +68 -0
  253. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.css.map +1 -0
  254. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +964 -0
  255. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -0
  256. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js +132 -0
  257. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -0
  258. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.css +29 -0
  259. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.css.map +1 -0
  260. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js +188 -0
  261. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -0
  262. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +81 -0
  263. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -0
  264. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js +30 -0
  265. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +1 -0
  266. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +158 -0
  267. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -0
  268. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js +146 -0
  269. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js.map +1 -0
  270. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +59 -0
  271. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -0
  272. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css +139 -0
  273. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css.map +1 -0
  274. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +44 -0
  275. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -0
  276. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js +129 -0
  277. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -0
  278. package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.js +4 -0
  279. package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.js.map +1 -0
  280. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +261 -0
  281. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -0
  282. package/package.json +15 -15
@@ -0,0 +1,779 @@
1
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
5
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
6
+ /* eslint react/destructuring-assignment: "off" */
7
+ /* eslint class-methods-use-this: "off" */
8
+ /* eslint no-param-reassign: "off" */
9
+ import { DEFAULT_FONT_WIDTH, GridRenderer, GridUtils } from '@deephaven/grid';
10
+ import { TableUtils } from '@deephaven/jsapi-utils';
11
+ import { assertNotNull, getOrThrow } from '@deephaven/utils';
12
+ import IrisGridTextCellRenderer from "./IrisGridTextCellRenderer.js";
13
+ import IrisGridDataBarCellRenderer from "./IrisGridDataBarCellRenderer.js";
14
+ import { getIcon } from "./IrisGridIcons.js";
15
+ var ICON_NAMES = Object.freeze({
16
+ SORT_UP: 'sortUp',
17
+ SORT_DOWN: 'sortDown',
18
+ CARET_DOWN: 'caretDown',
19
+ CARET_RIGHT: 'caretRight',
20
+ CELL_OVERFLOW: 'cellOverflow'
21
+ });
22
+ var EXPAND_ICON_SIZE = 10;
23
+ /**
24
+ * Handles rendering some of the Iris specific features, such as sorting icons, sort bar display
25
+ * */
26
+ class IrisGridRenderer extends GridRenderer {
27
+ constructor() {
28
+ super(...arguments);
29
+ _defineProperty(this, "textCellRenderer", new IrisGridTextCellRenderer());
30
+ _defineProperty(this, "dataBarCellRenderer", new IrisGridDataBarCellRenderer());
31
+ }
32
+ static isFilterValid(advancedFilter, quickFilter) {
33
+ var isAdvancedFilterValid = advancedFilter == null || advancedFilter.filter != null;
34
+ var isQuickFilterValid = quickFilter == null || quickFilter.filter != null;
35
+ return isAdvancedFilterValid && isQuickFilterValid;
36
+ }
37
+ getSortIcon(sort) {
38
+ if (!sort) {
39
+ return null;
40
+ }
41
+ if (sort.direction === TableUtils.sortDirection.ascending) {
42
+ return getIcon(ICON_NAMES.SORT_UP);
43
+ }
44
+ if (sort.direction === TableUtils.sortDirection.descending) {
45
+ return getIcon(ICON_NAMES.SORT_DOWN);
46
+ }
47
+ return null;
48
+ }
49
+ drawCanvas(state) {
50
+ super.drawCanvas(state);
51
+ this.drawScrim(state);
52
+ }
53
+ drawGrid(context, state) {
54
+ super.drawGrid(context, state);
55
+ this.drawCellOverflowButton(state);
56
+ }
57
+ drawGridLines(context, state) {
58
+ super.drawGridLines(context, state);
59
+ this.drawGroupedColumnLine(context, state);
60
+ this.drawPendingRowLine(context, state);
61
+ }
62
+ drawCellContent(context, state, column, row) {
63
+ var {
64
+ metrics,
65
+ model
66
+ } = state;
67
+ var {
68
+ modelColumns,
69
+ modelRows
70
+ } = metrics;
71
+ var modelColumn = modelColumns.get(column);
72
+ var modelRow = getOrThrow(modelRows, row);
73
+ if (modelColumn === undefined) {
74
+ return;
75
+ }
76
+ var renderType = model.renderTypeForCell(modelColumn, modelRow);
77
+ var cellRenderer = this.getCellRenderer(renderType);
78
+ cellRenderer.drawCellContent(context, state, column, row);
79
+ }
80
+ getCellOverflowButtonPosition(_ref) {
81
+ var {
82
+ mouseX,
83
+ mouseY,
84
+ metrics,
85
+ theme
86
+ } = _ref;
87
+ return this.textCellRenderer.getCellOverflowButtonPosition(mouseX, mouseY, metrics, theme);
88
+ }
89
+ shouldRenderOverflowButton(state) {
90
+ return this.textCellRenderer.shouldRenderOverflowButton(state);
91
+ }
92
+ drawCellOverflowButton(state) {
93
+ var {
94
+ context,
95
+ mouseX,
96
+ mouseY,
97
+ theme
98
+ } = state;
99
+ if (mouseX == null || mouseY == null) return;
100
+ if (!this.shouldRenderOverflowButton(state)) {
101
+ return;
102
+ }
103
+ var {
104
+ left: buttonLeft,
105
+ top: buttonTop,
106
+ width: buttonWidth,
107
+ height: buttonHeight
108
+ } = this.getCellOverflowButtonPosition(state);
109
+ var {
110
+ cellHorizontalPadding,
111
+ overflowButtonColor,
112
+ overflowButtonHoverColor
113
+ } = theme;
114
+ context.save();
115
+ if (overflowButtonHoverColor != null && buttonLeft != null && buttonWidth != null && buttonTop != null && buttonHeight != null && mouseX >= buttonLeft && mouseX <= buttonLeft + buttonWidth && mouseY >= buttonTop && mouseY <= buttonTop + buttonHeight) {
116
+ context.fillStyle = overflowButtonHoverColor;
117
+ } else if (overflowButtonColor != null) {
118
+ context.fillStyle = overflowButtonColor;
119
+ }
120
+ var icon = getIcon(ICON_NAMES.CELL_OVERFLOW);
121
+ if (buttonLeft != null && buttonTop != null) {
122
+ context.translate(buttonLeft + cellHorizontalPadding, buttonTop + 2);
123
+ }
124
+ context.fill(icon);
125
+ context.restore();
126
+ }
127
+ drawGroupedColumnLine(context, state) {
128
+ var {
129
+ metrics,
130
+ model,
131
+ theme
132
+ } = state;
133
+ var {
134
+ groupedColumns
135
+ } = model;
136
+ var {
137
+ maxY,
138
+ allColumnWidths,
139
+ allColumnXs
140
+ } = metrics;
141
+ if (groupedColumns.length === 0 || theme.groupedColumnDividerColor == null) {
142
+ return;
143
+ }
144
+
145
+ // This assumes that the engine puts the grouped columns at the start of the
146
+ // model, so model and visible index match for grouped columns. If we ever
147
+ // add freeze support for tree tables or allow moving the grouped columns,
148
+ // this assumption may no longer hold true. If such a change occurs, we'll
149
+ // need to revisit this since a single vertical divider may no longer make
150
+ // sense.
151
+ var lastVisibleGroupColumnIndex = groupedColumns.length - 1;
152
+ var columnX = allColumnXs.get(lastVisibleGroupColumnIndex);
153
+ var columnWidth = allColumnWidths.get(lastVisibleGroupColumnIndex);
154
+ if (columnX == null || columnWidth == null) {
155
+ return;
156
+ }
157
+ var x = columnX + columnWidth + 0.5;
158
+ context.strokeStyle = theme.groupedColumnDividerColor;
159
+ context.lineWidth = 1;
160
+ context.beginPath();
161
+ context.moveTo(x, 0);
162
+ context.lineTo(x, maxY);
163
+ context.stroke();
164
+ }
165
+ drawPendingRowLine(context, state) {
166
+ var {
167
+ metrics,
168
+ model,
169
+ theme
170
+ } = state;
171
+ var {
172
+ allRowYs,
173
+ maxX
174
+ } = metrics;
175
+ var {
176
+ pendingRowCount
177
+ } = model;
178
+ if (pendingRowCount <= 0) {
179
+ return;
180
+ }
181
+ var firstPendingRow = model.rowCount - model.pendingRowCount - model.floatingBottomRowCount;
182
+ var y = allRowYs.get(firstPendingRow);
183
+ if (y == null) {
184
+ return;
185
+ }
186
+ y -= 0.5;
187
+ context.save();
188
+ context.setLineDash([4, 2]);
189
+ context.strokeStyle = theme.pendingTextColor;
190
+ context.lineWidth = 1;
191
+ context.beginPath();
192
+ context.moveTo(0, y);
193
+ context.lineTo(maxX, y);
194
+ context.stroke();
195
+ context.restore();
196
+ }
197
+ drawMouseColumnHover(context, state) {
198
+ var {
199
+ theme,
200
+ metrics,
201
+ hoverSelectColumn
202
+ } = state;
203
+ if (hoverSelectColumn == null || theme.linkerColumnHoverBackgroundColor == null) {
204
+ return;
205
+ }
206
+ var {
207
+ allColumnWidths,
208
+ allColumnXs,
209
+ maxY
210
+ } = metrics;
211
+ var x = getOrThrow(allColumnXs, hoverSelectColumn);
212
+ var columnWidth = getOrThrow(allColumnWidths, hoverSelectColumn);
213
+ context.fillStyle = theme.linkerColumnHoverBackgroundColor;
214
+ context.fillRect(x, 0, columnWidth, maxY);
215
+ }
216
+ drawMouseRowHover(context, state) {
217
+ var {
218
+ isSelectingColumn
219
+ } = state;
220
+ if (!isSelectingColumn) {
221
+ super.drawMouseRowHover(context, state);
222
+ }
223
+ }
224
+ drawScrim(state) {
225
+ var {
226
+ context,
227
+ loadingScrimProgress,
228
+ metrics,
229
+ theme
230
+ } = state;
231
+ if (loadingScrimProgress == null) {
232
+ return;
233
+ }
234
+ var {
235
+ width,
236
+ height,
237
+ gridY
238
+ } = metrics;
239
+ var {
240
+ scrimBlurSize,
241
+ scrimColor
242
+ } = theme;
243
+ context.save();
244
+
245
+ // Use global composite so we can change the underlying layer to grayscale
246
+ context.globalCompositeOperation = 'color';
247
+ context.filter = "blur(".concat(scrimBlurSize, "px)");
248
+ if (scrimColor != null) {
249
+ context.fillStyle = scrimColor;
250
+ }
251
+
252
+ // Clip the path so the top edge is hard edge, bottom edge is soft/blurry
253
+ context.beginPath();
254
+ context.rect(0, gridY, width, height - gridY);
255
+ context.clip();
256
+
257
+ // Extend the edges beyond the clip area so they're hard edges
258
+ context.fillRect(-scrimBlurSize, -scrimBlurSize + gridY, scrimBlurSize * 2 + width, (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress);
259
+
260
+ // add an overlay of the scrim color to darken things a bit
261
+ context.globalCompositeOperation = 'overlay';
262
+ context.filter = "blur(".concat(scrimBlurSize, "px) opacity(15%)");
263
+ context.fillRect(-scrimBlurSize, -scrimBlurSize + gridY, scrimBlurSize * 2 + width, (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress);
264
+ context.restore();
265
+ }
266
+ drawColumnHeaders(context, state) {
267
+ super.drawColumnHeaders(context, state);
268
+ var {
269
+ theme,
270
+ metrics,
271
+ model,
272
+ reverseType
273
+ } = state;
274
+ var {
275
+ columnHeaderHeight
276
+ } = metrics;
277
+ this.drawFilterHeaders(context, state);
278
+ if (columnHeaderHeight <= 0) {
279
+ return;
280
+ }
281
+ var {
282
+ sort
283
+ } = model;
284
+ // if there is only one sort bar, it is interior to the header to save space
285
+ if (sort.length === 1) {
286
+ var hasReverse = reverseType !== TableUtils.REVERSE_TYPE.NONE;
287
+ var color;
288
+ if (hasReverse) {
289
+ color = theme.headerReverseBarColor;
290
+ } else {
291
+ color = theme.headerSortBarColor;
292
+ }
293
+ this.drawHeaderBar(context, state, color, hasReverse ? theme.reverseHeaderBarHeight : theme.sortHeaderBarHeight);
294
+ } else if (sort.length > 1) {
295
+ // if there's multiple bars, the sort is interior to header
296
+ // and the reverse claims space in the table
297
+ if (
298
+ // has table reverse
299
+ reverseType !== TableUtils.REVERSE_TYPE.NONE) {
300
+ this.drawHeaderBar(context, state, theme.headerReverseBarColor, theme.reverseHeaderBarHeight, false);
301
+ }
302
+ this.drawHeaderBar(context, state, theme.headerSortBarColor, theme.sortHeaderBarHeight);
303
+ }
304
+ }
305
+ drawHeaderBar(context, state, color, barHeight) {
306
+ var interior = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;
307
+ var {
308
+ theme,
309
+ metrics,
310
+ model
311
+ } = state;
312
+ var {
313
+ columnHeaderHeight,
314
+ width
315
+ } = metrics;
316
+ // Draw casing with 1 pixel above and below the bar,
317
+ // 1px falls on the existing split between grid/headers
318
+ // so don't need to be accounnted for in math elsewhere
319
+ var offset = 0;
320
+ if (!interior) {
321
+ offset = barHeight;
322
+ }
323
+ context.fillStyle = theme.headerBarCasingColor;
324
+ context.fillRect(0, model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 2 + offset, width, barHeight + 2);
325
+ context.fillStyle = color;
326
+ context.fillRect(0, model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 1 + offset, width, barHeight);
327
+ }
328
+ drawColumnHeadersAtDepth(context, state, range, boundsProp, depth) {
329
+ var {
330
+ metrics,
331
+ model,
332
+ isMenuShown
333
+ } = state;
334
+ var {
335
+ columnHeaderMaxDepth
336
+ } = model;
337
+ var {
338
+ width
339
+ } = metrics;
340
+ var bounds = _objectSpread(_objectSpread({}, boundsProp), {}, {
341
+ maxX: depth === columnHeaderMaxDepth - 1 && boundsProp.maxX === width ? width - (isMenuShown ? 0 : 30) // Account for the menu button
342
+ : boundsProp.maxX
343
+ });
344
+ super.drawColumnHeadersAtDepth(context, state, range, bounds, depth);
345
+ }
346
+ drawColumnHeaderAtIndex(context, state, index, bounds) {
347
+ var _model$columns$modelC, _fontWidths$get;
348
+ super.drawColumnHeaderAtIndex(context, state, index, bounds);
349
+ var {
350
+ metrics,
351
+ model,
352
+ theme
353
+ } = state;
354
+ var {
355
+ modelColumns,
356
+ allColumnWidths,
357
+ allColumnXs,
358
+ gridX,
359
+ columnHeaderHeight,
360
+ fontWidths
361
+ } = metrics;
362
+ var {
363
+ headerHorizontalPadding
364
+ } = theme;
365
+ var columnWidth = getOrThrow(allColumnWidths, index, 0);
366
+ var columnX = getOrThrow(allColumnXs, index) + gridX;
367
+ var modelColumn = modelColumns.get(index);
368
+ if (modelColumn == null) {
369
+ return;
370
+ }
371
+ var columnName = (_model$columns$modelC = model.columns[modelColumn]) === null || _model$columns$modelC === void 0 ? void 0 : _model$columns$modelC.name;
372
+ if (columnName == null) {
373
+ return;
374
+ }
375
+ var sort = TableUtils.getSortForColumn(model.sort, columnName);
376
+ if (!sort) {
377
+ return;
378
+ }
379
+ var icon = this.getSortIcon(sort);
380
+ if (!icon) {
381
+ return;
382
+ }
383
+ var text = model.textForColumnHeader(modelColumn);
384
+ if (text === undefined) {
385
+ return;
386
+ }
387
+ var fontWidth = (_fontWidths$get = fontWidths.get(context.font)) !== null && _fontWidths$get !== void 0 ? _fontWidths$get : DEFAULT_FONT_WIDTH;
388
+ assertNotNull(fontWidth);
389
+ var textWidth = text.length * fontWidth;
390
+ var textRight = gridX + columnX + textWidth + headerHorizontalPadding;
391
+ var {
392
+ maxX
393
+ } = bounds;
394
+ maxX -= headerHorizontalPadding;
395
+ var defaultX = gridX + columnX + columnWidth - headerHorizontalPadding - 1;
396
+ var x = textRight > maxX ? textRight + 1 : Math.min(maxX, defaultX);
397
+ var yOffset = sort.direction === TableUtils.sortDirection.ascending ? -6 : -12;
398
+ var y = columnHeaderHeight * 0.5 + yOffset;
399
+ context.save();
400
+ context.beginPath();
401
+ context.rect(columnX, 0, columnWidth, columnHeaderHeight);
402
+ context.clip();
403
+ context.fillStyle = theme.headerSortBarColor;
404
+ context.translate(x, y);
405
+ context.fill(icon);
406
+ context.restore();
407
+ }
408
+ drawFilterHeaders(context, state) {
409
+ var {
410
+ isFilterBarShown,
411
+ quickFilters,
412
+ advancedFilters
413
+ } = state;
414
+ if (isFilterBarShown) {
415
+ this.drawExpandedFilterHeaders(context, state);
416
+ } else if (quickFilters != null && quickFilters.size > 0 || advancedFilters != null && advancedFilters.size > 0) {
417
+ this.drawCollapsedFilterHeaders(context, state);
418
+ }
419
+ }
420
+ drawExpandedFilterHeaders(context, state) {
421
+ var {
422
+ metrics,
423
+ model,
424
+ theme,
425
+ quickFilters,
426
+ advancedFilters
427
+ } = state;
428
+ var {
429
+ filterBarHeight
430
+ } = theme;
431
+ if (filterBarHeight <= 0) {
432
+ return;
433
+ }
434
+ var {
435
+ gridX,
436
+ gridY,
437
+ maxX,
438
+ modelColumns,
439
+ visibleColumns,
440
+ allColumnWidths,
441
+ allColumnXs
442
+ } = metrics;
443
+ var columnHeaderHeight = gridY - filterBarHeight;
444
+ context.save();
445
+ context.font = theme.font;
446
+ context.textAlign = 'left';
447
+ if (quickFilters != null && quickFilters.size > 0 || advancedFilters != null && advancedFilters.size > 0) {
448
+ // fill style if a fiter is set on any column
449
+ context.fillStyle = theme.filterBarExpandedActiveBackgroundColor;
450
+ } else {
451
+ // fill style with no filters set
452
+ context.fillStyle = theme.filterBarExpandedBackgroundColor;
453
+ }
454
+
455
+ // Draw the background
456
+ context.fillRect(gridX, columnHeaderHeight, maxX, filterBarHeight - 1);
457
+
458
+ // Draw the bottom border
459
+ context.fillStyle = theme.headerBarCasingColor;
460
+ context.fillRect(gridX, columnHeaderHeight + filterBarHeight - 1, maxX, 1);
461
+
462
+ // Draw the filter input boxes
463
+ var y1 = columnHeaderHeight;
464
+ context.strokeStyle = theme.filterBarSeparatorColor;
465
+ context.beginPath();
466
+ for (var i = 0; i < visibleColumns.length; i += 1) {
467
+ var column = visibleColumns[i];
468
+ var modelColumn = getOrThrow(modelColumns, column);
469
+ var columnX = getOrThrow(allColumnXs, column);
470
+ var columnWidth = getOrThrow(allColumnWidths, column);
471
+ if (model.isFilterable(modelColumn) && columnWidth > 0) {
472
+ var x1 = gridX + (columnX !== null && columnX !== void 0 ? columnX : 0);
473
+ context.rect(x1 + 0.5, y1 + 0.5, columnWidth, filterBarHeight - 2); // 1 for the border, 1 for the casing
474
+ }
475
+ }
476
+
477
+ context.stroke();
478
+ for (var _i = 0; _i < visibleColumns.length; _i += 1) {
479
+ var _column = visibleColumns[_i];
480
+ var _columnWidth = getOrThrow(allColumnWidths, _column);
481
+ var _columnX = getOrThrow(allColumnXs, _column);
482
+ var x = _columnX + gridX;
483
+ this.drawExpandedFilterHeader(context, state, _column, x, _columnWidth);
484
+ }
485
+ context.restore();
486
+ }
487
+ drawExpandedFilterHeader(context, state, column, columnX, columnWidth) {
488
+ if (columnWidth <= 0) {
489
+ return;
490
+ }
491
+ var {
492
+ metrics,
493
+ theme,
494
+ quickFilters,
495
+ advancedFilters
496
+ } = state;
497
+ var {
498
+ modelColumns,
499
+ gridY
500
+ } = metrics;
501
+ var {
502
+ filterBarHeight,
503
+ filterBarExpandedActiveCellBackgroundColor,
504
+ filterBarErrorColor,
505
+ filterBarHorizontalPadding,
506
+ headerColor
507
+ } = theme;
508
+ var columnHeaderHeight = gridY - filterBarHeight;
509
+ var modelColumn = modelColumns.get(column);
510
+ if (modelColumn === undefined) return;
511
+ var quickFilter = quickFilters.get(modelColumn);
512
+ var advancedFilter = advancedFilters.get(modelColumn);
513
+ if (quickFilter == null && advancedFilter == null) {
514
+ return;
515
+ }
516
+ var text = null;
517
+ if (quickFilter != null) {
518
+ var {
519
+ text: filterText
520
+ } = quickFilter;
521
+ text = filterText;
522
+ if (!text) {
523
+ text = TableUtils.getFilterText(quickFilter.filter);
524
+ }
525
+ if (text != null) {
526
+ var {
527
+ fontWidths
528
+ } = metrics;
529
+ var fontWidth = fontWidths.get(context.font);
530
+ if (fontWidth == null || fontWidth === 0) {
531
+ fontWidth = context.measureText('8').width;
532
+ if (!fontWidth) {
533
+ fontWidth = 10;
534
+ }
535
+ }
536
+ var maxLength = (columnWidth - filterBarHorizontalPadding * 2) / fontWidth;
537
+ if (maxLength <= 0) {
538
+ text = '';
539
+ } else if (text.length > maxLength) {
540
+ text = "".concat(text.substring(0, maxLength - 1), "\u2026");
541
+ }
542
+ }
543
+ }
544
+ context.save();
545
+ var isFilterValid = IrisGridRenderer.isFilterValid(advancedFilter, quickFilter);
546
+ if (isFilterValid && filterBarExpandedActiveCellBackgroundColor != null) {
547
+ // draw active filter background inside cell
548
+ context.fillStyle = filterBarExpandedActiveCellBackgroundColor;
549
+ context.fillRect(columnX + 1,
550
+ // +1 left border
551
+ columnHeaderHeight + 1,
552
+ // +1 top border
553
+ columnWidth - 1,
554
+ // -1 right border
555
+ filterBarHeight - 3 // -3 top, bottom border and bottom casing
556
+ );
557
+ } else if (filterBarErrorColor != null) {
558
+ // draw error box inside cell
559
+ context.fillStyle = filterBarErrorColor;
560
+ context.lineWidth = 2;
561
+ context.strokeStyle = filterBarErrorColor;
562
+ // Because this is drawn with a strokeRect, we have to add/subtract half the,
563
+ // linewidth from each side to make interior, in addition to accounting for any borders/casings
564
+ var rectLeft = columnX + 2; // 1 for strokeRect, 1 for border
565
+ var rectTop = columnHeaderHeight + 2; // 1 for strokeRect, 1 for border
566
+ var rectWidth = columnWidth - 3; // for 2 border and 1 for strokeRect
567
+ var rectHeight = filterBarHeight - 5; // -2 for strokeRect, -3 for top, bottom border and bottom casing
568
+ context.strokeRect(rectLeft, rectTop, rectWidth, rectHeight);
569
+ }
570
+ if (text != null && text !== '') {
571
+ var textX = columnX + filterBarHorizontalPadding;
572
+ var textY = columnHeaderHeight + filterBarHeight * 0.5 + 1; // + 1 for border
573
+ context.fillStyle = headerColor;
574
+ context.fillText(text, textX, textY);
575
+ }
576
+ context.restore();
577
+ }
578
+ drawCollapsedFilterHeaders(context, state) {
579
+ var {
580
+ metrics,
581
+ theme
582
+ } = state;
583
+ var {
584
+ headerSeparatorColor,
585
+ filterBarCollapsedHeight
586
+ } = theme;
587
+ if (filterBarCollapsedHeight <= 0) {
588
+ return;
589
+ }
590
+ var {
591
+ gridX,
592
+ gridY,
593
+ maxX,
594
+ visibleColumns,
595
+ allColumnWidths,
596
+ allColumnXs
597
+ } = metrics;
598
+ var columnHeaderHeight = gridY - filterBarCollapsedHeight;
599
+ context.save();
600
+
601
+ // Draw the background of the collapsed filter bar
602
+ context.fillStyle = headerSeparatorColor;
603
+ context.fillRect(gridX, columnHeaderHeight, maxX, filterBarCollapsedHeight);
604
+ for (var i = 0; i < visibleColumns.length; i += 1) {
605
+ var column = visibleColumns[i];
606
+ var columnWidth = allColumnWidths.get(column);
607
+ var columnX = allColumnXs.get(column);
608
+ if (columnX != null && columnWidth != null) {
609
+ var x = columnX + gridX;
610
+ // draw the collapsed cells
611
+ this.drawCollapsedFilterHeader(context, state, column, x, columnWidth);
612
+ }
613
+ }
614
+ context.restore();
615
+ }
616
+ drawCollapsedFilterHeader(context, state, column, columnX, columnWidth) {
617
+ if (columnWidth <= 0) {
618
+ return;
619
+ }
620
+ var {
621
+ metrics,
622
+ theme,
623
+ quickFilters,
624
+ advancedFilters
625
+ } = state;
626
+ var {
627
+ modelColumns,
628
+ gridY
629
+ } = metrics;
630
+ var modelColumn = modelColumns.get(column);
631
+ if (modelColumn === undefined) return;
632
+ var quickFilter = quickFilters.get(modelColumn);
633
+ var advancedFilter = advancedFilters.get(modelColumn);
634
+ var {
635
+ filterBarCollapsedHeight,
636
+ filterBarActiveColor,
637
+ filterBarActiveBackgroundColor,
638
+ filterBarErrorColor
639
+ } = theme;
640
+ context.save();
641
+ var isFilterValid = IrisGridRenderer.isFilterValid(advancedFilter, quickFilter);
642
+ if (filterBarActiveBackgroundColor != null && quickFilter == null && advancedFilter == null) {
643
+ context.fillStyle = filterBarActiveBackgroundColor;
644
+ } else if (filterBarActiveColor != null && isFilterValid) {
645
+ context.fillStyle = filterBarActiveColor;
646
+ } else if (filterBarErrorColor != null) {
647
+ context.fillStyle = filterBarErrorColor;
648
+ }
649
+ var x = columnX + 1; // for gap between columns
650
+ var y = gridY - filterBarCollapsedHeight;
651
+ var rectWidth = columnWidth - 1; // for gap between columns
652
+ var rectHeight = filterBarCollapsedHeight - 1; // for casing bottom
653
+ context.fillRect(x, y, rectWidth, rectHeight);
654
+ context.restore();
655
+ }
656
+ drawRowFooters(context, state) {
657
+ var {
658
+ metrics,
659
+ model,
660
+ mouseX,
661
+ mouseY,
662
+ theme
663
+ } = state;
664
+ var {
665
+ gridY,
666
+ gridX,
667
+ maxX,
668
+ modelRows,
669
+ floatingTopHeight,
670
+ floatingBottomHeight,
671
+ floatingRows,
672
+ rowFooterWidth,
673
+ height,
674
+ horizontalBarHeight,
675
+ verticalBarWidth,
676
+ allRowHeights,
677
+ allRowYs,
678
+ width
679
+ } = metrics;
680
+ // Only draw the footers on the floating rows
681
+ if (rowFooterWidth <= 0 || floatingRows.length === 0) {
682
+ return;
683
+ }
684
+ var {
685
+ cellHorizontalPadding,
686
+ floatingGridRowColor,
687
+ floatingRowBackgroundColors,
688
+ headerColor,
689
+ rowHoverBackgroundColor
690
+ } = theme;
691
+ context.translate(gridX, gridY);
692
+ context.beginPath();
693
+ var x = Math.min(maxX, width - rowFooterWidth - verticalBarWidth - gridX);
694
+ context.fillStyle = floatingRowBackgroundColors;
695
+ if (floatingTopHeight > 0) {
696
+ context.rect(x, 0, rowFooterWidth, floatingTopHeight);
697
+ }
698
+ if (floatingBottomHeight > 0) {
699
+ context.rect(x, height - gridY - horizontalBarHeight - floatingBottomHeight, rowFooterWidth, floatingBottomHeight);
700
+ }
701
+ context.fill();
702
+ var mouseRow = mouseX != null && mouseY != null && mouseX >= gridX && mouseX <= maxX + rowFooterWidth ? GridUtils.getRowAtY(mouseY, metrics) : null;
703
+ if (rowHoverBackgroundColor != null && mouseRow !== null && floatingRows.includes(mouseRow)) {
704
+ context.fillStyle = rowHoverBackgroundColor;
705
+ var y = allRowYs.get(mouseRow);
706
+ var rowHeight = allRowHeights.get(mouseRow);
707
+ assertNotNull(y);
708
+ assertNotNull(rowHeight);
709
+ context.fillRect(x, y, rowFooterWidth, rowHeight);
710
+ }
711
+ context.beginPath();
712
+ if (floatingGridRowColor != null) {
713
+ context.strokeStyle = floatingGridRowColor;
714
+ }
715
+ if (floatingTopHeight > 0) {
716
+ context.moveTo(x + 0.5, 0.5);
717
+ context.lineTo(x + 0.5, floatingTopHeight - 0.5);
718
+ }
719
+ if (floatingBottomHeight > 0) {
720
+ var _y = height - gridY - horizontalBarHeight - floatingBottomHeight;
721
+ context.moveTo(x - 0.5, _y + 0.5);
722
+ context.lineTo(x - 0.5, _y + floatingBottomHeight - 0.5);
723
+ }
724
+ context.stroke();
725
+ context.fillStyle = headerColor;
726
+ context.textAlign = 'left';
727
+ var textX = x + cellHorizontalPadding;
728
+ for (var i = 0; i < floatingRows.length; i += 1) {
729
+ var row = floatingRows[i];
730
+ var _rowHeight = allRowHeights.get(row);
731
+ var rowY = allRowYs.get(row);
732
+ var modelRow = modelRows.get(row);
733
+ if (rowY != null && _rowHeight != null && modelRow != null) {
734
+ var textY = rowY + _rowHeight * 0.5;
735
+ context.fillText(model.textForRowFooter(modelRow), textX, textY);
736
+ }
737
+ }
738
+ context.translate(-gridX, -gridY);
739
+ }
740
+ getExpandButtonPosition(_ref2, depth) {
741
+ var {
742
+ mouseX,
743
+ mouseY,
744
+ metrics,
745
+ theme
746
+ } = _ref2;
747
+ var NULL_POSITION = {
748
+ left: null,
749
+ top: null,
750
+ width: null,
751
+ height: null
752
+ };
753
+ if (mouseX == null || mouseY == null || depth == null || !metrics) {
754
+ return NULL_POSITION;
755
+ }
756
+ var {
757
+ rowHeight,
758
+ left,
759
+ top
760
+ } = GridUtils.getCellInfoFromXY(mouseX, mouseY, metrics);
761
+ assertNotNull(left);
762
+ assertNotNull(rowHeight);
763
+ assertNotNull(top);
764
+ var {
765
+ cellHorizontalPadding
766
+ } = theme;
767
+ var width = EXPAND_ICON_SIZE + 2 * cellHorizontalPadding;
768
+ var buttonLeft = Math.max(left + EXPAND_ICON_SIZE * depth, metrics.gridX);
769
+ var buttonTop = metrics.gridY + top;
770
+ return {
771
+ left: buttonLeft,
772
+ top: buttonTop,
773
+ width,
774
+ height: rowHeight
775
+ };
776
+ }
777
+ }
778
+ export default IrisGridRenderer;
779
+ //# sourceMappingURL=IrisGridRenderer.js.map