@deephaven/components 0.43.0 → 0.44.1-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/dist/AutoCompleteInput.css +35 -0
  2. package/dist/AutoCompleteInput.css.map +1 -0
  3. package/dist/AutoCompleteInput.js +496 -0
  4. package/dist/AutoCompleteInput.js.map +1 -0
  5. package/dist/AutoResizeTextarea.css +11 -0
  6. package/dist/AutoResizeTextarea.css.map +1 -0
  7. package/dist/AutoResizeTextarea.js +128 -0
  8. package/dist/AutoResizeTextarea.js.map +1 -0
  9. package/dist/BasicModal.js +112 -0
  10. package/dist/BasicModal.js.map +1 -0
  11. package/dist/Button.d.ts +1 -1
  12. package/dist/Button.js +193 -0
  13. package/dist/Button.js.map +1 -0
  14. package/dist/ButtonGroup.js +31 -0
  15. package/dist/ButtonGroup.js.map +1 -0
  16. package/dist/ButtonOld.js +41 -0
  17. package/dist/ButtonOld.js.map +1 -0
  18. package/dist/CardFlip.css +36 -0
  19. package/dist/CardFlip.css.map +1 -0
  20. package/dist/CardFlip.js +61 -0
  21. package/dist/CardFlip.js.map +1 -0
  22. package/dist/Checkbox.js +104 -0
  23. package/dist/Checkbox.js.map +1 -0
  24. package/dist/Collapse.js +89 -0
  25. package/dist/Collapse.js.map +1 -0
  26. package/dist/ComboBox.css +50 -0
  27. package/dist/ComboBox.css.map +1 -0
  28. package/dist/ComboBox.js +487 -0
  29. package/dist/ComboBox.js.map +1 -0
  30. package/dist/CopyButton.js +30 -0
  31. package/dist/CopyButton.js.map +1 -0
  32. package/dist/CustomTimeSelect.css +65 -0
  33. package/dist/CustomTimeSelect.css.map +1 -0
  34. package/dist/CustomTimeSelect.js +516 -0
  35. package/dist/CustomTimeSelect.js.map +1 -0
  36. package/dist/DateInput.js +54 -0
  37. package/dist/DateInput.js.map +1 -0
  38. package/dist/DateInputUtils.js +33 -0
  39. package/dist/DateInputUtils.js.map +1 -0
  40. package/dist/DateTimeInput.js +84 -0
  41. package/dist/DateTimeInput.js.map +1 -0
  42. package/dist/DateTimeInputUtils.js +8 -0
  43. package/dist/DateTimeInputUtils.js.map +1 -0
  44. package/dist/DebouncedSearchInput.js +79 -0
  45. package/dist/DebouncedSearchInput.js.map +1 -0
  46. package/dist/DragUtils.js +68 -0
  47. package/dist/DragUtils.js.map +1 -0
  48. package/dist/DraggableItemList.css +118 -0
  49. package/dist/DraggableItemList.css.map +1 -0
  50. package/dist/DraggableItemList.js +268 -0
  51. package/dist/DraggableItemList.js.map +1 -0
  52. package/dist/EditableItemList.js +105 -0
  53. package/dist/EditableItemList.js.map +1 -0
  54. package/dist/HierarchicalCheckboxMenu.css +30 -0
  55. package/dist/HierarchicalCheckboxMenu.css.map +1 -0
  56. package/dist/HierarchicalCheckboxMenu.js +218 -0
  57. package/dist/HierarchicalCheckboxMenu.js.map +1 -0
  58. package/dist/ItemList.css +13 -0
  59. package/dist/ItemList.css.map +1 -0
  60. package/dist/ItemList.js +686 -0
  61. package/dist/ItemList.js.map +1 -0
  62. package/dist/ItemListItem.css +48 -0
  63. package/dist/ItemListItem.css.map +1 -0
  64. package/dist/ItemListItem.js +214 -0
  65. package/dist/ItemListItem.js.map +1 -0
  66. package/dist/LoadingOverlay.css +24 -0
  67. package/dist/LoadingOverlay.css.map +1 -0
  68. package/dist/LoadingOverlay.js +48 -0
  69. package/dist/LoadingOverlay.js.map +1 -0
  70. package/dist/LoadingSpinner.css +8 -0
  71. package/dist/LoadingSpinner.css.map +1 -0
  72. package/dist/LoadingSpinner.js +24 -0
  73. package/dist/LoadingSpinner.js.map +1 -0
  74. package/dist/MaskedInput.css +7 -0
  75. package/dist/MaskedInput.css.map +1 -0
  76. package/dist/MaskedInput.js +394 -0
  77. package/dist/MaskedInput.js.map +1 -0
  78. package/dist/MaskedInputUtils.js +36 -0
  79. package/dist/MaskedInputUtils.js.map +1 -0
  80. package/dist/Option.js +16 -0
  81. package/dist/Option.js.map +1 -0
  82. package/dist/RadioGroup.js +34 -0
  83. package/dist/RadioGroup.js.map +1 -0
  84. package/dist/RadioItem.js +55 -0
  85. package/dist/RadioItem.js.map +1 -0
  86. package/dist/RandomAreaPlotAnimation.css +18 -0
  87. package/dist/RandomAreaPlotAnimation.css.map +1 -0
  88. package/dist/RandomAreaPlotAnimation.js +290 -0
  89. package/dist/RandomAreaPlotAnimation.js.map +1 -0
  90. package/dist/SearchInput.css +43 -0
  91. package/dist/SearchInput.css.map +1 -0
  92. package/dist/SearchInput.js +66 -0
  93. package/dist/SearchInput.js.map +1 -0
  94. package/dist/Select.js +30 -0
  95. package/dist/Select.js.map +1 -0
  96. package/dist/SelectValueList.css +38 -0
  97. package/dist/SelectValueList.css.map +1 -0
  98. package/dist/SelectValueList.js +175 -0
  99. package/dist/SelectValueList.js.map +1 -0
  100. package/dist/SocketedButton.css +123 -0
  101. package/dist/SocketedButton.css.map +1 -0
  102. package/dist/SocketedButton.js +63 -0
  103. package/dist/SocketedButton.js.map +1 -0
  104. package/dist/SpectrumThemeDark.module.css +9 -0
  105. package/dist/SpectrumThemeDark.module.css.map +1 -0
  106. package/dist/SpectrumThemeLight.module.css +9 -0
  107. package/dist/SpectrumThemeLight.module.css.map +1 -0
  108. package/dist/SpectrumUtils.js +59 -0
  109. package/dist/SpectrumUtils.js.map +1 -0
  110. package/dist/ThemeExport.js +15 -0
  111. package/dist/ThemeExport.js.map +1 -0
  112. package/dist/ThemeExport.module.css +40 -0
  113. package/dist/ThemeExport.module.css.map +1 -0
  114. package/dist/TimeInput.js +101 -0
  115. package/dist/TimeInput.js.map +1 -0
  116. package/dist/TimeSlider.css +178 -0
  117. package/dist/TimeSlider.css.map +1 -0
  118. package/dist/TimeSlider.js +314 -0
  119. package/dist/TimeSlider.js.map +1 -0
  120. package/dist/TimeSlider.module.css +185 -0
  121. package/dist/TimeSlider.module.css.map +1 -0
  122. package/dist/ToastNotification.css +62 -0
  123. package/dist/ToastNotification.css.map +1 -0
  124. package/dist/ToastNotification.js +56 -0
  125. package/dist/ToastNotification.js.map +1 -0
  126. package/dist/UISwitch.css +94 -0
  127. package/dist/UISwitch.css.map +1 -0
  128. package/dist/UISwitch.js +30 -0
  129. package/dist/UISwitch.js.map +1 -0
  130. package/dist/ValidateLabelInput.css +9 -0
  131. package/dist/ValidateLabelInput.css.map +1 -0
  132. package/dist/ValidateLabelInput.js +50 -0
  133. package/dist/ValidateLabelInput.js.map +1 -0
  134. package/dist/context-actions/ContextActionUtils.js +142 -0
  135. package/dist/context-actions/ContextActionUtils.js.map +1 -0
  136. package/dist/context-actions/ContextActions.css +157 -0
  137. package/dist/context-actions/ContextActions.css.map +1 -0
  138. package/dist/context-actions/ContextActions.js +182 -0
  139. package/dist/context-actions/ContextActions.js.map +1 -0
  140. package/dist/context-actions/ContextMenu.js +559 -0
  141. package/dist/context-actions/ContextMenu.js.map +1 -0
  142. package/dist/context-actions/ContextMenuItem.js +139 -0
  143. package/dist/context-actions/ContextMenuItem.js.map +1 -0
  144. package/dist/context-actions/ContextMenuRoot.js +135 -0
  145. package/dist/context-actions/ContextMenuRoot.js.map +1 -0
  146. package/dist/context-actions/GlobalContextAction.js +53 -0
  147. package/dist/context-actions/GlobalContextAction.js.map +1 -0
  148. package/dist/context-actions/GlobalContextActions.js +28 -0
  149. package/dist/context-actions/GlobalContextActions.js.map +1 -0
  150. package/dist/context-actions/index.js +5 -0
  151. package/dist/context-actions/index.js.map +1 -0
  152. package/dist/declaration.d.js +2 -0
  153. package/dist/declaration.d.js.map +1 -0
  154. package/dist/index.js +52 -0
  155. package/dist/index.js.map +1 -0
  156. package/dist/menu-actions/DropdownMenu.css +39 -0
  157. package/dist/menu-actions/DropdownMenu.css.map +1 -0
  158. package/dist/menu-actions/DropdownMenu.js +174 -0
  159. package/dist/menu-actions/DropdownMenu.js.map +1 -0
  160. package/dist/menu-actions/Menu.js +244 -0
  161. package/dist/menu-actions/Menu.js.map +1 -0
  162. package/dist/menu-actions/index.js +4 -0
  163. package/dist/menu-actions/index.js.map +1 -0
  164. package/dist/modal/DebouncedModal.js +26 -0
  165. package/dist/modal/DebouncedModal.js.map +1 -0
  166. package/dist/modal/InfoModal.css +24 -0
  167. package/dist/modal/InfoModal.css.map +1 -0
  168. package/dist/modal/InfoModal.js +34 -0
  169. package/dist/modal/InfoModal.js.map +1 -0
  170. package/dist/modal/Modal.js +122 -0
  171. package/dist/modal/Modal.js.map +1 -0
  172. package/dist/modal/ModalBody.js +16 -0
  173. package/dist/modal/ModalBody.js.map +1 -0
  174. package/dist/modal/ModalFooter.js +14 -0
  175. package/dist/modal/ModalFooter.js.map +1 -0
  176. package/dist/modal/ModalHeader.js +27 -0
  177. package/dist/modal/ModalHeader.js.map +1 -0
  178. package/dist/modal/index.js +7 -0
  179. package/dist/modal/index.js.map +1 -0
  180. package/dist/navigation/Menu.css +13 -0
  181. package/dist/navigation/Menu.css.map +1 -0
  182. package/dist/navigation/Menu.js +25 -0
  183. package/dist/navigation/Menu.js.map +1 -0
  184. package/dist/navigation/MenuItem.css +46 -0
  185. package/dist/navigation/MenuItem.css.map +1 -0
  186. package/dist/navigation/MenuItem.js +65 -0
  187. package/dist/navigation/MenuItem.js.map +1 -0
  188. package/dist/navigation/Page.css +34 -0
  189. package/dist/navigation/Page.css.map +1 -0
  190. package/dist/navigation/Page.js +46 -0
  191. package/dist/navigation/Page.js.map +1 -0
  192. package/dist/navigation/Stack.css +24 -0
  193. package/dist/navigation/Stack.css.map +1 -0
  194. package/dist/navigation/Stack.js +82 -0
  195. package/dist/navigation/Stack.js.map +1 -0
  196. package/dist/navigation/index.js +5 -0
  197. package/dist/navigation/index.js.map +1 -0
  198. package/dist/popper/Popper.css +127 -0
  199. package/dist/popper/Popper.css.map +1 -0
  200. package/dist/popper/Popper.js +283 -0
  201. package/dist/popper/Popper.js.map +1 -0
  202. package/dist/popper/Tooltip.js +283 -0
  203. package/dist/popper/Tooltip.js.map +1 -0
  204. package/dist/popper/index.js +3 -0
  205. package/dist/popper/index.js.map +1 -0
  206. package/dist/shortcuts/GlobalShortcuts.js +47 -0
  207. package/dist/shortcuts/GlobalShortcuts.js.map +1 -0
  208. package/dist/shortcuts/Shortcut.js +393 -0
  209. package/dist/shortcuts/Shortcut.js.map +1 -0
  210. package/dist/shortcuts/ShortcutRegistry.js +78 -0
  211. package/dist/shortcuts/ShortcutRegistry.js.map +1 -0
  212. package/dist/shortcuts/index.js +5 -0
  213. package/dist/shortcuts/index.js.map +1 -0
  214. package/package.json +7 -7
@@ -0,0 +1,63 @@
1
+ import React from 'react';
2
+ import classNames from 'classnames';
3
+ import { dhExclamation, vsLink } from '@deephaven/icons';
4
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
5
+ import "./SocketedButton.css";
6
+ var SocketedButton = /*#__PURE__*/React.forwardRef((props, ref) => {
7
+ var {
8
+ children,
9
+ className,
10
+ disabled,
11
+ id,
12
+ isLinked,
13
+ isLinkedSource,
14
+ isInvalid,
15
+ onClick,
16
+ onMouseEnter,
17
+ onMouseLeave,
18
+ style,
19
+ 'data-testid': dataTestId
20
+ } = props;
21
+ return /*#__PURE__*/React.createElement("button", {
22
+ ref: ref,
23
+ type: "button",
24
+ className: classNames('btn-socketed', {
25
+ 'btn-socketed-linked': isLinked !== undefined && isLinked || isLinkedSource
26
+ }, {
27
+ 'btn-socketed-linked-source': isLinkedSource
28
+ }, {
29
+ 'is-invalid': isInvalid
30
+ }, className),
31
+ id: id,
32
+ onClick: onClick,
33
+ onMouseEnter: onMouseEnter,
34
+ onMouseLeave: onMouseLeave,
35
+ style: style,
36
+ disabled: disabled,
37
+ "data-testid": dataTestId
38
+ }, children, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
39
+ icon: vsLink,
40
+ className: "linked btn-socketed-icon",
41
+ transform: "down-1"
42
+ }), /*#__PURE__*/React.createElement(FontAwesomeIcon, {
43
+ icon: dhExclamation,
44
+ className: "is-invalid btn-socketed-icon"
45
+ }));
46
+ });
47
+ SocketedButton.displayName = 'SocketedButton';
48
+ SocketedButton.defaultProps = {
49
+ children: undefined,
50
+ className: '',
51
+ disabled: false,
52
+ id: undefined,
53
+ isLinked: false,
54
+ isLinkedSource: false,
55
+ isInvalid: false,
56
+ onClick: undefined,
57
+ onMouseEnter: undefined,
58
+ onMouseLeave: undefined,
59
+ style: undefined,
60
+ 'data-testid': undefined
61
+ };
62
+ export default SocketedButton;
63
+ //# sourceMappingURL=SocketedButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SocketedButton.js","names":["React","classNames","dhExclamation","vsLink","FontAwesomeIcon","SocketedButton","forwardRef","props","ref","children","className","disabled","id","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 id?: string;\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 id,\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 id={id}\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 id: undefined,\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;AAmBjE,IAAMC,cAAc,gBAAGL,KAAK,CAACM,UAAU,CACrC,CAACC,KAA0B,EAAEC,GAAG,KAAK;EACnC,IAAM;IACJC,QAAQ;IACRC,SAAS;IACTC,QAAQ;IACRC,EAAE;IACFC,QAAQ;IACRC,cAAc;IACdC,SAAS;IACTC,OAAO;IACPC,YAAY;IACZC,YAAY;IACZC,KAAK;IACL,aAAa,EAAEC;EACjB,CAAC,GAAGb,KAAK;EACT,oBACE;IACE,GAAG,EAAEC,GAAI;IACT,IAAI,EAAC,QAAQ;IACb,SAAS,EAAEP,UAAU,CACnB,cAAc,EACd;MACE,qBAAqB,EAClBY,QAAQ,KAAKQ,SAAS,IAAIR,QAAQ,IAAKC;IAC5C,CAAC,EACD;MAAE,4BAA4B,EAAEA;IAAe,CAAC,EAChD;MAAE,YAAY,EAAEC;IAAU,CAAC,EAC3BL,SAAS,CACT;IACF,EAAE,EAAEE,EAAG;IACP,OAAO,EAAEI,OAAQ;IACjB,YAAY,EAAEC,YAAa;IAC3B,YAAY,EAAEC,YAAa;IAC3B,KAAK,EAAEC,KAAM;IACb,QAAQ,EAAER,QAAS;IACnB,eAAaS;EAAW,GAEvBX,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,CAACiB,WAAW,GAAG,gBAAgB;AAE7CjB,cAAc,CAACkB,YAAY,GAAG;EAC5Bd,QAAQ,EAAEY,SAAS;EACnBX,SAAS,EAAE,EAAE;EACbC,QAAQ,EAAE,KAAK;EACfC,EAAE,EAAES,SAAS;EACbR,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,eAAehB,cAAc"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ This module contains overrides of React Spectrum css variables for the default
3
+ `dark` Deephaven theme.
4
+ */
5
+ .dh-spectrum-theme--dark.dh-spectrum-theme--dark {
6
+ --spectrum-alias-background-color-default: #1a171a;
7
+ }
8
+
9
+ /*# sourceMappingURL=SpectrumThemeDark.module.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sourceRoot":"","sources":["../src/SpectrumThemeDark.module.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;AASA;EACE","file":"SpectrumThemeDark.module.css","sourcesContent":["/**\n This module contains overrides of React Spectrum css variables for the default\n `dark` Deephaven theme.\n*/\n@use '../scss/bootstrap_overrides' as bootstrap;\n@use '../scss/util' as *;\n\n// Doubling specificity to ensure this takes precedence over default Spectrum\n// styles.\n#{multiply-specificity-n('.dh-spectrum-theme--dark', 2)} {\n --spectrum-alias-background-color-default: #{bootstrap.$interfaceblack};\n}\n"]}
@@ -0,0 +1,9 @@
1
+ /**
2
+ This module contains overrides of React Spectrum css variables for the default
3
+ `light` Deephaven theme.
4
+ */
5
+ .dh-spectrum-theme--light.dh-spectrum-theme--light {
6
+ --spectrum-alias-background-color-default: #f0f0ee;
7
+ }
8
+
9
+ /*# sourceMappingURL=SpectrumThemeLight.module.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sourceRoot":"","sources":["../src/SpectrumThemeLight.module.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;AASA;EACE","file":"SpectrumThemeLight.module.css","sourcesContent":["/**\n This module contains overrides of React Spectrum css variables for the default\n `light` Deephaven theme.\n*/\n@use '../scss/bootstrap_overrides' as bootstrap;\n@use '../scss/util' as *;\n\n// Doubling specificity to ensure this takes precedence over default Spectrum\n// styles.\n#{multiply-specificity-n('.dh-spectrum-theme--light', 2)} {\n --spectrum-alias-background-color-default: #{bootstrap.$interfacewhite};\n}\n"]}
@@ -0,0 +1,59 @@
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
+ 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; }
3
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
5
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
6
+ import { theme } from '@react-spectrum/theme-default';
7
+ import darkDH from "./SpectrumThemeDark.module.css";
8
+ import lightDH from "./SpectrumThemeLight.module.css";
9
+ var {
10
+ global,
11
+ light,
12
+ dark,
13
+ medium,
14
+ large
15
+ } = theme;
16
+
17
+ /**
18
+ * Extend light + dark theme variables with DH defaults.
19
+ *
20
+ * A theme is just a mapped collection of css class names that are generated
21
+ * from a collection of css modules.
22
+ *
23
+ * e.g.
24
+ * {
25
+ * global: {
26
+ * spectrum: 'spectrum_9e130c',
27
+ * 'spectrum--medium': 'spectrum--medium_9e130c',
28
+ * 'spectrum--large': 'spectrum--large_9e130c',
29
+ * 'spectrum--darkest': 'spectrum--darkest_9e130c',
30
+ * 'spectrum--dark': 'spectrum--dark_9e130c',
31
+ * 'spectrum--light': 'spectrum--light_9e130c',
32
+ * 'spectrum--lightest': 'spectrum--lightest_9e130c',
33
+ * },
34
+ * light: {
35
+ * 'spectrum--light': 'spectrum--light_a40724',
36
+ * 'dh-spectrum-theme--light': '_dh-spectrum-theme--light_1hblg_22',
37
+ * },
38
+ * dark: {
39
+ * 'spectrum--darkest': 'spectrum--darkest_256eeb',
40
+ * 'dh-spectrum-theme--dark': '_dh-spectrum-theme--dark_f7kge_22',
41
+ * },
42
+ * medium: {
43
+ * 'spectrum--medium': 'spectrum--medium_4b172c',
44
+ * },
45
+ * large: {
46
+ * 'spectrum--large': 'spectrum--large_c40598',
47
+ * },
48
+ * }
49
+ */
50
+ /* eslint-disable import/prefer-default-export */
51
+ export var themeDHDefault = {
52
+ global,
53
+ light: _objectSpread(_objectSpread({}, light), lightDH),
54
+ dark: _objectSpread(_objectSpread({}, dark), darkDH),
55
+ // scales
56
+ medium,
57
+ large
58
+ };
59
+ //# sourceMappingURL=SpectrumUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpectrumUtils.js","names":["theme","darkDH","lightDH","global","light","dark","medium","large","themeDHDefault"],"sources":["../src/SpectrumUtils.ts"],"sourcesContent":["import { theme } from '@react-spectrum/theme-default';\nimport darkDH from './SpectrumThemeDark.module.scss';\nimport lightDH from './SpectrumThemeLight.module.scss';\n\nconst { global, light, dark, medium, large } = theme;\n\n/**\n * Extend light + dark theme variables with DH defaults.\n *\n * A theme is just a mapped collection of css class names that are generated\n * from a collection of css modules.\n *\n * e.g.\n * {\n * global: {\n * spectrum: 'spectrum_9e130c',\n * 'spectrum--medium': 'spectrum--medium_9e130c',\n * 'spectrum--large': 'spectrum--large_9e130c',\n * 'spectrum--darkest': 'spectrum--darkest_9e130c',\n * 'spectrum--dark': 'spectrum--dark_9e130c',\n * 'spectrum--light': 'spectrum--light_9e130c',\n * 'spectrum--lightest': 'spectrum--lightest_9e130c',\n * },\n * light: {\n * 'spectrum--light': 'spectrum--light_a40724',\n * 'dh-spectrum-theme--light': '_dh-spectrum-theme--light_1hblg_22',\n * },\n * dark: {\n * 'spectrum--darkest': 'spectrum--darkest_256eeb',\n * 'dh-spectrum-theme--dark': '_dh-spectrum-theme--dark_f7kge_22',\n * },\n * medium: {\n * 'spectrum--medium': 'spectrum--medium_4b172c',\n * },\n * large: {\n * 'spectrum--large': 'spectrum--large_c40598',\n * },\n * }\n */\n/* eslint-disable import/prefer-default-export */\nexport const themeDHDefault = {\n global,\n light: {\n ...light,\n ...lightDH,\n },\n dark: {\n ...dark,\n ...darkDH,\n },\n // scales\n medium,\n large,\n};\n"],"mappings":";;;;;AAAA,SAASA,KAAK,QAAQ,+BAA+B;AAAC,OAC/CC,MAAM;AAAA,OACNC,OAAO;AAEd,IAAM;EAAEC,MAAM;EAAEC,KAAK;EAAEC,IAAI;EAAEC,MAAM;EAAEC;AAAM,CAAC,GAAGP,KAAK;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMQ,cAAc,GAAG;EAC5BL,MAAM;EACNC,KAAK,kCACAA,KAAK,GACLF,OAAO,CACX;EACDG,IAAI,kCACCA,IAAI,GACJJ,MAAM,CACV;EACD;EACAK,MAAM;EACNC;AACF,CAAC"}
@@ -0,0 +1,15 @@
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
+ 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; }
3
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
5
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
6
+ import ThemeExport from "./ThemeExport.module.css"; // Note that TypeScript does not know what keys exist on ThemeExport.module.scss
7
+ // It only knows it's an object with strings for keys and values
8
+ var transitions = {
9
+ transitionMs: 150,
10
+ transitionMidMs: 200,
11
+ transitionLongMs: 300,
12
+ transitionSlowMs: 1000
13
+ };
14
+ export default Object.freeze(_objectSpread(_objectSpread({}, transitions), ThemeExport));
15
+ //# sourceMappingURL=ThemeExport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeExport.js","names":["ThemeExport","transitions","transitionMs","transitionMidMs","transitionLongMs","transitionSlowMs","Object","freeze"],"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\n\nconst transitions = {\n transitionMs: 150,\n transitionMidMs: 200,\n transitionLongMs: 300,\n transitionSlowMs: 1000,\n} as const;\n\ntype Theme = {\n [Property in keyof typeof transitions]: typeof transitions[Property];\n} & { [key: string]: string };\n\nexport default Object.freeze({\n ...transitions,\n ...ThemeExport,\n}) as Theme;\n"],"mappings":";;;;;OAAOA,WAAW,kCAElB;AACA;AAEA,IAAMC,WAAW,GAAG;EAClBC,YAAY,EAAE,GAAG;EACjBC,eAAe,EAAE,GAAG;EACpBC,gBAAgB,EAAE,GAAG;EACrBC,gBAAgB,EAAE;AACpB,CAAU;AAMV,eAAeC,MAAM,CAACC,MAAM,iCACvBN,WAAW,GACXD,WAAW,EACd"}
@@ -0,0 +1,40 @@
1
+ /* stylelint-disable */
2
+ /* stylelint-disable scss/at-import-no-partial-leading-underscore */
3
+ :export {
4
+ gray-100: #fcfcfa;
5
+ gray-200: #f0f0ee;
6
+ gray-300: #c0bfbf;
7
+ gray-400: #929192;
8
+ gray-500: #5b5a5c;
9
+ gray-600: #555356;
10
+ gray-700: #403e41;
11
+ gray-800: #373438;
12
+ gray-850: #322f33;
13
+ gray-900: #211f22;
14
+ black: #1a171a;
15
+ white: #f0f0ee;
16
+ yellow: #fcd65b;
17
+ green: #9edc6f;
18
+ blue: #76d9e4;
19
+ purple: #aa9af4;
20
+ orange: #f37e3f;
21
+ red: #f95d84;
22
+ primary: #4878ea;
23
+ primary-hover: #235de6;
24
+ primary-dark: #343e5d;
25
+ secondary: #5b5a5c;
26
+ success: #9edc6f;
27
+ info: #fcd65b;
28
+ warning: #f37e3f;
29
+ danger: #f95d84;
30
+ light: #fcfcfa;
31
+ mid: #929192;
32
+ dark: #373438;
33
+ text-muted: #929192;
34
+ content-bg: #2d2a2e;
35
+ background: #1a171a;
36
+ foreground: #f0f0ee;
37
+ transition: 0.15s;
38
+ }
39
+
40
+ /*# sourceMappingURL=ThemeExport.module.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sourceRoot":"","sources":["../src/ThemeExport.module.scss","../scss/custom.scss","../scss/bootstrap_overrides.scss"],"names":[],"mappings":"AAAA;ACAA;ADGA;EACE,UEcS;EFbT,UEQe;EFPf,UEcS;EFbT,UEcS;EFbT,UEcS;EFbT,UEcS;EFbT,UEcS;EFbT,UEcS;EFbT,UEcS;EFbT,UEcS;EFbT;EACA,OEFe;EFGf,QEXO;EFYP,OEXM;EFYN,MEXK;EFYL,QEXO;EFYP,QEhBO;EFiBP,KElBI;EFmBJ,SEVc;EFWd,eEgCc;EF/Bd,cEgCa;EF/Bb,WEHS;EFIT,SEpBM;EFqBN,MEtBO;EFuBP,SExBO;EFyBP,QE1BI;EF2BJ,OEZS;EFaT,KEVS;EFWT,MEPS;EFQT,YEZS;EFaT,YEvBc;EFwBd,YErBe;EFsBf,YEvBe;EFwBf,YE4KW","file":"ThemeExport.module.css","sourcesContent":["/* stylelint-disable */\n@import '../scss/custom.scss';\n\n:export {\n gray-100: $gray-100;\n gray-200: $gray-200;\n gray-300: $gray-300;\n gray-400: $gray-400;\n gray-500: $gray-500;\n gray-600: $gray-600;\n gray-700: $gray-700;\n gray-800: $gray-800;\n gray-850: $gray-850;\n gray-900: $gray-900;\n black: $black;\n white: $white;\n yellow: $yellow;\n green: $green;\n blue: $blue;\n purple: $purple;\n orange: $orange;\n red: $red;\n primary: $primary;\n primary-hover: $primary-hover;\n primary-dark: $primary-dark;\n secondary: $secondary;\n success: $success;\n info: $info;\n warning: $warning;\n danger: $danger;\n light: $light;\n mid: $mid;\n dark: $dark;\n text-muted: $text-muted;\n content-bg: $content-bg;\n background: $background;\n foreground: $foreground;\n transition: $transition;\n}\n","/* stylelint-disable scss/at-import-no-partial-leading-underscore */\n// Consumers should be able to resolve bootstrap/ to node_modules/bootstrap\n\n//Make bootstrap functions available for use in overrides\n@import 'bootstrap/scss/_functions.scss';\n@import './bootstrap_overrides.scss';\n\n//_variable imports come after bootstrap default overrides,\n// makes all other variables and mixins from bootstrap available\n/// with just importing customer.scss\n@import 'bootstrap/scss/_variables.scss';\n@import 'bootstrap/scss/_mixins.scss';\n\n//New variables come after imports\n@import './new_variables.scss';\n","// Styling overrides for bootstrap\n\n// Override / set color variables\n$red: #f95d84;\n$orange: #f37e3f;\n$yellow: #fcd65b;\n$green: #9edc6f;\n$blue: #76d9e4;\n$purple: #aa9af4;\n\n//Define some UI colors\n$interfacegray: #2d2a2e;\n$interfaceblue: #4878ea;\n$interfacewhite: #f0f0ee; //same as gray-200\n$interfaceblack: #1a171a;\n\n//Define our Gray scale\n$white: $interfacewhite;\n$gray-100: #fcfcfa;\n$gray-200: $interfacewhite;\n$gray-300: #c0bfbf;\n$gray-400: #929192;\n$gray-500: #5b5a5c;\n$gray-600: #555356;\n$gray-700: #403e41;\n$gray-800: #373438;\n$gray-850: #322f33;\n$gray-900: #211f22;\n$black: $interfaceblack;\n$content-bg: $interfacegray;\n$background: $interfaceblack;\n$foreground: $interfacewhite;\n\n//Load colors into map\n$colors: ();\n$colors: map-merge(\n (\n 'red': $red,\n 'orange': $orange,\n 'yellow': $yellow,\n 'green': $green,\n 'blue': $blue,\n 'purple': $purple,\n 'white': $white,\n 'black': $black,\n ),\n $colors\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: $interfaceblue;\n$primary-hover: darken($primary, 8%);\n$primary-dark: mix($primary, $content-bg, 25%);\n$primary-light: scale-color($primary, $lightness: -25%);\n$secondary: $gray-500;\n$secondary-hover: darken($secondary, 8%);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: $red;\n$danger-hover: darken($danger, 8%);\n$light: $gray-100;\n$mid: $gray-400; //Added a mid color, useful for input styling\n$dark: $gray-800;\n$green-dark: scale-color($green, $lightness: -45%, $saturation: -10%);\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n 'primary': $primary,\n 'primary-hover': $primary-hover,\n 'primary-light': $primary-light,\n 'primary-dark': $primary-dark,\n 'secondary': $secondary,\n 'success': $success,\n 'info': $info,\n 'warning': $warning,\n 'danger': $danger,\n 'light': $light,\n 'dark': $dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n ),\n $theme-colors\n);\n\n$component-active-bg: $primary;\n$theme-color-interval: 9%;\n$yiq-contrasted-threshold: 180;\n\n// Override fonts\n$font-family-sans-serif: 'Fira Sans', -apple-system, blinkmacsystemfont,\n 'Segoe UI', 'Roboto', 'Helvetica Neue', arial, sans-serif; //fira sans then native system ui fallbacks\n$font-family-monospace: 'Fira Mono', menlo, monaco, consolas, 'Liberation Mono',\n 'Courier New', monospace;\n$font-family-base: $font-family-sans-serif;\n\n$headings-font-weight: 400;\n\n//Text overides\n$text-muted: $gray-400;\n\n//Style Selection highlight color\n//so browsers add alpha to your color by default, ignoring opacity 1\n//by setting rgba with 0.99 it tricks browser into thinking there is alpha applied\n$text-select-color: $primary-hover;\n$text-select-color-editor: lighten(\n $gray-700,\n 15%\n); //we lighten it abit to account for that 0.01 loss, and because it needs some anyways.\n\n//Grid variables, same value as default just making easily accessible\n$grid-gutter-width: 30px;\n\n//Visual Overrides\n$border-radius: 4px;\n$box-shadow: 0 0.1rem 1rem rgba($black, 45%); //because our UI is so dark, we need darker default shadows\n$box-shadow-900: 0 0.1rem 1rem rgba(0, 0, 0, 45%); //darkest shadow for $black popups over $black UI\n\n//Override Btn\n$btn-border-radius: 4rem;\n$btn-padding-x: 1.5rem;\n$btn-transition: color 0.12s ease-in-out, background-color 0.12s ease-in-out,\n border-color 0.12s ease-in-out, box-shadow 0.12s ease-in-out; //default 0.15 is too long\n$btn-border-width: 2px;\n\n//Override Inputs\n$input-bg: $gray-600;\n$input-disabled-bg: $gray-800;\n$input-color: $foreground;\n$input-border-color: $gray-400;\n$input-placeholder-color: $gray-400;\n$input-focus-border-color: rgba($primary, 85%);\n\n$input-btn-focus-width: 0.2rem;\n$input-btn-focus-color: rgba($component-active-bg, 35%);\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color;\n\n//checkbox\n$custom-control-indicator-bg: $gray-600;\n$custom-control-indicator-bg-size: 75% 75%;\n$custom-control-indicator-disabled-bg: $gray-800;\n$custom-control-indicator-checked-disabled-bg: $gray-800;\n$custom-control-label-disabled-color: $gray-400;\n\n//Custom Select\n$custom-select-indicator-color: $gray-400;\n$custom-select-bg-size: 16px 16px;\n//dhSort icon encoded\n$custom-select-indicator: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M4 7l-.4-.8 4-3.7h.8l4 3.7-.4.8H4zm0 2l-.4.8 4 3.7h.8l4-3.7L12 9H4z'/%3E%3C/svg%3E\"),\n '#',\n '%23'\n);\n$custom-select-focus-box-shadow: $input-btn-focus-box-shadow;\n$custom-select-disabled-color: darken($gray-400, 5%);\n$custom-select-disabled-bg: $gray-800;\n\n//modal\n$modal-content-bg: $gray-200;\n$modal-content-border-width: 0;\n$modal-md: 550px;\n\n// Toast notification\n$toast-bg: $primary-dark;\n$toast-color: $foreground;\n$toast-error-bg: mix($danger, $content-bg, 15%);\n$toast-error-color: $foreground;\n\n//tooltips\n$tooltip-bg: $gray-700;\n$tooltip-color: $foreground;\n$tooltip-box-shadow: 0 0.1rem 1.5rem 0.1rem rgba($black, 80%);\n\n//drowdowns\n$dropdown-bg: $gray-600;\n$dropdown-link-color: $foreground;\n$dropdown-link-hover-color: $foreground;\n$dropdown-link-hover-bg: $primary;\n$dropdown-divider-bg: $gray-700;\n\n//context menus\n$contextmenu-bg: $gray-600;\n$contextmenu-color: $foreground;\n$contextmenu-disabled-color: $text-muted;\n$contextmenu-keyboard-selected-bg: rgba($primary, 50%);\n$contextmenu-selected-bg: $primary;\n$contextmenu-selected-color: $foreground;\n\n//links\n$link-color: $gray-400;\n$link-hover-color: $foreground;\n\n//progress-bar\n$progress-bg: $gray-600;\n$progress-border-radius: 1rem;\n\n// Set global options\n$enable-shadows: false;\n$enable-gradients: false;\n$enable-print-styles: false; //I don't think anyone should expect to \"print\" this app.\n\n// Transition times\n$transition: 0.15s;\n$transition-mid: 0.2s;\n$transition-long: 0.3s;\n$transition-slow: 0.6s;\n\n//form-validation icon, uses vsWarning icon encoded here as svg\n$form-feedback-icon-invalid-color: theme-color('danger');\n$form-feedback-icon-invalid: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cg fill='none'%3E%3Cg fill='#{$form-feedback-icon-invalid-color}'%3E%3Cpath d='M7.56 1h.88l6.54 12.26-.44.74H1.44L1 13.26 7.56 1zM8 2.28 2.28 13H13.7L8 2.28zM8.625 12v-1h-1.25v1h1.25zm-1.25-2V6h1.25v4h-1.25z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E \"),\n '#',\n '%23'\n);\n"]}
@@ -0,0 +1,101 @@
1
+ import React, { useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react';
2
+ import Log from '@deephaven/log';
3
+ import { TimeUtils } from '@deephaven/utils';
4
+ import MaskedInput from "./MaskedInput.js";
5
+ import { DEFAULT_GET_PREFERRED_REPLACEMENT_STRING } from "./MaskedInputUtils.js";
6
+ var log = Log.module('TimeInput');
7
+ var TIME_PATTERN = '([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]';
8
+ var EXAMPLES = ['00:00:00', '12:34:56', '23:59:59'];
9
+ // Forward ref causes a false positive for display-name in eslint:
10
+ // https://github.com/yannickcr/eslint-plugin-react/issues/2269
11
+ // eslint-disable-next-line react/display-name
12
+ var TimeInput = /*#__PURE__*/React.forwardRef((props, ref) => {
13
+ var {
14
+ allowValueWrapping = true,
15
+ className = '',
16
+ onChange = () => false,
17
+ value: propsValue = 0,
18
+ onFocus = () => false,
19
+ onBlur = () => false,
20
+ onSelect = () => false,
21
+ 'data-testid': dataTestId
22
+ } = props;
23
+ var [value, setValue] = useState(TimeUtils.formatTime(propsValue));
24
+ var [selection, _setSelection] = useState();
25
+ var inputRef = useRef(null);
26
+ useImperativeHandle(ref, () => ({
27
+ focus: () => {
28
+ var _inputRef$current;
29
+ (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
30
+ },
31
+ setSelection: newSelection => {
32
+ var _inputRef$current2;
33
+ (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.focus();
34
+ _setSelection(newSelection);
35
+ }
36
+ }), []);
37
+ useEffect(function setFormattedTime() {
38
+ setValue(TimeUtils.formatTime(propsValue));
39
+ }, [propsValue]);
40
+ function getNextSegmentValue(range, delta, segmentValue) {
41
+ // Delta is backward because negative Y is up
42
+ var maxValue = range.selectionStart === 0 ? 24 : 60;
43
+ var newSegmentValue = parseInt(segmentValue, 10) - delta;
44
+ if (Number.isNaN(newSegmentValue)) {
45
+ newSegmentValue = 0;
46
+ } else if (allowValueWrapping) {
47
+ // Add max value and re-mod so we don't get negative values after mod
48
+ newSegmentValue = (newSegmentValue % maxValue + maxValue) % maxValue;
49
+ } else {
50
+ newSegmentValue = Math.min(Math.max(0, newSegmentValue), maxValue - 1);
51
+ }
52
+ return "".concat(newSegmentValue).padStart(2, '0');
53
+ }
54
+ function getPreferredReplacementString(replaceValue, replaceIndex, newChar, selectionStart, selectionEnd) {
55
+ if (selectionStart === 0 && selectionEnd === 2 && replaceIndex === 1 && parseInt(newChar, 10) > 1) {
56
+ // DH-10082 Special case for when typing `3` when it's already 12
57
+ return "0".concat(newChar).concat(replaceValue.substring(2));
58
+ }
59
+ return DEFAULT_GET_PREFERRED_REPLACEMENT_STRING(replaceValue, replaceIndex, newChar);
60
+ }
61
+ function handleChange(newValue) {
62
+ log.debug('handleChange', newValue);
63
+ setValue(newValue);
64
+
65
+ // Only send a change if the value is actually valid
66
+ if (TimeUtils.isTimeString(newValue)) {
67
+ onChange(TimeUtils.parseTime(newValue));
68
+ }
69
+ }
70
+ var handleSelect = useCallback(newSelection => {
71
+ _setSelection(newSelection);
72
+ onSelect(newSelection);
73
+ }, [onSelect]);
74
+ return /*#__PURE__*/React.createElement(MaskedInput, {
75
+ ref: inputRef,
76
+ className: className,
77
+ example: EXAMPLES,
78
+ getNextSegmentValue: getNextSegmentValue,
79
+ getPreferredReplacementString: getPreferredReplacementString,
80
+ onChange: handleChange,
81
+ onSelect: handleSelect,
82
+ pattern: TIME_PATTERN,
83
+ selection: selection,
84
+ value: value,
85
+ onFocus: onFocus,
86
+ onBlur: onBlur,
87
+ "data-testid": dataTestId
88
+ });
89
+ });
90
+ TimeInput.defaultProps = {
91
+ allowValueWrapping: true,
92
+ className: '',
93
+ onChange: () => false,
94
+ onSelect: () => false,
95
+ value: 0,
96
+ onFocus: () => false,
97
+ onBlur: () => false,
98
+ 'data-testid': undefined
99
+ };
100
+ export default TimeInput;
101
+ //# sourceMappingURL=TimeInput.js.map
@@ -0,0 +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, { SelectionSegment } from './MaskedInput';\nimport { DEFAULT_GET_PREFERRED_REPLACEMENT_STRING } from './MaskedInputUtils';\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":"AAAA,OAAOA,KAAK,IACVC,WAAW,EACXC,SAAS,EACTC,mBAAmB,EACnBC,MAAM,EACNC,QAAQ,QACH,OAAO;AACd,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,SAAS,QAAQ,kBAAkB;AAAC,OACtCC,WAAW;AAAA,SACTC,wCAAwC;AAIjD,IAAMC,GAAG,GAAGJ,GAAG,CAACK,MAAM,CAAC,WAAW,CAAC;AAEnC,IAAMC,YAAY,GAAG,0CAA0C;AAC/D,IAAMC,QAAQ,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC;AAkBrD;AACA;AACA;AACA,IAAMC,SAAS,gBAAGd,KAAK,CAACe,UAAU,CAChC,CAACC,KAAqB,EAAEC,GAAG,KAAK;EAC9B,IAAM;IACJC,kBAAkB,GAAG,IAAI;IACzBC,SAAS,GAAG,EAAE;IACdC,QAAQ,GAAG,MAAM,KAAK;IACtBC,KAAK,EAAEC,UAAU,GAAG,CAAC;IACrBC,OAAO,GAAG,MAAM,KAAK;IACrBC,MAAM,GAAG,MAAM,KAAK;IACpBC,QAAQ,GAAG,MAAM,KAAK;IACtB,aAAa,EAAEC;EACjB,CAAC,GAAGV,KAAK;EACT,IAAM,CAACK,KAAK,EAAEM,QAAQ,CAAC,GAAGtB,QAAQ,CAACE,SAAS,CAACqB,UAAU,CAACN,UAAU,CAAC,CAAC;EACpE,IAAM,CAACO,SAAS,EAAEC,aAAY,CAAC,GAAGzB,QAAQ,EAAoB;EAC9D,IAAM0B,QAAQ,GAAG3B,MAAM,CAAmB,IAAI,CAAC;EAE/CD,mBAAmB,CACjBc,GAAG,EACH,OAAO;IACLe,KAAK,EAAE,MAAM;MAAA;MACX,qBAAAD,QAAQ,CAACE,OAAO,sDAAhB,kBAAkBD,KAAK,EAAE;IAC3B,CAAC;IACDF,YAAY,EAAEI,YAAY,IAAI;MAAA;MAC5B,sBAAAH,QAAQ,CAACE,OAAO,uDAAhB,mBAAkBD,KAAK,EAAE;MACzBF,aAAY,CAACI,YAAY,CAAC;IAC5B;EACF,CAAC,CAAC,EACF,EAAE,CACH;EAEDhC,SAAS,CACP,SAASiC,gBAAgB,GAAG;IAC1BR,QAAQ,CAACpB,SAAS,CAACqB,UAAU,CAACN,UAAU,CAAC,CAAC;EAC5C,CAAC,EACD,CAACA,UAAU,CAAC,CACb;EAED,SAASc,mBAAmB,CAC1BC,KAAuB,EACvBC,KAAa,EACbC,YAAoB,EACZ;IACR;IACA,IAAMC,QAAQ,GAAGH,KAAK,CAACI,cAAc,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;IACrD,IAAIC,eAAe,GAAGC,QAAQ,CAACJ,YAAY,EAAE,EAAE,CAAC,GAAGD,KAAK;IACxD,IAAIM,MAAM,CAACC,KAAK,CAACH,eAAe,CAAC,EAAE;MACjCA,eAAe,GAAG,CAAC;IACrB,CAAC,MAAM,IAAIxB,kBAAkB,EAAE;MAC7B;MACAwB,eAAe,GAAG,CAAEA,eAAe,GAAGF,QAAQ,GAAIA,QAAQ,IAAIA,QAAQ;IACxE,CAAC,MAAM;MACLE,eAAe,GAAGI,IAAI,CAACC,GAAG,CAACD,IAAI,CAACE,GAAG,CAAC,CAAC,EAAEN,eAAe,CAAC,EAAEF,QAAQ,GAAG,CAAC,CAAC;IACxE;IACA,OAAO,UAAGE,eAAe,EAAGO,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EAC9C;EAEA,SAASC,6BAA6B,CACpCC,YAAoB,EACpBC,YAAoB,EACpBC,OAAe,EACfZ,cAAsB,EACtBa,YAAoB,EACpB;IACA,IACEb,cAAc,KAAK,CAAC,IACpBa,YAAY,KAAK,CAAC,IAClBF,YAAY,KAAK,CAAC,IAClBT,QAAQ,CAACU,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,EACzB;MACA;MACA,kBAAWA,OAAO,SAAGF,YAAY,CAACI,SAAS,CAAC,CAAC,CAAC;IAChD;IACA,OAAO9C,wCAAwC,CAC7C0C,YAAY,EACZC,YAAY,EACZC,OAAO,CACR;EACH;EAEA,SAASG,YAAY,CAACC,QAAgB,EAAQ;IAC5C/C,GAAG,CAACgD,KAAK,CAAC,cAAc,EAAED,QAAQ,CAAC;IACnC9B,QAAQ,CAAC8B,QAAQ,CAAC;;IAElB;IACA,IAAIlD,SAAS,CAACoD,YAAY,CAACF,QAAQ,CAAC,EAAE;MACpCrC,QAAQ,CAACb,SAAS,CAACqD,SAAS,CAACH,QAAQ,CAAC,CAAC;IACzC;EACF;EAEA,IAAMI,YAAY,GAAG5D,WAAW,CAC7BiC,YAA8B,IAAK;IAClCJ,aAAY,CAACI,YAAY,CAAC;IAC1BT,QAAQ,CAACS,YAAY,CAAC;EACxB,CAAC,EACD,CAACT,QAAQ,CAAC,CACX;EAED,oBACE,oBAAC,WAAW;IACV,GAAG,EAAEM,QAAS;IACd,SAAS,EAAEZ,SAAU;IACrB,OAAO,EAAEN,QAAS;IAClB,mBAAmB,EAAEuB,mBAAoB;IACzC,6BAA6B,EAAEc,6BAA8B;IAC7D,QAAQ,EAAEM,YAAa;IACvB,QAAQ,EAAEK,YAAa;IACvB,OAAO,EAAEjD,YAAa;IACtB,SAAS,EAAEiB,SAAU;IACrB,KAAK,EAAER,KAAM;IACb,OAAO,EAAEE,OAAQ;IACjB,MAAM,EAAEC,MAAO;IACf,eAAaE;EAAW,EACxB;AAEN,CAAC,CACF;AAEDZ,SAAS,CAACgD,YAAY,GAAG;EACvB5C,kBAAkB,EAAE,IAAI;EACxBC,SAAS,EAAE,EAAE;EACbC,QAAQ,EAAE,MAAM,KAAK;EACrBK,QAAQ,EAAE,MAAM,KAAK;EACrBJ,KAAK,EAAE,CAAC;EACRE,OAAO,EAAE,MAAM,KAAK;EACpBC,MAAM,EAAE,MAAM,KAAK;EACnB,aAAa,EAAEuC;AACjB,CAAC;AAED,eAAejD,SAAS"}
@@ -0,0 +1,178 @@
1
+ /* stylelint-disable scss/at-import-no-partial-leading-underscore */
2
+ .time-slider {
3
+ width: 100%;
4
+ padding-bottom: 1rem;
5
+ overflow: hidden;
6
+ }
7
+ .time-slider .time-slider-popovers {
8
+ display: flex;
9
+ flex-direction: row;
10
+ margin: 0 4px;
11
+ }
12
+ .time-slider .time-slider-popovers .handle-popper {
13
+ padding: 0.5rem;
14
+ width: 90px;
15
+ border-radius: 4px;
16
+ background: #403e41;
17
+ flex-shrink: 0;
18
+ text-align: center;
19
+ margin: 0 1px;
20
+ }
21
+ .time-slider .time-slider-popovers .handle-popper input {
22
+ padding: 0.375rem 0;
23
+ text-align: center;
24
+ }
25
+ .time-slider .time-slider-popovers .flex-spacer {
26
+ margin-left: auto;
27
+ margin-right: auto;
28
+ }
29
+ .time-slider .track {
30
+ margin: 4px;
31
+ height: 15px;
32
+ background: #5b5a5c;
33
+ border-radius: 7.5px;
34
+ position: relative;
35
+ }
36
+ .time-slider .track .track-fills {
37
+ position: absolute;
38
+ top: 0;
39
+ left: 0;
40
+ width: 100%;
41
+ height: 100%;
42
+ border-radius: 7.5px;
43
+ overflow: hidden;
44
+ }
45
+ .time-slider .track .track-fills .track-fill {
46
+ border-radius: 7.5px;
47
+ background: #343e5d;
48
+ height: 100%;
49
+ width: 100%;
50
+ position: absolute;
51
+ top: 0;
52
+ left: 0;
53
+ }
54
+ .time-slider .track .track-fills .track-fill-start,
55
+ .time-slider .track .track-fills .track-fill-middle {
56
+ transform-origin: 0 0;
57
+ }
58
+ .time-slider .track .track-fills .track-fill-end {
59
+ transform-origin: 100% 0;
60
+ }
61
+ .time-slider .track .handle-track {
62
+ position: absolute;
63
+ width: 100%;
64
+ height: 15px;
65
+ top: 0;
66
+ left: 0;
67
+ pointer-events: none;
68
+ }
69
+ .time-slider .track .handle-track:focus-within {
70
+ z-index: 2;
71
+ }
72
+ .time-slider .track .handle-track .handle {
73
+ display: block;
74
+ height: 15px;
75
+ width: 15px;
76
+ border-radius: 50%;
77
+ position: absolute;
78
+ top: 0;
79
+ left: 0;
80
+ padding: 0;
81
+ background: #c0bfbf;
82
+ border: 1px solid transparent;
83
+ transition: color 0.12s ease-in-out, background-color 0.12s ease-in-out, border-color 0.12s ease-in-out, box-shadow 0.12s ease-in-out;
84
+ cursor: grab;
85
+ pointer-events: all;
86
+ }
87
+ .time-slider .track .handle-track .handle:hover {
88
+ background: #fcfcfa;
89
+ }
90
+ .time-slider .track .handle-track .handle:focus {
91
+ background: #fcfcfa;
92
+ outline: 0;
93
+ border: 1px solid rgba(72, 120, 234, 0.85);
94
+ box-shadow: 0 0 0 0.2rem rgba(72, 120, 234, 0.35);
95
+ transform: scale(1.15);
96
+ }
97
+ .time-slider .track .ticks {
98
+ height: 100%;
99
+ width: 100%;
100
+ position: absolute;
101
+ top: 0;
102
+ left: 0;
103
+ display: flex;
104
+ flex-direction: row;
105
+ }
106
+ .time-slider .track .ticks div {
107
+ display: block;
108
+ width: 4.1666666667%;
109
+ height: 15px;
110
+ border-right: 1px solid #211f22;
111
+ }
112
+ .time-slider .track .ticks div:last-child {
113
+ border-right: none;
114
+ }
115
+ .time-slider .tick-labels {
116
+ position: relative;
117
+ width: 100%;
118
+ user-select: none;
119
+ color: #c0bfbf;
120
+ display: flex;
121
+ flex-direction: row;
122
+ flex-wrap: wrap;
123
+ height: 1.5rem;
124
+ overflow: hidden;
125
+ }
126
+ .time-slider .tick-labels .tick-label {
127
+ width: 4.1666666667%;
128
+ text-align: left;
129
+ font-size: 0.9rem;
130
+ }
131
+ .time-slider .tick-labels .tick-label-wrapper {
132
+ width: 95.8333333333%;
133
+ min-width: 300px;
134
+ margin-left: -2.0833333333%;
135
+ display: flex;
136
+ }
137
+ .time-slider .tick-labels .tick-label-wrapper .tick-label {
138
+ text-align: center;
139
+ visibility: hidden;
140
+ width: 4.347826087%;
141
+ }
142
+ .time-slider .tick-labels .tick-label-wrapper .tick-label::before {
143
+ content: "";
144
+ margin-left: -100%;
145
+ }
146
+ .time-slider .tick-labels .tick-label-wrapper .tick-label::after {
147
+ content: "";
148
+ margin-right: -100%;
149
+ }
150
+ .time-slider .tick-labels .tick-label-wrapper .tick-label:nth-child(4),
151
+ .time-slider .tick-labels .tick-label-wrapper .tick-label:nth-child(8),
152
+ .time-slider .tick-labels .tick-label-wrapper .tick-label:nth-child(12),
153
+ .time-slider .tick-labels .tick-label-wrapper .tick-label:nth-child(16),
154
+ .time-slider .tick-labels .tick-label-wrapper .tick-label:nth-child(20),
155
+ .time-slider .tick-labels .tick-label-wrapper .tick-label:nth-child(24) {
156
+ visibility: visible;
157
+ }
158
+ .time-slider .tick-labels .tick-label-wrapper div:nth-child(12) {
159
+ position: absolute;
160
+ top: 0;
161
+ left: 47.8260869565%;
162
+ }
163
+ .time-slider .tick-labels .tick-label-wrapper div:nth-child(13) {
164
+ margin-left: 4.1666666667%;
165
+ }
166
+ .time-slider .tick-labels .tick-label-wrapper div:nth-child(24) {
167
+ position: absolute;
168
+ direction: rtl;
169
+ top: 0;
170
+ right: 0;
171
+ text-align: right;
172
+ }
173
+ .time-slider .tick-labels .tick-label-wrapper div:nth-child(24)::before, .time-slider .tick-labels .tick-label-wrapper div:nth-child(24)::after {
174
+ content: unset;
175
+ margin: unset;
176
+ }
177
+
178
+ /*# sourceMappingURL=TimeSlider.css.map */