@deephaven/components 0.22.3-beta.18 → 0.22.3-beta.21

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 (178) 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.js +8 -34
  12. package/dist/Button.js.map +1 -1
  13. package/dist/ButtonGroup.d.ts +6 -6
  14. package/dist/ButtonGroup.d.ts.map +1 -1
  15. package/dist/ButtonGroup.js +2 -4
  16. package/dist/ButtonGroup.js.map +1 -1
  17. package/dist/ButtonOld.js.map +1 -1
  18. package/dist/CardFlip.d.ts +1 -1
  19. package/dist/CardFlip.d.ts.map +1 -1
  20. package/dist/CardFlip.js +2 -7
  21. package/dist/CardFlip.js.map +1 -1
  22. package/dist/Checkbox.js +3 -14
  23. package/dist/Checkbox.js.map +1 -1
  24. package/dist/Collapse.js +0 -15
  25. package/dist/Collapse.js.map +1 -1
  26. package/dist/ComboBox.js +4 -83
  27. package/dist/ComboBox.js.map +1 -1
  28. package/dist/CopyButton.d.ts +1 -1
  29. package/dist/CopyButton.d.ts.map +1 -1
  30. package/dist/CopyButton.js +2 -4
  31. package/dist/CopyButton.js.map +1 -1
  32. package/dist/CustomTimeSelect.js +2 -86
  33. package/dist/CustomTimeSelect.js.map +1 -1
  34. package/dist/DateInput.js.map +1 -1
  35. package/dist/DateInputUtils.js +0 -7
  36. package/dist/DateInputUtils.js.map +1 -1
  37. package/dist/DateTimeInput.js +7 -10
  38. package/dist/DateTimeInput.js.map +1 -1
  39. package/dist/DebouncedSearchInput.js +0 -14
  40. package/dist/DebouncedSearchInput.js.map +1 -1
  41. package/dist/DragUtils.js +4 -16
  42. package/dist/DragUtils.js.map +1 -1
  43. package/dist/DraggableItemList.d.ts.map +1 -1
  44. package/dist/DraggableItemList.js +22 -44
  45. package/dist/DraggableItemList.js.map +1 -1
  46. package/dist/EditableItemList.d.ts +1 -1
  47. package/dist/EditableItemList.d.ts.map +1 -1
  48. package/dist/EditableItemList.js +2 -6
  49. package/dist/EditableItemList.js.map +1 -1
  50. package/dist/HierarchicalCheckboxMenu.js +6 -28
  51. package/dist/HierarchicalCheckboxMenu.js.map +1 -1
  52. package/dist/ItemList.d.ts.map +1 -1
  53. package/dist/ItemList.js +22 -115
  54. package/dist/ItemList.js.map +1 -1
  55. package/dist/ItemListItem.d.ts +0 -1
  56. package/dist/ItemListItem.d.ts.map +1 -1
  57. package/dist/ItemListItem.js +26 -50
  58. package/dist/ItemListItem.js.map +1 -1
  59. package/dist/LoadingOverlay.d.ts +1 -1
  60. package/dist/LoadingOverlay.d.ts.map +1 -1
  61. package/dist/LoadingOverlay.js +3 -5
  62. package/dist/LoadingOverlay.js.map +1 -1
  63. package/dist/LoadingSpinner.d.ts +1 -1
  64. package/dist/LoadingSpinner.d.ts.map +1 -1
  65. package/dist/LoadingSpinner.js +2 -4
  66. package/dist/LoadingSpinner.js.map +1 -1
  67. package/dist/MaskedInput.js +26 -85
  68. package/dist/MaskedInput.js.map +1 -1
  69. package/dist/Option.d.ts +1 -1
  70. package/dist/Option.d.ts.map +1 -1
  71. package/dist/Option.js +2 -4
  72. package/dist/Option.js.map +1 -1
  73. package/dist/RadioGroup.d.ts +1 -1
  74. package/dist/RadioGroup.d.ts.map +1 -1
  75. package/dist/RadioGroup.js +4 -6
  76. package/dist/RadioGroup.js.map +1 -1
  77. package/dist/RadioItem.js +0 -1
  78. package/dist/RadioItem.js.map +1 -1
  79. package/dist/SearchInput.js +2 -13
  80. package/dist/SearchInput.js.map +1 -1
  81. package/dist/Select.d.ts +1 -1
  82. package/dist/Select.d.ts.map +1 -1
  83. package/dist/Select.js +2 -4
  84. package/dist/Select.js.map +1 -1
  85. package/dist/SelectValueList.js +0 -28
  86. package/dist/SelectValueList.js.map +1 -1
  87. package/dist/SocketedButton.js.map +1 -1
  88. package/dist/ThemeExport.js +0 -4
  89. package/dist/ThemeExport.js.map +1 -1
  90. package/dist/TimeInput.js +2 -12
  91. package/dist/TimeInput.js.map +1 -1
  92. package/dist/TimeSlider.d.ts +1 -1
  93. package/dist/TimeSlider.d.ts.map +1 -1
  94. package/dist/TimeSlider.js +19 -33
  95. package/dist/TimeSlider.js.map +1 -1
  96. package/dist/ToastNotification.d.ts +4 -4
  97. package/dist/ToastNotification.d.ts.map +1 -1
  98. package/dist/ToastNotification.js +2 -4
  99. package/dist/ToastNotification.js.map +1 -1
  100. package/dist/UISwitch.d.ts +1 -1
  101. package/dist/UISwitch.d.ts.map +1 -1
  102. package/dist/UISwitch.js +2 -4
  103. package/dist/UISwitch.js.map +1 -1
  104. package/dist/ValidateLabelInput.d.ts.map +1 -1
  105. package/dist/ValidateLabelInput.js +3 -3
  106. package/dist/ValidateLabelInput.js.map +1 -1
  107. package/dist/context-actions/ContextActionUtils.js +9 -40
  108. package/dist/context-actions/ContextActionUtils.js.map +1 -1
  109. package/dist/context-actions/ContextActions.js +1 -34
  110. package/dist/context-actions/ContextActions.js.map +1 -1
  111. package/dist/context-actions/ContextMenu.js +29 -110
  112. package/dist/context-actions/ContextMenu.js.map +1 -1
  113. package/dist/context-actions/ContextMenuItem.d.ts.map +1 -1
  114. package/dist/context-actions/ContextMenuItem.js +3 -19
  115. package/dist/context-actions/ContextMenuItem.js.map +1 -1
  116. package/dist/context-actions/ContextMenuRoot.js +7 -26
  117. package/dist/context-actions/ContextMenuRoot.js.map +1 -1
  118. package/dist/context-actions/GlobalContextAction.js +0 -15
  119. package/dist/context-actions/GlobalContextAction.js.map +1 -1
  120. package/dist/context-actions/GlobalContextActions.js +0 -6
  121. package/dist/context-actions/GlobalContextActions.js.map +1 -1
  122. package/dist/context-actions/index.js.map +1 -1
  123. package/dist/index.js.map +1 -1
  124. package/dist/menu-actions/DropdownMenu.js +4 -32
  125. package/dist/menu-actions/DropdownMenu.js.map +1 -1
  126. package/dist/menu-actions/Menu.js +7 -52
  127. package/dist/menu-actions/Menu.js.map +1 -1
  128. package/dist/menu-actions/index.d.ts +2 -1
  129. package/dist/menu-actions/index.d.ts.map +1 -1
  130. package/dist/menu-actions/index.js +2 -2
  131. package/dist/menu-actions/index.js.map +1 -1
  132. package/dist/modal/Modal.d.ts +2 -2
  133. package/dist/modal/Modal.d.ts.map +1 -1
  134. package/dist/modal/Modal.js +3 -9
  135. package/dist/modal/Modal.js.map +1 -1
  136. package/dist/modal/ModalBody.d.ts +1 -1
  137. package/dist/modal/ModalBody.d.ts.map +1 -1
  138. package/dist/modal/ModalBody.js +2 -4
  139. package/dist/modal/ModalBody.js.map +1 -1
  140. package/dist/modal/ModalFooter.d.ts +1 -1
  141. package/dist/modal/ModalFooter.d.ts.map +1 -1
  142. package/dist/modal/ModalFooter.js +2 -4
  143. package/dist/modal/ModalFooter.js.map +1 -1
  144. package/dist/modal/ModalHeader.d.ts +1 -1
  145. package/dist/modal/ModalHeader.d.ts.map +1 -1
  146. package/dist/modal/ModalHeader.js +2 -4
  147. package/dist/modal/ModalHeader.js.map +1 -1
  148. package/dist/modal/index.js.map +1 -1
  149. package/dist/navigation/Menu.d.ts +1 -1
  150. package/dist/navigation/Menu.d.ts.map +1 -1
  151. package/dist/navigation/Menu.js +2 -2
  152. package/dist/navigation/Menu.js.map +1 -1
  153. package/dist/navigation/MenuItem.d.ts +1 -1
  154. package/dist/navigation/MenuItem.d.ts.map +1 -1
  155. package/dist/navigation/MenuItem.js +4 -7
  156. package/dist/navigation/MenuItem.js.map +1 -1
  157. package/dist/navigation/Page.d.ts +1 -1
  158. package/dist/navigation/Page.d.ts.map +1 -1
  159. package/dist/navigation/Page.js +2 -3
  160. package/dist/navigation/Page.js.map +1 -1
  161. package/dist/navigation/Stack.d.ts +1 -1
  162. package/dist/navigation/Stack.d.ts.map +1 -1
  163. package/dist/navigation/Stack.js +3 -6
  164. package/dist/navigation/Stack.js.map +1 -1
  165. package/dist/navigation/index.js.map +1 -1
  166. package/dist/popper/Popper.d.ts.map +1 -1
  167. package/dist/popper/Popper.js +13 -46
  168. package/dist/popper/Popper.js.map +1 -1
  169. package/dist/popper/Tooltip.js +0 -56
  170. package/dist/popper/Tooltip.js.map +1 -1
  171. package/dist/popper/index.js.map +1 -1
  172. package/dist/shortcuts/GlobalShortcuts.js.map +1 -1
  173. package/dist/shortcuts/Shortcut.js +19 -76
  174. package/dist/shortcuts/Shortcut.js.map +1 -1
  175. package/dist/shortcuts/ShortcutRegistry.js +3 -18
  176. package/dist/shortcuts/ShortcutRegistry.js.map +1 -1
  177. package/dist/shortcuts/index.js.map +1 -1
  178. package/package.json +8 -8
@@ -1,6 +1,5 @@
1
1
  import React, { useState } from 'react';
2
2
  import shortid from 'shortid';
3
-
4
3
  /**
5
4
  * A group of radio buttons. Use with RadioItems to populate, eg.
6
5
  * <RadioGroup>
@@ -8,7 +7,7 @@ import shortid from 'shortid';
8
7
  * <RadioItem .../>
9
8
  * </RadioGroup>
10
9
  */
11
- var RadioGroup = props => {
10
+ function RadioGroup(props) {
12
11
  var {
13
12
  children,
14
13
  disabled = false,
@@ -17,11 +16,11 @@ var RadioGroup = props => {
17
16
  value = '',
18
17
  'data-testid': dataTestId
19
18
  } = props;
20
- var [name] = useState(propsName !== null && propsName !== void 0 ? propsName : shortid()); // Need to use "text" type so we can apply a pattern and make selection properly
19
+ var [name] = useState(propsName !== null && propsName !== void 0 ? propsName : shortid());
21
20
 
21
+ // Need to use "text" type so we can apply a pattern and make selection properly
22
22
  return /*#__PURE__*/React.createElement(React.Fragment, null, React.Children.map(children, child => {
23
23
  var _child$props$onChange, _child$props$disabled;
24
-
25
24
  return child ? /*#__PURE__*/React.cloneElement(child, {
26
25
  name,
27
26
  onChange: (_child$props$onChange = child.props.onChange) !== null && _child$props$onChange !== void 0 ? _child$props$onChange : onChange,
@@ -30,7 +29,6 @@ var RadioGroup = props => {
30
29
  'data-testid': dataTestId
31
30
  }) : null;
32
31
  }));
33
- };
34
-
32
+ }
35
33
  export default RadioGroup;
36
34
  //# sourceMappingURL=RadioGroup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RadioGroup.js","names":["React","useState","shortid","RadioGroup","props","children","disabled","name","propsName","onChange","value","dataTestId","Children","map","child","cloneElement","checked"],"sources":["../src/RadioGroup.tsx"],"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"],"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;EAC1D,IAAM;IACJC,QADI;IAEJC,QAAQ,GAAG,KAFP;IAGJC,IAAI,EAAEC,SAHF;IAIJC,QAJI;IAKJC,KAAK,GAAG,EALJ;IAMJ,eAAeC;EANX,IAOFP,KAPJ;EAQA,IAAM,CAACG,IAAD,IAASN,QAAQ,CAACO,SAAD,aAACA,SAAD,cAACA,SAAD,GAAcN,OAAO,EAArB,CAAvB,CAT0D,CAW1D;;EACA,oBACE,0CACGF,KAAK,CAACY,QAAN,CAAeC,GAAf,CAAmBR,QAAnB,EAA6BS,KAAK;IAAA;;IAAA,OACjCA,KAAK,gBACDd,KAAK,CAACe,YAAN,CAAmBD,KAAnB,EAA0B;MACxBP,IADwB;MAExBE,QAAQ,2BAAEK,KAAK,CAACV,KAAN,CAAYK,QAAd,yEAA0BA,QAFV;MAGxBO,OAAO,EAAEN,KAAK,KAAKI,KAAK,CAACV,KAAN,CAAYM,KAHP;MAIxBJ,QAAQ,2BAAEQ,KAAK,CAACV,KAAN,CAAYE,QAAd,yEAA0BA,QAJV;MAKxB,eAAeK;IALS,CAA1B,CADC,GAQD,IAT6B;EAAA,CAAlC,CADH,CADF;AAeD,CA3BD;;AA6BA,eAAeR,UAAf"}
1
+ {"version":3,"file":"RadioGroup.js","names":["React","useState","shortid","RadioGroup","props","children","disabled","name","propsName","onChange","value","dataTestId","Children","map","child","cloneElement","checked"],"sources":["../src/RadioGroup.tsx"],"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 */\nfunction RadioGroup(props: RadioGroupProps): JSX.Element {\n const {\n children,\n disabled = false,\n name: propsName,\n onChange,\n value = '',\n 'data-testid': dataTestId,\n } = props;\n const [name] = useState(propsName ?? 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"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,OAAOC,OAAO,MAAM,SAAS;AAmB7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,UAAU,CAACC,KAAsB,EAAe;EACvD,IAAM;IACJC,QAAQ;IACRC,QAAQ,GAAG,KAAK;IAChBC,IAAI,EAAEC,SAAS;IACfC,QAAQ;IACRC,KAAK,GAAG,EAAE;IACV,aAAa,EAAEC;EACjB,CAAC,GAAGP,KAAK;EACT,IAAM,CAACG,IAAI,CAAC,GAAGN,QAAQ,CAACO,SAAS,aAATA,SAAS,cAATA,SAAS,GAAIN,OAAO,EAAE,CAAC;;EAE/C;EACA,oBACE,0CACGF,KAAK,CAACY,QAAQ,CAACC,GAAG,CAACR,QAAQ,EAAES,KAAK;IAAA;IAAA,OACjCA,KAAK,gBACDd,KAAK,CAACe,YAAY,CAACD,KAAK,EAAE;MACxBP,IAAI;MACJE,QAAQ,2BAAEK,KAAK,CAACV,KAAK,CAACK,QAAQ,yEAAIA,QAAQ;MAC1CO,OAAO,EAAEN,KAAK,KAAKI,KAAK,CAACV,KAAK,CAACM,KAAK;MACpCJ,QAAQ,2BAAEQ,KAAK,CAACV,KAAK,CAACE,QAAQ,yEAAIA,QAAQ;MAC1C,aAAa,EAAEK;IACjB,CAAC,CAAC,GACF,IAAI;EAAA,EACT,CACA;AAEP;AAEA,eAAeR,UAAU"}
package/dist/RadioItem.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import React, { useState } from 'react';
2
2
  import classNames from 'classnames';
3
3
  import shortid from 'shortid';
4
-
5
4
  /**
6
5
  * A RadioItem to be used within the Radio component.
7
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"RadioItem.js","names":["React","useState","classNames","shortid","RadioItem","forwardRef","props","ref","checked","children","className","disabled","inputClassName","isInvalid","labelClassName","name","onChange","value","dataTestId","id","displayName","defaultProps","undefined"],"sources":["../src/RadioItem.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport classNames from 'classnames';\nimport shortid from 'shortid';\n\ntype RadioItemProps = {\n /** Whether this value is currently checked or not */\n checked?: boolean;\n\n /** The node/text to put in the label of this radio item */\n children: React.ReactNode;\n\n /** An extra class name to add to the outer div component */\n className?: string;\n\n /** An extra class for disabling the radio button component */\n disabled?: boolean;\n\n /** An extra class name for the input component */\n inputClassName?: string;\n\n /** The value is invalid, style to show it's invalid */\n isInvalid?: boolean;\n\n /** An extra class name for the label component */\n labelClassName?: string;\n\n /** The name for this RadioItem. Should be specified by the parent Radio component */\n name?: string;\n\n /** Triggered when the input is checked/unchecked. Provided by the parent Radio component. */\n onChange?: React.ChangeEventHandler<HTMLInputElement>;\n\n /** The value to associate with this radio item */\n value: string;\n\n /** An id used for test */\n 'data-testid'?: string;\n};\n\n/**\n * A RadioItem to be used within the Radio component.\n */\nconst RadioItem = React.forwardRef<HTMLInputElement, RadioItemProps>(\n (props: RadioItemProps, ref) => {\n const {\n checked,\n children,\n className = '',\n disabled = false,\n inputClassName = '',\n isInvalid = false,\n labelClassName = '',\n name,\n onChange,\n value,\n 'data-testid': dataTestId,\n } = props;\n\n const [id] = useState(shortid());\n\n return (\n <div className={classNames('custom-control custom-radio', className)}>\n <input\n type=\"radio\"\n id={id}\n data-testid={dataTestId}\n name={name}\n ref={ref}\n className={classNames('custom-control-input', inputClassName, {\n 'is-invalid': isInvalid,\n })}\n checked={checked}\n disabled={disabled}\n value={value}\n onChange={onChange}\n />\n <label\n className={classNames('custom-control-label', labelClassName)}\n htmlFor={id}\n >\n {children}\n </label>\n </div>\n );\n }\n);\n\nRadioItem.displayName = 'RadioItem';\n\nRadioItem.defaultProps = {\n checked: undefined,\n className: '',\n disabled: false,\n inputClassName: '',\n isInvalid: false,\n labelClassName: '',\n name: undefined,\n onChange: undefined,\n 'data-testid': undefined,\n};\n\nexport default RadioItem;\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,QAAhB,QAAgC,OAAhC;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,OAAOC,OAAP,MAAoB,SAApB;;AAqCA;AACA;AACA;AACA,IAAMC,SAAS,gBAAGJ,KAAK,CAACK,UAAN,CAChB,CAACC,KAAD,EAAwBC,GAAxB,KAAgC;EAC9B,IAAM;IACJC,OADI;IAEJC,QAFI;IAGJC,SAAS,GAAG,EAHR;IAIJC,QAAQ,GAAG,KAJP;IAKJC,cAAc,GAAG,EALb;IAMJC,SAAS,GAAG,KANR;IAOJC,cAAc,GAAG,EAPb;IAQJC,IARI;IASJC,QATI;IAUJC,KAVI;IAWJ,eAAeC;EAXX,IAYFZ,KAZJ;EAcA,IAAM,CAACa,EAAD,IAAOlB,QAAQ,CAACE,OAAO,EAAR,CAArB;EAEA,oBACE;IAAK,SAAS,EAAED,UAAU,CAAC,6BAAD,EAAgCQ,SAAhC;EAA1B,gBACE;IACE,IAAI,EAAC,OADP;IAEE,EAAE,EAAES,EAFN;IAGE,eAAaD,UAHf;IAIE,IAAI,EAAEH,IAJR;IAKE,GAAG,EAAER,GALP;IAME,SAAS,EAAEL,UAAU,CAAC,sBAAD,EAAyBU,cAAzB,EAAyC;MAC5D,cAAcC;IAD8C,CAAzC,CANvB;IASE,OAAO,EAAEL,OATX;IAUE,QAAQ,EAAEG,QAVZ;IAWE,KAAK,EAAEM,KAXT;IAYE,QAAQ,EAAED;EAZZ,EADF,eAeE;IACE,SAAS,EAAEd,UAAU,CAAC,sBAAD,EAAyBY,cAAzB,CADvB;IAEE,OAAO,EAAEK;EAFX,GAIGV,QAJH,CAfF,CADF;AAwBD,CA1Ce,CAAlB;AA6CAL,SAAS,CAACgB,WAAV,GAAwB,WAAxB;AAEAhB,SAAS,CAACiB,YAAV,GAAyB;EACvBb,OAAO,EAAEc,SADc;EAEvBZ,SAAS,EAAE,EAFY;EAGvBC,QAAQ,EAAE,KAHa;EAIvBC,cAAc,EAAE,EAJO;EAKvBC,SAAS,EAAE,KALY;EAMvBC,cAAc,EAAE,EANO;EAOvBC,IAAI,EAAEO,SAPiB;EAQvBN,QAAQ,EAAEM,SARa;EASvB,eAAeA;AATQ,CAAzB;AAYA,eAAelB,SAAf"}
1
+ {"version":3,"file":"RadioItem.js","names":["React","useState","classNames","shortid","RadioItem","forwardRef","props","ref","checked","children","className","disabled","inputClassName","isInvalid","labelClassName","name","onChange","value","dataTestId","id","displayName","defaultProps","undefined"],"sources":["../src/RadioItem.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport classNames from 'classnames';\nimport shortid from 'shortid';\n\ntype RadioItemProps = {\n /** Whether this value is currently checked or not */\n checked?: boolean;\n\n /** The node/text to put in the label of this radio item */\n children: React.ReactNode;\n\n /** An extra class name to add to the outer div component */\n className?: string;\n\n /** An extra class for disabling the radio button component */\n disabled?: boolean;\n\n /** An extra class name for the input component */\n inputClassName?: string;\n\n /** The value is invalid, style to show it's invalid */\n isInvalid?: boolean;\n\n /** An extra class name for the label component */\n labelClassName?: string;\n\n /** The name for this RadioItem. Should be specified by the parent Radio component */\n name?: string;\n\n /** Triggered when the input is checked/unchecked. Provided by the parent Radio component. */\n onChange?: React.ChangeEventHandler<HTMLInputElement>;\n\n /** The value to associate with this radio item */\n value: string;\n\n /** An id used for test */\n 'data-testid'?: string;\n};\n\n/**\n * A RadioItem to be used within the Radio component.\n */\nconst RadioItem = React.forwardRef<HTMLInputElement, RadioItemProps>(\n (props: RadioItemProps, ref) => {\n const {\n checked,\n children,\n className = '',\n disabled = false,\n inputClassName = '',\n isInvalid = false,\n labelClassName = '',\n name,\n onChange,\n value,\n 'data-testid': dataTestId,\n } = props;\n\n const [id] = useState(shortid());\n\n return (\n <div className={classNames('custom-control custom-radio', className)}>\n <input\n type=\"radio\"\n id={id}\n data-testid={dataTestId}\n name={name}\n ref={ref}\n className={classNames('custom-control-input', inputClassName, {\n 'is-invalid': isInvalid,\n })}\n checked={checked}\n disabled={disabled}\n value={value}\n onChange={onChange}\n />\n <label\n className={classNames('custom-control-label', labelClassName)}\n htmlFor={id}\n >\n {children}\n </label>\n </div>\n );\n }\n);\n\nRadioItem.displayName = 'RadioItem';\n\nRadioItem.defaultProps = {\n checked: undefined,\n className: '',\n disabled: false,\n inputClassName: '',\n isInvalid: false,\n labelClassName: '',\n name: undefined,\n onChange: undefined,\n 'data-testid': undefined,\n};\n\nexport default RadioItem;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,OAAO,MAAM,SAAS;AAqC7B;AACA;AACA;AACA,IAAMC,SAAS,gBAAGJ,KAAK,CAACK,UAAU,CAChC,CAACC,KAAqB,EAAEC,GAAG,KAAK;EAC9B,IAAM;IACJC,OAAO;IACPC,QAAQ;IACRC,SAAS,GAAG,EAAE;IACdC,QAAQ,GAAG,KAAK;IAChBC,cAAc,GAAG,EAAE;IACnBC,SAAS,GAAG,KAAK;IACjBC,cAAc,GAAG,EAAE;IACnBC,IAAI;IACJC,QAAQ;IACRC,KAAK;IACL,aAAa,EAAEC;EACjB,CAAC,GAAGZ,KAAK;EAET,IAAM,CAACa,EAAE,CAAC,GAAGlB,QAAQ,CAACE,OAAO,EAAE,CAAC;EAEhC,oBACE;IAAK,SAAS,EAAED,UAAU,CAAC,6BAA6B,EAAEQ,SAAS;EAAE,gBACnE;IACE,IAAI,EAAC,OAAO;IACZ,EAAE,EAAES,EAAG;IACP,eAAaD,UAAW;IACxB,IAAI,EAAEH,IAAK;IACX,GAAG,EAAER,GAAI;IACT,SAAS,EAAEL,UAAU,CAAC,sBAAsB,EAAEU,cAAc,EAAE;MAC5D,YAAY,EAAEC;IAChB,CAAC,CAAE;IACH,OAAO,EAAEL,OAAQ;IACjB,QAAQ,EAAEG,QAAS;IACnB,KAAK,EAAEM,KAAM;IACb,QAAQ,EAAED;EAAS,EACnB,eACF;IACE,SAAS,EAAEd,UAAU,CAAC,sBAAsB,EAAEY,cAAc,CAAE;IAC9D,OAAO,EAAEK;EAAG,GAEXV,QAAQ,CACH,CACJ;AAEV,CAAC,CACF;AAEDL,SAAS,CAACgB,WAAW,GAAG,WAAW;AAEnChB,SAAS,CAACiB,YAAY,GAAG;EACvBb,OAAO,EAAEc,SAAS;EAClBZ,SAAS,EAAE,EAAE;EACbC,QAAQ,EAAE,KAAK;EACfC,cAAc,EAAE,EAAE;EAClBC,SAAS,EAAE,KAAK;EAChBC,cAAc,EAAE,EAAE;EAClBC,IAAI,EAAEO,SAAS;EACfN,QAAQ,EAAEM,SAAS;EACnB,aAAa,EAAEA;AACjB,CAAC;AAED,eAAelB,SAAS"}
@@ -1,26 +1,19 @@
1
1
  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; }
2
-
3
2
  import React, { PureComponent } from 'react';
4
3
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
5
4
  import { vsSearch } from '@deephaven/icons';
6
5
  import classNames from 'classnames';
7
6
  import "./SearchInput.css";
8
-
9
7
  class SearchInput extends PureComponent {
10
8
  constructor(props) {
11
9
  super(props);
12
-
13
10
  _defineProperty(this, "inputField", void 0);
14
-
15
11
  this.inputField = /*#__PURE__*/React.createRef();
16
12
  }
17
-
18
13
  focus() {
19
14
  var _this$inputField$curr;
20
-
21
15
  (_this$inputField$curr = this.inputField.current) === null || _this$inputField$curr === void 0 ? void 0 : _this$inputField$curr.focus();
22
16
  }
23
-
24
17
  render() {
25
18
  var {
26
19
  value,
@@ -56,20 +49,16 @@ class SearchInput extends PureComponent {
56
49
  icon: vsSearch
57
50
  })));
58
51
  }
59
-
60
52
  }
61
-
62
53
  _defineProperty(SearchInput, "defaultProps", {
63
54
  placeholder: 'Search',
64
55
  className: '',
65
56
  matchCount: null,
66
-
67
- onKeyDown() {// no-op
57
+ onKeyDown() {
58
+ // no-op
68
59
  },
69
-
70
60
  id: '',
71
61
  'data-testid': undefined
72
62
  });
73
-
74
63
  export default SearchInput;
75
64
  //# sourceMappingURL=SearchInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SearchInput.js","names":["React","PureComponent","FontAwesomeIcon","vsSearch","classNames","SearchInput","constructor","props","inputField","createRef","focus","current","render","value","placeholder","onBlur","onChange","className","disabled","matchCount","id","onKeyDown","dataTestId","undefined"],"sources":["../src/SearchInput.tsx"],"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 onBlur?: React.FocusEventHandler<HTMLInputElement>;\n onChange: React.ChangeEventHandler<HTMLInputElement>;\n onKeyDown: React.KeyboardEventHandler<HTMLInputElement>;\n className: string;\n disabled?: boolean;\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 onBlur,\n onChange,\n className,\n disabled,\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 onBlur={onBlur}\n onChange={onChange}\n onKeyDown={onKeyDown}\n className=\"form-control\"\n disabled={disabled}\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"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,aAAhB,QAAqC,OAArC;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,QAAT,QAAyB,kBAAzB;AACA,OAAOC,UAAP,MAAuB,YAAvB;;;AAgBA,MAAMC,WAAN,SAA0BJ,aAA1B,CAA0D;EAYxDK,WAAW,CAACC,KAAD,EAA0B;IACnC,MAAMA,KAAN;;IADmC;;IAEnC,KAAKC,UAAL,gBAAkBR,KAAK,CAACS,SAAN,EAAlB;EACD;;EAIDC,KAAK,GAAS;IAAA;;IACZ,8BAAKF,UAAL,CAAgBG,OAAhB,gFAAyBD,KAAzB;EACD;;EAEDE,MAAM,GAAgB;IACpB,IAAM;MACJC,KADI;MAEJC,WAFI;MAGJC,MAHI;MAIJC,QAJI;MAKJC,SALI;MAMJC,QANI;MAOJC,UAPI;MAQJC,EARI;MASJC,SATI;MAUJ,eAAeC;IAVX,IAWF,KAAKf,KAXT;IAYA,oBACE;MAAK,SAAS,EAAEH,UAAU,CAAC,cAAD,EAAiBa,SAAjB;IAA1B,gBACE;MACE,IAAI,EAAC,QADP;MAEE,KAAK,EAAEJ,KAFT;MAGE,MAAM,EAAEE,MAHV;MAIE,QAAQ,EAAEC,QAJZ;MAKE,SAAS,EAAEK,SALb;MAME,SAAS,EAAC,cANZ;MAOE,QAAQ,EAAEH,QAPZ;MAQE,WAAW,EAAEJ,WARf;MASE,GAAG,EAAE,KAAKN,UATZ;MAUE,EAAE,EAAEY,EAVN;MAWE,eAAaE;IAXf,EADF,EAcGH,UAAU,IAAI,IAAd,iBACC;MAAM,SAAS,EAAC;IAAhB,GAAgCA,UAAhC,CAfJ,eAiBE;MAAM,SAAS,EAAC;IAAhB,gBACE,oBAAC,eAAD;MAAiB,IAAI,EAAEhB;IAAvB,EADF,CAjBF,CADF;EAuBD;;AA3DuD;;gBAApDE,W,kBACkB;EACpBS,WAAW,EAAE,QADO;EAEpBG,SAAS,EAAE,EAFS;EAGpBE,UAAU,EAAE,IAHQ;;EAIpBE,SAAS,GAAS,CAChB;EACD,CANmB;;EAOpBD,EAAE,EAAE,EAPgB;EAQpB,eAAeG;AARK,C;;AA6DxB,eAAelB,WAAf"}
1
+ {"version":3,"file":"SearchInput.js","names":["React","PureComponent","FontAwesomeIcon","vsSearch","classNames","SearchInput","constructor","props","inputField","createRef","focus","current","render","value","placeholder","onBlur","onChange","className","disabled","matchCount","id","onKeyDown","dataTestId","undefined"],"sources":["../src/SearchInput.tsx"],"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 onBlur?: React.FocusEventHandler<HTMLInputElement>;\n onChange: React.ChangeEventHandler<HTMLInputElement>;\n onKeyDown: React.KeyboardEventHandler<HTMLInputElement>;\n className: string;\n disabled?: boolean;\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 onBlur,\n onChange,\n className,\n disabled,\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 onBlur={onBlur}\n onChange={onChange}\n onKeyDown={onKeyDown}\n className=\"form-control\"\n disabled={disabled}\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"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,aAAa,QAAQ,OAAO;AAC5C,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,QAAQ,QAAQ,kBAAkB;AAC3C,OAAOC,UAAU,MAAM,YAAY;AAAC;AAgBpC,MAAMC,WAAW,SAASJ,aAAa,CAAmB;EAYxDK,WAAW,CAACC,KAAuB,EAAE;IACnC,KAAK,CAACA,KAAK,CAAC;IAAC;IACb,IAAI,CAACC,UAAU,gBAAGR,KAAK,CAACS,SAAS,EAAE;EACrC;EAIAC,KAAK,GAAS;IAAA;IACZ,6BAAI,CAACF,UAAU,CAACG,OAAO,0DAAvB,sBAAyBD,KAAK,EAAE;EAClC;EAEAE,MAAM,GAAgB;IACpB,IAAM;MACJC,KAAK;MACLC,WAAW;MACXC,MAAM;MACNC,QAAQ;MACRC,SAAS;MACTC,QAAQ;MACRC,UAAU;MACVC,EAAE;MACFC,SAAS;MACT,aAAa,EAAEC;IACjB,CAAC,GAAG,IAAI,CAACf,KAAK;IACd,oBACE;MAAK,SAAS,EAAEH,UAAU,CAAC,cAAc,EAAEa,SAAS;IAAE,gBACpD;MACE,IAAI,EAAC,QAAQ;MACb,KAAK,EAAEJ,KAAM;MACb,MAAM,EAAEE,MAAO;MACf,QAAQ,EAAEC,QAAS;MACnB,SAAS,EAAEK,SAAU;MACrB,SAAS,EAAC,cAAc;MACxB,QAAQ,EAAEH,QAAS;MACnB,WAAW,EAAEJ,WAAY;MACzB,GAAG,EAAE,IAAI,CAACN,UAAW;MACrB,EAAE,EAAEY,EAAG;MACP,eAAaE;IAAW,EACxB,EACDH,UAAU,IAAI,IAAI,iBACjB;MAAM,SAAS,EAAC;IAAc,GAAEA,UAAU,CAC3C,eACD;MAAM,SAAS,EAAC;IAAa,gBAC3B,oBAAC,eAAe;MAAC,IAAI,EAAEhB;IAAS,EAAG,CAC9B,CACH;EAEV;AACF;AAAC,gBA5DKE,WAAW,kBACO;EACpBS,WAAW,EAAE,QAAQ;EACrBG,SAAS,EAAE,EAAE;EACbE,UAAU,EAAE,IAAI;EAChBE,SAAS,GAAS;IAChB;EAAA,CACD;EACDD,EAAE,EAAE,EAAE;EACN,aAAa,EAAEG;AACjB,CAAC;AAoDH,eAAelB,WAAW"}
package/dist/Select.d.ts CHANGED
@@ -10,6 +10,6 @@ export declare type SelectProps = {
10
10
  disabled?: boolean;
11
11
  'data-testid'?: string;
12
12
  };
13
- declare const Select: ({ children, onBlur, onChange, className, defaultValue, name, value, disabled, "data-testid": dataTestId, }: SelectProps) => JSX.Element;
13
+ declare function Select({ children, onBlur, onChange, className, defaultValue, name, value, disabled, 'data-testid': dataTestId, }: SelectProps): JSX.Element;
14
14
  export default Select;
15
15
  //# 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,MAAM,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IACpD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,QAAA,MAAM,MAAM,+GAUT,WAAW,KAAG,WAsBhB,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,MAAM,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IACpD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,iBAAS,MAAM,CAAC,EACd,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,aAAa,EAAE,UAAU,GAC1B,EAAE,WAAW,GAAG,GAAG,CAAC,OAAO,CAsB3B;AAED,eAAe,MAAM,CAAC"}
package/dist/Select.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import React, { useCallback } from 'react';
2
2
  import classNames from 'classnames';
3
-
4
- var Select = _ref => {
3
+ function Select(_ref) {
5
4
  var {
6
5
  children,
7
6
  onBlur,
@@ -26,7 +25,6 @@ var Select = _ref => {
26
25
  disabled: disabled,
27
26
  "data-testid": dataTestId
28
27
  }, children);
29
- };
30
-
28
+ }
31
29
  export default Select;
32
30
  //# sourceMappingURL=Select.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Select.js","names":["React","useCallback","classNames","Select","children","onBlur","onChange","className","defaultValue","name","value","disabled","dataTestId","handleChange","event","target"],"sources":["../src/Select.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport classNames from 'classnames';\n\nexport type SelectProps = {\n children: React.ReactNode;\n onBlur?: React.FocusEventHandler<HTMLSelectElement>;\n onChange: (value: string) => void;\n className?: string;\n defaultValue?: string;\n name?: string;\n value?: string;\n disabled?: boolean;\n 'data-testid'?: string;\n};\n\nconst Select = ({\n children,\n onBlur,\n onChange,\n className,\n defaultValue,\n name,\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 onBlur={onBlur}\n onChange={handleChange}\n defaultValue={defaultValue}\n value={value}\n name={name}\n disabled={disabled}\n data-testid={dataTestId}\n >\n {children}\n </select>\n );\n};\n\nexport default Select;\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,QAAmC,OAAnC;AACA,OAAOC,UAAP,MAAuB,YAAvB;;AAcA,IAAMC,MAAM,GAAG,QAUiB;EAAA,IAVhB;IACdC,QADc;IAEdC,MAFc;IAGdC,QAHc;IAIdC,SAJc;IAKdC,YALc;IAMdC,IANc;IAOdC,KAPc;IAQdC,QARc;IASd,eAAeC;EATD,CAUgB;EAC9B,IAAMC,YAAY,GAAGZ,WAAW,CAC9Ba,KAAK,IAAI;IACPR,QAAQ,CAACQ,KAAK,CAACC,MAAN,CAAaL,KAAd,CAAR;EACD,CAH6B,EAI9B,CAACJ,QAAD,CAJ8B,CAAhC;EAOA,oBACE;IACE,SAAS,EAAEJ,UAAU,CAAC,eAAD,EAAkBK,SAAlB,CADvB;IAEE,MAAM,EAAEF,MAFV;IAGE,QAAQ,EAAEQ,YAHZ;IAIE,YAAY,EAAEL,YAJhB;IAKE,KAAK,EAAEE,KALT;IAME,IAAI,EAAED,IANR;IAOE,QAAQ,EAAEE,QAPZ;IAQE,eAAaC;EARf,GAUGR,QAVH,CADF;AAcD,CAhCD;;AAkCA,eAAeD,MAAf"}
1
+ {"version":3,"file":"Select.js","names":["React","useCallback","classNames","Select","children","onBlur","onChange","className","defaultValue","name","value","disabled","dataTestId","handleChange","event","target"],"sources":["../src/Select.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport classNames from 'classnames';\n\nexport type SelectProps = {\n children: React.ReactNode;\n onBlur?: React.FocusEventHandler<HTMLSelectElement>;\n onChange: (value: string) => void;\n className?: string;\n defaultValue?: string;\n name?: string;\n value?: string;\n disabled?: boolean;\n 'data-testid'?: string;\n};\n\nfunction Select({\n children,\n onBlur,\n onChange,\n className,\n defaultValue,\n name,\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 onBlur={onBlur}\n onChange={handleChange}\n defaultValue={defaultValue}\n value={value}\n name={name}\n disabled={disabled}\n data-testid={dataTestId}\n >\n {children}\n </select>\n );\n}\n\nexport default Select;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAC1C,OAAOC,UAAU,MAAM,YAAY;AAcnC,SAASC,MAAM,OAUc;EAAA,IAVb;IACdC,QAAQ;IACRC,MAAM;IACNC,QAAQ;IACRC,SAAS;IACTC,YAAY;IACZC,IAAI;IACJC,KAAK;IACLC,QAAQ;IACR,aAAa,EAAEC;EACJ,CAAC;EACZ,IAAMC,YAAY,GAAGZ,WAAW,CAC9Ba,KAAK,IAAI;IACPR,QAAQ,CAACQ,KAAK,CAACC,MAAM,CAACL,KAAK,CAAC;EAC9B,CAAC,EACD,CAACJ,QAAQ,CAAC,CACX;EAED,oBACE;IACE,SAAS,EAAEJ,UAAU,CAAC,eAAe,EAAEK,SAAS,CAAE;IAClD,MAAM,EAAEF,MAAO;IACf,QAAQ,EAAEQ,YAAa;IACvB,YAAY,EAAEL,YAAa;IAC3B,KAAK,EAAEE,KAAM;IACb,IAAI,EAAED,IAAK;IACX,QAAQ,EAAEE,QAAS;IACnB,eAAaC;EAAW,GAEvBR,QAAQ,CACF;AAEb;AAEA,eAAeD,MAAM"}
@@ -1,11 +1,9 @@
1
1
  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; }
2
-
3
2
  import React, { PureComponent } from 'react';
4
3
  import "./SelectValueList.css";
5
4
  import classNames from 'classnames';
6
5
  import memoize from 'memoizee';
7
6
  import Checkbox from "./Checkbox.js";
8
-
9
7
  /**
10
8
  * Select values from a long scrollable list.
11
9
  * Swaps items in and out for infinite scrolling
@@ -13,13 +11,9 @@ import Checkbox from "./Checkbox.js";
13
11
  class SelectValueList extends PureComponent {
14
12
  constructor(props) {
15
13
  super(props);
16
-
17
14
  _defineProperty(this, "list", void 0);
18
-
19
15
  _defineProperty(this, "topRow", void 0);
20
-
21
16
  _defineProperty(this, "bottomRow", void 0);
22
-
23
17
  _defineProperty(this, "getCachedItem", memoize((itemIndex, key, value, displayValue, rowHeight, isSelected, disabled) => {
24
18
  var style = {
25
19
  height: rowHeight
@@ -42,10 +36,8 @@ class SelectValueList extends PureComponent {
42
36
  }, {
43
37
  max: 1000
44
38
  }));
45
-
46
39
  _defineProperty(this, "getCachedItems", memoize((items, rowHeight, offset, disabled) => {
47
40
  var itemElements = [];
48
-
49
41
  for (var i = 0; i < items.length; i += 1) {
50
42
  var item = items[i];
51
43
  var {
@@ -53,19 +45,15 @@ class SelectValueList extends PureComponent {
53
45
  displayValue,
54
46
  isSelected
55
47
  } = item;
56
-
57
48
  var _itemIndex = offset + i;
58
-
59
49
  var key = _itemIndex;
60
50
  var element = this.getCachedItem(_itemIndex, key, _value, displayValue, rowHeight, isSelected, disabled);
61
51
  itemElements.push(element);
62
52
  }
63
-
64
53
  return itemElements;
65
54
  }, {
66
55
  max: 1
67
56
  }));
68
-
69
57
  this.handleBlur = this.handleBlur.bind(this);
70
58
  this.handleScroll = this.handleScroll.bind(this);
71
59
  this.handleSelect = this.handleSelect.bind(this);
@@ -73,15 +61,12 @@ class SelectValueList extends PureComponent {
73
61
  this.topRow = null;
74
62
  this.bottomRow = null;
75
63
  }
76
-
77
64
  componentDidMount() {
78
65
  this.sendViewportUpdate();
79
66
  }
80
-
81
67
  componentDidUpdate() {
82
68
  this.sendViewportUpdate();
83
69
  }
84
-
85
70
  handleBlur(e) {
86
71
  if (!e.relatedTarget || this.list.current && e.relatedTarget instanceof HTMLElement && !this.list.current.contains(e.relatedTarget)) {
87
72
  // Next focused element is outside of the list
@@ -91,11 +76,9 @@ class SelectValueList extends PureComponent {
91
76
  onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
92
77
  }
93
78
  }
94
-
95
79
  handleScroll() {
96
80
  this.sendViewportUpdate();
97
81
  }
98
-
99
82
  handleSelect(itemIndex) {
100
83
  var {
101
84
  items,
@@ -103,7 +86,6 @@ class SelectValueList extends PureComponent {
103
86
  onSelect
104
87
  } = this.props;
105
88
  var visibleItemIndex = itemIndex - offset;
106
-
107
89
  if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {
108
90
  var item = items[visibleItemIndex];
109
91
  var {
@@ -114,12 +96,10 @@ class SelectValueList extends PureComponent {
114
96
  onSelect(itemIndex, null);
115
97
  }
116
98
  }
117
-
118
99
  sendViewportUpdate() {
119
100
  if (!this.list.current || this.list.current.clientHeight === 0) {
120
101
  return;
121
102
  }
122
-
123
103
  var {
124
104
  onViewportChange,
125
105
  rowHeight
@@ -128,30 +108,25 @@ class SelectValueList extends PureComponent {
128
108
  var bottom = top + this.list.current.clientHeight;
129
109
  var topRow = Math.floor(top / rowHeight);
130
110
  var bottomRow = Math.ceil(bottom / rowHeight);
131
-
132
111
  if (this.topRow !== topRow || this.bottomRow !== bottomRow) {
133
112
  this.topRow = topRow;
134
113
  this.bottomRow = bottomRow;
135
114
  onViewportChange(topRow, bottomRow);
136
115
  }
137
116
  }
138
-
139
117
  getElement(itemIndex) {
140
118
  if (this.list.current == null) {
141
119
  return null;
142
120
  }
143
-
144
121
  var elements = this.list.current.querySelectorAll('.value-list-item');
145
122
  return elements[itemIndex];
146
123
  }
147
-
148
124
  scrollIntoView(index) {
149
125
  var element = this.getElement(index);
150
126
  element === null || element === void 0 ? void 0 : element.scrollIntoView({
151
127
  block: 'center'
152
128
  });
153
129
  }
154
-
155
130
  render() {
156
131
  var {
157
132
  className,
@@ -187,15 +162,12 @@ class SelectValueList extends PureComponent {
187
162
  }
188
163
  }, itemElements)));
189
164
  }
190
-
191
165
  }
192
-
193
166
  _defineProperty(SelectValueList, "defaultProps", {
194
167
  disabled: false,
195
168
  rowHeight: 21,
196
169
  onBlur: () => undefined,
197
170
  'data-testid': undefined
198
171
  });
199
-
200
172
  export default SelectValueList;
201
173
  //# sourceMappingURL=SelectValueList.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectValueList.js","names":["React","PureComponent","classNames","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","handleBlur","bind","handleScroll","list","createRef","topRow","bottomRow","componentDidMount","sendViewportUpdate","componentDidUpdate","e","relatedTarget","current","HTMLElement","contains","onBlur","onSelect","visibleItemIndex","clientHeight","onViewportChange","top","scrollTop","bottom","Math","floor","ceil","getElement","elements","querySelectorAll","scrollIntoView","index","block","render","className","isInvalid","itemCount","dataTestId","getCachedItems","position","left","undefined"],"sources":["../src/SelectValueList.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport './SelectValueList.scss';\nimport classNames from 'classnames';\nimport memoize from 'memoizee';\nimport Checkbox from './Checkbox';\n\nexport interface SelectItem<T> {\n value: T;\n displayValue?: string;\n isSelected: boolean;\n}\n\ntype SelectValueListProps<T> = {\n className?: string;\n disabled: boolean;\n isInvalid?: 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 onBlur?: React.FocusEventHandler<Element>;\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 onBlur: (): void => undefined,\n 'data-testid': undefined,\n };\n\n constructor(props: SelectValueListProps<T>) {\n super(props);\n\n this.handleBlur = this.handleBlur.bind(this);\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 // Tab index is needed so the item could be a related target in the blur event details\n <li className=\"value-list-item\" style={style} key={key} tabIndex={-1}>\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 handleBlur(e: React.FocusEvent): void {\n if (\n !e.relatedTarget ||\n (this.list.current &&\n e.relatedTarget instanceof HTMLElement &&\n !this.list.current.contains(e.relatedTarget))\n ) {\n // Next focused element is outside of the list\n const { onBlur } = this.props;\n onBlur?.(e);\n }\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 getElement(itemIndex: number): Element | null {\n if (this.list.current == null) {\n return null;\n }\n const elements = this.list.current.querySelectorAll('.value-list-item');\n return elements[itemIndex];\n }\n\n scrollIntoView(index: number): void {\n const element = this.getElement(index);\n element?.scrollIntoView({ block: 'center' });\n }\n\n render(): JSX.Element {\n const {\n className,\n disabled,\n isInvalid,\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={classNames(\n 'select-value-list-scroll-pane h-100 w-100',\n { 'is-invalid': isInvalid },\n className\n )}\n onBlur={this.handleBlur}\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"],"mappings":"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"}
1
+ {"version":3,"file":"SelectValueList.js","names":["React","PureComponent","classNames","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","handleBlur","bind","handleScroll","list","createRef","topRow","bottomRow","componentDidMount","sendViewportUpdate","componentDidUpdate","e","relatedTarget","current","HTMLElement","contains","onBlur","onSelect","visibleItemIndex","clientHeight","onViewportChange","top","scrollTop","bottom","Math","floor","ceil","getElement","elements","querySelectorAll","scrollIntoView","index","block","render","className","isInvalid","itemCount","dataTestId","getCachedItems","position","left","undefined"],"sources":["../src/SelectValueList.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport './SelectValueList.scss';\nimport classNames from 'classnames';\nimport memoize from 'memoizee';\nimport Checkbox from './Checkbox';\n\nexport interface SelectItem<T> {\n value: T;\n displayValue?: string;\n isSelected: boolean;\n}\n\ntype SelectValueListProps<T> = {\n className?: string;\n disabled: boolean;\n isInvalid?: 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 onBlur?: React.FocusEventHandler<Element>;\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 onBlur: (): void => undefined,\n 'data-testid': undefined,\n };\n\n constructor(props: SelectValueListProps<T>) {\n super(props);\n\n this.handleBlur = this.handleBlur.bind(this);\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 // Tab index is needed so the item could be a related target in the blur event details\n <li className=\"value-list-item\" style={style} key={key} tabIndex={-1}>\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 handleBlur(e: React.FocusEvent): void {\n if (\n !e.relatedTarget ||\n (this.list.current &&\n e.relatedTarget instanceof HTMLElement &&\n !this.list.current.contains(e.relatedTarget))\n ) {\n // Next focused element is outside of the list\n const { onBlur } = this.props;\n onBlur?.(e);\n }\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 getElement(itemIndex: number): Element | null {\n if (this.list.current == null) {\n return null;\n }\n const elements = this.list.current.querySelectorAll('.value-list-item');\n return elements[itemIndex];\n }\n\n scrollIntoView(index: number): void {\n const element = this.getElement(index);\n element?.scrollIntoView({ block: 'center' });\n }\n\n render(): JSX.Element {\n const {\n className,\n disabled,\n isInvalid,\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={classNames(\n 'select-value-list-scroll-pane h-100 w-100',\n { 'is-invalid': isInvalid },\n className\n )}\n onBlur={this.handleBlur}\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"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SocketedButton.js","names":["React","classNames","dhExclamation","vsLink","FontAwesomeIcon","SocketedButton","forwardRef","props","ref","children","className","disabled","isLinked","isLinkedSource","isInvalid","onClick","onMouseEnter","onMouseLeave","style","dataTestId","undefined","displayName","defaultProps"],"sources":["../src/SocketedButton.tsx"],"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 {\n 'btn-socketed-linked':\n (isLinked !== undefined && isLinked) || isLinkedSource,\n },\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"],"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;EACnC,IAAM;IACJC,QADI;IAEJC,SAFI;IAGJC,QAHI;IAIJC,QAJI;IAKJC,cALI;IAMJC,SANI;IAOJC,OAPI;IAQJC,YARI;IASJC,YATI;IAUJC,KAVI;IAWJ,eAAeC;EAXX,IAYFZ,KAZJ;EAaA,oBACE;IACE,GAAG,EAAEC,GADP;IAEE,IAAI,EAAC,QAFP;IAGE,SAAS,EAAEP,UAAU,CACnB,cADmB,EAEnB;MACE,uBACGW,QAAQ,KAAKQ,SAAb,IAA0BR,QAA3B,IAAwCC;IAF5C,CAFmB,EAMnB;MAAE,8BAA8BA;IAAhC,CANmB,EAOnB;MAAE,cAAcC;IAAhB,CAPmB,EAQnBJ,SARmB,CAHvB;IAaE,OAAO,EAAEK,OAbX;IAcE,YAAY,EAAEC,YAdhB;IAeE,YAAY,EAAEC,YAfhB;IAgBE,KAAK,EAAEC,KAhBT;IAiBE,QAAQ,EAAEP,QAjBZ;IAkBE,eAAaQ;EAlBf,GAoBGV,QApBH,eAqBE,oBAAC,eAAD;IACE,IAAI,EAAEN,MADR;IAEE,SAAS,EAAC,0BAFZ;IAGE,SAAS,EAAC;EAHZ,EArBF,eA0BE,oBAAC,eAAD;IACE,IAAI,EAAED,aADR;IAEE,SAAS,EAAC;EAFZ,EA1BF,CADF;AAiCD,CAhDoB,CAAvB;AAmDAG,cAAc,CAACgB,WAAf,GAA6B,gBAA7B;AAEAhB,cAAc,CAACiB,YAAf,GAA8B;EAC5Bb,QAAQ,EAAEW,SADkB;EAE5BV,SAAS,EAAE,EAFiB;EAG5BC,QAAQ,EAAE,KAHkB;EAI5BC,QAAQ,EAAE,KAJkB;EAK5BC,cAAc,EAAE,KALY;EAM5BC,SAAS,EAAE,KANiB;EAO5BC,OAAO,EAAEK,SAPmB;EAQ5BJ,YAAY,EAAEI,SARc;EAS5BH,YAAY,EAAEG,SATc;EAU5BF,KAAK,EAAEE,SAVqB;EAW5B,eAAeA;AAXa,CAA9B;AAcA,eAAef,cAAf"}
1
+ {"version":3,"file":"SocketedButton.js","names":["React","classNames","dhExclamation","vsLink","FontAwesomeIcon","SocketedButton","forwardRef","props","ref","children","className","disabled","isLinked","isLinkedSource","isInvalid","onClick","onMouseEnter","onMouseLeave","style","dataTestId","undefined","displayName","defaultProps"],"sources":["../src/SocketedButton.tsx"],"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 {\n 'btn-socketed-linked':\n (isLinked !== undefined && isLinked) || isLinkedSource,\n },\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"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,aAAa,EAAEC,MAAM,QAAQ,kBAAkB;AACxD,SAASC,eAAe,QAAQ,gCAAgC;AAAC;AAkBjE,IAAMC,cAAc,gBAAGL,KAAK,CAACM,UAAU,CACrC,CAACC,KAA0B,EAAEC,GAAG,KAAK;EACnC,IAAM;IACJC,QAAQ;IACRC,SAAS;IACTC,QAAQ;IACRC,QAAQ;IACRC,cAAc;IACdC,SAAS;IACTC,OAAO;IACPC,YAAY;IACZC,YAAY;IACZC,KAAK;IACL,aAAa,EAAEC;EACjB,CAAC,GAAGZ,KAAK;EACT,oBACE;IACE,GAAG,EAAEC,GAAI;IACT,IAAI,EAAC,QAAQ;IACb,SAAS,EAAEP,UAAU,CACnB,cAAc,EACd;MACE,qBAAqB,EAClBW,QAAQ,KAAKQ,SAAS,IAAIR,QAAQ,IAAKC;IAC5C,CAAC,EACD;MAAE,4BAA4B,EAAEA;IAAe,CAAC,EAChD;MAAE,YAAY,EAAEC;IAAU,CAAC,EAC3BJ,SAAS,CACT;IACF,OAAO,EAAEK,OAAQ;IACjB,YAAY,EAAEC,YAAa;IAC3B,YAAY,EAAEC,YAAa;IAC3B,KAAK,EAAEC,KAAM;IACb,QAAQ,EAAEP,QAAS;IACnB,eAAaQ;EAAW,GAEvBV,QAAQ,eACT,oBAAC,eAAe;IACd,IAAI,EAAEN,MAAO;IACb,SAAS,EAAC,0BAA0B;IACpC,SAAS,EAAC;EAAQ,EAClB,eACF,oBAAC,eAAe;IACd,IAAI,EAAED,aAAc;IACpB,SAAS,EAAC;EAA8B,EACxC,CACK;AAEb,CAAC,CACF;AAEDG,cAAc,CAACgB,WAAW,GAAG,gBAAgB;AAE7ChB,cAAc,CAACiB,YAAY,GAAG;EAC5Bb,QAAQ,EAAEW,SAAS;EACnBV,SAAS,EAAE,EAAE;EACbC,QAAQ,EAAE,KAAK;EACfC,QAAQ,EAAE,KAAK;EACfC,cAAc,EAAE,KAAK;EACrBC,SAAS,EAAE,KAAK;EAChBC,OAAO,EAAEK,SAAS;EAClBJ,YAAY,EAAEI,SAAS;EACvBH,YAAY,EAAEG,SAAS;EACvBF,KAAK,EAAEE,SAAS;EAChB,aAAa,EAAEA;AACjB,CAAC;AAED,eAAef,cAAc"}
@@ -1,12 +1,8 @@
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 ThemeExport from "./ThemeExport.module.css"; // Note that TypeScript does not know what keys exist on ThemeExport.module.scss
8
5
  // It only knows it's an object with strings for keys and values
9
-
10
6
  export default Object.freeze(_objectSpread({
11
7
  transitionMs: 150,
12
8
  transitionMidMs: 200,
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeExport.js","names":["ThemeExport","Object","freeze","transitionMs","transitionMidMs","transitionLongMs","transitionSlowMs"],"sources":["../src/ThemeExport.ts"],"sourcesContent":["import ThemeExport from './ThemeExport.module.scss';\n\n// Note that TypeScript does not know what keys exist on ThemeExport.module.scss\n// It only knows it's an object with strings for keys and values\nexport default Object.freeze({\n transitionMs: 150,\n transitionMidMs: 200,\n transitionLongMs: 300,\n transitionSlowMs: 1000,\n ...ThemeExport,\n});\n"],"mappings":";;;;;;OAAOA,W,kCAEP;AACA;;AACA,eAAeC,MAAM,CAACC,MAAP;EACbC,YAAY,EAAE,GADD;EAEbC,eAAe,EAAE,GAFJ;EAGbC,gBAAgB,EAAE,GAHL;EAIbC,gBAAgB,EAAE;AAJL,GAKVN,WALU,EAAf"}
1
+ {"version":3,"file":"ThemeExport.js","names":["ThemeExport","Object","freeze","transitionMs","transitionMidMs","transitionLongMs","transitionSlowMs"],"sources":["../src/ThemeExport.ts"],"sourcesContent":["import ThemeExport from './ThemeExport.module.scss';\n\n// Note that TypeScript does not know what keys exist on ThemeExport.module.scss\n// It only knows it's an object with strings for keys and values\nexport default Object.freeze({\n transitionMs: 150,\n transitionMidMs: 200,\n transitionLongMs: 300,\n transitionSlowMs: 1000,\n ...ThemeExport,\n});\n"],"mappings":";;;OAAOA,WAAW,kCAElB;AACA;AACA,eAAeC,MAAM,CAACC,MAAM;EAC1BC,YAAY,EAAE,GAAG;EACjBC,eAAe,EAAE,GAAG;EACpBC,gBAAgB,EAAE,GAAG;EACrBC,gBAAgB,EAAE;AAAI,GACnBN,WAAW,EACd"}
package/dist/TimeInput.js CHANGED
@@ -25,26 +25,21 @@ var TimeInput = /*#__PURE__*/React.forwardRef((props, ref) => {
25
25
  useImperativeHandle(ref, () => ({
26
26
  focus: () => {
27
27
  var _inputRef$current;
28
-
29
28
  (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
30
29
  },
31
30
  setSelection: newSelection => {
32
31
  var _inputRef$current2;
33
-
34
32
  (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.focus();
35
-
36
33
  _setSelection(newSelection);
37
34
  }
38
35
  }), []);
39
36
  useEffect(function setFormattedTime() {
40
37
  setValue(TimeUtils.formatTime(propsValue));
41
38
  }, [propsValue]);
42
-
43
39
  function getNextSegmentValue(range, delta, segmentValue) {
44
40
  // Delta is backward because negative Y is up
45
41
  var maxValue = range.selectionStart === 0 ? 24 : 60;
46
42
  var newSegmentValue = parseInt(segmentValue, 10) - delta;
47
-
48
43
  if (Number.isNaN(newSegmentValue)) {
49
44
  newSegmentValue = 0;
50
45
  } else if (allowValueWrapping) {
@@ -53,31 +48,26 @@ var TimeInput = /*#__PURE__*/React.forwardRef((props, ref) => {
53
48
  } else {
54
49
  newSegmentValue = Math.min(Math.max(0, newSegmentValue), maxValue - 1);
55
50
  }
56
-
57
51
  return "".concat(newSegmentValue).padStart(2, '0');
58
52
  }
59
-
60
53
  function getPreferredReplacementString(replaceValue, replaceIndex, newChar, selectionStart, selectionEnd) {
61
54
  if (selectionStart === 0 && selectionEnd === 2 && replaceIndex === 1 && parseInt(newChar, 10) > 1) {
62
55
  // DH-10082 Special case for when typing `3` when it's already 12
63
56
  return "0".concat(newChar).concat(replaceValue.substring(2));
64
57
  }
65
-
66
58
  return DEFAULT_GET_PREFERRED_REPLACEMENT_STRING(replaceValue, replaceIndex, newChar);
67
59
  }
68
-
69
60
  function handleChange(newValue) {
70
61
  log.debug('handleChange', newValue);
71
- setValue(newValue); // Only send a change if the value is actually valid
62
+ setValue(newValue);
72
63
 
64
+ // Only send a change if the value is actually valid
73
65
  if (TimeUtils.isTimeString(newValue)) {
74
66
  onChange(TimeUtils.parseTime(newValue));
75
67
  }
76
68
  }
77
-
78
69
  var handleSelect = useCallback(newSelection => {
79
70
  _setSelection(newSelection);
80
-
81
71
  onSelect(newSelection);
82
72
  }, [onSelect]);
83
73
  return /*#__PURE__*/React.createElement(MaskedInput, {
@@ -1 +1 @@
1
- {"version":3,"file":"TimeInput.js","names":["React","useCallback","useEffect","useImperativeHandle","useRef","useState","Log","TimeUtils","MaskedInput","DEFAULT_GET_PREFERRED_REPLACEMENT_STRING","log","module","TIME_PATTERN","EXAMPLES","TimeInput","forwardRef","props","ref","allowValueWrapping","className","onChange","value","propsValue","onFocus","onBlur","onSelect","dataTestId","setValue","formatTime","selection","setSelection","inputRef","focus","current","newSelection","setFormattedTime","getNextSegmentValue","range","delta","segmentValue","maxValue","selectionStart","newSegmentValue","parseInt","Number","isNaN","Math","min","max","padStart","getPreferredReplacementString","replaceValue","replaceIndex","newChar","selectionEnd","substring","handleChange","newValue","debug","isTimeString","parseTime","handleSelect","defaultProps","undefined"],"sources":["../src/TimeInput.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport Log from '@deephaven/log';\nimport { TimeUtils } from '@deephaven/utils';\nimport MaskedInput, {\n DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,\n SelectionSegment,\n} from './MaskedInput';\n\nexport type { SelectionSegment } from './MaskedInput';\n\nconst log = Log.module('TimeInput');\n\nconst TIME_PATTERN = '([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]';\nconst EXAMPLES = ['00:00:00', '12:34:56', '23:59:59'];\n\ntype TimeInputProps = {\n allowValueWrapping?: boolean;\n className?: string;\n onChange?(timeInSec: number): void;\n onSelect?(selection: SelectionSegment): void;\n value?: number;\n onFocus?(): void;\n onBlur?(): void;\n 'data-testid'?: string;\n};\n\nexport type TimeInputElement = {\n focus: () => void;\n setSelection: (newSelection: SelectionSegment) => void;\n};\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 TimeInput = React.forwardRef<TimeInputElement, TimeInputProps>(\n (props: TimeInputProps, ref) => {\n const {\n allowValueWrapping = true,\n className = '',\n onChange = () => false,\n value: propsValue = 0,\n onFocus = () => false,\n onBlur = () => false,\n onSelect = () => false,\n 'data-testid': dataTestId,\n } = props;\n const [value, setValue] = useState(TimeUtils.formatTime(propsValue));\n const [selection, setSelection] = useState<SelectionSegment>();\n const inputRef = useRef<HTMLInputElement>(null);\n\n useImperativeHandle(\n ref,\n () => ({\n focus: () => {\n inputRef.current?.focus();\n },\n setSelection: newSelection => {\n inputRef.current?.focus();\n setSelection(newSelection);\n },\n }),\n []\n );\n\n useEffect(\n function setFormattedTime() {\n setValue(TimeUtils.formatTime(propsValue));\n },\n [propsValue]\n );\n\n function getNextSegmentValue(\n range: SelectionSegment,\n delta: number,\n segmentValue: string\n ): string {\n // Delta is backward because negative Y is up\n const maxValue = range.selectionStart === 0 ? 24 : 60;\n let newSegmentValue = parseInt(segmentValue, 10) - delta;\n if (Number.isNaN(newSegmentValue)) {\n newSegmentValue = 0;\n } else if (allowValueWrapping) {\n // Add max value and re-mod so we don't get negative values after mod\n newSegmentValue = ((newSegmentValue % maxValue) + maxValue) % maxValue;\n } else {\n newSegmentValue = Math.min(Math.max(0, newSegmentValue), maxValue - 1);\n }\n return `${newSegmentValue}`.padStart(2, '0');\n }\n\n function getPreferredReplacementString(\n replaceValue: string,\n replaceIndex: number,\n newChar: string,\n selectionStart: number,\n selectionEnd: number\n ) {\n if (\n selectionStart === 0 &&\n selectionEnd === 2 &&\n replaceIndex === 1 &&\n parseInt(newChar, 10) > 1\n ) {\n // DH-10082 Special case for when typing `3` when it's already 12\n return `0${newChar}${replaceValue.substring(2)}`;\n }\n return DEFAULT_GET_PREFERRED_REPLACEMENT_STRING(\n replaceValue,\n replaceIndex,\n newChar\n );\n }\n\n function handleChange(newValue: string): void {\n log.debug('handleChange', newValue);\n setValue(newValue);\n\n // Only send a change if the value is actually valid\n if (TimeUtils.isTimeString(newValue)) {\n onChange(TimeUtils.parseTime(newValue));\n }\n }\n\n const handleSelect = useCallback(\n (newSelection: SelectionSegment) => {\n setSelection(newSelection);\n onSelect(newSelection);\n },\n [onSelect]\n );\n\n return (\n <MaskedInput\n ref={inputRef}\n className={className}\n example={EXAMPLES}\n getNextSegmentValue={getNextSegmentValue}\n getPreferredReplacementString={getPreferredReplacementString}\n onChange={handleChange}\n onSelect={handleSelect}\n pattern={TIME_PATTERN}\n selection={selection}\n value={value}\n onFocus={onFocus}\n onBlur={onBlur}\n data-testid={dataTestId}\n />\n );\n }\n);\n\nTimeInput.defaultProps = {\n allowValueWrapping: true,\n className: '',\n onChange: () => false,\n onSelect: () => false,\n value: 0,\n onFocus: () => false,\n onBlur: () => false,\n 'data-testid': undefined,\n};\n\nexport default TimeInput;\n"],"mappings":"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"}
1
+ {"version":3,"file":"TimeInput.js","names":["React","useCallback","useEffect","useImperativeHandle","useRef","useState","Log","TimeUtils","MaskedInput","DEFAULT_GET_PREFERRED_REPLACEMENT_STRING","log","module","TIME_PATTERN","EXAMPLES","TimeInput","forwardRef","props","ref","allowValueWrapping","className","onChange","value","propsValue","onFocus","onBlur","onSelect","dataTestId","setValue","formatTime","selection","setSelection","inputRef","focus","current","newSelection","setFormattedTime","getNextSegmentValue","range","delta","segmentValue","maxValue","selectionStart","newSegmentValue","parseInt","Number","isNaN","Math","min","max","padStart","getPreferredReplacementString","replaceValue","replaceIndex","newChar","selectionEnd","substring","handleChange","newValue","debug","isTimeString","parseTime","handleSelect","defaultProps","undefined"],"sources":["../src/TimeInput.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport Log from '@deephaven/log';\nimport { TimeUtils } from '@deephaven/utils';\nimport MaskedInput, {\n DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,\n SelectionSegment,\n} from './MaskedInput';\n\nexport type { SelectionSegment } from './MaskedInput';\n\nconst log = Log.module('TimeInput');\n\nconst TIME_PATTERN = '([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]';\nconst EXAMPLES = ['00:00:00', '12:34:56', '23:59:59'];\n\ntype TimeInputProps = {\n allowValueWrapping?: boolean;\n className?: string;\n onChange?(timeInSec: number): void;\n onSelect?(selection: SelectionSegment): void;\n value?: number;\n onFocus?(): void;\n onBlur?(): void;\n 'data-testid'?: string;\n};\n\nexport type TimeInputElement = {\n focus: () => void;\n setSelection: (newSelection: SelectionSegment) => void;\n};\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 TimeInput = React.forwardRef<TimeInputElement, TimeInputProps>(\n (props: TimeInputProps, ref) => {\n const {\n allowValueWrapping = true,\n className = '',\n onChange = () => false,\n value: propsValue = 0,\n onFocus = () => false,\n onBlur = () => false,\n onSelect = () => false,\n 'data-testid': dataTestId,\n } = props;\n const [value, setValue] = useState(TimeUtils.formatTime(propsValue));\n const [selection, setSelection] = useState<SelectionSegment>();\n const inputRef = useRef<HTMLInputElement>(null);\n\n useImperativeHandle(\n ref,\n () => ({\n focus: () => {\n inputRef.current?.focus();\n },\n setSelection: newSelection => {\n inputRef.current?.focus();\n setSelection(newSelection);\n },\n }),\n []\n );\n\n useEffect(\n function setFormattedTime() {\n setValue(TimeUtils.formatTime(propsValue));\n },\n [propsValue]\n );\n\n function getNextSegmentValue(\n range: SelectionSegment,\n delta: number,\n segmentValue: string\n ): string {\n // Delta is backward because negative Y is up\n const maxValue = range.selectionStart === 0 ? 24 : 60;\n let newSegmentValue = parseInt(segmentValue, 10) - delta;\n if (Number.isNaN(newSegmentValue)) {\n newSegmentValue = 0;\n } else if (allowValueWrapping) {\n // Add max value and re-mod so we don't get negative values after mod\n newSegmentValue = ((newSegmentValue % maxValue) + maxValue) % maxValue;\n } else {\n newSegmentValue = Math.min(Math.max(0, newSegmentValue), maxValue - 1);\n }\n return `${newSegmentValue}`.padStart(2, '0');\n }\n\n function getPreferredReplacementString(\n replaceValue: string,\n replaceIndex: number,\n newChar: string,\n selectionStart: number,\n selectionEnd: number\n ) {\n if (\n selectionStart === 0 &&\n selectionEnd === 2 &&\n replaceIndex === 1 &&\n parseInt(newChar, 10) > 1\n ) {\n // DH-10082 Special case for when typing `3` when it's already 12\n return `0${newChar}${replaceValue.substring(2)}`;\n }\n return DEFAULT_GET_PREFERRED_REPLACEMENT_STRING(\n replaceValue,\n replaceIndex,\n newChar\n );\n }\n\n function handleChange(newValue: string): void {\n log.debug('handleChange', newValue);\n setValue(newValue);\n\n // Only send a change if the value is actually valid\n if (TimeUtils.isTimeString(newValue)) {\n onChange(TimeUtils.parseTime(newValue));\n }\n }\n\n const handleSelect = useCallback(\n (newSelection: SelectionSegment) => {\n setSelection(newSelection);\n onSelect(newSelection);\n },\n [onSelect]\n );\n\n return (\n <MaskedInput\n ref={inputRef}\n className={className}\n example={EXAMPLES}\n getNextSegmentValue={getNextSegmentValue}\n getPreferredReplacementString={getPreferredReplacementString}\n onChange={handleChange}\n onSelect={handleSelect}\n pattern={TIME_PATTERN}\n selection={selection}\n value={value}\n onFocus={onFocus}\n onBlur={onBlur}\n data-testid={dataTestId}\n />\n );\n }\n);\n\nTimeInput.defaultProps = {\n allowValueWrapping: true,\n className: '',\n onChange: () => false,\n onSelect: () => false,\n value: 0,\n onFocus: () => false,\n onBlur: () => false,\n 'data-testid': undefined,\n};\n\nexport default TimeInput;\n"],"mappings":"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"}
@@ -15,6 +15,6 @@ declare type TimeSliderProps = {
15
15
  * Creates a time slider for setting a start and end time, that can also run overnight
16
16
  * @param props takes times in seconds 0 - 86399 and a callback
17
17
  */
18
- declare const TimeSlider: ({ startTime: propStartTime, endTime: propEndTime, onChange, isStartModified, isEndModified, "data-testid": dataTestId, }: TimeSliderProps) => JSX.Element;
18
+ declare function TimeSlider({ startTime: propStartTime, endTime: propEndTime, onChange, isStartModified, isEndModified, 'data-testid': dataTestId, }: TimeSliderProps): JSX.Element;
19
19
  export default TimeSlider;
20
20
  //# sourceMappingURL=TimeSlider.d.ts.map