@deephaven/components 0.46.1-beta.2 → 0.46.1-beta.4

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 (111) hide show
  1. package/dist/AutoCompleteInput.js +40 -34
  2. package/dist/AutoCompleteInput.js.map +1 -1
  3. package/dist/AutoResizeTextarea.js +2 -1
  4. package/dist/AutoResizeTextarea.js.map +1 -1
  5. package/dist/BasicModal.js +48 -33
  6. package/dist/BasicModal.js.map +1 -1
  7. package/dist/Button.js +19 -8
  8. package/dist/Button.js.map +1 -1
  9. package/dist/ButtonGroup.js +5 -3
  10. package/dist/ButtonGroup.js.map +1 -1
  11. package/dist/ButtonOld.js +5 -3
  12. package/dist/ButtonOld.js.map +1 -1
  13. package/dist/CardFlip.js +14 -9
  14. package/dist/CardFlip.js.map +1 -1
  15. package/dist/Checkbox.js +23 -19
  16. package/dist/Checkbox.js.map +1 -1
  17. package/dist/Collapse.js +12 -9
  18. package/dist/Collapse.js.map +1 -1
  19. package/dist/ComboBox.js +61 -51
  20. package/dist/ComboBox.js.map +1 -1
  21. package/dist/CopyButton.js +5 -3
  22. package/dist/CopyButton.js.map +1 -1
  23. package/dist/CustomTimeSelect.js +92 -84
  24. package/dist/CustomTimeSelect.js.map +1 -1
  25. package/dist/DateInput.js +19 -17
  26. package/dist/DateInput.js.map +1 -1
  27. package/dist/DateTimeInput.js +20 -18
  28. package/dist/DateTimeInput.js.map +1 -1
  29. package/dist/DebouncedSearchInput.js +2 -1
  30. package/dist/DebouncedSearchInput.js.map +1 -1
  31. package/dist/DraggableItemList.js +97 -80
  32. package/dist/DraggableItemList.js.map +1 -1
  33. package/dist/EditableItemList.js +53 -46
  34. package/dist/EditableItemList.js.map +1 -1
  35. package/dist/HierarchicalCheckboxMenu.js +59 -49
  36. package/dist/HierarchicalCheckboxMenu.js.map +1 -1
  37. package/dist/ItemList.js +42 -37
  38. package/dist/ItemList.js.map +1 -1
  39. package/dist/ItemListItem.js +5 -3
  40. package/dist/ItemListItem.js.map +1 -1
  41. package/dist/LoadingOverlay.js +28 -20
  42. package/dist/LoadingOverlay.js.map +1 -1
  43. package/dist/LoadingSpinner.js +13 -10
  44. package/dist/LoadingSpinner.js.map +1 -1
  45. package/dist/MaskedInput.js +2 -1
  46. package/dist/MaskedInput.js.map +1 -1
  47. package/dist/Option.js +5 -3
  48. package/dist/Option.js.map +1 -1
  49. package/dist/RadioGroup.js +14 -10
  50. package/dist/RadioGroup.js.map +1 -1
  51. package/dist/RadioItem.js +23 -19
  52. package/dist/RadioItem.js.map +1 -1
  53. package/dist/RandomAreaPlotAnimation.js +8 -6
  54. package/dist/RandomAreaPlotAnimation.js.map +1 -1
  55. package/dist/SearchInput.js +26 -21
  56. package/dist/SearchInput.js.map +1 -1
  57. package/dist/Select.js +5 -3
  58. package/dist/Select.js.map +1 -1
  59. package/dist/SelectValueList.js +29 -24
  60. package/dist/SelectValueList.js.map +1 -1
  61. package/dist/SocketedButton.js +13 -10
  62. package/dist/SocketedButton.js.map +1 -1
  63. package/dist/TimeInput.js +2 -1
  64. package/dist/TimeInput.js.map +1 -1
  65. package/dist/TimeSlider.js +123 -106
  66. package/dist/TimeSlider.js.map +1 -1
  67. package/dist/ToastNotification.js +35 -27
  68. package/dist/ToastNotification.js.map +1 -1
  69. package/dist/UISwitch.js +7 -5
  70. package/dist/UISwitch.js.map +1 -1
  71. package/dist/ValidateLabelInput.js +33 -24
  72. package/dist/ValidateLabelInput.js.map +1 -1
  73. package/dist/context-actions/ContextActions.js +7 -5
  74. package/dist/context-actions/ContextActions.js.map +1 -1
  75. package/dist/context-actions/ContextMenu.js +44 -41
  76. package/dist/context-actions/ContextMenu.js.map +1 -1
  77. package/dist/context-actions/ContextMenuItem.js +34 -24
  78. package/dist/context-actions/ContextMenuItem.js.map +1 -1
  79. package/dist/context-actions/ContextMenuRoot.js +6 -4
  80. package/dist/context-actions/ContextMenuRoot.js.map +1 -1
  81. package/dist/context-actions/GlobalContextActions.js +3 -3
  82. package/dist/context-actions/GlobalContextActions.js.map +1 -1
  83. package/dist/menu-actions/DropdownMenu.js +19 -16
  84. package/dist/menu-actions/DropdownMenu.js.map +1 -1
  85. package/dist/menu-actions/Menu.js +8 -9
  86. package/dist/menu-actions/Menu.js.map +1 -1
  87. package/dist/modal/DebouncedModal.js +14 -9
  88. package/dist/modal/DebouncedModal.js.map +1 -1
  89. package/dist/modal/InfoModal.js +22 -13
  90. package/dist/modal/InfoModal.js.map +1 -1
  91. package/dist/modal/Modal.js +70 -60
  92. package/dist/modal/Modal.js.map +1 -1
  93. package/dist/modal/ModalBody.js +5 -3
  94. package/dist/modal/ModalBody.js.map +1 -1
  95. package/dist/modal/ModalFooter.js +5 -3
  96. package/dist/modal/ModalFooter.js.map +1 -1
  97. package/dist/modal/ModalHeader.js +19 -13
  98. package/dist/modal/ModalHeader.js.map +1 -1
  99. package/dist/navigation/Menu.js +15 -12
  100. package/dist/navigation/Menu.js.map +1 -1
  101. package/dist/navigation/MenuItem.js +29 -22
  102. package/dist/navigation/MenuItem.js.map +1 -1
  103. package/dist/navigation/Page.js +35 -26
  104. package/dist/navigation/Page.js.map +1 -1
  105. package/dist/navigation/Stack.js +33 -20
  106. package/dist/navigation/Stack.js.map +1 -1
  107. package/dist/popper/Popper.js +31 -25
  108. package/dist/popper/Popper.js.map +1 -1
  109. package/dist/popper/Tooltip.js +18 -13
  110. package/dist/popper/Tooltip.js.map +1 -1
  111. package/package.json +7 -7
@@ -6,6 +6,9 @@ import classNames from 'classnames';
6
6
  import TimeInput from "./TimeInput.js";
7
7
  import StyleExports from "./TimeSlider.module.css";
8
8
  import "./TimeSlider.css";
9
+ import { jsx as _jsx } from "react/jsx-runtime";
10
+ import { jsxs as _jsxs } from "react/jsx-runtime";
11
+ import { Fragment as _Fragment } from "react/jsx-runtime";
9
12
  var HANDLE_SIZE = parseInt(StyleExports['handle-size'], 10);
10
13
  var POPOVER_WIDTH = parseInt(StyleExports['popover-width'], 10);
11
14
  var SECONDS_IN_DAY = 24 * 60 * 60 - 1; // Max is actually 23:59:59
@@ -56,45 +59,50 @@ function TimeSlider(_ref) {
56
59
  var handleEndTimeChange = useCallback(newEndTime => {
57
60
  updateTime(startTime, newEndTime);
58
61
  }, [updateTime, startTime]);
59
- return /*#__PURE__*/React.createElement("div", {
62
+ return /*#__PURE__*/_jsxs("div", {
60
63
  className: "time-slider",
61
- "data-testid": dataTestId
62
- }, /*#__PURE__*/React.createElement(PopOvers, {
63
- startTime: startTime,
64
- endTime: endTime,
65
- onStartTimeChange: handleStartTimeChange,
66
- onEndTimeChange: handleEndTimeChange,
67
- isStartModified: isStartModified,
68
- isEndModified: isEndModified
69
- }), /*#__PURE__*/React.createElement("div", {
70
- className: "track",
71
- ref: track
72
- }, /*#__PURE__*/React.createElement(TrackFills, {
73
- startTime: startTime,
74
- endTime: endTime
75
- }), /*#__PURE__*/React.createElement("div", {
76
- className: "ticks"
77
- }, Array(24).fill(null).map((value, index) => /*#__PURE__*/React.createElement("div", {
78
- className: "tick",
79
- key: index
80
- }))), /*#__PURE__*/React.createElement(Handle, {
81
- track: track,
82
- time: startTime,
83
- setTime: handleStartTimeChange
84
- }), /*#__PURE__*/React.createElement(Handle, {
85
- track: track,
86
- time: endTime,
87
- setTime: handleEndTimeChange
88
- })), /*#__PURE__*/React.createElement("div", {
89
- className: "tick-labels"
90
- }, /*#__PURE__*/React.createElement("div", {
91
- className: "tick-label"
92
- }, "0:00"), /*#__PURE__*/React.createElement("div", {
93
- className: "tick-label-wrapper"
94
- }, Array(24).fill(null).map((value, index) => /*#__PURE__*/React.createElement("div", {
95
- className: "tick-label",
96
- key: index
97
- }, "".concat(index + 1, ":00"))))));
64
+ "data-testid": dataTestId,
65
+ children: [/*#__PURE__*/_jsx(PopOvers, {
66
+ startTime: startTime,
67
+ endTime: endTime,
68
+ onStartTimeChange: handleStartTimeChange,
69
+ onEndTimeChange: handleEndTimeChange,
70
+ isStartModified: isStartModified,
71
+ isEndModified: isEndModified
72
+ }), /*#__PURE__*/_jsxs("div", {
73
+ className: "track",
74
+ ref: track,
75
+ children: [/*#__PURE__*/_jsx(TrackFills, {
76
+ startTime: startTime,
77
+ endTime: endTime
78
+ }), /*#__PURE__*/_jsx("div", {
79
+ className: "ticks",
80
+ children: Array(24).fill(null).map((value, index) => /*#__PURE__*/_jsx("div", {
81
+ className: "tick"
82
+ }, index))
83
+ }), /*#__PURE__*/_jsx(Handle, {
84
+ track: track,
85
+ time: startTime,
86
+ setTime: handleStartTimeChange
87
+ }), /*#__PURE__*/_jsx(Handle, {
88
+ track: track,
89
+ time: endTime,
90
+ setTime: handleEndTimeChange
91
+ })]
92
+ }), /*#__PURE__*/_jsxs("div", {
93
+ className: "tick-labels",
94
+ children: [/*#__PURE__*/_jsx("div", {
95
+ className: "tick-label",
96
+ children: "0:00"
97
+ }), /*#__PURE__*/_jsx("div", {
98
+ className: "tick-label-wrapper",
99
+ children: Array(24).fill(null).map((value, index) => /*#__PURE__*/_jsx("div", {
100
+ className: "tick-label",
101
+ children: "".concat(index + 1, ":00")
102
+ }, index))
103
+ })]
104
+ })]
105
+ });
98
106
  }
99
107
  function PopOvers(props) {
100
108
  var {
@@ -150,47 +158,52 @@ function PopOvers(props) {
150
158
  firstTimeSelectionRef.current = null;
151
159
  secondTimeSelectionRef.current = selection;
152
160
  }, []);
153
- return /*#__PURE__*/React.createElement("div", {
154
- className: "time-slider-popovers"
155
- }, /*#__PURE__*/React.createElement("div", {
156
- className: "flex",
157
- style: {
158
- flexBasis: "calc(".concat(firstTime / SECONDS_IN_DAY * 100, "% - ").concat(POPOVER_WIDTH / 2, "px)")
159
- }
160
- }), /*#__PURE__*/React.createElement("div", {
161
- className: "handle-popper"
162
- }, /*#__PURE__*/React.createElement("label", {
163
- className: classNames({
164
- modified: swapTimes ? isEndModified : isStartModified
165
- })
166
- }, swapTimes ? 'End Time' : 'Start Time'), /*#__PURE__*/React.createElement(TimeInput, {
167
- ref: firstTimeRef,
168
- allowValueWrapping: false,
169
- value: firstTime,
170
- onChange: onFirstTimeChange,
171
- onSelect: onFirstTimeSelect,
172
- "data-testid": dataTestId !== undefined ? "".concat(dataTestId, "-input-1") : undefined
173
- })), /*#__PURE__*/React.createElement("div", {
174
- className: "flex-spacer"
175
- }), /*#__PURE__*/React.createElement("div", {
176
- className: "handle-popper"
177
- }, /*#__PURE__*/React.createElement("label", {
178
- className: classNames({
179
- modified: swapTimes ? isStartModified : isEndModified
180
- })
181
- }, swapTimes ? 'Start Time' : 'End Time'), /*#__PURE__*/React.createElement(TimeInput, {
182
- ref: secondTimeRef,
183
- allowValueWrapping: false,
184
- value: secondTime,
185
- onChange: onSecondTimeChange,
186
- onSelect: onSecondTimeSelect,
187
- "data-testid": dataTestId !== undefined ? "".concat(dataTestId, "-input-2") : undefined
188
- })), /*#__PURE__*/React.createElement("div", {
189
- className: "flex",
190
- style: {
191
- flexBasis: "calc(".concat((SECONDS_IN_DAY - secondTime) / SECONDS_IN_DAY * 100, "% - ").concat(POPOVER_WIDTH / 2, "px)")
192
- }
193
- }));
161
+ return /*#__PURE__*/_jsxs("div", {
162
+ className: "time-slider-popovers",
163
+ children: [/*#__PURE__*/_jsx("div", {
164
+ className: "flex",
165
+ style: {
166
+ flexBasis: "calc(".concat(firstTime / SECONDS_IN_DAY * 100, "% - ").concat(POPOVER_WIDTH / 2, "px)")
167
+ }
168
+ }), /*#__PURE__*/_jsxs("div", {
169
+ className: "handle-popper",
170
+ children: [/*#__PURE__*/_jsx("label", {
171
+ className: classNames({
172
+ modified: swapTimes ? isEndModified : isStartModified
173
+ }),
174
+ children: swapTimes ? 'End Time' : 'Start Time'
175
+ }), /*#__PURE__*/_jsx(TimeInput, {
176
+ ref: firstTimeRef,
177
+ allowValueWrapping: false,
178
+ value: firstTime,
179
+ onChange: onFirstTimeChange,
180
+ onSelect: onFirstTimeSelect,
181
+ "data-testid": dataTestId !== undefined ? "".concat(dataTestId, "-input-1") : undefined
182
+ })]
183
+ }), /*#__PURE__*/_jsx("div", {
184
+ className: "flex-spacer"
185
+ }), /*#__PURE__*/_jsxs("div", {
186
+ className: "handle-popper",
187
+ children: [/*#__PURE__*/_jsx("label", {
188
+ className: classNames({
189
+ modified: swapTimes ? isStartModified : isEndModified
190
+ }),
191
+ children: swapTimes ? 'Start Time' : 'End Time'
192
+ }), /*#__PURE__*/_jsx(TimeInput, {
193
+ ref: secondTimeRef,
194
+ allowValueWrapping: false,
195
+ value: secondTime,
196
+ onChange: onSecondTimeChange,
197
+ onSelect: onSecondTimeSelect,
198
+ "data-testid": dataTestId !== undefined ? "".concat(dataTestId, "-input-2") : undefined
199
+ })]
200
+ }), /*#__PURE__*/_jsx("div", {
201
+ className: "flex",
202
+ style: {
203
+ flexBasis: "calc(".concat((SECONDS_IN_DAY - secondTime) / SECONDS_IN_DAY * 100, "% - ").concat(POPOVER_WIDTH / 2, "px)")
204
+ }
205
+ })]
206
+ });
194
207
  }
195
208
  /**
196
209
  * Shades the area between or outside of handles according to if start or endtime is greater.
@@ -201,25 +214,28 @@ function TrackFills(props) {
201
214
  endTime,
202
215
  'data-testid': dataTestId
203
216
  } = props;
204
- return /*#__PURE__*/React.createElement("div", {
217
+ return /*#__PURE__*/_jsxs("div", {
205
218
  className: "track-fills",
206
- "data-testid": dataTestId
207
- }, startTime > endTime && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
208
- className: "track-fill track-fill-start",
209
- style: {
210
- transform: "scaleX(".concat(endTime / SECONDS_IN_DAY, ")")
211
- }
212
- }), /*#__PURE__*/React.createElement("div", {
213
- className: "track-fill track-fill-end",
214
- style: {
215
- transform: "scaleX(".concat((SECONDS_IN_DAY - startTime) / SECONDS_IN_DAY, ")")
216
- }
217
- })), startTime < endTime && /*#__PURE__*/React.createElement("div", {
218
- className: "track-fill track-fill-middle",
219
- style: {
220
- transform: "translateX(".concat(startTime / SECONDS_IN_DAY * 100, "%) scaleX(").concat((endTime - startTime) / SECONDS_IN_DAY, ")")
221
- }
222
- }));
219
+ "data-testid": dataTestId,
220
+ children: [startTime > endTime && /*#__PURE__*/_jsxs(_Fragment, {
221
+ children: [/*#__PURE__*/_jsx("div", {
222
+ className: "track-fill track-fill-start",
223
+ style: {
224
+ transform: "scaleX(".concat(endTime / SECONDS_IN_DAY, ")")
225
+ }
226
+ }), /*#__PURE__*/_jsx("div", {
227
+ className: "track-fill track-fill-end",
228
+ style: {
229
+ transform: "scaleX(".concat((SECONDS_IN_DAY - startTime) / SECONDS_IN_DAY, ")")
230
+ }
231
+ })]
232
+ }), startTime < endTime && /*#__PURE__*/_jsx("div", {
233
+ className: "track-fill track-fill-middle",
234
+ style: {
235
+ transform: "translateX(".concat(startTime / SECONDS_IN_DAY * 100, "%) scaleX(").concat((endTime - startTime) / SECONDS_IN_DAY, ")")
236
+ }
237
+ })]
238
+ });
223
239
  }
224
240
  /**
225
241
  * Creates a draggable handle the sets the time
@@ -297,18 +313,19 @@ function Handle(props) {
297
313
  stopDragListening();
298
314
  };
299
315
  }, [stopDragListening]);
300
- return /*#__PURE__*/React.createElement("div", {
316
+ return /*#__PURE__*/_jsx("div", {
301
317
  className: "handle-track",
302
318
  style: {
303
319
  transform
304
- }
305
- }, /*#__PURE__*/React.createElement("button", {
306
- className: "handle",
307
- type: "button",
308
- "aria-label": "Change time",
309
- onMouseDown: handleMouseDown,
310
- "data-testid": dataTestId
311
- }));
320
+ },
321
+ children: /*#__PURE__*/_jsx("button", {
322
+ className: "handle",
323
+ type: "button",
324
+ "aria-label": "Change time",
325
+ onMouseDown: handleMouseDown,
326
+ "data-testid": dataTestId
327
+ })
328
+ });
312
329
  }
313
330
  export default TimeSlider;
314
331
  //# sourceMappingURL=TimeSlider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TimeSlider.js","names":["React","useCallback","useMemo","useRef","useState","useEffect","classNames","TimeInput","StyleExports","HANDLE_SIZE","parseInt","POPOVER_WIDTH","SECONDS_IN_DAY","SNAP_NEAREST_MINUTES","TimeSlider","startTime","propStartTime","endTime","propEndTime","onChange","isStartModified","isEndModified","dataTestId","setStartTime","setEndTime","track","setTimeOnPropTimeChange","updateTime","newStartTime","newEndTime","start","end","handleStartTimeChange","handleEndTimeChange","Array","fill","map","value","index","PopOvers","props","onStartTimeChange","onEndTimeChange","swapTimes","firstTime","setFirstTime","secondTime","setSecondTime","firstTimeRef","secondTimeRef","firstTimeSelectionRef","secondTimeSelectionRef","setFocusOnSwapTimesChange","current","setSelection","onFirstTimeChange","onSecondTimeChange","onFirstTimeSelect","selection","onSecondTimeSelect","flexBasis","modified","undefined","TrackFills","transform","Handle","time","setTime","ONE_HOUR","handleOffset","calculatePositionAsTime","clientX","trackRect","getBoundingClientRect","leftEdge","Math","max","left","preciseTime","min","width","roundedTime","round","limitMax","handleMouseMove","handleMouseUp","window","removeEventListener","document","documentElement","classList","remove","startDragListening","addEventListener","add","stopDragListening","handleMouseDown","removeListenersOnUnmount"],"sources":["../src/TimeSlider.tsx"],"sourcesContent":["/* eslint-disable react/no-array-index-key */\n// array maps being used are static, this is fine.\n\nimport React, {\n useCallback,\n useMemo,\n useRef,\n useState,\n useEffect,\n} from 'react';\nimport classNames from 'classnames';\nimport TimeInput, { SelectionSegment, TimeInputElement } from './TimeInput';\nimport StyleExports from './TimeSlider.module.scss';\nimport './TimeSlider.scss';\n\nconst HANDLE_SIZE = parseInt(StyleExports['handle-size'], 10);\nconst POPOVER_WIDTH = parseInt(StyleExports['popover-width'], 10);\nconst SECONDS_IN_DAY = 24 * 60 * 60 - 1; // Max is actually 23:59:59\nconst SNAP_NEAREST_MINUTES = 5 * 60; // rounds in 5 minute intervals\n\ntype TimeSliderProps = {\n startTime: number;\n endTime: number;\n onChange(value: { startTime: number; endTime: number }): void;\n isStartModified?: boolean;\n isEndModified?: boolean;\n 'data-testid'?: string;\n};\n\n/**\n * Creates a time slider for setting a start and end time, that can also run overnight\n * @param props takes times in seconds 0 - 86399 and a callback\n */\nfunction TimeSlider({\n startTime: propStartTime,\n endTime: propEndTime,\n onChange,\n isStartModified = false,\n isEndModified = false,\n 'data-testid': dataTestId,\n}: TimeSliderProps): JSX.Element {\n const [startTime, setStartTime] = useState(propStartTime);\n const [endTime, setEndTime] = useState(propEndTime);\n\n const track = useRef<HTMLDivElement>(null); // we need the track width while calulculating time from handle drag\n\n // updates state if props change\n useEffect(\n function setTimeOnPropTimeChange() {\n setStartTime(propStartTime);\n setEndTime(propEndTime);\n },\n [propStartTime, propEndTime]\n );\n\n const updateTime = useCallback(\n (newStartTime: number, newEndTime: number) => {\n let start = newStartTime;\n let end = newEndTime;\n if (start === end) {\n if (end < SECONDS_IN_DAY) {\n end += 1;\n } else {\n start -= 1;\n }\n }\n\n setStartTime(start);\n setEndTime(end);\n onChange({ startTime: start, endTime: end });\n },\n [setStartTime, setEndTime, onChange]\n );\n\n const handleStartTimeChange = useCallback(\n (newStartTime: number) => {\n updateTime(newStartTime, endTime);\n },\n [updateTime, endTime]\n );\n\n const handleEndTimeChange = useCallback(\n (newEndTime: number) => {\n updateTime(startTime, newEndTime);\n },\n [updateTime, startTime]\n );\n\n return (\n <div className=\"time-slider\" data-testid={dataTestId}>\n <PopOvers\n startTime={startTime}\n endTime={endTime}\n onStartTimeChange={handleStartTimeChange}\n onEndTimeChange={handleEndTimeChange}\n isStartModified={isStartModified}\n isEndModified={isEndModified}\n />\n <div className=\"track\" ref={track}>\n <TrackFills startTime={startTime} endTime={endTime} />\n <div className=\"ticks\">\n {Array(24)\n .fill(null)\n .map((value, index) => (\n <div className=\"tick\" key={index} />\n ))}\n </div>\n <Handle\n track={track}\n time={startTime}\n setTime={handleStartTimeChange}\n />\n <Handle track={track} time={endTime} setTime={handleEndTimeChange} />\n </div>\n\n <div className=\"tick-labels\">\n <div className=\"tick-label\">0:00</div>\n <div className=\"tick-label-wrapper\">\n {Array(24)\n .fill(null)\n .map((value, index) => (\n <div className=\"tick-label\" key={index}>{`${index + 1}:00`}</div>\n ))}\n </div>\n </div>\n </div>\n );\n}\n\ntype PopOversProps = {\n startTime: number;\n endTime: number;\n onStartTimeChange(time: number): void;\n onEndTimeChange(time: number): void;\n isStartModified: boolean;\n isEndModified: boolean;\n 'data-testid'?: string;\n};\n\nfunction PopOvers(props: PopOversProps): JSX.Element {\n const {\n startTime,\n endTime,\n onStartTimeChange,\n onEndTimeChange,\n isStartModified,\n isEndModified,\n 'data-testid': dataTestId,\n } = props;\n\n const swapTimes = startTime > endTime;\n\n const [firstTime, setFirstTime] = useState(swapTimes ? endTime : startTime);\n const [secondTime, setSecondTime] = useState(swapTimes ? startTime : endTime);\n const firstTimeRef = useRef<TimeInputElement>(null);\n const secondTimeRef = useRef<TimeInputElement>(null);\n // Keep track of selection in both time inputs\n const firstTimeSelectionRef = useRef<SelectionSegment | null>(null);\n const secondTimeSelectionRef = useRef<SelectionSegment | null>(null);\n\n useEffect(\n function setTimeOnPropTimeChange() {\n setFirstTime(startTime > endTime ? endTime : startTime);\n setSecondTime(startTime > endTime ? startTime : endTime);\n },\n [startTime, endTime]\n );\n\n useEffect(\n function setFocusOnSwapTimesChange() {\n if (firstTimeSelectionRef.current !== null) {\n secondTimeRef.current?.setSelection(firstTimeSelectionRef.current);\n }\n if (secondTimeSelectionRef.current !== null) {\n firstTimeRef.current?.setSelection(secondTimeSelectionRef.current);\n }\n },\n [swapTimes]\n );\n\n function onFirstTimeChange(value: number) {\n if (startTime <= endTime) {\n onStartTimeChange(value);\n } else {\n onEndTimeChange(value);\n }\n }\n\n function onSecondTimeChange(value: number) {\n if (startTime <= endTime) {\n onEndTimeChange(value);\n } else {\n onStartTimeChange(value);\n }\n }\n\n const onFirstTimeSelect = useCallback(selection => {\n firstTimeSelectionRef.current = selection;\n secondTimeSelectionRef.current = null;\n }, []);\n\n const onSecondTimeSelect = useCallback(selection => {\n firstTimeSelectionRef.current = null;\n secondTimeSelectionRef.current = selection;\n }, []);\n\n return (\n <div className=\"time-slider-popovers\">\n <div\n className=\"flex\"\n style={{\n flexBasis: `calc(${(firstTime / SECONDS_IN_DAY) * 100}% - ${\n POPOVER_WIDTH / 2\n }px)`,\n }}\n />\n <div className=\"handle-popper\">\n <label\n className={classNames({\n modified: swapTimes ? isEndModified : isStartModified,\n })}\n >\n {swapTimes ? 'End Time' : 'Start Time'}\n </label>\n <TimeInput\n ref={firstTimeRef}\n allowValueWrapping={false}\n value={firstTime}\n onChange={onFirstTimeChange}\n onSelect={onFirstTimeSelect}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-input-1` : undefined\n }\n />\n </div>\n <div className=\"flex-spacer\" />\n <div className=\"handle-popper\">\n <label\n className={classNames({\n modified: swapTimes ? isStartModified : isEndModified,\n })}\n >\n {swapTimes ? 'Start Time' : 'End Time'}\n </label>\n <TimeInput\n ref={secondTimeRef}\n allowValueWrapping={false}\n value={secondTime}\n onChange={onSecondTimeChange}\n onSelect={onSecondTimeSelect}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-input-2` : undefined\n }\n />\n </div>\n <div\n className=\"flex\"\n style={{\n flexBasis: `calc(${\n ((SECONDS_IN_DAY - secondTime) / SECONDS_IN_DAY) * 100\n }% - ${POPOVER_WIDTH / 2}px)`,\n }}\n />\n </div>\n );\n}\n\ntype TrackFillsProps = {\n startTime: number;\n endTime: number;\n 'data-testid'?: string;\n};\n\n/**\n * Shades the area between or outside of handles according to if start or endtime is greater.\n */\nfunction TrackFills(props: TrackFillsProps): JSX.Element {\n const { startTime, endTime, 'data-testid': dataTestId } = props;\n return (\n <div className=\"track-fills\" data-testid={dataTestId}>\n {startTime > endTime && (\n <>\n <div\n className=\"track-fill track-fill-start\"\n style={{ transform: `scaleX(${endTime / SECONDS_IN_DAY})` }}\n />\n <div\n className=\"track-fill track-fill-end\"\n style={{\n transform: `scaleX(${\n (SECONDS_IN_DAY - startTime) / SECONDS_IN_DAY\n })`,\n }}\n />\n </>\n )}\n {startTime < endTime && (\n <div\n className=\"track-fill track-fill-middle\"\n style={{\n transform: `translateX(${\n (startTime / SECONDS_IN_DAY) * 100\n }%) scaleX(${(endTime - startTime) / SECONDS_IN_DAY})`,\n }}\n />\n )}\n </div>\n );\n}\n\ntype HandleProps = {\n track: React.RefObject<HTMLDivElement>;\n time: number;\n setTime(time: number): void;\n 'data-testid'?: string;\n};\n\n/**\n * Creates a draggable handle the sets the time\n */\nfunction Handle(props: HandleProps): JSX.Element {\n const { track, time, setTime, 'data-testid': dataTestId } = props;\n\n /**\n * Takes the time and generate our translation string taking into account handle offset.\n * The handle offset changes for the first and last tick range dynmaically. Normally,\n * the center of the handle (size/2) is the selection origin, but at edges, it becomes either\n * end of the handle, requireing a relative offset range of 0 - 0.5, and 0.5 - 1 of handle size.\n * @param t time in seconds\n */\n const transform = useMemo(() => {\n const ONE_HOUR = 60 * 60;\n let handleOffset = HANDLE_SIZE / 2;\n if (time < ONE_HOUR) {\n handleOffset = (time / ONE_HOUR) * (HANDLE_SIZE / 2); // 0 - 0.5 Handle size\n } else if (time > 23 * ONE_HOUR) {\n handleOffset =\n HANDLE_SIZE / 2 +\n (1 / (SECONDS_IN_DAY - 23 * ONE_HOUR)) *\n (time - 23 * ONE_HOUR) *\n (HANDLE_SIZE / 2); // 0.5 - 1 Handle size\n }\n return `translateX(calc(${\n (time / SECONDS_IN_DAY) * 100\n }% - ${handleOffset}px))`;\n }, [time]);\n\n const calculatePositionAsTime = useCallback(\n (clientX: number) => {\n if (!track.current) {\n return 0;\n }\n const trackRect = track.current.getBoundingClientRect();\n const leftEdge = Math.max(clientX - trackRect.left, 0);\n // get position as 0-1 on slider and mulitply by seconds in a day to convert to time\n const preciseTime =\n SECONDS_IN_DAY * Math.min(1, leftEdge / trackRect.width);\n // snap to nearest N(5) minute interval\n const roundedTime =\n SNAP_NEAREST_MINUTES * Math.round(preciseTime / SNAP_NEAREST_MINUTES);\n // prevent over-rounding to 24:00:00\n const limitMax = Math.min(SECONDS_IN_DAY, roundedTime);\n return limitMax;\n },\n [track]\n );\n\n const handleMouseMove = useCallback(\n ({ clientX }: MouseEvent) => {\n setTime(calculatePositionAsTime(clientX));\n },\n [setTime, calculatePositionAsTime]\n );\n\n const handleMouseUp = useCallback(\n ({ clientX }: MouseEvent) => {\n setTime(calculatePositionAsTime(clientX));\n\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n document.documentElement.classList.remove('drag-pointer-events-none');\n },\n [setTime, calculatePositionAsTime, handleMouseMove]\n );\n\n const startDragListening = useCallback(() => {\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n document.documentElement.classList.add('drag-pointer-events-none');\n }, [handleMouseMove, handleMouseUp]);\n\n const stopDragListening = useCallback(() => {\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n document.documentElement.classList.remove('drag-pointer-events-none');\n }, [handleMouseMove, handleMouseUp]);\n\n const handleMouseDown = useCallback(() => {\n startDragListening();\n }, [startDragListening]);\n\n useEffect(\n function removeListenersOnUnmount() {\n return () => {\n stopDragListening();\n };\n },\n [stopDragListening]\n );\n\n return (\n <div className=\"handle-track\" style={{ transform }}>\n <button\n className=\"handle\"\n type=\"button\"\n aria-label=\"Change time\"\n onMouseDown={handleMouseDown}\n data-testid={dataTestId}\n />\n </div>\n );\n}\n\nexport default TimeSlider;\n"],"mappings":"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"}
1
+ {"version":3,"file":"TimeSlider.js","names":["React","useCallback","useMemo","useRef","useState","useEffect","classNames","TimeInput","StyleExports","HANDLE_SIZE","parseInt","POPOVER_WIDTH","SECONDS_IN_DAY","SNAP_NEAREST_MINUTES","TimeSlider","startTime","propStartTime","endTime","propEndTime","onChange","isStartModified","isEndModified","dataTestId","setStartTime","setEndTime","track","setTimeOnPropTimeChange","updateTime","newStartTime","newEndTime","start","end","handleStartTimeChange","handleEndTimeChange","Array","fill","map","value","index","PopOvers","props","onStartTimeChange","onEndTimeChange","swapTimes","firstTime","setFirstTime","secondTime","setSecondTime","firstTimeRef","secondTimeRef","firstTimeSelectionRef","secondTimeSelectionRef","setFocusOnSwapTimesChange","current","setSelection","onFirstTimeChange","onSecondTimeChange","onFirstTimeSelect","selection","onSecondTimeSelect","flexBasis","modified","undefined","TrackFills","transform","Handle","time","setTime","ONE_HOUR","handleOffset","calculatePositionAsTime","clientX","trackRect","getBoundingClientRect","leftEdge","Math","max","left","preciseTime","min","width","roundedTime","round","limitMax","handleMouseMove","handleMouseUp","window","removeEventListener","document","documentElement","classList","remove","startDragListening","addEventListener","add","stopDragListening","handleMouseDown","removeListenersOnUnmount"],"sources":["../src/TimeSlider.tsx"],"sourcesContent":["/* eslint-disable react/no-array-index-key */\n// array maps being used are static, this is fine.\n\nimport React, {\n useCallback,\n useMemo,\n useRef,\n useState,\n useEffect,\n} from 'react';\nimport classNames from 'classnames';\nimport TimeInput, { SelectionSegment, TimeInputElement } from './TimeInput';\nimport StyleExports from './TimeSlider.module.scss';\nimport './TimeSlider.scss';\n\nconst HANDLE_SIZE = parseInt(StyleExports['handle-size'], 10);\nconst POPOVER_WIDTH = parseInt(StyleExports['popover-width'], 10);\nconst SECONDS_IN_DAY = 24 * 60 * 60 - 1; // Max is actually 23:59:59\nconst SNAP_NEAREST_MINUTES = 5 * 60; // rounds in 5 minute intervals\n\ntype TimeSliderProps = {\n startTime: number;\n endTime: number;\n onChange(value: { startTime: number; endTime: number }): void;\n isStartModified?: boolean;\n isEndModified?: boolean;\n 'data-testid'?: string;\n};\n\n/**\n * Creates a time slider for setting a start and end time, that can also run overnight\n * @param props takes times in seconds 0 - 86399 and a callback\n */\nfunction TimeSlider({\n startTime: propStartTime,\n endTime: propEndTime,\n onChange,\n isStartModified = false,\n isEndModified = false,\n 'data-testid': dataTestId,\n}: TimeSliderProps): JSX.Element {\n const [startTime, setStartTime] = useState(propStartTime);\n const [endTime, setEndTime] = useState(propEndTime);\n\n const track = useRef<HTMLDivElement>(null); // we need the track width while calulculating time from handle drag\n\n // updates state if props change\n useEffect(\n function setTimeOnPropTimeChange() {\n setStartTime(propStartTime);\n setEndTime(propEndTime);\n },\n [propStartTime, propEndTime]\n );\n\n const updateTime = useCallback(\n (newStartTime: number, newEndTime: number) => {\n let start = newStartTime;\n let end = newEndTime;\n if (start === end) {\n if (end < SECONDS_IN_DAY) {\n end += 1;\n } else {\n start -= 1;\n }\n }\n\n setStartTime(start);\n setEndTime(end);\n onChange({ startTime: start, endTime: end });\n },\n [setStartTime, setEndTime, onChange]\n );\n\n const handleStartTimeChange = useCallback(\n (newStartTime: number) => {\n updateTime(newStartTime, endTime);\n },\n [updateTime, endTime]\n );\n\n const handleEndTimeChange = useCallback(\n (newEndTime: number) => {\n updateTime(startTime, newEndTime);\n },\n [updateTime, startTime]\n );\n\n return (\n <div className=\"time-slider\" data-testid={dataTestId}>\n <PopOvers\n startTime={startTime}\n endTime={endTime}\n onStartTimeChange={handleStartTimeChange}\n onEndTimeChange={handleEndTimeChange}\n isStartModified={isStartModified}\n isEndModified={isEndModified}\n />\n <div className=\"track\" ref={track}>\n <TrackFills startTime={startTime} endTime={endTime} />\n <div className=\"ticks\">\n {Array(24)\n .fill(null)\n .map((value, index) => (\n <div className=\"tick\" key={index} />\n ))}\n </div>\n <Handle\n track={track}\n time={startTime}\n setTime={handleStartTimeChange}\n />\n <Handle track={track} time={endTime} setTime={handleEndTimeChange} />\n </div>\n\n <div className=\"tick-labels\">\n <div className=\"tick-label\">0:00</div>\n <div className=\"tick-label-wrapper\">\n {Array(24)\n .fill(null)\n .map((value, index) => (\n <div className=\"tick-label\" key={index}>{`${index + 1}:00`}</div>\n ))}\n </div>\n </div>\n </div>\n );\n}\n\ntype PopOversProps = {\n startTime: number;\n endTime: number;\n onStartTimeChange(time: number): void;\n onEndTimeChange(time: number): void;\n isStartModified: boolean;\n isEndModified: boolean;\n 'data-testid'?: string;\n};\n\nfunction PopOvers(props: PopOversProps): JSX.Element {\n const {\n startTime,\n endTime,\n onStartTimeChange,\n onEndTimeChange,\n isStartModified,\n isEndModified,\n 'data-testid': dataTestId,\n } = props;\n\n const swapTimes = startTime > endTime;\n\n const [firstTime, setFirstTime] = useState(swapTimes ? endTime : startTime);\n const [secondTime, setSecondTime] = useState(swapTimes ? startTime : endTime);\n const firstTimeRef = useRef<TimeInputElement>(null);\n const secondTimeRef = useRef<TimeInputElement>(null);\n // Keep track of selection in both time inputs\n const firstTimeSelectionRef = useRef<SelectionSegment | null>(null);\n const secondTimeSelectionRef = useRef<SelectionSegment | null>(null);\n\n useEffect(\n function setTimeOnPropTimeChange() {\n setFirstTime(startTime > endTime ? endTime : startTime);\n setSecondTime(startTime > endTime ? startTime : endTime);\n },\n [startTime, endTime]\n );\n\n useEffect(\n function setFocusOnSwapTimesChange() {\n if (firstTimeSelectionRef.current !== null) {\n secondTimeRef.current?.setSelection(firstTimeSelectionRef.current);\n }\n if (secondTimeSelectionRef.current !== null) {\n firstTimeRef.current?.setSelection(secondTimeSelectionRef.current);\n }\n },\n [swapTimes]\n );\n\n function onFirstTimeChange(value: number) {\n if (startTime <= endTime) {\n onStartTimeChange(value);\n } else {\n onEndTimeChange(value);\n }\n }\n\n function onSecondTimeChange(value: number) {\n if (startTime <= endTime) {\n onEndTimeChange(value);\n } else {\n onStartTimeChange(value);\n }\n }\n\n const onFirstTimeSelect = useCallback(selection => {\n firstTimeSelectionRef.current = selection;\n secondTimeSelectionRef.current = null;\n }, []);\n\n const onSecondTimeSelect = useCallback(selection => {\n firstTimeSelectionRef.current = null;\n secondTimeSelectionRef.current = selection;\n }, []);\n\n return (\n <div className=\"time-slider-popovers\">\n <div\n className=\"flex\"\n style={{\n flexBasis: `calc(${(firstTime / SECONDS_IN_DAY) * 100}% - ${\n POPOVER_WIDTH / 2\n }px)`,\n }}\n />\n <div className=\"handle-popper\">\n <label\n className={classNames({\n modified: swapTimes ? isEndModified : isStartModified,\n })}\n >\n {swapTimes ? 'End Time' : 'Start Time'}\n </label>\n <TimeInput\n ref={firstTimeRef}\n allowValueWrapping={false}\n value={firstTime}\n onChange={onFirstTimeChange}\n onSelect={onFirstTimeSelect}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-input-1` : undefined\n }\n />\n </div>\n <div className=\"flex-spacer\" />\n <div className=\"handle-popper\">\n <label\n className={classNames({\n modified: swapTimes ? isStartModified : isEndModified,\n })}\n >\n {swapTimes ? 'Start Time' : 'End Time'}\n </label>\n <TimeInput\n ref={secondTimeRef}\n allowValueWrapping={false}\n value={secondTime}\n onChange={onSecondTimeChange}\n onSelect={onSecondTimeSelect}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-input-2` : undefined\n }\n />\n </div>\n <div\n className=\"flex\"\n style={{\n flexBasis: `calc(${\n ((SECONDS_IN_DAY - secondTime) / SECONDS_IN_DAY) * 100\n }% - ${POPOVER_WIDTH / 2}px)`,\n }}\n />\n </div>\n );\n}\n\ntype TrackFillsProps = {\n startTime: number;\n endTime: number;\n 'data-testid'?: string;\n};\n\n/**\n * Shades the area between or outside of handles according to if start or endtime is greater.\n */\nfunction TrackFills(props: TrackFillsProps): JSX.Element {\n const { startTime, endTime, 'data-testid': dataTestId } = props;\n return (\n <div className=\"track-fills\" data-testid={dataTestId}>\n {startTime > endTime && (\n <>\n <div\n className=\"track-fill track-fill-start\"\n style={{ transform: `scaleX(${endTime / SECONDS_IN_DAY})` }}\n />\n <div\n className=\"track-fill track-fill-end\"\n style={{\n transform: `scaleX(${\n (SECONDS_IN_DAY - startTime) / SECONDS_IN_DAY\n })`,\n }}\n />\n </>\n )}\n {startTime < endTime && (\n <div\n className=\"track-fill track-fill-middle\"\n style={{\n transform: `translateX(${\n (startTime / SECONDS_IN_DAY) * 100\n }%) scaleX(${(endTime - startTime) / SECONDS_IN_DAY})`,\n }}\n />\n )}\n </div>\n );\n}\n\ntype HandleProps = {\n track: React.RefObject<HTMLDivElement>;\n time: number;\n setTime(time: number): void;\n 'data-testid'?: string;\n};\n\n/**\n * Creates a draggable handle the sets the time\n */\nfunction Handle(props: HandleProps): JSX.Element {\n const { track, time, setTime, 'data-testid': dataTestId } = props;\n\n /**\n * Takes the time and generate our translation string taking into account handle offset.\n * The handle offset changes for the first and last tick range dynmaically. Normally,\n * the center of the handle (size/2) is the selection origin, but at edges, it becomes either\n * end of the handle, requireing a relative offset range of 0 - 0.5, and 0.5 - 1 of handle size.\n * @param t time in seconds\n */\n const transform = useMemo(() => {\n const ONE_HOUR = 60 * 60;\n let handleOffset = HANDLE_SIZE / 2;\n if (time < ONE_HOUR) {\n handleOffset = (time / ONE_HOUR) * (HANDLE_SIZE / 2); // 0 - 0.5 Handle size\n } else if (time > 23 * ONE_HOUR) {\n handleOffset =\n HANDLE_SIZE / 2 +\n (1 / (SECONDS_IN_DAY - 23 * ONE_HOUR)) *\n (time - 23 * ONE_HOUR) *\n (HANDLE_SIZE / 2); // 0.5 - 1 Handle size\n }\n return `translateX(calc(${\n (time / SECONDS_IN_DAY) * 100\n }% - ${handleOffset}px))`;\n }, [time]);\n\n const calculatePositionAsTime = useCallback(\n (clientX: number) => {\n if (!track.current) {\n return 0;\n }\n const trackRect = track.current.getBoundingClientRect();\n const leftEdge = Math.max(clientX - trackRect.left, 0);\n // get position as 0-1 on slider and mulitply by seconds in a day to convert to time\n const preciseTime =\n SECONDS_IN_DAY * Math.min(1, leftEdge / trackRect.width);\n // snap to nearest N(5) minute interval\n const roundedTime =\n SNAP_NEAREST_MINUTES * Math.round(preciseTime / SNAP_NEAREST_MINUTES);\n // prevent over-rounding to 24:00:00\n const limitMax = Math.min(SECONDS_IN_DAY, roundedTime);\n return limitMax;\n },\n [track]\n );\n\n const handleMouseMove = useCallback(\n ({ clientX }: MouseEvent) => {\n setTime(calculatePositionAsTime(clientX));\n },\n [setTime, calculatePositionAsTime]\n );\n\n const handleMouseUp = useCallback(\n ({ clientX }: MouseEvent) => {\n setTime(calculatePositionAsTime(clientX));\n\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n document.documentElement.classList.remove('drag-pointer-events-none');\n },\n [setTime, calculatePositionAsTime, handleMouseMove]\n );\n\n const startDragListening = useCallback(() => {\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n document.documentElement.classList.add('drag-pointer-events-none');\n }, [handleMouseMove, handleMouseUp]);\n\n const stopDragListening = useCallback(() => {\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n document.documentElement.classList.remove('drag-pointer-events-none');\n }, [handleMouseMove, handleMouseUp]);\n\n const handleMouseDown = useCallback(() => {\n startDragListening();\n }, [startDragListening]);\n\n useEffect(\n function removeListenersOnUnmount() {\n return () => {\n stopDragListening();\n };\n },\n [stopDragListening]\n );\n\n return (\n <div className=\"handle-track\" style={{ transform }}>\n <button\n className=\"handle\"\n type=\"button\"\n aria-label=\"Change time\"\n onMouseDown={handleMouseDown}\n data-testid={dataTestId}\n />\n </div>\n );\n}\n\nexport default TimeSlider;\n"],"mappings":"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"}
@@ -5,6 +5,8 @@ import { vsClose } from '@deephaven/icons';
5
5
  import Button from "./Button.js";
6
6
  import ThemeExport from "./ThemeExport.js";
7
7
  import "./ToastNotification.css";
8
+ import { jsx as _jsx } from "react/jsx-runtime";
9
+ import { jsxs as _jsxs } from "react/jsx-runtime";
8
10
  function ToastNotification(_ref) {
9
11
  var {
10
12
  buttons,
@@ -17,37 +19,43 @@ function ToastNotification(_ref) {
17
19
  'data-testid': dataTestId
18
20
  } = _ref;
19
21
  var hasButtons = buttons && buttons.length !== 0;
20
- return /*#__PURE__*/React.createElement(CSSTransition, {
22
+ return /*#__PURE__*/_jsx(CSSTransition, {
21
23
  in: isShown,
22
24
  timeout: ThemeExport.transitionMs,
23
25
  classNames: "toast-notification-slide-up",
24
26
  mountOnEnter: true,
25
- unmountOnExit: true
26
- }, /*#__PURE__*/React.createElement("div", {
27
- className: classNames('toast-notification', classNamesProp, type),
28
- role: "presentation",
29
- onClick: onClick,
30
- onKeyPress: onClick,
31
- "data-testid": dataTestId
32
- }, /*#__PURE__*/React.createElement("div", {
33
- className: "message-container"
34
- }, /*#__PURE__*/React.createElement("span", {
35
- className: "message"
36
- }, message)), /*#__PURE__*/React.createElement(CSSTransition, {
37
- in: hasButtons,
38
- timeout: ThemeExport.transitionSlowMs,
39
- classNames: "fade",
40
- mountOnEnter: true,
41
- unmountOnExit: true
42
- }, /*#__PURE__*/React.createElement("div", {
43
- className: "buttons-container"
44
- }, buttons)), onDismiss && /*#__PURE__*/React.createElement(Button, {
45
- kind: "ghost",
46
- icon: vsClose,
47
- tooltip: "Close notification",
48
- className: "my-2",
49
- onClick: onDismiss
50
- })));
27
+ unmountOnExit: true,
28
+ children: /*#__PURE__*/_jsxs("div", {
29
+ className: classNames('toast-notification', classNamesProp, type),
30
+ role: "presentation",
31
+ onClick: onClick,
32
+ onKeyPress: onClick,
33
+ "data-testid": dataTestId,
34
+ children: [/*#__PURE__*/_jsx("div", {
35
+ className: "message-container",
36
+ children: /*#__PURE__*/_jsx("span", {
37
+ className: "message",
38
+ children: message
39
+ })
40
+ }), /*#__PURE__*/_jsx(CSSTransition, {
41
+ in: hasButtons,
42
+ timeout: ThemeExport.transitionSlowMs,
43
+ classNames: "fade",
44
+ mountOnEnter: true,
45
+ unmountOnExit: true,
46
+ children: /*#__PURE__*/_jsx("div", {
47
+ className: "buttons-container",
48
+ children: buttons
49
+ })
50
+ }), onDismiss && /*#__PURE__*/_jsx(Button, {
51
+ kind: "ghost",
52
+ icon: vsClose,
53
+ tooltip: "Close notification",
54
+ className: "my-2",
55
+ onClick: onDismiss
56
+ })]
57
+ })
58
+ });
51
59
  }
52
60
  ToastNotification.TYPE = Object.freeze({
53
61
  ERROR: 'error'
@@ -1 +1 @@
1
- {"version":3,"file":"ToastNotification.js","names":["React","classNames","CSSTransition","vsClose","Button","ThemeExport","ToastNotification","buttons","isShown","classNamesProp","message","type","onClick","onDismiss","dataTestId","hasButtons","length","transitionMs","transitionSlowMs","TYPE","Object","freeze","ERROR"],"sources":["../src/ToastNotification.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { vsClose } from '@deephaven/icons';\nimport Button from './Button';\nimport ThemeExport from './ThemeExport';\nimport './ToastNotification.scss';\n\ntype ToastNotificationProps = {\n buttons?: (typeof Button)[];\n classNames?: string;\n isShown?: boolean;\n message?: string;\n type?: string;\n 'data-testid'?: string;\n\n onClick?: React.EventHandler<\n React.MouseEvent<HTMLDivElement> | React.KeyboardEvent<HTMLDivElement>\n >;\n onDismiss?: React.MouseEventHandler<HTMLButtonElement>;\n};\n\nfunction ToastNotification({\n buttons,\n isShown = false,\n classNames: classNamesProp,\n message,\n type,\n onClick,\n onDismiss,\n 'data-testid': dataTestId,\n}: ToastNotificationProps): JSX.Element {\n const hasButtons = buttons && buttons.length !== 0;\n\n return (\n <CSSTransition\n in={isShown}\n timeout={ThemeExport.transitionMs}\n classNames=\"toast-notification-slide-up\"\n mountOnEnter\n unmountOnExit\n >\n <div\n className={classNames('toast-notification', classNamesProp, type)}\n role=\"presentation\"\n onClick={onClick}\n onKeyPress={onClick}\n data-testid={dataTestId}\n >\n <div className=\"message-container\">\n <span className=\"message\">{message}</span>\n </div>\n <CSSTransition\n in={hasButtons}\n timeout={ThemeExport.transitionSlowMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <div className=\"buttons-container\">{buttons}</div>\n </CSSTransition>\n {onDismiss && (\n <Button\n kind=\"ghost\"\n icon={vsClose}\n tooltip=\"Close notification\"\n className=\"my-2\"\n onClick={onDismiss}\n />\n )}\n </div>\n </CSSTransition>\n );\n}\n\nToastNotification.TYPE = Object.freeze({\n ERROR: 'error',\n});\n\nexport default ToastNotification;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,aAAa,QAAQ,wBAAwB;AACtD,SAASC,OAAO,QAAQ,kBAAkB;AAAC,OACpCC,MAAM;AAAA,OACNC,WAAW;AAAA;AAiBlB,SAASC,iBAAiB,OASc;EAAA,IATb;IACzBC,OAAO;IACPC,OAAO,GAAG,KAAK;IACfP,UAAU,EAAEQ,cAAc;IAC1BC,OAAO;IACPC,IAAI;IACJC,OAAO;IACPC,SAAS;IACT,aAAa,EAAEC;EACO,CAAC;EACvB,IAAMC,UAAU,GAAGR,OAAO,IAAIA,OAAO,CAACS,MAAM,KAAK,CAAC;EAElD,oBACE,oBAAC,aAAa;IACZ,EAAE,EAAER,OAAQ;IACZ,OAAO,EAAEH,WAAW,CAACY,YAAa;IAClC,UAAU,EAAC,6BAA6B;IACxC,YAAY;IACZ,aAAa;EAAA,gBAEb;IACE,SAAS,EAAEhB,UAAU,CAAC,oBAAoB,EAAEQ,cAAc,EAAEE,IAAI,CAAE;IAClE,IAAI,EAAC,cAAc;IACnB,OAAO,EAAEC,OAAQ;IACjB,UAAU,EAAEA,OAAQ;IACpB,eAAaE;EAAW,gBAExB;IAAK,SAAS,EAAC;EAAmB,gBAChC;IAAM,SAAS,EAAC;EAAS,GAAEJ,OAAO,CAAQ,CACtC,eACN,oBAAC,aAAa;IACZ,EAAE,EAAEK,UAAW;IACf,OAAO,EAAEV,WAAW,CAACa,gBAAiB;IACtC,UAAU,EAAC,MAAM;IACjB,YAAY;IACZ,aAAa;EAAA,gBAEb;IAAK,SAAS,EAAC;EAAmB,GAAEX,OAAO,CAAO,CACpC,EACfM,SAAS,iBACR,oBAAC,MAAM;IACL,IAAI,EAAC,OAAO;IACZ,IAAI,EAAEV,OAAQ;IACd,OAAO,EAAC,oBAAoB;IAC5B,SAAS,EAAC,MAAM;IAChB,OAAO,EAAEU;EAAU,EAEtB,CACG,CACQ;AAEpB;AAEAP,iBAAiB,CAACa,IAAI,GAAGC,MAAM,CAACC,MAAM,CAAC;EACrCC,KAAK,EAAE;AACT,CAAC,CAAC;AAEF,eAAehB,iBAAiB"}
1
+ {"version":3,"file":"ToastNotification.js","names":["React","classNames","CSSTransition","vsClose","Button","ThemeExport","ToastNotification","buttons","isShown","classNamesProp","message","type","onClick","onDismiss","dataTestId","hasButtons","length","transitionMs","transitionSlowMs","TYPE","Object","freeze","ERROR"],"sources":["../src/ToastNotification.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { vsClose } from '@deephaven/icons';\nimport Button from './Button';\nimport ThemeExport from './ThemeExport';\nimport './ToastNotification.scss';\n\ntype ToastNotificationProps = {\n buttons?: (typeof Button)[];\n classNames?: string;\n isShown?: boolean;\n message?: string;\n type?: string;\n 'data-testid'?: string;\n\n onClick?: React.EventHandler<\n React.MouseEvent<HTMLDivElement> | React.KeyboardEvent<HTMLDivElement>\n >;\n onDismiss?: React.MouseEventHandler<HTMLButtonElement>;\n};\n\nfunction ToastNotification({\n buttons,\n isShown = false,\n classNames: classNamesProp,\n message,\n type,\n onClick,\n onDismiss,\n 'data-testid': dataTestId,\n}: ToastNotificationProps): JSX.Element {\n const hasButtons = buttons && buttons.length !== 0;\n\n return (\n <CSSTransition\n in={isShown}\n timeout={ThemeExport.transitionMs}\n classNames=\"toast-notification-slide-up\"\n mountOnEnter\n unmountOnExit\n >\n <div\n className={classNames('toast-notification', classNamesProp, type)}\n role=\"presentation\"\n onClick={onClick}\n onKeyPress={onClick}\n data-testid={dataTestId}\n >\n <div className=\"message-container\">\n <span className=\"message\">{message}</span>\n </div>\n <CSSTransition\n in={hasButtons}\n timeout={ThemeExport.transitionSlowMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <div className=\"buttons-container\">{buttons}</div>\n </CSSTransition>\n {onDismiss && (\n <Button\n kind=\"ghost\"\n icon={vsClose}\n tooltip=\"Close notification\"\n className=\"my-2\"\n onClick={onDismiss}\n />\n )}\n </div>\n </CSSTransition>\n );\n}\n\nToastNotification.TYPE = Object.freeze({\n ERROR: 'error',\n});\n\nexport default ToastNotification;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,aAAa,QAAQ,wBAAwB;AACtD,SAASC,OAAO,QAAQ,kBAAkB;AAAC,OACpCC,MAAM;AAAA,OACNC,WAAW;AAAA;AAAA;AAAA;AAiBlB,SAASC,iBAAiB,OASc;EAAA,IATb;IACzBC,OAAO;IACPC,OAAO,GAAG,KAAK;IACfP,UAAU,EAAEQ,cAAc;IAC1BC,OAAO;IACPC,IAAI;IACJC,OAAO;IACPC,SAAS;IACT,aAAa,EAAEC;EACO,CAAC;EACvB,IAAMC,UAAU,GAAGR,OAAO,IAAIA,OAAO,CAACS,MAAM,KAAK,CAAC;EAElD,oBACE,KAAC,aAAa;IACZ,EAAE,EAAER,OAAQ;IACZ,OAAO,EAAEH,WAAW,CAACY,YAAa;IAClC,UAAU,EAAC,6BAA6B;IACxC,YAAY;IACZ,aAAa;IAAA,uBAEb;MACE,SAAS,EAAEhB,UAAU,CAAC,oBAAoB,EAAEQ,cAAc,EAAEE,IAAI,CAAE;MAClE,IAAI,EAAC,cAAc;MACnB,OAAO,EAAEC,OAAQ;MACjB,UAAU,EAAEA,OAAQ;MACpB,eAAaE,UAAW;MAAA,wBAExB;QAAK,SAAS,EAAC,mBAAmB;QAAA,uBAChC;UAAM,SAAS,EAAC,SAAS;UAAA,UAAEJ;QAAO;MAAQ,EACtC,eACN,KAAC,aAAa;QACZ,EAAE,EAAEK,UAAW;QACf,OAAO,EAAEV,WAAW,CAACa,gBAAiB;QACtC,UAAU,EAAC,MAAM;QACjB,YAAY;QACZ,aAAa;QAAA,uBAEb;UAAK,SAAS,EAAC,mBAAmB;UAAA,UAAEX;QAAO;MAAO,EACpC,EACfM,SAAS,iBACR,KAAC,MAAM;QACL,IAAI,EAAC,OAAO;QACZ,IAAI,EAAEV,OAAQ;QACd,OAAO,EAAC,oBAAoB;QAC5B,SAAS,EAAC,MAAM;QAChB,OAAO,EAAEU;MAAU,EAEtB;IAAA;EACG,EACQ;AAEpB;AAEAP,iBAAiB,CAACa,IAAI,GAAGC,MAAM,CAACC,MAAM,CAAC;EACrCC,KAAK,EAAE;AACT,CAAC,CAAC;AAEF,eAAehB,iBAAiB"}
package/dist/UISwitch.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import classNames from 'classnames';
3
3
  import "./UISwitch.css";
4
+ import { jsx as _jsx } from "react/jsx-runtime";
4
5
  function UISwitch(_ref) {
5
6
  var {
6
7
  on,
@@ -11,7 +12,7 @@ function UISwitch(_ref) {
11
12
  onClick,
12
13
  'data-testid': dataTestId
13
14
  } = _ref;
14
- return /*#__PURE__*/React.createElement("button", {
15
+ return /*#__PURE__*/_jsx("button", {
15
16
  type: "button",
16
17
  className: classNames('btn', 'btn-switch', className, {
17
18
  active: on
@@ -21,10 +22,11 @@ function UISwitch(_ref) {
21
22
  id: id,
22
23
  onClick: onClick,
23
24
  disabled: disabled,
24
- "data-testid": dataTestId
25
- }, /*#__PURE__*/React.createElement("div", {
26
- className: "handle"
27
- }));
25
+ "data-testid": dataTestId,
26
+ children: /*#__PURE__*/_jsx("div", {
27
+ className: "handle"
28
+ })
29
+ });
28
30
  }
29
31
  export default UISwitch;
30
32
  //# sourceMappingURL=UISwitch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UISwitch.js","names":["React","classNames","UISwitch","on","id","className","isInvalid","disabled","onClick","dataTestId","active"],"sources":["../src/UISwitch.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport './UISwitch.scss';\n\nexport type UISwitchProps = {\n on: boolean;\n onClick: React.MouseEventHandler<HTMLButtonElement>;\n id?: string;\n className?: string;\n isInvalid?: boolean;\n disabled?: boolean;\n 'data-testid'?: string;\n};\n\nfunction UISwitch({\n on,\n id,\n className,\n isInvalid,\n disabled = false,\n onClick,\n 'data-testid': dataTestId,\n}: UISwitchProps): JSX.Element {\n return (\n <button\n type=\"button\"\n className={classNames(\n 'btn',\n 'btn-switch',\n className,\n { active: on },\n { 'is-invalid': isInvalid }\n )}\n id={id}\n onClick={onClick}\n disabled={disabled}\n data-testid={dataTestId}\n >\n <div className=\"handle\" />\n </button>\n );\n}\n\nexport default UISwitch;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,UAAU,MAAM,YAAY;AAAC;AAapC,SAASC,QAAQ,OAQc;EAAA,IARb;IAChBC,EAAE;IACFC,EAAE;IACFC,SAAS;IACTC,SAAS;IACTC,QAAQ,GAAG,KAAK;IAChBC,OAAO;IACP,aAAa,EAAEC;EACF,CAAC;EACd,oBACE;IACE,IAAI,EAAC,QAAQ;IACb,SAAS,EAAER,UAAU,CACnB,KAAK,EACL,YAAY,EACZI,SAAS,EACT;MAAEK,MAAM,EAAEP;IAAG,CAAC,EACd;MAAE,YAAY,EAAEG;IAAU,CAAC,CAC3B;IACF,EAAE,EAAEF,EAAG;IACP,OAAO,EAAEI,OAAQ;IACjB,QAAQ,EAAED,QAAS;IACnB,eAAaE;EAAW,gBAExB;IAAK,SAAS,EAAC;EAAQ,EAAG,CACnB;AAEb;AAEA,eAAeP,QAAQ"}
1
+ {"version":3,"file":"UISwitch.js","names":["React","classNames","UISwitch","on","id","className","isInvalid","disabled","onClick","dataTestId","active"],"sources":["../src/UISwitch.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport './UISwitch.scss';\n\nexport type UISwitchProps = {\n on: boolean;\n onClick: React.MouseEventHandler<HTMLButtonElement>;\n id?: string;\n className?: string;\n isInvalid?: boolean;\n disabled?: boolean;\n 'data-testid'?: string;\n};\n\nfunction UISwitch({\n on,\n id,\n className,\n isInvalid,\n disabled = false,\n onClick,\n 'data-testid': dataTestId,\n}: UISwitchProps): JSX.Element {\n return (\n <button\n type=\"button\"\n className={classNames(\n 'btn',\n 'btn-switch',\n className,\n { active: on },\n { 'is-invalid': isInvalid }\n )}\n id={id}\n onClick={onClick}\n disabled={disabled}\n data-testid={dataTestId}\n >\n <div className=\"handle\" />\n </button>\n );\n}\n\nexport default UISwitch;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,UAAU,MAAM,YAAY;AAAC;AAAA;AAapC,SAASC,QAAQ,OAQc;EAAA,IARb;IAChBC,EAAE;IACFC,EAAE;IACFC,SAAS;IACTC,SAAS;IACTC,QAAQ,GAAG,KAAK;IAChBC,OAAO;IACP,aAAa,EAAEC;EACF,CAAC;EACd,oBACE;IACE,IAAI,EAAC,QAAQ;IACb,SAAS,EAAER,UAAU,CACnB,KAAK,EACL,YAAY,EACZI,SAAS,EACT;MAAEK,MAAM,EAAEP;IAAG,CAAC,EACd;MAAE,YAAY,EAAEG;IAAU,CAAC,CAC3B;IACF,EAAE,EAAEF,EAAG;IACP,OAAO,EAAEI,OAAQ;IACjB,QAAQ,EAAED,QAAS;IACnB,eAAaE,UAAW;IAAA,uBAExB;MAAK,SAAS,EAAC;IAAQ;EAAG,EACnB;AAEb;AAEA,eAAeP,QAAQ"}
@@ -2,6 +2,9 @@ import React, { useRef } from 'react';
2
2
  import classNames from 'classnames';
3
3
  import shortid from 'shortid';
4
4
  import "./ValidateLabelInput.css";
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ import { Fragment as _Fragment } from "react/jsx-runtime";
7
+ import { jsxs as _jsxs } from "react/jsx-runtime";
5
8
  /**
6
9
  * Takes a child and add a label and validaton error
7
10
  */
@@ -20,31 +23,37 @@ export function ValidateLabelInput(props) {
20
23
  var {
21
24
  current: id
22
25
  } = useRef(idProp !== null && idProp !== void 0 ? idProp : shortid());
23
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("label", {
24
- className: classNames('validate-label', className, {
25
- modified: isModified
26
- }),
27
- htmlFor: id,
28
- "data-testid": dataTestId
29
- }, labelText), React.Children.toArray(children).map(child => {
30
- if (! /*#__PURE__*/React.isValidElement(child)) {
31
- // eslint-disable-next-line react/jsx-key
32
- return /*#__PURE__*/React.createElement("div", {
33
- className: classNames(className)
34
- }, child);
35
- }
26
+ return /*#__PURE__*/_jsxs(_Fragment, {
27
+ children: [/*#__PURE__*/_jsx("label", {
28
+ className: classNames('validate-label', className, {
29
+ modified: isModified
30
+ }),
31
+ htmlFor: id,
32
+ "data-testid": dataTestId,
33
+ children: labelText
34
+ }), React.Children.toArray(children).map(child => {
35
+ if (! /*#__PURE__*/React.isValidElement(child)) {
36
+ // eslint-disable-next-line react/jsx-key
37
+ return /*#__PURE__*/_jsx("div", {
38
+ className: classNames(className),
39
+ children: child
40
+ });
41
+ }
36
42
 
37
- // toArray strips null children
38
- return /*#__PURE__*/React.cloneElement(child, {
39
- className: classNames(child.props.className, {
40
- 'is-invalid': validationError
41
- })
42
- });
43
- }), hintText !== undefined && /*#__PURE__*/React.createElement("small", {
44
- className: "form-text text-muted"
45
- }, hintText), validationError !== undefined && showValidationError && /*#__PURE__*/React.createElement("p", {
46
- className: "validate-label-error text-danger"
47
- }, validationError));
43
+ // toArray strips null children
44
+ return /*#__PURE__*/React.cloneElement(child, {
45
+ className: classNames(child.props.className, {
46
+ 'is-invalid': validationError
47
+ })
48
+ });
49
+ }), hintText !== undefined && /*#__PURE__*/_jsx("small", {
50
+ className: "form-text text-muted",
51
+ children: hintText
52
+ }), validationError !== undefined && showValidationError && /*#__PURE__*/_jsx("p", {
53
+ className: "validate-label-error text-danger",
54
+ children: validationError
55
+ })]
56
+ });
48
57
  }
49
58
  export default ValidateLabelInput;
50
59
  //# sourceMappingURL=ValidateLabelInput.js.map