@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
@@ -30,23 +30,28 @@ var FIXED_WIDTH_SPACE = '\u2007';
30
30
  // https://github.com/yannickcr/eslint-plugin-react/issues/2269
31
31
  // eslint-disable-next-line react/display-name
32
32
  var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
33
- var {
34
- className,
35
- example,
36
- getNextSegmentValue = (range, delta, segmentValue) => segmentValue,
37
- getPreferredReplacementString = DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,
38
- normalizePastedText = text => text,
39
- onChange = () => false,
40
- onSelect = () => false,
41
- onSubmit,
42
- pattern,
43
- placeholder,
44
- selection,
45
- value,
46
- onFocus = () => false,
47
- onBlur = () => false,
48
- 'data-testid': dataTestId
49
- } = props;
33
+ var className = props.className,
34
+ example = props.example,
35
+ _props$getNextSegment = props.getNextSegmentValue,
36
+ getNextSegmentValue = _props$getNextSegment === void 0 ? (range, delta, segmentValue) => segmentValue : _props$getNextSegment,
37
+ _props$getPreferredRe = props.getPreferredReplacementString,
38
+ getPreferredReplacementString = _props$getPreferredRe === void 0 ? DEFAULT_GET_PREFERRED_REPLACEMENT_STRING : _props$getPreferredRe,
39
+ _props$normalizePaste = props.normalizePastedText,
40
+ normalizePastedText = _props$normalizePaste === void 0 ? text => text : _props$normalizePaste,
41
+ _props$onChange = props.onChange,
42
+ onChange = _props$onChange === void 0 ? () => false : _props$onChange,
43
+ _props$onSelect = props.onSelect,
44
+ onSelect = _props$onSelect === void 0 ? () => false : _props$onSelect,
45
+ onSubmit = props.onSubmit,
46
+ pattern = props.pattern,
47
+ placeholder = props.placeholder,
48
+ selection = props.selection,
49
+ value = props.value,
50
+ _props$onFocus = props.onFocus,
51
+ onFocus = _props$onFocus === void 0 ? () => false : _props$onFocus,
52
+ _props$onBlur = props.onBlur,
53
+ onBlur = _props$onBlur === void 0 ? () => false : _props$onBlur,
54
+ dataTestId = props['data-testid'];
50
55
  var input = useForwardedRef(ref);
51
56
  var examples = useMemo(() => Array.isArray(example) ? example : [example], [example]);
52
57
  var emptyMask = useMemo(() => examples[0].replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE), [examples]);
@@ -54,11 +59,9 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
54
59
  if (selection != null) {
55
60
  var _input$current;
56
61
  log.debug('setting selection...', selection);
57
- var {
58
- selectionStart,
59
- selectionEnd,
60
- selectionDirection
61
- } = selection;
62
+ var selectionStart = selection.selectionStart,
63
+ selectionEnd = selection.selectionEnd,
64
+ selectionDirection = selection.selectionDirection;
62
65
  (_input$current = input.current) === null || _input$current === void 0 || _input$current.setSelectionRange(selectionStart, selectionEnd, selectionDirection);
63
66
  log.debug('selection set!');
64
67
  }
@@ -172,11 +175,13 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
172
175
  }
173
176
  }
174
177
  var handleSelect = useCallback(event => {
175
- var {
176
- selectionStart = 0,
177
- selectionEnd = 0,
178
- selectionDirection = 'none'
179
- } = event.target;
178
+ var _ref = event.target,
179
+ _ref$selectionStart = _ref.selectionStart,
180
+ selectionStart = _ref$selectionStart === void 0 ? 0 : _ref$selectionStart,
181
+ _ref$selectionEnd = _ref.selectionEnd,
182
+ selectionEnd = _ref$selectionEnd === void 0 ? 0 : _ref$selectionEnd,
183
+ _ref$selectionDirecti = _ref.selectionDirection,
184
+ selectionDirection = _ref$selectionDirecti === void 0 ? 'none' : _ref$selectionDirecti;
180
185
  if (selectionStart === null || selectionEnd === null || selectionDirection === null) {
181
186
  log.error('Selection attempted on non-text input element', event.target);
182
187
  return;
@@ -223,13 +228,12 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
223
228
  if (!input.current) {
224
229
  return;
225
230
  }
226
- var {
227
- key
228
- } = event;
229
- var {
230
- selectionStart = 0,
231
- selectionEnd = 0
232
- } = input.current;
231
+ var key = event.key;
232
+ var _input$current2 = input.current,
233
+ _input$current2$selec = _input$current2.selectionStart,
234
+ selectionStart = _input$current2$selec === void 0 ? 0 : _input$current2$selec,
235
+ _input$current2$selec2 = _input$current2.selectionEnd,
236
+ selectionEnd = _input$current2$selec2 === void 0 ? 0 : _input$current2$selec2;
233
237
  if (selectionStart === null || selectionEnd === null) {
234
238
  log.error('Selection arrow nvaigation attempted on non-text input element', event.target);
235
239
  return;
@@ -276,13 +280,12 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
276
280
  return;
277
281
  }
278
282
  log.debug('handleKeyDown', event);
279
- var {
280
- key
281
- } = event;
282
- var {
283
- selectionStart = 0,
284
- selectionEnd = 0
285
- } = input.current;
283
+ var key = event.key;
284
+ var _input$current3 = input.current,
285
+ _input$current3$selec = _input$current3.selectionStart,
286
+ selectionStart = _input$current3$selec === void 0 ? 0 : _input$current3$selec,
287
+ _input$current3$selec2 = _input$current3.selectionEnd,
288
+ selectionEnd = _input$current3$selec2 === void 0 ? 0 : _input$current3$selec2;
286
289
  if (selectionStart === null || selectionEnd === null) {
287
290
  log.error('Selection key event on non-text input element', event.target);
288
291
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"MaskedInput.js","names":["React","useMemo","useEffect","useCallback","classNames","Log","useForwardedRef","DEFAULT_GET_PREFERRED_REPLACEMENT_STRING","fillToLength","trimTrailingMask","jsx","_jsx","log","module","SELECTION_DIRECTION","FORWARD","BACKWARD","NONE","FIXED_WIDTH_SPACE","MaskedInput","forwardRef","props","ref","className","example","getNextSegmentValue","range","delta","segmentValue","getPreferredReplacementString","normalizePastedText","text","onChange","onSelect","onSubmit","pattern","placeholder","selection","value","onFocus","onBlur","dataTestId","input","examples","Array","isArray","emptyMask","replace","setSelectedSegment","_input$current","debug","selectionStart","selectionEnd","selectionDirection","current","setSelectionRange","getSegment","cursorPosition","testValue","length","i","test","charAt","fillValue","checkValue","exampleValue","arguments","undefined","filledValue","concat","substring","isValid","patternRegex","RegExp","nextSegment","position","currentSegment","nextPosition","previousSegment","previousPosition","nextSegmentValue","segment","newSegmentValue","newValue","handleSelect","event","target","error","debug2","nativeEvent","type","_objectSpread","newSelection","handleSelectCapture","_input$current$select","preventDefault","stopPropagation","handleArrowKey","key","handlePaste","pastedText","clipboardData","getData","normalizedText","handleKeyDown","startsWith","trimmedValue","altKey","metaKey","ctrlKey","newChars","from","Set","toUpperCase","toLowerCase","newChar","maxReplaceIndex","replaceIndex","newSelectionStart","nextSegmentSelection","onKeyDown","onPaste","onSelectCapture"],"sources":["../src/MaskedInput.tsx"],"sourcesContent":["import React, {\n useMemo,\n useEffect,\n useCallback,\n type KeyboardEvent,\n} from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport { useForwardedRef } from '@deephaven/react-hooks';\nimport {\n DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,\n fillToLength,\n trimTrailingMask,\n} from './MaskedInputUtils';\nimport './MaskedInput.scss';\n\nconst log = Log.module('MaskedInput');\n\nconst SELECTION_DIRECTION = {\n FORWARD: 'forward',\n BACKWARD: 'backward',\n NONE: 'none',\n} as const;\n\n/**\n * Special space character that's the same size as tabular numbers\n * https://www.fileformat.info/info/unicode/char/2007/index.htm\n */\nconst FIXED_WIDTH_SPACE = '\\u2007';\n\nexport type SelectionSegment = {\n selectionStart: number;\n selectionEnd: number;\n selectionDirection?: (typeof SELECTION_DIRECTION)[keyof typeof SELECTION_DIRECTION];\n};\n\ntype MaskedInputProps = {\n /** An extra class name to add to the component */\n className?: string;\n /** The regex pattern this masked input must match */\n pattern: string;\n /** Input placeholder */\n placeholder?: string;\n /** The current value to display */\n value: string;\n /** One or more examples of valid values. Used when deciding if next keystroke is valid (as rest of the current value may be incomplete) */\n example: string | string[];\n /** The current selection to use for the input */\n selection?: SelectionSegment;\n /** Called when the value changes. Note the value may still be incomplete. */\n onChange?: (value: string) => void;\n /** Called when selection changes */\n onSelect?: (segment: SelectionSegment) => void;\n /** Called when enter is pressed */\n onSubmit?: (event: KeyboardEvent<HTMLInputElement>) => void;\n /** Retrieve the next value for a provided segment */\n getNextSegmentValue?: (\n segment: SelectionSegment,\n delta: number,\n segmentValue: string,\n value: string\n ) => string;\n getPreferredReplacementString?: (\n value: string,\n replaceIndex: number,\n replaceChar: string,\n selectionStart: number,\n selectionEnd: number\n ) => string;\n /** Normalize pasted text before validation. Defaults to returning text unchanged. */\n normalizePastedText?: (text: string) => string;\n onFocus?: React.FocusEventHandler;\n onBlur?: React.FocusEventHandler;\n\n 'data-testid'?: string;\n};\n\n/**\n * A masked input for entering data from a template.\n * Won't work by itself, must use within another component and handle updating the value/selection.\n */\n// Forward ref causes a false positive for display-name in eslint:\n// https://github.com/yannickcr/eslint-plugin-react/issues/2269\n// eslint-disable-next-line react/display-name\nconst MaskedInput = React.forwardRef<HTMLInputElement, MaskedInputProps>(\n (props: MaskedInputProps, ref) => {\n const {\n className,\n example,\n getNextSegmentValue = (range, delta, segmentValue) => segmentValue,\n getPreferredReplacementString = DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,\n normalizePastedText = (text: string) => text,\n onChange = () => false,\n onSelect = () => false,\n onSubmit,\n pattern,\n placeholder,\n selection,\n value,\n onFocus = () => false,\n onBlur = () => false,\n 'data-testid': dataTestId,\n } = props;\n const input = useForwardedRef(ref);\n const examples = useMemo(\n () => (Array.isArray(example) ? example : [example]),\n [example]\n );\n const emptyMask = useMemo(\n () => examples[0].replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE),\n [examples]\n );\n\n useEffect(\n function setSelectedSegment() {\n if (selection != null) {\n log.debug('setting selection...', selection);\n const { selectionStart, selectionEnd, selectionDirection } =\n selection;\n input.current?.setSelectionRange(\n selectionStart,\n selectionEnd,\n selectionDirection\n );\n log.debug('selection set!');\n }\n },\n [selection, input]\n );\n\n /**\n * Returns the selection range for the segment at the given cursor position\n * @param cursorPosition The current position of the cursor\n */\n const getSegment = useCallback(\n (cursorPosition: number) => {\n let selectionStart = cursorPosition;\n let selectionEnd = cursorPosition;\n const testValue = examples.length > 0 ? examples[0] : value;\n\n for (let i = selectionStart - 1; i >= 0; i -= 1) {\n if (!/[a-zA-Z0-9]/g.test(testValue.charAt(i))) {\n break;\n }\n\n selectionStart = i;\n }\n\n for (let i = selectionEnd; i < testValue.length; i += 1) {\n if (!/[a-zA-Z0-9]/g.test(testValue.charAt(i))) {\n break;\n }\n\n selectionEnd = i + 1;\n }\n\n const selectionDirection =\n selectionStart === selectionEnd\n ? SELECTION_DIRECTION.NONE\n : SELECTION_DIRECTION.BACKWARD;\n\n return {\n selectionStart,\n selectionEnd,\n selectionDirection,\n };\n },\n [examples, value]\n );\n\n /**\n * Replaces all blank spaces and everything after the current cursor position with the example value\n * @param checkValue The value to check/fill in\n * @param exampleValue The example to fill in the value from\n * @param cursorPosition The cursor position\n * @returns The filled in value\n */\n function fillValue(\n checkValue: string,\n exampleValue: string,\n cursorPosition = checkValue.length\n ): string {\n let filledValue = '';\n for (let i = 0; i < cursorPosition; i += 1) {\n if (checkValue.charAt(i) !== FIXED_WIDTH_SPACE) {\n filledValue = filledValue.concat(checkValue[i]);\n } else {\n filledValue = filledValue.concat(exampleValue[i]);\n }\n }\n filledValue = filledValue.concat(exampleValue.substring(cursorPosition));\n\n return filledValue;\n }\n\n /**\n * Checks if a given `value` is valid up until the `cursorPosition`.\n * Uses the examples to build the rest of the string\n * @param checkValue The value to check validity of\n * @param cursorPosition The position of the cursor to check up to\n */\n const isValid = useCallback(\n (checkValue: string, cursorPosition = checkValue.length): boolean => {\n const patternRegex = new RegExp(`^${pattern}$`);\n if (patternRegex.test(checkValue)) {\n return true;\n }\n\n for (let i = 0; i < examples.length; i += 1) {\n const filledValue = fillValue(\n checkValue,\n examples[i],\n cursorPosition\n );\n if (patternRegex.test(filledValue)) {\n return true;\n }\n }\n return false;\n },\n [pattern, examples]\n );\n\n /**\n * Returns the next segment after the given position\n * @param position The cursor position to start at\n * @returns The new selection range\n */\n function nextSegment(position: number): SelectionSegment {\n const currentSegment = getSegment(position);\n const nextPosition = currentSegment.selectionEnd + 1;\n if (nextPosition >= value.length) {\n return currentSegment;\n }\n\n return getSegment(nextPosition);\n }\n\n /**\n * Returns the previous segment before the given position\n * @param position The cursor position to start at\n * @returns The new selection range\n */\n function previousSegment(position: number): SelectionSegment {\n const currentSegment = getSegment(position);\n const previousPosition = currentSegment.selectionStart - 1;\n if (previousPosition <= 0) {\n return currentSegment;\n }\n\n return getSegment(previousPosition);\n }\n\n function nextSegmentValue(position: number, delta: number): void {\n const segment = getSegment(position);\n const segmentValue = value.substring(\n segment.selectionStart,\n segment.selectionEnd\n );\n const newSegmentValue = getNextSegmentValue(\n segment,\n delta,\n segmentValue,\n value\n );\n const newValue =\n value.substring(0, segment.selectionStart) +\n newSegmentValue +\n value.substring(segment.selectionEnd);\n if (isValid(newValue, segment.selectionEnd)) {\n onChange(newValue);\n onSelect(segment);\n }\n }\n\n const handleSelect = useCallback(\n (event: React.UIEvent<HTMLInputElement>) => {\n const {\n selectionStart = 0,\n selectionEnd = 0,\n selectionDirection = 'none',\n } = event.target as HTMLInputElement;\n\n if (\n selectionStart === null ||\n selectionEnd === null ||\n selectionDirection === null\n ) {\n log.error(\n 'Selection attempted on non-text input element',\n event.target\n );\n return;\n }\n\n log.debug2(\n 'handleSelect',\n selectionStart,\n selectionEnd,\n selectionDirection\n );\n if (\n selection != null &&\n selectionStart === selection.selectionStart &&\n selectionEnd === selection.selectionEnd\n ) {\n return;\n }\n if (\n selection != null &&\n selectionStart === value.length &&\n selectionEnd === value.length &&\n event.nativeEvent.type !== 'mouseup'\n ) {\n // React triggers onSelect event with the cursor at the end of the input content\n // when the component is rendered at a different location in the DOM,\n // i.e. when start/end times switch places in the TimeSlider.\n // Ignore this event and reset the selection to its previous state.\n onSelect({ ...selection });\n return;\n }\n if (selectionStart === selectionEnd) {\n const newSelection = getSegment(selectionStart);\n log.debug(\n 'Selection segment from ',\n selectionStart,\n selectionEnd,\n '=>',\n newSelection\n );\n onSelect(newSelection);\n } else {\n onSelect({ selectionStart, selectionEnd, selectionDirection });\n }\n },\n [getSegment, onSelect, selection, value]\n );\n\n const handleSelectCapture = useCallback(\n (event: React.UIEvent<HTMLInputElement>) => {\n if (!input.current) {\n return;\n }\n log.debug('handleSelectCapture', event);\n const selectionStart = input.current.selectionStart ?? 0;\n if (\n selectionStart === value.length &&\n selection != null &&\n selectionStart !== selection.selectionStart\n ) {\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [input, selection, value]\n );\n\n function handleArrowKey(\n event: React.KeyboardEvent<HTMLInputElement>\n ): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (!input.current) {\n return;\n }\n\n const { key } = event;\n const { selectionStart = 0, selectionEnd = 0 } = input.current;\n if (selectionStart === null || selectionEnd === null) {\n log.error(\n 'Selection arrow nvaigation attempted on non-text input element',\n event.target\n );\n return;\n }\n\n if (key === 'ArrowLeft') {\n onSelect(previousSegment(selectionStart));\n } else if (key === 'ArrowRight') {\n onSelect(nextSegment(selectionEnd));\n } else if (key === 'ArrowUp') {\n nextSegmentValue(selectionStart, -1);\n } else if (key === 'ArrowDown') {\n nextSegmentValue(selectionStart, 1);\n }\n }\n\n /**\n * Handles paste events into the input\n * @param event The paste event\n */\n const handlePaste = useCallback(\n (event: React.ClipboardEvent<HTMLInputElement>): void => {\n event.preventDefault();\n event.stopPropagation();\n\n if (!input.current) {\n return;\n }\n\n const pastedText = event.clipboardData.getData('text/plain');\n\n log.debug('handlePaste', pastedText);\n\n // Normalize the pasted text\n const normalizedText = normalizePastedText(pastedText);\n\n // Check if the pasted value is valid\n if (isValid(normalizedText, normalizedText.length)) {\n onChange(normalizedText);\n onSelect({\n selectionStart: normalizedText.length,\n selectionEnd: normalizedText.length,\n selectionDirection: SELECTION_DIRECTION.NONE,\n });\n }\n },\n [input, onChange, onSelect, isValid, normalizePastedText]\n );\n\n function handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>): void {\n if (!input.current) {\n return;\n }\n log.debug('handleKeyDown', event);\n const { key } = event;\n const { selectionStart = 0, selectionEnd = 0 } = input.current;\n if (selectionStart === null || selectionEnd === null) {\n log.error(\n 'Selection key event on non-text input element',\n event.target\n );\n return;\n }\n if (key === 'Enter') {\n onSubmit?.(event);\n return;\n }\n if (key.startsWith('Arrow')) {\n handleArrowKey(event);\n return;\n }\n\n if (key === 'Delete' || key === 'Backspace') {\n event.preventDefault();\n event.stopPropagation();\n\n // Deleting at the end of the value\n if (selectionEnd >= trimTrailingMask(value, emptyMask).length) {\n const newValue = value.substring(\n 0,\n // Delete whole selection or just the char before the cursor\n selectionStart === selectionEnd\n ? selectionStart - 1\n : selectionStart\n );\n const trimmedValue = trimTrailingMask(newValue, emptyMask);\n if (trimmedValue !== value) {\n onChange(trimmedValue);\n onSelect({\n selectionStart: trimmedValue.length,\n selectionEnd: trimmedValue.length,\n selectionDirection: SELECTION_DIRECTION.NONE,\n });\n }\n return;\n }\n\n if (selectionStart !== selectionEnd) {\n // Replace all non-masked characters with blanks, set selection to start\n const newValue =\n value.substring(0, selectionStart) +\n value\n .substring(selectionStart, selectionEnd)\n .replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE) +\n value.substring(selectionEnd);\n log.debug(\n 'Range ',\n selectionStart,\n selectionEnd,\n 'deleted, setting value',\n newValue\n );\n\n onChange(newValue);\n onSelect({\n selectionStart,\n selectionEnd: selectionStart,\n selectionDirection: SELECTION_DIRECTION.NONE,\n });\n } else if (selectionStart > 0) {\n for (let i = selectionStart - 1; i >= 0; i -= 1) {\n // Only replace non placeholder text\n const newValue =\n value.substring(0, i) +\n value\n .substring(i, selectionStart)\n .replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE) +\n value.substring(selectionStart);\n\n if (newValue !== value) {\n onChange(newValue);\n onSelect({\n selectionStart: i,\n selectionEnd: i,\n selectionDirection: SELECTION_DIRECTION.NONE,\n });\n return;\n }\n }\n }\n\n return;\n }\n\n if (event.altKey || event.metaKey || event.ctrlKey || key.length > 1) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n // Get the different permutations of the character they entered, remove duplicates\n const newChars = Array.from(\n new Set([key, key.toUpperCase(), key.toLowerCase()])\n );\n for (let i = 0; i < newChars.length; i += 1) {\n const newChar = newChars[i];\n\n // If they're typing an alphanumeric character, be smart and allow it to jump ahead\n const maxReplaceIndex = /[a-zA-Z0-9]/g.test(newChar)\n ? examples[0].length - 1\n : selectionStart;\n for (\n let replaceIndex = selectionStart;\n replaceIndex <= maxReplaceIndex;\n replaceIndex += 1\n ) {\n // Fill with the example chars if necessary\n const filledValue = fillToLength(\n value,\n examples[0],\n replaceIndex + 1\n );\n const newValue = getPreferredReplacementString(\n filledValue,\n replaceIndex,\n newChar,\n selectionStart,\n selectionEnd\n );\n if (isValid(newValue, replaceIndex + 1)) {\n const currentSegment = getSegment(replaceIndex);\n const newSelectionStart = replaceIndex + 1;\n let newSelection: SelectionSegment = {\n selectionStart: newSelectionStart,\n selectionEnd: newSelectionStart,\n selectionDirection: SELECTION_DIRECTION.NONE,\n };\n if (newSelectionStart >= currentSegment.selectionEnd) {\n const nextSegmentSelection = nextSegment(replaceIndex);\n if (\n nextSegmentSelection.selectionStart !==\n currentSegment.selectionStart\n ) {\n newSelection = nextSegmentSelection;\n }\n }\n log.debug('handleKeyDown', key, '=>', newValue, newSelection);\n onChange(newValue);\n onSelect(newSelection);\n return;\n }\n }\n }\n }\n\n // Need to use \"text\" type so we can apply a pattern and make selection properly\n return (\n <input\n ref={input}\n className={classNames('form-control masked-input', className)}\n type=\"text\"\n pattern={pattern}\n placeholder={placeholder}\n value={value}\n onChange={() => undefined}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n onSelect={handleSelect}\n onSelectCapture={handleSelectCapture}\n onFocus={onFocus}\n onBlur={onBlur}\n data-testid={dataTestId}\n />\n );\n }\n);\n\nexport default MaskedInput;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"MaskedInput.js","names":["React","useMemo","useEffect","useCallback","classNames","Log","useForwardedRef","DEFAULT_GET_PREFERRED_REPLACEMENT_STRING","fillToLength","trimTrailingMask","jsx","_jsx","log","module","SELECTION_DIRECTION","FORWARD","BACKWARD","NONE","FIXED_WIDTH_SPACE","MaskedInput","forwardRef","props","ref","className","example","_props$getNextSegment","getNextSegmentValue","range","delta","segmentValue","_props$getPreferredRe","getPreferredReplacementString","_props$normalizePaste","normalizePastedText","text","_props$onChange","onChange","_props$onSelect","onSelect","onSubmit","pattern","placeholder","selection","value","_props$onFocus","onFocus","_props$onBlur","onBlur","dataTestId","input","examples","Array","isArray","emptyMask","replace","setSelectedSegment","_input$current","debug","selectionStart","selectionEnd","selectionDirection","current","setSelectionRange","getSegment","cursorPosition","testValue","length","i","test","charAt","fillValue","checkValue","exampleValue","arguments","undefined","filledValue","concat","substring","isValid","patternRegex","RegExp","nextSegment","position","currentSegment","nextPosition","previousSegment","previousPosition","nextSegmentValue","segment","newSegmentValue","newValue","handleSelect","event","_ref","target","_ref$selectionStart","_ref$selectionEnd","_ref$selectionDirecti","error","debug2","nativeEvent","type","_objectSpread","newSelection","handleSelectCapture","_input$current$select","preventDefault","stopPropagation","handleArrowKey","key","_input$current2","_input$current2$selec","_input$current2$selec2","handlePaste","pastedText","clipboardData","getData","normalizedText","handleKeyDown","_input$current3","_input$current3$selec","_input$current3$selec2","startsWith","trimmedValue","altKey","metaKey","ctrlKey","newChars","from","Set","toUpperCase","toLowerCase","newChar","maxReplaceIndex","replaceIndex","newSelectionStart","nextSegmentSelection","onKeyDown","onPaste","onSelectCapture"],"sources":["../src/MaskedInput.tsx"],"sourcesContent":["import React, {\n useMemo,\n useEffect,\n useCallback,\n type KeyboardEvent,\n} from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport { useForwardedRef } from '@deephaven/react-hooks';\nimport {\n DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,\n fillToLength,\n trimTrailingMask,\n} from './MaskedInputUtils';\nimport './MaskedInput.scss';\n\nconst log = Log.module('MaskedInput');\n\nconst SELECTION_DIRECTION = {\n FORWARD: 'forward',\n BACKWARD: 'backward',\n NONE: 'none',\n} as const;\n\n/**\n * Special space character that's the same size as tabular numbers\n * https://www.fileformat.info/info/unicode/char/2007/index.htm\n */\nconst FIXED_WIDTH_SPACE = '\\u2007';\n\nexport type SelectionSegment = {\n selectionStart: number;\n selectionEnd: number;\n selectionDirection?: (typeof SELECTION_DIRECTION)[keyof typeof SELECTION_DIRECTION];\n};\n\ntype MaskedInputProps = {\n /** An extra class name to add to the component */\n className?: string;\n /** The regex pattern this masked input must match */\n pattern: string;\n /** Input placeholder */\n placeholder?: string;\n /** The current value to display */\n value: string;\n /** One or more examples of valid values. Used when deciding if next keystroke is valid (as rest of the current value may be incomplete) */\n example: string | string[];\n /** The current selection to use for the input */\n selection?: SelectionSegment;\n /** Called when the value changes. Note the value may still be incomplete. */\n onChange?: (value: string) => void;\n /** Called when selection changes */\n onSelect?: (segment: SelectionSegment) => void;\n /** Called when enter is pressed */\n onSubmit?: (event: KeyboardEvent<HTMLInputElement>) => void;\n /** Retrieve the next value for a provided segment */\n getNextSegmentValue?: (\n segment: SelectionSegment,\n delta: number,\n segmentValue: string,\n value: string\n ) => string;\n getPreferredReplacementString?: (\n value: string,\n replaceIndex: number,\n replaceChar: string,\n selectionStart: number,\n selectionEnd: number\n ) => string;\n /** Normalize pasted text before validation. Defaults to returning text unchanged. */\n normalizePastedText?: (text: string) => string;\n onFocus?: React.FocusEventHandler;\n onBlur?: React.FocusEventHandler;\n\n 'data-testid'?: string;\n};\n\n/**\n * A masked input for entering data from a template.\n * Won't work by itself, must use within another component and handle updating the value/selection.\n */\n// Forward ref causes a false positive for display-name in eslint:\n// https://github.com/yannickcr/eslint-plugin-react/issues/2269\n// eslint-disable-next-line react/display-name\nconst MaskedInput = React.forwardRef<HTMLInputElement, MaskedInputProps>(\n (props: MaskedInputProps, ref) => {\n const {\n className,\n example,\n getNextSegmentValue = (range, delta, segmentValue) => segmentValue,\n getPreferredReplacementString = DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,\n normalizePastedText = (text: string) => text,\n onChange = () => false,\n onSelect = () => false,\n onSubmit,\n pattern,\n placeholder,\n selection,\n value,\n onFocus = () => false,\n onBlur = () => false,\n 'data-testid': dataTestId,\n } = props;\n const input = useForwardedRef(ref);\n const examples = useMemo(\n () => (Array.isArray(example) ? example : [example]),\n [example]\n );\n const emptyMask = useMemo(\n () => examples[0].replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE),\n [examples]\n );\n\n useEffect(\n function setSelectedSegment() {\n if (selection != null) {\n log.debug('setting selection...', selection);\n const { selectionStart, selectionEnd, selectionDirection } =\n selection;\n input.current?.setSelectionRange(\n selectionStart,\n selectionEnd,\n selectionDirection\n );\n log.debug('selection set!');\n }\n },\n [selection, input]\n );\n\n /**\n * Returns the selection range for the segment at the given cursor position\n * @param cursorPosition The current position of the cursor\n */\n const getSegment = useCallback(\n (cursorPosition: number) => {\n let selectionStart = cursorPosition;\n let selectionEnd = cursorPosition;\n const testValue = examples.length > 0 ? examples[0] : value;\n\n for (let i = selectionStart - 1; i >= 0; i -= 1) {\n if (!/[a-zA-Z0-9]/g.test(testValue.charAt(i))) {\n break;\n }\n\n selectionStart = i;\n }\n\n for (let i = selectionEnd; i < testValue.length; i += 1) {\n if (!/[a-zA-Z0-9]/g.test(testValue.charAt(i))) {\n break;\n }\n\n selectionEnd = i + 1;\n }\n\n const selectionDirection =\n selectionStart === selectionEnd\n ? SELECTION_DIRECTION.NONE\n : SELECTION_DIRECTION.BACKWARD;\n\n return {\n selectionStart,\n selectionEnd,\n selectionDirection,\n };\n },\n [examples, value]\n );\n\n /**\n * Replaces all blank spaces and everything after the current cursor position with the example value\n * @param checkValue The value to check/fill in\n * @param exampleValue The example to fill in the value from\n * @param cursorPosition The cursor position\n * @returns The filled in value\n */\n function fillValue(\n checkValue: string,\n exampleValue: string,\n cursorPosition = checkValue.length\n ): string {\n let filledValue = '';\n for (let i = 0; i < cursorPosition; i += 1) {\n if (checkValue.charAt(i) !== FIXED_WIDTH_SPACE) {\n filledValue = filledValue.concat(checkValue[i]);\n } else {\n filledValue = filledValue.concat(exampleValue[i]);\n }\n }\n filledValue = filledValue.concat(exampleValue.substring(cursorPosition));\n\n return filledValue;\n }\n\n /**\n * Checks if a given `value` is valid up until the `cursorPosition`.\n * Uses the examples to build the rest of the string\n * @param checkValue The value to check validity of\n * @param cursorPosition The position of the cursor to check up to\n */\n const isValid = useCallback(\n (checkValue: string, cursorPosition = checkValue.length): boolean => {\n const patternRegex = new RegExp(`^${pattern}$`);\n if (patternRegex.test(checkValue)) {\n return true;\n }\n\n for (let i = 0; i < examples.length; i += 1) {\n const filledValue = fillValue(\n checkValue,\n examples[i],\n cursorPosition\n );\n if (patternRegex.test(filledValue)) {\n return true;\n }\n }\n return false;\n },\n [pattern, examples]\n );\n\n /**\n * Returns the next segment after the given position\n * @param position The cursor position to start at\n * @returns The new selection range\n */\n function nextSegment(position: number): SelectionSegment {\n const currentSegment = getSegment(position);\n const nextPosition = currentSegment.selectionEnd + 1;\n if (nextPosition >= value.length) {\n return currentSegment;\n }\n\n return getSegment(nextPosition);\n }\n\n /**\n * Returns the previous segment before the given position\n * @param position The cursor position to start at\n * @returns The new selection range\n */\n function previousSegment(position: number): SelectionSegment {\n const currentSegment = getSegment(position);\n const previousPosition = currentSegment.selectionStart - 1;\n if (previousPosition <= 0) {\n return currentSegment;\n }\n\n return getSegment(previousPosition);\n }\n\n function nextSegmentValue(position: number, delta: number): void {\n const segment = getSegment(position);\n const segmentValue = value.substring(\n segment.selectionStart,\n segment.selectionEnd\n );\n const newSegmentValue = getNextSegmentValue(\n segment,\n delta,\n segmentValue,\n value\n );\n const newValue =\n value.substring(0, segment.selectionStart) +\n newSegmentValue +\n value.substring(segment.selectionEnd);\n if (isValid(newValue, segment.selectionEnd)) {\n onChange(newValue);\n onSelect(segment);\n }\n }\n\n const handleSelect = useCallback(\n (event: React.UIEvent<HTMLInputElement>) => {\n const {\n selectionStart = 0,\n selectionEnd = 0,\n selectionDirection = 'none',\n } = event.target as HTMLInputElement;\n\n if (\n selectionStart === null ||\n selectionEnd === null ||\n selectionDirection === null\n ) {\n log.error(\n 'Selection attempted on non-text input element',\n event.target\n );\n return;\n }\n\n log.debug2(\n 'handleSelect',\n selectionStart,\n selectionEnd,\n selectionDirection\n );\n if (\n selection != null &&\n selectionStart === selection.selectionStart &&\n selectionEnd === selection.selectionEnd\n ) {\n return;\n }\n if (\n selection != null &&\n selectionStart === value.length &&\n selectionEnd === value.length &&\n event.nativeEvent.type !== 'mouseup'\n ) {\n // React triggers onSelect event with the cursor at the end of the input content\n // when the component is rendered at a different location in the DOM,\n // i.e. when start/end times switch places in the TimeSlider.\n // Ignore this event and reset the selection to its previous state.\n onSelect({ ...selection });\n return;\n }\n if (selectionStart === selectionEnd) {\n const newSelection = getSegment(selectionStart);\n log.debug(\n 'Selection segment from ',\n selectionStart,\n selectionEnd,\n '=>',\n newSelection\n );\n onSelect(newSelection);\n } else {\n onSelect({ selectionStart, selectionEnd, selectionDirection });\n }\n },\n [getSegment, onSelect, selection, value]\n );\n\n const handleSelectCapture = useCallback(\n (event: React.UIEvent<HTMLInputElement>) => {\n if (!input.current) {\n return;\n }\n log.debug('handleSelectCapture', event);\n const selectionStart = input.current.selectionStart ?? 0;\n if (\n selectionStart === value.length &&\n selection != null &&\n selectionStart !== selection.selectionStart\n ) {\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [input, selection, value]\n );\n\n function handleArrowKey(\n event: React.KeyboardEvent<HTMLInputElement>\n ): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (!input.current) {\n return;\n }\n\n const { key } = event;\n const { selectionStart = 0, selectionEnd = 0 } = input.current;\n if (selectionStart === null || selectionEnd === null) {\n log.error(\n 'Selection arrow nvaigation attempted on non-text input element',\n event.target\n );\n return;\n }\n\n if (key === 'ArrowLeft') {\n onSelect(previousSegment(selectionStart));\n } else if (key === 'ArrowRight') {\n onSelect(nextSegment(selectionEnd));\n } else if (key === 'ArrowUp') {\n nextSegmentValue(selectionStart, -1);\n } else if (key === 'ArrowDown') {\n nextSegmentValue(selectionStart, 1);\n }\n }\n\n /**\n * Handles paste events into the input\n * @param event The paste event\n */\n const handlePaste = useCallback(\n (event: React.ClipboardEvent<HTMLInputElement>): void => {\n event.preventDefault();\n event.stopPropagation();\n\n if (!input.current) {\n return;\n }\n\n const pastedText = event.clipboardData.getData('text/plain');\n\n log.debug('handlePaste', pastedText);\n\n // Normalize the pasted text\n const normalizedText = normalizePastedText(pastedText);\n\n // Check if the pasted value is valid\n if (isValid(normalizedText, normalizedText.length)) {\n onChange(normalizedText);\n onSelect({\n selectionStart: normalizedText.length,\n selectionEnd: normalizedText.length,\n selectionDirection: SELECTION_DIRECTION.NONE,\n });\n }\n },\n [input, onChange, onSelect, isValid, normalizePastedText]\n );\n\n function handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>): void {\n if (!input.current) {\n return;\n }\n log.debug('handleKeyDown', event);\n const { key } = event;\n const { selectionStart = 0, selectionEnd = 0 } = input.current;\n if (selectionStart === null || selectionEnd === null) {\n log.error(\n 'Selection key event on non-text input element',\n event.target\n );\n return;\n }\n if (key === 'Enter') {\n onSubmit?.(event);\n return;\n }\n if (key.startsWith('Arrow')) {\n handleArrowKey(event);\n return;\n }\n\n if (key === 'Delete' || key === 'Backspace') {\n event.preventDefault();\n event.stopPropagation();\n\n // Deleting at the end of the value\n if (selectionEnd >= trimTrailingMask(value, emptyMask).length) {\n const newValue = value.substring(\n 0,\n // Delete whole selection or just the char before the cursor\n selectionStart === selectionEnd\n ? selectionStart - 1\n : selectionStart\n );\n const trimmedValue = trimTrailingMask(newValue, emptyMask);\n if (trimmedValue !== value) {\n onChange(trimmedValue);\n onSelect({\n selectionStart: trimmedValue.length,\n selectionEnd: trimmedValue.length,\n selectionDirection: SELECTION_DIRECTION.NONE,\n });\n }\n return;\n }\n\n if (selectionStart !== selectionEnd) {\n // Replace all non-masked characters with blanks, set selection to start\n const newValue =\n value.substring(0, selectionStart) +\n value\n .substring(selectionStart, selectionEnd)\n .replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE) +\n value.substring(selectionEnd);\n log.debug(\n 'Range ',\n selectionStart,\n selectionEnd,\n 'deleted, setting value',\n newValue\n );\n\n onChange(newValue);\n onSelect({\n selectionStart,\n selectionEnd: selectionStart,\n selectionDirection: SELECTION_DIRECTION.NONE,\n });\n } else if (selectionStart > 0) {\n for (let i = selectionStart - 1; i >= 0; i -= 1) {\n // Only replace non placeholder text\n const newValue =\n value.substring(0, i) +\n value\n .substring(i, selectionStart)\n .replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE) +\n value.substring(selectionStart);\n\n if (newValue !== value) {\n onChange(newValue);\n onSelect({\n selectionStart: i,\n selectionEnd: i,\n selectionDirection: SELECTION_DIRECTION.NONE,\n });\n return;\n }\n }\n }\n\n return;\n }\n\n if (event.altKey || event.metaKey || event.ctrlKey || key.length > 1) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n // Get the different permutations of the character they entered, remove duplicates\n const newChars = Array.from(\n new Set([key, key.toUpperCase(), key.toLowerCase()])\n );\n for (let i = 0; i < newChars.length; i += 1) {\n const newChar = newChars[i];\n\n // If they're typing an alphanumeric character, be smart and allow it to jump ahead\n const maxReplaceIndex = /[a-zA-Z0-9]/g.test(newChar)\n ? examples[0].length - 1\n : selectionStart;\n for (\n let replaceIndex = selectionStart;\n replaceIndex <= maxReplaceIndex;\n replaceIndex += 1\n ) {\n // Fill with the example chars if necessary\n const filledValue = fillToLength(\n value,\n examples[0],\n replaceIndex + 1\n );\n const newValue = getPreferredReplacementString(\n filledValue,\n replaceIndex,\n newChar,\n selectionStart,\n selectionEnd\n );\n if (isValid(newValue, replaceIndex + 1)) {\n const currentSegment = getSegment(replaceIndex);\n const newSelectionStart = replaceIndex + 1;\n let newSelection: SelectionSegment = {\n selectionStart: newSelectionStart,\n selectionEnd: newSelectionStart,\n selectionDirection: SELECTION_DIRECTION.NONE,\n };\n if (newSelectionStart >= currentSegment.selectionEnd) {\n const nextSegmentSelection = nextSegment(replaceIndex);\n if (\n nextSegmentSelection.selectionStart !==\n currentSegment.selectionStart\n ) {\n newSelection = nextSegmentSelection;\n }\n }\n log.debug('handleKeyDown', key, '=>', newValue, newSelection);\n onChange(newValue);\n onSelect(newSelection);\n return;\n }\n }\n }\n }\n\n // Need to use \"text\" type so we can apply a pattern and make selection properly\n return (\n <input\n ref={input}\n className={classNames('form-control masked-input', className)}\n type=\"text\"\n pattern={pattern}\n placeholder={placeholder}\n value={value}\n onChange={() => undefined}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n onSelect={handleSelect}\n onSelectCapture={handleSelectCapture}\n onFocus={onFocus}\n onBlur={onBlur}\n data-testid={dataTestId}\n />\n );\n }\n);\n\nexport default MaskedInput;\n"],"mappings":"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","ignoreList":[]}
@@ -21,9 +21,7 @@ export function fillToLength(checkValue, exampleValue, length) {
21
21
  * @returns Trimmed string
22
22
  */
23
23
  export function trimTrailingMask(value, emptyMask) {
24
- var {
25
- length
26
- } = value;
24
+ var length = value.length;
27
25
  for (var i = value.length - 1; i >= 0; i -= 1) {
28
26
  if (emptyMask[i] === value[i]) {
29
27
  length = i;
@@ -1 +1 @@
1
- {"version":3,"file":"MaskedInputUtils.js","names":["DEFAULT_GET_PREFERRED_REPLACEMENT_STRING","value","replaceIndex","newChar","substring","fillToLength","checkValue","exampleValue","length","concat","trimTrailingMask","emptyMask","i"],"sources":["../src/MaskedInputUtils.ts"],"sourcesContent":["/* eslint-disable import/prefer-default-export */\nexport function DEFAULT_GET_PREFERRED_REPLACEMENT_STRING(\n value: string,\n replaceIndex: number,\n newChar: string\n): string {\n return (\n value.substring(0, replaceIndex) +\n newChar +\n value.substring(replaceIndex + 1)\n );\n}\n\n/**\n * Fill the string on the right side with the example value to the given length\n * @param checkValue Initial string to pad\n * @param exampleValue Example value\n * @param length Target length\n * @returns String padded with the given example value\n */\nexport function fillToLength(\n checkValue: string,\n exampleValue: string,\n length: number\n): string {\n return checkValue.length < length\n ? `${checkValue}${exampleValue.substring(checkValue.length, length)}`\n : checkValue;\n}\n\n/**\n * Trim all characters matching the empty mask on the right side of the given value\n * @param value String to trim\n * @param emptyMask Empty mask\n * @returns Trimmed string\n */\nexport function trimTrailingMask(value: string, emptyMask: string): string {\n let { length } = value;\n for (let i = value.length - 1; i >= 0; i -= 1) {\n if (emptyMask[i] === value[i]) {\n length = i;\n } else {\n break;\n }\n }\n return value.substring(0, length);\n}\n"],"mappings":"AAAA;AACA,OAAO,SAASA,wCAAwCA,CACtDC,KAAa,EACbC,YAAoB,EACpBC,OAAe,EACP;EACR,OACEF,KAAK,CAACG,SAAS,CAAC,CAAC,EAAEF,YAAY,CAAC,GAChCC,OAAO,GACPF,KAAK,CAACG,SAAS,CAACF,YAAY,GAAG,CAAC,CAAC;AAErC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,YAAYA,CAC1BC,UAAkB,EAClBC,YAAoB,EACpBC,MAAc,EACN;EACR,OAAOF,UAAU,CAACE,MAAM,GAAGA,MAAM,MAAAC,MAAA,CAC1BH,UAAU,EAAAG,MAAA,CAAGF,YAAY,CAACH,SAAS,CAACE,UAAU,CAACE,MAAM,EAAEA,MAAM,CAAC,IACjEF,UAAU;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,gBAAgBA,CAACT,KAAa,EAAEU,SAAiB,EAAU;EACzE,IAAI;IAAEH;EAAO,CAAC,GAAGP,KAAK;EACtB,KAAK,IAAIW,CAAC,GAAGX,KAAK,CAACO,MAAM,GAAG,CAAC,EAAEI,CAAC,IAAI,CAAC,EAAEA,CAAC,IAAI,CAAC,EAAE;IAC7C,IAAID,SAAS,CAACC,CAAC,CAAC,KAAKX,KAAK,CAACW,CAAC,CAAC,EAAE;MAC7BJ,MAAM,GAAGI,CAAC;IACZ,CAAC,MAAM;MACL;IACF;EACF;EACA,OAAOX,KAAK,CAACG,SAAS,CAAC,CAAC,EAAEI,MAAM,CAAC;AACnC","ignoreList":[]}
1
+ {"version":3,"file":"MaskedInputUtils.js","names":["DEFAULT_GET_PREFERRED_REPLACEMENT_STRING","value","replaceIndex","newChar","substring","fillToLength","checkValue","exampleValue","length","concat","trimTrailingMask","emptyMask","i"],"sources":["../src/MaskedInputUtils.ts"],"sourcesContent":["/* eslint-disable import/prefer-default-export */\nexport function DEFAULT_GET_PREFERRED_REPLACEMENT_STRING(\n value: string,\n replaceIndex: number,\n newChar: string\n): string {\n return (\n value.substring(0, replaceIndex) +\n newChar +\n value.substring(replaceIndex + 1)\n );\n}\n\n/**\n * Fill the string on the right side with the example value to the given length\n * @param checkValue Initial string to pad\n * @param exampleValue Example value\n * @param length Target length\n * @returns String padded with the given example value\n */\nexport function fillToLength(\n checkValue: string,\n exampleValue: string,\n length: number\n): string {\n return checkValue.length < length\n ? `${checkValue}${exampleValue.substring(checkValue.length, length)}`\n : checkValue;\n}\n\n/**\n * Trim all characters matching the empty mask on the right side of the given value\n * @param value String to trim\n * @param emptyMask Empty mask\n * @returns Trimmed string\n */\nexport function trimTrailingMask(value: string, emptyMask: string): string {\n let { length } = value;\n for (let i = value.length - 1; i >= 0; i -= 1) {\n if (emptyMask[i] === value[i]) {\n length = i;\n } else {\n break;\n }\n }\n return value.substring(0, length);\n}\n"],"mappings":"AAAA;AACA,OAAO,SAASA,wCAAwCA,CACtDC,KAAa,EACbC,YAAoB,EACpBC,OAAe,EACP;EACR,OACEF,KAAK,CAACG,SAAS,CAAC,CAAC,EAAEF,YAAY,CAAC,GAChCC,OAAO,GACPF,KAAK,CAACG,SAAS,CAACF,YAAY,GAAG,CAAC,CAAC;AAErC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,YAAYA,CAC1BC,UAAkB,EAClBC,YAAoB,EACpBC,MAAc,EACN;EACR,OAAOF,UAAU,CAACE,MAAM,GAAGA,MAAM,MAAAC,MAAA,CAC1BH,UAAU,EAAAG,MAAA,CAAGF,YAAY,CAACH,SAAS,CAACE,UAAU,CAACE,MAAM,EAAEA,MAAM,CAAC,IACjEF,UAAU;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,gBAAgBA,CAACT,KAAa,EAAEU,SAAiB,EAAU;EACzE,IAAMH,MAAM,GAAKP,KAAK,CAAhBO,MAAM;EACZ,KAAK,IAAII,CAAC,GAAGX,KAAK,CAACO,MAAM,GAAG,CAAC,EAAEI,CAAC,IAAI,CAAC,EAAEA,CAAC,IAAI,CAAC,EAAE;IAC7C,IAAID,SAAS,CAACC,CAAC,CAAC,KAAKX,KAAK,CAACW,CAAC,CAAC,EAAE;MAC7BJ,MAAM,GAAGI,CAAC;IACZ,CAAC,MAAM;MACL;IACF;EACF;EACA,OAAOX,KAAK,CAACG,SAAS,CAAC,CAAC,EAAEI,MAAM,CAAC;AACnC","ignoreList":[]}
package/dist/Option.js CHANGED
@@ -9,9 +9,7 @@ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t =
9
9
  import React from 'react';
10
10
  import { jsx as _jsx } from "react/jsx-runtime";
11
11
  function Option(_ref) {
12
- var {
13
- children
14
- } = _ref,
12
+ var children = _ref.children,
15
13
  props = _objectWithoutProperties(_ref, _excluded);
16
14
  // eslint-disable-next-line react/jsx-props-no-spreading
17
15
  return /*#__PURE__*/_jsx("option", _objectSpread(_objectSpread({}, props), {}, {
@@ -1 +1 @@
1
- {"version":3,"file":"Option.js","names":["React","jsx","_jsx","Option","_ref","children","props","_objectWithoutProperties","_excluded","_objectSpread"],"sources":["../src/Option.tsx"],"sourcesContent":["import React, { type OptionHTMLAttributes } from 'react';\n\nexport type OptionProps = OptionHTMLAttributes<HTMLOptionElement> & {\n children: React.ReactNode;\n 'data-testid'?: string;\n};\n\nfunction Option({ children, ...props }: OptionProps): JSX.Element {\n // eslint-disable-next-line react/jsx-props-no-spreading\n return <option {...props}>{children}</option>;\n}\n\nexport default Option;\n"],"mappings":";;;;;;;;AAAA,OAAOA,KAAK,MAAqC,OAAO;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAOzD,SAASC,MAAMA,CAAAC,IAAA,EAAmD;EAAA,IAAlD;MAAEC;IAAgC,CAAC,GAAAD,IAAA;IAApBE,KAAK,GAAAC,wBAAA,CAAAH,IAAA,EAAAI,SAAA;EAClC;EACA,oBAAON,IAAA,WAAAO,aAAA,CAAAA,aAAA,KAAYH,KAAK;IAAAD,QAAA,EAAGA;EAAQ,EAAS,CAAC;AAC/C;AAEA,eAAeF,MAAM","ignoreList":[]}
1
+ {"version":3,"file":"Option.js","names":["React","jsx","_jsx","Option","_ref","children","props","_objectWithoutProperties","_excluded","_objectSpread"],"sources":["../src/Option.tsx"],"sourcesContent":["import React, { type OptionHTMLAttributes } from 'react';\n\nexport type OptionProps = OptionHTMLAttributes<HTMLOptionElement> & {\n children: React.ReactNode;\n 'data-testid'?: string;\n};\n\nfunction Option({ children, ...props }: OptionProps): JSX.Element {\n // eslint-disable-next-line react/jsx-props-no-spreading\n return <option {...props}>{children}</option>;\n}\n\nexport default Option;\n"],"mappings":";;;;;;;;AAAA,OAAOA,KAAK,MAAqC,OAAO;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAOzD,SAASC,MAAMA,CAAAC,IAAA,EAAmD;EAAA,IAAhDC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IAAKC,KAAK,GAAAC,wBAAA,CAAAH,IAAA,EAAAI,SAAA;EAClC;EACA,oBAAON,IAAA,WAAAO,aAAA,CAAAA,aAAA,KAAYH,KAAK;IAAAD,QAAA,EAAGA;EAAQ,EAAS,CAAC;AAC/C;AAEA,eAAeF,MAAM","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 } from 'react';
2
8
  import { nanoid } from 'nanoid';
3
9
  import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
@@ -9,15 +15,17 @@ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
9
15
  * </RadioGroup>
10
16
  */
11
17
  function RadioGroup(props) {
12
- var {
13
- children,
14
- disabled = false,
15
- name: propsName,
16
- onChange,
17
- value = '',
18
- 'data-testid': dataTestId
19
- } = props;
20
- var [name] = useState(propsName !== null && propsName !== void 0 ? propsName : nanoid());
18
+ var children = props.children,
19
+ _props$disabled = props.disabled,
20
+ disabled = _props$disabled === void 0 ? false : _props$disabled,
21
+ propsName = props.name,
22
+ onChange = props.onChange,
23
+ _props$value = props.value,
24
+ value = _props$value === void 0 ? '' : _props$value,
25
+ dataTestId = props['data-testid'];
26
+ var _useState = useState(propsName !== null && propsName !== void 0 ? propsName : nanoid()),
27
+ _useState2 = _slicedToArray(_useState, 1),
28
+ name = _useState2[0];
21
29
 
22
30
  // Need to use "text" type so we can apply a pattern and make selection properly
23
31
  return /*#__PURE__*/_jsx(_Fragment, {
@@ -1 +1 @@
1
- {"version":3,"file":"RadioGroup.js","names":["React","useState","nanoid","Fragment","_Fragment","jsx","_jsx","RadioGroup","props","children","disabled","name","propsName","onChange","value","dataTestId","Children","map","child","_child$props$onChange","_child$props$disabled","cloneElement","checked"],"sources":["../src/RadioGroup.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { nanoid } from 'nanoid';\n\ntype RadioGroupProps = {\n /** The radio items to populate this radio. Should be of type RadioItem. */\n children?: React.ReactElement | React.ReactElement[];\n\n /** The name to use for the radio items. If not specified, a name is automatically generated */\n name?: string;\n\n /** Triggered when a radio button is changed */\n onChange: React.ChangeEventHandler<HTMLInputElement>;\n\n /** The currently selected value. Will automatically set the `checked` attribute of the RadioItem. */\n value?: string;\n\n disabled?: boolean;\n 'data-testid'?: string;\n};\n\n/**\n * A group of radio buttons. Use with RadioItems to populate, eg.\n * <RadioGroup>\n * <RadioItem .../>\n * <RadioItem .../>\n * </RadioGroup>\n */\nfunction RadioGroup(props: RadioGroupProps): JSX.Element {\n const {\n children,\n disabled = false,\n name: propsName,\n onChange,\n value = '',\n 'data-testid': dataTestId,\n } = props;\n const [name] = useState(propsName ?? nanoid());\n\n // Need to use \"text\" type so we can apply a pattern and make selection properly\n return (\n <>\n {React.Children.map(children, child =>\n child\n ? React.cloneElement(child, {\n name,\n onChange: child.props.onChange ?? onChange,\n checked: value === child.props.value,\n disabled: child.props.disabled ?? disabled,\n 'data-testid': dataTestId,\n })\n : null\n )}\n </>\n );\n}\n\nexport default RadioGroup;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SAASC,MAAM,QAAQ,QAAQ;AAAC,SAAAC,QAAA,IAAAC,SAAA,EAAAC,GAAA,IAAAC,IAAA;AAmBhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,UAAUA,CAACC,KAAsB,EAAe;EACvD,IAAM;IACJC,QAAQ;IACRC,QAAQ,GAAG,KAAK;IAChBC,IAAI,EAAEC,SAAS;IACfC,QAAQ;IACRC,KAAK,GAAG,EAAE;IACV,aAAa,EAAEC;EACjB,CAAC,GAAGP,KAAK;EACT,IAAM,CAACG,IAAI,CAAC,GAAGV,QAAQ,CAACW,SAAS,aAATA,SAAS,cAATA,SAAS,GAAIV,MAAM,CAAC,CAAC,CAAC;;EAE9C;EACA,oBACEI,IAAA,CAAAF,SAAA;IAAAK,QAAA,EACGT,KAAK,CAACgB,QAAQ,CAACC,GAAG,CAACR,QAAQ,EAAES,KAAK;MAAA,IAAAC,qBAAA,EAAAC,qBAAA;MAAA,OACjCF,KAAK,gBACDlB,KAAK,CAACqB,YAAY,CAACH,KAAK,EAAE;QACxBP,IAAI;QACJE,QAAQ,GAAAM,qBAAA,GAAED,KAAK,CAACV,KAAK,CAACK,QAAQ,cAAAM,qBAAA,cAAAA,qBAAA,GAAIN,QAAQ;QAC1CS,OAAO,EAAER,KAAK,KAAKI,KAAK,CAACV,KAAK,CAACM,KAAK;QACpCJ,QAAQ,GAAAU,qBAAA,GAAEF,KAAK,CAACV,KAAK,CAACE,QAAQ,cAAAU,qBAAA,cAAAA,qBAAA,GAAIV,QAAQ;QAC1C,aAAa,EAAEK;MACjB,CAAC,CAAC,GACF,IAAI;IAAA,CACV;EAAC,CACD,CAAC;AAEP;AAEA,eAAeR,UAAU","ignoreList":[]}
1
+ {"version":3,"file":"RadioGroup.js","names":["React","useState","nanoid","Fragment","_Fragment","jsx","_jsx","RadioGroup","props","children","_props$disabled","disabled","propsName","name","onChange","_props$value","value","dataTestId","_useState","_useState2","_slicedToArray","Children","map","child","_child$props$onChange","_child$props$disabled","cloneElement","checked"],"sources":["../src/RadioGroup.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { nanoid } from 'nanoid';\n\ntype RadioGroupProps = {\n /** The radio items to populate this radio. Should be of type RadioItem. */\n children?: React.ReactElement | React.ReactElement[];\n\n /** The name to use for the radio items. If not specified, a name is automatically generated */\n name?: string;\n\n /** Triggered when a radio button is changed */\n onChange: React.ChangeEventHandler<HTMLInputElement>;\n\n /** The currently selected value. Will automatically set the `checked` attribute of the RadioItem. */\n value?: string;\n\n disabled?: boolean;\n 'data-testid'?: string;\n};\n\n/**\n * A group of radio buttons. Use with RadioItems to populate, eg.\n * <RadioGroup>\n * <RadioItem .../>\n * <RadioItem .../>\n * </RadioGroup>\n */\nfunction RadioGroup(props: RadioGroupProps): JSX.Element {\n const {\n children,\n disabled = false,\n name: propsName,\n onChange,\n value = '',\n 'data-testid': dataTestId,\n } = props;\n const [name] = useState(propsName ?? nanoid());\n\n // Need to use \"text\" type so we can apply a pattern and make selection properly\n return (\n <>\n {React.Children.map(children, child =>\n child\n ? React.cloneElement(child, {\n name,\n onChange: child.props.onChange ?? onChange,\n checked: value === child.props.value,\n disabled: child.props.disabled ?? disabled,\n 'data-testid': dataTestId,\n })\n : null\n )}\n </>\n );\n}\n\nexport default RadioGroup;\n"],"mappings":";;;;;;AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SAASC,MAAM,QAAQ,QAAQ;AAAC,SAAAC,QAAA,IAAAC,SAAA,EAAAC,GAAA,IAAAC,IAAA;AAmBhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,UAAUA,CAACC,KAAsB,EAAe;EACvD,IACEC,QAAQ,GAMND,KAAK,CANPC,QAAQ;IAAAC,eAAA,GAMNF,KAAK,CALPG,QAAQ;IAARA,QAAQ,GAAAD,eAAA,cAAG,KAAK,GAAAA,eAAA;IACVE,SAAS,GAIbJ,KAAK,CAJPK,IAAI;IACJC,QAAQ,GAGNN,KAAK,CAHPM,QAAQ;IAAAC,YAAA,GAGNP,KAAK,CAFPQ,KAAK;IAALA,KAAK,GAAAD,YAAA,cAAG,EAAE,GAAAA,YAAA;IACKE,UAAU,GACvBT,KAAK,CADP,aAAa;EAEf,IAAAU,SAAA,GAAejB,QAAQ,CAACW,SAAS,aAATA,SAAS,cAATA,SAAS,GAAIV,MAAM,CAAC,CAAC,CAAC;IAAAiB,UAAA,GAAAC,cAAA,CAAAF,SAAA;IAAvCL,IAAI,GAAAM,UAAA;;EAEX;EACA,oBACEb,IAAA,CAAAF,SAAA;IAAAK,QAAA,EACGT,KAAK,CAACqB,QAAQ,CAACC,GAAG,CAACb,QAAQ,EAAEc,KAAK;MAAA,IAAAC,qBAAA,EAAAC,qBAAA;MAAA,OACjCF,KAAK,gBACDvB,KAAK,CAAC0B,YAAY,CAACH,KAAK,EAAE;QACxBV,IAAI;QACJC,QAAQ,GAAAU,qBAAA,GAAED,KAAK,CAACf,KAAK,CAACM,QAAQ,cAAAU,qBAAA,cAAAA,qBAAA,GAAIV,QAAQ;QAC1Ca,OAAO,EAAEX,KAAK,KAAKO,KAAK,CAACf,KAAK,CAACQ,KAAK;QACpCL,QAAQ,GAAAc,qBAAA,GAAEF,KAAK,CAACf,KAAK,CAACG,QAAQ,cAAAc,qBAAA,cAAAA,qBAAA,GAAId,QAAQ;QAC1C,aAAa,EAAEM;MACjB,CAAC,CAAC,GACF,IAAI;IAAA,CACV;EAAC,CACD,CAAC;AAEP;AAEA,eAAeV,UAAU","ignoreList":[]}
package/dist/RadioItem.js CHANGED
@@ -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 } from 'react';
2
8
  import classNames from 'classnames';
3
9
  import { nanoid } from 'nanoid';
@@ -6,20 +12,25 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
12
  * A RadioItem to be used within the Radio component.
7
13
  */
8
14
  var RadioItem = /*#__PURE__*/React.forwardRef((props, ref) => {
9
- var {
10
- checked,
11
- children,
12
- className = '',
13
- disabled = false,
14
- inputClassName = '',
15
- isInvalid = false,
16
- labelClassName = '',
17
- name,
18
- onChange,
19
- value,
20
- 'data-testid': dataTestId
21
- } = props;
22
- var [id] = useState(nanoid());
15
+ var checked = props.checked,
16
+ children = props.children,
17
+ _props$className = props.className,
18
+ className = _props$className === void 0 ? '' : _props$className,
19
+ _props$disabled = props.disabled,
20
+ disabled = _props$disabled === void 0 ? false : _props$disabled,
21
+ _props$inputClassName = props.inputClassName,
22
+ inputClassName = _props$inputClassName === void 0 ? '' : _props$inputClassName,
23
+ _props$isInvalid = props.isInvalid,
24
+ isInvalid = _props$isInvalid === void 0 ? false : _props$isInvalid,
25
+ _props$labelClassName = props.labelClassName,
26
+ labelClassName = _props$labelClassName === void 0 ? '' : _props$labelClassName,
27
+ name = props.name,
28
+ onChange = props.onChange,
29
+ value = props.value,
30
+ dataTestId = props['data-testid'];
31
+ var _useState = useState(nanoid()),
32
+ _useState2 = _slicedToArray(_useState, 1),
33
+ id = _useState2[0];
23
34
  return /*#__PURE__*/_jsxs("div", {
24
35
  className: classNames('custom-control custom-radio', className),
25
36
  children: [/*#__PURE__*/_jsx("input", {
@@ -1 +1 @@
1
- {"version":3,"file":"RadioItem.js","names":["React","useState","classNames","nanoid","jsx","_jsx","jsxs","_jsxs","RadioItem","forwardRef","props","ref","checked","children","className","disabled","inputClassName","isInvalid","labelClassName","name","onChange","value","dataTestId","id","type","htmlFor","displayName"],"sources":["../src/RadioItem.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport classNames from 'classnames';\nimport { nanoid } from 'nanoid';\n\ntype RadioItemProps = {\n /** Whether this value is currently checked or not */\n checked?: boolean;\n\n /** The node/text to put in the label of this radio item */\n children: React.ReactNode;\n\n /** An extra class name to add to the outer div component */\n className?: string;\n\n /** An extra class for disabling the radio button component */\n disabled?: boolean;\n\n /** An extra class name for the input component */\n inputClassName?: string;\n\n /** The value is invalid, style to show it's invalid */\n isInvalid?: boolean;\n\n /** An extra class name for the label component */\n labelClassName?: string;\n\n /** The name for this RadioItem. Should be specified by the parent Radio component */\n name?: string;\n\n /** Triggered when the input is checked/unchecked. Provided by the parent Radio component. */\n onChange?: React.ChangeEventHandler<HTMLInputElement>;\n\n /** The value to associate with this radio item */\n value: string;\n\n /** An id used for test */\n 'data-testid'?: string;\n};\n\n/**\n * A RadioItem to be used within the Radio component.\n */\nconst RadioItem = React.forwardRef<HTMLInputElement, RadioItemProps>(\n (props: RadioItemProps, ref) => {\n const {\n checked,\n children,\n className = '',\n disabled = false,\n inputClassName = '',\n isInvalid = false,\n labelClassName = '',\n name,\n onChange,\n value,\n 'data-testid': dataTestId,\n } = props;\n\n const [id] = useState(nanoid());\n\n return (\n <div className={classNames('custom-control custom-radio', className)}>\n <input\n type=\"radio\"\n id={id}\n data-testid={dataTestId}\n name={name}\n ref={ref}\n className={classNames('custom-control-input', inputClassName, {\n 'is-invalid': isInvalid,\n })}\n checked={checked}\n disabled={disabled}\n value={value}\n onChange={onChange}\n />\n <label\n className={classNames('custom-control-label', labelClassName)}\n htmlFor={id}\n >\n {children}\n </label>\n </div>\n );\n }\n);\n\nRadioItem.displayName = 'RadioItem';\n\nexport default RadioItem;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,MAAM,QAAQ,QAAQ;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAqChC;AACA;AACA;AACA,IAAMC,SAAS,gBAAGR,KAAK,CAACS,UAAU,CAChC,CAACC,KAAqB,EAAEC,GAAG,KAAK;EAC9B,IAAM;IACJC,OAAO;IACPC,QAAQ;IACRC,SAAS,GAAG,EAAE;IACdC,QAAQ,GAAG,KAAK;IAChBC,cAAc,GAAG,EAAE;IACnBC,SAAS,GAAG,KAAK;IACjBC,cAAc,GAAG,EAAE;IACnBC,IAAI;IACJC,QAAQ;IACRC,KAAK;IACL,aAAa,EAAEC;EACjB,CAAC,GAAGZ,KAAK;EAET,IAAM,CAACa,EAAE,CAAC,GAAGtB,QAAQ,CAACE,MAAM,CAAC,CAAC,CAAC;EAE/B,oBACEI,KAAA;IAAKO,SAAS,EAAEZ,UAAU,CAAC,6BAA6B,EAAEY,SAAS,CAAE;IAAAD,QAAA,gBACnER,IAAA;MACEmB,IAAI,EAAC,OAAO;MACZD,EAAE,EAAEA,EAAG;MACP,eAAaD,UAAW;MACxBH,IAAI,EAAEA,IAAK;MACXR,GAAG,EAAEA,GAAI;MACTG,SAAS,EAAEZ,UAAU,CAAC,sBAAsB,EAAEc,cAAc,EAAE;QAC5D,YAAY,EAAEC;MAChB,CAAC,CAAE;MACHL,OAAO,EAAEA,OAAQ;MACjBG,QAAQ,EAAEA,QAAS;MACnBM,KAAK,EAAEA,KAAM;MACbD,QAAQ,EAAEA;IAAS,CACpB,CAAC,eACFf,IAAA;MACES,SAAS,EAAEZ,UAAU,CAAC,sBAAsB,EAAEgB,cAAc,CAAE;MAC9DO,OAAO,EAAEF,EAAG;MAAAV,QAAA,EAEXA;IAAQ,CACJ,CAAC;EAAA,CACL,CAAC;AAEV,CACF,CAAC;AAEDL,SAAS,CAACkB,WAAW,GAAG,WAAW;AAEnC,eAAelB,SAAS","ignoreList":[]}
1
+ {"version":3,"file":"RadioItem.js","names":["React","useState","classNames","nanoid","jsx","_jsx","jsxs","_jsxs","RadioItem","forwardRef","props","ref","checked","children","_props$className","className","_props$disabled","disabled","_props$inputClassName","inputClassName","_props$isInvalid","isInvalid","_props$labelClassName","labelClassName","name","onChange","value","dataTestId","_useState","_useState2","_slicedToArray","id","type","htmlFor","displayName"],"sources":["../src/RadioItem.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport classNames from 'classnames';\nimport { nanoid } from 'nanoid';\n\ntype RadioItemProps = {\n /** Whether this value is currently checked or not */\n checked?: boolean;\n\n /** The node/text to put in the label of this radio item */\n children: React.ReactNode;\n\n /** An extra class name to add to the outer div component */\n className?: string;\n\n /** An extra class for disabling the radio button component */\n disabled?: boolean;\n\n /** An extra class name for the input component */\n inputClassName?: string;\n\n /** The value is invalid, style to show it's invalid */\n isInvalid?: boolean;\n\n /** An extra class name for the label component */\n labelClassName?: string;\n\n /** The name for this RadioItem. Should be specified by the parent Radio component */\n name?: string;\n\n /** Triggered when the input is checked/unchecked. Provided by the parent Radio component. */\n onChange?: React.ChangeEventHandler<HTMLInputElement>;\n\n /** The value to associate with this radio item */\n value: string;\n\n /** An id used for test */\n 'data-testid'?: string;\n};\n\n/**\n * A RadioItem to be used within the Radio component.\n */\nconst RadioItem = React.forwardRef<HTMLInputElement, RadioItemProps>(\n (props: RadioItemProps, ref) => {\n const {\n checked,\n children,\n className = '',\n disabled = false,\n inputClassName = '',\n isInvalid = false,\n labelClassName = '',\n name,\n onChange,\n value,\n 'data-testid': dataTestId,\n } = props;\n\n const [id] = useState(nanoid());\n\n return (\n <div className={classNames('custom-control custom-radio', className)}>\n <input\n type=\"radio\"\n id={id}\n data-testid={dataTestId}\n name={name}\n ref={ref}\n className={classNames('custom-control-input', inputClassName, {\n 'is-invalid': isInvalid,\n })}\n checked={checked}\n disabled={disabled}\n value={value}\n onChange={onChange}\n />\n <label\n className={classNames('custom-control-label', labelClassName)}\n htmlFor={id}\n >\n {children}\n </label>\n </div>\n );\n }\n);\n\nRadioItem.displayName = 'RadioItem';\n\nexport default RadioItem;\n"],"mappings":";;;;;;AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,MAAM,QAAQ,QAAQ;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAqChC;AACA;AACA;AACA,IAAMC,SAAS,gBAAGR,KAAK,CAACS,UAAU,CAChC,CAACC,KAAqB,EAAEC,GAAG,KAAK;EAC9B,IACEC,OAAO,GAWLF,KAAK,CAXPE,OAAO;IACPC,QAAQ,GAUNH,KAAK,CAVPG,QAAQ;IAAAC,gBAAA,GAUNJ,KAAK,CATPK,SAAS;IAATA,SAAS,GAAAD,gBAAA,cAAG,EAAE,GAAAA,gBAAA;IAAAE,eAAA,GASZN,KAAK,CARPO,QAAQ;IAARA,QAAQ,GAAAD,eAAA,cAAG,KAAK,GAAAA,eAAA;IAAAE,qBAAA,GAQdR,KAAK,CAPPS,cAAc;IAAdA,cAAc,GAAAD,qBAAA,cAAG,EAAE,GAAAA,qBAAA;IAAAE,gBAAA,GAOjBV,KAAK,CANPW,SAAS;IAATA,SAAS,GAAAD,gBAAA,cAAG,KAAK,GAAAA,gBAAA;IAAAE,qBAAA,GAMfZ,KAAK,CALPa,cAAc;IAAdA,cAAc,GAAAD,qBAAA,cAAG,EAAE,GAAAA,qBAAA;IACnBE,IAAI,GAIFd,KAAK,CAJPc,IAAI;IACJC,QAAQ,GAGNf,KAAK,CAHPe,QAAQ;IACRC,KAAK,GAEHhB,KAAK,CAFPgB,KAAK;IACUC,UAAU,GACvBjB,KAAK,CADP,aAAa;EAGf,IAAAkB,SAAA,GAAa3B,QAAQ,CAACE,MAAM,CAAC,CAAC,CAAC;IAAA0B,UAAA,GAAAC,cAAA,CAAAF,SAAA;IAAxBG,EAAE,GAAAF,UAAA;EAET,oBACEtB,KAAA;IAAKQ,SAAS,EAAEb,UAAU,CAAC,6BAA6B,EAAEa,SAAS,CAAE;IAAAF,QAAA,gBACnER,IAAA;MACE2B,IAAI,EAAC,OAAO;MACZD,EAAE,EAAEA,EAAG;MACP,eAAaJ,UAAW;MACxBH,IAAI,EAAEA,IAAK;MACXb,GAAG,EAAEA,GAAI;MACTI,SAAS,EAAEb,UAAU,CAAC,sBAAsB,EAAEiB,cAAc,EAAE;QAC5D,YAAY,EAAEE;MAChB,CAAC,CAAE;MACHT,OAAO,EAAEA,OAAQ;MACjBK,QAAQ,EAAEA,QAAS;MACnBS,KAAK,EAAEA,KAAM;MACbD,QAAQ,EAAEA;IAAS,CACpB,CAAC,eACFpB,IAAA;MACEU,SAAS,EAAEb,UAAU,CAAC,sBAAsB,EAAEqB,cAAc,CAAE;MAC9DU,OAAO,EAAEF,EAAG;MAAAlB,QAAA,EAEXA;IAAQ,CACJ,CAAC;EAAA,CACL,CAAC;AAEV,CACF,CAAC;AAEDL,SAAS,CAAC0B,WAAW,GAAG,WAAW;AAEnC,eAAe1B,SAAS","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
  /* eslint-disable react-hooks/exhaustive-deps */
2
8
  /* eslint-disable react/display-name */
3
9
 
@@ -35,13 +41,15 @@ function getRandomAreaPlotAnimationThemeColors() {
35
41
 
36
42
  // Draw a background canvas, paint it with a fun chart looking animation
37
43
  var RandomAreaPlotAnimation = /*#__PURE__*/React.memo(() => {
38
- var {
39
- activeThemes
40
- } = useTheme();
44
+ var _useTheme = useTheme(),
45
+ activeThemes = _useTheme.activeThemes;
41
46
  var themeColors = useMemo(getRandomAreaPlotAnimationThemeColors, [activeThemes]);
42
47
  var canvas = useRef(null);
43
48
  var container = useRef(null);
44
- var [shade, setShade] = useState(false);
49
+ var _useState = useState(false),
50
+ _useState2 = _slicedToArray(_useState, 2),
51
+ shade = _useState2[0],
52
+ setShade = _useState2[1];
45
53
  var scale = window.devicePixelRatio;
46
54
  var ctx;
47
55
  var pattern;
@@ -68,10 +76,8 @@ var RandomAreaPlotAnimation = /*#__PURE__*/React.memo(() => {
68
76
 
69
77
  // Returns the background fill create offscreen as pattern
70
78
  function createPatternFill() {
71
- var {
72
- foregroundFill,
73
- foregroundStroke
74
- } = themeColors;
79
+ var foregroundFill = themeColors.foregroundFill,
80
+ foregroundStroke = themeColors.foregroundStroke;
75
81
 
76
82
  // create the off-screen canvas
77
83
  var canvasPattern = document.createElement('canvas');
@@ -164,11 +170,9 @@ var RandomAreaPlotAnimation = /*#__PURE__*/React.memo(() => {
164
170
  */
165
171
  function drawCanvas(timestamp) {
166
172
  lastTimestamp = lastTimestamp !== null && lastTimestamp !== void 0 ? lastTimestamp : timestamp;
167
- var {
168
- background,
169
- foregroundStroke,
170
- gridColor
171
- } = themeColors;
173
+ var background = themeColors.background,
174
+ foregroundStroke = themeColors.foregroundStroke,
175
+ gridColor = themeColors.gridColor;
172
176
  assertNotNull(ctx);
173
177
  // clear the canvas
174
178
  ctx.fillStyle = background;