@deephaven/components 0.11.9-beta.0 → 0.11.9

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 (166) hide show
  1. package/dist/AutoCompleteInput.d.ts +3 -0
  2. package/dist/AutoCompleteInput.d.ts.map +1 -1
  3. package/dist/AutoCompleteInput.js +8 -4
  4. package/dist/AutoCompleteInput.js.map +1 -1
  5. package/dist/AutoResizeTextarea.d.ts +4 -1
  6. package/dist/AutoResizeTextarea.d.ts.map +1 -1
  7. package/dist/AutoResizeTextarea.js +8 -4
  8. package/dist/AutoResizeTextarea.js.map +1 -1
  9. package/dist/BasicModal.d.ts +1 -0
  10. package/dist/BasicModal.d.ts.map +1 -1
  11. package/dist/BasicModal.js +14 -7
  12. package/dist/BasicModal.js.map +1 -1
  13. package/dist/Button.d.ts +1 -1
  14. package/dist/ButtonGroup.d.ts +3 -0
  15. package/dist/ButtonGroup.d.ts.map +1 -1
  16. package/dist/ButtonGroup.js +8 -4
  17. package/dist/ButtonGroup.js.map +1 -1
  18. package/dist/CardFlip.d.ts +2 -1
  19. package/dist/CardFlip.d.ts.map +1 -1
  20. package/dist/CardFlip.js +4 -2
  21. package/dist/CardFlip.js.map +1 -1
  22. package/dist/Checkbox.d.ts +1 -0
  23. package/dist/Checkbox.d.ts.map +1 -1
  24. package/dist/Checkbox.js +8 -4
  25. package/dist/Checkbox.js.map +1 -1
  26. package/dist/Collapse.d.ts +3 -0
  27. package/dist/Collapse.d.ts.map +1 -1
  28. package/dist/Collapse.js +8 -4
  29. package/dist/Collapse.js.map +1 -1
  30. package/dist/ComboBox.d.ts +3 -0
  31. package/dist/ComboBox.d.ts.map +1 -1
  32. package/dist/ComboBox.js +10 -5
  33. package/dist/ComboBox.js.map +1 -1
  34. package/dist/CustomTimeSelect.d.ts +1 -0
  35. package/dist/CustomTimeSelect.d.ts.map +1 -1
  36. package/dist/CustomTimeSelect.js +6 -3
  37. package/dist/CustomTimeSelect.js.map +1 -1
  38. package/dist/DebouncedSearchInput.d.ts +2 -0
  39. package/dist/DebouncedSearchInput.d.ts.map +1 -1
  40. package/dist/DebouncedSearchInput.js +6 -3
  41. package/dist/DebouncedSearchInput.js.map +1 -1
  42. package/dist/DeephavenSpinner.d.ts +2 -1
  43. package/dist/DeephavenSpinner.d.ts.map +1 -1
  44. package/dist/DeephavenSpinner.js +4 -2
  45. package/dist/DeephavenSpinner.js.map +1 -1
  46. package/dist/DraggableItemList.d.ts +2 -0
  47. package/dist/DraggableItemList.d.ts.map +1 -1
  48. package/dist/DraggableItemList.js +6 -3
  49. package/dist/DraggableItemList.js.map +1 -1
  50. package/dist/HierarchicalCheckboxMenu.d.ts +1 -0
  51. package/dist/HierarchicalCheckboxMenu.d.ts.map +1 -1
  52. package/dist/HierarchicalCheckboxMenu.js +12 -6
  53. package/dist/HierarchicalCheckboxMenu.js.map +1 -1
  54. package/dist/ItemList.d.ts +2 -0
  55. package/dist/ItemList.d.ts.map +1 -1
  56. package/dist/ItemList.js +6 -3
  57. package/dist/ItemList.js.map +1 -1
  58. package/dist/ItemListItem.d.ts +2 -0
  59. package/dist/ItemListItem.d.ts.map +1 -1
  60. package/dist/ItemListItem.js +5 -2
  61. package/dist/ItemListItem.js.map +1 -1
  62. package/dist/LoadingOverlay.d.ts +2 -1
  63. package/dist/LoadingOverlay.d.ts.map +1 -1
  64. package/dist/LoadingOverlay.js +4 -2
  65. package/dist/LoadingOverlay.js.map +1 -1
  66. package/dist/LoadingSpinner.d.ts +2 -1
  67. package/dist/LoadingSpinner.d.ts.map +1 -1
  68. package/dist/LoadingSpinner.js +4 -2
  69. package/dist/LoadingSpinner.js.map +1 -1
  70. package/dist/MaskedInput.d.ts +1 -0
  71. package/dist/MaskedInput.d.ts.map +1 -1
  72. package/dist/MaskedInput.js +6 -3
  73. package/dist/MaskedInput.js.map +1 -1
  74. package/dist/Option.d.ts +2 -1
  75. package/dist/Option.d.ts.map +1 -1
  76. package/dist/Option.js +4 -2
  77. package/dist/Option.js.map +1 -1
  78. package/dist/RadioGroup.d.ts +1 -0
  79. package/dist/RadioGroup.d.ts.map +1 -1
  80. package/dist/RadioGroup.js +4 -2
  81. package/dist/RadioGroup.js.map +1 -1
  82. package/dist/SearchInput.d.ts +2 -0
  83. package/dist/SearchInput.d.ts.map +1 -1
  84. package/dist/SearchInput.js +6 -3
  85. package/dist/SearchInput.js.map +1 -1
  86. package/dist/Select.d.ts +2 -1
  87. package/dist/Select.d.ts.map +1 -1
  88. package/dist/Select.js +4 -2
  89. package/dist/Select.js.map +1 -1
  90. package/dist/SelectValueList.d.ts +2 -0
  91. package/dist/SelectValueList.d.ts.map +1 -1
  92. package/dist/SelectValueList.js +6 -3
  93. package/dist/SelectValueList.js.map +1 -1
  94. package/dist/SocketedButton.d.ts +1 -0
  95. package/dist/SocketedButton.d.ts.map +1 -1
  96. package/dist/SocketedButton.js +6 -3
  97. package/dist/SocketedButton.js.map +1 -1
  98. package/dist/TimeInput.d.ts +1 -0
  99. package/dist/TimeInput.d.ts.map +1 -1
  100. package/dist/TimeInput.js +6 -3
  101. package/dist/TimeInput.js.map +1 -1
  102. package/dist/TimeSlider.d.ts +2 -1
  103. package/dist/TimeSlider.d.ts.map +1 -1
  104. package/dist/TimeSlider.js +18 -9
  105. package/dist/TimeSlider.js.map +1 -1
  106. package/dist/ToastNotification.d.ts +2 -1
  107. package/dist/ToastNotification.d.ts.map +1 -1
  108. package/dist/ToastNotification.js +4 -2
  109. package/dist/ToastNotification.js.map +1 -1
  110. package/dist/UISwitch.d.ts +3 -2
  111. package/dist/UISwitch.d.ts.map +1 -1
  112. package/dist/UISwitch.js +4 -2
  113. package/dist/UISwitch.js.map +1 -1
  114. package/dist/context-actions/ContextActions.d.ts +1 -0
  115. package/dist/context-actions/ContextActions.d.ts.map +1 -1
  116. package/dist/context-actions/ContextActions.js +5 -1
  117. package/dist/context-actions/ContextActions.js.map +1 -1
  118. package/dist/context-actions/ContextMenu.d.ts +2 -0
  119. package/dist/context-actions/ContextMenu.d.ts.map +1 -1
  120. package/dist/context-actions/ContextMenu.js +6 -3
  121. package/dist/context-actions/ContextMenu.js.map +1 -1
  122. package/dist/context-actions/ContextMenuItem.d.ts +1 -0
  123. package/dist/context-actions/ContextMenuItem.d.ts.map +1 -1
  124. package/dist/context-actions/ContextMenuItem.js +10 -5
  125. package/dist/context-actions/ContextMenuItem.js.map +1 -1
  126. package/dist/context-actions/ContextMenuRoot.d.ts +3 -1
  127. package/dist/context-actions/ContextMenuRoot.d.ts.map +1 -1
  128. package/dist/context-actions/ContextMenuRoot.js +5 -1
  129. package/dist/context-actions/ContextMenuRoot.js.map +1 -1
  130. package/dist/context-actions/GlobalContextActions.d.ts +1 -0
  131. package/dist/context-actions/GlobalContextActions.d.ts.map +1 -1
  132. package/dist/context-actions/GlobalContextActions.js +4 -2
  133. package/dist/context-actions/GlobalContextActions.js.map +1 -1
  134. package/dist/menu-actions/DropdownMenu.d.ts +2 -0
  135. package/dist/menu-actions/DropdownMenu.d.ts.map +1 -1
  136. package/dist/menu-actions/DropdownMenu.js +6 -3
  137. package/dist/menu-actions/DropdownMenu.js.map +1 -1
  138. package/dist/menu-actions/Menu.d.ts +2 -0
  139. package/dist/menu-actions/Menu.d.ts.map +1 -1
  140. package/dist/menu-actions/Menu.js +7 -2
  141. package/dist/menu-actions/Menu.js.map +1 -1
  142. package/dist/navigation/Menu.d.ts +2 -1
  143. package/dist/navigation/Menu.d.ts.map +1 -1
  144. package/dist/navigation/Menu.js +4 -2
  145. package/dist/navigation/Menu.js.map +1 -1
  146. package/dist/navigation/MenuItem.d.ts +2 -1
  147. package/dist/navigation/MenuItem.d.ts.map +1 -1
  148. package/dist/navigation/MenuItem.js +4 -2
  149. package/dist/navigation/MenuItem.js.map +1 -1
  150. package/dist/navigation/Page.d.ts +2 -1
  151. package/dist/navigation/Page.d.ts.map +1 -1
  152. package/dist/navigation/Page.js +4 -2
  153. package/dist/navigation/Page.js.map +1 -1
  154. package/dist/navigation/Stack.d.ts +2 -1
  155. package/dist/navigation/Stack.d.ts.map +1 -1
  156. package/dist/navigation/Stack.js +4 -2
  157. package/dist/navigation/Stack.js.map +1 -1
  158. package/dist/popper/Popper.d.ts +3 -0
  159. package/dist/popper/Popper.d.ts.map +1 -1
  160. package/dist/popper/Popper.js +9 -3
  161. package/dist/popper/Popper.js.map +1 -1
  162. package/dist/popper/Tooltip.d.ts +2 -0
  163. package/dist/popper/Tooltip.d.ts.map +1 -1
  164. package/dist/popper/Tooltip.js +6 -3
  165. package/dist/popper/Tooltip.js.map +1 -1
  166. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"MaskedInput.d.ts","sourceRoot":"","sources":["../src/MaskedInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAIlD,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,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,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;CAClC,CAAC;AAEF;;;GAGG;AAIH,QAAA,MAAM,WAAW,2FAwZhB,CAAC;AAqBF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"MaskedInput.d.ts","sourceRoot":"","sources":["../src/MaskedInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAIlD,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,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,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,2FA0ZhB,CAAC;AAsBF,eAAe,WAAW,CAAC"}
@@ -38,7 +38,8 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
38
38
  selection,
39
39
  value,
40
40
  onFocus = () => false,
41
- onBlur = () => false
41
+ onBlur = () => false,
42
+ 'data-testid': dataTestId
42
43
  } = props;
43
44
  var input = useForwardedRef(ref);
44
45
  var examples = useMemo(() => Array.isArray(example) ? example : [example], [example]);
@@ -376,7 +377,8 @@ var MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {
376
377
  onSelect: handleSelect,
377
378
  onSelectCapture: handleSelectCapture,
378
379
  onFocus: onFocus,
379
- onBlur: onBlur
380
+ onBlur: onBlur,
381
+ "data-testid": dataTestId
380
382
  });
381
383
  });
382
384
  MaskedInput.defaultProps = {
@@ -396,8 +398,9 @@ MaskedInput.defaultProps = {
396
398
  },
397
399
 
398
400
  onBlur() {// no-op
399
- }
401
+ },
400
402
 
403
+ 'data-testid': undefined
401
404
  };
402
405
  export default MaskedInput;
403
406
  //# sourceMappingURL=MaskedInput.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/MaskedInput.tsx"],"names":["React","useMemo","useEffect","classNames","Log","useForwardedRef","log","module","SELECTION_DIRECTION","FORWARD","BACKWARD","NONE","FIXED_WIDTH_SPACE","DEFAULT_GET_PREFERRED_REPLACEMENT_STRING","value","replaceIndex","newChar","substring","MaskedInput","forwardRef","props","ref","className","example","getNextSegmentValue","range","delta","segmentValue","getPreferredReplacementString","onChange","onSelect","pattern","selection","onFocus","onBlur","input","examples","Array","isArray","debug","selectionStart","selectionEnd","selectionDirection","current","setSelectionRange","getSegment","cursorPosition","testValue","length","i","test","charAt","fillValue","checkValue","exampleValue","filledValue","concat","isValid","patternRegex","RegExp","nextSegment","position","currentSegment","nextPosition","previousSegment","previousPosition","nextSegmentValue","segment","newSegmentValue","newValue","handleSelect","event","target","error","debug2","newSelection","handleSelectCapture","preventDefault","stopPropagation","handleArrowKey","key","handleKeyDown","startsWith","replace","altKey","metaKey","ctrlKey","newChars","from","Set","toUpperCase","toLowerCase","maxReplaceIndex","newSelectionStart","nextSegmentSelection","undefined","defaultProps"],"mappings":"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","sourcesContent":["import React, { useMemo, useEffect } 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\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 /** 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\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 selection,\n value,\n onFocus = () => false,\n onBlur = () => false,\n } = props;\n const input = useForwardedRef(ref);\n const examples = useMemo(\n () => (Array.isArray(example) ? example : [example]),\n [example]\n );\n\n useEffect(() => {\n if (selection != null) {\n log.debug('setting selection...', selection);\n const { selectionStart, selectionEnd, selectionDirection } = selection;\n input.current?.setSelectionRange(\n selectionStart,\n selectionEnd,\n selectionDirection\n );\n log.debug('selection set!');\n }\n }, [selection, input]);\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 function getSegment(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\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 function handleSelect(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 (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\n function handleSelectCapture(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\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 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 ? value.length - 1\n : selectionStart;\n for (\n let replaceIndex = selectionStart;\n replaceIndex <= maxReplaceIndex;\n replaceIndex += 1\n ) {\n const newValue = getPreferredReplacementString(\n value,\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 value={value}\n onChange={() => undefined}\n onKeyDown={handleKeyDown}\n onSelect={handleSelect}\n onSelectCapture={handleSelectCapture}\n onFocus={onFocus}\n onBlur={onBlur}\n />\n );\n }\n);\n\nMaskedInput.defaultProps = {\n className: '',\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};\n\nexport default MaskedInput;\n"],"file":"MaskedInput.js"}
1
+ {"version":3,"sources":["../src/MaskedInput.tsx"],"names":["React","useMemo","useEffect","classNames","Log","useForwardedRef","log","module","SELECTION_DIRECTION","FORWARD","BACKWARD","NONE","FIXED_WIDTH_SPACE","DEFAULT_GET_PREFERRED_REPLACEMENT_STRING","value","replaceIndex","newChar","substring","MaskedInput","forwardRef","props","ref","className","example","getNextSegmentValue","range","delta","segmentValue","getPreferredReplacementString","onChange","onSelect","pattern","selection","onFocus","onBlur","dataTestId","input","examples","Array","isArray","debug","selectionStart","selectionEnd","selectionDirection","current","setSelectionRange","getSegment","cursorPosition","testValue","length","i","test","charAt","fillValue","checkValue","exampleValue","filledValue","concat","isValid","patternRegex","RegExp","nextSegment","position","currentSegment","nextPosition","previousSegment","previousPosition","nextSegmentValue","segment","newSegmentValue","newValue","handleSelect","event","target","error","debug2","newSelection","handleSelectCapture","preventDefault","stopPropagation","handleArrowKey","key","handleKeyDown","startsWith","replace","altKey","metaKey","ctrlKey","newChars","from","Set","toUpperCase","toLowerCase","maxReplaceIndex","newSelectionStart","nextSegmentSelection","undefined","defaultProps"],"mappings":"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","sourcesContent":["import React, { useMemo, useEffect } 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\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 /** 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 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\n useEffect(() => {\n if (selection != null) {\n log.debug('setting selection...', selection);\n const { selectionStart, selectionEnd, selectionDirection } = selection;\n input.current?.setSelectionRange(\n selectionStart,\n selectionEnd,\n selectionDirection\n );\n log.debug('selection set!');\n }\n }, [selection, input]);\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 function getSegment(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\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 function handleSelect(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 (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\n function handleSelectCapture(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\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 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 ? value.length - 1\n : selectionStart;\n for (\n let replaceIndex = selectionStart;\n replaceIndex <= maxReplaceIndex;\n replaceIndex += 1\n ) {\n const newValue = getPreferredReplacementString(\n value,\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 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 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"],"file":"MaskedInput.js"}
package/dist/Option.d.ts CHANGED
@@ -2,7 +2,8 @@ import React from 'react';
2
2
  export declare type OptionProps = {
3
3
  children: React.ReactNode;
4
4
  value: string;
5
+ 'data-testid'?: string;
5
6
  };
6
- declare const Option: ({ children, value }: OptionProps) => JSX.Element;
7
+ declare const Option: ({ children, value, "data-testid": dataTestId, }: OptionProps) => JSX.Element;
7
8
  export default Option;
8
9
  //# 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,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,QAAA,MAAM,MAAM,wBAAyB,WAAW,KAAG,WAElD,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,oBAAY,WAAW,GAAG;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,QAAA,MAAM,MAAM,oDAIT,WAAW,KAAG,WAIhB,CAAC;AAEF,eAAe,MAAM,CAAC"}
package/dist/Option.js CHANGED
@@ -3,10 +3,12 @@ import React from 'react';
3
3
  var Option = _ref => {
4
4
  var {
5
5
  children,
6
- value
6
+ value,
7
+ 'data-testid': dataTestId
7
8
  } = _ref;
8
9
  return /*#__PURE__*/React.createElement("option", {
9
- value: value
10
+ value: value,
11
+ "data-testid": dataTestId
10
12
  }, children);
11
13
  };
12
14
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/Option.tsx"],"names":["React","Option","children","value"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;;AAOA,IAAMC,MAAM,GAAG;AAAA,MAAC;AAAEC,IAAAA,QAAF;AAAYC,IAAAA;AAAZ,GAAD;AAAA,sBACb;AAAQ,IAAA,KAAK,EAAEA;AAAf,KAAuBD,QAAvB,CADa;AAAA,CAAf;;AAIA,eAAeD,MAAf","sourcesContent":["import React from 'react';\n\nexport type OptionProps = {\n children: React.ReactNode;\n value: string;\n};\n\nconst Option = ({ children, value }: OptionProps): JSX.Element => (\n <option value={value}>{children}</option>\n);\n\nexport default Option;\n"],"file":"Option.js"}
1
+ {"version":3,"sources":["../src/Option.tsx"],"names":["React","Option","children","value","dataTestId"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;;AAQA,IAAMC,MAAM,GAAG;AAAA,MAAC;AACdC,IAAAA,QADc;AAEdC,IAAAA,KAFc;AAGd,mBAAeC;AAHD,GAAD;AAAA,sBAKb;AAAQ,IAAA,KAAK,EAAED,KAAf;AAAsB,mBAAaC;AAAnC,KACGF,QADH,CALa;AAAA,CAAf;;AAUA,eAAeD,MAAf","sourcesContent":["import React from 'react';\n\nexport type OptionProps = {\n children: React.ReactNode;\n value: string;\n 'data-testid'?: string;\n};\n\nconst Option = ({\n children,\n value,\n 'data-testid': dataTestId,\n}: OptionProps): JSX.Element => (\n <option value={value} data-testid={dataTestId}>\n {children}\n </option>\n);\n\nexport default Option;\n"],"file":"Option.js"}
@@ -9,6 +9,7 @@ declare type RadioGroupProps = {
9
9
  /** The currently selected value. Will automatically set the `checked` attribute of the RadioItem. */
10
10
  value?: string;
11
11
  disabled?: boolean;
12
+ 'data-testid'?: string;
12
13
  };
13
14
  /**
14
15
  * A group of radio buttons. Use with RadioItems to populate, eg.
@@ -1 +1 @@
1
- {"version":3,"file":"RadioGroup.d.ts","sourceRoot":"","sources":["../src/RadioGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,aAAK,eAAe,GAAG;IACrB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;IAErD,+FAA+F;IAC/F,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,+CAA+C;IAC/C,QAAQ,EAAE,KAAK,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAErD,qGAAqG;IACrG,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF;;;;;;GAMG;AACH,QAAA,MAAM,UAAU,UAAW,eAAe,KAAG,WAyB5C,CAAC;AAEF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"RadioGroup.d.ts","sourceRoot":"","sources":["../src/RadioGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,aAAK,eAAe,GAAG;IACrB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;IAErD,+FAA+F;IAC/F,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,+CAA+C;IAC/C,QAAQ,EAAE,KAAK,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAErD,qGAAqG;IACrG,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;;;;GAMG;AACH,QAAA,MAAM,UAAU,UAAW,eAAe,KAAG,WA2B5C,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -14,7 +14,8 @@ var RadioGroup = props => {
14
14
  disabled = false,
15
15
  name: propsName,
16
16
  onChange,
17
- value = ''
17
+ value = '',
18
+ 'data-testid': dataTestId
18
19
  } = props;
19
20
  var [name] = useState(propsName || shortid()); // Need to use "text" type so we can apply a pattern and make selection properly
20
21
 
@@ -22,7 +23,8 @@ var RadioGroup = props => {
22
23
  name,
23
24
  onChange: child.props.onChange || onChange,
24
25
  checked: value === child.props.value,
25
- disabled: child.props.disabled || disabled
26
+ disabled: child.props.disabled || disabled,
27
+ 'data-testid': dataTestId
26
28
  }) : null));
27
29
  };
28
30
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/RadioGroup.tsx"],"names":["React","useState","shortid","RadioGroup","props","children","disabled","name","propsName","onChange","value","Children","map","child","cloneElement","checked"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,QAAhB,QAAgC,OAAhC;AACA,OAAOC,OAAP,MAAoB,SAApB;;AAkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,UAAU,GAAIC,KAAD,IAAyC;AAC1D,MAAM;AACJC,IAAAA,QADI;AAEJC,IAAAA,QAAQ,GAAG,KAFP;AAGJC,IAAAA,IAAI,EAAEC,SAHF;AAIJC,IAAAA,QAJI;AAKJC,IAAAA,KAAK,GAAG;AALJ,MAMFN,KANJ;AAOA,MAAM,CAACG,IAAD,IAASN,QAAQ,CAACO,SAAS,IAAIN,OAAO,EAArB,CAAvB,CAR0D,CAU1D;;AACA,sBACE,0CACGF,KAAK,CAACW,QAAN,CAAeC,GAAf,CAAmBP,QAAnB,EAA6BQ,KAAK,IACjCA,KAAK,gBACDb,KAAK,CAACc,YAAN,CAAmBD,KAAnB,EAA0B;AACxBN,IAAAA,IADwB;AAExBE,IAAAA,QAAQ,EAAEI,KAAK,CAACT,KAAN,CAAYK,QAAZ,IAAwBA,QAFV;AAGxBM,IAAAA,OAAO,EAAEL,KAAK,KAAKG,KAAK,CAACT,KAAN,CAAYM,KAHP;AAIxBJ,IAAAA,QAAQ,EAAEO,KAAK,CAACT,KAAN,CAAYE,QAAZ,IAAwBA;AAJV,GAA1B,CADC,GAOD,IARL,CADH,CADF;AAcD,CAzBD;;AA2BA,eAAeH,UAAf","sourcesContent":["import React, { useState } from 'react';\nimport shortid from 'shortid';\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};\n\n/**\n * A group of radio buttons. Use with RadioItems to populate, eg.\n * <RadioGroup>\n * <RadioItem .../>\n * <RadioItem .../>\n * </RadioGroup>\n */\nconst RadioGroup = (props: RadioGroupProps): JSX.Element => {\n const {\n children,\n disabled = false,\n name: propsName,\n onChange,\n value = '',\n } = props;\n const [name] = useState(propsName || shortid());\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 })\n : null\n )}\n </>\n );\n};\n\nexport default RadioGroup;\n"],"file":"RadioGroup.js"}
1
+ {"version":3,"sources":["../src/RadioGroup.tsx"],"names":["React","useState","shortid","RadioGroup","props","children","disabled","name","propsName","onChange","value","dataTestId","Children","map","child","cloneElement","checked"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,QAAhB,QAAgC,OAAhC;AACA,OAAOC,OAAP,MAAoB,SAApB;;AAmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,UAAU,GAAIC,KAAD,IAAyC;AAC1D,MAAM;AACJC,IAAAA,QADI;AAEJC,IAAAA,QAAQ,GAAG,KAFP;AAGJC,IAAAA,IAAI,EAAEC,SAHF;AAIJC,IAAAA,QAJI;AAKJC,IAAAA,KAAK,GAAG,EALJ;AAMJ,mBAAeC;AANX,MAOFP,KAPJ;AAQA,MAAM,CAACG,IAAD,IAASN,QAAQ,CAACO,SAAS,IAAIN,OAAO,EAArB,CAAvB,CAT0D,CAW1D;;AACA,sBACE,0CACGF,KAAK,CAACY,QAAN,CAAeC,GAAf,CAAmBR,QAAnB,EAA6BS,KAAK,IACjCA,KAAK,gBACDd,KAAK,CAACe,YAAN,CAAmBD,KAAnB,EAA0B;AACxBP,IAAAA,IADwB;AAExBE,IAAAA,QAAQ,EAAEK,KAAK,CAACV,KAAN,CAAYK,QAAZ,IAAwBA,QAFV;AAGxBO,IAAAA,OAAO,EAAEN,KAAK,KAAKI,KAAK,CAACV,KAAN,CAAYM,KAHP;AAIxBJ,IAAAA,QAAQ,EAAEQ,KAAK,CAACV,KAAN,CAAYE,QAAZ,IAAwBA,QAJV;AAKxB,mBAAeK;AALS,GAA1B,CADC,GAQD,IATL,CADH,CADF;AAeD,CA3BD;;AA6BA,eAAeR,UAAf","sourcesContent":["import React, { useState } from 'react';\nimport shortid from 'shortid';\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 */\nconst 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 || shortid());\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"],"file":"RadioGroup.js"}
@@ -8,6 +8,7 @@ interface SearchInputProps {
8
8
  className: string;
9
9
  matchCount: number;
10
10
  id: string;
11
+ 'data-testid'?: string;
11
12
  }
12
13
  declare class SearchInput extends PureComponent<SearchInputProps> {
13
14
  static defaultProps: {
@@ -16,6 +17,7 @@ declare class SearchInput extends PureComponent<SearchInputProps> {
16
17
  matchCount: null;
17
18
  onKeyDown(): void;
18
19
  id: string;
20
+ 'data-testid': undefined;
19
21
  };
20
22
  constructor(props: SearchInputProps);
21
23
  inputField: React.RefObject<HTMLInputElement>;
@@ -1 +1 @@
1
- {"version":3,"file":"SearchInput.d.ts","sourceRoot":"","sources":["../src/SearchInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAI7C,OAAO,oBAAoB,CAAC;AAE5B,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IACrD,SAAS,EAAE,KAAK,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,cAAM,WAAY,SAAQ,aAAa,CAAC,gBAAgB,CAAC;IACvD,MAAM,CAAC,YAAY;;;;qBAIJ,IAAI;;MAIjB;gBAEU,KAAK,EAAE,gBAAgB;IAKnC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAE9C,KAAK,IAAI,IAAI;IAIb,MAAM,IAAI,GAAG,CAAC,OAAO;CA+BtB;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"SearchInput.d.ts","sourceRoot":"","sources":["../src/SearchInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAI7C,OAAO,oBAAoB,CAAC;AAE5B,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IACrD,SAAS,EAAE,KAAK,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,cAAM,WAAY,SAAQ,aAAa,CAAC,gBAAgB,CAAC;IACvD,MAAM,CAAC,YAAY;;;;qBAIJ,IAAI;;;MAKjB;gBAEU,KAAK,EAAE,gBAAgB;IAKnC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAE9C,KAAK,IAAI,IAAI;IAIb,MAAM,IAAI,GAAG,CAAC,OAAO;CAiCtB;AAED,eAAe,WAAW,CAAC"}
@@ -29,7 +29,8 @@ class SearchInput extends PureComponent {
29
29
  className,
30
30
  matchCount,
31
31
  id,
32
- onKeyDown
32
+ onKeyDown,
33
+ 'data-testid': dataTestId
33
34
  } = this.props;
34
35
  return /*#__PURE__*/React.createElement("div", {
35
36
  className: classNames('search-group', className)
@@ -41,7 +42,8 @@ class SearchInput extends PureComponent {
41
42
  className: "form-control",
42
43
  placeholder: placeholder,
43
44
  ref: this.inputField,
44
- id: id
45
+ id: id,
46
+ "data-testid": dataTestId
45
47
  }), matchCount != null && /*#__PURE__*/React.createElement("span", {
46
48
  className: "search-match"
47
49
  }, matchCount), /*#__PURE__*/React.createElement("span", {
@@ -61,7 +63,8 @@ _defineProperty(SearchInput, "defaultProps", {
61
63
  onKeyDown() {// no-op
62
64
  },
63
65
 
64
- id: ''
66
+ id: '',
67
+ 'data-testid': undefined
65
68
  });
66
69
 
67
70
  export default SearchInput;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/SearchInput.tsx"],"names":["React","PureComponent","FontAwesomeIcon","vsSearch","classNames","SearchInput","constructor","props","inputField","createRef","focus","current","render","value","placeholder","onChange","className","matchCount","id","onKeyDown"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,aAAhB,QAAqC,OAArC;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,QAAT,QAAyB,kBAAzB;AACA,OAAOC,UAAP,MAAuB,YAAvB;;;AAaA,MAAMC,WAAN,SAA0BJ,aAA1B,CAA0D;AAWxDK,EAAAA,WAAW,CAACC,KAAD,EAA0B;AACnC,UAAMA,KAAN;;AADmC;;AAEnC,SAAKC,UAAL,gBAAkBR,KAAK,CAACS,SAAN,EAAlB;AACD;;AAIDC,EAAAA,KAAK,GAAS;AAAA;;AACZ,kCAAKF,UAAL,CAAgBG,OAAhB,gFAAyBD,KAAzB;AACD;;AAEDE,EAAAA,MAAM,GAAgB;AACpB,QAAM;AACJC,MAAAA,KADI;AAEJC,MAAAA,WAFI;AAGJC,MAAAA,QAHI;AAIJC,MAAAA,SAJI;AAKJC,MAAAA,UALI;AAMJC,MAAAA,EANI;AAOJC,MAAAA;AAPI,QAQF,KAAKZ,KART;AASA,wBACE;AAAK,MAAA,SAAS,EAAEH,UAAU,CAAC,cAAD,EAAiBY,SAAjB;AAA1B,oBACE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,KAAK,EAAEH,KAFT;AAGE,MAAA,QAAQ,EAAEE,QAHZ;AAIE,MAAA,SAAS,EAAEI,SAJb;AAKE,MAAA,SAAS,EAAC,cALZ;AAME,MAAA,WAAW,EAAEL,WANf;AAOE,MAAA,GAAG,EAAE,KAAKN,UAPZ;AAQE,MAAA,EAAE,EAAEU;AARN,MADF,EAWGD,UAAU,IAAI,IAAd,iBACC;AAAM,MAAA,SAAS,EAAC;AAAhB,OAAgCA,UAAhC,CAZJ,eAcE;AAAM,MAAA,SAAS,EAAC;AAAhB,oBACE,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAEd;AAAvB,MADF,CAdF,CADF;AAoBD;;AApDuD;;gBAApDE,W,kBACkB;AACpBS,EAAAA,WAAW,EAAE,QADO;AAEpBE,EAAAA,SAAS,EAAE,EAFS;AAGpBC,EAAAA,UAAU,EAAE,IAHQ;;AAIpBE,EAAAA,SAAS,GAAS,CAChB;AACD,GANmB;;AAOpBD,EAAAA,EAAE,EAAE;AAPgB,C;;AAsDxB,eAAeb,WAAf","sourcesContent":["import React, { PureComponent } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsSearch } from '@deephaven/icons';\nimport classNames from 'classnames';\nimport './SearchInput.scss';\n\ninterface SearchInputProps {\n value: string;\n placeholder: string;\n onChange: React.ChangeEventHandler<HTMLInputElement>;\n onKeyDown: React.KeyboardEventHandler<HTMLInputElement>;\n className: string;\n matchCount: number;\n id: string;\n}\n\nclass SearchInput extends PureComponent<SearchInputProps> {\n static defaultProps = {\n placeholder: 'Search',\n className: '',\n matchCount: null,\n onKeyDown(): void {\n // no-op\n },\n id: '',\n };\n\n constructor(props: SearchInputProps) {\n super(props);\n this.inputField = React.createRef();\n }\n\n inputField: React.RefObject<HTMLInputElement>;\n\n focus(): void {\n this.inputField.current?.focus();\n }\n\n render(): JSX.Element {\n const {\n value,\n placeholder,\n onChange,\n className,\n matchCount,\n id,\n onKeyDown,\n } = this.props;\n return (\n <div className={classNames('search-group', className)}>\n <input\n type=\"search\"\n value={value}\n onChange={onChange}\n onKeyDown={onKeyDown}\n className=\"form-control\"\n placeholder={placeholder}\n ref={this.inputField}\n id={id}\n />\n {matchCount != null && (\n <span className=\"search-match\">{matchCount}</span>\n )}\n <span className=\"search-icon\">\n <FontAwesomeIcon icon={vsSearch} />\n </span>\n </div>\n );\n }\n}\n\nexport default SearchInput;\n"],"file":"SearchInput.js"}
1
+ {"version":3,"sources":["../src/SearchInput.tsx"],"names":["React","PureComponent","FontAwesomeIcon","vsSearch","classNames","SearchInput","constructor","props","inputField","createRef","focus","current","render","value","placeholder","onChange","className","matchCount","id","onKeyDown","dataTestId","undefined"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,aAAhB,QAAqC,OAArC;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,QAAT,QAAyB,kBAAzB;AACA,OAAOC,UAAP,MAAuB,YAAvB;;;AAcA,MAAMC,WAAN,SAA0BJ,aAA1B,CAA0D;AAYxDK,EAAAA,WAAW,CAACC,KAAD,EAA0B;AACnC,UAAMA,KAAN;;AADmC;;AAEnC,SAAKC,UAAL,gBAAkBR,KAAK,CAACS,SAAN,EAAlB;AACD;;AAIDC,EAAAA,KAAK,GAAS;AAAA;;AACZ,kCAAKF,UAAL,CAAgBG,OAAhB,gFAAyBD,KAAzB;AACD;;AAEDE,EAAAA,MAAM,GAAgB;AACpB,QAAM;AACJC,MAAAA,KADI;AAEJC,MAAAA,WAFI;AAGJC,MAAAA,QAHI;AAIJC,MAAAA,SAJI;AAKJC,MAAAA,UALI;AAMJC,MAAAA,EANI;AAOJC,MAAAA,SAPI;AAQJ,qBAAeC;AARX,QASF,KAAKb,KATT;AAUA,wBACE;AAAK,MAAA,SAAS,EAAEH,UAAU,CAAC,cAAD,EAAiBY,SAAjB;AAA1B,oBACE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,KAAK,EAAEH,KAFT;AAGE,MAAA,QAAQ,EAAEE,QAHZ;AAIE,MAAA,SAAS,EAAEI,SAJb;AAKE,MAAA,SAAS,EAAC,cALZ;AAME,MAAA,WAAW,EAAEL,WANf;AAOE,MAAA,GAAG,EAAE,KAAKN,UAPZ;AAQE,MAAA,EAAE,EAAEU,EARN;AASE,qBAAaE;AATf,MADF,EAYGH,UAAU,IAAI,IAAd,iBACC;AAAM,MAAA,SAAS,EAAC;AAAhB,OAAgCA,UAAhC,CAbJ,eAeE;AAAM,MAAA,SAAS,EAAC;AAAhB,oBACE,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAEd;AAAvB,MADF,CAfF,CADF;AAqBD;;AAvDuD;;gBAApDE,W,kBACkB;AACpBS,EAAAA,WAAW,EAAE,QADO;AAEpBE,EAAAA,SAAS,EAAE,EAFS;AAGpBC,EAAAA,UAAU,EAAE,IAHQ;;AAIpBE,EAAAA,SAAS,GAAS,CAChB;AACD,GANmB;;AAOpBD,EAAAA,EAAE,EAAE,EAPgB;AAQpB,iBAAeG;AARK,C;;AAyDxB,eAAehB,WAAf","sourcesContent":["import React, { PureComponent } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsSearch } from '@deephaven/icons';\nimport classNames from 'classnames';\nimport './SearchInput.scss';\n\ninterface SearchInputProps {\n value: string;\n placeholder: string;\n onChange: React.ChangeEventHandler<HTMLInputElement>;\n onKeyDown: React.KeyboardEventHandler<HTMLInputElement>;\n className: string;\n matchCount: number;\n id: string;\n 'data-testid'?: string;\n}\n\nclass SearchInput extends PureComponent<SearchInputProps> {\n static defaultProps = {\n placeholder: 'Search',\n className: '',\n matchCount: null,\n onKeyDown(): void {\n // no-op\n },\n id: '',\n 'data-testid': undefined,\n };\n\n constructor(props: SearchInputProps) {\n super(props);\n this.inputField = React.createRef();\n }\n\n inputField: React.RefObject<HTMLInputElement>;\n\n focus(): void {\n this.inputField.current?.focus();\n }\n\n render(): JSX.Element {\n const {\n value,\n placeholder,\n onChange,\n className,\n matchCount,\n id,\n onKeyDown,\n 'data-testid': dataTestId,\n } = this.props;\n return (\n <div className={classNames('search-group', className)}>\n <input\n type=\"search\"\n value={value}\n onChange={onChange}\n onKeyDown={onKeyDown}\n className=\"form-control\"\n placeholder={placeholder}\n ref={this.inputField}\n id={id}\n data-testid={dataTestId}\n />\n {matchCount != null && (\n <span className=\"search-match\">{matchCount}</span>\n )}\n <span className=\"search-icon\">\n <FontAwesomeIcon icon={vsSearch} />\n </span>\n </div>\n );\n }\n}\n\nexport default SearchInput;\n"],"file":"SearchInput.js"}
package/dist/Select.d.ts CHANGED
@@ -6,7 +6,8 @@ export declare type SelectProps = {
6
6
  defaultValue?: string;
7
7
  value?: string;
8
8
  disabled?: boolean;
9
+ 'data-testid'?: string;
9
10
  };
10
- declare const Select: ({ children, onChange, className, defaultValue, value, disabled, }: SelectProps) => JSX.Element;
11
+ declare const Select: ({ children, onChange, className, defaultValue, value, disabled, "data-testid": dataTestId, }: SelectProps) => JSX.Element;
11
12
  export default Select;
12
13
  //# sourceMappingURL=Select.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../src/Select.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAG3C,oBAAY,WAAW,GAAG;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,QAAA,MAAM,MAAM,sEAOT,WAAW,KAAG,WAmBhB,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../src/Select.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAG3C,oBAAY,WAAW,GAAG;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,QAAA,MAAM,MAAM,iGAQT,WAAW,KAAG,WAoBhB,CAAC;AAEF,eAAe,MAAM,CAAC"}
package/dist/Select.js CHANGED
@@ -8,7 +8,8 @@ var Select = _ref => {
8
8
  className,
9
9
  defaultValue,
10
10
  value,
11
- disabled
11
+ disabled,
12
+ 'data-testid': dataTestId
12
13
  } = _ref;
13
14
  var handleChange = useCallback(event => {
14
15
  onChange(event.target.value);
@@ -18,7 +19,8 @@ var Select = _ref => {
18
19
  onChange: handleChange,
19
20
  defaultValue: defaultValue,
20
21
  value: value,
21
- disabled: disabled
22
+ disabled: disabled,
23
+ "data-testid": dataTestId
22
24
  }, children);
23
25
  };
24
26
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/Select.tsx"],"names":["React","useCallback","classNames","Select","children","onChange","className","defaultValue","value","disabled","handleChange","event","target"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,QAAmC,OAAnC;AACA,OAAOC,UAAP,MAAuB,YAAvB;;AAWA,IAAMC,MAAM,GAAG,QAOiB;AAAA,MAPhB;AACdC,IAAAA,QADc;AAEdC,IAAAA,QAFc;AAGdC,IAAAA,SAHc;AAIdC,IAAAA,YAJc;AAKdC,IAAAA,KALc;AAMdC,IAAAA;AANc,GAOgB;AAC9B,MAAMC,YAAY,GAAGT,WAAW,CAC9BU,KAAK,IAAI;AACPN,IAAAA,QAAQ,CAACM,KAAK,CAACC,MAAN,CAAaJ,KAAd,CAAR;AACD,GAH6B,EAI9B,CAACH,QAAD,CAJ8B,CAAhC;AAOA,sBACE;AACE,IAAA,SAAS,EAAEH,UAAU,CAAC,eAAD,EAAkBI,SAAlB,CADvB;AAEE,IAAA,QAAQ,EAAEI,YAFZ;AAGE,IAAA,YAAY,EAAEH,YAHhB;AAIE,IAAA,KAAK,EAAEC,KAJT;AAKE,IAAA,QAAQ,EAAEC;AALZ,KAOGL,QAPH,CADF;AAWD,CA1BD;;AA4BA,eAAeD,MAAf","sourcesContent":["import React, { useCallback } from 'react';\nimport classNames from 'classnames';\n\nexport type SelectProps = {\n children: React.ReactNode;\n onChange: (value: string) => void;\n className?: string;\n defaultValue?: string;\n value?: string;\n disabled?: boolean;\n};\n\nconst Select = ({\n children,\n onChange,\n className,\n defaultValue,\n value,\n disabled,\n}: SelectProps): JSX.Element => {\n const handleChange = useCallback(\n event => {\n onChange(event.target.value);\n },\n [onChange]\n );\n\n return (\n <select\n className={classNames('custom-select', className)}\n onChange={handleChange}\n defaultValue={defaultValue}\n value={value}\n disabled={disabled}\n >\n {children}\n </select>\n );\n};\n\nexport default Select;\n"],"file":"Select.js"}
1
+ {"version":3,"sources":["../src/Select.tsx"],"names":["React","useCallback","classNames","Select","children","onChange","className","defaultValue","value","disabled","dataTestId","handleChange","event","target"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,QAAmC,OAAnC;AACA,OAAOC,UAAP,MAAuB,YAAvB;;AAYA,IAAMC,MAAM,GAAG,QAQiB;AAAA,MARhB;AACdC,IAAAA,QADc;AAEdC,IAAAA,QAFc;AAGdC,IAAAA,SAHc;AAIdC,IAAAA,YAJc;AAKdC,IAAAA,KALc;AAMdC,IAAAA,QANc;AAOd,mBAAeC;AAPD,GAQgB;AAC9B,MAAMC,YAAY,GAAGV,WAAW,CAC9BW,KAAK,IAAI;AACPP,IAAAA,QAAQ,CAACO,KAAK,CAACC,MAAN,CAAaL,KAAd,CAAR;AACD,GAH6B,EAI9B,CAACH,QAAD,CAJ8B,CAAhC;AAOA,sBACE;AACE,IAAA,SAAS,EAAEH,UAAU,CAAC,eAAD,EAAkBI,SAAlB,CADvB;AAEE,IAAA,QAAQ,EAAEK,YAFZ;AAGE,IAAA,YAAY,EAAEJ,YAHhB;AAIE,IAAA,KAAK,EAAEC,KAJT;AAKE,IAAA,QAAQ,EAAEC,QALZ;AAME,mBAAaC;AANf,KAQGN,QARH,CADF;AAYD,CA5BD;;AA8BA,eAAeD,MAAf","sourcesContent":["import React, { useCallback } from 'react';\nimport classNames from 'classnames';\n\nexport type SelectProps = {\n children: React.ReactNode;\n onChange: (value: string) => void;\n className?: string;\n defaultValue?: string;\n value?: string;\n disabled?: boolean;\n 'data-testid'?: string;\n};\n\nconst Select = ({\n children,\n onChange,\n className,\n defaultValue,\n value,\n disabled,\n 'data-testid': dataTestId,\n}: SelectProps): JSX.Element => {\n const handleChange = useCallback(\n event => {\n onChange(event.target.value);\n },\n [onChange]\n );\n\n return (\n <select\n className={classNames('custom-select', className)}\n onChange={handleChange}\n defaultValue={defaultValue}\n value={value}\n disabled={disabled}\n data-testid={dataTestId}\n >\n {children}\n </select>\n );\n};\n\nexport default Select;\n"],"file":"Select.js"}
@@ -14,6 +14,7 @@ declare type SelectValueListProps<T> = {
14
14
  items: SelectItem<T>[];
15
15
  onSelect(itemIndex: number, value: T | null): void;
16
16
  onViewportChange(topRow: number, bottomRow: number): void;
17
+ 'data-testid'?: string;
17
18
  };
18
19
  /**
19
20
  * Select values from a long scrollable list.
@@ -23,6 +24,7 @@ declare class SelectValueList<T> extends PureComponent<SelectValueListProps<T>>
23
24
  static defaultProps: {
24
25
  disabled: boolean;
25
26
  rowHeight: number;
27
+ 'data-testid': undefined;
26
28
  };
27
29
  constructor(props: SelectValueListProps<T>);
28
30
  componentDidMount(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"SelectValueList.d.ts","sourceRoot":"","sources":["../src/SelectValueList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,wBAAwB,CAAC;AAChC,OAAO,OAAO,MAAM,UAAU,CAAC;AAG/B,UAAU,UAAU,CAAC,CAAC;IACpB,KAAK,EAAE,CAAC,CAAC;IACT,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,aAAK,oBAAoB,CAAC,CAAC,IAAI;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAElB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAGlB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IACnD,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3D,CAAC;AAEF;;;GAGG;AACH,cAAM,eAAe,CAAC,CAAC,CAAE,SAAQ,aAAa,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,CAAC,YAAY;;;MAGjB;gBAEU,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAW1C,iBAAiB,IAAI,IAAI;IAIzB,kBAAkB,IAAI,IAAI;IAI1B,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAEtC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzB,aAAa,eAEE,MAAM,OACZ,MAAM,SACJ,CAAC,gBACM,MAAM,GAAG,SAAS,aACrB,MAAM,cACL,OAAO,YACT,OAAO,KAChB,WAAW,iCAPD,MAAM,OACZ,MAAM,SACJ,CAAC,gBACM,MAAM,GAAG,SAAS,aACrB,MAAM,cACL,OAAO,YACT,OAAO,KAChB,WAAW,EAmBd;IAEF,cAAc,WAEH,WAAW,CAAC,CAAC,EAAE,aACX,MAAM,UACT,MAAM,YACJ,OAAO,KAChB,MAAM,SAAS,6BAJT,WAAW,CAAC,CAAC,EAAE,aACX,MAAM,UACT,MAAM,YACJ,OAAO,KAChB,MAAM,SAAS,EAqBlB;IAEF,YAAY,IAAI,IAAI;IAIpB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAYrC,kBAAkB,IAAI,IAAI;IAmB1B,MAAM,IAAI,GAAG,CAAC,OAAO;CAkCtB;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"SelectValueList.d.ts","sourceRoot":"","sources":["../src/SelectValueList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,wBAAwB,CAAC;AAChC,OAAO,OAAO,MAAM,UAAU,CAAC;AAG/B,UAAU,UAAU,CAAC,CAAC;IACpB,KAAK,EAAE,CAAC,CAAC;IACT,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,aAAK,oBAAoB,CAAC,CAAC,IAAI;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAElB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAGlB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IACnD,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACH,cAAM,eAAe,CAAC,CAAC,CAAE,SAAQ,aAAa,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,CAAC,YAAY;;;;MAIjB;gBAEU,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAW1C,iBAAiB,IAAI,IAAI;IAIzB,kBAAkB,IAAI,IAAI;IAI1B,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAEtC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzB,aAAa,eAEE,MAAM,OACZ,MAAM,SACJ,CAAC,gBACM,MAAM,GAAG,SAAS,aACrB,MAAM,cACL,OAAO,YACT,OAAO,KAChB,WAAW,iCAPD,MAAM,OACZ,MAAM,SACJ,CAAC,gBACM,MAAM,GAAG,SAAS,aACrB,MAAM,cACL,OAAO,YACT,OAAO,KAChB,WAAW,EAmBd;IAEF,cAAc,WAEH,WAAW,CAAC,CAAC,EAAE,aACX,MAAM,UACT,MAAM,YACJ,OAAO,KAChB,MAAM,SAAS,6BAJT,WAAW,CAAC,CAAC,EAAE,aACX,MAAM,UACT,MAAM,YACJ,OAAO,KAChB,MAAM,SAAS,EAqBlB;IAEF,YAAY,IAAI,IAAI;IAIpB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAYrC,kBAAkB,IAAI,IAAI;IAmB1B,MAAM,IAAI,GAAG,CAAC,OAAO;CA0CtB;AAED,eAAe,eAAe,CAAC"}
@@ -125,13 +125,15 @@ class SelectValueList extends PureComponent {
125
125
  items,
126
126
  itemCount,
127
127
  offset,
128
- rowHeight
128
+ rowHeight,
129
+ 'data-testid': dataTestId
129
130
  } = this.props;
130
131
  var itemElements = this.getCachedItems(items, rowHeight, offset, disabled);
131
132
  return /*#__PURE__*/React.createElement("div", {
132
133
  className: "select-value-list-scroll-pane h-100 w-100",
133
134
  onScroll: this.handleScroll,
134
- ref: this.list
135
+ ref: this.list,
136
+ "data-testid": dataTestId
135
137
  }, /*#__PURE__*/React.createElement("div", {
136
138
  className: "select-value-list",
137
139
  style: {
@@ -152,7 +154,8 @@ class SelectValueList extends PureComponent {
152
154
 
153
155
  _defineProperty(SelectValueList, "defaultProps", {
154
156
  disabled: false,
155
- rowHeight: 21
157
+ rowHeight: 21,
158
+ 'data-testid': undefined
156
159
  });
157
160
 
158
161
  export default SelectValueList;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/SelectValueList.tsx"],"names":["React","PureComponent","memoize","Checkbox","SelectValueList","constructor","props","itemIndex","key","value","displayValue","rowHeight","isSelected","disabled","style","height","text","handleSelect","max","items","offset","itemElements","i","length","item","element","getCachedItem","push","handleScroll","bind","list","createRef","topRow","bottomRow","componentDidMount","sendViewportUpdate","componentDidUpdate","onSelect","visibleItemIndex","current","clientHeight","onViewportChange","top","scrollTop","bottom","Math","floor","ceil","render","itemCount","getCachedItems","position","left"],"mappings":"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","sourcesContent":["import React, { PureComponent } from 'react';\nimport './SelectValueList.scss';\nimport memoize from 'memoizee';\nimport Checkbox from './Checkbox';\n\ninterface SelectItem<T> {\n value: T;\n displayValue?: string;\n isSelected: boolean;\n}\n\ntype SelectValueListProps<T> = {\n disabled: boolean;\n // Total item count\n itemCount: number;\n rowHeight: number;\n\n // Offset of the top item in the items array\n offset: number;\n items: SelectItem<T>[];\n\n onSelect(itemIndex: number, value: T | null): void;\n onViewportChange(topRow: number, bottomRow: number): void;\n};\n\n/**\n * Select values from a long scrollable list.\n * Swaps items in and out for infinite scrolling\n */\nclass SelectValueList<T> extends PureComponent<SelectValueListProps<T>> {\n static defaultProps = {\n disabled: false,\n rowHeight: 21,\n };\n\n constructor(props: SelectValueListProps<T>) {\n super(props);\n\n this.handleScroll = this.handleScroll.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n\n this.list = React.createRef();\n this.topRow = null;\n this.bottomRow = null;\n }\n\n componentDidMount(): void {\n this.sendViewportUpdate();\n }\n\n componentDidUpdate(): void {\n this.sendViewportUpdate();\n }\n\n list: React.RefObject<HTMLDivElement>;\n\n topRow: number | null;\n\n bottomRow: number | null;\n\n getCachedItem = memoize(\n (\n itemIndex: number,\n key: number,\n value: T,\n displayValue: string | undefined,\n rowHeight: number,\n isSelected: boolean,\n disabled: boolean\n ): JSX.Element => {\n const style = {\n height: rowHeight,\n };\n const text = displayValue != null ? displayValue : value;\n\n return (\n <li className=\"value-list-item\" style={style} key={key}>\n <Checkbox\n checked={isSelected}\n disabled={disabled}\n onChange={() => this.handleSelect(itemIndex)}\n >\n {text}\n </Checkbox>\n </li>\n );\n },\n { max: 1000 }\n );\n\n getCachedItems = memoize(\n (\n items: SelectItem<T>[],\n rowHeight: number,\n offset: number,\n disabled: boolean\n ): React.ReactNode => {\n const itemElements: JSX.Element[] = [];\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n const { value, displayValue, isSelected } = item;\n const itemIndex = offset + i;\n const key = itemIndex;\n const element = this.getCachedItem(\n itemIndex,\n key,\n value,\n displayValue,\n rowHeight,\n isSelected,\n disabled\n );\n itemElements.push(element);\n }\n return itemElements;\n },\n { max: 1 }\n );\n\n handleScroll(): void {\n this.sendViewportUpdate();\n }\n\n handleSelect(itemIndex: number): void {\n const { items, offset, onSelect } = this.props;\n const visibleItemIndex = itemIndex - offset;\n if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {\n const item = items[visibleItemIndex];\n const { value } = item;\n onSelect(itemIndex, value);\n } else {\n onSelect(itemIndex, null);\n }\n }\n\n sendViewportUpdate(): void {\n if (!this.list.current || this.list.current.clientHeight === 0) {\n return;\n }\n\n const { onViewportChange, rowHeight } = this.props;\n const top = this.list.current.scrollTop;\n const bottom = top + this.list.current.clientHeight;\n\n const topRow = Math.floor(top / rowHeight);\n const bottomRow = Math.ceil(bottom / rowHeight);\n\n if (this.topRow !== topRow || this.bottomRow !== bottomRow) {\n this.topRow = topRow;\n this.bottomRow = bottomRow;\n onViewportChange(topRow, bottomRow);\n }\n }\n\n render(): JSX.Element {\n const { disabled, items, itemCount, offset, rowHeight } = this.props;\n const itemElements = this.getCachedItems(\n items,\n rowHeight,\n offset,\n disabled\n );\n\n return (\n <div\n className=\"select-value-list-scroll-pane h-100 w-100\"\n onScroll={this.handleScroll}\n ref={this.list}\n >\n <div\n className=\"select-value-list\"\n style={{ height: itemCount * rowHeight }}\n >\n <ol\n className=\"select-value-list-content\"\n style={{\n position: 'absolute',\n height: items.length * rowHeight,\n top: offset * rowHeight,\n left: 0,\n }}\n >\n {itemElements}\n </ol>\n </div>\n </div>\n );\n }\n}\n\nexport default SelectValueList;\n"],"file":"SelectValueList.js"}
1
+ {"version":3,"sources":["../src/SelectValueList.tsx"],"names":["React","PureComponent","memoize","Checkbox","SelectValueList","constructor","props","itemIndex","key","value","displayValue","rowHeight","isSelected","disabled","style","height","text","handleSelect","max","items","offset","itemElements","i","length","item","element","getCachedItem","push","handleScroll","bind","list","createRef","topRow","bottomRow","componentDidMount","sendViewportUpdate","componentDidUpdate","onSelect","visibleItemIndex","current","clientHeight","onViewportChange","top","scrollTop","bottom","Math","floor","ceil","render","itemCount","dataTestId","getCachedItems","position","left","undefined"],"mappings":"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","sourcesContent":["import React, { PureComponent } from 'react';\nimport './SelectValueList.scss';\nimport memoize from 'memoizee';\nimport Checkbox from './Checkbox';\n\ninterface SelectItem<T> {\n value: T;\n displayValue?: string;\n isSelected: boolean;\n}\n\ntype SelectValueListProps<T> = {\n disabled: boolean;\n // Total item count\n itemCount: number;\n rowHeight: number;\n\n // Offset of the top item in the items array\n offset: number;\n items: SelectItem<T>[];\n\n onSelect(itemIndex: number, value: T | null): void;\n onViewportChange(topRow: number, bottomRow: number): void;\n\n 'data-testid'?: string;\n};\n\n/**\n * Select values from a long scrollable list.\n * Swaps items in and out for infinite scrolling\n */\nclass SelectValueList<T> extends PureComponent<SelectValueListProps<T>> {\n static defaultProps = {\n disabled: false,\n rowHeight: 21,\n 'data-testid': undefined,\n };\n\n constructor(props: SelectValueListProps<T>) {\n super(props);\n\n this.handleScroll = this.handleScroll.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n\n this.list = React.createRef();\n this.topRow = null;\n this.bottomRow = null;\n }\n\n componentDidMount(): void {\n this.sendViewportUpdate();\n }\n\n componentDidUpdate(): void {\n this.sendViewportUpdate();\n }\n\n list: React.RefObject<HTMLDivElement>;\n\n topRow: number | null;\n\n bottomRow: number | null;\n\n getCachedItem = memoize(\n (\n itemIndex: number,\n key: number,\n value: T,\n displayValue: string | undefined,\n rowHeight: number,\n isSelected: boolean,\n disabled: boolean\n ): JSX.Element => {\n const style = {\n height: rowHeight,\n };\n const text = displayValue != null ? displayValue : value;\n\n return (\n <li className=\"value-list-item\" style={style} key={key}>\n <Checkbox\n checked={isSelected}\n disabled={disabled}\n onChange={() => this.handleSelect(itemIndex)}\n >\n {text}\n </Checkbox>\n </li>\n );\n },\n { max: 1000 }\n );\n\n getCachedItems = memoize(\n (\n items: SelectItem<T>[],\n rowHeight: number,\n offset: number,\n disabled: boolean\n ): React.ReactNode => {\n const itemElements: JSX.Element[] = [];\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n const { value, displayValue, isSelected } = item;\n const itemIndex = offset + i;\n const key = itemIndex;\n const element = this.getCachedItem(\n itemIndex,\n key,\n value,\n displayValue,\n rowHeight,\n isSelected,\n disabled\n );\n itemElements.push(element);\n }\n return itemElements;\n },\n { max: 1 }\n );\n\n handleScroll(): void {\n this.sendViewportUpdate();\n }\n\n handleSelect(itemIndex: number): void {\n const { items, offset, onSelect } = this.props;\n const visibleItemIndex = itemIndex - offset;\n if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {\n const item = items[visibleItemIndex];\n const { value } = item;\n onSelect(itemIndex, value);\n } else {\n onSelect(itemIndex, null);\n }\n }\n\n sendViewportUpdate(): void {\n if (!this.list.current || this.list.current.clientHeight === 0) {\n return;\n }\n\n const { onViewportChange, rowHeight } = this.props;\n const top = this.list.current.scrollTop;\n const bottom = top + this.list.current.clientHeight;\n\n const topRow = Math.floor(top / rowHeight);\n const bottomRow = Math.ceil(bottom / rowHeight);\n\n if (this.topRow !== topRow || this.bottomRow !== bottomRow) {\n this.topRow = topRow;\n this.bottomRow = bottomRow;\n onViewportChange(topRow, bottomRow);\n }\n }\n\n render(): JSX.Element {\n const {\n disabled,\n items,\n itemCount,\n offset,\n rowHeight,\n 'data-testid': dataTestId,\n } = this.props;\n const itemElements = this.getCachedItems(\n items,\n rowHeight,\n offset,\n disabled\n );\n\n return (\n <div\n className=\"select-value-list-scroll-pane h-100 w-100\"\n onScroll={this.handleScroll}\n ref={this.list}\n data-testid={dataTestId}\n >\n <div\n className=\"select-value-list\"\n style={{ height: itemCount * rowHeight }}\n >\n <ol\n className=\"select-value-list-content\"\n style={{\n position: 'absolute',\n height: items.length * rowHeight,\n top: offset * rowHeight,\n left: 0,\n }}\n >\n {itemElements}\n </ol>\n </div>\n </div>\n );\n }\n}\n\nexport default SelectValueList;\n"],"file":"SelectValueList.js"}
@@ -11,6 +11,7 @@ declare type SocketedButtonProps = {
11
11
  onMouseEnter?: React.MouseEventHandler<HTMLButtonElement>;
12
12
  onMouseLeave?: React.MouseEventHandler<HTMLButtonElement>;
13
13
  style?: React.CSSProperties;
14
+ 'data-testid'?: string;
14
15
  };
15
16
  declare const SocketedButton: React.ForwardRefExoticComponent<SocketedButtonProps & React.RefAttributes<HTMLButtonElement>>;
16
17
  export default SocketedButton;
@@ -1 +1 @@
1
- {"version":3,"file":"SocketedButton.d.ts","sourceRoot":"","sources":["../src/SocketedButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,uBAAuB,CAAC;AAE/B,aAAK,mBAAmB,GAAG;IACzB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IACrD,YAAY,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IAC1D,YAAY,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IAC1D,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B,CAAC;AAEF,QAAA,MAAM,cAAc,+FA4CnB,CAAC;AAiBF,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"SocketedButton.d.ts","sourceRoot":"","sources":["../src/SocketedButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,uBAAuB,CAAC;AAE/B,aAAK,mBAAmB,GAAG;IACzB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IACrD,YAAY,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IAC1D,YAAY,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IAC1D,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,QAAA,MAAM,cAAc,+FA8CnB,CAAC;AAkBF,eAAe,cAAc,CAAC"}
@@ -14,7 +14,8 @@ var SocketedButton = /*#__PURE__*/React.forwardRef((props, ref) => {
14
14
  onClick,
15
15
  onMouseEnter,
16
16
  onMouseLeave,
17
- style
17
+ style,
18
+ 'data-testid': dataTestId
18
19
  } = props;
19
20
  return /*#__PURE__*/React.createElement("button", {
20
21
  ref: ref,
@@ -30,7 +31,8 @@ var SocketedButton = /*#__PURE__*/React.forwardRef((props, ref) => {
30
31
  onMouseEnter: onMouseEnter,
31
32
  onMouseLeave: onMouseLeave,
32
33
  style: style,
33
- disabled: disabled
34
+ disabled: disabled,
35
+ "data-testid": dataTestId
34
36
  }, children, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
35
37
  icon: vsLink,
36
38
  className: "linked btn-socketed-icon",
@@ -51,7 +53,8 @@ SocketedButton.defaultProps = {
51
53
  onClick: undefined,
52
54
  onMouseEnter: undefined,
53
55
  onMouseLeave: undefined,
54
- style: undefined
56
+ style: undefined,
57
+ 'data-testid': undefined
55
58
  };
56
59
  export default SocketedButton;
57
60
  //# sourceMappingURL=SocketedButton.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/SocketedButton.tsx"],"names":["React","classNames","dhExclamation","vsLink","FontAwesomeIcon","SocketedButton","forwardRef","props","ref","children","className","disabled","isLinked","isLinkedSource","isInvalid","onClick","onMouseEnter","onMouseLeave","style","displayName","defaultProps","undefined"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,SAASC,aAAT,EAAwBC,MAAxB,QAAsC,kBAAtC;AACA,SAASC,eAAT,QAAgC,gCAAhC;;AAiBA,IAAMC,cAAc,gBAAGL,KAAK,CAACM,UAAN,CACrB,CAACC,KAAD,EAA6BC,GAA7B,KAAqC;AACnC,MAAM;AACJC,IAAAA,QADI;AAEJC,IAAAA,SAFI;AAGJC,IAAAA,QAHI;AAIJC,IAAAA,QAJI;AAKJC,IAAAA,cALI;AAMJC,IAAAA,SANI;AAOJC,IAAAA,OAPI;AAQJC,IAAAA,YARI;AASJC,IAAAA,YATI;AAUJC,IAAAA;AAVI,MAWFX,KAXJ;AAYA,sBACE;AACE,IAAA,GAAG,EAAEC,GADP;AAEE,IAAA,IAAI,EAAC,QAFP;AAGE,IAAA,SAAS,EAAEP,UAAU,CACnB,cADmB,EAEnB;AAAE,6BAAuBW,QAAQ,IAAIC;AAArC,KAFmB,EAGnB;AAAE,oCAA8BA;AAAhC,KAHmB,EAInB;AAAE,oBAAcC;AAAhB,KAJmB,EAKnBJ,SALmB,CAHvB;AAUE,IAAA,OAAO,EAAEK,OAVX;AAWE,IAAA,YAAY,EAAEC,YAXhB;AAYE,IAAA,YAAY,EAAEC,YAZhB;AAaE,IAAA,KAAK,EAAEC,KAbT;AAcE,IAAA,QAAQ,EAAEP;AAdZ,KAgBGF,QAhBH,eAiBE,oBAAC,eAAD;AACE,IAAA,IAAI,EAAEN,MADR;AAEE,IAAA,SAAS,EAAC,0BAFZ;AAGE,IAAA,SAAS,EAAC;AAHZ,IAjBF,eAsBE,oBAAC,eAAD;AACE,IAAA,IAAI,EAAED,aADR;AAEE,IAAA,SAAS,EAAC;AAFZ,IAtBF,CADF;AA6BD,CA3CoB,CAAvB;AA8CAG,cAAc,CAACc,WAAf,GAA6B,gBAA7B;AAEAd,cAAc,CAACe,YAAf,GAA8B;AAC5BX,EAAAA,QAAQ,EAAEY,SADkB;AAE5BX,EAAAA,SAAS,EAAE,EAFiB;AAG5BC,EAAAA,QAAQ,EAAE,KAHkB;AAI5BC,EAAAA,QAAQ,EAAE,KAJkB;AAK5BC,EAAAA,cAAc,EAAE,KALY;AAM5BC,EAAAA,SAAS,EAAE,KANiB;AAO5BC,EAAAA,OAAO,EAAEM,SAPmB;AAQ5BL,EAAAA,YAAY,EAAEK,SARc;AAS5BJ,EAAAA,YAAY,EAAEI,SATc;AAU5BH,EAAAA,KAAK,EAAEG;AAVqB,CAA9B;AAaA,eAAehB,cAAf","sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport { dhExclamation, vsLink } from '@deephaven/icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nimport './SocketedButton.scss';\n\ntype SocketedButtonProps = {\n children?: React.ReactNode;\n className?: string;\n disabled?: boolean;\n isLinked?: boolean;\n isLinkedSource?: boolean;\n isInvalid?: boolean;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n onMouseEnter?: React.MouseEventHandler<HTMLButtonElement>;\n onMouseLeave?: React.MouseEventHandler<HTMLButtonElement>;\n style?: React.CSSProperties;\n};\n\nconst SocketedButton = React.forwardRef<HTMLButtonElement, SocketedButtonProps>(\n (props: SocketedButtonProps, ref) => {\n const {\n children,\n className,\n disabled,\n isLinked,\n isLinkedSource,\n isInvalid,\n onClick,\n onMouseEnter,\n onMouseLeave,\n style,\n } = props;\n return (\n <button\n ref={ref}\n type=\"button\"\n className={classNames(\n 'btn-socketed',\n { 'btn-socketed-linked': isLinked || isLinkedSource },\n { 'btn-socketed-linked-source': isLinkedSource },\n { 'is-invalid': isInvalid },\n className\n )}\n onClick={onClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n style={style}\n disabled={disabled}\n >\n {children}\n <FontAwesomeIcon\n icon={vsLink}\n className=\"linked btn-socketed-icon\"\n transform=\"down-1\"\n />\n <FontAwesomeIcon\n icon={dhExclamation}\n className=\"is-invalid btn-socketed-icon\"\n />\n </button>\n );\n }\n);\n\nSocketedButton.displayName = 'SocketedButton';\n\nSocketedButton.defaultProps = {\n children: undefined,\n className: '',\n disabled: false,\n isLinked: false,\n isLinkedSource: false,\n isInvalid: false,\n onClick: undefined,\n onMouseEnter: undefined,\n onMouseLeave: undefined,\n style: undefined,\n};\n\nexport default SocketedButton;\n"],"file":"SocketedButton.js"}
1
+ {"version":3,"sources":["../src/SocketedButton.tsx"],"names":["React","classNames","dhExclamation","vsLink","FontAwesomeIcon","SocketedButton","forwardRef","props","ref","children","className","disabled","isLinked","isLinkedSource","isInvalid","onClick","onMouseEnter","onMouseLeave","style","dataTestId","displayName","defaultProps","undefined"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,SAASC,aAAT,EAAwBC,MAAxB,QAAsC,kBAAtC;AACA,SAASC,eAAT,QAAgC,gCAAhC;;AAkBA,IAAMC,cAAc,gBAAGL,KAAK,CAACM,UAAN,CACrB,CAACC,KAAD,EAA6BC,GAA7B,KAAqC;AACnC,MAAM;AACJC,IAAAA,QADI;AAEJC,IAAAA,SAFI;AAGJC,IAAAA,QAHI;AAIJC,IAAAA,QAJI;AAKJC,IAAAA,cALI;AAMJC,IAAAA,SANI;AAOJC,IAAAA,OAPI;AAQJC,IAAAA,YARI;AASJC,IAAAA,YATI;AAUJC,IAAAA,KAVI;AAWJ,mBAAeC;AAXX,MAYFZ,KAZJ;AAaA,sBACE;AACE,IAAA,GAAG,EAAEC,GADP;AAEE,IAAA,IAAI,EAAC,QAFP;AAGE,IAAA,SAAS,EAAEP,UAAU,CACnB,cADmB,EAEnB;AAAE,6BAAuBW,QAAQ,IAAIC;AAArC,KAFmB,EAGnB;AAAE,oCAA8BA;AAAhC,KAHmB,EAInB;AAAE,oBAAcC;AAAhB,KAJmB,EAKnBJ,SALmB,CAHvB;AAUE,IAAA,OAAO,EAAEK,OAVX;AAWE,IAAA,YAAY,EAAEC,YAXhB;AAYE,IAAA,YAAY,EAAEC,YAZhB;AAaE,IAAA,KAAK,EAAEC,KAbT;AAcE,IAAA,QAAQ,EAAEP,QAdZ;AAeE,mBAAaQ;AAff,KAiBGV,QAjBH,eAkBE,oBAAC,eAAD;AACE,IAAA,IAAI,EAAEN,MADR;AAEE,IAAA,SAAS,EAAC,0BAFZ;AAGE,IAAA,SAAS,EAAC;AAHZ,IAlBF,eAuBE,oBAAC,eAAD;AACE,IAAA,IAAI,EAAED,aADR;AAEE,IAAA,SAAS,EAAC;AAFZ,IAvBF,CADF;AA8BD,CA7CoB,CAAvB;AAgDAG,cAAc,CAACe,WAAf,GAA6B,gBAA7B;AAEAf,cAAc,CAACgB,YAAf,GAA8B;AAC5BZ,EAAAA,QAAQ,EAAEa,SADkB;AAE5BZ,EAAAA,SAAS,EAAE,EAFiB;AAG5BC,EAAAA,QAAQ,EAAE,KAHkB;AAI5BC,EAAAA,QAAQ,EAAE,KAJkB;AAK5BC,EAAAA,cAAc,EAAE,KALY;AAM5BC,EAAAA,SAAS,EAAE,KANiB;AAO5BC,EAAAA,OAAO,EAAEO,SAPmB;AAQ5BN,EAAAA,YAAY,EAAEM,SARc;AAS5BL,EAAAA,YAAY,EAAEK,SATc;AAU5BJ,EAAAA,KAAK,EAAEI,SAVqB;AAW5B,iBAAeA;AAXa,CAA9B;AAcA,eAAejB,cAAf","sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport { dhExclamation, vsLink } from '@deephaven/icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nimport './SocketedButton.scss';\n\ntype SocketedButtonProps = {\n children?: React.ReactNode;\n className?: string;\n disabled?: boolean;\n isLinked?: boolean;\n isLinkedSource?: boolean;\n isInvalid?: boolean;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n onMouseEnter?: React.MouseEventHandler<HTMLButtonElement>;\n onMouseLeave?: React.MouseEventHandler<HTMLButtonElement>;\n style?: React.CSSProperties;\n 'data-testid'?: string;\n};\n\nconst SocketedButton = React.forwardRef<HTMLButtonElement, SocketedButtonProps>(\n (props: SocketedButtonProps, ref) => {\n const {\n children,\n className,\n disabled,\n isLinked,\n isLinkedSource,\n isInvalid,\n onClick,\n onMouseEnter,\n onMouseLeave,\n style,\n 'data-testid': dataTestId,\n } = props;\n return (\n <button\n ref={ref}\n type=\"button\"\n className={classNames(\n 'btn-socketed',\n { 'btn-socketed-linked': isLinked || isLinkedSource },\n { 'btn-socketed-linked-source': isLinkedSource },\n { 'is-invalid': isInvalid },\n className\n )}\n onClick={onClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n style={style}\n disabled={disabled}\n data-testid={dataTestId}\n >\n {children}\n <FontAwesomeIcon\n icon={vsLink}\n className=\"linked btn-socketed-icon\"\n transform=\"down-1\"\n />\n <FontAwesomeIcon\n icon={dhExclamation}\n className=\"is-invalid btn-socketed-icon\"\n />\n </button>\n );\n }\n);\n\nSocketedButton.displayName = 'SocketedButton';\n\nSocketedButton.defaultProps = {\n children: undefined,\n className: '',\n disabled: false,\n isLinked: false,\n isLinkedSource: false,\n isInvalid: false,\n onClick: undefined,\n onMouseEnter: undefined,\n onMouseLeave: undefined,\n style: undefined,\n 'data-testid': undefined,\n};\n\nexport default SocketedButton;\n"],"file":"SocketedButton.js"}
@@ -6,6 +6,7 @@ declare type TimeInputProps = {
6
6
  value?: number;
7
7
  onFocus?(): void;
8
8
  onBlur?(): void;
9
+ 'data-testid'?: string;
9
10
  };
10
11
  declare const TimeInput: React.ForwardRefExoticComponent<TimeInputProps & React.RefAttributes<HTMLInputElement>>;
11
12
  export default TimeInput;
@@ -1 +1 @@
1
- {"version":3,"file":"TimeInput.d.ts","sourceRoot":"","sources":["../src/TimeInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAanD,aAAK,cAAc,GAAG;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,IAAI,IAAI,CAAC;IACjB,MAAM,CAAC,IAAI,IAAI,CAAC;CACjB,CAAC;AAKF,QAAA,MAAM,SAAS,yFAyFd,CAAC;AAWF,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"TimeInput.d.ts","sourceRoot":"","sources":["../src/TimeInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAanD,aAAK,cAAc,GAAG;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,IAAI,IAAI,CAAC;IACjB,MAAM,CAAC,IAAI,IAAI,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAKF,QAAA,MAAM,SAAS,yFA2Fd,CAAC;AAYF,eAAe,SAAS,CAAC"}