@deephaven/components 1.22.1-alpha-pivot-builder.0 → 1.22.2-alpha-pivot-builder.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 (241) hide show
  1. package/dist/AutoCompleteInput.js +41 -79
  2. package/dist/AutoCompleteInput.js.map +1 -1
  3. package/dist/AutoResizeTextarea.js +29 -13
  4. package/dist/AutoResizeTextarea.js.map +1 -1
  5. package/dist/BasicModal.js +17 -15
  6. package/dist/BasicModal.js.map +1 -1
  7. package/dist/BulkActionBar.js +3 -5
  8. package/dist/BulkActionBar.js.map +1 -1
  9. package/dist/Button.js +24 -25
  10. package/dist/Button.js.map +1 -1
  11. package/dist/CardFlip.js +4 -6
  12. package/dist/CardFlip.js.map +1 -1
  13. package/dist/Checkbox.js +22 -13
  14. package/dist/Checkbox.js.map +1 -1
  15. package/dist/Collapse.js +6 -9
  16. package/dist/Collapse.js.map +1 -1
  17. package/dist/CopyButton.js +14 -6
  18. package/dist/CopyButton.js.map +1 -1
  19. package/dist/CustomTimeSelect.js +49 -88
  20. package/dist/CustomTimeSelect.js.map +1 -1
  21. package/dist/DateInput.js +25 -10
  22. package/dist/DateInput.js.map +1 -1
  23. package/dist/DateInputUtils.js +1 -3
  24. package/dist/DateInputUtils.js.map +1 -1
  25. package/dist/DateTimeInput.js +28 -12
  26. package/dist/DateTimeInput.js.map +1 -1
  27. package/dist/DebouncedSearchInput.js +10 -19
  28. package/dist/DebouncedSearchInput.js.map +1 -1
  29. package/dist/DragUtils.js +15 -6
  30. package/dist/DragUtils.js.map +1 -1
  31. package/dist/DraggableItemList.js +42 -57
  32. package/dist/DraggableItemList.js.map +1 -1
  33. package/dist/EditableItemList.js +28 -13
  34. package/dist/EditableItemList.js.map +1 -1
  35. package/dist/ErrorBoundary.js +6 -11
  36. package/dist/ErrorBoundary.js.map +1 -1
  37. package/dist/ErrorView.js +20 -8
  38. package/dist/ErrorView.js.map +1 -1
  39. package/dist/HierarchicalCheckboxMenu.js +30 -28
  40. package/dist/HierarchicalCheckboxMenu.js.map +1 -1
  41. package/dist/ItemList.js +96 -168
  42. package/dist/ItemList.js.map +1 -1
  43. package/dist/ItemListItem.js +46 -60
  44. package/dist/ItemListItem.js.map +1 -1
  45. package/dist/LoadingOverlay.js +13 -9
  46. package/dist/LoadingOverlay.js.map +1 -1
  47. package/dist/LoadingSpinner.js +3 -4
  48. package/dist/LoadingSpinner.js.map +1 -1
  49. package/dist/MaskedInput.js +44 -41
  50. package/dist/MaskedInput.js.map +1 -1
  51. package/dist/MaskedInputUtils.js +1 -3
  52. package/dist/MaskedInputUtils.js.map +1 -1
  53. package/dist/Option.js +1 -3
  54. package/dist/Option.js.map +1 -1
  55. package/dist/RadioGroup.js +17 -9
  56. package/dist/RadioGroup.js.map +1 -1
  57. package/dist/RadioItem.js +25 -14
  58. package/dist/RadioItem.js.map +1 -1
  59. package/dist/RandomAreaPlotAnimation.js +17 -13
  60. package/dist/RandomAreaPlotAnimation.js.map +1 -1
  61. package/dist/SearchInput.js +13 -14
  62. package/dist/SearchInput.js.map +1 -1
  63. package/dist/SearchableCombobox.js +3 -5
  64. package/dist/SearchableCombobox.js.map +1 -1
  65. package/dist/Select.js +5 -7
  66. package/dist/Select.js.map +1 -1
  67. package/dist/SelectValueList.js +21 -30
  68. package/dist/SelectValueList.js.map +1 -1
  69. package/dist/SocketedButton.js +18 -17
  70. package/dist/SocketedButton.js.map +1 -1
  71. package/dist/SplitButtonGroup.js +4 -6
  72. package/dist/SplitButtonGroup.js.map +1 -1
  73. package/dist/TableViewEmptyState.js +14 -6
  74. package/dist/TableViewEmptyState.js.map +1 -1
  75. package/dist/TextWithTooltip.js +3 -4
  76. package/dist/TextWithTooltip.js.map +1 -1
  77. package/dist/TimeInput.js +29 -12
  78. package/dist/TimeInput.js.map +1 -1
  79. package/dist/TimeSlider.js +46 -38
  80. package/dist/TimeSlider.js.map +1 -1
  81. package/dist/ToastNotification.js +9 -10
  82. package/dist/ToastNotification.js.map +1 -1
  83. package/dist/UISwitch.js +8 -9
  84. package/dist/UISwitch.js.map +1 -1
  85. package/dist/actions/ConfirmActionButton.js +7 -9
  86. package/dist/actions/ConfirmActionButton.js.map +1 -1
  87. package/dist/actions/IconActionButton.js +3 -5
  88. package/dist/actions/IconActionButton.js.map +1 -1
  89. package/dist/context-actions/ContextActionUtils.js +1 -3
  90. package/dist/context-actions/ContextActionUtils.js.map +1 -1
  91. package/dist/context-actions/ContextActions.js +8 -18
  92. package/dist/context-actions/ContextActions.js.map +1 -1
  93. package/dist/context-actions/ContextMenu.js +53 -89
  94. package/dist/context-actions/ContextMenu.js.map +1 -1
  95. package/dist/context-actions/ContextMenuItem.js +11 -11
  96. package/dist/context-actions/ContextMenuItem.js.map +1 -1
  97. package/dist/context-actions/ContextMenuRoot.js +6 -11
  98. package/dist/context-actions/ContextMenuRoot.js.map +1 -1
  99. package/dist/context-actions/GlobalContextAction.js +2 -6
  100. package/dist/context-actions/GlobalContextAction.js.map +1 -1
  101. package/dist/context-actions/GlobalContextActions.js +4 -7
  102. package/dist/context-actions/GlobalContextActions.js.map +1 -1
  103. package/dist/dialogs/ActionButtonDialogTrigger.js +7 -9
  104. package/dist/dialogs/ActionButtonDialogTrigger.js.map +1 -1
  105. package/dist/dialogs/ConfirmationDialog.js +8 -11
  106. package/dist/dialogs/ConfirmationDialog.js.map +1 -1
  107. package/dist/menu-actions/DropdownMenu.js +12 -22
  108. package/dist/menu-actions/DropdownMenu.js.map +1 -1
  109. package/dist/menu-actions/Menu.js +19 -45
  110. package/dist/menu-actions/Menu.js.map +1 -1
  111. package/dist/modal/DebouncedModal.js +8 -9
  112. package/dist/modal/DebouncedModal.js.map +1 -1
  113. package/dist/modal/InfoModal.js +6 -7
  114. package/dist/modal/InfoModal.js.map +1 -1
  115. package/dist/modal/Modal.js +27 -15
  116. package/dist/modal/Modal.js.map +1 -1
  117. package/dist/modal/ModalBody.js +4 -6
  118. package/dist/modal/ModalBody.js.map +1 -1
  119. package/dist/modal/ModalFooter.js +3 -5
  120. package/dist/modal/ModalFooter.js.map +1 -1
  121. package/dist/modal/ModalHeader.js +7 -8
  122. package/dist/modal/ModalHeader.js.map +1 -1
  123. package/dist/navigation/DashboardList.js +17 -6
  124. package/dist/navigation/DashboardList.js.map +1 -1
  125. package/dist/navigation/Menu.js +4 -5
  126. package/dist/navigation/Menu.js.map +1 -1
  127. package/dist/navigation/MenuItem.js +7 -10
  128. package/dist/navigation/MenuItem.js.map +1 -1
  129. package/dist/navigation/NavTab.js +14 -17
  130. package/dist/navigation/NavTab.js.map +1 -1
  131. package/dist/navigation/NavTabList.js +39 -33
  132. package/dist/navigation/NavTabList.js.map +1 -1
  133. package/dist/navigation/Page.js +5 -7
  134. package/dist/navigation/Page.js.map +1 -1
  135. package/dist/navigation/Stack.js +20 -7
  136. package/dist/navigation/Stack.js.map +1 -1
  137. package/dist/popper/Popper.js +30 -57
  138. package/dist/popper/Popper.js.map +1 -1
  139. package/dist/popper/Tooltip.js +24 -54
  140. package/dist/popper/Tooltip.js.map +1 -1
  141. package/dist/shortcuts/Shortcut.js +10 -15
  142. package/dist/shortcuts/Shortcut.js.map +1 -1
  143. package/dist/shortcuts/ShortcutRegistry.js +1 -3
  144. package/dist/shortcuts/ShortcutRegistry.js.map +1 -1
  145. package/dist/spectrum/ActionGroup.js +7 -9
  146. package/dist/spectrum/ActionGroup.js.map +1 -1
  147. package/dist/spectrum/ActionMenu.js +3 -5
  148. package/dist/spectrum/ActionMenu.js.map +1 -1
  149. package/dist/spectrum/CheckboxGroup.js +1 -3
  150. package/dist/spectrum/CheckboxGroup.js.map +1 -1
  151. package/dist/spectrum/Heading.js +2 -4
  152. package/dist/spectrum/Heading.js.map +1 -1
  153. package/dist/spectrum/ItemContent.js +16 -10
  154. package/dist/spectrum/ItemContent.js.map +1 -1
  155. package/dist/spectrum/ItemTooltip.js +2 -4
  156. package/dist/spectrum/ItemTooltip.js.map +1 -1
  157. package/dist/spectrum/TabPanels.js +3 -4
  158. package/dist/spectrum/TabPanels.js.map +1 -1
  159. package/dist/spectrum/Text.js +2 -4
  160. package/dist/spectrum/Text.js.map +1 -1
  161. package/dist/spectrum/View.js +11 -14
  162. package/dist/spectrum/View.js.map +1 -1
  163. package/dist/spectrum/comboBox/ComboBox.js +5 -9
  164. package/dist/spectrum/comboBox/ComboBox.js.map +1 -1
  165. package/dist/spectrum/comboBox/ComboBoxNormalized.js +3 -7
  166. package/dist/spectrum/comboBox/ComboBoxNormalized.js.map +1 -1
  167. package/dist/spectrum/listView/ListView.js +11 -11
  168. package/dist/spectrum/listView/ListView.js.map +1 -1
  169. package/dist/spectrum/listView/ListViewNormalized.js +22 -24
  170. package/dist/spectrum/listView/ListViewNormalized.js.map +1 -1
  171. package/dist/spectrum/listView/ListViewWrapper.js +11 -15
  172. package/dist/spectrum/listView/ListViewWrapper.js.map +1 -1
  173. package/dist/spectrum/multiSelect/MultiSelect.js +113 -100
  174. package/dist/spectrum/multiSelect/MultiSelect.js.map +1 -1
  175. package/dist/spectrum/multiSelect/MultiSelectListBox.js +9 -11
  176. package/dist/spectrum/multiSelect/MultiSelectListBox.js.map +1 -1
  177. package/dist/spectrum/multiSelect/MultiSelectNormalized.js +3 -7
  178. package/dist/spectrum/multiSelect/MultiSelectNormalized.js.map +1 -1
  179. package/dist/spectrum/multiSelect/MultiSelectTag.js +5 -7
  180. package/dist/spectrum/multiSelect/MultiSelectTag.js.map +1 -1
  181. package/dist/spectrum/multiSelect/useMultiSelectFilter.js +20 -14
  182. package/dist/spectrum/multiSelect/useMultiSelectFilter.js.map +1 -1
  183. package/dist/spectrum/multiSelect/useMultiSelectKeyboard.js +27 -20
  184. package/dist/spectrum/multiSelect/useMultiSelectKeyboard.js.map +1 -1
  185. package/dist/spectrum/multiSelect/useMultiSelectLoadingSpinner.js +14 -7
  186. package/dist/spectrum/multiSelect/useMultiSelectLoadingSpinner.js.map +1 -1
  187. package/dist/spectrum/multiSelect/useMultiSelectNormalizedProps.js +20 -22
  188. package/dist/spectrum/multiSelect/useMultiSelectNormalizedProps.js.map +1 -1
  189. package/dist/spectrum/multiSelect/useMultiSelectScrollListener.js +13 -6
  190. package/dist/spectrum/multiSelect/useMultiSelectScrollListener.js.map +1 -1
  191. package/dist/spectrum/multiSelect/useMultiSelectState.js +16 -9
  192. package/dist/spectrum/multiSelect/useMultiSelectState.js.map +1 -1
  193. package/dist/spectrum/picker/Picker.js +5 -9
  194. package/dist/spectrum/picker/Picker.js.map +1 -1
  195. package/dist/spectrum/picker/PickerNormalized.js +2 -6
  196. package/dist/spectrum/picker/PickerNormalized.js.map +1 -1
  197. package/dist/spectrum/picker/usePickerItemScale.js +2 -3
  198. package/dist/spectrum/picker/usePickerItemScale.js.map +1 -1
  199. package/dist/spectrum/picker/usePickerNormalizedProps.js +31 -33
  200. package/dist/spectrum/picker/usePickerNormalizedProps.js.map +1 -1
  201. package/dist/spectrum/picker/usePickerProps.js +26 -29
  202. package/dist/spectrum/picker/usePickerProps.js.map +1 -1
  203. package/dist/spectrum/picker/usePickerScrollOnOpen.js +6 -9
  204. package/dist/spectrum/picker/usePickerScrollOnOpen.js.map +1 -1
  205. package/dist/spectrum/utils/itemUtils.js +4 -6
  206. package/dist/spectrum/utils/itemUtils.js.map +1 -1
  207. package/dist/spectrum/utils/propsUtils.js +35 -37
  208. package/dist/spectrum/utils/propsUtils.js.map +1 -1
  209. package/dist/spectrum/utils/themeUtils.js +5 -7
  210. package/dist/spectrum/utils/themeUtils.js.map +1 -1
  211. package/dist/spectrum/utils/useOnChangeTrackUncontrolled.js +13 -6
  212. package/dist/spectrum/utils/useOnChangeTrackUncontrolled.js.map +1 -1
  213. package/dist/spectrum/utils/useRenderNormalizedItem.js +5 -7
  214. package/dist/spectrum/utils/useRenderNormalizedItem.js.map +1 -1
  215. package/dist/spectrum/utils/useStaticItemInitialScrollPosition.js +4 -6
  216. package/dist/spectrum/utils/useStaticItemInitialScrollPosition.js.map +1 -1
  217. package/dist/spectrum/utils/useStringifiedMultiSelection.js +5 -7
  218. package/dist/spectrum/utils/useStringifiedMultiSelection.js.map +1 -1
  219. package/dist/spectrum/utils/useStringifiedSelection.js +5 -7
  220. package/dist/spectrum/utils/useStringifiedSelection.js.map +1 -1
  221. package/dist/theme/FontBootstrap.js +13 -5
  222. package/dist/theme/FontBootstrap.js.map +1 -1
  223. package/dist/theme/FontsLoaded.js +1 -3
  224. package/dist/theme/FontsLoaded.js.map +1 -1
  225. package/dist/theme/Logo.js +2 -4
  226. package/dist/theme/Logo.js.map +1 -1
  227. package/dist/theme/SpectrumThemeProvider.js +17 -9
  228. package/dist/theme/SpectrumThemeProvider.js.map +1 -1
  229. package/dist/theme/ThemePicker.js +4 -5
  230. package/dist/theme/ThemePicker.js.map +1 -1
  231. package/dist/theme/ThemeProvider.js +20 -8
  232. package/dist/theme/ThemeProvider.js.map +1 -1
  233. package/dist/theme/ThemeUtils.js +35 -19
  234. package/dist/theme/ThemeUtils.js.map +1 -1
  235. package/dist/theme/useExternalTheme.js +16 -7
  236. package/dist/theme/useExternalTheme.js.map +1 -1
  237. package/dist/transitions/FadeTransition.js +5 -6
  238. package/dist/transitions/FadeTransition.js.map +1 -1
  239. package/dist/transitions/SlideTransition.js +6 -7
  240. package/dist/transitions/SlideTransition.js.map +1 -1
  241. package/package.json +8 -8
@@ -46,9 +46,7 @@ class AutoCompleteInput extends Component {
46
46
  option => option.title.toLowerCase().indexOf(input.toLowerCase()) >= 0), {
47
47
  max: 1000
48
48
  }));
49
- var {
50
- popperOptions
51
- } = this.props;
49
+ var popperOptions = this.props.popperOptions;
52
50
  popperOptions = _objectSpread({
53
51
  placement: 'bottom-end',
54
52
  modifiers: {
@@ -102,9 +100,7 @@ class AutoCompleteInput extends Component {
102
100
  }
103
101
 
104
102
  // validate
105
- var {
106
- options
107
- } = this.props;
103
+ var options = this.props.options;
108
104
  var result = options.filter(option => option.title.toLowerCase() === title.toLowerCase());
109
105
  if (result.length < 1) {
110
106
  this.setState({
@@ -126,31 +122,22 @@ class AutoCompleteInput extends Component {
126
122
 
127
123
  // validate typed entries emit change event using value
128
124
  updateInputValue(title) {
129
- var {
130
- menuIsOpen
131
- } = this.state;
132
- var {
133
- value,
134
- isValid
135
- } = this.getValueAndValidate(title);
125
+ var menuIsOpen = this.state.menuIsOpen;
126
+ var _this$getValueAndVali = this.getValueAndValidate(title),
127
+ value = _this$getValueAndVali.value,
128
+ isValid = _this$getValueAndVali.isValid;
136
129
  if (menuIsOpen) this.processFilterChange(title);
137
130
  this.fireOnChange(value, isValid);
138
131
  }
139
132
  fireOnChange(value) {
140
133
  var isValid = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
141
- var {
142
- onChange
143
- } = this.props;
134
+ var onChange = this.props.onChange;
144
135
  onChange(value, isValid);
145
136
  }
146
137
  processFilterChange(filter) {
147
138
  var _this$popper$current;
148
- var {
149
- options
150
- } = this.props;
151
- var {
152
- menuIsOpen
153
- } = this.state;
139
+ var options = this.props.options;
140
+ var menuIsOpen = this.state.menuIsOpen;
154
141
  var filteredOptions = filter ? this.getCachedFilteredOptions(options, filter) : options;
155
142
  var perfectMatch = filteredOptions.length === 1 && filteredOptions[0].title === filter;
156
143
  this.setState({
@@ -174,10 +161,9 @@ class AutoCompleteInput extends Component {
174
161
  }
175
162
  handleMenuKeyDown(event) {
176
163
  var _this$input$current;
177
- var {
178
- filteredOptions,
179
- keyboardOptionIndex
180
- } = this.state;
164
+ var _this$state = this.state,
165
+ filteredOptions = _this$state.filteredOptions,
166
+ keyboardOptionIndex = _this$state.keyboardOptionIndex;
181
167
  var option = filteredOptions[keyboardOptionIndex];
182
168
  switch (event.key) {
183
169
  case 'Enter':
@@ -223,10 +209,9 @@ class AutoCompleteInput extends Component {
223
209
  }
224
210
  }
225
211
  navigateMenu(direction) {
226
- var {
227
- filteredOptions,
228
- keyboardOptionIndex
229
- } = this.state;
212
+ var _this$state2 = this.state,
213
+ filteredOptions = _this$state2.filteredOptions,
214
+ keyboardOptionIndex = _this$state2.keyboardOptionIndex;
230
215
  var newKeyboardOptionIndex = keyboardOptionIndex;
231
216
  if (direction === AutoCompleteInput.MENU_NAVIGATION_DIRECTION.UP) {
232
217
  if (keyboardOptionIndex > 0) {
@@ -251,12 +236,8 @@ class AutoCompleteInput extends Component {
251
236
  this.scrollOptionIntoView(newKeyboardOptionIndex);
252
237
  }
253
238
  handleInputKeyDown(event) {
254
- var {
255
- onEnter
256
- } = this.props;
257
- var {
258
- menuIsOpen
259
- } = this.state;
239
+ var onEnter = this.props.onEnter;
240
+ var menuIsOpen = this.state.menuIsOpen;
260
241
  if (menuIsOpen) {
261
242
  this.handleMenuKeyDown(event);
262
243
  } else if (event.key === 'Enter') {
@@ -286,25 +267,19 @@ class AutoCompleteInput extends Component {
286
267
  (_this$input$current2 = this.input.current) === null || _this$input$current2 === void 0 || _this$input$current2.focus();
287
268
  }
288
269
  handelInputFocus() {
289
- var {
290
- menuIsOpen
291
- } = this.state;
270
+ var menuIsOpen = this.state.menuIsOpen;
292
271
  if (!menuIsOpen) {
293
272
  this.openMenu();
294
273
  }
295
274
  }
296
275
  handleInputClick() {
297
- var {
298
- menuIsOpen
299
- } = this.state;
276
+ var menuIsOpen = this.state.menuIsOpen;
300
277
  if (!menuIsOpen) {
301
278
  this.openMenu();
302
279
  }
303
280
  }
304
281
  handleInputBlur(event) {
305
- var {
306
- menuIsOpen
307
- } = this.state;
282
+ var menuIsOpen = this.state.menuIsOpen;
308
283
  if (menuIsOpen && event.relatedTarget instanceof Element && this.popper.current !== null && this.popper.current.element.contains(event.relatedTarget)) {
309
284
  return;
310
285
  }
@@ -322,9 +297,7 @@ class AutoCompleteInput extends Component {
322
297
  (_this$input$current3 = this.input.current) === null || _this$input$current3 === void 0 || _this$input$current3.focus();
323
298
  }
324
299
  handleMenuExited() {
325
- var {
326
- menuIsOpen
327
- } = this.state;
300
+ var menuIsOpen = this.state.menuIsOpen;
328
301
  if (menuIsOpen) {
329
302
  this.setState({
330
303
  menuIsOpen: false,
@@ -333,9 +306,7 @@ class AutoCompleteInput extends Component {
333
306
  }
334
307
  }
335
308
  openMenu() {
336
- var {
337
- title
338
- } = this.state;
309
+ var title = this.state.title;
339
310
  this.processFilterChange(title);
340
311
  this.setInputWidth();
341
312
  this.setState({
@@ -371,9 +342,7 @@ class AutoCompleteInput extends Component {
371
342
  }
372
343
  }
373
344
  renderMenuElement() {
374
- var {
375
- inputWidth
376
- } = this.state;
345
+ var inputWidth = this.state.inputWidth;
377
346
  return /*#__PURE__*/_jsx("div", {
378
347
  className: classNames('aci-options'),
379
348
  ref: this.menuContainer,
@@ -387,13 +356,10 @@ class AutoCompleteInput extends Component {
387
356
  });
388
357
  }
389
358
  renderOptions() {
390
- var {
391
- noMatchText
392
- } = this.props;
393
- var {
394
- title,
395
- filteredOptions
396
- } = this.state;
359
+ var noMatchText = this.props.noMatchText;
360
+ var _this$state3 = this.state,
361
+ title = _this$state3.title,
362
+ filteredOptions = _this$state3.filteredOptions;
397
363
  if (title && filteredOptions.length === 0) {
398
364
  return /*#__PURE__*/_jsx("div", {
399
365
  className: "no-match",
@@ -403,9 +369,7 @@ class AutoCompleteInput extends Component {
403
369
  return filteredOptions.map((option, index) => this.renderOption(option, index));
404
370
  }
405
371
  renderOption(option, index) {
406
- var {
407
- keyboardOptionIndex
408
- } = this.state;
372
+ var keyboardOptionIndex = this.state.keyboardOptionIndex;
409
373
  var key = "option-".concat(index, "-").concat(option.value);
410
374
  return /*#__PURE__*/_jsx("button", {
411
375
  type: "button",
@@ -420,21 +384,19 @@ class AutoCompleteInput extends Component {
420
384
  }, key);
421
385
  }
422
386
  render() {
423
- var {
424
- options,
425
- inputPlaceholder,
426
- disabled,
427
- className,
428
- defaultTitle,
429
- spellCheck,
430
- 'data-testid': dataTestId
431
- } = this.props;
432
- var {
433
- title,
434
- menuIsOpen,
435
- popperOptions,
436
- invalid
437
- } = this.state;
387
+ var _this$props = this.props,
388
+ options = _this$props.options,
389
+ inputPlaceholder = _this$props.inputPlaceholder,
390
+ disabled = _this$props.disabled,
391
+ className = _this$props.className,
392
+ defaultTitle = _this$props.defaultTitle,
393
+ spellCheck = _this$props.spellCheck,
394
+ dataTestId = _this$props['data-testid'];
395
+ var _this$state4 = this.state,
396
+ title = _this$state4.title,
397
+ menuIsOpen = _this$state4.menuIsOpen,
398
+ popperOptions = _this$state4.popperOptions,
399
+ invalid = _this$state4.invalid;
438
400
  return /*#__PURE__*/_jsxs("div", {
439
401
  className: "aci-container",
440
402
  ref: this.cbContainer,
@@ -1 +1 @@
1
- {"version":3,"file":"AutoCompleteInput.js","names":["React","Component","memoize","classNames","debounce","Popper","jsx","_jsx","jsxs","_jsxs","DEBOUNCE_DELAY","MENU_NAVIGATION_DIRECTION","AutoCompleteInput","constructor","props","_defineProperty","options","input","filter","option","title","toLowerCase","indexOf","max","popperOptions","_objectSpread","placement","modifiers","preventOverflow","enabled","state","filteredOptions","keyboardOptionIndex","menuIsOpen","inputWidth","invalid","handleMenuKeyDown","bind","handleMenuBlur","handleInputChange","handleInputKeyDown","handleInputBlur","handelInputFocus","handleInputClick","updateInputValue","handleOptionClick","handleMenuOpened","handleMenuExited","popper","createRef","cbContainer","menuContainer","setInputWidth","current","setState","getBoundingClientRect","width","getValueAndValidate","value","isValid","result","length","processFilterChange","fireOnChange","arguments","undefined","onChange","_this$popper$current","getCachedFilteredOptions","perfectMatch","closeMenu","scheduleUpdate","resetValue","handleResize","event","_this$input$current","key","stopPropagation","preventDefault","focus","navigateMenu","UP","DOWN","shiftKey","direction","newKeyboardOptionIndex","scrollOptionIntoView","onEnter","openMenu","target","_this$input$current2","relatedTarget","Element","element","contains","_this$input$current3","window","requestAnimationFrame","_this$popper$current2","show","_this$popper$current3","focusInput","_this$input$current4","hide","index","_this$menuContainer$c","children","item","scrollIntoView","behavior","block","renderMenuElement","className","ref","role","onKeyDown","style","onBlur","renderOptions","noMatchText","map","renderOption","concat","type","onClick","onFocus","render","inputPlaceholder","disabled","defaultTitle","spellCheck","dataTestId","placeholder","onEntered","onExited"],"sources":["../src/AutoCompleteInput.tsx"],"sourcesContent":["/**\n * An Input component that pops and filters auto complete options as you type.\n *\n * props:\n * @param options :[{\n * title: 'option title for display',\n * value: 'option value' //option value\n * }]\n * @param popperOptions options for the Popper\n * @param onChange called when the value is changed from the pulldown\n * @param inputPlaceholder place holder for the input box\n * @param disabled disable both input & drop down\n * @param className an optional class name applied to the input element\n * @param defaultTitle the default title to display\n * @param spellCheck flag to disable spell checking, defaults to true\n * @param onEnter called when the Enter key is typed in the input element\n *\n */\nimport React, { Component } from 'react';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport { type PopperOptions } from 'popper.js';\nimport { Popper } from './popper';\n\nimport './AutoCompleteInput.scss';\n\nconst DEBOUNCE_DELAY = 100;\n\nenum MENU_NAVIGATION_DIRECTION {\n UP = 'UP',\n DOWN = 'DOWN',\n}\n\ninterface AutoCompleteOption {\n title: string;\n value: string;\n}\n\ninterface AutoCompleteInputProps {\n options: AutoCompleteOption[];\n popperOptions: PopperOptions;\n onChange: (value: string, isValid: boolean) => void;\n inputPlaceholder: string;\n disabled: boolean;\n className: string;\n defaultTitle: string;\n spellCheck: boolean;\n onEnter: () => void;\n noMatchText: string;\n 'data-testid'?: string;\n}\n\ninterface AutoCompleteInputState {\n title: string;\n filteredOptions: AutoCompleteOption[];\n keyboardOptionIndex: number;\n menuIsOpen: boolean;\n inputWidth: number;\n invalid: boolean;\n popperOptions: PopperOptions;\n}\n\nclass AutoCompleteInput extends Component<\n AutoCompleteInputProps,\n AutoCompleteInputState\n> {\n static defaultProps = {\n onChange(): void {\n // no-op\n },\n inputPlaceholder: '',\n disabled: false,\n className: '',\n defaultTitle: '',\n popperOptions: null,\n spellCheck: true,\n onEnter(): void {\n // no-op\n },\n noMatchText: 'No matching items found',\n 'data-testid': undefined,\n };\n\n static MENU_NAVIGATION_DIRECTION = MENU_NAVIGATION_DIRECTION;\n\n constructor(props: AutoCompleteInputProps) {\n super(props);\n\n let { popperOptions } = this.props;\n popperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: { enabled: false },\n },\n ...popperOptions,\n };\n\n this.state = {\n title: '',\n filteredOptions: [],\n keyboardOptionIndex: 0,\n menuIsOpen: false,\n inputWidth: 100,\n invalid: false,\n popperOptions,\n };\n\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.handleMenuBlur = this.handleMenuBlur.bind(this);\n\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleInputKeyDown = this.handleInputKeyDown.bind(this);\n this.handleInputBlur = this.handleInputBlur.bind(this);\n this.handelInputFocus = this.handelInputFocus.bind(this);\n this.handleInputClick = this.handleInputClick.bind(this);\n\n this.updateInputValue = debounce(this.updateInputValue, DEBOUNCE_DELAY);\n\n this.handleOptionClick = this.handleOptionClick.bind(this);\n\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n\n this.popper = React.createRef();\n this.cbContainer = React.createRef();\n this.menuContainer = React.createRef();\n this.input = React.createRef();\n }\n\n popper: React.RefObject<Popper>;\n\n cbContainer: React.RefObject<HTMLDivElement>;\n\n menuContainer: React.RefObject<HTMLDivElement>;\n\n input: React.RefObject<HTMLInputElement>;\n\n setInputWidth(): void {\n if (this.cbContainer.current) {\n this.setState({\n inputWidth: this.cbContainer.current.getBoundingClientRect().width,\n });\n }\n }\n\n getCachedFilteredOptions = memoize(\n (options: AutoCompleteOption[], input: string) =>\n options.filter(\n // supports partial match\n option => option.title.toLowerCase().indexOf(input.toLowerCase()) >= 0\n ),\n { max: 1000 }\n );\n\n // validation needs to be an exact case-sensitve match on value\n getValueAndValidate(title: string): { value: string; isValid: boolean } {\n if (!title) {\n this.setState({ invalid: false });\n return { value: title, isValid: false };\n }\n\n // validate\n const { options } = this.props;\n const result = options.filter(\n option => option.title.toLowerCase() === title.toLowerCase()\n );\n if (result.length < 1) {\n this.setState({ invalid: true });\n return { value: title, isValid: false };\n }\n\n this.setState({ invalid: false });\n return { value: result[0].value, isValid: true };\n }\n\n // validate typed entries emit change event using value\n updateInputValue(title: string): void {\n const { menuIsOpen } = this.state;\n const { value, isValid } = this.getValueAndValidate(title);\n if (menuIsOpen) this.processFilterChange(title);\n this.fireOnChange(value, isValid);\n }\n\n fireOnChange(value: string, isValid = true): void {\n const { onChange } = this.props;\n onChange(value, isValid);\n }\n\n processFilterChange(filter: string): void {\n const { options } = this.props;\n const { menuIsOpen } = this.state;\n const filteredOptions = filter\n ? this.getCachedFilteredOptions(options, filter)\n : options;\n const perfectMatch =\n filteredOptions.length === 1 && filteredOptions[0].title === filter;\n this.setState({\n filteredOptions,\n keyboardOptionIndex: 0,\n });\n if (perfectMatch && menuIsOpen) {\n this.closeMenu();\n return;\n }\n this.popper.current?.scheduleUpdate(); // filtered options list can change size, may need to be repositioned\n }\n\n resetValue(): void {\n this.setState({ title: '' });\n this.fireOnChange('');\n }\n\n handleResize(): void {\n this.setInputWidth();\n }\n\n handleMenuKeyDown(event: React.KeyboardEvent): void {\n const { filteredOptions, keyboardOptionIndex } = this.state;\n const option = filteredOptions[keyboardOptionIndex];\n\n switch (event.key) {\n case 'Enter':\n case 'ArrowRight':\n event.stopPropagation();\n event.preventDefault();\n if (option != null) {\n this.setState({ title: option.title, invalid: false });\n this.fireOnChange(option.value);\n }\n this.closeMenu();\n this.input.current?.focus();\n break;\n case 'ArrowUp':\n event.stopPropagation();\n event.preventDefault();\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.UP);\n break;\n case 'ArrowDown':\n event.stopPropagation();\n event.preventDefault();\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.DOWN);\n break;\n case 'Tab':\n event.stopPropagation();\n event.preventDefault();\n if (event.shiftKey) {\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.UP);\n break;\n }\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.DOWN);\n break;\n case 'Escape':\n event.preventDefault();\n event.stopPropagation();\n this.closeMenu();\n break;\n default:\n break;\n }\n }\n\n navigateMenu(direction: MENU_NAVIGATION_DIRECTION): void {\n const { filteredOptions, keyboardOptionIndex } = this.state;\n let newKeyboardOptionIndex = keyboardOptionIndex;\n if (direction === AutoCompleteInput.MENU_NAVIGATION_DIRECTION.UP) {\n if (keyboardOptionIndex > 0) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex - 1) % filteredOptions.length;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n } else if (keyboardOptionIndex === 0) {\n newKeyboardOptionIndex = filteredOptions.length - 1;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n } else if (direction === AutoCompleteInput.MENU_NAVIGATION_DIRECTION.DOWN) {\n if (keyboardOptionIndex < filteredOptions.length) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex + 1) % filteredOptions.length;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n }\n\n handleInputKeyDown(event: React.KeyboardEvent): void {\n const { onEnter } = this.props;\n const { menuIsOpen } = this.state;\n\n if (menuIsOpen) {\n this.handleMenuKeyDown(event);\n } else if (event.key === 'Enter') {\n onEnter();\n } else if (event.key === 'Escape') {\n this.resetValue();\n event.preventDefault();\n event.stopPropagation();\n } else if (\n !(\n event.key === 'ArrowRight' ||\n event.key === 'ArrowLeft' ||\n event.key === 'Tab' ||\n event.key === 'Shift'\n )\n ) {\n this.openMenu();\n }\n }\n\n handleInputChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.setState({ title: event.target.value });\n this.updateInputValue(event.target.value);\n }\n\n handleOptionClick(option: AutoCompleteOption): void {\n this.setState({ title: option.title, invalid: false });\n this.fireOnChange(option.value);\n this.closeMenu();\n this.input.current?.focus();\n }\n\n handelInputFocus(): void {\n const { menuIsOpen } = this.state;\n if (!menuIsOpen) {\n this.openMenu();\n }\n }\n\n handleInputClick(): void {\n const { menuIsOpen } = this.state;\n if (!menuIsOpen) {\n this.openMenu();\n }\n }\n\n handleInputBlur(event: React.FocusEvent<HTMLInputElement>): void {\n const { menuIsOpen } = this.state;\n if (\n menuIsOpen &&\n event.relatedTarget instanceof Element &&\n this.popper.current !== null &&\n this.popper.current.element.contains(event.relatedTarget)\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleMenuBlur(event: React.FocusEvent<HTMLDivElement>): void {\n // if blur event is caused by focusing on the input or focus on options don't close menu\n if (\n event.relatedTarget === this.input.current ||\n (event.relatedTarget instanceof Element &&\n this.popper.current !== null &&\n this.popper.current.element.contains(event.relatedTarget))\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleMenuOpened(): void {\n this.input.current?.focus();\n }\n\n handleMenuExited(): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.setState({ menuIsOpen: false, keyboardOptionIndex: 0 });\n }\n }\n\n openMenu(): void {\n const { title } = this.state;\n this.processFilterChange(title);\n this.setInputWidth();\n this.setState({ menuIsOpen: true });\n\n // https://github.com/reactjs/react-transition-group/issues/382\n window.requestAnimationFrame(() => {\n this.popper.current?.show();\n });\n }\n\n closeMenu(focusInput = true): void {\n this.setState({ menuIsOpen: false, keyboardOptionIndex: 0 });\n if (focusInput) {\n this.input.current?.focus();\n }\n this.popper.current?.hide();\n }\n\n scrollOptionIntoView(index: number): void {\n if (this.menuContainer.current) {\n this.menuContainer.current.children.item(index)?.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n });\n }\n }\n\n renderMenuElement(): JSX.Element {\n const { inputWidth } = this.state;\n return (\n <div\n className={classNames('aci-options')}\n ref={this.menuContainer}\n role=\"presentation\"\n onKeyDown={this.handleMenuKeyDown}\n style={{ width: inputWidth }}\n onBlur={this.handleMenuBlur}\n >\n {this.renderOptions()}\n </div>\n );\n }\n\n renderOptions(): React.ReactNode {\n const { noMatchText } = this.props;\n const { title, filteredOptions } = this.state;\n\n if (title && filteredOptions.length === 0) {\n return <div className=\"no-match\">{noMatchText}</div>;\n }\n\n return filteredOptions.map((option, index) =>\n this.renderOption(option, index)\n );\n }\n\n renderOption(option: AutoCompleteOption, index: number): JSX.Element {\n const { keyboardOptionIndex } = this.state;\n const key = `option-${index}-${option.value}`;\n return (\n <button\n key={key}\n type=\"button\"\n className={classNames('aci-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index,\n })}\n onClick={() => this.handleOptionClick(option)}\n onFocus={() => this.setState({ keyboardOptionIndex: index })}\n >\n {option.title}\n </button>\n );\n }\n\n render(): JSX.Element {\n const {\n options,\n inputPlaceholder,\n disabled,\n className,\n defaultTitle,\n spellCheck,\n 'data-testid': dataTestId,\n } = this.props;\n const { title, menuIsOpen, popperOptions, invalid } = this.state;\n\n return (\n <div className=\"aci-container\" ref={this.cbContainer}>\n <input\n value={title || defaultTitle}\n className={classNames('form-control', className, 'aci-input', {\n 'is-invalid': invalid && !menuIsOpen,\n })}\n ref={this.input}\n onChange={this.handleInputChange}\n placeholder={inputPlaceholder || options[0].title}\n disabled={disabled}\n onFocus={this.handelInputFocus}\n onClick={this.handleInputClick}\n onBlur={this.handleInputBlur}\n onKeyDown={this.handleInputKeyDown}\n spellCheck={spellCheck}\n data-testid={dataTestId}\n />\n <Popper\n ref={this.popper}\n options={popperOptions}\n className={classNames('aci-options-popper interactive')}\n onEntered={this.handleMenuOpened}\n onExited={this.handleMenuExited}\n >\n {this.renderMenuElement()}\n </Popper>\n </div>\n );\n }\n}\n\nexport default AutoCompleteInput;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"AutoCompleteInput.js","names":["React","Component","memoize","classNames","debounce","Popper","jsx","_jsx","jsxs","_jsxs","DEBOUNCE_DELAY","MENU_NAVIGATION_DIRECTION","AutoCompleteInput","constructor","props","_defineProperty","options","input","filter","option","title","toLowerCase","indexOf","max","popperOptions","_objectSpread","placement","modifiers","preventOverflow","enabled","state","filteredOptions","keyboardOptionIndex","menuIsOpen","inputWidth","invalid","handleMenuKeyDown","bind","handleMenuBlur","handleInputChange","handleInputKeyDown","handleInputBlur","handelInputFocus","handleInputClick","updateInputValue","handleOptionClick","handleMenuOpened","handleMenuExited","popper","createRef","cbContainer","menuContainer","setInputWidth","current","setState","getBoundingClientRect","width","getValueAndValidate","value","isValid","result","length","_this$getValueAndVali","processFilterChange","fireOnChange","arguments","undefined","onChange","_this$popper$current","getCachedFilteredOptions","perfectMatch","closeMenu","scheduleUpdate","resetValue","handleResize","event","_this$input$current","_this$state","key","stopPropagation","preventDefault","focus","navigateMenu","UP","DOWN","shiftKey","direction","_this$state2","newKeyboardOptionIndex","scrollOptionIntoView","onEnter","openMenu","target","_this$input$current2","relatedTarget","Element","element","contains","_this$input$current3","window","requestAnimationFrame","_this$popper$current2","show","_this$popper$current3","focusInput","_this$input$current4","hide","index","_this$menuContainer$c","children","item","scrollIntoView","behavior","block","renderMenuElement","className","ref","role","onKeyDown","style","onBlur","renderOptions","noMatchText","_this$state3","map","renderOption","concat","type","onClick","onFocus","render","_this$props","inputPlaceholder","disabled","defaultTitle","spellCheck","dataTestId","_this$state4","placeholder","onEntered","onExited"],"sources":["../src/AutoCompleteInput.tsx"],"sourcesContent":["/**\n * An Input component that pops and filters auto complete options as you type.\n *\n * props:\n * @param options :[{\n * title: 'option title for display',\n * value: 'option value' //option value\n * }]\n * @param popperOptions options for the Popper\n * @param onChange called when the value is changed from the pulldown\n * @param inputPlaceholder place holder for the input box\n * @param disabled disable both input & drop down\n * @param className an optional class name applied to the input element\n * @param defaultTitle the default title to display\n * @param spellCheck flag to disable spell checking, defaults to true\n * @param onEnter called when the Enter key is typed in the input element\n *\n */\nimport React, { Component } from 'react';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport { type PopperOptions } from 'popper.js';\nimport { Popper } from './popper';\n\nimport './AutoCompleteInput.scss';\n\nconst DEBOUNCE_DELAY = 100;\n\nenum MENU_NAVIGATION_DIRECTION {\n UP = 'UP',\n DOWN = 'DOWN',\n}\n\ninterface AutoCompleteOption {\n title: string;\n value: string;\n}\n\ninterface AutoCompleteInputProps {\n options: AutoCompleteOption[];\n popperOptions: PopperOptions;\n onChange: (value: string, isValid: boolean) => void;\n inputPlaceholder: string;\n disabled: boolean;\n className: string;\n defaultTitle: string;\n spellCheck: boolean;\n onEnter: () => void;\n noMatchText: string;\n 'data-testid'?: string;\n}\n\ninterface AutoCompleteInputState {\n title: string;\n filteredOptions: AutoCompleteOption[];\n keyboardOptionIndex: number;\n menuIsOpen: boolean;\n inputWidth: number;\n invalid: boolean;\n popperOptions: PopperOptions;\n}\n\nclass AutoCompleteInput extends Component<\n AutoCompleteInputProps,\n AutoCompleteInputState\n> {\n static defaultProps = {\n onChange(): void {\n // no-op\n },\n inputPlaceholder: '',\n disabled: false,\n className: '',\n defaultTitle: '',\n popperOptions: null,\n spellCheck: true,\n onEnter(): void {\n // no-op\n },\n noMatchText: 'No matching items found',\n 'data-testid': undefined,\n };\n\n static MENU_NAVIGATION_DIRECTION = MENU_NAVIGATION_DIRECTION;\n\n constructor(props: AutoCompleteInputProps) {\n super(props);\n\n let { popperOptions } = this.props;\n popperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: { enabled: false },\n },\n ...popperOptions,\n };\n\n this.state = {\n title: '',\n filteredOptions: [],\n keyboardOptionIndex: 0,\n menuIsOpen: false,\n inputWidth: 100,\n invalid: false,\n popperOptions,\n };\n\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.handleMenuBlur = this.handleMenuBlur.bind(this);\n\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleInputKeyDown = this.handleInputKeyDown.bind(this);\n this.handleInputBlur = this.handleInputBlur.bind(this);\n this.handelInputFocus = this.handelInputFocus.bind(this);\n this.handleInputClick = this.handleInputClick.bind(this);\n\n this.updateInputValue = debounce(this.updateInputValue, DEBOUNCE_DELAY);\n\n this.handleOptionClick = this.handleOptionClick.bind(this);\n\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n\n this.popper = React.createRef();\n this.cbContainer = React.createRef();\n this.menuContainer = React.createRef();\n this.input = React.createRef();\n }\n\n popper: React.RefObject<Popper>;\n\n cbContainer: React.RefObject<HTMLDivElement>;\n\n menuContainer: React.RefObject<HTMLDivElement>;\n\n input: React.RefObject<HTMLInputElement>;\n\n setInputWidth(): void {\n if (this.cbContainer.current) {\n this.setState({\n inputWidth: this.cbContainer.current.getBoundingClientRect().width,\n });\n }\n }\n\n getCachedFilteredOptions = memoize(\n (options: AutoCompleteOption[], input: string) =>\n options.filter(\n // supports partial match\n option => option.title.toLowerCase().indexOf(input.toLowerCase()) >= 0\n ),\n { max: 1000 }\n );\n\n // validation needs to be an exact case-sensitve match on value\n getValueAndValidate(title: string): { value: string; isValid: boolean } {\n if (!title) {\n this.setState({ invalid: false });\n return { value: title, isValid: false };\n }\n\n // validate\n const { options } = this.props;\n const result = options.filter(\n option => option.title.toLowerCase() === title.toLowerCase()\n );\n if (result.length < 1) {\n this.setState({ invalid: true });\n return { value: title, isValid: false };\n }\n\n this.setState({ invalid: false });\n return { value: result[0].value, isValid: true };\n }\n\n // validate typed entries emit change event using value\n updateInputValue(title: string): void {\n const { menuIsOpen } = this.state;\n const { value, isValid } = this.getValueAndValidate(title);\n if (menuIsOpen) this.processFilterChange(title);\n this.fireOnChange(value, isValid);\n }\n\n fireOnChange(value: string, isValid = true): void {\n const { onChange } = this.props;\n onChange(value, isValid);\n }\n\n processFilterChange(filter: string): void {\n const { options } = this.props;\n const { menuIsOpen } = this.state;\n const filteredOptions = filter\n ? this.getCachedFilteredOptions(options, filter)\n : options;\n const perfectMatch =\n filteredOptions.length === 1 && filteredOptions[0].title === filter;\n this.setState({\n filteredOptions,\n keyboardOptionIndex: 0,\n });\n if (perfectMatch && menuIsOpen) {\n this.closeMenu();\n return;\n }\n this.popper.current?.scheduleUpdate(); // filtered options list can change size, may need to be repositioned\n }\n\n resetValue(): void {\n this.setState({ title: '' });\n this.fireOnChange('');\n }\n\n handleResize(): void {\n this.setInputWidth();\n }\n\n handleMenuKeyDown(event: React.KeyboardEvent): void {\n const { filteredOptions, keyboardOptionIndex } = this.state;\n const option = filteredOptions[keyboardOptionIndex];\n\n switch (event.key) {\n case 'Enter':\n case 'ArrowRight':\n event.stopPropagation();\n event.preventDefault();\n if (option != null) {\n this.setState({ title: option.title, invalid: false });\n this.fireOnChange(option.value);\n }\n this.closeMenu();\n this.input.current?.focus();\n break;\n case 'ArrowUp':\n event.stopPropagation();\n event.preventDefault();\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.UP);\n break;\n case 'ArrowDown':\n event.stopPropagation();\n event.preventDefault();\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.DOWN);\n break;\n case 'Tab':\n event.stopPropagation();\n event.preventDefault();\n if (event.shiftKey) {\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.UP);\n break;\n }\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.DOWN);\n break;\n case 'Escape':\n event.preventDefault();\n event.stopPropagation();\n this.closeMenu();\n break;\n default:\n break;\n }\n }\n\n navigateMenu(direction: MENU_NAVIGATION_DIRECTION): void {\n const { filteredOptions, keyboardOptionIndex } = this.state;\n let newKeyboardOptionIndex = keyboardOptionIndex;\n if (direction === AutoCompleteInput.MENU_NAVIGATION_DIRECTION.UP) {\n if (keyboardOptionIndex > 0) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex - 1) % filteredOptions.length;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n } else if (keyboardOptionIndex === 0) {\n newKeyboardOptionIndex = filteredOptions.length - 1;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n } else if (direction === AutoCompleteInput.MENU_NAVIGATION_DIRECTION.DOWN) {\n if (keyboardOptionIndex < filteredOptions.length) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex + 1) % filteredOptions.length;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n }\n\n handleInputKeyDown(event: React.KeyboardEvent): void {\n const { onEnter } = this.props;\n const { menuIsOpen } = this.state;\n\n if (menuIsOpen) {\n this.handleMenuKeyDown(event);\n } else if (event.key === 'Enter') {\n onEnter();\n } else if (event.key === 'Escape') {\n this.resetValue();\n event.preventDefault();\n event.stopPropagation();\n } else if (\n !(\n event.key === 'ArrowRight' ||\n event.key === 'ArrowLeft' ||\n event.key === 'Tab' ||\n event.key === 'Shift'\n )\n ) {\n this.openMenu();\n }\n }\n\n handleInputChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.setState({ title: event.target.value });\n this.updateInputValue(event.target.value);\n }\n\n handleOptionClick(option: AutoCompleteOption): void {\n this.setState({ title: option.title, invalid: false });\n this.fireOnChange(option.value);\n this.closeMenu();\n this.input.current?.focus();\n }\n\n handelInputFocus(): void {\n const { menuIsOpen } = this.state;\n if (!menuIsOpen) {\n this.openMenu();\n }\n }\n\n handleInputClick(): void {\n const { menuIsOpen } = this.state;\n if (!menuIsOpen) {\n this.openMenu();\n }\n }\n\n handleInputBlur(event: React.FocusEvent<HTMLInputElement>): void {\n const { menuIsOpen } = this.state;\n if (\n menuIsOpen &&\n event.relatedTarget instanceof Element &&\n this.popper.current !== null &&\n this.popper.current.element.contains(event.relatedTarget)\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleMenuBlur(event: React.FocusEvent<HTMLDivElement>): void {\n // if blur event is caused by focusing on the input or focus on options don't close menu\n if (\n event.relatedTarget === this.input.current ||\n (event.relatedTarget instanceof Element &&\n this.popper.current !== null &&\n this.popper.current.element.contains(event.relatedTarget))\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleMenuOpened(): void {\n this.input.current?.focus();\n }\n\n handleMenuExited(): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.setState({ menuIsOpen: false, keyboardOptionIndex: 0 });\n }\n }\n\n openMenu(): void {\n const { title } = this.state;\n this.processFilterChange(title);\n this.setInputWidth();\n this.setState({ menuIsOpen: true });\n\n // https://github.com/reactjs/react-transition-group/issues/382\n window.requestAnimationFrame(() => {\n this.popper.current?.show();\n });\n }\n\n closeMenu(focusInput = true): void {\n this.setState({ menuIsOpen: false, keyboardOptionIndex: 0 });\n if (focusInput) {\n this.input.current?.focus();\n }\n this.popper.current?.hide();\n }\n\n scrollOptionIntoView(index: number): void {\n if (this.menuContainer.current) {\n this.menuContainer.current.children.item(index)?.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n });\n }\n }\n\n renderMenuElement(): JSX.Element {\n const { inputWidth } = this.state;\n return (\n <div\n className={classNames('aci-options')}\n ref={this.menuContainer}\n role=\"presentation\"\n onKeyDown={this.handleMenuKeyDown}\n style={{ width: inputWidth }}\n onBlur={this.handleMenuBlur}\n >\n {this.renderOptions()}\n </div>\n );\n }\n\n renderOptions(): React.ReactNode {\n const { noMatchText } = this.props;\n const { title, filteredOptions } = this.state;\n\n if (title && filteredOptions.length === 0) {\n return <div className=\"no-match\">{noMatchText}</div>;\n }\n\n return filteredOptions.map((option, index) =>\n this.renderOption(option, index)\n );\n }\n\n renderOption(option: AutoCompleteOption, index: number): JSX.Element {\n const { keyboardOptionIndex } = this.state;\n const key = `option-${index}-${option.value}`;\n return (\n <button\n key={key}\n type=\"button\"\n className={classNames('aci-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index,\n })}\n onClick={() => this.handleOptionClick(option)}\n onFocus={() => this.setState({ keyboardOptionIndex: index })}\n >\n {option.title}\n </button>\n );\n }\n\n render(): JSX.Element {\n const {\n options,\n inputPlaceholder,\n disabled,\n className,\n defaultTitle,\n spellCheck,\n 'data-testid': dataTestId,\n } = this.props;\n const { title, menuIsOpen, popperOptions, invalid } = this.state;\n\n return (\n <div className=\"aci-container\" ref={this.cbContainer}>\n <input\n value={title || defaultTitle}\n className={classNames('form-control', className, 'aci-input', {\n 'is-invalid': invalid && !menuIsOpen,\n })}\n ref={this.input}\n onChange={this.handleInputChange}\n placeholder={inputPlaceholder || options[0].title}\n disabled={disabled}\n onFocus={this.handelInputFocus}\n onClick={this.handleInputClick}\n onBlur={this.handleInputBlur}\n onKeyDown={this.handleInputKeyDown}\n spellCheck={spellCheck}\n data-testid={dataTestId}\n />\n <Popper\n ref={this.popper}\n options={popperOptions}\n className={classNames('aci-options-popper interactive')}\n onEntered={this.handleMenuOpened}\n onExited={this.handleMenuExited}\n >\n {this.renderMenuElement()}\n </Popper>\n </div>\n );\n }\n}\n\nexport default AutoCompleteInput;\n"],"mappings":"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","ignoreList":[]}
@@ -1,3 +1,9 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
1
7
  import React, { useState, useRef, useEffect } from 'react';
2
8
  import classNames from 'classnames';
3
9
  import "./AutoResizeTextarea.css";
@@ -78,19 +84,29 @@ function explode(input, delimiter) {
78
84
  * on focus, and implode on blur. By default, it doesn't word wrap.
79
85
  */
80
86
  function AutoResizeTextarea(_ref) {
81
- var {
82
- className = '',
83
- value: propsValue,
84
- onChange,
85
- spellCheck = false,
86
- placeholder = '',
87
- disabled = false,
88
- delimiter = '',
89
- id = '',
90
- 'data-testid': dataTestId
91
- } = _ref;
92
- var [value, setValue] = useState(propsValue);
93
- var [isPastedChange, setIsPastedChange] = useState(false);
87
+ var _ref$className = _ref.className,
88
+ className = _ref$className === void 0 ? '' : _ref$className,
89
+ propsValue = _ref.value,
90
+ onChange = _ref.onChange,
91
+ _ref$spellCheck = _ref.spellCheck,
92
+ spellCheck = _ref$spellCheck === void 0 ? false : _ref$spellCheck,
93
+ _ref$placeholder = _ref.placeholder,
94
+ placeholder = _ref$placeholder === void 0 ? '' : _ref$placeholder,
95
+ _ref$disabled = _ref.disabled,
96
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
97
+ _ref$delimiter = _ref.delimiter,
98
+ delimiter = _ref$delimiter === void 0 ? '' : _ref$delimiter,
99
+ _ref$id = _ref.id,
100
+ id = _ref$id === void 0 ? '' : _ref$id,
101
+ dataTestId = _ref['data-testid'];
102
+ var _useState = useState(propsValue),
103
+ _useState2 = _slicedToArray(_useState, 2),
104
+ value = _useState2[0],
105
+ setValue = _useState2[1];
106
+ var _useState3 = useState(false),
107
+ _useState4 = _slicedToArray(_useState3, 2),
108
+ isPastedChange = _useState4[0],
109
+ setIsPastedChange = _useState4[1];
94
110
  var element = useRef(null);
95
111
  var isFocused = useRef(false);
96
112
  var valueRef = useRef(value);
@@ -1 +1 @@
1
- {"version":3,"file":"AutoResizeTextarea.js","names":["React","useState","useRef","useEffect","classNames","jsx","_jsx","implode","input","split","map","string","trim","filter","join","splitOnDelimiter","delimiter","tokens","current","quoteChar","i","length","ch","closingIdx","indexOf","startsWith","push","explode","token","concat","AutoResizeTextarea","_ref","className","value","propsValue","onChange","spellCheck","placeholder","disabled","id","dataTestId","setValue","isPastedChange","setIsPastedChange","element","isFocused","valueRef","syncStateWithProp","reCalculateLayout","style","height","resizedHeight","scrollHeight","offsetHeight","clientHeight","handleChange","event","newValue","target","handleFocus","scrollLeft","handleMouseDown","document","activeElement","focus","handleBlur","handlePaste","reCalculate","ref","rows","onFocus","onMouseDown","onBlur","onPaste"],"sources":["../src/AutoResizeTextarea.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from 'react';\nimport classNames from 'classnames';\n\nimport './AutoResizeTextarea.scss';\n\ninterface AutoResizeTextareaProps {\n value: string;\n onChange: (val: string) => void;\n className?: string;\n spellCheck?: boolean;\n placeholder?: string;\n disabled?: boolean;\n delimiter?: string;\n id?: string;\n 'data-testid'?: string;\n}\n\nfunction implode(input: string): string {\n return input\n .split('\\n')\n .map(string => string.trim())\n .filter(string => string) // remove empty strings (e.g. from trailing newlines)\n .join(' ');\n}\n\n/**\n * Splits a string on a delimiter, respecting quoted spans.\n * Delimiters that appear inside `\"...\"` or `'...'` are treated as literal\n * characters and do not cause a split. Quotes are preserved in the returned\n * tokens so the operation is lossless (suitable for display-only transformations\n * where the original text must be recoverable).\n *\n * An unbalanced opening quote (no matching closing quote found ahead) is treated\n * as a literal character and splitting proceeds normally.\n *\n * @param input The string to split.\n * @param delimiter The delimiter to split on.\n * @returns An array of tokens. Always contains at least one element.\n */\nfunction splitOnDelimiter(input: string, delimiter: string): string[] {\n // Walk the string character by character, tracking quoted spans so that\n // delimiters inside \"...\" or '...' are not treated as split points.\n // Quotes are preserved in the output (not stripped) so the round-trip is lossless.\n // An unbalanced quote is treated as a literal character — splitting continues normally.\n const tokens: string[] = [];\n let current = '';\n let quoteChar: '\"' | \"'\" | null = null;\n let i = 0;\n\n while (i < input.length) {\n const ch = input[i];\n\n if (quoteChar !== null) {\n // Inside a quoted span — accumulate until we hit the matching closing quote\n current += ch;\n if (ch === quoteChar) {\n quoteChar = null;\n }\n i += 1;\n } else if (ch === '\"' || ch === \"'\") {\n // Only treat as a quoted span if there is a matching closing quote ahead.\n // An unbalanced quote is treated as a literal character so the delimiter\n // logic continues to work normally.\n const closingIdx = input.indexOf(ch, i + 1);\n if (closingIdx !== -1) {\n quoteChar = ch;\n }\n current += ch;\n i += 1;\n } else if (input.startsWith(delimiter, i)) {\n // Delimiter found outside a quoted span — emit the current token and advance\n tokens.push(current);\n current = '';\n i += delimiter.length;\n } else {\n // Plain character outside any quoted span and not part of the delimiter — accumulate it\n current += ch;\n i += 1;\n }\n }\n\n tokens.push(current);\n return tokens;\n}\n\nfunction explode(input: string, delimiter: string): string {\n // Split by delimiter (commonly \" \" or \" -\") respecting quoted spans, then\n // join with newline + trimmed delimiter so each token appears on its own line.\n // Empty tokens (e.g. from multiple consecutive delimiters) are filtered out.\n return splitOnDelimiter(input.trim(), delimiter)\n .filter(token => token !== '') // remove empty strings\n .join(`\\n${delimiter.trim()}`);\n}\n\n/**\n * Makes a textarea that auto resizes based on contents, its height grows with new lines.\n * If a delimiter is set, such as \" -\" or \" \", as used by jvm args or env vars\n * then the field will also \"explode\" the value by the delimiter over new lines\n * on focus, and implode on blur. By default, it doesn't word wrap.\n */\nfunction AutoResizeTextarea({\n className = '',\n value: propsValue,\n onChange,\n spellCheck = false,\n placeholder = '',\n disabled = false,\n delimiter = '',\n id = '',\n 'data-testid': dataTestId,\n}: AutoResizeTextareaProps): JSX.Element {\n const [value, setValue] = useState(propsValue);\n const [isPastedChange, setIsPastedChange] = useState(false);\n const element = useRef<HTMLTextAreaElement>(null);\n const isFocused = useRef(false);\n const valueRef = useRef(value);\n valueRef.current = value;\n\n useEffect(\n function syncStateWithProp() {\n if (!isFocused.current || !delimiter) {\n // When not focused (or no delimiter), always sync to the new prop value.\n setValue(propsValue);\n } else if (implode(valueRef.current) !== implode(propsValue)) {\n // When focused with delimiter, only update if the imploded value changed to prevent clobbering delimiters\n setValue(explode(propsValue, delimiter));\n }\n },\n [propsValue, delimiter]\n );\n\n function reCalculateLayout(): void {\n if (!element.current) {\n return;\n }\n element.current.style.height = '0'; // shrink component to get scrollHeight\n const resizedHeight =\n element.current.scrollHeight +\n (element.current.offsetHeight - element.current.clientHeight);\n // accounts for border, padding is captured by scroll height\n if (resizedHeight > 0) element.current.style.height = `${resizedHeight}px`;\n }\n\n function handleChange(event: React.ChangeEvent<HTMLTextAreaElement>): void {\n let newValue = event.target.value;\n if (isPastedChange) {\n if (delimiter) newValue = explode(newValue, delimiter);\n setIsPastedChange(false);\n }\n setValue(newValue);\n // If there is a delimiter, the onChange value should always be the imploded version\n // to prevent mismatch when exiting without triggering onBlur\n // The exploded version is display only\n onChange(delimiter ? implode(newValue) : newValue);\n }\n\n function handleFocus(): void {\n if (!element.current) {\n return;\n }\n isFocused.current = true;\n if (delimiter) {\n setValue(explode(value, delimiter));\n reCalculateLayout();\n }\n element.current.scrollLeft = 0;\n // scroll left as it can be disorienting if you click on a long line\n }\n\n // make it explode when dragging the resize handle\n // by making it trigger focus (which normally doesn't\n // trigger when just resizing).\n function handleMouseDown(): void {\n if (!element.current) return;\n if (document.activeElement === element.current) return;\n element.current.focus();\n }\n\n function handleBlur(): void {\n isFocused.current = false;\n if (delimiter) {\n setValue(implode(value));\n onChange(implode(value));\n }\n }\n\n function handlePaste(): void {\n setIsPastedChange(true);\n }\n\n useEffect(\n function reCalculate() {\n reCalculateLayout();\n },\n [value]\n );\n\n return (\n <textarea\n ref={element}\n id={id}\n className={classNames(className, 'auto-resize-textarea form-control')}\n placeholder={placeholder}\n value={value}\n rows={1}\n onChange={handleChange}\n onFocus={handleFocus}\n onMouseDown={handleMouseDown}\n onBlur={handleBlur}\n onPaste={handlePaste}\n spellCheck={spellCheck}\n disabled={disabled}\n data-testid={dataTestId}\n />\n );\n}\n\nexport default AutoResizeTextarea;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,EAAEC,MAAM,EAAEC,SAAS,QAAQ,OAAO;AAC1D,OAAOC,UAAU,MAAM,YAAY;AAAC;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAgBpC,SAASC,OAAOA,CAACC,KAAa,EAAU;EACtC,OAAOA,KAAK,CACTC,KAAK,CAAC,IAAI,CAAC,CACXC,GAAG,CAACC,MAAM,IAAIA,MAAM,CAACC,IAAI,CAAC,CAAC,CAAC,CAC5BC,MAAM,CAACF,MAAM,IAAIA,MAAM,CAAC,CAAC;EAAA,CACzBG,IAAI,CAAC,GAAG,CAAC;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,gBAAgBA,CAACP,KAAa,EAAEQ,SAAiB,EAAY;EACpE;EACA;EACA;EACA;EACA,IAAMC,MAAgB,GAAG,EAAE;EAC3B,IAAIC,OAAO,GAAG,EAAE;EAChB,IAAIC,SAA2B,GAAG,IAAI;EACtC,IAAIC,CAAC,GAAG,CAAC;EAET,OAAOA,CAAC,GAAGZ,KAAK,CAACa,MAAM,EAAE;IACvB,IAAMC,EAAE,GAAGd,KAAK,CAACY,CAAC,CAAC;IAEnB,IAAID,SAAS,KAAK,IAAI,EAAE;MACtB;MACAD,OAAO,IAAII,EAAE;MACb,IAAIA,EAAE,KAAKH,SAAS,EAAE;QACpBA,SAAS,GAAG,IAAI;MAClB;MACAC,CAAC,IAAI,CAAC;IACR,CAAC,MAAM,IAAIE,EAAE,KAAK,GAAG,IAAIA,EAAE,KAAK,GAAG,EAAE;MACnC;MACA;MACA;MACA,IAAMC,UAAU,GAAGf,KAAK,CAACgB,OAAO,CAACF,EAAE,EAAEF,CAAC,GAAG,CAAC,CAAC;MAC3C,IAAIG,UAAU,KAAK,CAAC,CAAC,EAAE;QACrBJ,SAAS,GAAGG,EAAE;MAChB;MACAJ,OAAO,IAAII,EAAE;MACbF,CAAC,IAAI,CAAC;IACR,CAAC,MAAM,IAAIZ,KAAK,CAACiB,UAAU,CAACT,SAAS,EAAEI,CAAC,CAAC,EAAE;MACzC;MACAH,MAAM,CAACS,IAAI,CAACR,OAAO,CAAC;MACpBA,OAAO,GAAG,EAAE;MACZE,CAAC,IAAIJ,SAAS,CAACK,MAAM;IACvB,CAAC,MAAM;MACL;MACAH,OAAO,IAAII,EAAE;MACbF,CAAC,IAAI,CAAC;IACR;EACF;EAEAH,MAAM,CAACS,IAAI,CAACR,OAAO,CAAC;EACpB,OAAOD,MAAM;AACf;AAEA,SAASU,OAAOA,CAACnB,KAAa,EAAEQ,SAAiB,EAAU;EACzD;EACA;EACA;EACA,OAAOD,gBAAgB,CAACP,KAAK,CAACI,IAAI,CAAC,CAAC,EAAEI,SAAS,CAAC,CAC7CH,MAAM,CAACe,KAAK,IAAIA,KAAK,KAAK,EAAE,CAAC,CAAC;EAAA,CAC9Bd,IAAI,MAAAe,MAAA,CAAMb,SAAS,CAACJ,IAAI,CAAC,CAAC,CAAE,CAAC;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASkB,kBAAkBA,CAAAC,IAAA,EAUc;EAAA,IAVb;IAC1BC,SAAS,GAAG,EAAE;IACdC,KAAK,EAAEC,UAAU;IACjBC,QAAQ;IACRC,UAAU,GAAG,KAAK;IAClBC,WAAW,GAAG,EAAE;IAChBC,QAAQ,GAAG,KAAK;IAChBtB,SAAS,GAAG,EAAE;IACduB,EAAE,GAAG,EAAE;IACP,aAAa,EAAEC;EACQ,CAAC,GAAAT,IAAA;EACxB,IAAM,CAACE,KAAK,EAAEQ,QAAQ,CAAC,GAAGxC,QAAQ,CAACiC,UAAU,CAAC;EAC9C,IAAM,CAACQ,cAAc,EAAEC,iBAAiB,CAAC,GAAG1C,QAAQ,CAAC,KAAK,CAAC;EAC3D,IAAM2C,OAAO,GAAG1C,MAAM,CAAsB,IAAI,CAAC;EACjD,IAAM2C,SAAS,GAAG3C,MAAM,CAAC,KAAK,CAAC;EAC/B,IAAM4C,QAAQ,GAAG5C,MAAM,CAAC+B,KAAK,CAAC;EAC9Ba,QAAQ,CAAC5B,OAAO,GAAGe,KAAK;EAExB9B,SAAS,CACP,SAAS4C,iBAAiBA,CAAA,EAAG;IAC3B,IAAI,CAACF,SAAS,CAAC3B,OAAO,IAAI,CAACF,SAAS,EAAE;MACpC;MACAyB,QAAQ,CAACP,UAAU,CAAC;IACtB,CAAC,MAAM,IAAI3B,OAAO,CAACuC,QAAQ,CAAC5B,OAAO,CAAC,KAAKX,OAAO,CAAC2B,UAAU,CAAC,EAAE;MAC5D;MACAO,QAAQ,CAACd,OAAO,CAACO,UAAU,EAAElB,SAAS,CAAC,CAAC;IAC1C;EACF,CAAC,EACD,CAACkB,UAAU,EAAElB,SAAS,CACxB,CAAC;EAED,SAASgC,iBAAiBA,CAAA,EAAS;IACjC,IAAI,CAACJ,OAAO,CAAC1B,OAAO,EAAE;MACpB;IACF;IACA0B,OAAO,CAAC1B,OAAO,CAAC+B,KAAK,CAACC,MAAM,GAAG,GAAG,CAAC,CAAC;IACpC,IAAMC,aAAa,GACjBP,OAAO,CAAC1B,OAAO,CAACkC,YAAY,IAC3BR,OAAO,CAAC1B,OAAO,CAACmC,YAAY,GAAGT,OAAO,CAAC1B,OAAO,CAACoC,YAAY,CAAC;IAC/D;IACA,IAAIH,aAAa,GAAG,CAAC,EAAEP,OAAO,CAAC1B,OAAO,CAAC+B,KAAK,CAACC,MAAM,MAAArB,MAAA,CAAMsB,aAAa,OAAI;EAC5E;EAEA,SAASI,YAAYA,CAACC,KAA6C,EAAQ;IACzE,IAAIC,QAAQ,GAAGD,KAAK,CAACE,MAAM,CAACzB,KAAK;IACjC,IAAIS,cAAc,EAAE;MAClB,IAAI1B,SAAS,EAAEyC,QAAQ,GAAG9B,OAAO,CAAC8B,QAAQ,EAAEzC,SAAS,CAAC;MACtD2B,iBAAiB,CAAC,KAAK,CAAC;IAC1B;IACAF,QAAQ,CAACgB,QAAQ,CAAC;IAClB;IACA;IACA;IACAtB,QAAQ,CAACnB,SAAS,GAAGT,OAAO,CAACkD,QAAQ,CAAC,GAAGA,QAAQ,CAAC;EACpD;EAEA,SAASE,WAAWA,CAAA,EAAS;IAC3B,IAAI,CAACf,OAAO,CAAC1B,OAAO,EAAE;MACpB;IACF;IACA2B,SAAS,CAAC3B,OAAO,GAAG,IAAI;IACxB,IAAIF,SAAS,EAAE;MACbyB,QAAQ,CAACd,OAAO,CAACM,KAAK,EAAEjB,SAAS,CAAC,CAAC;MACnCgC,iBAAiB,CAAC,CAAC;IACrB;IACAJ,OAAO,CAAC1B,OAAO,CAAC0C,UAAU,GAAG,CAAC;IAC9B;EACF;;EAEA;EACA;EACA;EACA,SAASC,eAAeA,CAAA,EAAS;IAC/B,IAAI,CAACjB,OAAO,CAAC1B,OAAO,EAAE;IACtB,IAAI4C,QAAQ,CAACC,aAAa,KAAKnB,OAAO,CAAC1B,OAAO,EAAE;IAChD0B,OAAO,CAAC1B,OAAO,CAAC8C,KAAK,CAAC,CAAC;EACzB;EAEA,SAASC,UAAUA,CAAA,EAAS;IAC1BpB,SAAS,CAAC3B,OAAO,GAAG,KAAK;IACzB,IAAIF,SAAS,EAAE;MACbyB,QAAQ,CAAClC,OAAO,CAAC0B,KAAK,CAAC,CAAC;MACxBE,QAAQ,CAAC5B,OAAO,CAAC0B,KAAK,CAAC,CAAC;IAC1B;EACF;EAEA,SAASiC,WAAWA,CAAA,EAAS;IAC3BvB,iBAAiB,CAAC,IAAI,CAAC;EACzB;EAEAxC,SAAS,CACP,SAASgE,WAAWA,CAAA,EAAG;IACrBnB,iBAAiB,CAAC,CAAC;EACrB,CAAC,EACD,CAACf,KAAK,CACR,CAAC;EAED,oBACE3B,IAAA;IACE8D,GAAG,EAAExB,OAAQ;IACbL,EAAE,EAAEA,EAAG;IACPP,SAAS,EAAE5B,UAAU,CAAC4B,SAAS,EAAE,mCAAmC,CAAE;IACtEK,WAAW,EAAEA,WAAY;IACzBJ,KAAK,EAAEA,KAAM;IACboC,IAAI,EAAE,CAAE;IACRlC,QAAQ,EAAEoB,YAAa;IACvBe,OAAO,EAAEX,WAAY;IACrBY,WAAW,EAAEV,eAAgB;IAC7BW,MAAM,EAAEP,UAAW;IACnBQ,OAAO,EAAEP,WAAY;IACrB9B,UAAU,EAAEA,UAAW;IACvBE,QAAQ,EAAEA,QAAS;IACnB,eAAaE;EAAW,CACzB,CAAC;AAEN;AAEA,eAAeV,kBAAkB","ignoreList":[]}
1
+ {"version":3,"file":"AutoResizeTextarea.js","names":["React","useState","useRef","useEffect","classNames","jsx","_jsx","implode","input","split","map","string","trim","filter","join","splitOnDelimiter","delimiter","tokens","current","quoteChar","i","length","ch","closingIdx","indexOf","startsWith","push","explode","token","concat","AutoResizeTextarea","_ref","_ref$className","className","propsValue","value","onChange","_ref$spellCheck","spellCheck","_ref$placeholder","placeholder","_ref$disabled","disabled","_ref$delimiter","_ref$id","id","dataTestId","_useState","_useState2","_slicedToArray","setValue","_useState3","_useState4","isPastedChange","setIsPastedChange","element","isFocused","valueRef","syncStateWithProp","reCalculateLayout","style","height","resizedHeight","scrollHeight","offsetHeight","clientHeight","handleChange","event","newValue","target","handleFocus","scrollLeft","handleMouseDown","document","activeElement","focus","handleBlur","handlePaste","reCalculate","ref","rows","onFocus","onMouseDown","onBlur","onPaste"],"sources":["../src/AutoResizeTextarea.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from 'react';\nimport classNames from 'classnames';\n\nimport './AutoResizeTextarea.scss';\n\ninterface AutoResizeTextareaProps {\n value: string;\n onChange: (val: string) => void;\n className?: string;\n spellCheck?: boolean;\n placeholder?: string;\n disabled?: boolean;\n delimiter?: string;\n id?: string;\n 'data-testid'?: string;\n}\n\nfunction implode(input: string): string {\n return input\n .split('\\n')\n .map(string => string.trim())\n .filter(string => string) // remove empty strings (e.g. from trailing newlines)\n .join(' ');\n}\n\n/**\n * Splits a string on a delimiter, respecting quoted spans.\n * Delimiters that appear inside `\"...\"` or `'...'` are treated as literal\n * characters and do not cause a split. Quotes are preserved in the returned\n * tokens so the operation is lossless (suitable for display-only transformations\n * where the original text must be recoverable).\n *\n * An unbalanced opening quote (no matching closing quote found ahead) is treated\n * as a literal character and splitting proceeds normally.\n *\n * @param input The string to split.\n * @param delimiter The delimiter to split on.\n * @returns An array of tokens. Always contains at least one element.\n */\nfunction splitOnDelimiter(input: string, delimiter: string): string[] {\n // Walk the string character by character, tracking quoted spans so that\n // delimiters inside \"...\" or '...' are not treated as split points.\n // Quotes are preserved in the output (not stripped) so the round-trip is lossless.\n // An unbalanced quote is treated as a literal character — splitting continues normally.\n const tokens: string[] = [];\n let current = '';\n let quoteChar: '\"' | \"'\" | null = null;\n let i = 0;\n\n while (i < input.length) {\n const ch = input[i];\n\n if (quoteChar !== null) {\n // Inside a quoted span — accumulate until we hit the matching closing quote\n current += ch;\n if (ch === quoteChar) {\n quoteChar = null;\n }\n i += 1;\n } else if (ch === '\"' || ch === \"'\") {\n // Only treat as a quoted span if there is a matching closing quote ahead.\n // An unbalanced quote is treated as a literal character so the delimiter\n // logic continues to work normally.\n const closingIdx = input.indexOf(ch, i + 1);\n if (closingIdx !== -1) {\n quoteChar = ch;\n }\n current += ch;\n i += 1;\n } else if (input.startsWith(delimiter, i)) {\n // Delimiter found outside a quoted span — emit the current token and advance\n tokens.push(current);\n current = '';\n i += delimiter.length;\n } else {\n // Plain character outside any quoted span and not part of the delimiter — accumulate it\n current += ch;\n i += 1;\n }\n }\n\n tokens.push(current);\n return tokens;\n}\n\nfunction explode(input: string, delimiter: string): string {\n // Split by delimiter (commonly \" \" or \" -\") respecting quoted spans, then\n // join with newline + trimmed delimiter so each token appears on its own line.\n // Empty tokens (e.g. from multiple consecutive delimiters) are filtered out.\n return splitOnDelimiter(input.trim(), delimiter)\n .filter(token => token !== '') // remove empty strings\n .join(`\\n${delimiter.trim()}`);\n}\n\n/**\n * Makes a textarea that auto resizes based on contents, its height grows with new lines.\n * If a delimiter is set, such as \" -\" or \" \", as used by jvm args or env vars\n * then the field will also \"explode\" the value by the delimiter over new lines\n * on focus, and implode on blur. By default, it doesn't word wrap.\n */\nfunction AutoResizeTextarea({\n className = '',\n value: propsValue,\n onChange,\n spellCheck = false,\n placeholder = '',\n disabled = false,\n delimiter = '',\n id = '',\n 'data-testid': dataTestId,\n}: AutoResizeTextareaProps): JSX.Element {\n const [value, setValue] = useState(propsValue);\n const [isPastedChange, setIsPastedChange] = useState(false);\n const element = useRef<HTMLTextAreaElement>(null);\n const isFocused = useRef(false);\n const valueRef = useRef(value);\n valueRef.current = value;\n\n useEffect(\n function syncStateWithProp() {\n if (!isFocused.current || !delimiter) {\n // When not focused (or no delimiter), always sync to the new prop value.\n setValue(propsValue);\n } else if (implode(valueRef.current) !== implode(propsValue)) {\n // When focused with delimiter, only update if the imploded value changed to prevent clobbering delimiters\n setValue(explode(propsValue, delimiter));\n }\n },\n [propsValue, delimiter]\n );\n\n function reCalculateLayout(): void {\n if (!element.current) {\n return;\n }\n element.current.style.height = '0'; // shrink component to get scrollHeight\n const resizedHeight =\n element.current.scrollHeight +\n (element.current.offsetHeight - element.current.clientHeight);\n // accounts for border, padding is captured by scroll height\n if (resizedHeight > 0) element.current.style.height = `${resizedHeight}px`;\n }\n\n function handleChange(event: React.ChangeEvent<HTMLTextAreaElement>): void {\n let newValue = event.target.value;\n if (isPastedChange) {\n if (delimiter) newValue = explode(newValue, delimiter);\n setIsPastedChange(false);\n }\n setValue(newValue);\n // If there is a delimiter, the onChange value should always be the imploded version\n // to prevent mismatch when exiting without triggering onBlur\n // The exploded version is display only\n onChange(delimiter ? implode(newValue) : newValue);\n }\n\n function handleFocus(): void {\n if (!element.current) {\n return;\n }\n isFocused.current = true;\n if (delimiter) {\n setValue(explode(value, delimiter));\n reCalculateLayout();\n }\n element.current.scrollLeft = 0;\n // scroll left as it can be disorienting if you click on a long line\n }\n\n // make it explode when dragging the resize handle\n // by making it trigger focus (which normally doesn't\n // trigger when just resizing).\n function handleMouseDown(): void {\n if (!element.current) return;\n if (document.activeElement === element.current) return;\n element.current.focus();\n }\n\n function handleBlur(): void {\n isFocused.current = false;\n if (delimiter) {\n setValue(implode(value));\n onChange(implode(value));\n }\n }\n\n function handlePaste(): void {\n setIsPastedChange(true);\n }\n\n useEffect(\n function reCalculate() {\n reCalculateLayout();\n },\n [value]\n );\n\n return (\n <textarea\n ref={element}\n id={id}\n className={classNames(className, 'auto-resize-textarea form-control')}\n placeholder={placeholder}\n value={value}\n rows={1}\n onChange={handleChange}\n onFocus={handleFocus}\n onMouseDown={handleMouseDown}\n onBlur={handleBlur}\n onPaste={handlePaste}\n spellCheck={spellCheck}\n disabled={disabled}\n data-testid={dataTestId}\n />\n );\n}\n\nexport default AutoResizeTextarea;\n"],"mappings":"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","ignoreList":[]}
@@ -17,21 +17,23 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
17
17
  * @param discardButtonText optional text for the discard button, defaults to 'Discard'
18
18
  */
19
19
  function BasicModal(props) {
20
- var {
21
- isOpen,
22
- headerText,
23
- bodyText,
24
- onCancel,
25
- onConfirm,
26
- onDiscard,
27
- onModalDisable,
28
- cancelButtonText = 'Cancel',
29
- confirmButtonText = 'Okay',
30
- discardButtonText = 'Discard',
31
- isConfirmDanger = false,
32
- children,
33
- 'data-testid': dataTestId
34
- } = props;
20
+ var isOpen = props.isOpen,
21
+ headerText = props.headerText,
22
+ bodyText = props.bodyText,
23
+ onCancel = props.onCancel,
24
+ onConfirm = props.onConfirm,
25
+ onDiscard = props.onDiscard,
26
+ onModalDisable = props.onModalDisable,
27
+ _props$cancelButtonTe = props.cancelButtonText,
28
+ cancelButtonText = _props$cancelButtonTe === void 0 ? 'Cancel' : _props$cancelButtonTe,
29
+ _props$confirmButtonT = props.confirmButtonText,
30
+ confirmButtonText = _props$confirmButtonT === void 0 ? 'Okay' : _props$confirmButtonT,
31
+ _props$discardButtonT = props.discardButtonText,
32
+ discardButtonText = _props$discardButtonT === void 0 ? 'Discard' : _props$discardButtonT,
33
+ _props$isConfirmDange = props.isConfirmDanger,
34
+ isConfirmDanger = _props$isConfirmDange === void 0 ? false : _props$isConfirmDange,
35
+ children = props.children,
36
+ dataTestId = props['data-testid'];
35
37
  var confirmButton = useRef(null);
36
38
  var disableModalCheckbox = useRef(null);
37
39
  var onConfirmClicked = useCallback(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"BasicModal.js","names":["React","useRef","useCallback","SplitButtonGroup","Button","Modal","ModalBody","ModalFooter","ModalHeader","jsx","_jsx","jsxs","_jsxs","BasicModal","props","isOpen","headerText","bodyText","onCancel","onConfirm","onDiscard","onModalDisable","cancelButtonText","confirmButtonText","discardButtonText","isConfirmDanger","children","dataTestId","confirmButton","disableModalCheckbox","onConfirmClicked","current","checked","onOpened","_confirmButton$curren","focus","modalBody","closeButton","className","type","id","defaultChecked","ref","undefined","concat","htmlFor","kind","onClick"],"sources":["../src/BasicModal.tsx"],"sourcesContent":["import React, { useRef, useCallback } from 'react';\nimport { SplitButtonGroup } from './SplitButtonGroup';\nimport Button from './Button';\nimport { Modal, ModalBody, ModalFooter, ModalHeader } from './modal';\n\nexport interface BasicModalProps {\n isOpen: boolean;\n headerText: string;\n bodyText: string | (() => string);\n onCancel?: () => void;\n onConfirm: () => void;\n onDiscard?: () => void;\n onModalDisable?: () => void;\n cancelButtonText?: string;\n confirmButtonText?: string;\n discardButtonText?: string;\n isConfirmDanger?: boolean;\n children?: React.ReactNode;\n 'data-testid'?: string;\n}\n\n/**\n * A basic modal dialog with two buttons: cancel / confirm.\n *\n * @param isOpen indicates if the modal dialog is open\n * @param headerText text displayed in the modal header\n * @param bodyText text displayed in the modal body\n * @param onCancel callback for the cancel button; if not provided, button not shown\n * @param onConfirm callback for the confirm button\n * @param onDiscard callback for the discard button; if not provided, button not shown\n * @param cancelButtonText optional text for the cancel button, defaults to 'Cancel'\n * @param confirmButtonText optional text for the confirm button, defaults to 'Okay'\n * @param discardButtonText optional text for the discard button, defaults to 'Discard'\n */\nfunction BasicModal(props: BasicModalProps): JSX.Element {\n const {\n isOpen,\n headerText,\n bodyText,\n onCancel,\n onConfirm,\n onDiscard,\n onModalDisable,\n cancelButtonText = 'Cancel',\n confirmButtonText = 'Okay',\n discardButtonText = 'Discard',\n isConfirmDanger = false,\n children,\n 'data-testid': dataTestId,\n } = props;\n\n const confirmButton = useRef<HTMLButtonElement>(null);\n\n const disableModalCheckbox = useRef<HTMLInputElement>(null);\n\n const onConfirmClicked = useCallback(() => {\n if (\n disableModalCheckbox.current !== null &&\n disableModalCheckbox.current.checked &&\n onModalDisable\n ) {\n onModalDisable();\n }\n onConfirm();\n }, [onConfirm, onModalDisable]);\n\n const onOpened = useCallback(() => {\n confirmButton.current?.focus();\n }, []);\n\n let modalBody = '';\n if (isOpen) {\n modalBody = typeof bodyText === 'function' ? bodyText() : bodyText;\n }\n\n return (\n <Modal isOpen={isOpen} onOpened={onOpened}>\n <ModalHeader closeButton={false}>{headerText}</ModalHeader>\n <ModalBody>{modalBody}</ModalBody>\n <ModalFooter>\n {onModalDisable && (\n <div className=\"custom-control custom-checkbox form-group mr-auto\">\n <input\n type=\"checkbox\"\n className=\"custom-control-input\"\n id=\"move-confirmation-checkbox\"\n defaultChecked={false}\n ref={disableModalCheckbox}\n data-testid={\n dataTestId !== undefined\n ? `${dataTestId}-checkbox-confirm`\n : undefined\n }\n />\n <label\n className=\"custom-control-label\"\n htmlFor=\"move-confirmation-checkbox\"\n >\n Don&#39;t ask me again\n </label>\n </div>\n )}\n {onDiscard && (\n <Button\n kind=\"secondary\"\n className=\"mr-auto\"\n data-dismiss=\"modal\"\n onClick={onDiscard}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-btn-discard` : undefined\n }\n >\n {discardButtonText}\n </Button>\n )}\n {onCancel && (\n <Button\n kind=\"secondary\"\n data-dismiss=\"modal\"\n onClick={onCancel}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-btn-cancel` : undefined\n }\n >\n {cancelButtonText}\n </Button>\n )}\n <SplitButtonGroup>\n <Button\n kind={isConfirmDanger ? 'danger' : 'primary'}\n onClick={onConfirmClicked}\n ref={confirmButton}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-btn-confirm` : undefined\n }\n >\n {confirmButtonText}\n </Button>\n {children}\n </SplitButtonGroup>\n </ModalFooter>\n </Modal>\n );\n}\n\nexport default BasicModal;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"BasicModal.js","names":["React","useRef","useCallback","SplitButtonGroup","Button","Modal","ModalBody","ModalFooter","ModalHeader","jsx","_jsx","jsxs","_jsxs","BasicModal","props","isOpen","headerText","bodyText","onCancel","onConfirm","onDiscard","onModalDisable","_props$cancelButtonTe","cancelButtonText","_props$confirmButtonT","confirmButtonText","_props$discardButtonT","discardButtonText","_props$isConfirmDange","isConfirmDanger","children","dataTestId","confirmButton","disableModalCheckbox","onConfirmClicked","current","checked","onOpened","_confirmButton$curren","focus","modalBody","closeButton","className","type","id","defaultChecked","ref","undefined","concat","htmlFor","kind","onClick"],"sources":["../src/BasicModal.tsx"],"sourcesContent":["import React, { useRef, useCallback } from 'react';\nimport { SplitButtonGroup } from './SplitButtonGroup';\nimport Button from './Button';\nimport { Modal, ModalBody, ModalFooter, ModalHeader } from './modal';\n\nexport interface BasicModalProps {\n isOpen: boolean;\n headerText: string;\n bodyText: string | (() => string);\n onCancel?: () => void;\n onConfirm: () => void;\n onDiscard?: () => void;\n onModalDisable?: () => void;\n cancelButtonText?: string;\n confirmButtonText?: string;\n discardButtonText?: string;\n isConfirmDanger?: boolean;\n children?: React.ReactNode;\n 'data-testid'?: string;\n}\n\n/**\n * A basic modal dialog with two buttons: cancel / confirm.\n *\n * @param isOpen indicates if the modal dialog is open\n * @param headerText text displayed in the modal header\n * @param bodyText text displayed in the modal body\n * @param onCancel callback for the cancel button; if not provided, button not shown\n * @param onConfirm callback for the confirm button\n * @param onDiscard callback for the discard button; if not provided, button not shown\n * @param cancelButtonText optional text for the cancel button, defaults to 'Cancel'\n * @param confirmButtonText optional text for the confirm button, defaults to 'Okay'\n * @param discardButtonText optional text for the discard button, defaults to 'Discard'\n */\nfunction BasicModal(props: BasicModalProps): JSX.Element {\n const {\n isOpen,\n headerText,\n bodyText,\n onCancel,\n onConfirm,\n onDiscard,\n onModalDisable,\n cancelButtonText = 'Cancel',\n confirmButtonText = 'Okay',\n discardButtonText = 'Discard',\n isConfirmDanger = false,\n children,\n 'data-testid': dataTestId,\n } = props;\n\n const confirmButton = useRef<HTMLButtonElement>(null);\n\n const disableModalCheckbox = useRef<HTMLInputElement>(null);\n\n const onConfirmClicked = useCallback(() => {\n if (\n disableModalCheckbox.current !== null &&\n disableModalCheckbox.current.checked &&\n onModalDisable\n ) {\n onModalDisable();\n }\n onConfirm();\n }, [onConfirm, onModalDisable]);\n\n const onOpened = useCallback(() => {\n confirmButton.current?.focus();\n }, []);\n\n let modalBody = '';\n if (isOpen) {\n modalBody = typeof bodyText === 'function' ? bodyText() : bodyText;\n }\n\n return (\n <Modal isOpen={isOpen} onOpened={onOpened}>\n <ModalHeader closeButton={false}>{headerText}</ModalHeader>\n <ModalBody>{modalBody}</ModalBody>\n <ModalFooter>\n {onModalDisable && (\n <div className=\"custom-control custom-checkbox form-group mr-auto\">\n <input\n type=\"checkbox\"\n className=\"custom-control-input\"\n id=\"move-confirmation-checkbox\"\n defaultChecked={false}\n ref={disableModalCheckbox}\n data-testid={\n dataTestId !== undefined\n ? `${dataTestId}-checkbox-confirm`\n : undefined\n }\n />\n <label\n className=\"custom-control-label\"\n htmlFor=\"move-confirmation-checkbox\"\n >\n Don&#39;t ask me again\n </label>\n </div>\n )}\n {onDiscard && (\n <Button\n kind=\"secondary\"\n className=\"mr-auto\"\n data-dismiss=\"modal\"\n onClick={onDiscard}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-btn-discard` : undefined\n }\n >\n {discardButtonText}\n </Button>\n )}\n {onCancel && (\n <Button\n kind=\"secondary\"\n data-dismiss=\"modal\"\n onClick={onCancel}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-btn-cancel` : undefined\n }\n >\n {cancelButtonText}\n </Button>\n )}\n <SplitButtonGroup>\n <Button\n kind={isConfirmDanger ? 'danger' : 'primary'}\n onClick={onConfirmClicked}\n ref={confirmButton}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-btn-confirm` : undefined\n }\n >\n {confirmButtonText}\n </Button>\n {children}\n </SplitButtonGroup>\n </ModalFooter>\n </Modal>\n );\n}\n\nexport default BasicModal;\n"],"mappings":"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","ignoreList":[]}
@@ -11,11 +11,9 @@ import commonStyles from "./SpectrumComponent.module.css"; // The action bar wil
11
11
  import { jsx as _jsx } from "react/jsx-runtime";
12
12
  var noActions = [];
13
13
  export function BulkActionBar(_ref) {
14
- var {
15
- styleProps,
16
- selectedItemCount,
17
- onClearSelection
18
- } = _ref;
14
+ var styleProps = _ref.styleProps,
15
+ selectedItemCount = _ref.selectedItemCount,
16
+ onClearSelection = _ref.onClearSelection;
19
17
  return /*#__PURE__*/_jsx(ActionBar, _objectSpread(_objectSpread({
20
18
  UNSAFE_className: commonStyles.spectrumActionBar
21
19
  // eslint-disable-next-line react/jsx-props-no-spreading
@@ -1 +1 @@
1
- {"version":3,"file":"BulkActionBar.js","names":["ActionBar","commonStyles","jsx","_jsx","noActions","BulkActionBar","_ref","styleProps","selectedItemCount","onClearSelection","_objectSpread","UNSAFE_className","spectrumActionBar","isEmphasized","children"],"sources":["../src/BulkActionBar.tsx"],"sourcesContent":["import type { ItemElement, StyleProps } from '@react-types/shared';\nimport { ActionBar } from './spectrum';\nimport commonStyles from './SpectrumComponent.module.scss';\n\n// The action bar will still show the item count + a clear selection button\n// even if there are no actions. Our only consumer is currently the ACL Editor,\n// but group action functionality has not yet been prioritized (see DH-15221).\n// For now we'll just pass it an empty action items array.\nconst noActions: ItemElement<unknown>[] = [];\n\nexport interface BulkActionBarProps {\n styleProps?: StyleProps;\n selectedItemCount: 'all' | number;\n onClearSelection: () => void;\n}\n\nexport function BulkActionBar({\n styleProps,\n selectedItemCount,\n onClearSelection,\n}: BulkActionBarProps): JSX.Element {\n return (\n <ActionBar\n UNSAFE_className={commonStyles.spectrumActionBar}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...styleProps}\n isEmphasized\n selectedItemCount={selectedItemCount}\n onClearSelection={onClearSelection}\n >\n {noActions}\n </ActionBar>\n );\n}\n\nexport default BulkActionBar;\n"],"mappings":";;;;;SACSA,SAAS;AAAA,OACXC,YAAY,wCAEnB;AACA;AACA;AACA;AAAA,SAAAC,GAAA,IAAAC,IAAA;AACA,IAAMC,SAAiC,GAAG,EAAE;AAQ5C,OAAO,SAASC,aAAaA,CAAAC,IAAA,EAIO;EAAA,IAJN;IAC5BC,UAAU;IACVC,iBAAiB;IACjBC;EACkB,CAAC,GAAAH,IAAA;EACnB,oBACEH,IAAA,CAACH,SAAS,EAAAU,aAAA,CAAAA,aAAA;IACRC,gBAAgB,EAAEV,YAAY,CAACW;IAC/B;EAAA,GACIL,UAAU;IACdM,YAAY;IACZL,iBAAiB,EAAEA,iBAAkB;IACrCC,gBAAgB,EAAEA,gBAAiB;IAAAK,QAAA,EAElCV;EAAS,EACD,CAAC;AAEhB;AAEA,eAAeC,aAAa","ignoreList":[]}
1
+ {"version":3,"file":"BulkActionBar.js","names":["ActionBar","commonStyles","jsx","_jsx","noActions","BulkActionBar","_ref","styleProps","selectedItemCount","onClearSelection","_objectSpread","UNSAFE_className","spectrumActionBar","isEmphasized","children"],"sources":["../src/BulkActionBar.tsx"],"sourcesContent":["import type { ItemElement, StyleProps } from '@react-types/shared';\nimport { ActionBar } from './spectrum';\nimport commonStyles from './SpectrumComponent.module.scss';\n\n// The action bar will still show the item count + a clear selection button\n// even if there are no actions. Our only consumer is currently the ACL Editor,\n// but group action functionality has not yet been prioritized (see DH-15221).\n// For now we'll just pass it an empty action items array.\nconst noActions: ItemElement<unknown>[] = [];\n\nexport interface BulkActionBarProps {\n styleProps?: StyleProps;\n selectedItemCount: 'all' | number;\n onClearSelection: () => void;\n}\n\nexport function BulkActionBar({\n styleProps,\n selectedItemCount,\n onClearSelection,\n}: BulkActionBarProps): JSX.Element {\n return (\n <ActionBar\n UNSAFE_className={commonStyles.spectrumActionBar}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...styleProps}\n isEmphasized\n selectedItemCount={selectedItemCount}\n onClearSelection={onClearSelection}\n >\n {noActions}\n </ActionBar>\n );\n}\n\nexport default BulkActionBar;\n"],"mappings":";;;;;SACSA,SAAS;AAAA,OACXC,YAAY,wCAEnB;AACA;AACA;AACA;AAAA,SAAAC,GAAA,IAAAC,IAAA;AACA,IAAMC,SAAiC,GAAG,EAAE;AAQ5C,OAAO,SAASC,aAAaA,CAAAC,IAAA,EAIO;EAAA,IAHlCC,UAAU,GAAAD,IAAA,CAAVC,UAAU;IACVC,iBAAiB,GAAAF,IAAA,CAAjBE,iBAAiB;IACjBC,gBAAgB,GAAAH,IAAA,CAAhBG,gBAAgB;EAEhB,oBACEN,IAAA,CAACH,SAAS,EAAAU,aAAA,CAAAA,aAAA;IACRC,gBAAgB,EAAEV,YAAY,CAACW;IAC/B;EAAA,GACIL,UAAU;IACdM,YAAY;IACZL,iBAAiB,EAAEA,iBAAkB;IACrCC,gBAAgB,EAAEA,gBAAiB;IAAAK,QAAA,EAElCV;EAAS,EACD,CAAC;AAEhB;AAEA,eAAeC,aAAa","ignoreList":[]}