@deephaven/iris-grid 0.22.3-embed-pandas.11 → 0.23.1-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/dist/AdvancedFilterCreator.d.ts +1 -1
  2. package/dist/AdvancedFilterCreator.d.ts.map +1 -1
  3. package/dist/AdvancedFilterCreator.js +7 -65
  4. package/dist/AdvancedFilterCreator.js.map +1 -1
  5. package/dist/AdvancedFilterCreatorFilterItem.d.ts +1 -1
  6. package/dist/AdvancedFilterCreatorFilterItem.d.ts.map +1 -1
  7. package/dist/AdvancedFilterCreatorFilterItem.js +0 -23
  8. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
  9. package/dist/AdvancedFilterCreatorSelectValue.js +0 -52
  10. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  11. package/dist/AdvancedFilterCreatorSelectValueList.d.ts +1 -5
  12. package/dist/AdvancedFilterCreatorSelectValueList.d.ts.map +1 -1
  13. package/dist/AdvancedFilterCreatorSelectValueList.js +2 -42
  14. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  15. package/dist/ColumnHeaderGroup.js +0 -11
  16. package/dist/ColumnHeaderGroup.js.map +1 -1
  17. package/dist/ColumnStatistics.d.ts +0 -2
  18. package/dist/ColumnStatistics.d.ts.map +1 -1
  19. package/dist/ColumnStatistics.js +8 -40
  20. package/dist/ColumnStatistics.js.map +1 -1
  21. package/dist/CommonTypes.d.ts +14 -14
  22. package/dist/CommonTypes.d.ts.map +1 -1
  23. package/dist/CrossColumnSearch.js +2 -23
  24. package/dist/CrossColumnSearch.js.map +1 -1
  25. package/dist/FilterInputField.js +2 -36
  26. package/dist/FilterInputField.js.map +1 -1
  27. package/dist/GotoRow.d.ts +1 -1
  28. package/dist/GotoRow.d.ts.map +1 -1
  29. package/dist/GotoRow.js +2 -7
  30. package/dist/GotoRow.js.map +1 -1
  31. package/dist/IrisGrid.d.ts +46 -40
  32. package/dist/IrisGrid.d.ts.map +1 -1
  33. package/dist/IrisGrid.js +84 -526
  34. package/dist/IrisGrid.js.map +1 -1
  35. package/dist/IrisGridBottomBar.d.ts +2 -2
  36. package/dist/IrisGridBottomBar.d.ts.map +1 -1
  37. package/dist/IrisGridBottomBar.js +2 -2
  38. package/dist/IrisGridBottomBar.js.map +1 -1
  39. package/dist/IrisGridCellOverflowModal.d.ts.map +1 -1
  40. package/dist/IrisGridCellOverflowModal.js +13 -46
  41. package/dist/IrisGridCellOverflowModal.js.map +1 -1
  42. package/dist/IrisGridCopyHandler.d.ts +3 -3
  43. package/dist/IrisGridCopyHandler.d.ts.map +1 -1
  44. package/dist/IrisGridCopyHandler.js +6 -53
  45. package/dist/IrisGridCopyHandler.js.map +1 -1
  46. package/dist/IrisGridMetricCalculator.js +2 -12
  47. package/dist/IrisGridMetricCalculator.js.map +1 -1
  48. package/dist/IrisGridModel.d.ts +3 -3
  49. package/dist/IrisGridModel.d.ts.map +1 -1
  50. package/dist/IrisGridModel.js +32 -58
  51. package/dist/IrisGridModel.js.map +1 -1
  52. package/dist/IrisGridModelFactory.js +0 -7
  53. package/dist/IrisGridModelFactory.js.map +1 -1
  54. package/dist/IrisGridModelUpdater.js +0 -4
  55. package/dist/IrisGridModelUpdater.js.map +1 -1
  56. package/dist/IrisGridPartitionSelector.js +0 -23
  57. package/dist/IrisGridPartitionSelector.js.map +1 -1
  58. package/dist/IrisGridProxyModel.js +9 -153
  59. package/dist/IrisGridProxyModel.js.map +1 -1
  60. package/dist/IrisGridRenderer.d.ts +1 -1
  61. package/dist/IrisGridRenderer.d.ts.map +1 -1
  62. package/dist/IrisGridRenderer.js +41 -183
  63. package/dist/IrisGridRenderer.js.map +1 -1
  64. package/dist/IrisGridShortcuts.js.map +1 -1
  65. package/dist/IrisGridTableModel.d.ts +3 -3
  66. package/dist/IrisGridTableModel.d.ts.map +1 -1
  67. package/dist/IrisGridTableModel.js +10 -90
  68. package/dist/IrisGridTableModel.js.map +1 -1
  69. package/dist/IrisGridTableModelTemplate.d.ts +3 -3
  70. package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
  71. package/dist/IrisGridTableModelTemplate.js +70 -461
  72. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  73. package/dist/IrisGridTestUtils.js +0 -23
  74. package/dist/IrisGridTestUtils.js.map +1 -1
  75. package/dist/IrisGridTheme.d.ts +1 -1
  76. package/dist/IrisGridTheme.d.ts.map +1 -1
  77. package/dist/IrisGridTheme.js.map +1 -1
  78. package/dist/IrisGridTreeTableModel.js +3 -42
  79. package/dist/IrisGridTreeTableModel.js.map +1 -1
  80. package/dist/IrisGridUtils.d.ts +13 -7
  81. package/dist/IrisGridUtils.d.ts.map +1 -1
  82. package/dist/IrisGridUtils.js +98 -196
  83. package/dist/IrisGridUtils.js.map +1 -1
  84. package/dist/MissingKeyError.js +0 -7
  85. package/dist/MissingKeyError.js.map +1 -1
  86. package/dist/PartitionSelectorSearch.d.ts +2 -2
  87. package/dist/PartitionSelectorSearch.js +2 -48
  88. package/dist/PartitionSelectorSearch.js.map +1 -1
  89. package/dist/PendingDataBottomBar.d.ts +2 -2
  90. package/dist/PendingDataBottomBar.d.ts.map +1 -1
  91. package/dist/PendingDataBottomBar.js +2 -7
  92. package/dist/PendingDataBottomBar.js.map +1 -1
  93. package/dist/TableViewportUpdater.d.ts +2 -2
  94. package/dist/TableViewportUpdater.d.ts.map +1 -1
  95. package/dist/TableViewportUpdater.js +3 -29
  96. package/dist/TableViewportUpdater.js.map +1 -1
  97. package/dist/ToastBottomBar.d.ts +2 -2
  98. package/dist/ToastBottomBar.d.ts.map +1 -1
  99. package/dist/ToastBottomBar.js +2 -4
  100. package/dist/ToastBottomBar.js.map +1 -1
  101. package/dist/TreeTableViewportUpdater.js +0 -21
  102. package/dist/TreeTableViewportUpdater.js.map +1 -1
  103. package/dist/format-context-menus/CustomFormatAction.d.ts +1 -1
  104. package/dist/format-context-menus/CustomFormatAction.d.ts.map +1 -1
  105. package/dist/format-context-menus/CustomFormatAction.js +4 -25
  106. package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
  107. package/dist/format-context-menus/DateTimeFormatContextMenu.js +0 -7
  108. package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +1 -1
  109. package/dist/format-context-menus/DecimalFormatContextMenu.js +0 -9
  110. package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
  111. package/dist/format-context-menus/FormatContextMenuUtils.js +3 -9
  112. package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
  113. package/dist/format-context-menus/IntegerFormatContextMenu.js +0 -8
  114. package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
  115. package/dist/format-context-menus/index.js.map +1 -1
  116. package/dist/index.d.ts +3 -3
  117. package/dist/index.d.ts.map +1 -1
  118. package/dist/index.js +3 -3
  119. package/dist/index.js.map +1 -1
  120. package/dist/key-handlers/ClearFilterKeyHandler.js +0 -8
  121. package/dist/key-handlers/ClearFilterKeyHandler.js.map +1 -1
  122. package/dist/key-handlers/CopyKeyHandler.js +1 -10
  123. package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
  124. package/dist/key-handlers/ReverseKeyHandler.js +0 -11
  125. package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
  126. package/dist/key-handlers/index.js.map +1 -1
  127. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +2 -32
  128. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  129. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +4 -34
  130. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  131. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +0 -20
  132. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  133. package/dist/mousehandlers/IrisGridContextMenuHandler.js +17 -107
  134. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  135. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +0 -9
  136. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
  137. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +0 -17
  138. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  139. package/dist/mousehandlers/IrisGridSortMouseHandler.js +2 -15
  140. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
  141. package/dist/mousehandlers/PendingMouseHandler.js +0 -6
  142. package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
  143. package/dist/mousehandlers/index.js.map +1 -1
  144. package/dist/sidebar/AdvancedSettings.js.map +1 -1
  145. package/dist/sidebar/AdvancedSettingsMenu.d.ts +6 -6
  146. package/dist/sidebar/AdvancedSettingsMenu.d.ts.map +1 -1
  147. package/dist/sidebar/AdvancedSettingsMenu.js +2 -6
  148. package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
  149. package/dist/sidebar/AdvancedSettingsType.js +0 -2
  150. package/dist/sidebar/AdvancedSettingsType.js.map +1 -1
  151. package/dist/sidebar/ChartBuilder.d.ts +2 -2
  152. package/dist/sidebar/ChartBuilder.d.ts.map +1 -1
  153. package/dist/sidebar/ChartBuilder.js +2 -46
  154. package/dist/sidebar/ChartBuilder.js.map +1 -1
  155. package/dist/sidebar/CustomColumnBuilder.d.ts +2 -2
  156. package/dist/sidebar/CustomColumnBuilder.d.ts.map +1 -1
  157. package/dist/sidebar/CustomColumnBuilder.js +6 -58
  158. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  159. package/dist/sidebar/CustomColumnInput.js +4 -15
  160. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  161. package/dist/sidebar/InputEditor.js +5 -36
  162. package/dist/sidebar/InputEditor.js.map +1 -1
  163. package/dist/sidebar/OptionType.js +0 -2
  164. package/dist/sidebar/OptionType.js.map +1 -1
  165. package/dist/sidebar/RollupRows.d.ts +3 -3
  166. package/dist/sidebar/RollupRows.d.ts.map +1 -1
  167. package/dist/sidebar/RollupRows.js +9 -65
  168. package/dist/sidebar/RollupRows.js.map +1 -1
  169. package/dist/sidebar/SelectDistinctBuilder.js +0 -13
  170. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  171. package/dist/sidebar/TableCsvExporter.css +3 -0
  172. package/dist/sidebar/TableCsvExporter.css.map +1 -1
  173. package/dist/sidebar/TableCsvExporter.d.ts +12 -6
  174. package/dist/sidebar/TableCsvExporter.d.ts.map +1 -1
  175. package/dist/sidebar/TableCsvExporter.js +88 -82
  176. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  177. package/dist/sidebar/TableSaver.d.ts +5 -3
  178. package/dist/sidebar/TableSaver.d.ts.map +1 -1
  179. package/dist/sidebar/TableSaver.js +52 -132
  180. package/dist/sidebar/TableSaver.js.map +1 -1
  181. package/dist/sidebar/VisibilityOrderingBuilder.d.ts +5 -4
  182. package/dist/sidebar/VisibilityOrderingBuilder.d.ts.map +1 -1
  183. package/dist/sidebar/VisibilityOrderingBuilder.js +37 -116
  184. package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
  185. package/dist/sidebar/aggregations/AggregationEdit.d.ts +2 -2
  186. package/dist/sidebar/aggregations/AggregationEdit.d.ts.map +1 -1
  187. package/dist/sidebar/aggregations/AggregationEdit.js +2 -14
  188. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  189. package/dist/sidebar/aggregations/AggregationOperation.js +0 -2
  190. package/dist/sidebar/aggregations/AggregationOperation.js.map +1 -1
  191. package/dist/sidebar/aggregations/AggregationUtils.js +2 -5
  192. package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
  193. package/dist/sidebar/aggregations/Aggregations.d.ts +4 -4
  194. package/dist/sidebar/aggregations/Aggregations.d.ts.map +1 -1
  195. package/dist/sidebar/aggregations/Aggregations.js +2 -12
  196. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  197. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts +1 -1
  198. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts.map +1 -1
  199. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +2 -16
  200. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
  201. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts +1 -1
  202. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts.map +1 -1
  203. package/dist/sidebar/conditional-formatting/ConditionEditor.js +2 -35
  204. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  205. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts +4 -4
  206. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts.map +1 -1
  207. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +2 -12
  208. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  209. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js +0 -3
  210. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -1
  211. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts +5 -5
  212. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
  213. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +16 -26
  214. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  215. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts +3 -3
  216. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts.map +1 -1
  217. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +9 -172
  218. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  219. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts +1 -1
  220. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts.map +1 -1
  221. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +2 -16
  222. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  223. package/dist/sidebar/conditional-formatting/StyleEditor.d.ts +1 -1
  224. package/dist/sidebar/conditional-formatting/StyleEditor.d.ts.map +1 -1
  225. package/dist/sidebar/conditional-formatting/StyleEditor.js +2 -12
  226. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
  227. package/dist/sidebar/icons/BarIcon.js +0 -3
  228. package/dist/sidebar/icons/BarIcon.js.map +1 -1
  229. package/dist/sidebar/icons/FormatColumnWhereIcon.js +2 -5
  230. package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +1 -1
  231. package/dist/sidebar/icons/FormatRowWhereIcon.js +2 -5
  232. package/dist/sidebar/icons/FormatRowWhereIcon.js.map +1 -1
  233. package/dist/sidebar/icons/HistogramIcon.js +0 -3
  234. package/dist/sidebar/icons/HistogramIcon.js.map +1 -1
  235. package/dist/sidebar/icons/LineIcon.js +0 -3
  236. package/dist/sidebar/icons/LineIcon.js.map +1 -1
  237. package/dist/sidebar/icons/PieIcon.js +0 -3
  238. package/dist/sidebar/icons/PieIcon.js.map +1 -1
  239. package/dist/sidebar/icons/ScatterIcon.js +0 -3
  240. package/dist/sidebar/icons/ScatterIcon.js.map +1 -1
  241. package/dist/sidebar/icons/index.js.map +1 -1
  242. package/dist/sidebar/index.js.map +1 -1
  243. package/package.json +15 -15
@@ -6,24 +6,24 @@ import { IconDefinition } from '@deephaven/icons';
6
6
  import AggregationOperation from './sidebar/aggregations/AggregationOperation';
7
7
  import { OptionType } from './sidebar';
8
8
  export type { AdvancedFilterOptions };
9
- export declare type ColumnName = string;
10
- export declare type AdvancedFilterMap = Map<ModelIndex, AdvancedFilter>;
11
- export declare type QuickFilterMap = Map<ModelIndex, QuickFilter>;
12
- export declare type AggregationMap = Record<AggregationOperation, ColumnName[]>;
13
- export declare type OperationMap = Record<ColumnName, AggregationOperation[]>;
14
- export declare type QuickFilter = {
9
+ export type ColumnName = string;
10
+ export type AdvancedFilterMap = Map<ModelIndex, AdvancedFilter>;
11
+ export type QuickFilterMap = Map<ModelIndex, QuickFilter>;
12
+ export type AggregationMap = Record<AggregationOperation, ColumnName[]>;
13
+ export type OperationMap = Record<ColumnName, AggregationOperation[]>;
14
+ export type QuickFilter = {
15
15
  text: string;
16
16
  filter: FilterCondition | null;
17
17
  };
18
- export declare type AdvancedFilter = {
18
+ export type AdvancedFilter = {
19
19
  filter: FilterCondition | null;
20
20
  options: AdvancedFilterOptions;
21
21
  };
22
- export declare type Action = {
22
+ export type Action = {
23
23
  action: () => void;
24
24
  shortcut: Shortcut;
25
25
  };
26
- export declare type OptionItem = {
26
+ export type OptionItem = {
27
27
  type: OptionType;
28
28
  title: string;
29
29
  subtitle?: string;
@@ -35,7 +35,7 @@ export interface UITotalsTableConfig extends TotalsTableConfig {
35
35
  operationOrder: AggregationOperation[];
36
36
  showOnTop: boolean;
37
37
  }
38
- export declare type InputFilter = {
38
+ export type InputFilter = {
39
39
  name: string;
40
40
  type: string;
41
41
  value: string;
@@ -44,16 +44,16 @@ export declare type InputFilter = {
44
44
  export interface UIRow {
45
45
  data: Map<ModelIndex, CellData>;
46
46
  }
47
- export declare type UIViewportData<R extends UIRow = UIRow> = {
47
+ export type UIViewportData<R extends UIRow = UIRow> = {
48
48
  offset: number;
49
49
  rows: R[];
50
50
  };
51
- export declare type RowData<T = unknown> = Map<number, {
51
+ export type RowData<T = unknown> = Map<number, {
52
52
  value: T;
53
53
  }>;
54
- export declare type CellData = {
54
+ export type CellData = {
55
55
  value: unknown;
56
56
  format?: Format;
57
57
  };
58
- export declare type PendingDataMap<R extends UIRow = UIRow> = Map<ModelIndex, R>;
58
+ export type PendingDataMap<R extends UIRow = UIRow> = Map<ModelIndex, R>;
59
59
  //# sourceMappingURL=CommonTypes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CommonTypes.d.ts","sourceRoot":"","sources":["../src/CommonTypes.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,MAAM,EACP,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,oBAAoB,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,YAAY,EAAE,qBAAqB,EAAE,CAAC;AACtC,oBAAY,UAAU,GAAG,MAAM,CAAC;AAChC,oBAAY,iBAAiB,GAAG,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAChE,oBAAY,cAAc,GAAG,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AAC1D,oBAAY,cAAc,GAAG,MAAM,CAAC,oBAAoB,EAAE,UAAU,EAAE,CAAC,CAAC;AACxE,oBAAY,YAAY,GAAG,MAAM,CAAC,UAAU,EAAE,oBAAoB,EAAE,CAAC,CAAC;AAEtE,oBAAY,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,oBAAY,cAAc,GAAG;IAC3B,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,qBAAqB,CAAC;CAChC,CAAC;AAEF,oBAAY,MAAM,GAAG;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF,oBAAY,UAAU,GAAG;IACvB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,cAAc,EAAE,oBAAoB,EAAE,CAAC;IACvC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,oBAAY,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC;CACzC,CAAC;AAEF,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;CACjC;AAED,oBAAY,cAAc,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,EAAE,CAAC;CACX,CAAC;AACF,oBAAY,OAAO,CAAC,CAAC,GAAG,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC;AAE7D,oBAAY,QAAQ,GAAG;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AACF,oBAAY,cAAc,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"CommonTypes.d.ts","sourceRoot":"","sources":["../src/CommonTypes.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,MAAM,EACP,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,oBAAoB,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,YAAY,EAAE,qBAAqB,EAAE,CAAC;AACtC,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAChC,MAAM,MAAM,iBAAiB,GAAG,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAChE,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,oBAAoB,EAAE,UAAU,EAAE,CAAC,CAAC;AACxE,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,EAAE,oBAAoB,EAAE,CAAC,CAAC;AAEtE,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,qBAAqB,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,cAAc,EAAE,oBAAoB,EAAE,CAAC;IACvC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC;CACzC,CAAC;AAEF,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;CACjC;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,EAAE,CAAC;CACX,CAAC;AACF,MAAM,MAAM,OAAO,CAAC,CAAC,GAAG,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC;AAE7D,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AACF,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC"}
@@ -1,5 +1,4 @@
1
1
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
-
3
2
  import React, { PureComponent } from 'react';
4
3
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
5
4
  import { Checkbox, Popper, SearchInput, Tooltip } from '@deephaven/components';
@@ -7,25 +6,19 @@ import { dhGearFilled, dhCheckSquare, dhSquareFilled, dhRemoveSquareFilled, dhWa
7
6
  import dh from '@deephaven/jsapi-shim';
8
7
  import { TableUtils } from '@deephaven/jsapi-utils';
9
8
  import "./CrossColumnSearch.css";
10
-
11
9
  class CrossColumnSearch extends PureComponent {
12
10
  static createSearchFilter(searchValue, selectedColumns, columns, invertSelection) {
13
11
  var filterColumns = invertSelection ? columns.filter(column => !selectedColumns.includes(column.name)).map(column => column.name) : selectedColumns;
14
-
15
12
  if (searchValue && filterColumns.length > 0) {
16
13
  var filterValue = dh.FilterValue.ofString(searchValue);
17
14
  var searchFilter = filterColumns.length === columns.length ? dh.FilterCondition.search(filterValue) : dh.FilterCondition.search(filterValue, columns.filter(column => filterColumns.includes(column.name)).map(column => column.filter()));
18
15
  return searchFilter;
19
16
  }
20
-
21
17
  return undefined;
22
18
  }
23
-
24
19
  constructor(props) {
25
20
  super(props);
26
-
27
21
  _defineProperty(this, "searchField", void 0);
28
-
29
22
  this.handleSearchValueChange = this.handleSearchValueChange.bind(this);
30
23
  this.toggleColumn = this.toggleColumn.bind(this);
31
24
  this.selectAll = this.selectAll.bind(this);
@@ -36,13 +29,10 @@ class CrossColumnSearch extends PureComponent {
36
29
  isConfigureColumnsShown: false
37
30
  };
38
31
  }
39
-
40
32
  focus() {
41
33
  var _this$searchField$cur;
42
-
43
34
  (_this$searchField$cur = this.searchField.current) === null || _this$searchField$cur === void 0 ? void 0 : _this$searchField$cur.focus();
44
35
  }
45
-
46
36
  handleSearchValueChange(event) {
47
37
  var {
48
38
  onChange,
@@ -51,7 +41,6 @@ class CrossColumnSearch extends PureComponent {
51
41
  } = this.props;
52
42
  onChange(event.target.value, selectedColumns, invertSelection);
53
43
  }
54
-
55
44
  sendColumnChange(selectedColumns, invertSelection) {
56
45
  var {
57
46
  onChange,
@@ -59,7 +48,6 @@ class CrossColumnSearch extends PureComponent {
59
48
  } = this.props;
60
49
  onChange(value, selectedColumns, invertSelection);
61
50
  }
62
-
63
51
  setInvertSelection(invertSelection) {
64
52
  var {
65
53
  onChange,
@@ -67,13 +55,11 @@ class CrossColumnSearch extends PureComponent {
67
55
  } = this.props;
68
56
  onChange(value, [], invertSelection);
69
57
  }
70
-
71
58
  toggleColumn(name) {
72
59
  var {
73
60
  selectedColumns,
74
61
  invertSelection
75
62
  } = this.props;
76
-
77
63
  if (selectedColumns.includes(name)) {
78
64
  this.sendColumnChange(selectedColumns.filter(c => c !== name), invertSelection);
79
65
  } else {
@@ -82,22 +68,18 @@ class CrossColumnSearch extends PureComponent {
82
68
  this.sendColumnChange(update, invertSelection);
83
69
  }
84
70
  }
85
-
86
71
  selectAll() {
87
72
  this.setInvertSelection(true);
88
73
  }
89
-
90
74
  clear() {
91
75
  this.setInvertSelection(false);
92
76
  }
93
-
94
77
  selectNumbers() {
95
78
  var {
96
79
  columns
97
80
  } = this.props;
98
81
  this.sendColumnChange(columns.filter(c => TableUtils.isNumberType(c.type)).map(column => column.name), false);
99
82
  }
100
-
101
83
  render() {
102
84
  var {
103
85
  value,
@@ -109,10 +91,10 @@ class CrossColumnSearch extends PureComponent {
109
91
  isConfigureColumnsShown
110
92
  } = this.state;
111
93
  var hasAllColumnsSelected = selectedColumns.length === 0 && invertSelection === true || selectedColumns.length === columns.length && invertSelection === false;
112
- var hasNoColumnsSelected = selectedColumns.length === 0 && invertSelection === false || selectedColumns.length === columns.length && invertSelection === true; // set icon layers
94
+ var hasNoColumnsSelected = selectedColumns.length === 0 && invertSelection === false || selectedColumns.length === columns.length && invertSelection === true;
113
95
 
96
+ // set icon layers
114
97
  var icon;
115
-
116
98
  if (hasAllColumnsSelected) {
117
99
  // icon if all columns selected for search
118
100
  icon = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
@@ -147,7 +129,6 @@ class CrossColumnSearch extends PureComponent {
147
129
  transform: "shrink-4 down-5 right-7"
148
130
  }));
149
131
  }
150
-
151
132
  return /*#__PURE__*/React.createElement("div", {
152
133
  className: "cross-column-container"
153
134
  }, /*#__PURE__*/React.createElement(SearchInput, {
@@ -212,8 +193,6 @@ class CrossColumnSearch extends PureComponent {
212
193
  icon: dhWarningCircleFilled
213
194
  }), " Select at least one column to search.")))));
214
195
  }
215
-
216
196
  }
217
-
218
197
  export default CrossColumnSearch;
219
198
  //# sourceMappingURL=CrossColumnSearch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CrossColumnSearch.js","names":["React","PureComponent","FontAwesomeIcon","Checkbox","Popper","SearchInput","Tooltip","dhGearFilled","dhCheckSquare","dhSquareFilled","dhRemoveSquareFilled","dhWarningCircleFilled","vsCircleLargeFilled","dh","TableUtils","CrossColumnSearch","createSearchFilter","searchValue","selectedColumns","columns","invertSelection","filterColumns","filter","column","includes","name","map","length","filterValue","FilterValue","ofString","searchFilter","FilterCondition","search","undefined","constructor","props","handleSearchValueChange","bind","toggleColumn","selectAll","clear","selectNumbers","searchField","createRef","state","isConfigureColumnsShown","focus","current","event","onChange","target","value","sendColumnChange","setInvertSelection","c","update","slice","push","isNumberType","type","render","hasAllColumnsSelected","hasNoColumnsSelected","icon","setState","substring","lastIndexOf"],"sources":["../src/CrossColumnSearch.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Checkbox, Popper, SearchInput, Tooltip } from '@deephaven/components';\nimport {\n dhGearFilled,\n dhCheckSquare,\n dhSquareFilled,\n dhRemoveSquareFilled,\n dhWarningCircleFilled,\n vsCircleLargeFilled,\n} from '@deephaven/icons';\nimport dh, { Column, FilterCondition } from '@deephaven/jsapi-shim';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport './CrossColumnSearch.scss';\nimport { ColumnName } from './CommonTypes';\n\ninterface CrossColumnSearchProps {\n value: string;\n selectedColumns: ColumnName[];\n invertSelection: boolean;\n onChange: (\n value: string,\n selectedColumns: ColumnName[],\n invertSelection: boolean\n ) => void;\n columns: Column[];\n}\n\ninterface CrossColumnSearchState {\n isConfigureColumnsShown: boolean;\n}\nclass CrossColumnSearch extends PureComponent<\n CrossColumnSearchProps,\n CrossColumnSearchState\n> {\n static createSearchFilter(\n searchValue: string,\n selectedColumns: ColumnName[],\n columns: Column[],\n invertSelection: boolean\n ): FilterCondition | undefined {\n const filterColumns = invertSelection\n ? columns\n .filter(column => !selectedColumns.includes(column.name))\n .map(column => column.name)\n : selectedColumns;\n if (searchValue && filterColumns.length > 0) {\n const filterValue = dh.FilterValue.ofString(searchValue);\n const searchFilter =\n filterColumns.length === columns.length\n ? dh.FilterCondition.search(filterValue)\n : dh.FilterCondition.search(\n filterValue,\n columns\n .filter(column => filterColumns.includes(column.name))\n .map(column => column.filter())\n );\n return searchFilter;\n }\n return undefined;\n }\n\n constructor(props: CrossColumnSearchProps) {\n super(props);\n this.handleSearchValueChange = this.handleSearchValueChange.bind(this);\n this.toggleColumn = this.toggleColumn.bind(this);\n this.selectAll = this.selectAll.bind(this);\n this.clear = this.clear.bind(this);\n this.selectNumbers = this.selectNumbers.bind(this);\n\n this.searchField = React.createRef();\n\n this.state = {\n isConfigureColumnsShown: false,\n };\n }\n\n searchField: React.RefObject<SearchInput>;\n\n focus(): void {\n this.searchField.current?.focus();\n }\n\n handleSearchValueChange(event: React.ChangeEvent<HTMLInputElement>): void {\n const { onChange, selectedColumns, invertSelection } = this.props;\n onChange(event.target.value, selectedColumns, invertSelection);\n }\n\n sendColumnChange(\n selectedColumns: ColumnName[],\n invertSelection: boolean\n ): void {\n const { onChange, value } = this.props;\n onChange(value, selectedColumns, invertSelection);\n }\n\n setInvertSelection(invertSelection: boolean): void {\n const { onChange, value } = this.props;\n onChange(value, [], invertSelection);\n }\n\n toggleColumn(name: string): void {\n const { selectedColumns, invertSelection } = this.props;\n if (selectedColumns.includes(name)) {\n this.sendColumnChange(\n selectedColumns.filter(c => c !== name),\n invertSelection\n );\n } else {\n const update = selectedColumns.slice();\n update.push(name);\n this.sendColumnChange(update, invertSelection);\n }\n }\n\n selectAll(): void {\n this.setInvertSelection(true);\n }\n\n clear(): void {\n this.setInvertSelection(false);\n }\n\n selectNumbers(): void {\n const { columns } = this.props;\n this.sendColumnChange(\n columns\n .filter(c => TableUtils.isNumberType(c.type))\n .map(column => column.name),\n false\n );\n }\n\n render(): React.ReactElement {\n const { value, selectedColumns, invertSelection, columns } = this.props;\n const { isConfigureColumnsShown } = this.state;\n const hasAllColumnsSelected =\n (selectedColumns.length === 0 && invertSelection === true) ||\n (selectedColumns.length === columns.length && invertSelection === false);\n const hasNoColumnsSelected =\n (selectedColumns.length === 0 && invertSelection === false) ||\n (selectedColumns.length === columns.length && invertSelection === true);\n\n // set icon layers\n let icon;\n if (hasAllColumnsSelected) {\n // icon if all columns selected for search\n icon = (\n <>\n <FontAwesomeIcon\n icon={dhSquareFilled}\n mask={dhGearFilled}\n transform=\"shrink-2 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhCheckSquare}\n className=\"text-primary\"\n transform=\"shrink-4 down-5 right-7\"\n />\n </>\n );\n } else if (hasNoColumnsSelected) {\n // icon error, no columns selected for searching\n icon = (\n <>\n <FontAwesomeIcon\n icon={vsCircleLargeFilled}\n mask={dhGearFilled}\n transform=\"shrink-1 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhWarningCircleFilled}\n className=\"text-danger\"\n transform=\"shrink-4 down-5 right-7\"\n />\n </>\n );\n } else {\n // icon if some columns selected, but not all\n icon = (\n <>\n <FontAwesomeIcon\n icon={dhSquareFilled}\n mask={dhGearFilled}\n transform=\"shrink-2 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhRemoveSquareFilled}\n className=\"text-primary\"\n transform=\"shrink-4 down-5 right-7\"\n />\n </>\n );\n }\n\n return (\n <div className=\"cross-column-container\">\n <SearchInput\n className=\"cross-column-search\"\n placeholder=\"Search Data...\"\n value={value}\n onChange={this.handleSearchValueChange}\n ref={this.searchField}\n />\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon px-2\"\n onClick={() => {\n if (isConfigureColumnsShown) {\n this.setState({ isConfigureColumnsShown: false });\n } else {\n this.setState({ isConfigureColumnsShown: true });\n }\n }}\n >\n <div className=\"fa-layers\">{icon}</div>\n <Tooltip>Configure Columns</Tooltip>\n <Popper\n isShown={isConfigureColumnsShown}\n className=\"cross-column-popper\"\n onExited={() => {\n this.setState({ isConfigureColumnsShown: false });\n }}\n closeOnBlur\n interactive\n >\n <div className=\"cross-column-popup\">\n Searched Columns\n <div className=\"cross-column-scroll\">\n {columns.map(column => (\n <React.Fragment key={column.name}>\n <Checkbox\n className=\"cross-column-checkbox\"\n checked={\n invertSelection\n ? !selectedColumns.includes(column.name)\n : selectedColumns.includes(column.name)\n }\n onChange={() => this.toggleColumn(column.name)}\n >\n {column.name}\n </Checkbox>\n\n {column.type.substring(column.type.lastIndexOf('.') + 1)}\n </React.Fragment>\n ))}\n </div>\n <div className=\"cross-column-button-bar\">\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.selectAll}\n >\n Select All\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.clear}\n >\n Clear\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.selectNumbers}\n >\n Numbers Only\n </button>\n </div>\n {hasNoColumnsSelected && (\n <p className=\"text-danger\">\n <FontAwesomeIcon icon={dhWarningCircleFilled} /> Select at\n least one column to search.\n </p>\n )}\n </div>\n </Popper>\n </button>\n </div>\n );\n }\n}\n\nexport default CrossColumnSearch;\n"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,aAAhB,QAAqC,OAArC;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,QAAT,EAAmBC,MAAnB,EAA2BC,WAA3B,EAAwCC,OAAxC,QAAuD,uBAAvD;AACA,SACEC,YADF,EAEEC,aAFF,EAGEC,cAHF,EAIEC,oBAJF,EAKEC,qBALF,EAMEC,mBANF,QAOO,kBAPP;AAQA,OAAOC,EAAP,MAA4C,uBAA5C;AACA,SAASC,UAAT,QAA2B,wBAA3B;;;AAmBA,MAAMC,iBAAN,SAAgCd,aAAhC,CAGE;EACyB,OAAlBe,kBAAkB,CACvBC,WADuB,EAEvBC,eAFuB,EAGvBC,OAHuB,EAIvBC,eAJuB,EAKM;IAC7B,IAAMC,aAAa,GAAGD,eAAe,GACjCD,OAAO,CACJG,MADH,CACUC,MAAM,IAAI,CAACL,eAAe,CAACM,QAAhB,CAAyBD,MAAM,CAACE,IAAhC,CADrB,EAEGC,GAFH,CAEOH,MAAM,IAAIA,MAAM,CAACE,IAFxB,CADiC,GAIjCP,eAJJ;;IAKA,IAAID,WAAW,IAAII,aAAa,CAACM,MAAd,GAAuB,CAA1C,EAA6C;MAC3C,IAAMC,WAAW,GAAGf,EAAE,CAACgB,WAAH,CAAeC,QAAf,CAAwBb,WAAxB,CAApB;MACA,IAAMc,YAAY,GAChBV,aAAa,CAACM,MAAd,KAAyBR,OAAO,CAACQ,MAAjC,GACId,EAAE,CAACmB,eAAH,CAAmBC,MAAnB,CAA0BL,WAA1B,CADJ,GAEIf,EAAE,CAACmB,eAAH,CAAmBC,MAAnB,CACEL,WADF,EAEET,OAAO,CACJG,MADH,CACUC,MAAM,IAAIF,aAAa,CAACG,QAAd,CAAuBD,MAAM,CAACE,IAA9B,CADpB,EAEGC,GAFH,CAEOH,MAAM,IAAIA,MAAM,CAACD,MAAP,EAFjB,CAFF,CAHN;MASA,OAAOS,YAAP;IACD;;IACD,OAAOG,SAAP;EACD;;EAEDC,WAAW,CAACC,KAAD,EAAgC;IACzC,MAAMA,KAAN;;IADyC;;IAEzC,KAAKC,uBAAL,GAA+B,KAAKA,uBAAL,CAA6BC,IAA7B,CAAkC,IAAlC,CAA/B;IACA,KAAKC,YAAL,GAAoB,KAAKA,YAAL,CAAkBD,IAAlB,CAAuB,IAAvB,CAApB;IACA,KAAKE,SAAL,GAAiB,KAAKA,SAAL,CAAeF,IAAf,CAAoB,IAApB,CAAjB;IACA,KAAKG,KAAL,GAAa,KAAKA,KAAL,CAAWH,IAAX,CAAgB,IAAhB,CAAb;IACA,KAAKI,aAAL,GAAqB,KAAKA,aAAL,CAAmBJ,IAAnB,CAAwB,IAAxB,CAArB;IAEA,KAAKK,WAAL,gBAAmB3C,KAAK,CAAC4C,SAAN,EAAnB;IAEA,KAAKC,KAAL,GAAa;MACXC,uBAAuB,EAAE;IADd,CAAb;EAGD;;EAIDC,KAAK,GAAS;IAAA;;IACZ,8BAAKJ,WAAL,CAAiBK,OAAjB,gFAA0BD,KAA1B;EACD;;EAEDV,uBAAuB,CAACY,KAAD,EAAmD;IACxE,IAAM;MAAEC,QAAF;MAAYhC,eAAZ;MAA6BE;IAA7B,IAAiD,KAAKgB,KAA5D;IACAc,QAAQ,CAACD,KAAK,CAACE,MAAN,CAAaC,KAAd,EAAqBlC,eAArB,EAAsCE,eAAtC,CAAR;EACD;;EAEDiC,gBAAgB,CACdnC,eADc,EAEdE,eAFc,EAGR;IACN,IAAM;MAAE8B,QAAF;MAAYE;IAAZ,IAAsB,KAAKhB,KAAjC;IACAc,QAAQ,CAACE,KAAD,EAAQlC,eAAR,EAAyBE,eAAzB,CAAR;EACD;;EAEDkC,kBAAkB,CAAClC,eAAD,EAAiC;IACjD,IAAM;MAAE8B,QAAF;MAAYE;IAAZ,IAAsB,KAAKhB,KAAjC;IACAc,QAAQ,CAACE,KAAD,EAAQ,EAAR,EAAYhC,eAAZ,CAAR;EACD;;EAEDmB,YAAY,CAACd,IAAD,EAAqB;IAC/B,IAAM;MAAEP,eAAF;MAAmBE;IAAnB,IAAuC,KAAKgB,KAAlD;;IACA,IAAIlB,eAAe,CAACM,QAAhB,CAAyBC,IAAzB,CAAJ,EAAoC;MAClC,KAAK4B,gBAAL,CACEnC,eAAe,CAACI,MAAhB,CAAuBiC,CAAC,IAAIA,CAAC,KAAK9B,IAAlC,CADF,EAEEL,eAFF;IAID,CALD,MAKO;MACL,IAAMoC,MAAM,GAAGtC,eAAe,CAACuC,KAAhB,EAAf;MACAD,MAAM,CAACE,IAAP,CAAYjC,IAAZ;MACA,KAAK4B,gBAAL,CAAsBG,MAAtB,EAA8BpC,eAA9B;IACD;EACF;;EAEDoB,SAAS,GAAS;IAChB,KAAKc,kBAAL,CAAwB,IAAxB;EACD;;EAEDb,KAAK,GAAS;IACZ,KAAKa,kBAAL,CAAwB,KAAxB;EACD;;EAEDZ,aAAa,GAAS;IACpB,IAAM;MAAEvB;IAAF,IAAc,KAAKiB,KAAzB;IACA,KAAKiB,gBAAL,CACElC,OAAO,CACJG,MADH,CACUiC,CAAC,IAAIzC,UAAU,CAAC6C,YAAX,CAAwBJ,CAAC,CAACK,IAA1B,CADf,EAEGlC,GAFH,CAEOH,MAAM,IAAIA,MAAM,CAACE,IAFxB,CADF,EAIE,KAJF;EAMD;;EAEDoC,MAAM,GAAuB;IAC3B,IAAM;MAAET,KAAF;MAASlC,eAAT;MAA0BE,eAA1B;MAA2CD;IAA3C,IAAuD,KAAKiB,KAAlE;IACA,IAAM;MAAEU;IAAF,IAA8B,KAAKD,KAAzC;IACA,IAAMiB,qBAAqB,GACxB5C,eAAe,CAACS,MAAhB,KAA2B,CAA3B,IAAgCP,eAAe,KAAK,IAArD,IACCF,eAAe,CAACS,MAAhB,KAA2BR,OAAO,CAACQ,MAAnC,IAA6CP,eAAe,KAAK,KAFpE;IAGA,IAAM2C,oBAAoB,GACvB7C,eAAe,CAACS,MAAhB,KAA2B,CAA3B,IAAgCP,eAAe,KAAK,KAArD,IACCF,eAAe,CAACS,MAAhB,KAA2BR,OAAO,CAACQ,MAAnC,IAA6CP,eAAe,KAAK,IAFpE,CAN2B,CAU3B;;IACA,IAAI4C,IAAJ;;IACA,IAAIF,qBAAJ,EAA2B;MACzB;MACAE,IAAI,gBACF,uDACE,oBAAC,eAAD;QACE,IAAI,EAAEvD,cADR;QAEE,IAAI,EAAEF,YAFR;QAGE,SAAS,EAAC;MAHZ,EADF,eAME,oBAAC,eAAD;QACE,IAAI,EAAEC,aADR;QAEE,SAAS,EAAC,cAFZ;QAGE,SAAS,EAAC;MAHZ,EANF,CADF;IAcD,CAhBD,MAgBO,IAAIuD,oBAAJ,EAA0B;MAC/B;MACAC,IAAI,gBACF,uDACE,oBAAC,eAAD;QACE,IAAI,EAAEpD,mBADR;QAEE,IAAI,EAAEL,YAFR;QAGE,SAAS,EAAC;MAHZ,EADF,eAME,oBAAC,eAAD;QACE,IAAI,EAAEI,qBADR;QAEE,SAAS,EAAC,aAFZ;QAGE,SAAS,EAAC;MAHZ,EANF,CADF;IAcD,CAhBM,MAgBA;MACL;MACAqD,IAAI,gBACF,uDACE,oBAAC,eAAD;QACE,IAAI,EAAEvD,cADR;QAEE,IAAI,EAAEF,YAFR;QAGE,SAAS,EAAC;MAHZ,EADF,eAME,oBAAC,eAAD;QACE,IAAI,EAAEG,oBADR;QAEE,SAAS,EAAC,cAFZ;QAGE,SAAS,EAAC;MAHZ,EANF,CADF;IAcD;;IAED,oBACE;MAAK,SAAS,EAAC;IAAf,gBACE,oBAAC,WAAD;MACE,SAAS,EAAC,qBADZ;MAEE,WAAW,EAAC,gBAFd;MAGE,KAAK,EAAE0C,KAHT;MAIE,QAAQ,EAAE,KAAKf,uBAJjB;MAKE,GAAG,EAAE,KAAKM;IALZ,EADF,eAQE;MACE,IAAI,EAAC,QADP;MAEE,SAAS,EAAC,iCAFZ;MAGE,OAAO,EAAE,MAAM;QACb,IAAIG,uBAAJ,EAA6B;UAC3B,KAAKmB,QAAL,CAAc;YAAEnB,uBAAuB,EAAE;UAA3B,CAAd;QACD,CAFD,MAEO;UACL,KAAKmB,QAAL,CAAc;YAAEnB,uBAAuB,EAAE;UAA3B,CAAd;QACD;MACF;IATH,gBAWE;MAAK,SAAS,EAAC;IAAf,GAA4BkB,IAA5B,CAXF,eAYE,oBAAC,OAAD,4BAZF,eAaE,oBAAC,MAAD;MACE,OAAO,EAAElB,uBADX;MAEE,SAAS,EAAC,qBAFZ;MAGE,QAAQ,EAAE,MAAM;QACd,KAAKmB,QAAL,CAAc;UAAEnB,uBAAuB,EAAE;QAA3B,CAAd;MACD,CALH;MAME,WAAW,MANb;MAOE,WAAW;IAPb,gBASE;MAAK,SAAS,EAAC;IAAf,oCAEE;MAAK,SAAS,EAAC;IAAf,GACG3B,OAAO,CAACO,GAAR,CAAYH,MAAM,iBACjB,oBAAC,KAAD,CAAO,QAAP;MAAgB,GAAG,EAAEA,MAAM,CAACE;IAA5B,gBACE,oBAAC,QAAD;MACE,SAAS,EAAC,uBADZ;MAEE,OAAO,EACLL,eAAe,GACX,CAACF,eAAe,CAACM,QAAhB,CAAyBD,MAAM,CAACE,IAAhC,CADU,GAEXP,eAAe,CAACM,QAAhB,CAAyBD,MAAM,CAACE,IAAhC,CALR;MAOE,QAAQ,EAAE,MAAM,KAAKc,YAAL,CAAkBhB,MAAM,CAACE,IAAzB;IAPlB,GASGF,MAAM,CAACE,IATV,CADF,EAaGF,MAAM,CAACqC,IAAP,CAAYM,SAAZ,CAAsB3C,MAAM,CAACqC,IAAP,CAAYO,WAAZ,CAAwB,GAAxB,IAA+B,CAArD,CAbH,CADD,CADH,CAFF,eAqBE;MAAK,SAAS,EAAC;IAAf,gBACE;MACE,IAAI,EAAC,QADP;MAEE,SAAS,EAAC,cAFZ;MAGE,OAAO,EAAE,KAAK3B;IAHhB,gBADF,eAQE;MACE,IAAI,EAAC,QADP;MAEE,SAAS,EAAC,cAFZ;MAGE,OAAO,EAAE,KAAKC;IAHhB,WARF,eAeE;MACE,IAAI,EAAC,QADP;MAEE,SAAS,EAAC,cAFZ;MAGE,OAAO,EAAE,KAAKC;IAHhB,kBAfF,CArBF,EA4CGqB,oBAAoB,iBACnB;MAAG,SAAS,EAAC;IAAb,gBACE,oBAAC,eAAD;MAAiB,IAAI,EAAEpD;IAAvB,EADF,2CA7CJ,CATF,CAbF,CARF,CADF;EAsFD;;AAvPD;;AA0PF,eAAeI,iBAAf"}
1
+ {"version":3,"file":"CrossColumnSearch.js","names":["React","PureComponent","FontAwesomeIcon","Checkbox","Popper","SearchInput","Tooltip","dhGearFilled","dhCheckSquare","dhSquareFilled","dhRemoveSquareFilled","dhWarningCircleFilled","vsCircleLargeFilled","dh","TableUtils","CrossColumnSearch","createSearchFilter","searchValue","selectedColumns","columns","invertSelection","filterColumns","filter","column","includes","name","map","length","filterValue","FilterValue","ofString","searchFilter","FilterCondition","search","undefined","constructor","props","handleSearchValueChange","bind","toggleColumn","selectAll","clear","selectNumbers","searchField","createRef","state","isConfigureColumnsShown","focus","current","event","onChange","target","value","sendColumnChange","setInvertSelection","c","update","slice","push","isNumberType","type","render","hasAllColumnsSelected","hasNoColumnsSelected","icon","setState","substring","lastIndexOf"],"sources":["../src/CrossColumnSearch.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Checkbox, Popper, SearchInput, Tooltip } from '@deephaven/components';\nimport {\n dhGearFilled,\n dhCheckSquare,\n dhSquareFilled,\n dhRemoveSquareFilled,\n dhWarningCircleFilled,\n vsCircleLargeFilled,\n} from '@deephaven/icons';\nimport dh, { Column, FilterCondition } from '@deephaven/jsapi-shim';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport './CrossColumnSearch.scss';\nimport { ColumnName } from './CommonTypes';\n\ninterface CrossColumnSearchProps {\n value: string;\n selectedColumns: ColumnName[];\n invertSelection: boolean;\n onChange: (\n value: string,\n selectedColumns: ColumnName[],\n invertSelection: boolean\n ) => void;\n columns: Column[];\n}\n\ninterface CrossColumnSearchState {\n isConfigureColumnsShown: boolean;\n}\nclass CrossColumnSearch extends PureComponent<\n CrossColumnSearchProps,\n CrossColumnSearchState\n> {\n static createSearchFilter(\n searchValue: string,\n selectedColumns: ColumnName[],\n columns: Column[],\n invertSelection: boolean\n ): FilterCondition | undefined {\n const filterColumns = invertSelection\n ? columns\n .filter(column => !selectedColumns.includes(column.name))\n .map(column => column.name)\n : selectedColumns;\n if (searchValue && filterColumns.length > 0) {\n const filterValue = dh.FilterValue.ofString(searchValue);\n const searchFilter =\n filterColumns.length === columns.length\n ? dh.FilterCondition.search(filterValue)\n : dh.FilterCondition.search(\n filterValue,\n columns\n .filter(column => filterColumns.includes(column.name))\n .map(column => column.filter())\n );\n return searchFilter;\n }\n return undefined;\n }\n\n constructor(props: CrossColumnSearchProps) {\n super(props);\n this.handleSearchValueChange = this.handleSearchValueChange.bind(this);\n this.toggleColumn = this.toggleColumn.bind(this);\n this.selectAll = this.selectAll.bind(this);\n this.clear = this.clear.bind(this);\n this.selectNumbers = this.selectNumbers.bind(this);\n\n this.searchField = React.createRef();\n\n this.state = {\n isConfigureColumnsShown: false,\n };\n }\n\n searchField: React.RefObject<SearchInput>;\n\n focus(): void {\n this.searchField.current?.focus();\n }\n\n handleSearchValueChange(event: React.ChangeEvent<HTMLInputElement>): void {\n const { onChange, selectedColumns, invertSelection } = this.props;\n onChange(event.target.value, selectedColumns, invertSelection);\n }\n\n sendColumnChange(\n selectedColumns: ColumnName[],\n invertSelection: boolean\n ): void {\n const { onChange, value } = this.props;\n onChange(value, selectedColumns, invertSelection);\n }\n\n setInvertSelection(invertSelection: boolean): void {\n const { onChange, value } = this.props;\n onChange(value, [], invertSelection);\n }\n\n toggleColumn(name: string): void {\n const { selectedColumns, invertSelection } = this.props;\n if (selectedColumns.includes(name)) {\n this.sendColumnChange(\n selectedColumns.filter(c => c !== name),\n invertSelection\n );\n } else {\n const update = selectedColumns.slice();\n update.push(name);\n this.sendColumnChange(update, invertSelection);\n }\n }\n\n selectAll(): void {\n this.setInvertSelection(true);\n }\n\n clear(): void {\n this.setInvertSelection(false);\n }\n\n selectNumbers(): void {\n const { columns } = this.props;\n this.sendColumnChange(\n columns\n .filter(c => TableUtils.isNumberType(c.type))\n .map(column => column.name),\n false\n );\n }\n\n render(): React.ReactElement {\n const { value, selectedColumns, invertSelection, columns } = this.props;\n const { isConfigureColumnsShown } = this.state;\n const hasAllColumnsSelected =\n (selectedColumns.length === 0 && invertSelection === true) ||\n (selectedColumns.length === columns.length && invertSelection === false);\n const hasNoColumnsSelected =\n (selectedColumns.length === 0 && invertSelection === false) ||\n (selectedColumns.length === columns.length && invertSelection === true);\n\n // set icon layers\n let icon;\n if (hasAllColumnsSelected) {\n // icon if all columns selected for search\n icon = (\n <>\n <FontAwesomeIcon\n icon={dhSquareFilled}\n mask={dhGearFilled}\n transform=\"shrink-2 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhCheckSquare}\n className=\"text-primary\"\n transform=\"shrink-4 down-5 right-7\"\n />\n </>\n );\n } else if (hasNoColumnsSelected) {\n // icon error, no columns selected for searching\n icon = (\n <>\n <FontAwesomeIcon\n icon={vsCircleLargeFilled}\n mask={dhGearFilled}\n transform=\"shrink-1 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhWarningCircleFilled}\n className=\"text-danger\"\n transform=\"shrink-4 down-5 right-7\"\n />\n </>\n );\n } else {\n // icon if some columns selected, but not all\n icon = (\n <>\n <FontAwesomeIcon\n icon={dhSquareFilled}\n mask={dhGearFilled}\n transform=\"shrink-2 down-5 right-7\"\n />\n <FontAwesomeIcon\n icon={dhRemoveSquareFilled}\n className=\"text-primary\"\n transform=\"shrink-4 down-5 right-7\"\n />\n </>\n );\n }\n\n return (\n <div className=\"cross-column-container\">\n <SearchInput\n className=\"cross-column-search\"\n placeholder=\"Search Data...\"\n value={value}\n onChange={this.handleSearchValueChange}\n ref={this.searchField}\n />\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon px-2\"\n onClick={() => {\n if (isConfigureColumnsShown) {\n this.setState({ isConfigureColumnsShown: false });\n } else {\n this.setState({ isConfigureColumnsShown: true });\n }\n }}\n >\n <div className=\"fa-layers\">{icon}</div>\n <Tooltip>Configure Columns</Tooltip>\n <Popper\n isShown={isConfigureColumnsShown}\n className=\"cross-column-popper\"\n onExited={() => {\n this.setState({ isConfigureColumnsShown: false });\n }}\n closeOnBlur\n interactive\n >\n <div className=\"cross-column-popup\">\n Searched Columns\n <div className=\"cross-column-scroll\">\n {columns.map(column => (\n <React.Fragment key={column.name}>\n <Checkbox\n className=\"cross-column-checkbox\"\n checked={\n invertSelection\n ? !selectedColumns.includes(column.name)\n : selectedColumns.includes(column.name)\n }\n onChange={() => this.toggleColumn(column.name)}\n >\n {column.name}\n </Checkbox>\n\n {column.type.substring(column.type.lastIndexOf('.') + 1)}\n </React.Fragment>\n ))}\n </div>\n <div className=\"cross-column-button-bar\">\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.selectAll}\n >\n Select All\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.clear}\n >\n Clear\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link\"\n onClick={this.selectNumbers}\n >\n Numbers Only\n </button>\n </div>\n {hasNoColumnsSelected && (\n <p className=\"text-danger\">\n <FontAwesomeIcon icon={dhWarningCircleFilled} /> Select at\n least one column to search.\n </p>\n )}\n </div>\n </Popper>\n </button>\n </div>\n );\n }\n}\n\nexport default CrossColumnSearch;\n"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
-
3
2
  import React, { PureComponent } from 'react';
4
3
  import classNames from 'classnames';
5
4
  import debounce from 'lodash.debounce';
@@ -7,7 +6,6 @@ import { vsFilter, dhFilterFilled } from '@deephaven/icons';
7
6
  import "./FilterInputField.css";
8
7
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
9
8
  import { Button } from '@deephaven/components';
10
-
11
9
  /**
12
10
  * An input field showing a input field and button.
13
11
  * Debounces changes.
@@ -15,13 +13,9 @@ import { Button } from '@deephaven/components';
15
13
  class FilterInputField extends PureComponent {
16
14
  constructor(props) {
17
15
  super(props);
18
-
19
16
  _defineProperty(this, "inputField", void 0);
20
-
21
17
  _defineProperty(this, "initialValue", void 0);
22
-
23
18
  _defineProperty(this, "debouncedSendUpdate", void 0);
24
-
25
19
  var {
26
20
  debounceMs
27
21
  } = props;
@@ -43,28 +37,22 @@ class FilterInputField extends PureComponent {
43
37
  value
44
38
  };
45
39
  }
46
-
47
40
  componentDidMount() {
48
41
  var _this$inputField;
49
-
50
42
  (_this$inputField = this.inputField) === null || _this$inputField === void 0 ? void 0 : _this$inputField.focus();
51
43
  }
52
-
53
44
  componentDidUpdate(prevProps) {
54
45
  var {
55
46
  debounceMs
56
47
  } = this.props;
57
-
58
48
  if (prevProps.debounceMs !== debounceMs) {
59
49
  this.debouncedSendUpdate.flush();
60
50
  this.debouncedSendUpdate = debounce(this.sendUpdate.bind(this), debounceMs);
61
51
  }
62
52
  }
63
-
64
53
  componentWillUnmount() {
65
54
  this.debouncedSendUpdate.cancel();
66
55
  }
67
-
68
56
  // clear filters needs to be able to reset the value externally
69
57
  // and due to the way this component handles its own debouncing
70
58
  // this was easier than moving state up.
@@ -74,13 +62,10 @@ class FilterInputField extends PureComponent {
74
62
  value
75
63
  });
76
64
  }
77
-
78
65
  focus() {
79
66
  var _this$inputField2;
80
-
81
67
  (_this$inputField2 = this.inputField) === null || _this$inputField2 === void 0 ? void 0 : _this$inputField2.focus();
82
68
  }
83
-
84
69
  handleChange(event) {
85
70
  var {
86
71
  value
@@ -91,7 +76,6 @@ class FilterInputField extends PureComponent {
91
76
  });
92
77
  this.debouncedSendUpdate(value);
93
78
  }
94
-
95
79
  handleCancel() {
96
80
  this.debouncedSendUpdate.cancel();
97
81
  var {
@@ -100,17 +84,14 @@ class FilterInputField extends PureComponent {
100
84
  var {
101
85
  isChanged
102
86
  } = this.state;
103
-
104
87
  if (isChanged) {
105
88
  this.sendUpdate(initialValue);
106
89
  }
107
-
108
90
  var {
109
91
  onDone
110
92
  } = this.props;
111
93
  onDone();
112
94
  }
113
-
114
95
  handleCommit() {
115
96
  var setGridFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
116
97
  var defocusInput = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
@@ -120,18 +101,15 @@ class FilterInputField extends PureComponent {
120
101
  } = this.props;
121
102
  onDone(setGridFocus, defocusInput);
122
103
  }
123
-
124
104
  handleFocus() {
125
105
  var _this$inputField3;
126
-
127
106
  (_this$inputField3 = this.inputField) === null || _this$inputField3 === void 0 ? void 0 : _this$inputField3.select();
128
107
  }
129
-
130
108
  handleBlur(event) {
131
109
  var {
132
110
  relatedTarget
133
- } = event; // handleCommit results in a call that steals focus
134
-
111
+ } = event;
112
+ // handleCommit results in a call that steals focus
135
113
  if (relatedTarget != null && relatedTarget.classList.contains('context-menu-container')) {
136
114
  // input blurred by calling context-menu
137
115
  // don't set grid focus, but do null column focus
@@ -145,7 +123,6 @@ class FilterInputField extends PureComponent {
145
123
  this.handleCommit(true, true);
146
124
  }
147
125
  }
148
-
149
126
  handleTab() {
150
127
  var backward = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
151
128
  this.debouncedSendUpdate.flush();
@@ -154,7 +131,6 @@ class FilterInputField extends PureComponent {
154
131
  } = this.props;
155
132
  onTab(backward);
156
133
  }
157
-
158
134
  handleKeyDown(event) {
159
135
  switch (event.key) {
160
136
  case 'Escape':
@@ -162,38 +138,32 @@ class FilterInputField extends PureComponent {
162
138
  event.preventDefault();
163
139
  this.handleCancel();
164
140
  break;
165
-
166
141
  case 'Enter':
167
142
  event.stopPropagation();
168
143
  event.preventDefault();
169
144
  this.handleCommit();
170
145
  break;
171
-
172
146
  case 'Tab':
173
147
  event.stopPropagation();
174
148
  event.preventDefault();
175
149
  this.handleTab(event.shiftKey);
176
150
  break;
177
-
178
151
  default:
179
152
  break;
180
153
  }
181
154
  }
182
-
183
155
  handleContextMenu(event) {
184
156
  var {
185
157
  onContextMenu
186
158
  } = this.props;
187
159
  onContextMenu(event);
188
160
  }
189
-
190
161
  sendUpdate(value) {
191
162
  var {
192
163
  onChange
193
164
  } = this.props;
194
165
  onChange(value);
195
166
  }
196
-
197
167
  render() {
198
168
  var {
199
169
  className,
@@ -208,7 +178,6 @@ class FilterInputField extends PureComponent {
208
178
  style: style,
209
179
  className: "iris-grid-input-autosized-wrapper",
210
180
  "data-value": value // used by css based autosizer
211
-
212
181
  }, /*#__PURE__*/React.createElement("input", {
213
182
  ref: inputField => {
214
183
  this.inputField = inputField;
@@ -244,9 +213,7 @@ class FilterInputField extends PureComponent {
244
213
  className: "filter-light"
245
214
  })))));
246
215
  }
247
-
248
216
  }
249
-
250
217
  _defineProperty(FilterInputField, "defaultProps", {
251
218
  style: {},
252
219
  className: '',
@@ -259,6 +226,5 @@ _defineProperty(FilterInputField, "defaultProps", {
259
226
  onContextMenu: () => undefined,
260
227
  debounceMs: 150
261
228
  });
262
-
263
229
  export default FilterInputField;
264
230
  //# sourceMappingURL=FilterInputField.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterInputField.js","names":["React","PureComponent","classNames","debounce","vsFilter","dhFilterFilled","FontAwesomeIcon","Button","FilterInputField","constructor","props","debounceMs","debouncedSendUpdate","sendUpdate","bind","handleCancel","handleChange","handleCommit","handleFocus","handleBlur","handleKeyDown","handleContextMenu","inputField","value","initialValue","state","isChanged","componentDidMount","focus","componentDidUpdate","prevProps","flush","componentWillUnmount","cancel","setValue","setState","event","target","onDone","setGridFocus","defocusInput","select","relatedTarget","classList","contains","handleTab","backward","onTab","key","stopPropagation","preventDefault","shiftKey","onContextMenu","onChange","render","className","style","isAdvancedFilterSet","onAdvancedFiltersTriggered","undefined"],"sources":["../src/FilterInputField.tsx"],"sourcesContent":["import React, { ChangeEvent, PureComponent, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport { vsFilter, dhFilterFilled } from '@deephaven/icons';\nimport './FilterInputField.scss';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport type { DebouncedFunc } from 'lodash';\nimport { Button } from '@deephaven/components';\n\ninterface FilterInputFieldProps {\n className: string;\n style: React.CSSProperties;\n value: string;\n isAdvancedFilterSet: boolean;\n onAdvancedFiltersTriggered: React.MouseEventHandler<HTMLButtonElement>;\n onChange: (value: string) => void;\n onDone: (setGridFocus?: boolean, defocusInput?: boolean) => void;\n onTab: (backward: boolean) => void;\n onContextMenu: React.MouseEventHandler<HTMLInputElement | HTMLButtonElement>;\n debounceMs: number;\n}\ninterface FilterInputFieldState {\n isChanged: boolean;\n value: string;\n}\n/**\n * An input field showing a input field and button.\n * Debounces changes.\n */\nclass FilterInputField extends PureComponent<\n FilterInputFieldProps,\n FilterInputFieldState\n> {\n static defaultProps = {\n style: {},\n className: '',\n value: '',\n isAdvancedFilterSet: false,\n onAdvancedFiltersTriggered: (): void => undefined,\n onChange: (): void => undefined,\n onDone: (): void => undefined,\n onTab: (): void => undefined,\n onContextMenu: (): void => undefined,\n debounceMs: 150,\n };\n\n constructor(props: FilterInputFieldProps) {\n super(props);\n\n const { debounceMs } = props;\n\n this.debouncedSendUpdate = debounce(this.sendUpdate.bind(this), debounceMs);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleCommit = this.handleCommit.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n\n this.inputField = null;\n\n const { value } = props;\n this.initialValue = value;\n this.state = {\n isChanged: false,\n value,\n };\n }\n\n componentDidMount(): void {\n this.inputField?.focus();\n }\n\n componentDidUpdate(prevProps: FilterInputFieldProps): void {\n const { debounceMs } = this.props;\n if (prevProps.debounceMs !== debounceMs) {\n this.debouncedSendUpdate.flush();\n this.debouncedSendUpdate = debounce(\n this.sendUpdate.bind(this),\n debounceMs\n );\n }\n }\n\n componentWillUnmount(): void {\n this.debouncedSendUpdate.cancel();\n }\n\n inputField: HTMLInputElement | null;\n\n initialValue: string;\n\n debouncedSendUpdate: DebouncedFunc<(value: string) => void>;\n\n // clear filters needs to be able to reset the value externally\n // and due to the way this component handles its own debouncing\n // this was easier than moving state up.\n setValue(value: string): void {\n this.initialValue = value;\n this.setState({ value });\n }\n\n focus(): void {\n this.inputField?.focus();\n }\n\n handleChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value } = event.target;\n this.setState({ value, isChanged: true });\n\n this.debouncedSendUpdate(value);\n }\n\n handleCancel(): void {\n this.debouncedSendUpdate.cancel();\n const { initialValue } = this;\n const { isChanged } = this.state;\n if (isChanged) {\n this.sendUpdate(initialValue);\n }\n\n const { onDone } = this.props;\n onDone();\n }\n\n handleCommit(setGridFocus = true, defocusInput = true): void {\n this.debouncedSendUpdate.flush();\n\n const { onDone } = this.props;\n onDone(setGridFocus, defocusInput);\n }\n\n handleFocus(): void {\n this.inputField?.select();\n }\n\n handleBlur(event: React.FocusEvent<HTMLInputElement>): void {\n const { relatedTarget } = event;\n // handleCommit results in a call that steals focus\n if (\n relatedTarget != null &&\n relatedTarget.classList.contains('context-menu-container')\n ) {\n // input blurred by calling context-menu\n // don't set grid focus, but do null column focus\n this.handleCommit(false, true);\n } else if (\n relatedTarget != null &&\n relatedTarget.classList.contains('advanced-filter-button')\n ) {\n // blurred by clicking an advanced filter button\n // don't set grid focus, maintain focusedFilterBarColumn state\n this.handleCommit(false, false);\n } else {\n // clear both, blurred elsewhere\n this.handleCommit(true, true);\n }\n }\n\n handleTab(backward = false): void {\n this.debouncedSendUpdate.flush();\n\n const { onTab } = this.props;\n onTab(backward);\n }\n\n handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>): void {\n switch (event.key) {\n case 'Escape':\n event.stopPropagation();\n event.preventDefault();\n this.handleCancel();\n break;\n case 'Enter':\n event.stopPropagation();\n event.preventDefault();\n this.handleCommit();\n break;\n case 'Tab':\n event.stopPropagation();\n event.preventDefault();\n this.handleTab(event.shiftKey);\n break;\n default:\n break;\n }\n }\n\n handleContextMenu(\n event: React.MouseEvent<HTMLInputElement | HTMLButtonElement>\n ): void {\n const { onContextMenu } = this.props;\n onContextMenu(event);\n }\n\n sendUpdate(value: string): void {\n const { onChange } = this.props;\n onChange(value);\n }\n\n render(): ReactElement {\n const {\n className,\n style,\n isAdvancedFilterSet,\n onAdvancedFiltersTriggered,\n } = this.props;\n const { value } = this.state;\n return (\n <div\n style={style}\n className=\"iris-grid-input-autosized-wrapper\"\n data-value={value} // used by css based autosizer\n >\n <input\n ref={inputField => {\n this.inputField = inputField;\n }}\n className={classNames('iris-grid-input-field', className)}\n type=\"text\"\n value={value}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onChange={this.handleChange}\n onKeyDown={this.handleKeyDown}\n onContextMenu={this.handleContextMenu}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n />\n <div className=\"advanced-filter-button-container\">\n <Button\n kind=\"ghost\"\n className={classNames('btn-link-icon advanced-filter-button', {\n 'filter-set': isAdvancedFilterSet,\n })}\n onClick={onAdvancedFiltersTriggered}\n onContextMenu={this.handleContextMenu}\n >\n <div className=\"fa-layers \">\n <FontAwesomeIcon icon={dhFilterFilled} className=\"filter-solid\" />\n <FontAwesomeIcon icon={vsFilter} className=\"filter-light\" />\n </div>\n </Button>\n </div>\n </div>\n );\n }\n}\n\nexport default FilterInputField;\n"],"mappings":";;AAAA,OAAOA,KAAP,IAA6BC,aAA7B,QAAgE,OAAhE;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,OAAOC,QAAP,MAAqB,iBAArB;AACA,SAASC,QAAT,EAAmBC,cAAnB,QAAyC,kBAAzC;;AAEA,SAASC,eAAT,QAAgC,gCAAhC;AAEA,SAASC,MAAT,QAAuB,uBAAvB;;AAkBA;AACA;AACA;AACA;AACA,MAAMC,gBAAN,SAA+BP,aAA/B,CAGE;EAcAQ,WAAW,CAACC,KAAD,EAA+B;IACxC,MAAMA,KAAN;;IADwC;;IAAA;;IAAA;;IAGxC,IAAM;MAAEC;IAAF,IAAiBD,KAAvB;IAEA,KAAKE,mBAAL,GAA2BT,QAAQ,CAAC,KAAKU,UAAL,CAAgBC,IAAhB,CAAqB,IAArB,CAAD,EAA6BH,UAA7B,CAAnC;IACA,KAAKI,YAAL,GAAoB,KAAKA,YAAL,CAAkBD,IAAlB,CAAuB,IAAvB,CAApB;IACA,KAAKE,YAAL,GAAoB,KAAKA,YAAL,CAAkBF,IAAlB,CAAuB,IAAvB,CAApB;IACA,KAAKG,YAAL,GAAoB,KAAKA,YAAL,CAAkBH,IAAlB,CAAuB,IAAvB,CAApB;IACA,KAAKI,WAAL,GAAmB,KAAKA,WAAL,CAAiBJ,IAAjB,CAAsB,IAAtB,CAAnB;IACA,KAAKK,UAAL,GAAkB,KAAKA,UAAL,CAAgBL,IAAhB,CAAqB,IAArB,CAAlB;IACA,KAAKM,aAAL,GAAqB,KAAKA,aAAL,CAAmBN,IAAnB,CAAwB,IAAxB,CAArB;IACA,KAAKO,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBP,IAAvB,CAA4B,IAA5B,CAAzB;IAEA,KAAKQ,UAAL,GAAkB,IAAlB;IAEA,IAAM;MAAEC;IAAF,IAAYb,KAAlB;IACA,KAAKc,YAAL,GAAoBD,KAApB;IACA,KAAKE,KAAL,GAAa;MACXC,SAAS,EAAE,KADA;MAEXH;IAFW,CAAb;EAID;;EAEDI,iBAAiB,GAAS;IAAA;;IACxB,yBAAKL,UAAL,sEAAiBM,KAAjB;EACD;;EAEDC,kBAAkB,CAACC,SAAD,EAAyC;IACzD,IAAM;MAAEnB;IAAF,IAAiB,KAAKD,KAA5B;;IACA,IAAIoB,SAAS,CAACnB,UAAV,KAAyBA,UAA7B,EAAyC;MACvC,KAAKC,mBAAL,CAAyBmB,KAAzB;MACA,KAAKnB,mBAAL,GAA2BT,QAAQ,CACjC,KAAKU,UAAL,CAAgBC,IAAhB,CAAqB,IAArB,CADiC,EAEjCH,UAFiC,CAAnC;IAID;EACF;;EAEDqB,oBAAoB,GAAS;IAC3B,KAAKpB,mBAAL,CAAyBqB,MAAzB;EACD;;EAQD;EACA;EACA;EACAC,QAAQ,CAACX,KAAD,EAAsB;IAC5B,KAAKC,YAAL,GAAoBD,KAApB;IACA,KAAKY,QAAL,CAAc;MAAEZ;IAAF,CAAd;EACD;;EAEDK,KAAK,GAAS;IAAA;;IACZ,0BAAKN,UAAL,wEAAiBM,KAAjB;EACD;;EAEDZ,YAAY,CAACoB,KAAD,EAA6C;IACvD,IAAM;MAAEb;IAAF,IAAYa,KAAK,CAACC,MAAxB;IACA,KAAKF,QAAL,CAAc;MAAEZ,KAAF;MAASG,SAAS,EAAE;IAApB,CAAd;IAEA,KAAKd,mBAAL,CAAyBW,KAAzB;EACD;;EAEDR,YAAY,GAAS;IACnB,KAAKH,mBAAL,CAAyBqB,MAAzB;IACA,IAAM;MAAET;IAAF,IAAmB,IAAzB;IACA,IAAM;MAAEE;IAAF,IAAgB,KAAKD,KAA3B;;IACA,IAAIC,SAAJ,EAAe;MACb,KAAKb,UAAL,CAAgBW,YAAhB;IACD;;IAED,IAAM;MAAEc;IAAF,IAAa,KAAK5B,KAAxB;IACA4B,MAAM;EACP;;EAEDrB,YAAY,GAAiD;IAAA,IAAhDsB,YAAgD,uEAAjC,IAAiC;IAAA,IAA3BC,YAA2B,uEAAZ,IAAY;IAC3D,KAAK5B,mBAAL,CAAyBmB,KAAzB;IAEA,IAAM;MAAEO;IAAF,IAAa,KAAK5B,KAAxB;IACA4B,MAAM,CAACC,YAAD,EAAeC,YAAf,CAAN;EACD;;EAEDtB,WAAW,GAAS;IAAA;;IAClB,0BAAKI,UAAL,wEAAiBmB,MAAjB;EACD;;EAEDtB,UAAU,CAACiB,KAAD,EAAkD;IAC1D,IAAM;MAAEM;IAAF,IAAoBN,KAA1B,CAD0D,CAE1D;;IACA,IACEM,aAAa,IAAI,IAAjB,IACAA,aAAa,CAACC,SAAd,CAAwBC,QAAxB,CAAiC,wBAAjC,CAFF,EAGE;MACA;MACA;MACA,KAAK3B,YAAL,CAAkB,KAAlB,EAAyB,IAAzB;IACD,CAPD,MAOO,IACLyB,aAAa,IAAI,IAAjB,IACAA,aAAa,CAACC,SAAd,CAAwBC,QAAxB,CAAiC,wBAAjC,CAFK,EAGL;MACA;MACA;MACA,KAAK3B,YAAL,CAAkB,KAAlB,EAAyB,KAAzB;IACD,CAPM,MAOA;MACL;MACA,KAAKA,YAAL,CAAkB,IAAlB,EAAwB,IAAxB;IACD;EACF;;EAED4B,SAAS,GAAyB;IAAA,IAAxBC,QAAwB,uEAAb,KAAa;IAChC,KAAKlC,mBAAL,CAAyBmB,KAAzB;IAEA,IAAM;MAAEgB;IAAF,IAAY,KAAKrC,KAAvB;IACAqC,KAAK,CAACD,QAAD,CAAL;EACD;;EAED1B,aAAa,CAACgB,KAAD,EAAqD;IAChE,QAAQA,KAAK,CAACY,GAAd;MACE,KAAK,QAAL;QACEZ,KAAK,CAACa,eAAN;QACAb,KAAK,CAACc,cAAN;QACA,KAAKnC,YAAL;QACA;;MACF,KAAK,OAAL;QACEqB,KAAK,CAACa,eAAN;QACAb,KAAK,CAACc,cAAN;QACA,KAAKjC,YAAL;QACA;;MACF,KAAK,KAAL;QACEmB,KAAK,CAACa,eAAN;QACAb,KAAK,CAACc,cAAN;QACA,KAAKL,SAAL,CAAeT,KAAK,CAACe,QAArB;QACA;;MACF;QACE;IAjBJ;EAmBD;;EAED9B,iBAAiB,CACfe,KADe,EAET;IACN,IAAM;MAAEgB;IAAF,IAAoB,KAAK1C,KAA/B;IACA0C,aAAa,CAAChB,KAAD,CAAb;EACD;;EAEDvB,UAAU,CAACU,KAAD,EAAsB;IAC9B,IAAM;MAAE8B;IAAF,IAAe,KAAK3C,KAA1B;IACA2C,QAAQ,CAAC9B,KAAD,CAAR;EACD;;EAED+B,MAAM,GAAiB;IACrB,IAAM;MACJC,SADI;MAEJC,KAFI;MAGJC,mBAHI;MAIJC;IAJI,IAKF,KAAKhD,KALT;IAMA,IAAM;MAAEa;IAAF,IAAY,KAAKE,KAAvB;IACA,oBACE;MACE,KAAK,EAAE+B,KADT;MAEE,SAAS,EAAC,mCAFZ;MAGE,cAAYjC,KAHd,CAGqB;;IAHrB,gBAKE;MACE,GAAG,EAAED,UAAU,IAAI;QACjB,KAAKA,UAAL,GAAkBA,UAAlB;MACD,CAHH;MAIE,SAAS,EAAEpB,UAAU,CAAC,uBAAD,EAA0BqD,SAA1B,CAJvB;MAKE,IAAI,EAAC,MALP;MAME,KAAK,EAAEhC,KANT;MAOE,MAAM,EAAE,KAAKJ,UAPf;MAQE,OAAO,EAAE,KAAKD,WARhB;MASE,QAAQ,EAAE,KAAKF,YATjB;MAUE,SAAS,EAAE,KAAKI,aAVlB;MAWE,aAAa,EAAE,KAAKC,iBAXtB;MAYE,YAAY,EAAC,KAZf;MAaE,WAAW,EAAC,KAbd;MAcE,cAAc,EAAC,KAdjB;MAeE,UAAU,EAAC;IAfb,EALF,eAsBE;MAAK,SAAS,EAAC;IAAf,gBACE,oBAAC,MAAD;MACE,IAAI,EAAC,OADP;MAEE,SAAS,EAAEnB,UAAU,CAAC,sCAAD,EAAyC;QAC5D,cAAcuD;MAD8C,CAAzC,CAFvB;MAKE,OAAO,EAAEC,0BALX;MAME,aAAa,EAAE,KAAKrC;IANtB,gBAQE;MAAK,SAAS,EAAC;IAAf,gBACE,oBAAC,eAAD;MAAiB,IAAI,EAAEhB,cAAvB;MAAuC,SAAS,EAAC;IAAjD,EADF,eAEE,oBAAC,eAAD;MAAiB,IAAI,EAAED,QAAvB;MAAiC,SAAS,EAAC;IAA3C,EAFF,CARF,CADF,CAtBF,CADF;EAwCD;;AAzND;;gBAHII,gB,kBAIkB;EACpBgD,KAAK,EAAE,EADa;EAEpBD,SAAS,EAAE,EAFS;EAGpBhC,KAAK,EAAE,EAHa;EAIpBkC,mBAAmB,EAAE,KAJD;EAKpBC,0BAA0B,EAAE,MAAYC,SALpB;EAMpBN,QAAQ,EAAE,MAAYM,SANF;EAOpBrB,MAAM,EAAE,MAAYqB,SAPA;EAQpBZ,KAAK,EAAE,MAAYY,SARC;EASpBP,aAAa,EAAE,MAAYO,SATP;EAUpBhD,UAAU,EAAE;AAVQ,C;;AA2NxB,eAAeH,gBAAf"}
1
+ {"version":3,"file":"FilterInputField.js","names":["React","PureComponent","classNames","debounce","vsFilter","dhFilterFilled","FontAwesomeIcon","Button","FilterInputField","constructor","props","debounceMs","debouncedSendUpdate","sendUpdate","bind","handleCancel","handleChange","handleCommit","handleFocus","handleBlur","handleKeyDown","handleContextMenu","inputField","value","initialValue","state","isChanged","componentDidMount","focus","componentDidUpdate","prevProps","flush","componentWillUnmount","cancel","setValue","setState","event","target","onDone","setGridFocus","defocusInput","select","relatedTarget","classList","contains","handleTab","backward","onTab","key","stopPropagation","preventDefault","shiftKey","onContextMenu","onChange","render","className","style","isAdvancedFilterSet","onAdvancedFiltersTriggered","undefined"],"sources":["../src/FilterInputField.tsx"],"sourcesContent":["import React, { ChangeEvent, PureComponent, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport { vsFilter, dhFilterFilled } from '@deephaven/icons';\nimport './FilterInputField.scss';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport type { DebouncedFunc } from 'lodash';\nimport { Button } from '@deephaven/components';\n\ninterface FilterInputFieldProps {\n className: string;\n style: React.CSSProperties;\n value: string;\n isAdvancedFilterSet: boolean;\n onAdvancedFiltersTriggered: React.MouseEventHandler<HTMLButtonElement>;\n onChange: (value: string) => void;\n onDone: (setGridFocus?: boolean, defocusInput?: boolean) => void;\n onTab: (backward: boolean) => void;\n onContextMenu: React.MouseEventHandler<HTMLInputElement | HTMLButtonElement>;\n debounceMs: number;\n}\ninterface FilterInputFieldState {\n isChanged: boolean;\n value: string;\n}\n/**\n * An input field showing a input field and button.\n * Debounces changes.\n */\nclass FilterInputField extends PureComponent<\n FilterInputFieldProps,\n FilterInputFieldState\n> {\n static defaultProps = {\n style: {},\n className: '',\n value: '',\n isAdvancedFilterSet: false,\n onAdvancedFiltersTriggered: (): void => undefined,\n onChange: (): void => undefined,\n onDone: (): void => undefined,\n onTab: (): void => undefined,\n onContextMenu: (): void => undefined,\n debounceMs: 150,\n };\n\n constructor(props: FilterInputFieldProps) {\n super(props);\n\n const { debounceMs } = props;\n\n this.debouncedSendUpdate = debounce(this.sendUpdate.bind(this), debounceMs);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleCommit = this.handleCommit.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n\n this.inputField = null;\n\n const { value } = props;\n this.initialValue = value;\n this.state = {\n isChanged: false,\n value,\n };\n }\n\n componentDidMount(): void {\n this.inputField?.focus();\n }\n\n componentDidUpdate(prevProps: FilterInputFieldProps): void {\n const { debounceMs } = this.props;\n if (prevProps.debounceMs !== debounceMs) {\n this.debouncedSendUpdate.flush();\n this.debouncedSendUpdate = debounce(\n this.sendUpdate.bind(this),\n debounceMs\n );\n }\n }\n\n componentWillUnmount(): void {\n this.debouncedSendUpdate.cancel();\n }\n\n inputField: HTMLInputElement | null;\n\n initialValue: string;\n\n debouncedSendUpdate: DebouncedFunc<(value: string) => void>;\n\n // clear filters needs to be able to reset the value externally\n // and due to the way this component handles its own debouncing\n // this was easier than moving state up.\n setValue(value: string): void {\n this.initialValue = value;\n this.setState({ value });\n }\n\n focus(): void {\n this.inputField?.focus();\n }\n\n handleChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value } = event.target;\n this.setState({ value, isChanged: true });\n\n this.debouncedSendUpdate(value);\n }\n\n handleCancel(): void {\n this.debouncedSendUpdate.cancel();\n const { initialValue } = this;\n const { isChanged } = this.state;\n if (isChanged) {\n this.sendUpdate(initialValue);\n }\n\n const { onDone } = this.props;\n onDone();\n }\n\n handleCommit(setGridFocus = true, defocusInput = true): void {\n this.debouncedSendUpdate.flush();\n\n const { onDone } = this.props;\n onDone(setGridFocus, defocusInput);\n }\n\n handleFocus(): void {\n this.inputField?.select();\n }\n\n handleBlur(event: React.FocusEvent<HTMLInputElement>): void {\n const { relatedTarget } = event;\n // handleCommit results in a call that steals focus\n if (\n relatedTarget != null &&\n relatedTarget.classList.contains('context-menu-container')\n ) {\n // input blurred by calling context-menu\n // don't set grid focus, but do null column focus\n this.handleCommit(false, true);\n } else if (\n relatedTarget != null &&\n relatedTarget.classList.contains('advanced-filter-button')\n ) {\n // blurred by clicking an advanced filter button\n // don't set grid focus, maintain focusedFilterBarColumn state\n this.handleCommit(false, false);\n } else {\n // clear both, blurred elsewhere\n this.handleCommit(true, true);\n }\n }\n\n handleTab(backward = false): void {\n this.debouncedSendUpdate.flush();\n\n const { onTab } = this.props;\n onTab(backward);\n }\n\n handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>): void {\n switch (event.key) {\n case 'Escape':\n event.stopPropagation();\n event.preventDefault();\n this.handleCancel();\n break;\n case 'Enter':\n event.stopPropagation();\n event.preventDefault();\n this.handleCommit();\n break;\n case 'Tab':\n event.stopPropagation();\n event.preventDefault();\n this.handleTab(event.shiftKey);\n break;\n default:\n break;\n }\n }\n\n handleContextMenu(\n event: React.MouseEvent<HTMLInputElement | HTMLButtonElement>\n ): void {\n const { onContextMenu } = this.props;\n onContextMenu(event);\n }\n\n sendUpdate(value: string): void {\n const { onChange } = this.props;\n onChange(value);\n }\n\n render(): ReactElement {\n const {\n className,\n style,\n isAdvancedFilterSet,\n onAdvancedFiltersTriggered,\n } = this.props;\n const { value } = this.state;\n return (\n <div\n style={style}\n className=\"iris-grid-input-autosized-wrapper\"\n data-value={value} // used by css based autosizer\n >\n <input\n ref={inputField => {\n this.inputField = inputField;\n }}\n className={classNames('iris-grid-input-field', className)}\n type=\"text\"\n value={value}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onChange={this.handleChange}\n onKeyDown={this.handleKeyDown}\n onContextMenu={this.handleContextMenu}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n />\n <div className=\"advanced-filter-button-container\">\n <Button\n kind=\"ghost\"\n className={classNames('btn-link-icon advanced-filter-button', {\n 'filter-set': isAdvancedFilterSet,\n })}\n onClick={onAdvancedFiltersTriggered}\n onContextMenu={this.handleContextMenu}\n >\n <div className=\"fa-layers \">\n <FontAwesomeIcon icon={dhFilterFilled} className=\"filter-solid\" />\n <FontAwesomeIcon icon={vsFilter} className=\"filter-light\" />\n </div>\n </Button>\n </div>\n </div>\n );\n }\n}\n\nexport default FilterInputField;\n"],"mappings":"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"}
package/dist/GotoRow.d.ts CHANGED
@@ -16,6 +16,6 @@ interface GotoRowProps {
16
16
  onExiting: () => void;
17
17
  onExited: () => void;
18
18
  }
19
- declare const GotoRow: ({ gotoRow, gotoRowError, onSubmit, isShown, onEntering, onEntered, onExiting, onExited, model, onGotoRowNumberChanged, onClose, }: GotoRowProps) => ReactElement;
19
+ declare function GotoRow({ gotoRow, gotoRowError, onSubmit, isShown, onEntering, onEntered, onExiting, onExited, model, onGotoRowNumberChanged, onClose, }: GotoRowProps): ReactElement;
20
20
  export default GotoRow;
21
21
  //# sourceMappingURL=GotoRow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GotoRow.d.ts","sourceRoot":"","sources":["../src/GotoRow.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAE,WAAW,EAAE,YAAY,EAAqB,MAAM,OAAO,CAAC;AAG5E,OAAO,gBAAgB,CAAC;AACxB,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AAGtD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,GACnB,KAAK,IAAI,kBAAkB,CAE7B;AAID,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,EAAE,aAAa,CAAC;IACrB,sBAAsB,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACvE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,QAAA,MAAM,OAAO,sIAYV,YAAY,KAAG,YAiEjB,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"GotoRow.d.ts","sourceRoot":"","sources":["../src/GotoRow.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAE,WAAW,EAAE,YAAY,EAAqB,MAAM,OAAO,CAAC;AAG5E,OAAO,gBAAgB,CAAC;AACxB,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AAGtD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,GACnB,KAAK,IAAI,kBAAkB,CAE7B;AAID,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,EAAE,aAAa,CAAC;IACrB,sBAAsB,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACvE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,iBAAS,OAAO,CAAC,EACf,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,EACR,KAAK,EACL,sBAAsB,EACtB,OAAO,GACR,EAAE,YAAY,GAAG,YAAY,CAiE7B;AAED,eAAe,OAAO,CAAC"}
package/dist/GotoRow.js CHANGED
@@ -9,8 +9,7 @@ export function isIrisGridProxyModel(model) {
9
9
  return model.model !== undefined;
10
10
  }
11
11
  var DEFAULT_FORMAT_STRING = '###,##0';
12
-
13
- var GotoRow = _ref => {
12
+ function GotoRow(_ref) {
14
13
  var {
15
14
  gotoRow,
16
15
  gotoRowError,
@@ -33,7 +32,6 @@ var GotoRow = _ref => {
33
32
  // when row changes without focus (i.e. via context menu), re-select input
34
33
  if (document.activeElement !== inputRef.current) {
35
34
  var _inputRef$current;
36
-
37
35
  (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.select();
38
36
  }
39
37
  }, [gotoRow]);
@@ -43,9 +41,7 @@ var GotoRow = _ref => {
43
41
  onEntering: onEntering,
44
42
  onEntered: () => {
45
43
  var _inputRef$current2;
46
-
47
44
  _onEntered();
48
-
49
45
  (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.select();
50
46
  },
51
47
  onExiting: onExiting,
@@ -89,7 +85,6 @@ var GotoRow = _ref => {
89
85
  marginRight: '0'
90
86
  }
91
87
  })))));
92
- };
93
-
88
+ }
94
89
  export default GotoRow;
95
90
  //# sourceMappingURL=GotoRow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GotoRow.js","names":["FontAwesomeIcon","vsClose","React","useEffect","useRef","Button","classNames","IrisGridBottomBar","isIrisGridProxyModel","model","undefined","DEFAULT_FORMAT_STRING","GotoRow","gotoRow","gotoRowError","onSubmit","isShown","onEntering","onEntered","onExiting","onExited","onGotoRowNumberChanged","onClose","inputRef","res","rowCount","document","activeElement","current","select","e","key","stopPropagation","preventDefault","event","dh","i18n","NumberFormat","format","marginRight"],"sources":["../src/GotoRow.tsx"],"sourcesContent":["import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsClose } from '@deephaven/icons';\nimport React, { ChangeEvent, ReactElement, useEffect, useRef } from 'react';\nimport { Button } from '@deephaven/components';\nimport classNames from 'classnames';\nimport './GotoRow.scss';\nimport IrisGridModel from './IrisGridModel';\nimport IrisGridProxyModel from './IrisGridProxyModel';\nimport IrisGridBottomBar from './IrisGridBottomBar';\n\nexport function isIrisGridProxyModel(\n model: IrisGridModel\n): model is IrisGridProxyModel {\n return (model as IrisGridProxyModel).model !== undefined;\n}\n\nconst DEFAULT_FORMAT_STRING = '###,##0';\n\ninterface GotoRowProps {\n gotoRow: string;\n gotoRowError: string;\n onSubmit: () => void;\n model: IrisGridModel;\n onGotoRowNumberChanged: (event: ChangeEvent<HTMLInputElement>) => void;\n onClose: () => void;\n isShown: boolean;\n onEntering: () => void;\n onEntered: () => void;\n onExiting: () => void;\n onExited: () => void;\n}\n\nconst GotoRow = ({\n gotoRow,\n gotoRowError,\n onSubmit,\n isShown,\n onEntering,\n onEntered,\n onExiting,\n onExited,\n model,\n onGotoRowNumberChanged,\n onClose,\n}: GotoRowProps): ReactElement => {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const res = 'Row number';\n\n const { rowCount } = model;\n\n useEffect(() => {\n // when row changes without focus (i.e. via context menu), re-select input\n if (document.activeElement !== inputRef.current) {\n inputRef.current?.select();\n }\n }, [gotoRow]);\n\n return (\n <IrisGridBottomBar\n isShown={isShown}\n className={classNames('goto-row')}\n onEntering={onEntering}\n onEntered={() => {\n onEntered();\n inputRef.current?.select();\n }}\n onExiting={onExiting}\n onExited={onExited}\n >\n <>\n <div className=\"goto-row-wrapper\">\n <div className=\"goto-row-text\">Go to row</div>\n <div className=\"goto-row-input\">\n <input\n ref={inputRef}\n type=\"number\"\n onKeyDown={e => {\n if (e.key === 'Enter') {\n e.stopPropagation();\n e.preventDefault();\n onSubmit();\n }\n }}\n className={classNames('form-control', {\n 'is-invalid': gotoRowError !== '',\n })}\n placeholder={res}\n onChange={event => {\n onGotoRowNumberChanged(event);\n }}\n value={gotoRow}\n />\n </div>\n <div className=\"goto-row-text\">\n of {dh.i18n.NumberFormat.format(DEFAULT_FORMAT_STRING, rowCount)}\n </div>\n {gotoRowError && (\n <div className=\"goto-row-error text-danger\">{gotoRowError}</div>\n )}\n </div>\n <div className=\"goto-row-close\">\n <Button kind=\"ghost\" onClick={onClose}>\n <FontAwesomeIcon icon={vsClose} style={{ marginRight: '0' }} />\n </Button>\n </div>\n </>\n </IrisGridBottomBar>\n );\n};\n\nexport default GotoRow;\n"],"mappings":"AAAA,SAASA,eAAT,QAAgC,gCAAhC;AACA,SAASC,OAAT,QAAwB,kBAAxB;AACA,OAAOC,KAAP,IAA2CC,SAA3C,EAAsDC,MAAtD,QAAoE,OAApE;AACA,SAASC,MAAT,QAAuB,uBAAvB;AACA,OAAOC,UAAP,MAAuB,YAAvB;;OAIOC,iB;AAEP,OAAO,SAASC,oBAAT,CACLC,KADK,EAEwB;EAC7B,OAAQA,KAAD,CAA8BA,KAA9B,KAAwCC,SAA/C;AACD;AAED,IAAMC,qBAAqB,GAAG,SAA9B;;AAgBA,IAAMC,OAAO,GAAG,QAYkB;EAAA,IAZjB;IACfC,OADe;IAEfC,YAFe;IAGfC,QAHe;IAIfC,OAJe;IAKfC,UALe;IAMfC,SAAS,EAATA,UANe;IAOfC,SAPe;IAQfC,QARe;IASfX,KATe;IAUfY,sBAVe;IAWfC;EAXe,CAYiB;EAChC,IAAMC,QAAQ,GAAGnB,MAAM,CAAmB,IAAnB,CAAvB;EAEA,IAAMoB,GAAG,GAAG,YAAZ;EAEA,IAAM;IAAEC;EAAF,IAAehB,KAArB;EAEAN,SAAS,CAAC,MAAM;IACd;IACA,IAAIuB,QAAQ,CAACC,aAAT,KAA2BJ,QAAQ,CAACK,OAAxC,EAAiD;MAAA;;MAC/C,qBAAAL,QAAQ,CAACK,OAAT,wEAAkBC,MAAlB;IACD;EACF,CALQ,EAKN,CAAChB,OAAD,CALM,CAAT;EAOA,oBACE,oBAAC,iBAAD;IACE,OAAO,EAAEG,OADX;IAEE,SAAS,EAAEV,UAAU,CAAC,UAAD,CAFvB;IAGE,UAAU,EAAEW,UAHd;IAIE,SAAS,EAAE,MAAM;MAAA;;MACfC,UAAS;;MACT,sBAAAK,QAAQ,CAACK,OAAT,0EAAkBC,MAAlB;IACD,CAPH;IAQE,SAAS,EAAEV,SARb;IASE,QAAQ,EAAEC;EATZ,gBAWE,uDACE;IAAK,SAAS,EAAC;EAAf,gBACE;IAAK,SAAS,EAAC;EAAf,eADF,eAEE;IAAK,SAAS,EAAC;EAAf,gBACE;IACE,GAAG,EAAEG,QADP;IAEE,IAAI,EAAC,QAFP;IAGE,SAAS,EAAEO,CAAC,IAAI;MACd,IAAIA,CAAC,CAACC,GAAF,KAAU,OAAd,EAAuB;QACrBD,CAAC,CAACE,eAAF;QACAF,CAAC,CAACG,cAAF;QACAlB,QAAQ;MACT;IACF,CATH;IAUE,SAAS,EAAET,UAAU,CAAC,cAAD,EAAiB;MACpC,cAAcQ,YAAY,KAAK;IADK,CAAjB,CAVvB;IAaE,WAAW,EAAEU,GAbf;IAcE,QAAQ,EAAEU,KAAK,IAAI;MACjBb,sBAAsB,CAACa,KAAD,CAAtB;IACD,CAhBH;IAiBE,KAAK,EAAErB;EAjBT,EADF,CAFF,eAuBE;IAAK,SAAS,EAAC;EAAf,UACMsB,EAAE,CAACC,IAAH,CAAQC,YAAR,CAAqBC,MAArB,CAA4B3B,qBAA5B,EAAmDc,QAAnD,CADN,CAvBF,EA0BGX,YAAY,iBACX;IAAK,SAAS,EAAC;EAAf,GAA6CA,YAA7C,CA3BJ,CADF,eA+BE;IAAK,SAAS,EAAC;EAAf,gBACE,oBAAC,MAAD;IAAQ,IAAI,EAAC,OAAb;IAAqB,OAAO,EAAEQ;EAA9B,gBACE,oBAAC,eAAD;IAAiB,IAAI,EAAErB,OAAvB;IAAgC,KAAK,EAAE;MAAEsC,WAAW,EAAE;IAAf;EAAvC,EADF,CADF,CA/BF,CAXF,CADF;AAmDD,CA7ED;;AA+EA,eAAe3B,OAAf"}
1
+ {"version":3,"file":"GotoRow.js","names":["FontAwesomeIcon","vsClose","React","useEffect","useRef","Button","classNames","IrisGridBottomBar","isIrisGridProxyModel","model","undefined","DEFAULT_FORMAT_STRING","GotoRow","gotoRow","gotoRowError","onSubmit","isShown","onEntering","onEntered","onExiting","onExited","onGotoRowNumberChanged","onClose","inputRef","res","rowCount","document","activeElement","current","select","e","key","stopPropagation","preventDefault","event","dh","i18n","NumberFormat","format","marginRight"],"sources":["../src/GotoRow.tsx"],"sourcesContent":["import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsClose } from '@deephaven/icons';\nimport React, { ChangeEvent, ReactElement, useEffect, useRef } from 'react';\nimport { Button } from '@deephaven/components';\nimport classNames from 'classnames';\nimport './GotoRow.scss';\nimport IrisGridModel from './IrisGridModel';\nimport IrisGridProxyModel from './IrisGridProxyModel';\nimport IrisGridBottomBar from './IrisGridBottomBar';\n\nexport function isIrisGridProxyModel(\n model: IrisGridModel\n): model is IrisGridProxyModel {\n return (model as IrisGridProxyModel).model !== undefined;\n}\n\nconst DEFAULT_FORMAT_STRING = '###,##0';\n\ninterface GotoRowProps {\n gotoRow: string;\n gotoRowError: string;\n onSubmit: () => void;\n model: IrisGridModel;\n onGotoRowNumberChanged: (event: ChangeEvent<HTMLInputElement>) => void;\n onClose: () => void;\n isShown: boolean;\n onEntering: () => void;\n onEntered: () => void;\n onExiting: () => void;\n onExited: () => void;\n}\n\nfunction GotoRow({\n gotoRow,\n gotoRowError,\n onSubmit,\n isShown,\n onEntering,\n onEntered,\n onExiting,\n onExited,\n model,\n onGotoRowNumberChanged,\n onClose,\n}: GotoRowProps): ReactElement {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const res = 'Row number';\n\n const { rowCount } = model;\n\n useEffect(() => {\n // when row changes without focus (i.e. via context menu), re-select input\n if (document.activeElement !== inputRef.current) {\n inputRef.current?.select();\n }\n }, [gotoRow]);\n\n return (\n <IrisGridBottomBar\n isShown={isShown}\n className={classNames('goto-row')}\n onEntering={onEntering}\n onEntered={() => {\n onEntered();\n inputRef.current?.select();\n }}\n onExiting={onExiting}\n onExited={onExited}\n >\n <>\n <div className=\"goto-row-wrapper\">\n <div className=\"goto-row-text\">Go to row</div>\n <div className=\"goto-row-input\">\n <input\n ref={inputRef}\n type=\"number\"\n onKeyDown={e => {\n if (e.key === 'Enter') {\n e.stopPropagation();\n e.preventDefault();\n onSubmit();\n }\n }}\n className={classNames('form-control', {\n 'is-invalid': gotoRowError !== '',\n })}\n placeholder={res}\n onChange={event => {\n onGotoRowNumberChanged(event);\n }}\n value={gotoRow}\n />\n </div>\n <div className=\"goto-row-text\">\n of {dh.i18n.NumberFormat.format(DEFAULT_FORMAT_STRING, rowCount)}\n </div>\n {gotoRowError && (\n <div className=\"goto-row-error text-danger\">{gotoRowError}</div>\n )}\n </div>\n <div className=\"goto-row-close\">\n <Button kind=\"ghost\" onClick={onClose}>\n <FontAwesomeIcon icon={vsClose} style={{ marginRight: '0' }} />\n </Button>\n </div>\n </>\n </IrisGridBottomBar>\n );\n}\n\nexport default GotoRow;\n"],"mappings":"AAAA,SAASA,eAAe,QAAQ,gCAAgC;AAChE,SAASC,OAAO,QAAQ,kBAAkB;AAC1C,OAAOC,KAAK,IAA+BC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAC3E,SAASC,MAAM,QAAQ,uBAAuB;AAC9C,OAAOC,UAAU,MAAM,YAAY;AAAC;AAAA,OAI7BC,iBAAiB;AAExB,OAAO,SAASC,oBAAoB,CAClCC,KAAoB,EACS;EAC7B,OAAQA,KAAK,CAAwBA,KAAK,KAAKC,SAAS;AAC1D;AAEA,IAAMC,qBAAqB,GAAG,SAAS;AAgBvC,SAASC,OAAO,OAYe;EAAA,IAZd;IACfC,OAAO;IACPC,YAAY;IACZC,QAAQ;IACRC,OAAO;IACPC,UAAU;IACVC,SAAS,EAATA,UAAS;IACTC,SAAS;IACTC,QAAQ;IACRX,KAAK;IACLY,sBAAsB;IACtBC;EACY,CAAC;EACb,IAAMC,QAAQ,GAAGnB,MAAM,CAAmB,IAAI,CAAC;EAE/C,IAAMoB,GAAG,GAAG,YAAY;EAExB,IAAM;IAAEC;EAAS,CAAC,GAAGhB,KAAK;EAE1BN,SAAS,CAAC,MAAM;IACd;IACA,IAAIuB,QAAQ,CAACC,aAAa,KAAKJ,QAAQ,CAACK,OAAO,EAAE;MAAA;MAC/C,qBAAAL,QAAQ,CAACK,OAAO,sDAAhB,kBAAkBC,MAAM,EAAE;IAC5B;EACF,CAAC,EAAE,CAAChB,OAAO,CAAC,CAAC;EAEb,oBACE,oBAAC,iBAAiB;IAChB,OAAO,EAAEG,OAAQ;IACjB,SAAS,EAAEV,UAAU,CAAC,UAAU,CAAE;IAClC,UAAU,EAAEW,UAAW;IACvB,SAAS,EAAE,MAAM;MAAA;MACfC,UAAS,EAAE;MACX,sBAAAK,QAAQ,CAACK,OAAO,uDAAhB,mBAAkBC,MAAM,EAAE;IAC5B,CAAE;IACF,SAAS,EAAEV,SAAU;IACrB,QAAQ,EAAEC;EAAS,gBAEnB,uDACE;IAAK,SAAS,EAAC;EAAkB,gBAC/B;IAAK,SAAS,EAAC;EAAe,eAAgB,eAC9C;IAAK,SAAS,EAAC;EAAgB,gBAC7B;IACE,GAAG,EAAEG,QAAS;IACd,IAAI,EAAC,QAAQ;IACb,SAAS,EAAEO,CAAC,IAAI;MACd,IAAIA,CAAC,CAACC,GAAG,KAAK,OAAO,EAAE;QACrBD,CAAC,CAACE,eAAe,EAAE;QACnBF,CAAC,CAACG,cAAc,EAAE;QAClBlB,QAAQ,EAAE;MACZ;IACF,CAAE;IACF,SAAS,EAAET,UAAU,CAAC,cAAc,EAAE;MACpC,YAAY,EAAEQ,YAAY,KAAK;IACjC,CAAC,CAAE;IACH,WAAW,EAAEU,GAAI;IACjB,QAAQ,EAAEU,KAAK,IAAI;MACjBb,sBAAsB,CAACa,KAAK,CAAC;IAC/B,CAAE;IACF,KAAK,EAAErB;EAAQ,EACf,CACE,eACN;IAAK,SAAS,EAAC;EAAe,UACxBsB,EAAE,CAACC,IAAI,CAACC,YAAY,CAACC,MAAM,CAAC3B,qBAAqB,EAAEc,QAAQ,CAAC,CAC5D,EACLX,YAAY,iBACX;IAAK,SAAS,EAAC;EAA4B,GAAEA,YAAY,CAC1D,CACG,eACN;IAAK,SAAS,EAAC;EAAgB,gBAC7B,oBAAC,MAAM;IAAC,IAAI,EAAC,OAAO;IAAC,OAAO,EAAEQ;EAAQ,gBACpC,oBAAC,eAAe;IAAC,IAAI,EAAErB,OAAQ;IAAC,KAAK,EAAE;MAAEsC,WAAW,EAAE;IAAI;EAAE,EAAG,CACxD,CACL,CACL,CACe;AAExB;AAEA,eAAe3B,OAAO"}