@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 @@
1
+ {"version":3,"file":"IrisGridRenderer.js","names":["DEFAULT_FONT_WIDTH","GridRenderer","GridUtils","TableUtils","assertNotNull","getOrThrow","IrisGridTextCellRenderer","IrisGridDataBarCellRenderer","getIcon","ICON_NAMES","Object","freeze","SORT_UP","SORT_DOWN","CARET_DOWN","CARET_RIGHT","CELL_OVERFLOW","EXPAND_ICON_SIZE","IrisGridRenderer","isFilterValid","advancedFilter","quickFilter","isAdvancedFilterValid","filter","isQuickFilterValid","getSortIcon","sort","direction","sortDirection","ascending","descending","drawCanvas","state","drawScrim","drawGrid","context","drawCellOverflowButton","drawGridLines","drawGroupedColumnLine","drawPendingRowLine","drawCellContent","column","row","metrics","model","modelColumns","modelRows","modelColumn","get","modelRow","undefined","renderType","renderTypeForCell","cellRenderer","getCellRenderer","getCellOverflowButtonPosition","mouseX","mouseY","theme","textCellRenderer","shouldRenderOverflowButton","left","buttonLeft","top","buttonTop","width","buttonWidth","height","buttonHeight","cellHorizontalPadding","overflowButtonColor","overflowButtonHoverColor","save","fillStyle","icon","translate","fill","restore","groupedColumns","maxY","allColumnWidths","allColumnXs","length","groupedColumnDividerColor","lastVisibleGroupColumnIndex","columnX","columnWidth","x","strokeStyle","lineWidth","beginPath","moveTo","lineTo","stroke","allRowYs","maxX","pendingRowCount","firstPendingRow","rowCount","floatingBottomRowCount","y","setLineDash","pendingTextColor","drawMouseColumnHover","hoverSelectColumn","linkerColumnHoverBackgroundColor","fillRect","drawMouseRowHover","isSelectingColumn","loadingScrimProgress","gridY","scrimBlurSize","scrimColor","globalCompositeOperation","rect","clip","drawColumnHeaders","reverseType","columnHeaderHeight","drawFilterHeaders","hasReverse","REVERSE_TYPE","NONE","color","headerReverseBarColor","headerSortBarColor","drawHeaderBar","reverseHeaderBarHeight","sortHeaderBarHeight","barHeight","interior","offset","headerBarCasingColor","columnHeaderMaxDepth","drawColumnHeadersAtDepth","range","boundsProp","depth","isMenuShown","bounds","drawColumnHeaderAtIndex","index","gridX","fontWidths","headerHorizontalPadding","columnName","columns","name","getSortForColumn","text","textForColumnHeader","fontWidth","font","textWidth","textRight","defaultX","Math","min","yOffset","isFilterBarShown","quickFilters","advancedFilters","drawExpandedFilterHeaders","size","drawCollapsedFilterHeaders","filterBarHeight","visibleColumns","textAlign","filterBarExpandedActiveBackgroundColor","filterBarExpandedBackgroundColor","y1","filterBarSeparatorColor","i","isFilterable","x1","drawExpandedFilterHeader","filterBarExpandedActiveCellBackgroundColor","filterBarErrorColor","filterBarHorizontalPadding","headerColor","filterText","getFilterText","measureText","maxLength","substring","rectLeft","rectTop","rectWidth","rectHeight","strokeRect","textX","textY","fillText","headerSeparatorColor","filterBarCollapsedHeight","drawCollapsedFilterHeader","filterBarActiveColor","filterBarActiveBackgroundColor","drawRowFooters","floatingTopHeight","floatingBottomHeight","floatingRows","rowFooterWidth","horizontalBarHeight","verticalBarWidth","allRowHeights","floatingGridRowColor","floatingRowBackgroundColors","rowHoverBackgroundColor","mouseRow","getRowAtY","includes","rowHeight","rowY","textForRowFooter","getExpandButtonPosition","NULL_POSITION","getCellInfoFromXY","max"],"sources":["../src/IrisGridRenderer.ts"],"sourcesContent":["/* eslint react/destructuring-assignment: \"off\" */\n/* eslint class-methods-use-this: \"off\" */\n/* eslint no-param-reassign: \"off\" */\nimport {\n BoundedAxisRange,\n Coordinate,\n DEFAULT_FONT_WIDTH,\n GridMetrics,\n GridRangeIndex,\n GridRenderer,\n GridRenderState,\n GridThemeType,\n GridUtils,\n VisibleIndex,\n} from '@deephaven/grid';\nimport type { Sort } from '@deephaven/jsapi-types';\nimport { TableUtils, ReverseType } from '@deephaven/jsapi-utils';\nimport { assertNotNull, getOrThrow } from '@deephaven/utils';\nimport {\n ReadonlyAdvancedFilterMap,\n ReadonlyQuickFilterMap,\n AdvancedFilter,\n QuickFilter,\n} from './CommonTypes';\nimport { IrisGridThemeType } from './IrisGridTheme';\nimport IrisGridModel from './IrisGridModel';\nimport IrisGridTextCellRenderer from './IrisGridTextCellRenderer';\nimport IrisGridDataBarCellRenderer from './IrisGridDataBarCellRenderer';\nimport { getIcon } from './IrisGridIcons';\n\nconst ICON_NAMES = Object.freeze({\n SORT_UP: 'sortUp',\n SORT_DOWN: 'sortDown',\n CARET_DOWN: 'caretDown',\n CARET_RIGHT: 'caretRight',\n CELL_OVERFLOW: 'cellOverflow',\n});\n\nconst EXPAND_ICON_SIZE = 10;\n\nexport type IrisGridRenderState = GridRenderState & {\n model: IrisGridModel;\n theme: IrisGridThemeType;\n hoverSelectColumn: GridRangeIndex;\n isSelectingColumn: boolean;\n loadingScrimProgress: number;\n reverseType: ReverseType;\n isFilterBarShown: boolean;\n advancedFilters: ReadonlyAdvancedFilterMap;\n quickFilters: ReadonlyQuickFilterMap;\n isMenuShown: boolean;\n};\n/**\n * Handles rendering some of the Iris specific features, such as sorting icons, sort bar display\n * */\nclass IrisGridRenderer extends GridRenderer {\n static isFilterValid(\n advancedFilter: AdvancedFilter | undefined | null,\n quickFilter: QuickFilter | undefined | null\n ): boolean {\n const isAdvancedFilterValid =\n advancedFilter == null || advancedFilter.filter != null;\n const isQuickFilterValid =\n quickFilter == null || quickFilter.filter != null;\n return isAdvancedFilterValid && isQuickFilterValid;\n }\n\n protected textCellRenderer = new IrisGridTextCellRenderer();\n\n protected dataBarCellRenderer = new IrisGridDataBarCellRenderer();\n\n getSortIcon(sort: Sort | null): Path2D | null {\n if (!sort) {\n return null;\n }\n if (sort.direction === TableUtils.sortDirection.ascending) {\n return getIcon(ICON_NAMES.SORT_UP);\n }\n if (sort.direction === TableUtils.sortDirection.descending) {\n return getIcon(ICON_NAMES.SORT_DOWN);\n }\n return null;\n }\n\n drawCanvas(state: IrisGridRenderState): void {\n super.drawCanvas(state);\n\n this.drawScrim(state);\n }\n\n drawGrid(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawGrid(context, state);\n this.drawCellOverflowButton(state);\n }\n\n drawGridLines(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawGridLines(context, state);\n\n this.drawGroupedColumnLine(context, state);\n\n this.drawPendingRowLine(context, state);\n }\n\n drawCellContent(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): void {\n const { metrics, model } = state;\n const { modelColumns, modelRows } = metrics;\n const modelColumn = modelColumns.get(column);\n const modelRow = getOrThrow(modelRows, row);\n if (modelColumn === undefined) {\n return;\n }\n\n const renderType = model.renderTypeForCell(modelColumn, modelRow);\n const cellRenderer = this.getCellRenderer(renderType);\n cellRenderer.drawCellContent(context, state, column, row);\n }\n\n getCellOverflowButtonPosition({\n mouseX,\n mouseY,\n metrics,\n theme,\n }: {\n mouseX: Coordinate | null;\n mouseY: Coordinate | null;\n metrics: GridMetrics | undefined;\n theme: GridThemeType;\n }): {\n left: Coordinate | null;\n top: Coordinate | null;\n width: number | null;\n height: number | null;\n } {\n return this.textCellRenderer.getCellOverflowButtonPosition(\n mouseX,\n mouseY,\n metrics,\n theme\n );\n }\n\n shouldRenderOverflowButton(state: IrisGridRenderState): boolean {\n return this.textCellRenderer.shouldRenderOverflowButton(state);\n }\n\n drawCellOverflowButton(state: IrisGridRenderState): void {\n const { context, mouseX, mouseY, theme } = state;\n if (mouseX == null || mouseY == null) return;\n\n if (!this.shouldRenderOverflowButton(state)) {\n return;\n }\n\n const {\n left: buttonLeft,\n top: buttonTop,\n width: buttonWidth,\n height: buttonHeight,\n } = this.getCellOverflowButtonPosition(state);\n\n const {\n cellHorizontalPadding,\n overflowButtonColor,\n overflowButtonHoverColor,\n } = theme;\n\n context.save();\n if (\n overflowButtonHoverColor != null &&\n buttonLeft != null &&\n buttonWidth != null &&\n buttonTop != null &&\n buttonHeight != null &&\n mouseX >= buttonLeft &&\n mouseX <= buttonLeft + buttonWidth &&\n mouseY >= buttonTop &&\n mouseY <= buttonTop + buttonHeight\n ) {\n context.fillStyle = overflowButtonHoverColor;\n } else if (overflowButtonColor != null) {\n context.fillStyle = overflowButtonColor;\n }\n const icon = getIcon(ICON_NAMES.CELL_OVERFLOW);\n if (buttonLeft != null && buttonTop != null) {\n context.translate(buttonLeft + cellHorizontalPadding, buttonTop + 2);\n }\n context.fill(icon);\n\n context.restore();\n }\n\n drawGroupedColumnLine(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme } = state;\n const { groupedColumns } = model;\n const { maxY, allColumnWidths, allColumnXs } = metrics;\n if (\n groupedColumns.length === 0 ||\n theme.groupedColumnDividerColor == null\n ) {\n return;\n }\n\n // This assumes that the engine puts the grouped columns at the start of the\n // model, so model and visible index match for grouped columns. If we ever\n // add freeze support for tree tables or allow moving the grouped columns,\n // this assumption may no longer hold true. If such a change occurs, we'll\n // need to revisit this since a single vertical divider may no longer make\n // sense.\n const lastVisibleGroupColumnIndex = groupedColumns.length - 1;\n\n const columnX = allColumnXs.get(lastVisibleGroupColumnIndex);\n const columnWidth = allColumnWidths.get(lastVisibleGroupColumnIndex);\n if (columnX == null || columnWidth == null) {\n return;\n }\n\n const x = columnX + columnWidth + 0.5;\n\n context.strokeStyle = theme.groupedColumnDividerColor;\n context.lineWidth = 1;\n context.beginPath();\n context.moveTo(x, 0);\n context.lineTo(x, maxY);\n context.stroke();\n }\n\n drawPendingRowLine(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme } = state;\n const { allRowYs, maxX } = metrics;\n const { pendingRowCount } = model;\n if (pendingRowCount <= 0) {\n return;\n }\n\n const firstPendingRow =\n model.rowCount - model.pendingRowCount - model.floatingBottomRowCount;\n let y = allRowYs.get(firstPendingRow);\n if (y == null) {\n return;\n }\n\n y -= 0.5;\n context.save();\n context.setLineDash([4, 2]);\n context.strokeStyle = theme.pendingTextColor;\n\n context.lineWidth = 1;\n context.beginPath();\n context.moveTo(0, y);\n context.lineTo(maxX, y);\n context.stroke();\n context.restore();\n }\n\n drawMouseColumnHover(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { theme, metrics, hoverSelectColumn } = state;\n if (\n hoverSelectColumn == null ||\n theme.linkerColumnHoverBackgroundColor == null\n ) {\n return;\n }\n\n const { allColumnWidths, allColumnXs, maxY } = metrics;\n\n const x = getOrThrow(allColumnXs, hoverSelectColumn);\n const columnWidth = getOrThrow(allColumnWidths, hoverSelectColumn);\n\n context.fillStyle = theme.linkerColumnHoverBackgroundColor;\n context.fillRect(x, 0, columnWidth, maxY);\n }\n\n drawMouseRowHover(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { isSelectingColumn } = state;\n if (!isSelectingColumn) {\n super.drawMouseRowHover(context, state);\n }\n }\n\n drawScrim(state: IrisGridRenderState): void {\n const { context, loadingScrimProgress, metrics, theme } = state;\n if (loadingScrimProgress == null) {\n return;\n }\n\n const { width, height, gridY } = metrics;\n const { scrimBlurSize, scrimColor } = theme;\n\n context.save();\n\n // Use global composite so we can change the underlying layer to grayscale\n context.globalCompositeOperation = 'color';\n context.filter = `blur(${scrimBlurSize}px)`;\n if (scrimColor != null) {\n context.fillStyle = scrimColor;\n }\n\n // Clip the path so the top edge is hard edge, bottom edge is soft/blurry\n context.beginPath();\n context.rect(0, gridY, width, height - gridY);\n context.clip();\n\n // Extend the edges beyond the clip area so they're hard edges\n context.fillRect(\n -scrimBlurSize,\n -scrimBlurSize + gridY,\n scrimBlurSize * 2 + width,\n (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress\n );\n\n // add an overlay of the scrim color to darken things a bit\n context.globalCompositeOperation = 'overlay';\n context.filter = `blur(${scrimBlurSize}px) opacity(15%)`;\n context.fillRect(\n -scrimBlurSize,\n -scrimBlurSize + gridY,\n scrimBlurSize * 2 + width,\n (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress\n );\n\n context.restore();\n }\n\n drawColumnHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n super.drawColumnHeaders(context, state);\n\n const { theme, metrics, model, reverseType } = state;\n const { columnHeaderHeight } = metrics;\n\n this.drawFilterHeaders(context, state);\n\n if (columnHeaderHeight <= 0) {\n return;\n }\n\n const { sort } = model;\n // if there is only one sort bar, it is interior to the header to save space\n if (sort.length === 1) {\n const hasReverse = reverseType !== TableUtils.REVERSE_TYPE.NONE;\n\n let color;\n if (hasReverse) {\n color = theme.headerReverseBarColor;\n } else {\n color = theme.headerSortBarColor;\n }\n this.drawHeaderBar(\n context,\n state,\n color,\n hasReverse ? theme.reverseHeaderBarHeight : theme.sortHeaderBarHeight\n );\n } else if (sort.length > 1) {\n // if there's multiple bars, the sort is interior to header\n // and the reverse claims space in the table\n if (\n // has table reverse\n reverseType !== TableUtils.REVERSE_TYPE.NONE\n ) {\n this.drawHeaderBar(\n context,\n state,\n theme.headerReverseBarColor,\n theme.reverseHeaderBarHeight,\n false\n );\n }\n this.drawHeaderBar(\n context,\n state,\n theme.headerSortBarColor,\n theme.sortHeaderBarHeight\n );\n }\n }\n\n drawHeaderBar(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n color: string | CanvasGradient | CanvasPattern,\n barHeight: number,\n interior = true\n ): void {\n const { theme, metrics, model } = state;\n const { columnHeaderHeight, width } = metrics;\n // Draw casing with 1 pixel above and below the bar,\n // 1px falls on the existing split between grid/headers\n // so don't need to be accounnted for in math elsewhere\n let offset = 0;\n if (!interior) {\n offset = barHeight;\n }\n context.fillStyle = theme.headerBarCasingColor;\n context.fillRect(\n 0,\n model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 2 + offset,\n width,\n barHeight + 2\n );\n\n context.fillStyle = color;\n context.fillRect(\n 0,\n model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 1 + offset,\n width,\n barHeight\n );\n }\n\n drawColumnHeadersAtDepth(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n range: BoundedAxisRange,\n boundsProp: { minX: number; maxX: number },\n depth: number\n ): void {\n const { metrics, model, isMenuShown } = state;\n const { columnHeaderMaxDepth } = model;\n const { width } = metrics;\n const bounds = {\n ...boundsProp,\n maxX:\n depth === columnHeaderMaxDepth - 1 && boundsProp.maxX === width\n ? width - (isMenuShown ? 0 : 30) // Account for the menu button\n : boundsProp.maxX,\n };\n super.drawColumnHeadersAtDepth(context, state, range, bounds, depth);\n }\n\n drawColumnHeaderAtIndex(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n index: VisibleIndex,\n bounds: { minX: number; maxX: number }\n ): void {\n super.drawColumnHeaderAtIndex(context, state, index, bounds);\n const { metrics, model, theme } = state;\n const {\n modelColumns,\n allColumnWidths,\n allColumnXs,\n gridX,\n columnHeaderHeight,\n fontWidths,\n } = metrics;\n\n const { headerHorizontalPadding } = theme;\n const columnWidth = getOrThrow(allColumnWidths, index, 0);\n const columnX = getOrThrow(allColumnXs, index) + gridX;\n const modelColumn = modelColumns.get(index);\n\n if (modelColumn == null) {\n return;\n }\n\n const columnName = model.columns[modelColumn]?.name;\n\n if (columnName == null) {\n return;\n }\n\n const sort = TableUtils.getSortForColumn(model.sort, columnName);\n\n if (!sort) {\n return;\n }\n\n const icon = this.getSortIcon(sort);\n if (!icon) {\n return;\n }\n\n const text = model.textForColumnHeader(modelColumn);\n if (text === undefined) {\n return;\n }\n\n const fontWidth = fontWidths.get(context.font) ?? DEFAULT_FONT_WIDTH;\n assertNotNull(fontWidth);\n const textWidth = text.length * fontWidth;\n const textRight = gridX + columnX + textWidth + headerHorizontalPadding;\n let { maxX } = bounds;\n maxX -= headerHorizontalPadding;\n const defaultX =\n gridX + columnX + columnWidth - headerHorizontalPadding - 1;\n\n const x = textRight > maxX ? textRight + 1 : Math.min(maxX, defaultX);\n const yOffset =\n sort.direction === TableUtils.sortDirection.ascending ? -6 : -12;\n const y = columnHeaderHeight * 0.5 + yOffset;\n\n context.save();\n\n context.beginPath();\n context.rect(columnX, 0, columnWidth, columnHeaderHeight);\n context.clip();\n\n context.fillStyle = theme.headerSortBarColor;\n context.translate(x, y);\n context.fill(icon);\n\n context.restore();\n }\n\n drawFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { isFilterBarShown, quickFilters, advancedFilters } = state;\n\n if (isFilterBarShown) {\n this.drawExpandedFilterHeaders(context, state);\n } else if (\n (quickFilters != null && quickFilters.size > 0) ||\n (advancedFilters != null && advancedFilters.size > 0)\n ) {\n this.drawCollapsedFilterHeaders(context, state);\n }\n }\n\n drawExpandedFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, theme, quickFilters, advancedFilters } = state;\n const { filterBarHeight } = theme;\n\n if (filterBarHeight <= 0) {\n return;\n }\n\n const {\n gridX,\n gridY,\n maxX,\n modelColumns,\n visibleColumns,\n allColumnWidths,\n allColumnXs,\n } = metrics;\n\n const columnHeaderHeight = gridY - filterBarHeight;\n\n context.save();\n\n context.font = theme.font;\n context.textAlign = 'left';\n\n if (\n (quickFilters != null && quickFilters.size > 0) ||\n (advancedFilters != null && advancedFilters.size > 0)\n ) {\n // fill style if a fiter is set on any column\n context.fillStyle = theme.filterBarExpandedActiveBackgroundColor;\n } else {\n // fill style with no filters set\n context.fillStyle = theme.filterBarExpandedBackgroundColor;\n }\n\n // Draw the background\n context.fillRect(gridX, columnHeaderHeight, maxX, filterBarHeight - 1);\n\n // Draw the bottom border\n context.fillStyle = theme.headerBarCasingColor;\n\n context.fillRect(gridX, columnHeaderHeight + filterBarHeight - 1, maxX, 1);\n\n // Draw the filter input boxes\n const y1 = columnHeaderHeight;\n context.strokeStyle = theme.filterBarSeparatorColor;\n context.beginPath();\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const modelColumn = getOrThrow(modelColumns, column);\n const columnX = getOrThrow(allColumnXs, column);\n const columnWidth = getOrThrow(allColumnWidths, column);\n if (model.isFilterable(modelColumn) && columnWidth > 0) {\n const x1 = gridX + (columnX ?? 0);\n context.rect(x1 + 0.5, y1 + 0.5, columnWidth, filterBarHeight - 2); // 1 for the border, 1 for the casing\n }\n }\n context.stroke();\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = getOrThrow(allColumnWidths, column);\n const columnX = getOrThrow(allColumnXs, column);\n const x = columnX + gridX;\n this.drawExpandedFilterHeader(context, state, column, x, columnWidth);\n }\n\n context.restore();\n }\n\n drawExpandedFilterHeader(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n columnX: Coordinate,\n columnWidth: number\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n\n const { metrics, theme, quickFilters, advancedFilters } = state;\n const { modelColumns, gridY } = metrics;\n const {\n filterBarHeight,\n filterBarExpandedActiveCellBackgroundColor,\n filterBarErrorColor,\n filterBarHorizontalPadding,\n headerColor,\n } = theme;\n const columnHeaderHeight = gridY - filterBarHeight;\n const modelColumn = modelColumns.get(column);\n if (modelColumn === undefined) return;\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n if (quickFilter == null && advancedFilter == null) {\n return;\n }\n\n let text = null;\n if (quickFilter != null) {\n const { text: filterText } = quickFilter;\n text = filterText;\n if (!text) {\n text = TableUtils.getFilterText(quickFilter.filter);\n }\n\n if (text != null) {\n const { fontWidths } = metrics;\n let fontWidth = fontWidths.get(context.font);\n if (fontWidth == null || fontWidth === 0) {\n fontWidth = context.measureText('8').width;\n if (!fontWidth) {\n fontWidth = 10;\n }\n }\n\n const maxLength =\n (columnWidth - filterBarHorizontalPadding * 2) / fontWidth;\n if (maxLength <= 0) {\n text = '';\n } else if (text.length > maxLength) {\n text = `${text.substring(0, maxLength - 1)}…`;\n }\n }\n }\n\n context.save();\n\n const isFilterValid = IrisGridRenderer.isFilterValid(\n advancedFilter,\n quickFilter\n );\n if (isFilterValid && filterBarExpandedActiveCellBackgroundColor != null) {\n // draw active filter background inside cell\n context.fillStyle = filterBarExpandedActiveCellBackgroundColor;\n context.fillRect(\n columnX + 1, // +1 left border\n columnHeaderHeight + 1, // +1 top border\n columnWidth - 1, // -1 right border\n filterBarHeight - 3 // -3 top, bottom border and bottom casing\n );\n } else if (filterBarErrorColor != null) {\n // draw error box inside cell\n context.fillStyle = filterBarErrorColor;\n context.lineWidth = 2;\n context.strokeStyle = filterBarErrorColor;\n // Because this is drawn with a strokeRect, we have to add/subtract half the,\n // linewidth from each side to make interior, in addition to accounting for any borders/casings\n const rectLeft = columnX + 2; // 1 for strokeRect, 1 for border\n const rectTop = columnHeaderHeight + 2; // 1 for strokeRect, 1 for border\n const rectWidth = columnWidth - 3; // for 2 border and 1 for strokeRect\n const rectHeight = filterBarHeight - 5; // -2 for strokeRect, -3 for top, bottom border and bottom casing\n context.strokeRect(rectLeft, rectTop, rectWidth, rectHeight);\n }\n\n if (text != null && text !== '') {\n const textX = columnX + filterBarHorizontalPadding;\n const textY = columnHeaderHeight + filterBarHeight * 0.5 + 1; // + 1 for border\n context.fillStyle = headerColor;\n context.fillText(text, textX, textY);\n }\n\n context.restore();\n }\n\n drawCollapsedFilterHeaders(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, theme } = state;\n const { headerSeparatorColor, filterBarCollapsedHeight } = theme;\n\n if (filterBarCollapsedHeight <= 0) {\n return;\n }\n\n const {\n gridX,\n gridY,\n maxX,\n visibleColumns,\n allColumnWidths,\n allColumnXs,\n } = metrics;\n const columnHeaderHeight = gridY - filterBarCollapsedHeight;\n\n context.save();\n\n // Draw the background of the collapsed filter bar\n context.fillStyle = headerSeparatorColor;\n context.fillRect(gridX, columnHeaderHeight, maxX, filterBarCollapsedHeight);\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = allColumnWidths.get(column);\n const columnX = allColumnXs.get(column);\n if (columnX != null && columnWidth != null) {\n const x = columnX + gridX;\n // draw the collapsed cells\n this.drawCollapsedFilterHeader(context, state, column, x, columnWidth);\n }\n }\n\n context.restore();\n }\n\n drawCollapsedFilterHeader(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState,\n column: VisibleIndex,\n columnX: Coordinate,\n columnWidth: number\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n\n const { metrics, theme, quickFilters, advancedFilters } = state;\n const { modelColumns, gridY } = metrics;\n const modelColumn = modelColumns.get(column);\n\n if (modelColumn === undefined) return;\n const quickFilter = quickFilters.get(modelColumn);\n const advancedFilter = advancedFilters.get(modelColumn);\n\n const {\n filterBarCollapsedHeight,\n filterBarActiveColor,\n filterBarActiveBackgroundColor,\n filterBarErrorColor,\n } = theme;\n\n context.save();\n\n const isFilterValid = IrisGridRenderer.isFilterValid(\n advancedFilter,\n quickFilter\n );\n\n if (\n filterBarActiveBackgroundColor != null &&\n quickFilter == null &&\n advancedFilter == null\n ) {\n context.fillStyle = filterBarActiveBackgroundColor;\n } else if (filterBarActiveColor != null && isFilterValid) {\n context.fillStyle = filterBarActiveColor;\n } else if (filterBarErrorColor != null) {\n context.fillStyle = filterBarErrorColor;\n }\n\n const x = columnX + 1; // for gap between columns\n const y = gridY - filterBarCollapsedHeight;\n const rectWidth = columnWidth - 1; // for gap between columns\n const rectHeight = filterBarCollapsedHeight - 1; // for casing bottom\n context.fillRect(x, y, rectWidth, rectHeight);\n\n context.restore();\n }\n\n drawRowFooters(\n context: CanvasRenderingContext2D,\n state: IrisGridRenderState\n ): void {\n const { metrics, model, mouseX, mouseY, theme } = state;\n const {\n gridY,\n gridX,\n maxX,\n modelRows,\n floatingTopHeight,\n floatingBottomHeight,\n floatingRows,\n rowFooterWidth,\n height,\n horizontalBarHeight,\n verticalBarWidth,\n allRowHeights,\n allRowYs,\n width,\n } = metrics;\n // Only draw the footers on the floating rows\n if (rowFooterWidth <= 0 || floatingRows.length === 0) {\n return;\n }\n\n const {\n cellHorizontalPadding,\n floatingGridRowColor,\n floatingRowBackgroundColors,\n headerColor,\n rowHoverBackgroundColor,\n } = theme;\n\n context.translate(gridX, gridY);\n\n context.beginPath();\n const x = Math.min(maxX, width - rowFooterWidth - verticalBarWidth - gridX);\n context.fillStyle = floatingRowBackgroundColors;\n if (floatingTopHeight > 0) {\n context.rect(x, 0, rowFooterWidth, floatingTopHeight);\n }\n if (floatingBottomHeight > 0) {\n context.rect(\n x,\n height - gridY - horizontalBarHeight - floatingBottomHeight,\n rowFooterWidth,\n floatingBottomHeight\n );\n }\n context.fill();\n\n const mouseRow =\n mouseX != null &&\n mouseY != null &&\n mouseX >= gridX &&\n mouseX <= maxX + rowFooterWidth\n ? GridUtils.getRowAtY(mouseY, metrics)\n : null;\n if (\n rowHoverBackgroundColor != null &&\n mouseRow !== null &&\n floatingRows.includes(mouseRow)\n ) {\n context.fillStyle = rowHoverBackgroundColor;\n const y = allRowYs.get(mouseRow);\n const rowHeight = allRowHeights.get(mouseRow);\n assertNotNull(y);\n assertNotNull(rowHeight);\n context.fillRect(x, y, rowFooterWidth, rowHeight);\n }\n\n context.beginPath();\n if (floatingGridRowColor != null) {\n context.strokeStyle = floatingGridRowColor;\n }\n if (floatingTopHeight > 0) {\n context.moveTo(x + 0.5, 0.5);\n context.lineTo(x + 0.5, floatingTopHeight - 0.5);\n }\n if (floatingBottomHeight > 0) {\n const y = height - gridY - horizontalBarHeight - floatingBottomHeight;\n context.moveTo(x - 0.5, y + 0.5);\n context.lineTo(x - 0.5, y + floatingBottomHeight - 0.5);\n }\n context.stroke();\n\n context.fillStyle = headerColor;\n context.textAlign = 'left';\n\n const textX = x + cellHorizontalPadding;\n for (let i = 0; i < floatingRows.length; i += 1) {\n const row = floatingRows[i];\n const rowHeight = allRowHeights.get(row);\n const rowY = allRowYs.get(row);\n const modelRow = modelRows.get(row);\n if (rowY != null && rowHeight != null && modelRow != null) {\n const textY = rowY + rowHeight * 0.5;\n context.fillText(model.textForRowFooter(modelRow), textX, textY);\n }\n }\n\n context.translate(-gridX, -gridY);\n }\n\n getExpandButtonPosition(\n {\n mouseX,\n mouseY,\n metrics,\n theme,\n }: {\n mouseX: Coordinate | null;\n mouseY: Coordinate | null;\n metrics: GridMetrics | undefined;\n theme: GridThemeType;\n },\n depth: number | null\n ): {\n left: Coordinate | null;\n top: Coordinate | null;\n width: number | null;\n height: number | null;\n } {\n const NULL_POSITION = { left: null, top: null, width: null, height: null };\n if (mouseX == null || mouseY == null || depth == null || !metrics) {\n return NULL_POSITION;\n }\n const { rowHeight, left, top } = GridUtils.getCellInfoFromXY(\n mouseX,\n mouseY,\n metrics\n );\n\n assertNotNull(left);\n assertNotNull(rowHeight);\n assertNotNull(top);\n const { cellHorizontalPadding } = theme;\n\n const width = EXPAND_ICON_SIZE + 2 * cellHorizontalPadding;\n\n const buttonLeft = Math.max(left + EXPAND_ICON_SIZE * depth, metrics.gridX);\n const buttonTop = metrics.gridY + top;\n\n return {\n left: buttonLeft,\n top: buttonTop,\n width,\n height: rowHeight,\n };\n }\n}\n\nexport default IrisGridRenderer;\n"],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { ShortcutRegistry, MODIFIER, KEY } from '@deephaven/components';
2
+ var TABLE = {
3
+ TOGGLE_QUICK_FILTER: ShortcutRegistry.createAndAdd({
4
+ id: 'TABLE.TOGGLE_QUICK_FILTER',
5
+ name: 'Toggle Quick Filter',
6
+ shortcut: [MODIFIER.CTRL, KEY.F],
7
+ macShortcut: [MODIFIER.CMD, KEY.F]
8
+ }),
9
+ CLEAR_ALL_FILTERS: ShortcutRegistry.createAndAdd({
10
+ id: 'TABLE.CLEAR_ALL_FILTERS',
11
+ name: 'Clear All Table Filters',
12
+ shortcut: [MODIFIER.CTRL, KEY.E],
13
+ macShortcut: [MODIFIER.CMD, KEY.E]
14
+ }),
15
+ CLEAR_FILTERS: ShortcutRegistry.createAndAdd({
16
+ id: 'TABLE.CLEAR_FILTERS',
17
+ name: 'Clear Active Table Filters',
18
+ shortcut: [MODIFIER.CTRL, MODIFIER.SHIFT, KEY.E],
19
+ macShortcut: [MODIFIER.CMD, MODIFIER.SHIFT, KEY.E]
20
+ }),
21
+ REVERSE: ShortcutRegistry.createAndAdd({
22
+ id: 'TABLE.REVERSE',
23
+ name: 'Reverse',
24
+ shortcut: [MODIFIER.CTRL, KEY.I],
25
+ macShortcut: [MODIFIER.CMD, KEY.I]
26
+ }),
27
+ TOGGLE_SEARCH: ShortcutRegistry.createAndAdd({
28
+ id: 'TABLE.TOGGLE_SEARCH',
29
+ name: 'Toggle Search',
30
+ shortcut: [MODIFIER.CTRL, MODIFIER.SHIFT, KEY.F],
31
+ macShortcut: [MODIFIER.CMD, MODIFIER.SHIFT, KEY.F]
32
+ }),
33
+ GOTO_ROW: ShortcutRegistry.createAndAdd({
34
+ id: 'TABLE.GOTO_ROW',
35
+ name: 'Go to Row',
36
+ shortcut: [MODIFIER.CTRL, KEY.G],
37
+ macShortcut: [MODIFIER.CMD, KEY.G]
38
+ })
39
+ };
40
+ var INPUT_TABLE = {
41
+ COMMIT: ShortcutRegistry.createAndAdd({
42
+ id: 'INPUT_TABLE.COMMIT',
43
+ name: 'Commit',
44
+ shortcut: [MODIFIER.CTRL, KEY.S],
45
+ macShortcut: [MODIFIER.CMD, KEY.S]
46
+ }),
47
+ DISCARD: ShortcutRegistry.createAndAdd({
48
+ id: 'INPUT_TABLE.DISCARD',
49
+ name: 'Discard',
50
+ shortcut: [MODIFIER.CTRL, MODIFIER.ALT, KEY.S],
51
+ macShortcut: [MODIFIER.CMD, MODIFIER.OPTION, KEY.S]
52
+ })
53
+ };
54
+ var IRIS_GRID_SHORTCUTS = {
55
+ TABLE,
56
+ INPUT_TABLE
57
+ };
58
+ export default IRIS_GRID_SHORTCUTS;
59
+ //# sourceMappingURL=IrisGridShortcuts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IrisGridShortcuts.js","names":["ShortcutRegistry","MODIFIER","KEY","TABLE","TOGGLE_QUICK_FILTER","createAndAdd","id","name","shortcut","CTRL","F","macShortcut","CMD","CLEAR_ALL_FILTERS","E","CLEAR_FILTERS","SHIFT","REVERSE","I","TOGGLE_SEARCH","GOTO_ROW","G","INPUT_TABLE","COMMIT","S","DISCARD","ALT","OPTION","IRIS_GRID_SHORTCUTS"],"sources":["../src/IrisGridShortcuts.ts"],"sourcesContent":["import { ShortcutRegistry, MODIFIER, KEY } from '@deephaven/components';\n\nconst TABLE = {\n TOGGLE_QUICK_FILTER: ShortcutRegistry.createAndAdd({\n id: 'TABLE.TOGGLE_QUICK_FILTER',\n name: 'Toggle Quick Filter',\n shortcut: [MODIFIER.CTRL, KEY.F],\n macShortcut: [MODIFIER.CMD, KEY.F],\n }),\n CLEAR_ALL_FILTERS: ShortcutRegistry.createAndAdd({\n id: 'TABLE.CLEAR_ALL_FILTERS',\n name: 'Clear All Table Filters',\n shortcut: [MODIFIER.CTRL, KEY.E],\n macShortcut: [MODIFIER.CMD, KEY.E],\n }),\n CLEAR_FILTERS: ShortcutRegistry.createAndAdd({\n id: 'TABLE.CLEAR_FILTERS',\n name: 'Clear Active Table Filters',\n shortcut: [MODIFIER.CTRL, MODIFIER.SHIFT, KEY.E],\n macShortcut: [MODIFIER.CMD, MODIFIER.SHIFT, KEY.E],\n }),\n REVERSE: ShortcutRegistry.createAndAdd({\n id: 'TABLE.REVERSE',\n name: 'Reverse',\n shortcut: [MODIFIER.CTRL, KEY.I],\n macShortcut: [MODIFIER.CMD, KEY.I],\n }),\n TOGGLE_SEARCH: ShortcutRegistry.createAndAdd({\n id: 'TABLE.TOGGLE_SEARCH',\n name: 'Toggle Search',\n shortcut: [MODIFIER.CTRL, MODIFIER.SHIFT, KEY.F],\n macShortcut: [MODIFIER.CMD, MODIFIER.SHIFT, KEY.F],\n }),\n GOTO_ROW: ShortcutRegistry.createAndAdd({\n id: 'TABLE.GOTO_ROW',\n name: 'Go to Row',\n shortcut: [MODIFIER.CTRL, KEY.G],\n macShortcut: [MODIFIER.CMD, KEY.G],\n }),\n};\n\nconst INPUT_TABLE = {\n COMMIT: ShortcutRegistry.createAndAdd({\n id: 'INPUT_TABLE.COMMIT',\n name: 'Commit',\n shortcut: [MODIFIER.CTRL, KEY.S],\n macShortcut: [MODIFIER.CMD, KEY.S],\n }),\n DISCARD: ShortcutRegistry.createAndAdd({\n id: 'INPUT_TABLE.DISCARD',\n name: 'Discard',\n shortcut: [MODIFIER.CTRL, MODIFIER.ALT, KEY.S],\n macShortcut: [MODIFIER.CMD, MODIFIER.OPTION, KEY.S],\n }),\n};\n\nconst IRIS_GRID_SHORTCUTS = {\n TABLE,\n INPUT_TABLE,\n};\n\nexport default IRIS_GRID_SHORTCUTS;\n"],"mappings":"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"}
@@ -0,0 +1,273 @@
1
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
2
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
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 class-methods-use-this: "off" */
7
+ import memoize from 'memoize-one';
8
+ import { GridRange } from '@deephaven/grid';
9
+ import Log from '@deephaven/log';
10
+ import { Formatter } from '@deephaven/jsapi-utils';
11
+ import { EventShimCustomEvent, PromiseUtils, assertNotNull } from '@deephaven/utils';
12
+ import IrisGridModel from "./IrisGridModel.js";
13
+ import IrisGridTableModelTemplate from "./IrisGridTableModelTemplate.js";
14
+ var log = Log.module('IrisGridTableModel');
15
+
16
+ /**
17
+ * Model for a grid showing an iris data table
18
+ */
19
+
20
+ class IrisGridTableModel extends IrisGridTableModelTemplate {
21
+ /**
22
+ * @param dh JSAPI instance
23
+ * @param table Iris data table to be used in the model
24
+ * @param formatter The formatter to use when getting formats
25
+ * @param inputTable Iris input table associated with this table
26
+ */
27
+ constructor(dh, table) {
28
+ var formatter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Formatter(dh);
29
+ var inputTable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
30
+ super(dh, table, formatter, inputTable);
31
+ _defineProperty(this, "userFrozenColumns", void 0);
32
+ _defineProperty(this, "customColumnList", void 0);
33
+ _defineProperty(this, "formatColumnList", void 0);
34
+ _defineProperty(this, "getMemoizedFrontColumns", memoize(layoutHintsFrontColumns => layoutHintsFrontColumns !== null && layoutHintsFrontColumns !== void 0 ? layoutHintsFrontColumns : []));
35
+ _defineProperty(this, "getMemoizedBackColumns", memoize(layoutHintsBackColumns => layoutHintsBackColumns !== null && layoutHintsBackColumns !== void 0 ? layoutHintsBackColumns : []));
36
+ _defineProperty(this, "getMemoizedFrozenColumns", memoize((layoutHintsFrozenColumns, userFrozenColumns) => {
37
+ var _ref;
38
+ return (_ref = userFrozenColumns !== null && userFrozenColumns !== void 0 ? userFrozenColumns : layoutHintsFrozenColumns) !== null && _ref !== void 0 ? _ref : [];
39
+ }));
40
+ _defineProperty(this, "getCachedFilterableColumnSet", memoize(columns => new Set(columns.map((_, index) => index))));
41
+ this.customColumnList = [];
42
+ this.formatColumnList = [];
43
+ }
44
+ get isExportAvailable() {
45
+ return this.table.freeze != null;
46
+ }
47
+ get isColumnStatisticsAvailable() {
48
+ return this.table.getColumnStatistics != null;
49
+ }
50
+ get isValuesTableAvailable() {
51
+ return this.table.selectDistinct != null && this.table.copy != null;
52
+ }
53
+ get isRollupAvailable() {
54
+ return this.table.rollup != null;
55
+ }
56
+ get isSelectDistinctAvailable() {
57
+ return this.table.selectDistinct != null;
58
+ }
59
+ get isCustomColumnsAvailable() {
60
+ return this.table.applyCustomColumns != null;
61
+ }
62
+ get isFormatColumnsAvailable() {
63
+ return this.table.applyCustomColumns != null;
64
+ }
65
+ get frontColumns() {
66
+ var _this$layoutHints;
67
+ return this.getMemoizedFrontColumns((_this$layoutHints = this.layoutHints) === null || _this$layoutHints === void 0 ? void 0 : _this$layoutHints.frontColumns);
68
+ }
69
+ get backColumns() {
70
+ var _this$layoutHints2;
71
+ return this.getMemoizedBackColumns((_this$layoutHints2 = this.layoutHints) === null || _this$layoutHints2 === void 0 ? void 0 : _this$layoutHints2.backColumns);
72
+ }
73
+ get frozenColumns() {
74
+ var _this$layoutHints3;
75
+ return this.getMemoizedFrozenColumns((_this$layoutHints3 = this.layoutHints) === null || _this$layoutHints3 === void 0 ? void 0 : _this$layoutHints3.frozenColumns, this.userFrozenColumns);
76
+ }
77
+ get layoutHints() {
78
+ return this.table.layoutHints;
79
+ }
80
+ get floatingLeftColumnCount() {
81
+ return this.frozenColumns.length;
82
+ }
83
+ get description() {
84
+ return this.table.description;
85
+ }
86
+ get customColumns() {
87
+ return this.customColumnList;
88
+ }
89
+ set customColumns(customColumns) {
90
+ log.debug2('set customColumns', customColumns, this.customColumnList, customColumns === this.customColumnList);
91
+ if (this.customColumnList.length === 0 && customColumns.length === 0) {
92
+ log.debug('Ignore empty initial customColumns');
93
+ this.customColumnList = customColumns;
94
+ return;
95
+ }
96
+ if (this.customColumnList === customColumns) {
97
+ log.debug('Ignore same customColumns');
98
+ return;
99
+ }
100
+ this.closeSubscription();
101
+ this.customColumnList = customColumns;
102
+ this.table.applyCustomColumns([...customColumns, ...this.formatColumns]);
103
+ this.applyViewport();
104
+ }
105
+ get formatColumns() {
106
+ return this.formatColumnList;
107
+ }
108
+ set formatColumns(formatColumns) {
109
+ log.debug2('set formatColumns', formatColumns, this.formatColumnList, formatColumns === this.formatColumnList);
110
+ if (this.formatColumnList.length === 0 && formatColumns.length === 0) {
111
+ log.debug('Ignore empty initial formatColumns');
112
+ this.formatColumnList = formatColumns;
113
+ return;
114
+ }
115
+ if (this.formatColumnList === formatColumns) {
116
+ log.debug('Ignore same formatColumns');
117
+ return;
118
+ }
119
+ this.closeSubscription();
120
+ this.formatColumnList = formatColumns;
121
+ this.table.applyCustomColumns([...this.customColumns, ...formatColumns]);
122
+ this.applyViewport();
123
+ }
124
+ updateFrozenColumns(columns) {
125
+ this.userFrozenColumns = columns;
126
+ this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.TABLE_CHANGED, {
127
+ detail: this.table
128
+ }));
129
+ }
130
+ set totalsConfig(totalsConfig) {
131
+ log.debug('set totalsConfig', totalsConfig);
132
+ if (totalsConfig === this.totals) {
133
+ // Totals already set, or it will be set when the next model actually gets set
134
+ return;
135
+ }
136
+ this.totals = totalsConfig;
137
+ this.formattedStringData = [];
138
+ if (this.totalsTablePromise != null) {
139
+ this.totalsTablePromise.cancel();
140
+ }
141
+ this.setTotalsTable(null);
142
+ if (totalsConfig == null) {
143
+ this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));
144
+ return;
145
+ }
146
+ this.totalsTablePromise = PromiseUtils.makeCancelable(this.table.getTotalsTable(totalsConfig), table => table.close());
147
+ this.totalsTablePromise.then(totalsTable => {
148
+ this.totalsTablePromise = null;
149
+ this.setTotalsTable(totalsTable);
150
+ }).catch(err => {
151
+ if (PromiseUtils.isCanceled(err)) {
152
+ return;
153
+ }
154
+ log.error('Unable to set next totalsTable', err);
155
+ this.totalsTablePromise = null;
156
+ this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {
157
+ detail: err
158
+ }));
159
+ });
160
+ }
161
+ get isFilterRequired() {
162
+ return this.table.isUncoalesced;
163
+ }
164
+ isFilterable(columnIndex) {
165
+ return this.getCachedFilterableColumnSet(this.columns).has(columnIndex);
166
+ }
167
+ export() {
168
+ var _this = this;
169
+ return _asyncToGenerator(function* () {
170
+ return _this.table.freeze();
171
+ })();
172
+ }
173
+ columnStatistics(column) {
174
+ return this.table.getColumnStatistics(column);
175
+ }
176
+ isColumnMovable(modelIndex) {
177
+ var columnName = this.columns[modelIndex].name;
178
+ if (this.frontColumns.includes(columnName) || this.backColumns.includes(columnName) || this.frozenColumns.includes(columnName)) {
179
+ return false;
180
+ }
181
+ return !this.isKeyColumn(modelIndex);
182
+ }
183
+ isColumnFrozen(modelIndex) {
184
+ return this.frozenColumns.includes(this.columns[modelIndex].name);
185
+ }
186
+ isColumnSortable(modelIndex) {
187
+ var _this$columns$modelIn;
188
+ return (_this$columns$modelIn = this.columns[modelIndex].isSortable) !== null && _this$columns$modelIn !== void 0 ? _this$columns$modelIn : true;
189
+ }
190
+ delete(ranges) {
191
+ var _superprop_getPendingDataMap = () => super.pendingDataMap,
192
+ _superprop_setPendingDataMap = _value => super.pendingDataMap = _value,
193
+ _this2 = this;
194
+ return _asyncToGenerator(function* () {
195
+ var _this2$inputTable;
196
+ if (!_this2.isDeletableRanges(ranges)) {
197
+ throw new Error("Undeletable ranges ".concat(ranges));
198
+ }
199
+ assertNotNull(_this2.inputTable);
200
+ var {
201
+ keyColumns
202
+ } = _this2.inputTable;
203
+ if (keyColumns.length === 0) {
204
+ throw new Error('No key columns to allow deletion');
205
+ }
206
+ var pendingAreaRange = _this2.getPendingAreaRange();
207
+ var pendingRanges = ranges.map(range => GridRange.intersection(pendingAreaRange, range)).filter(range => range != null).map(range => {
208
+ assertNotNull(range);
209
+ return GridRange.offset(range, 0, -(_this2.floatingTopRowCount + _this2.table.size));
210
+ });
211
+ if (pendingRanges.length > 0) {
212
+ var newDataMap = new Map(_superprop_getPendingDataMap());
213
+ for (var i = 0; i < pendingRanges.length; i += 1) {
214
+ var pendingRange = pendingRanges[i];
215
+ assertNotNull(pendingRange.startRow);
216
+ assertNotNull(pendingRange.endRow);
217
+ for (var r = pendingRange.startRow; r <= pendingRange.endRow; r += 1) {
218
+ newDataMap.delete(r);
219
+ }
220
+ }
221
+ _superprop_setPendingDataMap(newDataMap);
222
+ _this2.formattedStringData = [];
223
+ _this2.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED));
224
+ _this2.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));
225
+ }
226
+ var tableAreaRange = _this2.getTableAreaRange();
227
+ var tableRanges = ranges.map(range => GridRange.intersection(tableAreaRange, range)).filter(range => range != null);
228
+ if (tableRanges.length <= 0) {
229
+ return;
230
+ }
231
+ var [data, deleteTable] = yield Promise.all([
232
+ // Need to get the key values of each row
233
+ _this2.snapshot(tableRanges.map(range => {
234
+ assertNotNull(range);
235
+ return new GridRange(0, range.startRow, keyColumns.length - 1, range.endRow);
236
+ })), _this2.table.copy()]);
237
+
238
+ // Now copy the existing table and filter it on the values in the snapshot for the key columns in the input table
239
+ var filters = data.map(row => {
240
+ var columnFilters = [];
241
+ for (var c = 0; c < keyColumns.length; c += 1) {
242
+ var column = keyColumns[c];
243
+ var value = row[c];
244
+ var filterValue = _this2.tableUtils.makeFilterRawValue(column.type, value);
245
+ var _filter = column.filter().eq(filterValue);
246
+ columnFilters.push(_filter);
247
+ }
248
+ return columnFilters.reduce((agg, curr) => {
249
+ var _agg$and;
250
+ return (_agg$and = agg === null || agg === void 0 ? void 0 : agg.and(curr)) !== null && _agg$and !== void 0 ? _agg$and : curr;
251
+ });
252
+ });
253
+ var filter = filters.reduce((agg, curr) => {
254
+ var _agg$or;
255
+ return (_agg$or = agg === null || agg === void 0 ? void 0 : agg.or(curr)) !== null && _agg$or !== void 0 ? _agg$or : curr;
256
+ });
257
+ deleteTable.applyFilter([filter]);
258
+ yield (_this2$inputTable = _this2.inputTable) === null || _this2$inputTable === void 0 ? void 0 : _this2$inputTable.deleteTable(deleteTable);
259
+ deleteTable.close();
260
+ })();
261
+ }
262
+ seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards) {
263
+ var _this3 = this;
264
+ return _asyncToGenerator(function* () {
265
+ return _this3.table.seekRow(startRow, column, valueType, value, insensitive, contains, isBackwards);
266
+ })();
267
+ }
268
+ get isSeekRowAvailable() {
269
+ return this.table.seekRow != null;
270
+ }
271
+ }
272
+ export default IrisGridTableModel;
273
+ //# sourceMappingURL=IrisGridTableModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IrisGridTableModel.js","names":["memoize","GridRange","Log","Formatter","EventShimCustomEvent","PromiseUtils","assertNotNull","IrisGridModel","IrisGridTableModelTemplate","log","module","IrisGridTableModel","constructor","dh","table","formatter","inputTable","layoutHintsFrontColumns","layoutHintsBackColumns","layoutHintsFrozenColumns","userFrozenColumns","columns","Set","map","_","index","customColumnList","formatColumnList","isExportAvailable","freeze","isColumnStatisticsAvailable","getColumnStatistics","isValuesTableAvailable","selectDistinct","copy","isRollupAvailable","rollup","isSelectDistinctAvailable","isCustomColumnsAvailable","applyCustomColumns","isFormatColumnsAvailable","frontColumns","getMemoizedFrontColumns","layoutHints","backColumns","getMemoizedBackColumns","frozenColumns","getMemoizedFrozenColumns","floatingLeftColumnCount","length","description","customColumns","debug2","debug","closeSubscription","formatColumns","applyViewport","updateFrozenColumns","dispatchEvent","EVENT","TABLE_CHANGED","detail","totalsConfig","totals","formattedStringData","totalsTablePromise","cancel","setTotalsTable","UPDATED","makeCancelable","getTotalsTable","close","then","totalsTable","catch","err","isCanceled","error","REQUEST_FAILED","isFilterRequired","isUncoalesced","isFilterable","columnIndex","getCachedFilterableColumnSet","has","export","columnStatistics","column","isColumnMovable","modelIndex","columnName","name","includes","isKeyColumn","isColumnFrozen","isColumnSortable","isSortable","delete","ranges","isDeletableRanges","Error","keyColumns","pendingAreaRange","getPendingAreaRange","pendingRanges","range","intersection","filter","offset","floatingTopRowCount","size","newDataMap","Map","i","pendingRange","startRow","endRow","r","PENDING_DATA_UPDATED","tableAreaRange","getTableAreaRange","tableRanges","data","deleteTable","Promise","all","snapshot","filters","row","columnFilters","c","value","filterValue","tableUtils","makeFilterRawValue","type","eq","push","reduce","agg","curr","and","or","applyFilter","seekRow","valueType","insensitive","contains","isBackwards","isSeekRowAvailable"],"sources":["../src/IrisGridTableModel.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport memoize from 'memoize-one';\nimport { GridRange, ModelIndex } from '@deephaven/grid';\nimport type {\n Column,\n ColumnStatistics,\n CustomColumn,\n dh as DhType,\n InputTable,\n LayoutHints,\n Table,\n ValueTypeUnion,\n} from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport {\n EventShimCustomEvent,\n PromiseUtils,\n assertNotNull,\n} from '@deephaven/utils';\nimport IrisGridModel from './IrisGridModel';\nimport { ColumnName, UITotalsTableConfig, UIRow } from './CommonTypes';\nimport IrisGridTableModelTemplate from './IrisGridTableModelTemplate';\n\nconst log = Log.module('IrisGridTableModel');\n\n/**\n * Model for a grid showing an iris data table\n */\n\nclass IrisGridTableModel extends IrisGridTableModelTemplate<Table, UIRow> {\n userFrozenColumns?: ColumnName[];\n\n customColumnList: string[];\n\n formatColumnList: CustomColumn[];\n\n /**\n * @param dh JSAPI instance\n * @param table Iris data table to be used in the model\n * @param formatter The formatter to use when getting formats\n * @param inputTable Iris input table associated with this table\n */\n constructor(\n dh: DhType,\n table: Table,\n formatter = new Formatter(dh),\n inputTable: InputTable | null = null\n ) {\n super(dh, table, formatter, inputTable);\n this.customColumnList = [];\n this.formatColumnList = [];\n }\n\n get isExportAvailable(): boolean {\n return this.table.freeze != null;\n }\n\n get isColumnStatisticsAvailable(): boolean {\n return this.table.getColumnStatistics != null;\n }\n\n get isValuesTableAvailable(): boolean {\n return this.table.selectDistinct != null && this.table.copy != null;\n }\n\n get isRollupAvailable(): boolean {\n return this.table.rollup != null;\n }\n\n get isSelectDistinctAvailable(): boolean {\n return this.table.selectDistinct != null;\n }\n\n get isCustomColumnsAvailable(): boolean {\n return this.table.applyCustomColumns != null;\n }\n\n get isFormatColumnsAvailable(): boolean {\n return this.table.applyCustomColumns != null;\n }\n\n getMemoizedFrontColumns = memoize(\n (layoutHintsFrontColumns: ColumnName[] | undefined) =>\n layoutHintsFrontColumns ?? []\n );\n\n get frontColumns(): ColumnName[] {\n return this.getMemoizedFrontColumns(this.layoutHints?.frontColumns);\n }\n\n getMemoizedBackColumns = memoize(\n (layoutHintsBackColumns: ColumnName[] | undefined) =>\n layoutHintsBackColumns ?? []\n );\n\n get backColumns(): ColumnName[] {\n return this.getMemoizedBackColumns(this.layoutHints?.backColumns);\n }\n\n getMemoizedFrozenColumns = memoize(\n (\n layoutHintsFrozenColumns?: ColumnName[],\n userFrozenColumns?: ColumnName[]\n ): ColumnName[] => userFrozenColumns ?? layoutHintsFrozenColumns ?? []\n );\n\n get frozenColumns(): ColumnName[] {\n return this.getMemoizedFrozenColumns(\n this.layoutHints?.frozenColumns,\n this.userFrozenColumns\n );\n }\n\n get layoutHints(): LayoutHints {\n return this.table.layoutHints;\n }\n\n get floatingLeftColumnCount(): number {\n return this.frozenColumns.length;\n }\n\n get description(): string {\n return this.table.description;\n }\n\n get customColumns(): ColumnName[] {\n return this.customColumnList;\n }\n\n set customColumns(customColumns: ColumnName[]) {\n log.debug2(\n 'set customColumns',\n customColumns,\n this.customColumnList,\n customColumns === this.customColumnList\n );\n if (this.customColumnList.length === 0 && customColumns.length === 0) {\n log.debug('Ignore empty initial customColumns');\n this.customColumnList = customColumns;\n return;\n }\n if (this.customColumnList === customColumns) {\n log.debug('Ignore same customColumns');\n return;\n }\n this.closeSubscription();\n this.customColumnList = customColumns;\n this.table.applyCustomColumns([...customColumns, ...this.formatColumns]);\n this.applyViewport();\n }\n\n get formatColumns(): CustomColumn[] {\n return this.formatColumnList;\n }\n\n set formatColumns(formatColumns: CustomColumn[]) {\n log.debug2(\n 'set formatColumns',\n formatColumns,\n this.formatColumnList,\n formatColumns === this.formatColumnList\n );\n if (this.formatColumnList.length === 0 && formatColumns.length === 0) {\n log.debug('Ignore empty initial formatColumns');\n this.formatColumnList = formatColumns;\n return;\n }\n if (this.formatColumnList === formatColumns) {\n log.debug('Ignore same formatColumns');\n return;\n }\n this.closeSubscription();\n this.formatColumnList = formatColumns;\n this.table.applyCustomColumns([...this.customColumns, ...formatColumns]);\n this.applyViewport();\n }\n\n updateFrozenColumns(columns: ColumnName[]): void {\n this.userFrozenColumns = columns;\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.TABLE_CHANGED, {\n detail: this.table,\n })\n );\n }\n\n set totalsConfig(totalsConfig: UITotalsTableConfig | null) {\n log.debug('set totalsConfig', totalsConfig);\n\n if (totalsConfig === this.totals) {\n // Totals already set, or it will be set when the next model actually gets set\n return;\n }\n\n this.totals = totalsConfig;\n this.formattedStringData = [];\n\n if (this.totalsTablePromise != null) {\n this.totalsTablePromise.cancel();\n }\n\n this.setTotalsTable(null);\n\n if (totalsConfig == null) {\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n return;\n }\n\n this.totalsTablePromise = PromiseUtils.makeCancelable(\n this.table.getTotalsTable(totalsConfig),\n table => table.close()\n );\n this.totalsTablePromise\n .then(totalsTable => {\n this.totalsTablePromise = null;\n this.setTotalsTable(totalsTable);\n })\n .catch(err => {\n if (PromiseUtils.isCanceled(err)) {\n return;\n }\n\n log.error('Unable to set next totalsTable', err);\n this.totalsTablePromise = null;\n\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.REQUEST_FAILED, {\n detail: err,\n })\n );\n });\n }\n\n get isFilterRequired(): boolean {\n return this.table.isUncoalesced;\n }\n\n isFilterable(columnIndex: ModelIndex): boolean {\n return this.getCachedFilterableColumnSet(this.columns).has(columnIndex);\n }\n\n async export(): Promise<Table> {\n return this.table.freeze();\n }\n\n columnStatistics(column: Column): Promise<ColumnStatistics> {\n return this.table.getColumnStatistics(column);\n }\n\n getCachedFilterableColumnSet = memoize(\n (columns: Column[]) =>\n new Set(columns.map((_: Column, index: ModelIndex) => index))\n );\n\n isColumnMovable(modelIndex: ModelIndex): boolean {\n const columnName = this.columns[modelIndex].name;\n if (\n this.frontColumns.includes(columnName) ||\n this.backColumns.includes(columnName) ||\n this.frozenColumns.includes(columnName)\n ) {\n return false;\n }\n return !this.isKeyColumn(modelIndex);\n }\n\n isColumnFrozen(modelIndex: ModelIndex): boolean {\n return this.frozenColumns.includes(this.columns[modelIndex].name);\n }\n\n isColumnSortable(modelIndex: ModelIndex): boolean {\n return this.columns[modelIndex].isSortable ?? true;\n }\n\n async delete(ranges: GridRange[]): Promise<void> {\n if (!this.isDeletableRanges(ranges)) {\n throw new Error(`Undeletable ranges ${ranges}`);\n }\n\n assertNotNull(this.inputTable);\n const { keyColumns } = this.inputTable;\n if (keyColumns.length === 0) {\n throw new Error('No key columns to allow deletion');\n }\n\n const pendingAreaRange = this.getPendingAreaRange();\n const pendingRanges = ranges\n .map(range => GridRange.intersection(pendingAreaRange, range))\n .filter(range => range != null)\n .map(range => {\n assertNotNull(range);\n\n return GridRange.offset(\n range,\n 0,\n -(this.floatingTopRowCount + this.table.size)\n );\n });\n\n if (pendingRanges.length > 0) {\n const newDataMap = new Map(super.pendingDataMap);\n for (let i = 0; i < pendingRanges.length; i += 1) {\n const pendingRange = pendingRanges[i];\n assertNotNull(pendingRange.startRow);\n assertNotNull(pendingRange.endRow);\n for (let r = pendingRange.startRow; r <= pendingRange.endRow; r += 1) {\n newDataMap.delete(r);\n }\n }\n super.pendingDataMap = newDataMap;\n\n this.formattedStringData = [];\n\n this.dispatchEvent(\n new EventShimCustomEvent(IrisGridModel.EVENT.PENDING_DATA_UPDATED)\n );\n\n this.dispatchEvent(new EventShimCustomEvent(IrisGridModel.EVENT.UPDATED));\n }\n\n const tableAreaRange = this.getTableAreaRange();\n const tableRanges = ranges\n .map(range => GridRange.intersection(tableAreaRange, range))\n .filter(range => range != null);\n if (tableRanges.length <= 0) {\n return;\n }\n const [data, deleteTable] = await Promise.all([\n // Need to get the key values of each row\n this.snapshot(\n tableRanges.map(range => {\n assertNotNull(range);\n return new GridRange(\n 0,\n range.startRow,\n keyColumns.length - 1,\n range.endRow\n );\n })\n ),\n this.table.copy(),\n ]);\n\n // Now copy the existing table and filter it on the values in the snapshot for the key columns in the input table\n const filters = data.map(row => {\n const columnFilters = [];\n for (let c = 0; c < keyColumns.length; c += 1) {\n const column = keyColumns[c];\n const value = row[c];\n const filterValue = this.tableUtils.makeFilterRawValue(\n column.type,\n value\n );\n const filter = column.filter().eq(filterValue);\n columnFilters.push(filter);\n }\n return columnFilters.reduce((agg, curr) => agg?.and(curr) ?? curr);\n });\n\n const filter = filters.reduce((agg, curr) => agg?.or(curr) ?? curr);\n\n deleteTable.applyFilter([filter]);\n\n await this.inputTable?.deleteTable(deleteTable);\n deleteTable.close();\n }\n\n async seekRow(\n startRow: number,\n column: Column,\n valueType: ValueTypeUnion,\n value: unknown,\n insensitive?: boolean,\n contains?: boolean,\n isBackwards?: boolean\n ): Promise<number> {\n return this.table.seekRow(\n startRow,\n column,\n valueType,\n value,\n insensitive,\n contains,\n isBackwards\n );\n }\n\n get isSeekRowAvailable(): boolean {\n return this.table.seekRow != null;\n }\n}\n\nexport default IrisGridTableModel;\n"],"mappings":";;;;;AAAA;AACA,OAAOA,OAAO,MAAM,aAAa;AACjC,SAASC,SAAS,QAAoB,iBAAiB;AAWvD,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,SAAS,QAAQ,wBAAwB;AAClD,SACEC,oBAAoB,EACpBC,YAAY,EACZC,aAAa,QACR,kBAAkB;AAAC,OACnBC,aAAa;AAAA,OAEbC,0BAA0B;AAEjC,IAAMC,GAAG,GAAGP,GAAG,CAACQ,MAAM,CAAC,oBAAoB,CAAC;;AAE5C;AACA;AACA;;AAEA,MAAMC,kBAAkB,SAASH,0BAA0B,CAAe;EAOxE;AACF;AACA;AACA;AACA;AACA;EACEI,WAAW,CACTC,EAAU,EACVC,KAAY,EAGZ;IAAA,IAFAC,SAAS,uEAAG,IAAIZ,SAAS,CAACU,EAAE,CAAC;IAAA,IAC7BG,UAA6B,uEAAG,IAAI;IAEpC,KAAK,CAACH,EAAE,EAAEC,KAAK,EAAEC,SAAS,EAAEC,UAAU,CAAC;IAAC;IAAA;IAAA;IAAA,iDAiChBhB,OAAO,CAC9BiB,uBAAiD,IAChDA,uBAAuB,aAAvBA,uBAAuB,cAAvBA,uBAAuB,GAAI,EAAE,CAChC;IAAA,gDAMwBjB,OAAO,CAC7BkB,sBAAgD,IAC/CA,sBAAsB,aAAtBA,sBAAsB,cAAtBA,sBAAsB,GAAI,EAAE,CAC/B;IAAA,kDAM0BlB,OAAO,CAChC,CACEmB,wBAAuC,EACvCC,iBAAgC;MAAA;MAAA,eACfA,iBAAiB,aAAjBA,iBAAiB,cAAjBA,iBAAiB,GAAID,wBAAwB,uCAAI,EAAE;IAAA,EACvE;IAAA,sDAiJ8BnB,OAAO,CACnCqB,OAAiB,IAChB,IAAIC,GAAG,CAACD,OAAO,CAACE,GAAG,CAAC,CAACC,CAAS,EAAEC,KAAiB,KAAKA,KAAK,CAAC,CAAC,CAChE;IA3MC,IAAI,CAACC,gBAAgB,GAAG,EAAE;IAC1B,IAAI,CAACC,gBAAgB,GAAG,EAAE;EAC5B;EAEA,IAAIC,iBAAiB,GAAY;IAC/B,OAAO,IAAI,CAACd,KAAK,CAACe,MAAM,IAAI,IAAI;EAClC;EAEA,IAAIC,2BAA2B,GAAY;IACzC,OAAO,IAAI,CAAChB,KAAK,CAACiB,mBAAmB,IAAI,IAAI;EAC/C;EAEA,IAAIC,sBAAsB,GAAY;IACpC,OAAO,IAAI,CAAClB,KAAK,CAACmB,cAAc,IAAI,IAAI,IAAI,IAAI,CAACnB,KAAK,CAACoB,IAAI,IAAI,IAAI;EACrE;EAEA,IAAIC,iBAAiB,GAAY;IAC/B,OAAO,IAAI,CAACrB,KAAK,CAACsB,MAAM,IAAI,IAAI;EAClC;EAEA,IAAIC,yBAAyB,GAAY;IACvC,OAAO,IAAI,CAACvB,KAAK,CAACmB,cAAc,IAAI,IAAI;EAC1C;EAEA,IAAIK,wBAAwB,GAAY;IACtC,OAAO,IAAI,CAACxB,KAAK,CAACyB,kBAAkB,IAAI,IAAI;EAC9C;EAEA,IAAIC,wBAAwB,GAAY;IACtC,OAAO,IAAI,CAAC1B,KAAK,CAACyB,kBAAkB,IAAI,IAAI;EAC9C;EAOA,IAAIE,YAAY,GAAiB;IAAA;IAC/B,OAAO,IAAI,CAACC,uBAAuB,sBAAC,IAAI,CAACC,WAAW,sDAAhB,kBAAkBF,YAAY,CAAC;EACrE;EAOA,IAAIG,WAAW,GAAiB;IAAA;IAC9B,OAAO,IAAI,CAACC,sBAAsB,uBAAC,IAAI,CAACF,WAAW,uDAAhB,mBAAkBC,WAAW,CAAC;EACnE;EASA,IAAIE,aAAa,GAAiB;IAAA;IAChC,OAAO,IAAI,CAACC,wBAAwB,uBAClC,IAAI,CAACJ,WAAW,uDAAhB,mBAAkBG,aAAa,EAC/B,IAAI,CAAC1B,iBAAiB,CACvB;EACH;EAEA,IAAIuB,WAAW,GAAgB;IAC7B,OAAO,IAAI,CAAC7B,KAAK,CAAC6B,WAAW;EAC/B;EAEA,IAAIK,uBAAuB,GAAW;IACpC,OAAO,IAAI,CAACF,aAAa,CAACG,MAAM;EAClC;EAEA,IAAIC,WAAW,GAAW;IACxB,OAAO,IAAI,CAACpC,KAAK,CAACoC,WAAW;EAC/B;EAEA,IAAIC,aAAa,GAAiB;IAChC,OAAO,IAAI,CAACzB,gBAAgB;EAC9B;EAEA,IAAIyB,aAAa,CAACA,aAA2B,EAAE;IAC7C1C,GAAG,CAAC2C,MAAM,CACR,mBAAmB,EACnBD,aAAa,EACb,IAAI,CAACzB,gBAAgB,EACrByB,aAAa,KAAK,IAAI,CAACzB,gBAAgB,CACxC;IACD,IAAI,IAAI,CAACA,gBAAgB,CAACuB,MAAM,KAAK,CAAC,IAAIE,aAAa,CAACF,MAAM,KAAK,CAAC,EAAE;MACpExC,GAAG,CAAC4C,KAAK,CAAC,oCAAoC,CAAC;MAC/C,IAAI,CAAC3B,gBAAgB,GAAGyB,aAAa;MACrC;IACF;IACA,IAAI,IAAI,CAACzB,gBAAgB,KAAKyB,aAAa,EAAE;MAC3C1C,GAAG,CAAC4C,KAAK,CAAC,2BAA2B,CAAC;MACtC;IACF;IACA,IAAI,CAACC,iBAAiB,EAAE;IACxB,IAAI,CAAC5B,gBAAgB,GAAGyB,aAAa;IACrC,IAAI,CAACrC,KAAK,CAACyB,kBAAkB,CAAC,CAAC,GAAGY,aAAa,EAAE,GAAG,IAAI,CAACI,aAAa,CAAC,CAAC;IACxE,IAAI,CAACC,aAAa,EAAE;EACtB;EAEA,IAAID,aAAa,GAAmB;IAClC,OAAO,IAAI,CAAC5B,gBAAgB;EAC9B;EAEA,IAAI4B,aAAa,CAACA,aAA6B,EAAE;IAC/C9C,GAAG,CAAC2C,MAAM,CACR,mBAAmB,EACnBG,aAAa,EACb,IAAI,CAAC5B,gBAAgB,EACrB4B,aAAa,KAAK,IAAI,CAAC5B,gBAAgB,CACxC;IACD,IAAI,IAAI,CAACA,gBAAgB,CAACsB,MAAM,KAAK,CAAC,IAAIM,aAAa,CAACN,MAAM,KAAK,CAAC,EAAE;MACpExC,GAAG,CAAC4C,KAAK,CAAC,oCAAoC,CAAC;MAC/C,IAAI,CAAC1B,gBAAgB,GAAG4B,aAAa;MACrC;IACF;IACA,IAAI,IAAI,CAAC5B,gBAAgB,KAAK4B,aAAa,EAAE;MAC3C9C,GAAG,CAAC4C,KAAK,CAAC,2BAA2B,CAAC;MACtC;IACF;IACA,IAAI,CAACC,iBAAiB,EAAE;IACxB,IAAI,CAAC3B,gBAAgB,GAAG4B,aAAa;IACrC,IAAI,CAACzC,KAAK,CAACyB,kBAAkB,CAAC,CAAC,GAAG,IAAI,CAACY,aAAa,EAAE,GAAGI,aAAa,CAAC,CAAC;IACxE,IAAI,CAACC,aAAa,EAAE;EACtB;EAEAC,mBAAmB,CAACpC,OAAqB,EAAQ;IAC/C,IAAI,CAACD,iBAAiB,GAAGC,OAAO;IAChC,IAAI,CAACqC,aAAa,CAChB,IAAItD,oBAAoB,CAACG,aAAa,CAACoD,KAAK,CAACC,aAAa,EAAE;MAC1DC,MAAM,EAAE,IAAI,CAAC/C;IACf,CAAC,CAAC,CACH;EACH;EAEA,IAAIgD,YAAY,CAACA,YAAwC,EAAE;IACzDrD,GAAG,CAAC4C,KAAK,CAAC,kBAAkB,EAAES,YAAY,CAAC;IAE3C,IAAIA,YAAY,KAAK,IAAI,CAACC,MAAM,EAAE;MAChC;MACA;IACF;IAEA,IAAI,CAACA,MAAM,GAAGD,YAAY;IAC1B,IAAI,CAACE,mBAAmB,GAAG,EAAE;IAE7B,IAAI,IAAI,CAACC,kBAAkB,IAAI,IAAI,EAAE;MACnC,IAAI,CAACA,kBAAkB,CAACC,MAAM,EAAE;IAClC;IAEA,IAAI,CAACC,cAAc,CAAC,IAAI,CAAC;IAEzB,IAAIL,YAAY,IAAI,IAAI,EAAE;MACxB,IAAI,CAACJ,aAAa,CAAC,IAAItD,oBAAoB,CAACG,aAAa,CAACoD,KAAK,CAACS,OAAO,CAAC,CAAC;MACzE;IACF;IAEA,IAAI,CAACH,kBAAkB,GAAG5D,YAAY,CAACgE,cAAc,CACnD,IAAI,CAACvD,KAAK,CAACwD,cAAc,CAACR,YAAY,CAAC,EACvChD,KAAK,IAAIA,KAAK,CAACyD,KAAK,EAAE,CACvB;IACD,IAAI,CAACN,kBAAkB,CACpBO,IAAI,CAACC,WAAW,IAAI;MACnB,IAAI,CAACR,kBAAkB,GAAG,IAAI;MAC9B,IAAI,CAACE,cAAc,CAACM,WAAW,CAAC;IAClC,CAAC,CAAC,CACDC,KAAK,CAACC,GAAG,IAAI;MACZ,IAAItE,YAAY,CAACuE,UAAU,CAACD,GAAG,CAAC,EAAE;QAChC;MACF;MAEAlE,GAAG,CAACoE,KAAK,CAAC,gCAAgC,EAAEF,GAAG,CAAC;MAChD,IAAI,CAACV,kBAAkB,GAAG,IAAI;MAE9B,IAAI,CAACP,aAAa,CAChB,IAAItD,oBAAoB,CAACG,aAAa,CAACoD,KAAK,CAACmB,cAAc,EAAE;QAC3DjB,MAAM,EAAEc;MACV,CAAC,CAAC,CACH;IACH,CAAC,CAAC;EACN;EAEA,IAAII,gBAAgB,GAAY;IAC9B,OAAO,IAAI,CAACjE,KAAK,CAACkE,aAAa;EACjC;EAEAC,YAAY,CAACC,WAAuB,EAAW;IAC7C,OAAO,IAAI,CAACC,4BAA4B,CAAC,IAAI,CAAC9D,OAAO,CAAC,CAAC+D,GAAG,CAACF,WAAW,CAAC;EACzE;EAEMG,MAAM,GAAmB;IAAA;IAAA;MAC7B,OAAO,KAAI,CAACvE,KAAK,CAACe,MAAM,EAAE;IAAC;EAC7B;EAEAyD,gBAAgB,CAACC,MAAc,EAA6B;IAC1D,OAAO,IAAI,CAACzE,KAAK,CAACiB,mBAAmB,CAACwD,MAAM,CAAC;EAC/C;EAOAC,eAAe,CAACC,UAAsB,EAAW;IAC/C,IAAMC,UAAU,GAAG,IAAI,CAACrE,OAAO,CAACoE,UAAU,CAAC,CAACE,IAAI;IAChD,IACE,IAAI,CAAClD,YAAY,CAACmD,QAAQ,CAACF,UAAU,CAAC,IACtC,IAAI,CAAC9C,WAAW,CAACgD,QAAQ,CAACF,UAAU,CAAC,IACrC,IAAI,CAAC5C,aAAa,CAAC8C,QAAQ,CAACF,UAAU,CAAC,EACvC;MACA,OAAO,KAAK;IACd;IACA,OAAO,CAAC,IAAI,CAACG,WAAW,CAACJ,UAAU,CAAC;EACtC;EAEAK,cAAc,CAACL,UAAsB,EAAW;IAC9C,OAAO,IAAI,CAAC3C,aAAa,CAAC8C,QAAQ,CAAC,IAAI,CAACvE,OAAO,CAACoE,UAAU,CAAC,CAACE,IAAI,CAAC;EACnE;EAEAI,gBAAgB,CAACN,UAAsB,EAAW;IAAA;IAChD,gCAAO,IAAI,CAACpE,OAAO,CAACoE,UAAU,CAAC,CAACO,UAAU,yEAAI,IAAI;EACpD;EAEMC,MAAM,CAACC,MAAmB,EAAiB;IAAA;MAAA;MAAA;IAAA;MAAA;MAC/C,IAAI,CAAC,MAAI,CAACC,iBAAiB,CAACD,MAAM,CAAC,EAAE;QACnC,MAAM,IAAIE,KAAK,8BAAuBF,MAAM,EAAG;MACjD;MAEA5F,aAAa,CAAC,MAAI,CAACU,UAAU,CAAC;MAC9B,IAAM;QAAEqF;MAAW,CAAC,GAAG,MAAI,CAACrF,UAAU;MACtC,IAAIqF,UAAU,CAACpD,MAAM,KAAK,CAAC,EAAE;QAC3B,MAAM,IAAImD,KAAK,CAAC,kCAAkC,CAAC;MACrD;MAEA,IAAME,gBAAgB,GAAG,MAAI,CAACC,mBAAmB,EAAE;MACnD,IAAMC,aAAa,GAAGN,MAAM,CACzB3E,GAAG,CAACkF,KAAK,IAAIxG,SAAS,CAACyG,YAAY,CAACJ,gBAAgB,EAAEG,KAAK,CAAC,CAAC,CAC7DE,MAAM,CAACF,KAAK,IAAIA,KAAK,IAAI,IAAI,CAAC,CAC9BlF,GAAG,CAACkF,KAAK,IAAI;QACZnG,aAAa,CAACmG,KAAK,CAAC;QAEpB,OAAOxG,SAAS,CAAC2G,MAAM,CACrBH,KAAK,EACL,CAAC,EACD,EAAE,MAAI,CAACI,mBAAmB,GAAG,MAAI,CAAC/F,KAAK,CAACgG,IAAI,CAAC,CAC9C;MACH,CAAC,CAAC;MAEJ,IAAIN,aAAa,CAACvD,MAAM,GAAG,CAAC,EAAE;QAC5B,IAAM8D,UAAU,GAAG,IAAIC,GAAG,gCAAsB;QAChD,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGT,aAAa,CAACvD,MAAM,EAAEgE,CAAC,IAAI,CAAC,EAAE;UAChD,IAAMC,YAAY,GAAGV,aAAa,CAACS,CAAC,CAAC;UACrC3G,aAAa,CAAC4G,YAAY,CAACC,QAAQ,CAAC;UACpC7G,aAAa,CAAC4G,YAAY,CAACE,MAAM,CAAC;UAClC,KAAK,IAAIC,CAAC,GAAGH,YAAY,CAACC,QAAQ,EAAEE,CAAC,IAAIH,YAAY,CAACE,MAAM,EAAEC,CAAC,IAAI,CAAC,EAAE;YACpEN,UAAU,CAACd,MAAM,CAACoB,CAAC,CAAC;UACtB;QACF;QACA,6BAAuBN,UAAU;QAEjC,MAAI,CAAC/C,mBAAmB,GAAG,EAAE;QAE7B,MAAI,CAACN,aAAa,CAChB,IAAItD,oBAAoB,CAACG,aAAa,CAACoD,KAAK,CAAC2D,oBAAoB,CAAC,CACnE;QAED,MAAI,CAAC5D,aAAa,CAAC,IAAItD,oBAAoB,CAACG,aAAa,CAACoD,KAAK,CAACS,OAAO,CAAC,CAAC;MAC3E;MAEA,IAAMmD,cAAc,GAAG,MAAI,CAACC,iBAAiB,EAAE;MAC/C,IAAMC,WAAW,GAAGvB,MAAM,CACvB3E,GAAG,CAACkF,KAAK,IAAIxG,SAAS,CAACyG,YAAY,CAACa,cAAc,EAAEd,KAAK,CAAC,CAAC,CAC3DE,MAAM,CAACF,KAAK,IAAIA,KAAK,IAAI,IAAI,CAAC;MACjC,IAAIgB,WAAW,CAACxE,MAAM,IAAI,CAAC,EAAE;QAC3B;MACF;MACA,IAAM,CAACyE,IAAI,EAAEC,WAAW,CAAC,SAASC,OAAO,CAACC,GAAG,CAAC;MAC5C;MACA,MAAI,CAACC,QAAQ,CACXL,WAAW,CAAClG,GAAG,CAACkF,KAAK,IAAI;QACvBnG,aAAa,CAACmG,KAAK,CAAC;QACpB,OAAO,IAAIxG,SAAS,CAClB,CAAC,EACDwG,KAAK,CAACU,QAAQ,EACdd,UAAU,CAACpD,MAAM,GAAG,CAAC,EACrBwD,KAAK,CAACW,MAAM,CACb;MACH,CAAC,CAAC,CACH,EACD,MAAI,CAACtG,KAAK,CAACoB,IAAI,EAAE,CAClB,CAAC;;MAEF;MACA,IAAM6F,OAAO,GAAGL,IAAI,CAACnG,GAAG,CAACyG,GAAG,IAAI;QAC9B,IAAMC,aAAa,GAAG,EAAE;QACxB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG7B,UAAU,CAACpD,MAAM,EAAEiF,CAAC,IAAI,CAAC,EAAE;UAC7C,IAAM3C,MAAM,GAAGc,UAAU,CAAC6B,CAAC,CAAC;UAC5B,IAAMC,KAAK,GAAGH,GAAG,CAACE,CAAC,CAAC;UACpB,IAAME,WAAW,GAAG,MAAI,CAACC,UAAU,CAACC,kBAAkB,CACpD/C,MAAM,CAACgD,IAAI,EACXJ,KAAK,CACN;UACD,IAAMxB,OAAM,GAAGpB,MAAM,CAACoB,MAAM,EAAE,CAAC6B,EAAE,CAACJ,WAAW,CAAC;UAC9CH,aAAa,CAACQ,IAAI,CAAC9B,OAAM,CAAC;QAC5B;QACA,OAAOsB,aAAa,CAACS,MAAM,CAAC,CAACC,GAAG,EAAEC,IAAI;UAAA;UAAA,mBAAKD,GAAG,aAAHA,GAAG,uBAAHA,GAAG,CAAEE,GAAG,CAACD,IAAI,CAAC,+CAAIA,IAAI;QAAA,EAAC;MACpE,CAAC,CAAC;MAEF,IAAMjC,MAAM,GAAGoB,OAAO,CAACW,MAAM,CAAC,CAACC,GAAG,EAAEC,IAAI;QAAA;QAAA,kBAAKD,GAAG,aAAHA,GAAG,uBAAHA,GAAG,CAAEG,EAAE,CAACF,IAAI,CAAC,6CAAIA,IAAI;MAAA,EAAC;MAEnEjB,WAAW,CAACoB,WAAW,CAAC,CAACpC,MAAM,CAAC,CAAC;MAEjC,2BAAM,MAAI,CAAC3F,UAAU,sDAAf,kBAAiB2G,WAAW,CAACA,WAAW,CAAC;MAC/CA,WAAW,CAACpD,KAAK,EAAE;IAAC;EACtB;EAEMyE,OAAO,CACX7B,QAAgB,EAChB5B,MAAc,EACd0D,SAAyB,EACzBd,KAAc,EACde,WAAqB,EACrBC,QAAkB,EAClBC,WAAqB,EACJ;IAAA;IAAA;MACjB,OAAO,MAAI,CAACtI,KAAK,CAACkI,OAAO,CACvB7B,QAAQ,EACR5B,MAAM,EACN0D,SAAS,EACTd,KAAK,EACLe,WAAW,EACXC,QAAQ,EACRC,WAAW,CACZ;IAAC;EACJ;EAEA,IAAIC,kBAAkB,GAAY;IAChC,OAAO,IAAI,CAACvI,KAAK,CAACkI,OAAO,IAAI,IAAI;EACnC;AACF;AAEA,eAAerI,kBAAkB"}