@deephaven/components 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 (223) hide show
  1. package/dist/AutoCompleteInput.js +12 -85
  2. package/dist/AutoCompleteInput.js.map +1 -1
  3. package/dist/AutoResizeTextarea.d.ts +5 -5
  4. package/dist/AutoResizeTextarea.d.ts.map +1 -1
  5. package/dist/AutoResizeTextarea.js +8 -23
  6. package/dist/AutoResizeTextarea.js.map +1 -1
  7. package/dist/BasicModal.d.ts +28 -1
  8. package/dist/BasicModal.d.ts.map +1 -1
  9. package/dist/BasicModal.js +2 -8
  10. package/dist/BasicModal.js.map +1 -1
  11. package/dist/Button.d.ts +9 -9
  12. package/dist/Button.d.ts.map +1 -1
  13. package/dist/Button.js +8 -34
  14. package/dist/Button.js.map +1 -1
  15. package/dist/ButtonGroup.d.ts +7 -7
  16. package/dist/ButtonGroup.d.ts.map +1 -1
  17. package/dist/ButtonGroup.js +2 -4
  18. package/dist/ButtonGroup.js.map +1 -1
  19. package/dist/ButtonOld.js.map +1 -1
  20. package/dist/CardFlip.d.ts +2 -2
  21. package/dist/CardFlip.d.ts.map +1 -1
  22. package/dist/CardFlip.js +2 -7
  23. package/dist/CardFlip.js.map +1 -1
  24. package/dist/Checkbox.js +3 -14
  25. package/dist/Checkbox.js.map +1 -1
  26. package/dist/Collapse.d.ts +1 -1
  27. package/dist/Collapse.js +0 -15
  28. package/dist/Collapse.js.map +1 -1
  29. package/dist/ComboBox.js +4 -83
  30. package/dist/ComboBox.js.map +1 -1
  31. package/dist/CopyButton.d.ts +22 -0
  32. package/dist/CopyButton.d.ts.map +1 -0
  33. package/dist/CopyButton.js +30 -0
  34. package/dist/CopyButton.js.map +1 -0
  35. package/dist/CustomTimeSelect.d.ts +3 -3
  36. package/dist/CustomTimeSelect.d.ts.map +1 -1
  37. package/dist/CustomTimeSelect.js +2 -86
  38. package/dist/CustomTimeSelect.js.map +1 -1
  39. package/dist/DateInput.d.ts +1 -1
  40. package/dist/DateInput.d.ts.map +1 -1
  41. package/dist/DateInput.js.map +1 -1
  42. package/dist/DateInputUtils.js +0 -7
  43. package/dist/DateInputUtils.js.map +1 -1
  44. package/dist/DateTimeInput.d.ts +1 -1
  45. package/dist/DateTimeInput.d.ts.map +1 -1
  46. package/dist/DateTimeInput.js +7 -10
  47. package/dist/DateTimeInput.js.map +1 -1
  48. package/dist/DebouncedSearchInput.js +0 -14
  49. package/dist/DebouncedSearchInput.js.map +1 -1
  50. package/dist/DragUtils.d.ts +1 -1
  51. package/dist/DragUtils.d.ts.map +1 -1
  52. package/dist/DragUtils.js +4 -16
  53. package/dist/DragUtils.js.map +1 -1
  54. package/dist/DraggableItemList.d.ts +4 -4
  55. package/dist/DraggableItemList.d.ts.map +1 -1
  56. package/dist/DraggableItemList.js +22 -44
  57. package/dist/DraggableItemList.js.map +1 -1
  58. package/dist/EditableItemList.d.ts +1 -1
  59. package/dist/EditableItemList.d.ts.map +1 -1
  60. package/dist/EditableItemList.js +2 -6
  61. package/dist/EditableItemList.js.map +1 -1
  62. package/dist/HierarchicalCheckboxMenu.d.ts +3 -3
  63. package/dist/HierarchicalCheckboxMenu.d.ts.map +1 -1
  64. package/dist/HierarchicalCheckboxMenu.js +6 -28
  65. package/dist/HierarchicalCheckboxMenu.js.map +1 -1
  66. package/dist/ItemList.d.ts +5 -5
  67. package/dist/ItemList.d.ts.map +1 -1
  68. package/dist/ItemList.js +22 -115
  69. package/dist/ItemList.js.map +1 -1
  70. package/dist/ItemListItem.d.ts +0 -1
  71. package/dist/ItemListItem.d.ts.map +1 -1
  72. package/dist/ItemListItem.js +26 -50
  73. package/dist/ItemListItem.js.map +1 -1
  74. package/dist/LoadingOverlay.d.ts +2 -2
  75. package/dist/LoadingOverlay.d.ts.map +1 -1
  76. package/dist/LoadingOverlay.js +3 -5
  77. package/dist/LoadingOverlay.js.map +1 -1
  78. package/dist/LoadingSpinner.d.ts +2 -2
  79. package/dist/LoadingSpinner.d.ts.map +1 -1
  80. package/dist/LoadingSpinner.js +2 -4
  81. package/dist/LoadingSpinner.js.map +1 -1
  82. package/dist/MaskedInput.d.ts +2 -2
  83. package/dist/MaskedInput.d.ts.map +1 -1
  84. package/dist/MaskedInput.js +26 -85
  85. package/dist/MaskedInput.js.map +1 -1
  86. package/dist/Option.d.ts +2 -2
  87. package/dist/Option.d.ts.map +1 -1
  88. package/dist/Option.js +2 -4
  89. package/dist/Option.js.map +1 -1
  90. package/dist/RadioGroup.d.ts +2 -2
  91. package/dist/RadioGroup.d.ts.map +1 -1
  92. package/dist/RadioGroup.js +4 -6
  93. package/dist/RadioGroup.js.map +1 -1
  94. package/dist/RadioItem.d.ts +1 -1
  95. package/dist/RadioItem.d.ts.map +1 -1
  96. package/dist/RadioItem.js +0 -1
  97. package/dist/RadioItem.js.map +1 -1
  98. package/dist/SearchInput.js +2 -13
  99. package/dist/SearchInput.js.map +1 -1
  100. package/dist/Select.d.ts +2 -2
  101. package/dist/Select.d.ts.map +1 -1
  102. package/dist/Select.js +2 -4
  103. package/dist/Select.js.map +1 -1
  104. package/dist/SelectValueList.d.ts +1 -1
  105. package/dist/SelectValueList.d.ts.map +1 -1
  106. package/dist/SelectValueList.js +0 -28
  107. package/dist/SelectValueList.js.map +1 -1
  108. package/dist/SocketedButton.d.ts +1 -1
  109. package/dist/SocketedButton.d.ts.map +1 -1
  110. package/dist/SocketedButton.js.map +1 -1
  111. package/dist/ThemeExport.d.ts +4 -4
  112. package/dist/ThemeExport.js +0 -4
  113. package/dist/ThemeExport.js.map +1 -1
  114. package/dist/TimeInput.d.ts +2 -2
  115. package/dist/TimeInput.d.ts.map +1 -1
  116. package/dist/TimeInput.js +2 -12
  117. package/dist/TimeInput.js.map +1 -1
  118. package/dist/TimeSlider.d.ts +2 -2
  119. package/dist/TimeSlider.d.ts.map +1 -1
  120. package/dist/TimeSlider.js +19 -33
  121. package/dist/TimeSlider.js.map +1 -1
  122. package/dist/ToastNotification.d.ts +6 -6
  123. package/dist/ToastNotification.d.ts.map +1 -1
  124. package/dist/ToastNotification.js +2 -4
  125. package/dist/ToastNotification.js.map +1 -1
  126. package/dist/UISwitch.d.ts +2 -2
  127. package/dist/UISwitch.d.ts.map +1 -1
  128. package/dist/UISwitch.js +2 -4
  129. package/dist/UISwitch.js.map +1 -1
  130. package/dist/ValidateLabelInput.d.ts +1 -1
  131. package/dist/ValidateLabelInput.d.ts.map +1 -1
  132. package/dist/ValidateLabelInput.js +3 -3
  133. package/dist/ValidateLabelInput.js.map +1 -1
  134. package/dist/context-actions/ContextActionUtils.d.ts +3 -15
  135. package/dist/context-actions/ContextActionUtils.d.ts.map +1 -1
  136. package/dist/context-actions/ContextActionUtils.js +8 -85
  137. package/dist/context-actions/ContextActionUtils.js.map +1 -1
  138. package/dist/context-actions/ContextActions.js +1 -34
  139. package/dist/context-actions/ContextActions.js.map +1 -1
  140. package/dist/context-actions/ContextMenu.js +29 -110
  141. package/dist/context-actions/ContextMenu.js.map +1 -1
  142. package/dist/context-actions/ContextMenuItem.d.ts.map +1 -1
  143. package/dist/context-actions/ContextMenuItem.js +3 -19
  144. package/dist/context-actions/ContextMenuItem.js.map +1 -1
  145. package/dist/context-actions/ContextMenuRoot.d.ts +1 -1
  146. package/dist/context-actions/ContextMenuRoot.d.ts.map +1 -1
  147. package/dist/context-actions/ContextMenuRoot.js +7 -26
  148. package/dist/context-actions/ContextMenuRoot.js.map +1 -1
  149. package/dist/context-actions/GlobalContextAction.js +0 -15
  150. package/dist/context-actions/GlobalContextAction.js.map +1 -1
  151. package/dist/context-actions/GlobalContextActions.js +0 -6
  152. package/dist/context-actions/GlobalContextActions.js.map +1 -1
  153. package/dist/context-actions/index.js.map +1 -1
  154. package/dist/index.d.ts +1 -0
  155. package/dist/index.d.ts.map +1 -1
  156. package/dist/index.js +1 -0
  157. package/dist/index.js.map +1 -1
  158. package/dist/menu-actions/DropdownMenu.d.ts +3 -3
  159. package/dist/menu-actions/DropdownMenu.d.ts.map +1 -1
  160. package/dist/menu-actions/DropdownMenu.js +4 -32
  161. package/dist/menu-actions/DropdownMenu.js.map +1 -1
  162. package/dist/menu-actions/Menu.d.ts +3 -3
  163. package/dist/menu-actions/Menu.d.ts.map +1 -1
  164. package/dist/menu-actions/Menu.js +7 -52
  165. package/dist/menu-actions/Menu.js.map +1 -1
  166. package/dist/menu-actions/index.d.ts +2 -1
  167. package/dist/menu-actions/index.d.ts.map +1 -1
  168. package/dist/menu-actions/index.js +2 -2
  169. package/dist/menu-actions/index.js.map +1 -1
  170. package/dist/modal/Modal.d.ts +2 -2
  171. package/dist/modal/Modal.d.ts.map +1 -1
  172. package/dist/modal/Modal.js +3 -9
  173. package/dist/modal/Modal.js.map +1 -1
  174. package/dist/modal/ModalBody.d.ts +1 -1
  175. package/dist/modal/ModalBody.d.ts.map +1 -1
  176. package/dist/modal/ModalBody.js +2 -4
  177. package/dist/modal/ModalBody.js.map +1 -1
  178. package/dist/modal/ModalFooter.d.ts +1 -1
  179. package/dist/modal/ModalFooter.d.ts.map +1 -1
  180. package/dist/modal/ModalFooter.js +2 -4
  181. package/dist/modal/ModalFooter.js.map +1 -1
  182. package/dist/modal/ModalHeader.d.ts +1 -1
  183. package/dist/modal/ModalHeader.d.ts.map +1 -1
  184. package/dist/modal/ModalHeader.js +2 -4
  185. package/dist/modal/ModalHeader.js.map +1 -1
  186. package/dist/modal/index.js.map +1 -1
  187. package/dist/navigation/Menu.d.ts +3 -3
  188. package/dist/navigation/Menu.d.ts.map +1 -1
  189. package/dist/navigation/Menu.js +2 -2
  190. package/dist/navigation/Menu.js.map +1 -1
  191. package/dist/navigation/MenuItem.d.ts +4 -4
  192. package/dist/navigation/MenuItem.d.ts.map +1 -1
  193. package/dist/navigation/MenuItem.js +4 -7
  194. package/dist/navigation/MenuItem.js.map +1 -1
  195. package/dist/navigation/Page.d.ts +2 -2
  196. package/dist/navigation/Page.d.ts.map +1 -1
  197. package/dist/navigation/Page.js +2 -3
  198. package/dist/navigation/Page.js.map +1 -1
  199. package/dist/navigation/Stack.d.ts +2 -2
  200. package/dist/navigation/Stack.d.ts.map +1 -1
  201. package/dist/navigation/Stack.js +3 -6
  202. package/dist/navigation/Stack.js.map +1 -1
  203. package/dist/navigation/index.js.map +1 -1
  204. package/dist/popper/Popper.d.ts +2 -2
  205. package/dist/popper/Popper.d.ts.map +1 -1
  206. package/dist/popper/Popper.js +13 -46
  207. package/dist/popper/Popper.js.map +1 -1
  208. package/dist/popper/Tooltip.d.ts +1 -1
  209. package/dist/popper/Tooltip.d.ts.map +1 -1
  210. package/dist/popper/Tooltip.js +0 -56
  211. package/dist/popper/Tooltip.js.map +1 -1
  212. package/dist/popper/index.js.map +1 -1
  213. package/dist/shortcuts/GlobalShortcuts.js.map +1 -1
  214. package/dist/shortcuts/Shortcut.d.ts +2 -2
  215. package/dist/shortcuts/Shortcut.d.ts.map +1 -1
  216. package/dist/shortcuts/Shortcut.js +19 -76
  217. package/dist/shortcuts/Shortcut.js.map +1 -1
  218. package/dist/shortcuts/ShortcutRegistry.d.ts +1 -1
  219. package/dist/shortcuts/ShortcutRegistry.d.ts.map +1 -1
  220. package/dist/shortcuts/ShortcutRegistry.js +3 -18
  221. package/dist/shortcuts/ShortcutRegistry.js.map +1 -1
  222. package/dist/shortcuts/index.js.map +1 -1
  223. package/package.json +8 -8
@@ -1,9 +1,6 @@
1
1
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
-
3
2
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
-
5
3
  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; }
6
-
7
4
  import React, { Component } from 'react';
8
5
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
9
6
  import { vsCheck, dhSort } from '@deephaven/icons';
@@ -14,24 +11,17 @@ import DropdownMenu from "./menu-actions/DropdownMenu.js";
14
11
  import "./CustomTimeSelect.css";
15
12
  var CUSTOM_OPTION = -1;
16
13
  var MENU_NAVIGATION_DIRECTION;
17
-
18
14
  (function (MENU_NAVIGATION_DIRECTION) {
19
15
  MENU_NAVIGATION_DIRECTION["UP"] = "UP";
20
16
  MENU_NAVIGATION_DIRECTION["DOWN"] = "DOWN";
21
17
  })(MENU_NAVIGATION_DIRECTION || (MENU_NAVIGATION_DIRECTION = {}));
22
-
23
18
  class CustomTimeSelect extends Component {
24
19
  constructor(props) {
25
20
  super(props);
26
-
27
21
  _defineProperty(this, "csContainer", void 0);
28
-
29
22
  _defineProperty(this, "menuContainer", void 0);
30
-
31
23
  _defineProperty(this, "button", void 0);
32
-
33
24
  _defineProperty(this, "input", void 0);
34
-
35
25
  var {
36
26
  value,
37
27
  valueToTime
@@ -56,7 +46,6 @@ class CustomTimeSelect extends Component {
56
46
  inputFocused: false
57
47
  };
58
48
  }
59
-
60
49
  getSelectedText() {
61
50
  var {
62
51
  options,
@@ -66,22 +55,17 @@ class CustomTimeSelect extends Component {
66
55
  var {
67
56
  customTime
68
57
  } = this.state;
69
-
70
58
  if (value === null) {
71
59
  return placeholder;
72
60
  }
73
-
74
61
  for (var i = 0; i < options.length; i += 1) {
75
62
  var option = options[i];
76
-
77
63
  if (option.value === value) {
78
64
  return option.title;
79
65
  }
80
66
  }
81
-
82
67
  return TimeUtils.formatTime(customTime);
83
68
  }
84
-
85
69
  setInputWidth() {
86
70
  if (this.csContainer.current) {
87
71
  this.setState({
@@ -89,27 +73,21 @@ class CustomTimeSelect extends Component {
89
73
  });
90
74
  }
91
75
  }
92
-
93
76
  focus() {
94
77
  var _this$button$current;
95
-
96
78
  (_this$button$current = this.button.current) === null || _this$button$current === void 0 ? void 0 : _this$button$current.focus();
97
79
  }
98
-
99
80
  updateInputValue(value) {
100
81
  var {
101
82
  onChange
102
83
  } = this.props;
103
84
  onChange(value);
104
85
  }
105
-
106
86
  handleResize() {
107
87
  this.setInputWidth();
108
88
  }
109
-
110
89
  handleMenuKeyDown(event) {
111
90
  var _this$button$current2;
112
-
113
91
  var {
114
92
  keyboardOptionIndex,
115
93
  inputFocused
@@ -117,7 +95,6 @@ class CustomTimeSelect extends Component {
117
95
  var {
118
96
  options
119
97
  } = this.props;
120
-
121
98
  switch (event.key) {
122
99
  case 'Enter':
123
100
  case ' ':
@@ -127,45 +104,37 @@ class CustomTimeSelect extends Component {
127
104
  } else {
128
105
  this.updateInputValue(options[keyboardOptionIndex].value);
129
106
  }
130
-
131
107
  this.closeMenu();
132
108
  (_this$button$current2 = this.button.current) === null || _this$button$current2 === void 0 ? void 0 : _this$button$current2.focus();
133
109
  event.stopPropagation();
134
110
  event.preventDefault();
135
111
  break;
136
-
137
112
  case 'Tab':
138
113
  if (event.shiftKey) {
139
114
  this.handleMenuNavigation(CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP);
140
115
  } else {
141
116
  this.handleMenuNavigation(CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN);
142
117
  }
143
-
144
118
  event.stopPropagation();
145
119
  event.preventDefault();
146
120
  break;
147
-
148
121
  case 'ArrowUp':
149
122
  this.handleMenuNavigation(CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP);
150
123
  event.stopPropagation();
151
124
  event.preventDefault();
152
125
  break;
153
-
154
126
  case 'ArrowDown':
155
127
  this.handleMenuNavigation(CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN);
156
128
  event.stopPropagation();
157
129
  event.preventDefault();
158
130
  break;
159
-
160
131
  case 'Escape':
161
132
  this.closeMenu();
162
133
  break;
163
-
164
134
  default:
165
135
  break;
166
136
  }
167
137
  }
168
-
169
138
  handleMenuNavigation(direction) {
170
139
  var {
171
140
  keyboardOptionIndex,
@@ -176,7 +145,6 @@ class CustomTimeSelect extends Component {
176
145
  } = this.props;
177
146
  var menuOptionsLength = options.length;
178
147
  var newKeyboardOptionIndex = keyboardOptionIndex;
179
-
180
148
  switch (direction) {
181
149
  case CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP:
182
150
  if (!inputFocused && keyboardOptionIndex === 0) {
@@ -185,7 +153,6 @@ class CustomTimeSelect extends Component {
185
153
  } else if (inputFocused) {
186
154
  this.focusOption(keyboardOptionIndex);
187
155
  }
188
-
189
156
  if (keyboardOptionIndex > 0 && !inputFocused) {
190
157
  newKeyboardOptionIndex = (newKeyboardOptionIndex - 1) % menuOptionsLength;
191
158
  this.setState({
@@ -197,10 +164,8 @@ class CustomTimeSelect extends Component {
197
164
  keyboardOptionIndex: newKeyboardOptionIndex
198
165
  });
199
166
  }
200
-
201
167
  this.scrollOptionIntoView(newKeyboardOptionIndex);
202
168
  break;
203
-
204
169
  case CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN:
205
170
  if (!inputFocused && keyboardOptionIndex === menuOptionsLength - 1) {
206
171
  this.focusInput();
@@ -208,22 +173,18 @@ class CustomTimeSelect extends Component {
208
173
  } else if (inputFocused) {
209
174
  this.focusOption(keyboardOptionIndex);
210
175
  }
211
-
212
176
  if (keyboardOptionIndex < menuOptionsLength && !(inputFocused && keyboardOptionIndex === 0)) {
213
177
  newKeyboardOptionIndex = (newKeyboardOptionIndex + 1) % menuOptionsLength;
214
178
  this.setState({
215
179
  keyboardOptionIndex: newKeyboardOptionIndex
216
180
  });
217
181
  }
218
-
219
182
  this.scrollOptionIntoView(newKeyboardOptionIndex);
220
183
  break;
221
-
222
184
  default:
223
185
  break;
224
186
  }
225
187
  }
226
-
227
188
  handleOptionClick(event) {
228
189
  var optionIndex = Number(event.currentTarget.value);
229
190
  var {
@@ -233,7 +194,6 @@ class CustomTimeSelect extends Component {
233
194
  var {
234
195
  customTime
235
196
  } = this.state;
236
-
237
197
  if (optionIndex === CUSTOM_OPTION) {
238
198
  var update = timeToValue(customTime);
239
199
  this.updateAndClose(update);
@@ -241,24 +201,19 @@ class CustomTimeSelect extends Component {
241
201
  this.updateAndClose(options[optionIndex].value);
242
202
  }
243
203
  }
244
-
245
204
  updateAndClose(update) {
246
205
  var _this$button$current3;
247
-
248
206
  this.updateInputValue(update);
249
207
  this.closeMenu();
250
208
  (_this$button$current3 = this.button.current) === null || _this$button$current3 === void 0 ? void 0 : _this$button$current3.focus();
251
209
  }
252
-
253
210
  handleOptionFocus(event) {
254
211
  this.setState({
255
212
  keyboardOptionIndex: Number(event.target.value)
256
213
  });
257
214
  }
258
-
259
215
  handleMenuOpened() {
260
216
  var _this$menuContainer$c;
261
-
262
217
  var {
263
218
  options,
264
219
  value
@@ -268,48 +223,36 @@ class CustomTimeSelect extends Component {
268
223
  } = this.state;
269
224
  this.scrollOptionIntoView(keyboardOptionIndex);
270
225
  var activeOption = (_this$menuContainer$c = this.menuContainer.current) === null || _this$menuContainer$c === void 0 ? void 0 : _this$menuContainer$c.querySelector('.cs-option-btn.keyboard-active');
271
-
272
226
  if (activeOption instanceof HTMLElement) {
273
227
  activeOption.focus();
274
228
  }
275
-
276
229
  if (value === null) {
277
230
  return;
278
231
  }
279
-
280
232
  var valueIndex = options.map(option => option.value).indexOf(value);
281
-
282
233
  if (valueIndex < 0) {
283
234
  // The custom option should be selected
284
235
  this.focusInput();
285
236
  }
286
237
  }
287
-
288
238
  focusInput() {
289
239
  var _this$input$current;
290
-
291
240
  (_this$input$current = this.input.current) === null || _this$input$current === void 0 ? void 0 : _this$input$current.focus();
292
241
  }
293
-
294
242
  focusOption(index) {
295
243
  var _this$menuContainer$c2;
296
-
297
244
  var options = (_this$menuContainer$c2 = this.menuContainer.current) === null || _this$menuContainer$c2 === void 0 ? void 0 : _this$menuContainer$c2.querySelector('.cs-options');
298
-
299
245
  if (options && options.children != null) {
300
246
  var option = options.children.item(index);
301
-
302
247
  if (option instanceof HTMLElement) {
303
248
  option.focus();
304
249
  }
305
250
  }
306
251
  }
307
-
308
252
  handleMenuExited() {
309
253
  var {
310
254
  menuIsOpen
311
255
  } = this.state;
312
-
313
256
  if (menuIsOpen) {
314
257
  this.setState({
315
258
  menuIsOpen: false,
@@ -317,7 +260,6 @@ class CustomTimeSelect extends Component {
317
260
  });
318
261
  }
319
262
  }
320
-
321
263
  handleCustomInput(value) {
322
264
  var {
323
265
  timeToValue
@@ -328,7 +270,6 @@ class CustomTimeSelect extends Component {
328
270
  customTime: value
329
271
  });
330
272
  }
331
-
332
273
  updateFromCustom() {
333
274
  var {
334
275
  timeToValue
@@ -339,21 +280,17 @@ class CustomTimeSelect extends Component {
339
280
  var update = timeToValue(customTime);
340
281
  this.updateInputValue(update);
341
282
  }
342
-
343
283
  toggleMenu(event) {
344
284
  var {
345
285
  menuIsOpen
346
286
  } = this.state;
347
-
348
287
  if (menuIsOpen) {
349
288
  this.closeMenu();
350
289
  } else {
351
290
  this.openMenu();
352
291
  }
353
-
354
292
  event.stopPropagation();
355
293
  }
356
-
357
294
  openMenu() {
358
295
  this.updateKeyboardIndex();
359
296
  this.setInputWidth();
@@ -361,47 +298,36 @@ class CustomTimeSelect extends Component {
361
298
  menuIsOpen: true
362
299
  });
363
300
  }
364
-
365
301
  closeMenu() {
366
302
  var focusButton = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
367
303
  this.setState({
368
304
  menuIsOpen: false
369
305
  });
370
-
371
306
  if (focusButton) {
372
307
  var _this$button$current4;
373
-
374
308
  (_this$button$current4 = this.button.current) === null || _this$button$current4 === void 0 ? void 0 : _this$button$current4.focus();
375
309
  }
376
310
  }
377
-
378
311
  updateKeyboardIndex() {
379
312
  var {
380
313
  options,
381
314
  value
382
315
  } = this.props;
383
-
384
316
  if (value === null) {
385
317
  return;
386
318
  }
387
-
388
319
  var valueIndex = options.map(option => option.value).indexOf(value);
389
-
390
320
  if (valueIndex > 0) {
391
321
  this.setState({
392
322
  keyboardOptionIndex: valueIndex
393
323
  });
394
324
  }
395
325
  }
396
-
397
326
  scrollOptionIntoView(index) {
398
327
  var _this$menuContainer$c3;
399
-
400
328
  var options = (_this$menuContainer$c3 = this.menuContainer.current) === null || _this$menuContainer$c3 === void 0 ? void 0 : _this$menuContainer$c3.querySelector('.cs-options');
401
-
402
329
  if (options && options.children != null) {
403
330
  var activeOption = options.children.item(index);
404
-
405
331
  if (activeOption instanceof HTMLElement && activeOption.offsetTop > CustomTimeSelect.DROP_DOWN_MENU_HEIGHT) {
406
332
  options.scrollTop = activeOption.offsetTop - CustomTimeSelect.DROP_DOWN_MENU_HEIGHT;
407
333
  } else if (activeOption instanceof HTMLElement && activeOption.offsetTop < 0 || index === 0) {
@@ -409,7 +335,6 @@ class CustomTimeSelect extends Component {
409
335
  }
410
336
  }
411
337
  }
412
-
413
338
  renderMenuElement() {
414
339
  var {
415
340
  inputWidth
@@ -431,7 +356,6 @@ class CustomTimeSelect extends Component {
431
356
  className: "cs-options"
432
357
  }, this.renderOptions())));
433
358
  }
434
-
435
359
  renderOptions() {
436
360
  var {
437
361
  options,
@@ -446,7 +370,6 @@ class CustomTimeSelect extends Component {
446
370
  } = this.state;
447
371
  var matchFound = false;
448
372
  var optionArray = [];
449
-
450
373
  for (var index = 0; index < options.length; index += 1) {
451
374
  var option = options[index];
452
375
  var key = "option-".concat(index, "-").concat(option.value);
@@ -467,7 +390,6 @@ class CustomTimeSelect extends Component {
467
390
  className: "mr-4"
468
391
  }), option.title));
469
392
  }
470
-
471
393
  optionArray.push( /*#__PURE__*/React.createElement("hr", {
472
394
  className: "cs-divider",
473
395
  key: "option-divider"
@@ -512,7 +434,6 @@ class CustomTimeSelect extends Component {
512
434
  }));
513
435
  return optionArray;
514
436
  }
515
-
516
437
  render() {
517
438
  var {
518
439
  disabled,
@@ -571,17 +492,13 @@ class CustomTimeSelect extends Component {
571
492
  }
572
493
  }))));
573
494
  }
574
-
575
495
  }
576
-
577
496
  _defineProperty(CustomTimeSelect, "MENU_NAVIGATION_DIRECTION", MENU_NAVIGATION_DIRECTION);
578
-
579
497
  _defineProperty(CustomTimeSelect, "DROP_DOWN_MENU_HEIGHT", 125);
580
-
581
498
  _defineProperty(CustomTimeSelect, "defaultProps", {
582
- onChange() {// no-op
499
+ onChange() {
500
+ // no-op
583
501
  },
584
-
585
502
  value: null,
586
503
  disabled: false,
587
504
  popperOptions: {},
@@ -593,6 +510,5 @@ _defineProperty(CustomTimeSelect, "defaultProps", {
593
510
  invalid: false,
594
511
  'data-testid': undefined
595
512
  });
596
-
597
513
  export default CustomTimeSelect;
598
514
  //# sourceMappingURL=CustomTimeSelect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomTimeSelect.js","names":["React","Component","FontAwesomeIcon","vsCheck","dhSort","TimeUtils","classNames","TimeInput","DropdownMenu","CUSTOM_OPTION","MENU_NAVIGATION_DIRECTION","CustomTimeSelect","constructor","props","value","valueToTime","toggleMenu","bind","handleMenuKeyDown","closeMenu","handleOptionClick","handleOptionFocus","handleMenuOpened","handleMenuExited","handleCustomInput","csContainer","createRef","menuContainer","button","input","state","keyboardOptionIndex","menuIsOpen","inputWidth","customTime","inputFocused","getSelectedText","options","placeholder","i","length","option","title","formatTime","setInputWidth","current","setState","getBoundingClientRect","width","focus","updateInputValue","onChange","handleResize","event","key","updateFromCustom","stopPropagation","preventDefault","shiftKey","handleMenuNavigation","UP","DOWN","direction","menuOptionsLength","newKeyboardOptionIndex","focusInput","focusOption","scrollOptionIntoView","optionIndex","Number","currentTarget","timeToValue","update","updateAndClose","target","activeOption","querySelector","HTMLElement","valueIndex","map","indexOf","index","children","item","openMenu","updateKeyboardIndex","focusButton","offsetTop","DROP_DOWN_MENU_HEIGHT","scrollTop","renderMenuElement","renderOptions","icon","customText","matchFound","optionArray","push","render","disabled","invalid","dataTestId","popperOptions","placement","modifiers","preventOverflow","enabled","menuElement","maxWidth","Math","round","time","undefined"],"sources":["../src/CustomTimeSelect.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport { PopperOptions } from 'popper.js';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsCheck, dhSort, IconDefinition } from '@deephaven/icons';\nimport { TimeUtils } from '@deephaven/utils';\nimport classNames from 'classnames';\nimport TimeInput, { TimeInputElement } from './TimeInput';\nimport DropdownMenu from './menu-actions/DropdownMenu';\nimport './CustomTimeSelect.scss';\n\nconst CUSTOM_OPTION = -1;\n\nenum MENU_NAVIGATION_DIRECTION {\n UP = 'UP',\n DOWN = 'DOWN',\n}\n\ntype CustomTimeSelectProps = {\n options: { title: string; value: number }[];\n popperOptions: PopperOptions;\n value: number | null;\n onChange(value: number): void;\n disabled: boolean;\n icon: IconDefinition;\n placeholder: string;\n customText: string;\n // Defaults to converting the value in milliseconds to time in seconds\n valueToTime(val: number | null): number;\n // Defaults to converting the time in seconds to value in milliseconds\n timeToValue(time: number): number;\n invalid: boolean;\n 'data-testid'?: string;\n};\n\ntype TimeInSeconds = number;\n\ntype CustomTimeSelectState = {\n keyboardOptionIndex: number;\n menuIsOpen: boolean;\n inputWidth: number;\n customTime: TimeInSeconds;\n inputFocused: boolean;\n};\n\nclass CustomTimeSelect extends Component<\n CustomTimeSelectProps,\n CustomTimeSelectState\n> {\n static MENU_NAVIGATION_DIRECTION = MENU_NAVIGATION_DIRECTION;\n\n static DROP_DOWN_MENU_HEIGHT = 125;\n\n static defaultProps: Partial<CustomTimeSelectProps> = {\n onChange(): void {\n // no-op\n },\n value: null,\n disabled: false,\n popperOptions: {},\n icon: vsCheck,\n customText: 'Custom',\n placeholder: 'Select a time',\n valueToTime: value => (value === null ? 0 : Math.round(value / 1000)),\n timeToValue: time => time * 1000,\n invalid: false,\n 'data-testid': undefined,\n };\n\n constructor(props: CustomTimeSelectProps) {\n super(props);\n\n const { value, valueToTime } = props;\n\n this.toggleMenu = this.toggleMenu.bind(this);\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.closeMenu = this.closeMenu.bind(this);\n\n this.handleOptionClick = this.handleOptionClick.bind(this);\n this.handleOptionFocus = this.handleOptionFocus.bind(this);\n\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n this.handleCustomInput = this.handleCustomInput.bind(this);\n\n this.csContainer = React.createRef();\n this.menuContainer = React.createRef();\n this.button = React.createRef();\n this.input = React.createRef();\n\n this.state = {\n keyboardOptionIndex: 0,\n menuIsOpen: false,\n inputWidth: 100,\n customTime: valueToTime(value),\n inputFocused: false,\n };\n }\n\n csContainer: React.RefObject<HTMLDivElement>;\n\n menuContainer: React.RefObject<HTMLDivElement>;\n\n button: React.RefObject<HTMLButtonElement>;\n\n input: React.RefObject<TimeInputElement>;\n\n getSelectedText(): string {\n const { options, value, placeholder } = this.props;\n const { customTime } = this.state;\n\n if (value === null) {\n return placeholder;\n }\n\n for (let i = 0; i < options.length; i += 1) {\n const option = options[i];\n if (option.value === value) {\n return option.title;\n }\n }\n\n return TimeUtils.formatTime(customTime);\n }\n\n setInputWidth(): void {\n if (this.csContainer.current) {\n this.setState({\n inputWidth: this.csContainer.current.getBoundingClientRect().width,\n });\n }\n }\n\n focus(): void {\n this.button.current?.focus();\n }\n\n updateInputValue(value: number): void {\n const { onChange } = this.props;\n onChange(value);\n }\n\n handleResize(): void {\n this.setInputWidth();\n }\n\n handleMenuKeyDown(event: React.KeyboardEvent<HTMLDivElement>): void {\n const { keyboardOptionIndex, inputFocused } = this.state;\n const { options } = this.props;\n\n switch (event.key) {\n case 'Enter':\n case ' ': // Space Bar\n if (inputFocused) {\n this.updateFromCustom();\n } else {\n this.updateInputValue(options[keyboardOptionIndex].value);\n }\n this.closeMenu();\n this.button.current?.focus();\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Tab':\n if (event.shiftKey) {\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP\n );\n } else {\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN\n );\n }\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP\n );\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowDown':\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN\n );\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Escape':\n this.closeMenu();\n break;\n default:\n break;\n }\n }\n\n handleMenuNavigation(direction: MENU_NAVIGATION_DIRECTION): void {\n const { keyboardOptionIndex, inputFocused } = this.state;\n const { options } = this.props;\n const menuOptionsLength = options.length;\n let newKeyboardOptionIndex = keyboardOptionIndex;\n switch (direction) {\n case CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP:\n if (!inputFocused && keyboardOptionIndex === 0) {\n this.focusInput();\n break;\n } else if (inputFocused) {\n this.focusOption(keyboardOptionIndex);\n }\n\n if (keyboardOptionIndex > 0 && !inputFocused) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex - 1) % menuOptionsLength;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n } else if (keyboardOptionIndex === 0) {\n newKeyboardOptionIndex = menuOptionsLength - 1;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n break;\n case CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN:\n if (!inputFocused && keyboardOptionIndex === menuOptionsLength - 1) {\n this.focusInput();\n break;\n } else if (inputFocused) {\n this.focusOption(keyboardOptionIndex);\n }\n\n if (\n keyboardOptionIndex < menuOptionsLength &&\n !(inputFocused && keyboardOptionIndex === 0)\n ) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex + 1) % menuOptionsLength;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n break;\n default:\n break;\n }\n }\n\n handleOptionClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const optionIndex = Number(event.currentTarget.value);\n const { options, timeToValue } = this.props;\n const { customTime } = this.state;\n\n if (optionIndex === CUSTOM_OPTION) {\n const update = timeToValue(customTime);\n this.updateAndClose(update);\n } else {\n this.updateAndClose(options[optionIndex].value);\n }\n }\n\n updateAndClose(update: number): void {\n this.updateInputValue(update);\n this.closeMenu();\n this.button.current?.focus();\n }\n\n handleOptionFocus(event: React.FocusEvent<HTMLButtonElement>): void {\n this.setState({ keyboardOptionIndex: Number(event.target.value) });\n }\n\n handleMenuOpened(): void {\n const { options, value } = this.props;\n const { keyboardOptionIndex } = this.state;\n this.scrollOptionIntoView(keyboardOptionIndex);\n const activeOption = this.menuContainer.current?.querySelector(\n '.cs-option-btn.keyboard-active'\n );\n if (activeOption instanceof HTMLElement) {\n activeOption.focus();\n }\n\n if (value === null) {\n return;\n }\n const valueIndex = options.map(option => option.value).indexOf(value);\n if (valueIndex < 0) {\n // The custom option should be selected\n this.focusInput();\n }\n }\n\n focusInput(): void {\n this.input.current?.focus();\n }\n\n focusOption(index: number): void {\n const options = this.menuContainer.current?.querySelector('.cs-options');\n if (options && options.children != null) {\n const option = options.children.item(index);\n if (option instanceof HTMLElement) {\n option.focus();\n }\n }\n }\n\n handleMenuExited(): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.setState({ menuIsOpen: false, keyboardOptionIndex: 0 });\n }\n }\n\n handleCustomInput(value: number): void {\n const { timeToValue } = this.props;\n\n const update = timeToValue(value);\n this.updateInputValue(update);\n this.setState({\n customTime: value,\n });\n }\n\n updateFromCustom(): void {\n const { timeToValue } = this.props;\n const { customTime } = this.state;\n\n const update = timeToValue(customTime);\n this.updateInputValue(update);\n }\n\n toggleMenu(event: React.MouseEvent<HTMLButtonElement>): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.closeMenu();\n } else {\n this.openMenu();\n }\n event.stopPropagation();\n }\n\n openMenu(): void {\n this.updateKeyboardIndex();\n this.setInputWidth();\n this.setState({ menuIsOpen: true });\n }\n\n closeMenu(focusButton = true): void {\n this.setState({ menuIsOpen: false });\n if (focusButton) {\n this.button.current?.focus();\n }\n }\n\n updateKeyboardIndex(): void {\n const { options, value } = this.props;\n if (value === null) {\n return;\n }\n const valueIndex = options.map(option => option.value).indexOf(value);\n if (valueIndex > 0) {\n this.setState({ keyboardOptionIndex: valueIndex });\n }\n }\n\n scrollOptionIntoView(index: number): void {\n const options = this.menuContainer.current?.querySelector('.cs-options');\n if (options && options.children != null) {\n const activeOption = options.children.item(index);\n if (\n activeOption instanceof HTMLElement &&\n activeOption.offsetTop > CustomTimeSelect.DROP_DOWN_MENU_HEIGHT\n ) {\n options.scrollTop =\n activeOption.offsetTop - CustomTimeSelect.DROP_DOWN_MENU_HEIGHT;\n } else if (\n (activeOption instanceof HTMLElement && activeOption.offsetTop < 0) ||\n index === 0\n ) {\n options.scrollTop = 0;\n }\n }\n }\n\n renderMenuElement(): JSX.Element {\n const { inputWidth } = this.state;\n return (\n <div\n className=\"cs-menu-container\"\n ref={this.menuContainer}\n role=\"presentation\"\n onKeyDown={this.handleMenuKeyDown}\n onClick={event => {\n event.stopPropagation();\n }}\n style={{ width: inputWidth }}\n >\n <div className=\"cs-options-container\">\n <div className=\"cs-options\">{this.renderOptions()}</div>\n </div>\n </div>\n );\n }\n\n renderOptions(): React.ReactNode {\n const { options, value, icon, customText } = this.props;\n const { keyboardOptionIndex, customTime, inputFocused } = this.state;\n\n let matchFound = false;\n const optionArray: JSX.Element[] = [];\n for (let index = 0; index < options.length; index += 1) {\n const option = options[index];\n const key = `option-${index}-${option.value}`;\n matchFound = matchFound || option.value === value;\n optionArray.push(\n <button\n key={key}\n type=\"button\"\n value={index}\n className={classNames('cs-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index && !inputFocused,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {option.value === value && (\n <FontAwesomeIcon icon={icon} className=\"mr-2\" />\n )}\n {option.value !== value && <span className=\"mr-4\" />}\n {option.title}\n </button>\n );\n }\n\n optionArray.push(<hr className=\"cs-divider\" key=\"option-divider\" />);\n\n optionArray.push(\n <button\n key=\"option-custom-label\"\n type=\"button\"\n value={CUSTOM_OPTION}\n className={classNames('cs-option-btn', {\n 'keyboard-active': inputFocused,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {!matchFound && value !== null ? (\n <FontAwesomeIcon icon={icon} className=\"mr-2\" />\n ) : (\n <span className=\"mr-4\" />\n )}\n {customText}\n </button>\n );\n\n optionArray.push(\n <div key=\"cs-custom-container\" className=\"cs-custom-container\">\n <span className=\"mr-2\" />\n <TimeInput\n key=\"option-input\"\n ref={this.input}\n onChange={this.handleCustomInput}\n value={customTime}\n onFocus={() => this.setState({ inputFocused: true })}\n onBlur={() => this.setState({ inputFocused: false })}\n />\n <span className=\"ml-2\" />\n </div>\n );\n\n optionArray.push(<hr key=\"option-end\" className=\"mb-2\" />);\n\n return optionArray;\n }\n\n render(): JSX.Element {\n const { disabled, invalid, value, 'data-testid': dataTestId } = this.props;\n const { menuIsOpen } = this.state;\n let { popperOptions } = this.props;\n popperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: { enabled: false },\n },\n ...popperOptions,\n };\n\n return (\n <div\n className=\"input-group cs-container context-menu\"\n ref={this.csContainer}\n data-testid={dataTestId}\n >\n <div\n className={classNames('input-group-append cs-dropdown', {\n 'cs-dropdown-invalid': invalid,\n })}\n >\n <button\n type=\"button\"\n className={classNames('btn cs-btn form-control', {\n 'cs-btn-invalid': invalid,\n })}\n ref={this.button}\n onClick={this.toggleMenu}\n disabled={disabled}\n >\n <span\n className={classNames({\n 'text-muted': value === null,\n })}\n >\n {this.getSelectedText()}\n </span>\n <span>\n <FontAwesomeIcon icon={dhSort} className=\"cs-caret\" />\n </span>\n <DropdownMenu\n isShown={menuIsOpen}\n actions={{ menuElement: this.renderMenuElement() }}\n popperOptions={popperOptions}\n popperClassName=\"CustomTimeSelect\"\n onMenuOpened={this.handleMenuOpened}\n onMenuClosed={this.handleMenuExited}\n menuStyle={{ maxWidth: '100rem' }}\n />\n </button>\n </div>\n </div>\n );\n }\n}\n\nexport default CustomTimeSelect;\n"],"mappings":"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"}
1
+ {"version":3,"file":"CustomTimeSelect.js","names":["React","Component","FontAwesomeIcon","vsCheck","dhSort","TimeUtils","classNames","TimeInput","DropdownMenu","CUSTOM_OPTION","MENU_NAVIGATION_DIRECTION","CustomTimeSelect","constructor","props","value","valueToTime","toggleMenu","bind","handleMenuKeyDown","closeMenu","handleOptionClick","handleOptionFocus","handleMenuOpened","handleMenuExited","handleCustomInput","csContainer","createRef","menuContainer","button","input","state","keyboardOptionIndex","menuIsOpen","inputWidth","customTime","inputFocused","getSelectedText","options","placeholder","i","length","option","title","formatTime","setInputWidth","current","setState","getBoundingClientRect","width","focus","updateInputValue","onChange","handleResize","event","key","updateFromCustom","stopPropagation","preventDefault","shiftKey","handleMenuNavigation","UP","DOWN","direction","menuOptionsLength","newKeyboardOptionIndex","focusInput","focusOption","scrollOptionIntoView","optionIndex","Number","currentTarget","timeToValue","update","updateAndClose","target","activeOption","querySelector","HTMLElement","valueIndex","map","indexOf","index","children","item","openMenu","updateKeyboardIndex","focusButton","offsetTop","DROP_DOWN_MENU_HEIGHT","scrollTop","renderMenuElement","renderOptions","icon","customText","matchFound","optionArray","push","render","disabled","invalid","dataTestId","popperOptions","placement","modifiers","preventOverflow","enabled","menuElement","maxWidth","Math","round","time","undefined"],"sources":["../src/CustomTimeSelect.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport { PopperOptions } from 'popper.js';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsCheck, dhSort, IconDefinition } from '@deephaven/icons';\nimport { TimeUtils } from '@deephaven/utils';\nimport classNames from 'classnames';\nimport TimeInput, { TimeInputElement } from './TimeInput';\nimport DropdownMenu from './menu-actions/DropdownMenu';\nimport './CustomTimeSelect.scss';\n\nconst CUSTOM_OPTION = -1;\n\nenum MENU_NAVIGATION_DIRECTION {\n UP = 'UP',\n DOWN = 'DOWN',\n}\n\ntype CustomTimeSelectProps = {\n options: { title: string; value: number }[];\n popperOptions: PopperOptions;\n value: number | null;\n onChange(value: number): void;\n disabled: boolean;\n icon: IconDefinition;\n placeholder: string;\n customText: string;\n // Defaults to converting the value in milliseconds to time in seconds\n valueToTime(val: number | null): number;\n // Defaults to converting the time in seconds to value in milliseconds\n timeToValue(time: number): number;\n invalid: boolean;\n 'data-testid'?: string;\n};\n\ntype TimeInSeconds = number;\n\ntype CustomTimeSelectState = {\n keyboardOptionIndex: number;\n menuIsOpen: boolean;\n inputWidth: number;\n customTime: TimeInSeconds;\n inputFocused: boolean;\n};\n\nclass CustomTimeSelect extends Component<\n CustomTimeSelectProps,\n CustomTimeSelectState\n> {\n static MENU_NAVIGATION_DIRECTION = MENU_NAVIGATION_DIRECTION;\n\n static DROP_DOWN_MENU_HEIGHT = 125;\n\n static defaultProps: Partial<CustomTimeSelectProps> = {\n onChange(): void {\n // no-op\n },\n value: null,\n disabled: false,\n popperOptions: {},\n icon: vsCheck,\n customText: 'Custom',\n placeholder: 'Select a time',\n valueToTime: value => (value === null ? 0 : Math.round(value / 1000)),\n timeToValue: time => time * 1000,\n invalid: false,\n 'data-testid': undefined,\n };\n\n constructor(props: CustomTimeSelectProps) {\n super(props);\n\n const { value, valueToTime } = props;\n\n this.toggleMenu = this.toggleMenu.bind(this);\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.closeMenu = this.closeMenu.bind(this);\n\n this.handleOptionClick = this.handleOptionClick.bind(this);\n this.handleOptionFocus = this.handleOptionFocus.bind(this);\n\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n this.handleCustomInput = this.handleCustomInput.bind(this);\n\n this.csContainer = React.createRef();\n this.menuContainer = React.createRef();\n this.button = React.createRef();\n this.input = React.createRef();\n\n this.state = {\n keyboardOptionIndex: 0,\n menuIsOpen: false,\n inputWidth: 100,\n customTime: valueToTime(value),\n inputFocused: false,\n };\n }\n\n csContainer: React.RefObject<HTMLDivElement>;\n\n menuContainer: React.RefObject<HTMLDivElement>;\n\n button: React.RefObject<HTMLButtonElement>;\n\n input: React.RefObject<TimeInputElement>;\n\n getSelectedText(): string {\n const { options, value, placeholder } = this.props;\n const { customTime } = this.state;\n\n if (value === null) {\n return placeholder;\n }\n\n for (let i = 0; i < options.length; i += 1) {\n const option = options[i];\n if (option.value === value) {\n return option.title;\n }\n }\n\n return TimeUtils.formatTime(customTime);\n }\n\n setInputWidth(): void {\n if (this.csContainer.current) {\n this.setState({\n inputWidth: this.csContainer.current.getBoundingClientRect().width,\n });\n }\n }\n\n focus(): void {\n this.button.current?.focus();\n }\n\n updateInputValue(value: number): void {\n const { onChange } = this.props;\n onChange(value);\n }\n\n handleResize(): void {\n this.setInputWidth();\n }\n\n handleMenuKeyDown(event: React.KeyboardEvent<HTMLDivElement>): void {\n const { keyboardOptionIndex, inputFocused } = this.state;\n const { options } = this.props;\n\n switch (event.key) {\n case 'Enter':\n case ' ': // Space Bar\n if (inputFocused) {\n this.updateFromCustom();\n } else {\n this.updateInputValue(options[keyboardOptionIndex].value);\n }\n this.closeMenu();\n this.button.current?.focus();\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Tab':\n if (event.shiftKey) {\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP\n );\n } else {\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN\n );\n }\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP\n );\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowDown':\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN\n );\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Escape':\n this.closeMenu();\n break;\n default:\n break;\n }\n }\n\n handleMenuNavigation(direction: MENU_NAVIGATION_DIRECTION): void {\n const { keyboardOptionIndex, inputFocused } = this.state;\n const { options } = this.props;\n const menuOptionsLength = options.length;\n let newKeyboardOptionIndex = keyboardOptionIndex;\n switch (direction) {\n case CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP:\n if (!inputFocused && keyboardOptionIndex === 0) {\n this.focusInput();\n break;\n } else if (inputFocused) {\n this.focusOption(keyboardOptionIndex);\n }\n\n if (keyboardOptionIndex > 0 && !inputFocused) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex - 1) % menuOptionsLength;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n } else if (keyboardOptionIndex === 0) {\n newKeyboardOptionIndex = menuOptionsLength - 1;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n break;\n case CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN:\n if (!inputFocused && keyboardOptionIndex === menuOptionsLength - 1) {\n this.focusInput();\n break;\n } else if (inputFocused) {\n this.focusOption(keyboardOptionIndex);\n }\n\n if (\n keyboardOptionIndex < menuOptionsLength &&\n !(inputFocused && keyboardOptionIndex === 0)\n ) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex + 1) % menuOptionsLength;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n break;\n default:\n break;\n }\n }\n\n handleOptionClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const optionIndex = Number(event.currentTarget.value);\n const { options, timeToValue } = this.props;\n const { customTime } = this.state;\n\n if (optionIndex === CUSTOM_OPTION) {\n const update = timeToValue(customTime);\n this.updateAndClose(update);\n } else {\n this.updateAndClose(options[optionIndex].value);\n }\n }\n\n updateAndClose(update: number): void {\n this.updateInputValue(update);\n this.closeMenu();\n this.button.current?.focus();\n }\n\n handleOptionFocus(event: React.FocusEvent<HTMLButtonElement>): void {\n this.setState({ keyboardOptionIndex: Number(event.target.value) });\n }\n\n handleMenuOpened(): void {\n const { options, value } = this.props;\n const { keyboardOptionIndex } = this.state;\n this.scrollOptionIntoView(keyboardOptionIndex);\n const activeOption = this.menuContainer.current?.querySelector(\n '.cs-option-btn.keyboard-active'\n );\n if (activeOption instanceof HTMLElement) {\n activeOption.focus();\n }\n\n if (value === null) {\n return;\n }\n const valueIndex = options.map(option => option.value).indexOf(value);\n if (valueIndex < 0) {\n // The custom option should be selected\n this.focusInput();\n }\n }\n\n focusInput(): void {\n this.input.current?.focus();\n }\n\n focusOption(index: number): void {\n const options = this.menuContainer.current?.querySelector('.cs-options');\n if (options && options.children != null) {\n const option = options.children.item(index);\n if (option instanceof HTMLElement) {\n option.focus();\n }\n }\n }\n\n handleMenuExited(): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.setState({ menuIsOpen: false, keyboardOptionIndex: 0 });\n }\n }\n\n handleCustomInput(value: number): void {\n const { timeToValue } = this.props;\n\n const update = timeToValue(value);\n this.updateInputValue(update);\n this.setState({\n customTime: value,\n });\n }\n\n updateFromCustom(): void {\n const { timeToValue } = this.props;\n const { customTime } = this.state;\n\n const update = timeToValue(customTime);\n this.updateInputValue(update);\n }\n\n toggleMenu(event: React.MouseEvent<HTMLButtonElement>): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.closeMenu();\n } else {\n this.openMenu();\n }\n event.stopPropagation();\n }\n\n openMenu(): void {\n this.updateKeyboardIndex();\n this.setInputWidth();\n this.setState({ menuIsOpen: true });\n }\n\n closeMenu(focusButton = true): void {\n this.setState({ menuIsOpen: false });\n if (focusButton) {\n this.button.current?.focus();\n }\n }\n\n updateKeyboardIndex(): void {\n const { options, value } = this.props;\n if (value === null) {\n return;\n }\n const valueIndex = options.map(option => option.value).indexOf(value);\n if (valueIndex > 0) {\n this.setState({ keyboardOptionIndex: valueIndex });\n }\n }\n\n scrollOptionIntoView(index: number): void {\n const options = this.menuContainer.current?.querySelector('.cs-options');\n if (options && options.children != null) {\n const activeOption = options.children.item(index);\n if (\n activeOption instanceof HTMLElement &&\n activeOption.offsetTop > CustomTimeSelect.DROP_DOWN_MENU_HEIGHT\n ) {\n options.scrollTop =\n activeOption.offsetTop - CustomTimeSelect.DROP_DOWN_MENU_HEIGHT;\n } else if (\n (activeOption instanceof HTMLElement && activeOption.offsetTop < 0) ||\n index === 0\n ) {\n options.scrollTop = 0;\n }\n }\n }\n\n renderMenuElement(): JSX.Element {\n const { inputWidth } = this.state;\n return (\n <div\n className=\"cs-menu-container\"\n ref={this.menuContainer}\n role=\"presentation\"\n onKeyDown={this.handleMenuKeyDown}\n onClick={event => {\n event.stopPropagation();\n }}\n style={{ width: inputWidth }}\n >\n <div className=\"cs-options-container\">\n <div className=\"cs-options\">{this.renderOptions()}</div>\n </div>\n </div>\n );\n }\n\n renderOptions(): React.ReactNode {\n const { options, value, icon, customText } = this.props;\n const { keyboardOptionIndex, customTime, inputFocused } = this.state;\n\n let matchFound = false;\n const optionArray: JSX.Element[] = [];\n for (let index = 0; index < options.length; index += 1) {\n const option = options[index];\n const key = `option-${index}-${option.value}`;\n matchFound = matchFound || option.value === value;\n optionArray.push(\n <button\n key={key}\n type=\"button\"\n value={index}\n className={classNames('cs-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index && !inputFocused,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {option.value === value && (\n <FontAwesomeIcon icon={icon} className=\"mr-2\" />\n )}\n {option.value !== value && <span className=\"mr-4\" />}\n {option.title}\n </button>\n );\n }\n\n optionArray.push(<hr className=\"cs-divider\" key=\"option-divider\" />);\n\n optionArray.push(\n <button\n key=\"option-custom-label\"\n type=\"button\"\n value={CUSTOM_OPTION}\n className={classNames('cs-option-btn', {\n 'keyboard-active': inputFocused,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {!matchFound && value !== null ? (\n <FontAwesomeIcon icon={icon} className=\"mr-2\" />\n ) : (\n <span className=\"mr-4\" />\n )}\n {customText}\n </button>\n );\n\n optionArray.push(\n <div key=\"cs-custom-container\" className=\"cs-custom-container\">\n <span className=\"mr-2\" />\n <TimeInput\n key=\"option-input\"\n ref={this.input}\n onChange={this.handleCustomInput}\n value={customTime}\n onFocus={() => this.setState({ inputFocused: true })}\n onBlur={() => this.setState({ inputFocused: false })}\n />\n <span className=\"ml-2\" />\n </div>\n );\n\n optionArray.push(<hr key=\"option-end\" className=\"mb-2\" />);\n\n return optionArray;\n }\n\n render(): JSX.Element {\n const { disabled, invalid, value, 'data-testid': dataTestId } = this.props;\n const { menuIsOpen } = this.state;\n let { popperOptions } = this.props;\n popperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: { enabled: false },\n },\n ...popperOptions,\n };\n\n return (\n <div\n className=\"input-group cs-container context-menu\"\n ref={this.csContainer}\n data-testid={dataTestId}\n >\n <div\n className={classNames('input-group-append cs-dropdown', {\n 'cs-dropdown-invalid': invalid,\n })}\n >\n <button\n type=\"button\"\n className={classNames('btn cs-btn form-control', {\n 'cs-btn-invalid': invalid,\n })}\n ref={this.button}\n onClick={this.toggleMenu}\n disabled={disabled}\n >\n <span\n className={classNames({\n 'text-muted': value === null,\n })}\n >\n {this.getSelectedText()}\n </span>\n <span>\n <FontAwesomeIcon icon={dhSort} className=\"cs-caret\" />\n </span>\n <DropdownMenu\n isShown={menuIsOpen}\n actions={{ menuElement: this.renderMenuElement() }}\n popperOptions={popperOptions}\n popperClassName=\"CustomTimeSelect\"\n onMenuOpened={this.handleMenuOpened}\n onMenuClosed={this.handleMenuExited}\n menuStyle={{ maxWidth: '100rem' }}\n />\n </button>\n </div>\n </div>\n );\n }\n}\n\nexport default CustomTimeSelect;\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- declare type DateInputProps = {
2
+ type DateInputProps = {
3
3
  className?: string;
4
4
  onChange?(date?: string): void;
5
5
  defaultValue?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"DateInput.d.ts","sourceRoot":"","sources":["../src/DateInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAYrD,aAAK,cAAc,GAAG;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,IAAI,IAAI,CAAC;IACjB,MAAM,CAAC,IAAI,IAAI,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,QAAA,MAAM,SAAS,yFA0Cd,CAAC;AAaF,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"DateInput.d.ts","sourceRoot":"","sources":["../src/DateInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAYrD,KAAK,cAAc,GAAG;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,IAAI,IAAI,CAAC;IACjB,MAAM,CAAC,IAAI,IAAI,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,QAAA,MAAM,SAAS,yFA0Cd,CAAC;AAaF,eAAe,SAAS,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"DateInput.js","names":["React","useCallback","useState","classNames","Log","MaskedInput","getNextSegmentValue","log","module","DATE_PATTERN","EXAMPLES","DATE_FORMAT","DateInput","forwardRef","props","ref","className","onChange","undefined","defaultValue","onFocus","onBlur","dataTestId","value","setValue","selection","setSelection","handleChange","newValue","debug","displayName","defaultProps"],"sources":["../src/DateInput.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport MaskedInput, { SelectionSegment } from './MaskedInput';\nimport { getNextSegmentValue } from './DateInputUtils';\n\nconst log = Log.module('DateInput');\n\nconst DATE_PATTERN = '[12][0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])';\nconst EXAMPLES = ['2000-01-01', '2022-12-31'];\nconst DATE_FORMAT = 'YYYY-MM-DD';\n\ntype DateInputProps = {\n className?: string;\n onChange?(date?: string): void;\n defaultValue?: string;\n onFocus?(): void;\n onBlur?(): void;\n 'data-testid'?: string;\n};\n\nconst DateInput = React.forwardRef<HTMLInputElement, DateInputProps>(\n (props: DateInputProps, ref) => {\n const {\n className = '',\n onChange = () => undefined,\n defaultValue = '',\n onFocus = () => undefined,\n onBlur = () => undefined,\n 'data-testid': dataTestId,\n } = props;\n const [value, setValue] = useState(defaultValue);\n const [selection, setSelection] = useState<SelectionSegment>();\n\n const handleChange = useCallback(\n (newValue: string): void => {\n log.debug('handleChange', newValue);\n setValue(newValue);\n onChange(newValue);\n },\n [onChange]\n );\n\n return (\n <div className=\"d-flex flex-row align-items-center\">\n <MaskedInput\n ref={ref}\n className={classNames(className)}\n example={EXAMPLES}\n getNextSegmentValue={getNextSegmentValue}\n onChange={handleChange}\n onSelect={setSelection}\n pattern={DATE_PATTERN}\n placeholder={DATE_FORMAT}\n selection={selection}\n value={value}\n onFocus={onFocus}\n onBlur={onBlur}\n data-testid={dataTestId}\n />\n </div>\n );\n }\n);\n\nDateInput.displayName = 'DateInput';\n\nDateInput.defaultProps = {\n className: '',\n onChange: () => false,\n defaultValue: '',\n onFocus: () => false,\n onBlur: () => false,\n 'data-testid': undefined,\n};\n\nexport default DateInput;\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,EAA6BC,QAA7B,QAA6C,OAA7C;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,OAAOC,GAAP,MAAgB,gBAAhB;OACOC,W;SACEC,mB;AAET,IAAMC,GAAG,GAAGH,GAAG,CAACI,MAAJ,CAAW,WAAX,CAAZ;AAEA,IAAMC,YAAY,GAAG,yDAArB;AACA,IAAMC,QAAQ,GAAG,CAAC,YAAD,EAAe,YAAf,CAAjB;AACA,IAAMC,WAAW,GAAG,YAApB;AAWA,IAAMC,SAAS,gBAAGZ,KAAK,CAACa,UAAN,CAChB,CAACC,KAAD,EAAwBC,GAAxB,KAAgC;EAC9B,IAAM;IACJC,SAAS,GAAG,EADR;IAEJC,QAAQ,GAAG,MAAMC,SAFb;IAGJC,YAAY,GAAG,EAHX;IAIJC,OAAO,GAAG,MAAMF,SAJZ;IAKJG,MAAM,GAAG,MAAMH,SALX;IAMJ,eAAeI;EANX,IAOFR,KAPJ;EAQA,IAAM,CAACS,KAAD,EAAQC,QAAR,IAAoBtB,QAAQ,CAACiB,YAAD,CAAlC;EACA,IAAM,CAACM,SAAD,EAAYC,YAAZ,IAA4BxB,QAAQ,EAA1C;EAEA,IAAMyB,YAAY,GAAG1B,WAAW,CAC7B2B,QAAD,IAA4B;IAC1BrB,GAAG,CAACsB,KAAJ,CAAU,cAAV,EAA0BD,QAA1B;IACAJ,QAAQ,CAACI,QAAD,CAAR;IACAX,QAAQ,CAACW,QAAD,CAAR;EACD,CAL6B,EAM9B,CAACX,QAAD,CAN8B,CAAhC;EASA,oBACE;IAAK,SAAS,EAAC;EAAf,gBACE,oBAAC,WAAD;IACE,GAAG,EAAEF,GADP;IAEE,SAAS,EAAEZ,UAAU,CAACa,SAAD,CAFvB;IAGE,OAAO,EAAEN,QAHX;IAIE,mBAAmB,EAAEJ,mBAJvB;IAKE,QAAQ,EAAEqB,YALZ;IAME,QAAQ,EAAED,YANZ;IAOE,OAAO,EAAEjB,YAPX;IAQE,WAAW,EAAEE,WARf;IASE,SAAS,EAAEc,SATb;IAUE,KAAK,EAAEF,KAVT;IAWE,OAAO,EAAEH,OAXX;IAYE,MAAM,EAAEC,MAZV;IAaE,eAAaC;EAbf,EADF,CADF;AAmBD,CAzCe,CAAlB;AA4CAV,SAAS,CAACkB,WAAV,GAAwB,WAAxB;AAEAlB,SAAS,CAACmB,YAAV,GAAyB;EACvBf,SAAS,EAAE,EADY;EAEvBC,QAAQ,EAAE,MAAM,KAFO;EAGvBE,YAAY,EAAE,EAHS;EAIvBC,OAAO,EAAE,MAAM,KAJQ;EAKvBC,MAAM,EAAE,MAAM,KALS;EAMvB,eAAeH;AANQ,CAAzB;AASA,eAAeN,SAAf"}
1
+ {"version":3,"file":"DateInput.js","names":["React","useCallback","useState","classNames","Log","MaskedInput","getNextSegmentValue","log","module","DATE_PATTERN","EXAMPLES","DATE_FORMAT","DateInput","forwardRef","props","ref","className","onChange","undefined","defaultValue","onFocus","onBlur","dataTestId","value","setValue","selection","setSelection","handleChange","newValue","debug","displayName","defaultProps"],"sources":["../src/DateInput.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport MaskedInput, { SelectionSegment } from './MaskedInput';\nimport { getNextSegmentValue } from './DateInputUtils';\n\nconst log = Log.module('DateInput');\n\nconst DATE_PATTERN = '[12][0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])';\nconst EXAMPLES = ['2000-01-01', '2022-12-31'];\nconst DATE_FORMAT = 'YYYY-MM-DD';\n\ntype DateInputProps = {\n className?: string;\n onChange?(date?: string): void;\n defaultValue?: string;\n onFocus?(): void;\n onBlur?(): void;\n 'data-testid'?: string;\n};\n\nconst DateInput = React.forwardRef<HTMLInputElement, DateInputProps>(\n (props: DateInputProps, ref) => {\n const {\n className = '',\n onChange = () => undefined,\n defaultValue = '',\n onFocus = () => undefined,\n onBlur = () => undefined,\n 'data-testid': dataTestId,\n } = props;\n const [value, setValue] = useState(defaultValue);\n const [selection, setSelection] = useState<SelectionSegment>();\n\n const handleChange = useCallback(\n (newValue: string): void => {\n log.debug('handleChange', newValue);\n setValue(newValue);\n onChange(newValue);\n },\n [onChange]\n );\n\n return (\n <div className=\"d-flex flex-row align-items-center\">\n <MaskedInput\n ref={ref}\n className={classNames(className)}\n example={EXAMPLES}\n getNextSegmentValue={getNextSegmentValue}\n onChange={handleChange}\n onSelect={setSelection}\n pattern={DATE_PATTERN}\n placeholder={DATE_FORMAT}\n selection={selection}\n value={value}\n onFocus={onFocus}\n onBlur={onBlur}\n data-testid={dataTestId}\n />\n </div>\n );\n }\n);\n\nDateInput.displayName = 'DateInput';\n\nDateInput.defaultProps = {\n className: '',\n onChange: () => false,\n defaultValue: '',\n onFocus: () => false,\n onBlur: () => false,\n 'data-testid': undefined,\n};\n\nexport default DateInput;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,QAAQ,QAAQ,OAAO;AACpD,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,GAAG,MAAM,gBAAgB;AAAC,OAC1BC,WAAW;AAAA,SACTC,mBAAmB;AAE5B,IAAMC,GAAG,GAAGH,GAAG,CAACI,MAAM,CAAC,WAAW,CAAC;AAEnC,IAAMC,YAAY,GAAG,yDAAyD;AAC9E,IAAMC,QAAQ,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC;AAC7C,IAAMC,WAAW,GAAG,YAAY;AAWhC,IAAMC,SAAS,gBAAGZ,KAAK,CAACa,UAAU,CAChC,CAACC,KAAqB,EAAEC,GAAG,KAAK;EAC9B,IAAM;IACJC,SAAS,GAAG,EAAE;IACdC,QAAQ,GAAG,MAAMC,SAAS;IAC1BC,YAAY,GAAG,EAAE;IACjBC,OAAO,GAAG,MAAMF,SAAS;IACzBG,MAAM,GAAG,MAAMH,SAAS;IACxB,aAAa,EAAEI;EACjB,CAAC,GAAGR,KAAK;EACT,IAAM,CAACS,KAAK,EAAEC,QAAQ,CAAC,GAAGtB,QAAQ,CAACiB,YAAY,CAAC;EAChD,IAAM,CAACM,SAAS,EAAEC,YAAY,CAAC,GAAGxB,QAAQ,EAAoB;EAE9D,IAAMyB,YAAY,GAAG1B,WAAW,CAC7B2B,QAAgB,IAAW;IAC1BrB,GAAG,CAACsB,KAAK,CAAC,cAAc,EAAED,QAAQ,CAAC;IACnCJ,QAAQ,CAACI,QAAQ,CAAC;IAClBX,QAAQ,CAACW,QAAQ,CAAC;EACpB,CAAC,EACD,CAACX,QAAQ,CAAC,CACX;EAED,oBACE;IAAK,SAAS,EAAC;EAAoC,gBACjD,oBAAC,WAAW;IACV,GAAG,EAAEF,GAAI;IACT,SAAS,EAAEZ,UAAU,CAACa,SAAS,CAAE;IACjC,OAAO,EAAEN,QAAS;IAClB,mBAAmB,EAAEJ,mBAAoB;IACzC,QAAQ,EAAEqB,YAAa;IACvB,QAAQ,EAAED,YAAa;IACvB,OAAO,EAAEjB,YAAa;IACtB,WAAW,EAAEE,WAAY;IACzB,SAAS,EAAEc,SAAU;IACrB,KAAK,EAAEF,KAAM;IACb,OAAO,EAAEH,OAAQ;IACjB,MAAM,EAAEC,MAAO;IACf,eAAaC;EAAW,EACxB,CACE;AAEV,CAAC,CACF;AAEDV,SAAS,CAACkB,WAAW,GAAG,WAAW;AAEnClB,SAAS,CAACmB,YAAY,GAAG;EACvBf,SAAS,EAAE,EAAE;EACbC,QAAQ,EAAE,MAAM,KAAK;EACrBE,YAAY,EAAE,EAAE;EAChBC,OAAO,EAAE,MAAM,KAAK;EACpBC,MAAM,EAAE,MAAM,KAAK;EACnB,aAAa,EAAEH;AACjB,CAAC;AAED,eAAeN,SAAS"}
@@ -7,34 +7,27 @@ export function getNextSegmentValue(range, delta, segmentValue) {
7
7
  var {
8
8
  selectionStart
9
9
  } = range;
10
-
11
10
  if (selectionStart === 0) {
12
11
  return getNextNumberSegmentValue(delta, segmentValue, 1900, 2099, 4);
13
12
  }
14
-
15
13
  if (selectionStart === 5) {
16
14
  return getNextNumberSegmentValue(delta, segmentValue, 1, 12, 2);
17
15
  }
18
-
19
16
  if (selectionStart === 8) {
20
17
  return getNextNumberSegmentValue(delta, segmentValue, 1, 31, 2);
21
18
  }
22
-
23
19
  if (selectionStart === 11) {
24
20
  // Hours input
25
21
  return getNextNumberSegmentValue(delta, segmentValue, 0, 23, 2);
26
22
  }
27
-
28
23
  if (selectionStart === 17 || selectionStart === 14) {
29
24
  // Minutes/seconds input
30
25
  return getNextNumberSegmentValue(delta, segmentValue, 0, 59, 2);
31
26
  }
32
-
33
27
  if (selectionStart === 20 || selectionStart === 24 || selectionStart === 28) {
34
28
  // Milli, micro, and nanosecond input
35
29
  return getNextNumberSegmentValue(delta, segmentValue, 0, 999, 3);
36
30
  }
37
-
38
31
  return segmentValue;
39
32
  }
40
33
  //# sourceMappingURL=DateInputUtils.js.map