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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/dist/AutoCompleteInput.js +12 -85
  2. package/dist/AutoCompleteInput.js.map +1 -1
  3. package/dist/AutoResizeTextarea.d.ts +5 -5
  4. package/dist/AutoResizeTextarea.d.ts.map +1 -1
  5. package/dist/AutoResizeTextarea.js +8 -23
  6. package/dist/AutoResizeTextarea.js.map +1 -1
  7. package/dist/BasicModal.d.ts +28 -1
  8. package/dist/BasicModal.d.ts.map +1 -1
  9. package/dist/BasicModal.js +2 -8
  10. package/dist/BasicModal.js.map +1 -1
  11. package/dist/Button.d.ts +9 -9
  12. package/dist/Button.d.ts.map +1 -1
  13. package/dist/Button.js +8 -34
  14. package/dist/Button.js.map +1 -1
  15. package/dist/ButtonGroup.d.ts +7 -7
  16. package/dist/ButtonGroup.d.ts.map +1 -1
  17. package/dist/ButtonGroup.js +2 -4
  18. package/dist/ButtonGroup.js.map +1 -1
  19. package/dist/ButtonOld.js.map +1 -1
  20. package/dist/CardFlip.d.ts +2 -2
  21. package/dist/CardFlip.d.ts.map +1 -1
  22. package/dist/CardFlip.js +2 -7
  23. package/dist/CardFlip.js.map +1 -1
  24. package/dist/Checkbox.js +3 -14
  25. package/dist/Checkbox.js.map +1 -1
  26. package/dist/Collapse.d.ts +1 -1
  27. package/dist/Collapse.js +0 -15
  28. package/dist/Collapse.js.map +1 -1
  29. package/dist/ComboBox.js +4 -83
  30. package/dist/ComboBox.js.map +1 -1
  31. package/dist/CopyButton.d.ts +22 -0
  32. package/dist/CopyButton.d.ts.map +1 -0
  33. package/dist/CopyButton.js +30 -0
  34. package/dist/CopyButton.js.map +1 -0
  35. package/dist/CustomTimeSelect.d.ts +3 -3
  36. package/dist/CustomTimeSelect.d.ts.map +1 -1
  37. package/dist/CustomTimeSelect.js +2 -86
  38. package/dist/CustomTimeSelect.js.map +1 -1
  39. package/dist/DateInput.d.ts +1 -1
  40. package/dist/DateInput.d.ts.map +1 -1
  41. package/dist/DateInput.js.map +1 -1
  42. package/dist/DateInputUtils.js +0 -7
  43. package/dist/DateInputUtils.js.map +1 -1
  44. package/dist/DateTimeInput.d.ts +1 -1
  45. package/dist/DateTimeInput.d.ts.map +1 -1
  46. package/dist/DateTimeInput.js +7 -10
  47. package/dist/DateTimeInput.js.map +1 -1
  48. package/dist/DebouncedSearchInput.js +0 -14
  49. package/dist/DebouncedSearchInput.js.map +1 -1
  50. package/dist/DragUtils.d.ts +1 -1
  51. package/dist/DragUtils.d.ts.map +1 -1
  52. package/dist/DragUtils.js +4 -16
  53. package/dist/DragUtils.js.map +1 -1
  54. package/dist/DraggableItemList.d.ts +4 -4
  55. package/dist/DraggableItemList.d.ts.map +1 -1
  56. package/dist/DraggableItemList.js +22 -44
  57. package/dist/DraggableItemList.js.map +1 -1
  58. package/dist/EditableItemList.d.ts +1 -1
  59. package/dist/EditableItemList.d.ts.map +1 -1
  60. package/dist/EditableItemList.js +2 -6
  61. package/dist/EditableItemList.js.map +1 -1
  62. package/dist/HierarchicalCheckboxMenu.d.ts +3 -3
  63. package/dist/HierarchicalCheckboxMenu.d.ts.map +1 -1
  64. package/dist/HierarchicalCheckboxMenu.js +6 -28
  65. package/dist/HierarchicalCheckboxMenu.js.map +1 -1
  66. package/dist/ItemList.d.ts +5 -5
  67. package/dist/ItemList.d.ts.map +1 -1
  68. package/dist/ItemList.js +22 -115
  69. package/dist/ItemList.js.map +1 -1
  70. package/dist/ItemListItem.d.ts +0 -1
  71. package/dist/ItemListItem.d.ts.map +1 -1
  72. package/dist/ItemListItem.js +26 -50
  73. package/dist/ItemListItem.js.map +1 -1
  74. package/dist/LoadingOverlay.d.ts +2 -2
  75. package/dist/LoadingOverlay.d.ts.map +1 -1
  76. package/dist/LoadingOverlay.js +3 -5
  77. package/dist/LoadingOverlay.js.map +1 -1
  78. package/dist/LoadingSpinner.d.ts +2 -2
  79. package/dist/LoadingSpinner.d.ts.map +1 -1
  80. package/dist/LoadingSpinner.js +2 -4
  81. package/dist/LoadingSpinner.js.map +1 -1
  82. package/dist/MaskedInput.d.ts +2 -2
  83. package/dist/MaskedInput.d.ts.map +1 -1
  84. package/dist/MaskedInput.js +26 -85
  85. package/dist/MaskedInput.js.map +1 -1
  86. package/dist/Option.d.ts +2 -2
  87. package/dist/Option.d.ts.map +1 -1
  88. package/dist/Option.js +2 -4
  89. package/dist/Option.js.map +1 -1
  90. package/dist/RadioGroup.d.ts +2 -2
  91. package/dist/RadioGroup.d.ts.map +1 -1
  92. package/dist/RadioGroup.js +4 -6
  93. package/dist/RadioGroup.js.map +1 -1
  94. package/dist/RadioItem.d.ts +1 -1
  95. package/dist/RadioItem.d.ts.map +1 -1
  96. package/dist/RadioItem.js +0 -1
  97. package/dist/RadioItem.js.map +1 -1
  98. package/dist/SearchInput.js +2 -13
  99. package/dist/SearchInput.js.map +1 -1
  100. package/dist/Select.d.ts +2 -2
  101. package/dist/Select.d.ts.map +1 -1
  102. package/dist/Select.js +2 -4
  103. package/dist/Select.js.map +1 -1
  104. package/dist/SelectValueList.d.ts +1 -1
  105. package/dist/SelectValueList.d.ts.map +1 -1
  106. package/dist/SelectValueList.js +0 -28
  107. package/dist/SelectValueList.js.map +1 -1
  108. package/dist/SocketedButton.d.ts +1 -1
  109. package/dist/SocketedButton.d.ts.map +1 -1
  110. package/dist/SocketedButton.js.map +1 -1
  111. package/dist/ThemeExport.d.ts +4 -4
  112. package/dist/ThemeExport.js +0 -4
  113. package/dist/ThemeExport.js.map +1 -1
  114. package/dist/TimeInput.d.ts +2 -2
  115. package/dist/TimeInput.d.ts.map +1 -1
  116. package/dist/TimeInput.js +2 -12
  117. package/dist/TimeInput.js.map +1 -1
  118. package/dist/TimeSlider.d.ts +2 -2
  119. package/dist/TimeSlider.d.ts.map +1 -1
  120. package/dist/TimeSlider.js +19 -33
  121. package/dist/TimeSlider.js.map +1 -1
  122. package/dist/ToastNotification.d.ts +6 -6
  123. package/dist/ToastNotification.d.ts.map +1 -1
  124. package/dist/ToastNotification.js +2 -4
  125. package/dist/ToastNotification.js.map +1 -1
  126. package/dist/UISwitch.d.ts +2 -2
  127. package/dist/UISwitch.d.ts.map +1 -1
  128. package/dist/UISwitch.js +2 -4
  129. package/dist/UISwitch.js.map +1 -1
  130. package/dist/ValidateLabelInput.d.ts +1 -1
  131. package/dist/ValidateLabelInput.d.ts.map +1 -1
  132. package/dist/ValidateLabelInput.js +3 -3
  133. package/dist/ValidateLabelInput.js.map +1 -1
  134. package/dist/context-actions/ContextActionUtils.d.ts +3 -15
  135. package/dist/context-actions/ContextActionUtils.d.ts.map +1 -1
  136. package/dist/context-actions/ContextActionUtils.js +8 -85
  137. package/dist/context-actions/ContextActionUtils.js.map +1 -1
  138. package/dist/context-actions/ContextActions.js +1 -34
  139. package/dist/context-actions/ContextActions.js.map +1 -1
  140. package/dist/context-actions/ContextMenu.js +29 -110
  141. package/dist/context-actions/ContextMenu.js.map +1 -1
  142. package/dist/context-actions/ContextMenuItem.d.ts.map +1 -1
  143. package/dist/context-actions/ContextMenuItem.js +3 -19
  144. package/dist/context-actions/ContextMenuItem.js.map +1 -1
  145. package/dist/context-actions/ContextMenuRoot.d.ts +1 -1
  146. package/dist/context-actions/ContextMenuRoot.d.ts.map +1 -1
  147. package/dist/context-actions/ContextMenuRoot.js +7 -26
  148. package/dist/context-actions/ContextMenuRoot.js.map +1 -1
  149. package/dist/context-actions/GlobalContextAction.js +0 -15
  150. package/dist/context-actions/GlobalContextAction.js.map +1 -1
  151. package/dist/context-actions/GlobalContextActions.js +0 -6
  152. package/dist/context-actions/GlobalContextActions.js.map +1 -1
  153. package/dist/context-actions/index.js.map +1 -1
  154. package/dist/index.d.ts +1 -0
  155. package/dist/index.d.ts.map +1 -1
  156. package/dist/index.js +1 -0
  157. package/dist/index.js.map +1 -1
  158. package/dist/menu-actions/DropdownMenu.d.ts +3 -3
  159. package/dist/menu-actions/DropdownMenu.d.ts.map +1 -1
  160. package/dist/menu-actions/DropdownMenu.js +4 -32
  161. package/dist/menu-actions/DropdownMenu.js.map +1 -1
  162. package/dist/menu-actions/Menu.d.ts +3 -3
  163. package/dist/menu-actions/Menu.d.ts.map +1 -1
  164. package/dist/menu-actions/Menu.js +7 -52
  165. package/dist/menu-actions/Menu.js.map +1 -1
  166. package/dist/menu-actions/index.d.ts +2 -1
  167. package/dist/menu-actions/index.d.ts.map +1 -1
  168. package/dist/menu-actions/index.js +2 -2
  169. package/dist/menu-actions/index.js.map +1 -1
  170. package/dist/modal/Modal.d.ts +2 -2
  171. package/dist/modal/Modal.d.ts.map +1 -1
  172. package/dist/modal/Modal.js +3 -9
  173. package/dist/modal/Modal.js.map +1 -1
  174. package/dist/modal/ModalBody.d.ts +1 -1
  175. package/dist/modal/ModalBody.d.ts.map +1 -1
  176. package/dist/modal/ModalBody.js +2 -4
  177. package/dist/modal/ModalBody.js.map +1 -1
  178. package/dist/modal/ModalFooter.d.ts +1 -1
  179. package/dist/modal/ModalFooter.d.ts.map +1 -1
  180. package/dist/modal/ModalFooter.js +2 -4
  181. package/dist/modal/ModalFooter.js.map +1 -1
  182. package/dist/modal/ModalHeader.d.ts +1 -1
  183. package/dist/modal/ModalHeader.d.ts.map +1 -1
  184. package/dist/modal/ModalHeader.js +2 -4
  185. package/dist/modal/ModalHeader.js.map +1 -1
  186. package/dist/modal/index.js.map +1 -1
  187. package/dist/navigation/Menu.d.ts +3 -3
  188. package/dist/navigation/Menu.d.ts.map +1 -1
  189. package/dist/navigation/Menu.js +2 -2
  190. package/dist/navigation/Menu.js.map +1 -1
  191. package/dist/navigation/MenuItem.d.ts +4 -4
  192. package/dist/navigation/MenuItem.d.ts.map +1 -1
  193. package/dist/navigation/MenuItem.js +4 -7
  194. package/dist/navigation/MenuItem.js.map +1 -1
  195. package/dist/navigation/Page.d.ts +2 -2
  196. package/dist/navigation/Page.d.ts.map +1 -1
  197. package/dist/navigation/Page.js +2 -3
  198. package/dist/navigation/Page.js.map +1 -1
  199. package/dist/navigation/Stack.d.ts +2 -2
  200. package/dist/navigation/Stack.d.ts.map +1 -1
  201. package/dist/navigation/Stack.js +3 -6
  202. package/dist/navigation/Stack.js.map +1 -1
  203. package/dist/navigation/index.js.map +1 -1
  204. package/dist/popper/Popper.d.ts +2 -2
  205. package/dist/popper/Popper.d.ts.map +1 -1
  206. package/dist/popper/Popper.js +13 -46
  207. package/dist/popper/Popper.js.map +1 -1
  208. package/dist/popper/Tooltip.d.ts +1 -1
  209. package/dist/popper/Tooltip.d.ts.map +1 -1
  210. package/dist/popper/Tooltip.js +0 -56
  211. package/dist/popper/Tooltip.js.map +1 -1
  212. package/dist/popper/index.js.map +1 -1
  213. package/dist/shortcuts/GlobalShortcuts.js.map +1 -1
  214. package/dist/shortcuts/Shortcut.d.ts +2 -2
  215. package/dist/shortcuts/Shortcut.d.ts.map +1 -1
  216. package/dist/shortcuts/Shortcut.js +19 -76
  217. package/dist/shortcuts/Shortcut.js.map +1 -1
  218. package/dist/shortcuts/ShortcutRegistry.d.ts +1 -1
  219. package/dist/shortcuts/ShortcutRegistry.d.ts.map +1 -1
  220. package/dist/shortcuts/ShortcutRegistry.js +3 -18
  221. package/dist/shortcuts/ShortcutRegistry.js.map +1 -1
  222. package/dist/shortcuts/index.js.map +1 -1
  223. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"LoadingSpinner.js","names":["React","classNames","FontAwesomeIcon","vsCircleLargeOutline","vsLoading","LoadingSpinner","className","dataTestId"],"sources":["../src/LoadingSpinner.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsCircleLargeOutline, vsLoading } from '@deephaven/icons';\nimport './LoadingSpinner.scss';\n\ntype LoadingSpinnerProps = {\n className?: string;\n 'data-testid'?: string;\n};\n\nconst LoadingSpinner = ({\n className = '',\n 'data-testid': dataTestId,\n}: LoadingSpinnerProps): JSX.Element => (\n <div\n className={classNames('loading-spinner fa-layers', className)}\n data-testid={dataTestId}\n >\n <FontAwesomeIcon icon={vsCircleLargeOutline} className=\"text-white-50\" />\n <FontAwesomeIcon icon={vsLoading} className=\"text-primary\" spin />\n </div>\n);\n\nexport default LoadingSpinner;\n"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,oBAAT,EAA+BC,SAA/B,QAAgD,kBAAhD;;;AAQA,IAAMC,cAAc,GAAG;EAAA,IAAC;IACtBC,SAAS,GAAG,EADU;IAEtB,eAAeC;EAFO,CAAD;EAAA,oBAIrB;IACE,SAAS,EAAEN,UAAU,CAAC,2BAAD,EAA8BK,SAA9B,CADvB;IAEE,eAAaC;EAFf,gBAIE,oBAAC,eAAD;IAAiB,IAAI,EAAEJ,oBAAvB;IAA6C,SAAS,EAAC;EAAvD,EAJF,eAKE,oBAAC,eAAD;IAAiB,IAAI,EAAEC,SAAvB;IAAkC,SAAS,EAAC,cAA5C;IAA2D,IAAI;EAA/D,EALF,CAJqB;AAAA,CAAvB;;AAaA,eAAeC,cAAf"}
1
+ {"version":3,"file":"LoadingSpinner.js","names":["React","classNames","FontAwesomeIcon","vsCircleLargeOutline","vsLoading","LoadingSpinner","className","dataTestId"],"sources":["../src/LoadingSpinner.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsCircleLargeOutline, vsLoading } from '@deephaven/icons';\nimport './LoadingSpinner.scss';\n\ntype LoadingSpinnerProps = {\n className?: string;\n 'data-testid'?: string;\n};\n\nfunction LoadingSpinner({\n className = '',\n 'data-testid': dataTestId,\n}: LoadingSpinnerProps): JSX.Element {\n return (\n <div\n className={classNames('loading-spinner fa-layers', className)}\n data-testid={dataTestId}\n >\n <FontAwesomeIcon icon={vsCircleLargeOutline} className=\"text-white-50\" />\n <FontAwesomeIcon icon={vsLoading} className=\"text-primary\" spin />\n </div>\n );\n}\n\nexport default LoadingSpinner;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,oBAAoB,EAAEC,SAAS,QAAQ,kBAAkB;AAAC;AAQnE,SAASC,cAAc,OAGc;EAAA,IAHb;IACtBC,SAAS,GAAG,EAAE;IACd,aAAa,EAAEC;EACI,CAAC;EACpB,oBACE;IACE,SAAS,EAAEN,UAAU,CAAC,2BAA2B,EAAEK,SAAS,CAAE;IAC9D,eAAaC;EAAW,gBAExB,oBAAC,eAAe;IAAC,IAAI,EAAEJ,oBAAqB;IAAC,SAAS,EAAC;EAAe,EAAG,eACzE,oBAAC,eAAe;IAAC,IAAI,EAAEC,SAAU;IAAC,SAAS,EAAC,cAAc;IAAC,IAAI;EAAA,EAAG,CAC9D;AAEV;AAEA,eAAeC,cAAc"}
@@ -21,12 +21,12 @@ export declare function fillToLength(checkValue: string, exampleValue: string, l
21
21
  * @returns Trimmed string
22
22
  */
23
23
  export declare function trimTrailingMask(value: string, emptyMask: string): string;
24
- export declare type SelectionSegment = {
24
+ export type SelectionSegment = {
25
25
  selectionStart: number;
26
26
  selectionEnd: number;
27
27
  selectionDirection?: typeof SELECTION_DIRECTION[keyof typeof SELECTION_DIRECTION];
28
28
  };
29
- declare type MaskedInputProps = {
29
+ type MaskedInputProps = {
30
30
  /** An extra class name to add to the component */
31
31
  className?: string;
32
32
  /** The regex pattern this masked input must match */
@@ -1 +1 @@
1
- {"version":3,"file":"MaskedInput.d.ts","sourceRoot":"","sources":["../src/MaskedInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAI/D,OAAO,oBAAoB,CAAC;AAI5B,QAAA,MAAM,mBAAmB;;;;CAIf,CAAC;AAQX,wBAAgB,wCAAwC,CACtD,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GACd,MAAM,CAMR;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,MAAM,CAIR;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAUzE;AAED,oBAAY,gBAAgB,GAAG;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,OAAO,mBAAmB,CAAC,MAAM,OAAO,mBAAmB,CAAC,CAAC;CACnF,CAAC;AAEF,aAAK,gBAAgB,GAAG;IACtB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,2IAA2I;IAC3I,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,iDAAiD;IACjD,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,6EAA6E;IAC7E,QAAQ,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,oCAAoC;IACpC,QAAQ,CAAC,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC3C,qDAAqD;IACrD,mBAAmB,CAAC,CAClB,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GACZ,MAAM,CAAC;IACV,6BAA6B,CAAC,CAC5B,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,GACnB,MAAM,CAAC;IACV,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC;IAClC,MAAM,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC;IAEjC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;GAGG;AAIH,QAAA,MAAM,WAAW,2FAwdhB,CAAC;AAuBF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"MaskedInput.d.ts","sourceRoot":"","sources":["../src/MaskedInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAI/D,OAAO,oBAAoB,CAAC;AAI5B,QAAA,MAAM,mBAAmB;;;;CAIf,CAAC;AAQX,wBAAgB,wCAAwC,CACtD,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GACd,MAAM,CAMR;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,MAAM,CAIR;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAUzE;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,OAAO,mBAAmB,CAAC,MAAM,OAAO,mBAAmB,CAAC,CAAC;CACnF,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,2IAA2I;IAC3I,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,iDAAiD;IACjD,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,6EAA6E;IAC7E,QAAQ,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,oCAAoC;IACpC,QAAQ,CAAC,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC3C,qDAAqD;IACrD,mBAAmB,CAAC,CAClB,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GACZ,MAAM,CAAC;IACV,6BAA6B,CAAC,CAC5B,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,GACnB,MAAM,CAAC;IACV,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC;IAClC,MAAM,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC;IAEjC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;GAGG;AAIH,QAAA,MAAM,WAAW,2FAwdhB,CAAC;AAuBF,eAAe,WAAW,CAAC"}
@@ -1,9 +1,6 @@
1
1
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
-
3
2
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
-
5
3
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
-
7
4
  import React, { useMemo, useEffect, useCallback } from 'react';
8
5
  import classNames from 'classnames';
9
6
  import Log from '@deephaven/log';
@@ -15,15 +12,16 @@ var SELECTION_DIRECTION = {
15
12
  BACKWARD: 'backward',
16
13
  NONE: 'none'
17
14
  };
15
+
18
16
  /**
19
17
  * Special space character that's the same size as tabular numbers
20
18
  * https://www.fileformat.info/info/unicode/char/2007/index.htm
21
19
  */
22
-
23
20
  var FIXED_WIDTH_SPACE = '\u2007';
24
21
  export function DEFAULT_GET_PREFERRED_REPLACEMENT_STRING(value, replaceIndex, newChar) {
25
22
  return value.substring(0, replaceIndex) + newChar + value.substring(replaceIndex + 1);
26
23
  }
24
+
27
25
  /**
28
26
  * Fill the string on the right side with the example value to the given length
29
27
  * @param checkValue Initial string to pad
@@ -31,22 +29,20 @@ export function DEFAULT_GET_PREFERRED_REPLACEMENT_STRING(value, replaceIndex, ne
31
29
  * @param length Target length
32
30
  * @returns String padded with the given example value
33
31
  */
34
-
35
32
  export function fillToLength(checkValue, exampleValue, length) {
36
33
  return checkValue.length < length ? "".concat(checkValue).concat(exampleValue.substring(checkValue.length, length)) : checkValue;
37
34
  }
35
+
38
36
  /**
39
37
  * Trim all characters matching the empty mask on the right side of the given value
40
38
  * @param value String to trim
41
39
  * @param emptyMask Empty mask
42
40
  * @returns Trimmed string
43
41
  */
44
-
45
42
  export function trimTrailingMask(value, emptyMask) {
46
43
  var {
47
44
  length
48
45
  } = value;
49
-
50
46
  for (var i = value.length - 1; i >= 0; i -= 1) {
51
47
  if (emptyMask[i] === value[i]) {
52
48
  length = i;
@@ -54,10 +50,8 @@ export function trimTrailingMask(value, emptyMask) {
54
50
  break;
55
51
  }
56
52
  }
57
-
58
53
  return value.substring(0, length);
59
54
  }
60
-
61
55
  /**
62
56
  * A masked input for entering data from a template.
63
57
  * Won't work by itself, must use within another component and handle updating the value/selection.
@@ -87,7 +81,6 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
87
81
  useEffect(function setSelectedSegment() {
88
82
  if (selection != null) {
89
83
  var _input$current;
90
-
91
84
  log.debug('setting selection...', selection);
92
85
  var {
93
86
  selectionStart: _selectionStart,
@@ -98,32 +91,27 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
98
91
  log.debug('selection set!');
99
92
  }
100
93
  }, [selection, input]);
94
+
101
95
  /**
102
96
  * Returns the selection range for the segment at the given cursor position
103
97
  * @param cursorPosition The current position of the cursor
104
98
  */
105
-
106
99
  var getSegment = useCallback(cursorPosition => {
107
100
  var selectionStart = cursorPosition;
108
101
  var selectionEnd = cursorPosition;
109
102
  var testValue = examples.length > 0 ? examples[0] : value;
110
-
111
103
  for (var i = selectionStart - 1; i >= 0; i -= 1) {
112
104
  if (!/[a-zA-Z0-9]/g.test(testValue.charAt(i))) {
113
105
  break;
114
106
  }
115
-
116
107
  selectionStart = i;
117
108
  }
118
-
119
109
  for (var _i = selectionEnd; _i < testValue.length; _i += 1) {
120
110
  if (!/[a-zA-Z0-9]/g.test(testValue.charAt(_i))) {
121
111
  break;
122
112
  }
123
-
124
113
  selectionEnd = _i + 1;
125
114
  }
126
-
127
115
  var selectionDirection = selectionStart === selectionEnd ? SELECTION_DIRECTION.NONE : SELECTION_DIRECTION.BACKWARD;
128
116
  return {
129
117
  selectionStart,
@@ -131,6 +119,7 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
131
119
  selectionDirection
132
120
  };
133
121
  }, [examples, value]);
122
+
134
123
  /**
135
124
  * Replaces all blank spaces and everything after the current cursor position with the example value
136
125
  * @param checkValue The value to check/fill in
@@ -138,11 +127,9 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
138
127
  * @param cursorPosition The cursor position
139
128
  * @returns The filled in value
140
129
  */
141
-
142
130
  function fillValue(checkValue, exampleValue) {
143
131
  var cursorPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : checkValue.length;
144
132
  var filledValue = '';
145
-
146
133
  for (var i = 0; i < cursorPosition; i += 1) {
147
134
  if (checkValue.charAt(i) !== FIXED_WIDTH_SPACE) {
148
135
  filledValue = filledValue.concat(checkValue[i]);
@@ -150,101 +137,82 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
150
137
  filledValue = filledValue.concat(exampleValue[i]);
151
138
  }
152
139
  }
153
-
154
140
  filledValue = filledValue.concat(exampleValue.substring(cursorPosition));
155
141
  return filledValue;
156
142
  }
143
+
157
144
  /**
158
145
  * Checks if a given `value` is valid up until the `cursorPosition`.
159
146
  * Uses the examples to build the rest of the string
160
147
  * @param checkValue The value to check validity of
161
148
  * @param cursorPosition The position of the cursor to check up to
162
149
  */
163
-
164
-
165
150
  function isValid(checkValue) {
166
151
  var cursorPosition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : checkValue.length;
167
152
  var patternRegex = new RegExp("^".concat(pattern, "$"));
168
-
169
153
  if (patternRegex.test(checkValue)) {
170
154
  return true;
171
155
  }
172
-
173
156
  for (var i = 0; i < examples.length; i += 1) {
174
157
  var filledValue = fillValue(checkValue, examples[i], cursorPosition);
175
-
176
158
  if (patternRegex.test(filledValue)) {
177
159
  return true;
178
160
  }
179
161
  }
180
-
181
162
  return false;
182
163
  }
164
+
183
165
  /**
184
166
  * Returns the next segment after the given position
185
167
  * @param position The cursor position to start at
186
168
  * @returns The new selection range
187
169
  */
188
-
189
-
190
170
  function nextSegment(position) {
191
171
  var currentSegment = getSegment(position);
192
172
  var nextPosition = currentSegment.selectionEnd + 1;
193
-
194
173
  if (nextPosition >= value.length) {
195
174
  return currentSegment;
196
175
  }
197
-
198
176
  return getSegment(nextPosition);
199
177
  }
178
+
200
179
  /**
201
180
  * Returns the previous segment before the given position
202
181
  * @param position The cursor position to start at
203
182
  * @returns The new selection range
204
183
  */
205
-
206
-
207
184
  function previousSegment(position) {
208
185
  var currentSegment = getSegment(position);
209
186
  var previousPosition = currentSegment.selectionStart - 1;
210
-
211
187
  if (previousPosition <= 0) {
212
188
  return currentSegment;
213
189
  }
214
-
215
190
  return getSegment(previousPosition);
216
191
  }
217
-
218
192
  function nextSegmentValue(position, delta) {
219
193
  var segment = getSegment(position);
220
194
  var segmentValue = value.substring(segment.selectionStart, segment.selectionEnd);
221
195
  var newSegmentValue = getNextSegmentValue(segment, delta, segmentValue, value);
222
196
  var newValue = value.substring(0, segment.selectionStart) + newSegmentValue + value.substring(segment.selectionEnd);
223
-
224
197
  if (isValid(newValue, segment.selectionEnd)) {
225
198
  onChange(newValue);
226
199
  onSelect(segment);
227
200
  }
228
201
  }
229
-
230
202
  var handleSelect = useCallback(event => {
231
203
  var {
232
204
  selectionStart = 0,
233
205
  selectionEnd = 0,
234
206
  selectionDirection = 'none'
235
207
  } = event.target;
236
-
237
208
  if (selectionStart === null || selectionEnd === null || selectionDirection === null) {
238
209
  log.error('Selection attempted on non-text input element', event.target);
239
210
  return;
240
211
  }
241
-
242
212
  log.debug2('handleSelect', selectionStart, selectionEnd, selectionDirection);
243
-
244
213
  if (selection != null && selectionStart === selection.selectionStart && selectionEnd === selection.selectionEnd) {
245
214
  return;
246
215
  }
247
-
248
216
  if (selection != null && selectionStart === value.length && selectionEnd === value.length && event.nativeEvent.type !== 'mouseup') {
249
217
  // React triggers onSelect event with the cursor at the end of the input content
250
218
  // when the component is rendered at a different location in the DOM,
@@ -253,7 +221,6 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
253
221
  onSelect(_objectSpread({}, selection));
254
222
  return;
255
223
  }
256
-
257
224
  if (selectionStart === selectionEnd) {
258
225
  var newSelection = getSegment(selectionStart);
259
226
  log.debug('Selection segment from ', selectionStart, selectionEnd, '=>', newSelection);
@@ -268,28 +235,22 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
268
235
  }, [getSegment, onSelect, selection, value]);
269
236
  var handleSelectCapture = useCallback(event => {
270
237
  var _input$current$select;
271
-
272
238
  if (!input.current) {
273
239
  return;
274
240
  }
275
-
276
241
  log.debug('handleSelectCapture', event);
277
242
  var selectionStart = (_input$current$select = input.current.selectionStart) !== null && _input$current$select !== void 0 ? _input$current$select : 0;
278
-
279
243
  if (selectionStart === value.length && selection != null && selectionStart !== selection.selectionStart) {
280
244
  event.preventDefault();
281
245
  event.stopPropagation();
282
246
  }
283
247
  }, [input, selection, value]);
284
-
285
248
  function handleArrowKey(event) {
286
249
  event.preventDefault();
287
250
  event.stopPropagation();
288
-
289
251
  if (!input.current) {
290
252
  return;
291
253
  }
292
-
293
254
  var {
294
255
  key
295
256
  } = event;
@@ -297,12 +258,10 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
297
258
  selectionStart = 0,
298
259
  selectionEnd = 0
299
260
  } = input.current;
300
-
301
261
  if (selectionStart === null || selectionEnd === null) {
302
262
  log.error('Selection arrow nvaigation attempted on non-text input element', event.target);
303
263
  return;
304
264
  }
305
-
306
265
  if (key === 'ArrowLeft') {
307
266
  onSelect(previousSegment(selectionStart));
308
267
  } else if (key === 'ArrowRight') {
@@ -313,12 +272,10 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
313
272
  nextSegmentValue(selectionStart, 1);
314
273
  }
315
274
  }
316
-
317
275
  function handleKeyDown(event) {
318
276
  if (!input.current) {
319
277
  return;
320
278
  }
321
-
322
279
  log.debug('handleKeyDown', event);
323
280
  var {
324
281
  key
@@ -327,26 +284,24 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
327
284
  selectionStart = 0,
328
285
  selectionEnd = 0
329
286
  } = input.current;
330
-
331
287
  if (selectionStart === null || selectionEnd === null) {
332
288
  log.error('Selection key event on non-text input element', event.target);
333
289
  return;
334
290
  }
335
-
336
291
  if (key.startsWith('Arrow')) {
337
292
  handleArrowKey(event);
338
293
  return;
339
294
  }
340
-
341
295
  if (key === 'Delete' || key === 'Backspace') {
342
296
  event.preventDefault();
343
- event.stopPropagation(); // Deleting at the end of the value
297
+ event.stopPropagation();
344
298
 
299
+ // Deleting at the end of the value
345
300
  if (selectionEnd >= trimTrailingMask(value, emptyMask).length) {
346
- var newValue = value.substring(0, // Delete whole selection or just the char before the cursor
301
+ var newValue = value.substring(0,
302
+ // Delete whole selection or just the char before the cursor
347
303
  selectionStart === selectionEnd ? selectionStart - 1 : selectionStart);
348
304
  var trimmedValue = trimTrailingMask(newValue, emptyMask);
349
-
350
305
  if (trimmedValue !== value) {
351
306
  onChange(trimmedValue);
352
307
  onSelect({
@@ -355,14 +310,11 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
355
310
  selectionDirection: SELECTION_DIRECTION.NONE
356
311
  });
357
312
  }
358
-
359
313
  return;
360
314
  }
361
-
362
315
  if (selectionStart !== selectionEnd) {
363
316
  // Replace all non-masked characters with blanks, set selection to start
364
317
  var _newValue = value.substring(0, selectionStart) + value.substring(selectionStart, selectionEnd).replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE) + value.substring(selectionEnd);
365
-
366
318
  log.debug('Range ', selectionStart, selectionEnd, 'deleted, setting value', _newValue);
367
319
  onChange(_newValue);
368
320
  onSelect({
@@ -374,7 +326,6 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
374
326
  for (var i = selectionStart - 1; i >= 0; i -= 1) {
375
327
  // Only replace non placeholder text
376
328
  var _newValue2 = value.substring(0, i) + value.substring(i, selectionStart).replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE) + value.substring(selectionStart);
377
-
378
329
  if (_newValue2 !== value) {
379
330
  onChange(_newValue2);
380
331
  onSelect({
@@ -386,30 +337,25 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
386
337
  }
387
338
  }
388
339
  }
389
-
390
340
  return;
391
341
  }
392
-
393
342
  if (event.altKey || event.metaKey || event.ctrlKey || key.length > 1) {
394
343
  return;
395
344
  }
396
-
397
345
  event.preventDefault();
398
- event.stopPropagation(); // Get the different permutations of the character they entered, remove duplicates
346
+ event.stopPropagation();
399
347
 
348
+ // Get the different permutations of the character they entered, remove duplicates
400
349
  var newChars = Array.from(new Set([key, key.toUpperCase(), key.toLowerCase()]));
401
-
402
350
  for (var _i2 = 0; _i2 < newChars.length; _i2 += 1) {
403
- var newChar = newChars[_i2]; // If they're typing an alphanumeric character, be smart and allow it to jump ahead
351
+ var newChar = newChars[_i2];
404
352
 
353
+ // If they're typing an alphanumeric character, be smart and allow it to jump ahead
405
354
  var maxReplaceIndex = /[a-zA-Z0-9]/g.test(newChar) ? examples[0].length - 1 : selectionStart;
406
-
407
355
  for (var _replaceIndex = selectionStart; _replaceIndex <= maxReplaceIndex; _replaceIndex += 1) {
408
356
  // Fill with the example chars if necessary
409
357
  var filledValue = fillToLength(value, examples[0], _replaceIndex + 1);
410
-
411
358
  var _newValue3 = getPreferredReplacementString(filledValue, _replaceIndex, newChar, selectionStart, selectionEnd);
412
-
413
359
  if (isValid(_newValue3, _replaceIndex + 1)) {
414
360
  var currentSegment = getSegment(_replaceIndex);
415
361
  var newSelectionStart = _replaceIndex + 1;
@@ -418,15 +364,12 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
418
364
  selectionEnd: newSelectionStart,
419
365
  selectionDirection: SELECTION_DIRECTION.NONE
420
366
  };
421
-
422
367
  if (newSelectionStart >= currentSegment.selectionEnd) {
423
368
  var nextSegmentSelection = nextSegment(_replaceIndex);
424
-
425
369
  if (nextSegmentSelection.selectionStart !== currentSegment.selectionStart) {
426
370
  newSelection = nextSegmentSelection;
427
371
  }
428
372
  }
429
-
430
373
  log.debug('handleKeyDown', key, '=>', _newValue3, newSelection);
431
374
  onChange(_newValue3);
432
375
  onSelect(newSelection);
@@ -434,9 +377,9 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
434
377
  }
435
378
  }
436
379
  }
437
- } // Need to use "text" type so we can apply a pattern and make selection properly
438
-
380
+ }
439
381
 
382
+ // Need to use "text" type so we can apply a pattern and make selection properly
440
383
  return /*#__PURE__*/React.createElement("input", {
441
384
  ref: input,
442
385
  className: classNames('form-control masked-input', className),
@@ -456,23 +399,21 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
456
399
  MaskedInput.defaultProps = {
457
400
  className: '',
458
401
  placeholder: undefined,
459
-
460
- onChange() {// no-op
402
+ onChange() {
403
+ // no-op
461
404
  },
462
-
463
- onSelect() {// no-op
405
+ onSelect() {
406
+ // no-op
464
407
  },
465
-
466
408
  getNextSegmentValue: (range, delta, segmentValue) => segmentValue,
467
409
  getPreferredReplacementString: DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,
468
410
  selection: undefined,
469
-
470
- onFocus() {// no-op
411
+ onFocus() {
412
+ // no-op
471
413
  },
472
-
473
- onBlur() {// no-op
414
+ onBlur() {
415
+ // no-op
474
416
  },
475
-
476
417
  'data-testid': undefined
477
418
  };
478
419
  export default MaskedInput;
@@ -1 +1 @@
1
- {"version":3,"file":"MaskedInput.js","names":["React","useMemo","useEffect","useCallback","classNames","Log","useForwardedRef","log","module","SELECTION_DIRECTION","FORWARD","BACKWARD","NONE","FIXED_WIDTH_SPACE","DEFAULT_GET_PREFERRED_REPLACEMENT_STRING","value","replaceIndex","newChar","substring","fillToLength","checkValue","exampleValue","length","trimTrailingMask","emptyMask","i","MaskedInput","forwardRef","props","ref","className","example","getNextSegmentValue","range","delta","segmentValue","getPreferredReplacementString","onChange","onSelect","pattern","placeholder","selection","onFocus","onBlur","dataTestId","input","examples","Array","isArray","replace","setSelectedSegment","debug","selectionStart","selectionEnd","selectionDirection","current","setSelectionRange","getSegment","cursorPosition","testValue","test","charAt","fillValue","filledValue","concat","isValid","patternRegex","RegExp","nextSegment","position","currentSegment","nextPosition","previousSegment","previousPosition","nextSegmentValue","segment","newSegmentValue","newValue","handleSelect","event","target","error","debug2","nativeEvent","type","newSelection","handleSelectCapture","preventDefault","stopPropagation","handleArrowKey","key","handleKeyDown","startsWith","trimmedValue","altKey","metaKey","ctrlKey","newChars","from","Set","toUpperCase","toLowerCase","maxReplaceIndex","newSelectionStart","nextSegmentSelection","undefined","defaultProps"],"sources":["../src/MaskedInput.tsx"],"sourcesContent":["import React, { useMemo, useEffect, useCallback } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport { useForwardedRef } from '@deephaven/react-hooks';\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 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\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 /** 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 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 onChange = () => false,\n onSelect = () => false,\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 {\n selectionStart,\n selectionEnd,\n 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 function isValid(\n checkValue: string,\n cursorPosition = checkValue.length\n ): 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(checkValue, examples[i], cursorPosition);\n if (patternRegex.test(filledValue)) {\n return true;\n }\n }\n return false;\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(event: React.KeyboardEvent<HTMLInputElement>) {\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 function handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>) {\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\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 onSelect={handleSelect}\n onSelectCapture={handleSelectCapture}\n onFocus={onFocus}\n onBlur={onBlur}\n data-testid={dataTestId}\n />\n );\n }\n);\n\nMaskedInput.defaultProps = {\n className: '',\n placeholder: undefined,\n onChange(): void {\n // no-op\n },\n onSelect(): void {\n // no-op\n },\n getNextSegmentValue: (range, delta, segmentValue) => segmentValue,\n getPreferredReplacementString: DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,\n selection: undefined,\n onFocus(): void {\n // no-op\n },\n onBlur(): void {\n // no-op\n },\n 'data-testid': undefined,\n};\n\nexport default MaskedInput;\n"],"mappings":"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"}
1
+ {"version":3,"file":"MaskedInput.js","names":["React","useMemo","useEffect","useCallback","classNames","Log","useForwardedRef","log","module","SELECTION_DIRECTION","FORWARD","BACKWARD","NONE","FIXED_WIDTH_SPACE","DEFAULT_GET_PREFERRED_REPLACEMENT_STRING","value","replaceIndex","newChar","substring","fillToLength","checkValue","exampleValue","length","trimTrailingMask","emptyMask","i","MaskedInput","forwardRef","props","ref","className","example","getNextSegmentValue","range","delta","segmentValue","getPreferredReplacementString","onChange","onSelect","pattern","placeholder","selection","onFocus","onBlur","dataTestId","input","examples","Array","isArray","replace","setSelectedSegment","debug","selectionStart","selectionEnd","selectionDirection","current","setSelectionRange","getSegment","cursorPosition","testValue","test","charAt","fillValue","filledValue","concat","isValid","patternRegex","RegExp","nextSegment","position","currentSegment","nextPosition","previousSegment","previousPosition","nextSegmentValue","segment","newSegmentValue","newValue","handleSelect","event","target","error","debug2","nativeEvent","type","newSelection","handleSelectCapture","preventDefault","stopPropagation","handleArrowKey","key","handleKeyDown","startsWith","trimmedValue","altKey","metaKey","ctrlKey","newChars","from","Set","toUpperCase","toLowerCase","maxReplaceIndex","newSelectionStart","nextSegmentSelection","undefined","defaultProps"],"sources":["../src/MaskedInput.tsx"],"sourcesContent":["import React, { useMemo, useEffect, useCallback } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport { useForwardedRef } from '@deephaven/react-hooks';\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 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\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 /** 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 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 onChange = () => false,\n onSelect = () => false,\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 {\n selectionStart,\n selectionEnd,\n 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 function isValid(\n checkValue: string,\n cursorPosition = checkValue.length\n ): 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(checkValue, examples[i], cursorPosition);\n if (patternRegex.test(filledValue)) {\n return true;\n }\n }\n return false;\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(event: React.KeyboardEvent<HTMLInputElement>) {\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 function handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>) {\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\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 onSelect={handleSelect}\n onSelectCapture={handleSelectCapture}\n onFocus={onFocus}\n onBlur={onBlur}\n data-testid={dataTestId}\n />\n );\n }\n);\n\nMaskedInput.defaultProps = {\n className: '',\n placeholder: undefined,\n onChange(): void {\n // no-op\n },\n onSelect(): void {\n // no-op\n },\n getNextSegmentValue: (range, delta, segmentValue) => segmentValue,\n getPreferredReplacementString: DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,\n selection: undefined,\n onFocus(): void {\n // no-op\n },\n onBlur(): void {\n // no-op\n },\n 'data-testid': undefined,\n};\n\nexport default MaskedInput;\n"],"mappings":"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"}
package/dist/Option.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import React from 'react';
2
- export declare type OptionProps = {
2
+ export type OptionProps = {
3
3
  children: React.ReactNode;
4
4
  disabled?: boolean;
5
5
  value: string;
6
6
  'data-testid'?: string;
7
7
  };
8
- declare const Option: ({ children, disabled, value, "data-testid": dataTestId, }: OptionProps) => JSX.Element;
8
+ declare function Option({ children, disabled, value, 'data-testid': dataTestId, }: OptionProps): JSX.Element;
9
9
  export default Option;
10
10
  //# sourceMappingURL=Option.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Option.d.ts","sourceRoot":"","sources":["../src/Option.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,oBAAY,WAAW,GAAG;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,QAAA,MAAM,MAAM,8DAKT,WAAW,KAAG,WAIhB,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Option.d.ts","sourceRoot":"","sources":["../src/Option.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,iBAAS,MAAM,CAAC,EACd,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,aAAa,EAAE,UAAU,GAC1B,EAAE,WAAW,GAAG,GAAG,CAAC,OAAO,CAM3B;AAED,eAAe,MAAM,CAAC"}