@deephaven/components 1.22.1 → 1.22.2-alpha-pivot-builder.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.
- package/dist/AutoCompleteInput.js +41 -79
- package/dist/AutoCompleteInput.js.map +1 -1
- package/dist/AutoResizeTextarea.js +29 -13
- package/dist/AutoResizeTextarea.js.map +1 -1
- package/dist/BasicModal.js +17 -15
- package/dist/BasicModal.js.map +1 -1
- package/dist/BulkActionBar.js +3 -5
- package/dist/BulkActionBar.js.map +1 -1
- package/dist/Button.js +24 -25
- package/dist/Button.js.map +1 -1
- package/dist/CardFlip.js +4 -6
- package/dist/CardFlip.js.map +1 -1
- package/dist/Checkbox.js +22 -13
- package/dist/Checkbox.js.map +1 -1
- package/dist/Collapse.js +6 -9
- package/dist/Collapse.js.map +1 -1
- package/dist/CopyButton.js +14 -6
- package/dist/CopyButton.js.map +1 -1
- package/dist/CustomTimeSelect.js +49 -88
- package/dist/CustomTimeSelect.js.map +1 -1
- package/dist/DateInput.js +25 -10
- package/dist/DateInput.js.map +1 -1
- package/dist/DateInputUtils.js +1 -3
- package/dist/DateInputUtils.js.map +1 -1
- package/dist/DateTimeInput.js +28 -12
- package/dist/DateTimeInput.js.map +1 -1
- package/dist/DebouncedSearchInput.js +10 -19
- package/dist/DebouncedSearchInput.js.map +1 -1
- package/dist/DragUtils.js +15 -6
- package/dist/DragUtils.js.map +1 -1
- package/dist/DraggableItemList.js +42 -57
- package/dist/DraggableItemList.js.map +1 -1
- package/dist/EditableItemList.js +28 -13
- package/dist/EditableItemList.js.map +1 -1
- package/dist/ErrorBoundary.js +6 -11
- package/dist/ErrorBoundary.js.map +1 -1
- package/dist/ErrorView.js +20 -8
- package/dist/ErrorView.js.map +1 -1
- package/dist/HierarchicalCheckboxMenu.js +30 -28
- package/dist/HierarchicalCheckboxMenu.js.map +1 -1
- package/dist/ItemList.js +96 -168
- package/dist/ItemList.js.map +1 -1
- package/dist/ItemListItem.js +46 -60
- package/dist/ItemListItem.js.map +1 -1
- package/dist/LoadingOverlay.js +13 -9
- package/dist/LoadingOverlay.js.map +1 -1
- package/dist/LoadingSpinner.js +3 -4
- package/dist/LoadingSpinner.js.map +1 -1
- package/dist/MaskedInput.js +44 -41
- package/dist/MaskedInput.js.map +1 -1
- package/dist/MaskedInputUtils.js +1 -3
- package/dist/MaskedInputUtils.js.map +1 -1
- package/dist/Option.js +1 -3
- package/dist/Option.js.map +1 -1
- package/dist/RadioGroup.js +17 -9
- package/dist/RadioGroup.js.map +1 -1
- package/dist/RadioItem.js +25 -14
- package/dist/RadioItem.js.map +1 -1
- package/dist/RandomAreaPlotAnimation.js +17 -13
- package/dist/RandomAreaPlotAnimation.js.map +1 -1
- package/dist/SearchInput.js +13 -14
- package/dist/SearchInput.js.map +1 -1
- package/dist/SearchableCombobox.js +3 -5
- package/dist/SearchableCombobox.js.map +1 -1
- package/dist/Select.js +5 -7
- package/dist/Select.js.map +1 -1
- package/dist/SelectValueList.js +21 -30
- package/dist/SelectValueList.js.map +1 -1
- package/dist/SocketedButton.js +18 -17
- package/dist/SocketedButton.js.map +1 -1
- package/dist/SplitButtonGroup.js +4 -6
- package/dist/SplitButtonGroup.js.map +1 -1
- package/dist/TableViewEmptyState.js +14 -6
- package/dist/TableViewEmptyState.js.map +1 -1
- package/dist/TextWithTooltip.js +3 -4
- package/dist/TextWithTooltip.js.map +1 -1
- package/dist/TimeInput.js +29 -12
- package/dist/TimeInput.js.map +1 -1
- package/dist/TimeSlider.js +46 -38
- package/dist/TimeSlider.js.map +1 -1
- package/dist/ToastNotification.js +9 -10
- package/dist/ToastNotification.js.map +1 -1
- package/dist/UISwitch.js +8 -9
- package/dist/UISwitch.js.map +1 -1
- package/dist/actions/ConfirmActionButton.js +7 -9
- package/dist/actions/ConfirmActionButton.js.map +1 -1
- package/dist/actions/IconActionButton.js +3 -5
- package/dist/actions/IconActionButton.js.map +1 -1
- package/dist/context-actions/ContextActionUtils.js +1 -3
- package/dist/context-actions/ContextActionUtils.js.map +1 -1
- package/dist/context-actions/ContextActions.js +8 -18
- package/dist/context-actions/ContextActions.js.map +1 -1
- package/dist/context-actions/ContextMenu.js +53 -89
- package/dist/context-actions/ContextMenu.js.map +1 -1
- package/dist/context-actions/ContextMenuItem.js +11 -11
- package/dist/context-actions/ContextMenuItem.js.map +1 -1
- package/dist/context-actions/ContextMenuRoot.js +6 -11
- package/dist/context-actions/ContextMenuRoot.js.map +1 -1
- package/dist/context-actions/GlobalContextAction.js +2 -6
- package/dist/context-actions/GlobalContextAction.js.map +1 -1
- package/dist/context-actions/GlobalContextActions.js +4 -7
- package/dist/context-actions/GlobalContextActions.js.map +1 -1
- package/dist/dialogs/ActionButtonDialogTrigger.js +7 -9
- package/dist/dialogs/ActionButtonDialogTrigger.js.map +1 -1
- package/dist/dialogs/ConfirmationDialog.js +8 -11
- package/dist/dialogs/ConfirmationDialog.js.map +1 -1
- package/dist/menu-actions/DropdownMenu.js +12 -22
- package/dist/menu-actions/DropdownMenu.js.map +1 -1
- package/dist/menu-actions/Menu.js +19 -45
- package/dist/menu-actions/Menu.js.map +1 -1
- package/dist/modal/DebouncedModal.js +8 -9
- package/dist/modal/DebouncedModal.js.map +1 -1
- package/dist/modal/InfoModal.js +6 -7
- package/dist/modal/InfoModal.js.map +1 -1
- package/dist/modal/Modal.js +27 -15
- package/dist/modal/Modal.js.map +1 -1
- package/dist/modal/ModalBody.js +4 -6
- package/dist/modal/ModalBody.js.map +1 -1
- package/dist/modal/ModalFooter.js +3 -5
- package/dist/modal/ModalFooter.js.map +1 -1
- package/dist/modal/ModalHeader.js +7 -8
- package/dist/modal/ModalHeader.js.map +1 -1
- package/dist/navigation/DashboardList.js +17 -6
- package/dist/navigation/DashboardList.js.map +1 -1
- package/dist/navigation/Menu.js +4 -5
- package/dist/navigation/Menu.js.map +1 -1
- package/dist/navigation/MenuItem.js +7 -10
- package/dist/navigation/MenuItem.js.map +1 -1
- package/dist/navigation/NavTab.js +14 -17
- package/dist/navigation/NavTab.js.map +1 -1
- package/dist/navigation/NavTabList.js +39 -33
- package/dist/navigation/NavTabList.js.map +1 -1
- package/dist/navigation/Page.js +5 -7
- package/dist/navigation/Page.js.map +1 -1
- package/dist/navigation/Stack.js +20 -7
- package/dist/navigation/Stack.js.map +1 -1
- package/dist/popper/Popper.js +30 -57
- package/dist/popper/Popper.js.map +1 -1
- package/dist/popper/Tooltip.js +24 -54
- package/dist/popper/Tooltip.js.map +1 -1
- package/dist/shortcuts/Shortcut.js +10 -15
- package/dist/shortcuts/Shortcut.js.map +1 -1
- package/dist/shortcuts/ShortcutRegistry.js +1 -3
- package/dist/shortcuts/ShortcutRegistry.js.map +1 -1
- package/dist/spectrum/ActionGroup.js +7 -9
- package/dist/spectrum/ActionGroup.js.map +1 -1
- package/dist/spectrum/ActionMenu.js +3 -5
- package/dist/spectrum/ActionMenu.js.map +1 -1
- package/dist/spectrum/CheckboxGroup.js +1 -3
- package/dist/spectrum/CheckboxGroup.js.map +1 -1
- package/dist/spectrum/Heading.js +2 -4
- package/dist/spectrum/Heading.js.map +1 -1
- package/dist/spectrum/ItemContent.js +16 -10
- package/dist/spectrum/ItemContent.js.map +1 -1
- package/dist/spectrum/ItemTooltip.js +2 -4
- package/dist/spectrum/ItemTooltip.js.map +1 -1
- package/dist/spectrum/TabPanels.js +3 -4
- package/dist/spectrum/TabPanels.js.map +1 -1
- package/dist/spectrum/Text.js +2 -4
- package/dist/spectrum/Text.js.map +1 -1
- package/dist/spectrum/View.js +11 -14
- package/dist/spectrum/View.js.map +1 -1
- package/dist/spectrum/comboBox/ComboBox.js +5 -9
- package/dist/spectrum/comboBox/ComboBox.js.map +1 -1
- package/dist/spectrum/comboBox/ComboBoxNormalized.js +3 -7
- package/dist/spectrum/comboBox/ComboBoxNormalized.js.map +1 -1
- package/dist/spectrum/listView/ListView.js +11 -11
- package/dist/spectrum/listView/ListView.js.map +1 -1
- package/dist/spectrum/listView/ListViewNormalized.js +22 -24
- package/dist/spectrum/listView/ListViewNormalized.js.map +1 -1
- package/dist/spectrum/listView/ListViewWrapper.js +11 -15
- package/dist/spectrum/listView/ListViewWrapper.js.map +1 -1
- package/dist/spectrum/multiSelect/MultiSelect.js +113 -100
- package/dist/spectrum/multiSelect/MultiSelect.js.map +1 -1
- package/dist/spectrum/multiSelect/MultiSelectListBox.js +9 -11
- package/dist/spectrum/multiSelect/MultiSelectListBox.js.map +1 -1
- package/dist/spectrum/multiSelect/MultiSelectNormalized.js +3 -7
- package/dist/spectrum/multiSelect/MultiSelectNormalized.js.map +1 -1
- package/dist/spectrum/multiSelect/MultiSelectTag.js +5 -7
- package/dist/spectrum/multiSelect/MultiSelectTag.js.map +1 -1
- package/dist/spectrum/multiSelect/useMultiSelectFilter.js +20 -14
- package/dist/spectrum/multiSelect/useMultiSelectFilter.js.map +1 -1
- package/dist/spectrum/multiSelect/useMultiSelectKeyboard.js +27 -20
- package/dist/spectrum/multiSelect/useMultiSelectKeyboard.js.map +1 -1
- package/dist/spectrum/multiSelect/useMultiSelectLoadingSpinner.js +14 -7
- package/dist/spectrum/multiSelect/useMultiSelectLoadingSpinner.js.map +1 -1
- package/dist/spectrum/multiSelect/useMultiSelectNormalizedProps.js +20 -22
- package/dist/spectrum/multiSelect/useMultiSelectNormalizedProps.js.map +1 -1
- package/dist/spectrum/multiSelect/useMultiSelectScrollListener.js +13 -6
- package/dist/spectrum/multiSelect/useMultiSelectScrollListener.js.map +1 -1
- package/dist/spectrum/multiSelect/useMultiSelectState.js +16 -9
- package/dist/spectrum/multiSelect/useMultiSelectState.js.map +1 -1
- package/dist/spectrum/picker/Picker.js +5 -9
- package/dist/spectrum/picker/Picker.js.map +1 -1
- package/dist/spectrum/picker/PickerNormalized.js +2 -6
- package/dist/spectrum/picker/PickerNormalized.js.map +1 -1
- package/dist/spectrum/picker/usePickerItemScale.js +2 -3
- package/dist/spectrum/picker/usePickerItemScale.js.map +1 -1
- package/dist/spectrum/picker/usePickerNormalizedProps.js +31 -33
- package/dist/spectrum/picker/usePickerNormalizedProps.js.map +1 -1
- package/dist/spectrum/picker/usePickerProps.js +26 -29
- package/dist/spectrum/picker/usePickerProps.js.map +1 -1
- package/dist/spectrum/picker/usePickerScrollOnOpen.js +6 -9
- package/dist/spectrum/picker/usePickerScrollOnOpen.js.map +1 -1
- package/dist/spectrum/utils/itemUtils.js +4 -6
- package/dist/spectrum/utils/itemUtils.js.map +1 -1
- package/dist/spectrum/utils/propsUtils.js +35 -37
- package/dist/spectrum/utils/propsUtils.js.map +1 -1
- package/dist/spectrum/utils/themeUtils.js +5 -7
- package/dist/spectrum/utils/themeUtils.js.map +1 -1
- package/dist/spectrum/utils/useOnChangeTrackUncontrolled.js +13 -6
- package/dist/spectrum/utils/useOnChangeTrackUncontrolled.js.map +1 -1
- package/dist/spectrum/utils/useRenderNormalizedItem.js +5 -7
- package/dist/spectrum/utils/useRenderNormalizedItem.js.map +1 -1
- package/dist/spectrum/utils/useStaticItemInitialScrollPosition.js +4 -6
- package/dist/spectrum/utils/useStaticItemInitialScrollPosition.js.map +1 -1
- package/dist/spectrum/utils/useStringifiedMultiSelection.js +5 -7
- package/dist/spectrum/utils/useStringifiedMultiSelection.js.map +1 -1
- package/dist/spectrum/utils/useStringifiedSelection.js +5 -7
- package/dist/spectrum/utils/useStringifiedSelection.js.map +1 -1
- package/dist/theme/FontBootstrap.js +13 -5
- package/dist/theme/FontBootstrap.js.map +1 -1
- package/dist/theme/FontsLoaded.js +1 -3
- package/dist/theme/FontsLoaded.js.map +1 -1
- package/dist/theme/Logo.js +2 -4
- package/dist/theme/Logo.js.map +1 -1
- package/dist/theme/SpectrumThemeProvider.js +17 -9
- package/dist/theme/SpectrumThemeProvider.js.map +1 -1
- package/dist/theme/ThemePicker.js +4 -5
- package/dist/theme/ThemePicker.js.map +1 -1
- package/dist/theme/ThemeProvider.js +20 -8
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/dist/theme/ThemeUtils.js +35 -19
- package/dist/theme/ThemeUtils.js.map +1 -1
- package/dist/theme/useExternalTheme.js +16 -7
- package/dist/theme/useExternalTheme.js.map +1 -1
- package/dist/transitions/FadeTransition.js +5 -6
- package/dist/transitions/FadeTransition.js.map +1 -1
- package/dist/transitions/SlideTransition.js +6 -7
- package/dist/transitions/SlideTransition.js.map +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextWithTooltip.js","names":["useMemo","Text","stylesCommon","Tooltip","Fragment","_Fragment","jsx","_jsx","jsxs","_jsxs","TextWithTooltip","_ref","text","placement","options","children","UNSAFE_className","spectrumEllipsis"],"sources":["../src/TextWithTooltip.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { Text } from './spectrum';\nimport stylesCommon from './SpectrumComponent.module.scss';\nimport { type PopperOptions, Tooltip } from './popper';\n\nexport interface TextWithTooltipProps {\n text?: string | null;\n placement?: PopperOptions['placement'];\n}\n\nexport function TextWithTooltip({\n text,\n placement = 'top-start',\n}: TextWithTooltipProps): JSX.Element {\n const options = useMemo(() => ({ placement }), [placement]);\n\n return (\n <>\n <Text UNSAFE_className={stylesCommon.spectrumEllipsis}>\n {text ?? (\n /* so that height doesn't collapse when empty */\n <> </>\n )}\n </Text>\n {text == null || text === '' ? null : (\n <Tooltip options={options}>{text}</Tooltip>\n )}\n </>\n );\n}\n\nexport default TextWithTooltip;\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,OAAO;AAAC,SACvBC,IAAI;AAAA,OACNC,YAAY;AAAA,SACUC,OAAO;AAAA,SAAAC,QAAA,IAAAC,SAAA,EAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAOpC,OAAO,SAASC,eAAeA,CAAAC,IAAA,EAGO;EAAA,
|
|
1
|
+
{"version":3,"file":"TextWithTooltip.js","names":["useMemo","Text","stylesCommon","Tooltip","Fragment","_Fragment","jsx","_jsx","jsxs","_jsxs","TextWithTooltip","_ref","text","_ref$placement","placement","options","children","UNSAFE_className","spectrumEllipsis"],"sources":["../src/TextWithTooltip.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { Text } from './spectrum';\nimport stylesCommon from './SpectrumComponent.module.scss';\nimport { type PopperOptions, Tooltip } from './popper';\n\nexport interface TextWithTooltipProps {\n text?: string | null;\n placement?: PopperOptions['placement'];\n}\n\nexport function TextWithTooltip({\n text,\n placement = 'top-start',\n}: TextWithTooltipProps): JSX.Element {\n const options = useMemo(() => ({ placement }), [placement]);\n\n return (\n <>\n <Text UNSAFE_className={stylesCommon.spectrumEllipsis}>\n {text ?? (\n /* so that height doesn't collapse when empty */\n <> </>\n )}\n </Text>\n {text == null || text === '' ? null : (\n <Tooltip options={options}>{text}</Tooltip>\n )}\n </>\n );\n}\n\nexport default TextWithTooltip;\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,OAAO;AAAC,SACvBC,IAAI;AAAA,OACNC,YAAY;AAAA,SACUC,OAAO;AAAA,SAAAC,QAAA,IAAAC,SAAA,EAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAOpC,OAAO,SAASC,eAAeA,CAAAC,IAAA,EAGO;EAAA,IAFpCC,IAAI,GAAAD,IAAA,CAAJC,IAAI;IAAAC,cAAA,GAAAF,IAAA,CACJG,SAAS;IAATA,SAAS,GAAAD,cAAA,cAAG,WAAW,GAAAA,cAAA;EAEvB,IAAME,OAAO,GAAGf,OAAO,CAAC,OAAO;IAAEc;EAAU,CAAC,CAAC,EAAE,CAACA,SAAS,CAAC,CAAC;EAE3D,oBACEL,KAAA,CAAAJ,SAAA;IAAAW,QAAA,gBACET,IAAA,CAACN,IAAI;MAACgB,gBAAgB,EAAEf,YAAY,CAACgB,gBAAiB;MAAAF,QAAA,EACnDJ,IAAI,aAAJA,IAAI,cAAJA,IAAI;MAAA;MACH;MACAL,IAAA,CAAAF,SAAA;QAAAW,QAAA,EAAE;MAAM,CAAE;IAAC,CAET,CAAC,EACNJ,IAAI,IAAI,IAAI,IAAIA,IAAI,KAAK,EAAE,GAAG,IAAI,gBACjCL,IAAA,CAACJ,OAAO;MAACY,OAAO,EAAEA,OAAQ;MAAAC,QAAA,EAAEJ;IAAI,CAAU,CAC3C;EAAA,CACD,CAAC;AAEP;AAEA,eAAeF,eAAe","ignoreList":[]}
|
package/dist/TimeInput.js
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
1
7
|
import React, { useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react';
|
|
2
8
|
import Log from '@deephaven/log';
|
|
3
9
|
import { EMPTY_FUNCTION, TimeUtils } from '@deephaven/utils';
|
|
@@ -19,19 +25,30 @@ function fixIncompleteValue(value) {
|
|
|
19
25
|
// https://github.com/yannickcr/eslint-plugin-react/issues/2269
|
|
20
26
|
// eslint-disable-next-line react/display-name
|
|
21
27
|
var TimeInput = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
22
|
-
var
|
|
23
|
-
allowValueWrapping = true,
|
|
24
|
-
className =
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
var _props$allowValueWrap = props.allowValueWrapping,
|
|
29
|
+
allowValueWrapping = _props$allowValueWrap === void 0 ? true : _props$allowValueWrap,
|
|
30
|
+
_props$className = props.className,
|
|
31
|
+
className = _props$className === void 0 ? '' : _props$className,
|
|
32
|
+
_props$onChange = props.onChange,
|
|
33
|
+
onChange = _props$onChange === void 0 ? EMPTY_FUNCTION : _props$onChange,
|
|
34
|
+
_props$value = props.value,
|
|
35
|
+
propsValue = _props$value === void 0 ? 0 : _props$value,
|
|
36
|
+
_props$onFocus = props.onFocus,
|
|
37
|
+
onFocus = _props$onFocus === void 0 ? EMPTY_FUNCTION : _props$onFocus,
|
|
38
|
+
_props$onBlur = props.onBlur,
|
|
39
|
+
onBlur = _props$onBlur === void 0 ? EMPTY_FUNCTION : _props$onBlur,
|
|
40
|
+
_props$onSelect = props.onSelect,
|
|
41
|
+
onSelect = _props$onSelect === void 0 ? EMPTY_FUNCTION : _props$onSelect,
|
|
42
|
+
dataTestId = props['data-testid'];
|
|
43
|
+
var _useState = useState(TimeUtils.formatTime(propsValue)),
|
|
44
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
45
|
+
value = _useState2[0],
|
|
46
|
+
setValue = _useState2[1];
|
|
33
47
|
var parsedValueRef = useRef(propsValue);
|
|
34
|
-
var
|
|
48
|
+
var _useState3 = useState(),
|
|
49
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
50
|
+
selection = _useState4[0],
|
|
51
|
+
_setSelection = _useState4[1];
|
|
35
52
|
var inputRef = useRef(null);
|
|
36
53
|
useImperativeHandle(ref, () => ({
|
|
37
54
|
focus: () => {
|
package/dist/TimeInput.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimeInput.js","names":["React","useCallback","useEffect","useImperativeHandle","useRef","useState","Log","EMPTY_FUNCTION","TimeUtils","MaskedInput","DEFAULT_GET_PREFERRED_REPLACEMENT_STRING","jsx","_jsx","log","module","TIME_PATTERN","EXAMPLES","fixIncompleteValue","value","concat","substring","replace","length","TimeInput","forwardRef","props","ref","allowValueWrapping","className","onChange","propsValue","onFocus","onBlur","onSelect","dataTestId","setValue","formatTime","parsedValueRef","selection","setSelection","inputRef","focus","_inputRef$current","current","newSelection","_inputRef$current2","setFormattedTime","getNextSegmentValue","range","delta","segmentValue","maxValue","selectionStart","newSegmentValue","parseInt","Number","isNaN","Math","min","max","padStart","getPreferredReplacementString","replaceValue","replaceIndex","newChar","selectionEnd","handleChange","newValue","debug","parseTime","handleBlur","fixedValue","handleSelect","example","pattern"],"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 { EMPTY_FUNCTION, TimeUtils } from '@deephaven/utils';\nimport MaskedInput, { type 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\nfunction fixIncompleteValue(value: string): string {\n // If value is not a complete HH:mm:ss time, fill missing parts with 0\n if (value != null) {\n return `${value\n .substring(0, 8)\n .replace(/\\u2007/g, '0')}${`00:00:00`.substring(value.length)}`;\n }\n return value;\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 = EMPTY_FUNCTION,\n value: propsValue = 0,\n onFocus = EMPTY_FUNCTION,\n onBlur = EMPTY_FUNCTION,\n onSelect = EMPTY_FUNCTION,\n 'data-testid': dataTestId,\n } = props;\n const [value, setValue] = useState(TimeUtils.formatTime(propsValue));\n const parsedValueRef = useRef<number>(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 // Ignore value prop update if it matches the displayed value\n // to preserve the displayed value while typing\n if (parsedValueRef.current !== propsValue) {\n setValue(TimeUtils.formatTime(propsValue));\n parsedValueRef.current = propsValue;\n }\n },\n [parsedValueRef, 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 ): string {\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 const handleChange = useCallback(\n (newValue: string): void => {\n log.debug('handleChange', newValue);\n setValue(newValue);\n parsedValueRef.current = TimeUtils.parseTime(\n fixIncompleteValue(newValue)\n );\n onChange(parsedValueRef.current);\n },\n [onChange]\n );\n\n const handleBlur = useCallback((): void => {\n const fixedValue = fixIncompleteValue(value);\n // Update the value displayed in the input\n // onChange with the fixed value already triggered in handleChange\n if (fixedValue !== value) {\n setValue(fixedValue);\n }\n onBlur();\n }, [value, onBlur]);\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={handleBlur}\n data-testid={dataTestId}\n />\n );\n }\n);\n\nexport default TimeInput;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"TimeInput.js","names":["React","useCallback","useEffect","useImperativeHandle","useRef","useState","Log","EMPTY_FUNCTION","TimeUtils","MaskedInput","DEFAULT_GET_PREFERRED_REPLACEMENT_STRING","jsx","_jsx","log","module","TIME_PATTERN","EXAMPLES","fixIncompleteValue","value","concat","substring","replace","length","TimeInput","forwardRef","props","ref","_props$allowValueWrap","allowValueWrapping","_props$className","className","_props$onChange","onChange","_props$value","propsValue","_props$onFocus","onFocus","_props$onBlur","onBlur","_props$onSelect","onSelect","dataTestId","_useState","formatTime","_useState2","_slicedToArray","setValue","parsedValueRef","_useState3","_useState4","selection","setSelection","inputRef","focus","_inputRef$current","current","newSelection","_inputRef$current2","setFormattedTime","getNextSegmentValue","range","delta","segmentValue","maxValue","selectionStart","newSegmentValue","parseInt","Number","isNaN","Math","min","max","padStart","getPreferredReplacementString","replaceValue","replaceIndex","newChar","selectionEnd","handleChange","newValue","debug","parseTime","handleBlur","fixedValue","handleSelect","example","pattern"],"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 { EMPTY_FUNCTION, TimeUtils } from '@deephaven/utils';\nimport MaskedInput, { type 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\nfunction fixIncompleteValue(value: string): string {\n // If value is not a complete HH:mm:ss time, fill missing parts with 0\n if (value != null) {\n return `${value\n .substring(0, 8)\n .replace(/\\u2007/g, '0')}${`00:00:00`.substring(value.length)}`;\n }\n return value;\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 = EMPTY_FUNCTION,\n value: propsValue = 0,\n onFocus = EMPTY_FUNCTION,\n onBlur = EMPTY_FUNCTION,\n onSelect = EMPTY_FUNCTION,\n 'data-testid': dataTestId,\n } = props;\n const [value, setValue] = useState(TimeUtils.formatTime(propsValue));\n const parsedValueRef = useRef<number>(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 // Ignore value prop update if it matches the displayed value\n // to preserve the displayed value while typing\n if (parsedValueRef.current !== propsValue) {\n setValue(TimeUtils.formatTime(propsValue));\n parsedValueRef.current = propsValue;\n }\n },\n [parsedValueRef, 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 ): string {\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 const handleChange = useCallback(\n (newValue: string): void => {\n log.debug('handleChange', newValue);\n setValue(newValue);\n parsedValueRef.current = TimeUtils.parseTime(\n fixIncompleteValue(newValue)\n );\n onChange(parsedValueRef.current);\n },\n [onChange]\n );\n\n const handleBlur = useCallback((): void => {\n const fixedValue = fixIncompleteValue(value);\n // Update the value displayed in the input\n // onChange with the fixed value already triggered in handleChange\n if (fixedValue !== value) {\n setValue(fixedValue);\n }\n onBlur();\n }, [value, onBlur]);\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={handleBlur}\n data-testid={dataTestId}\n />\n );\n }\n);\n\nexport default TimeInput;\n"],"mappings":"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","ignoreList":[]}
|
package/dist/TimeSlider.js
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
1
7
|
/* eslint-disable react/no-array-index-key */
|
|
2
8
|
// array maps being used are static, this is fine.
|
|
3
9
|
|
|
@@ -17,16 +23,22 @@ var SNAP_NEAREST_MINUTES = 5 * 60; // rounds in 5 minute intervals
|
|
|
17
23
|
* @param props takes times in seconds 0 - 86399 and a callback
|
|
18
24
|
*/
|
|
19
25
|
function TimeSlider(_ref) {
|
|
20
|
-
var
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
isStartModified = false,
|
|
25
|
-
isEndModified =
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
var
|
|
29
|
-
|
|
26
|
+
var propStartTime = _ref.startTime,
|
|
27
|
+
propEndTime = _ref.endTime,
|
|
28
|
+
onChange = _ref.onChange,
|
|
29
|
+
_ref$isStartModified = _ref.isStartModified,
|
|
30
|
+
isStartModified = _ref$isStartModified === void 0 ? false : _ref$isStartModified,
|
|
31
|
+
_ref$isEndModified = _ref.isEndModified,
|
|
32
|
+
isEndModified = _ref$isEndModified === void 0 ? false : _ref$isEndModified,
|
|
33
|
+
dataTestId = _ref['data-testid'];
|
|
34
|
+
var _useState = useState(propStartTime),
|
|
35
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
36
|
+
startTime = _useState2[0],
|
|
37
|
+
setStartTime = _useState2[1];
|
|
38
|
+
var _useState3 = useState(propEndTime),
|
|
39
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
40
|
+
endTime = _useState4[0],
|
|
41
|
+
setEndTime = _useState4[1];
|
|
30
42
|
var track = useRef(null); // we need the track width while calulculating time from handle drag
|
|
31
43
|
|
|
32
44
|
// updates state if props change
|
|
@@ -103,18 +115,22 @@ function TimeSlider(_ref) {
|
|
|
103
115
|
});
|
|
104
116
|
}
|
|
105
117
|
function PopOvers(props) {
|
|
106
|
-
var
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
'data-testid': dataTestId
|
|
114
|
-
} = props;
|
|
118
|
+
var startTime = props.startTime,
|
|
119
|
+
endTime = props.endTime,
|
|
120
|
+
onStartTimeChange = props.onStartTimeChange,
|
|
121
|
+
onEndTimeChange = props.onEndTimeChange,
|
|
122
|
+
isStartModified = props.isStartModified,
|
|
123
|
+
isEndModified = props.isEndModified,
|
|
124
|
+
dataTestId = props['data-testid'];
|
|
115
125
|
var swapTimes = startTime > endTime;
|
|
116
|
-
var
|
|
117
|
-
|
|
126
|
+
var _useState5 = useState(swapTimes ? endTime : startTime),
|
|
127
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
128
|
+
firstTime = _useState6[0],
|
|
129
|
+
setFirstTime = _useState6[1];
|
|
130
|
+
var _useState7 = useState(swapTimes ? startTime : endTime),
|
|
131
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
132
|
+
secondTime = _useState8[0],
|
|
133
|
+
setSecondTime = _useState8[1];
|
|
118
134
|
var firstTimeRef = useRef(null);
|
|
119
135
|
var secondTimeRef = useRef(null);
|
|
120
136
|
// Keep track of selection in both time inputs
|
|
@@ -207,11 +223,9 @@ function PopOvers(props) {
|
|
|
207
223
|
* Shades the area between or outside of handles according to if start or endtime is greater.
|
|
208
224
|
*/
|
|
209
225
|
function TrackFills(props) {
|
|
210
|
-
var
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
'data-testid': dataTestId
|
|
214
|
-
} = props;
|
|
226
|
+
var startTime = props.startTime,
|
|
227
|
+
endTime = props.endTime,
|
|
228
|
+
dataTestId = props['data-testid'];
|
|
215
229
|
return /*#__PURE__*/_jsxs("div", {
|
|
216
230
|
className: "track-fills",
|
|
217
231
|
"data-testid": dataTestId,
|
|
@@ -239,12 +253,10 @@ function TrackFills(props) {
|
|
|
239
253
|
* Creates a draggable handle the sets the time
|
|
240
254
|
*/
|
|
241
255
|
function Handle(props) {
|
|
242
|
-
var
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
'data-testid': dataTestId
|
|
247
|
-
} = props;
|
|
256
|
+
var track = props.track,
|
|
257
|
+
time = props.time,
|
|
258
|
+
setTime = props.setTime,
|
|
259
|
+
dataTestId = props['data-testid'];
|
|
248
260
|
|
|
249
261
|
/**
|
|
250
262
|
* Takes the time and generate our translation string taking into account handle offset.
|
|
@@ -278,15 +290,11 @@ function Handle(props) {
|
|
|
278
290
|
return limitMax;
|
|
279
291
|
}, [track]);
|
|
280
292
|
var handleMouseMove = useCallback(_ref2 => {
|
|
281
|
-
var
|
|
282
|
-
clientX
|
|
283
|
-
} = _ref2;
|
|
293
|
+
var clientX = _ref2.clientX;
|
|
284
294
|
setTime(calculatePositionAsTime(clientX));
|
|
285
295
|
}, [setTime, calculatePositionAsTime]);
|
|
286
296
|
var handleMouseUp = useCallback(_ref3 => {
|
|
287
|
-
var
|
|
288
|
-
clientX
|
|
289
|
-
} = _ref3;
|
|
297
|
+
var clientX = _ref3.clientX;
|
|
290
298
|
setTime(calculatePositionAsTime(clientX));
|
|
291
299
|
window.removeEventListener('mousemove', handleMouseMove);
|
|
292
300
|
window.removeEventListener('mouseup', handleMouseUp);
|
package/dist/TimeSlider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimeSlider.js","names":["React","useCallback","useMemo","useRef","useState","useEffect","classNames","TimeInput","StyleExports","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","HANDLE_SIZE","parseInt","POPOVER_WIDTH","SECONDS_IN_DAY","SNAP_NEAREST_MINUTES","TimeSlider","_ref","startTime","propStartTime","endTime","propEndTime","onChange","isStartModified","isEndModified","dataTestId","setStartTime","setEndTime","track","setTimeOnPropTimeChange","updateTime","newStartTime","newEndTime","start","end","handleStartTimeChange","handleEndTimeChange","className","children","PopOvers","onStartTimeChange","onEndTimeChange","ref","TrackFills","Array","fill","map","value","index","Handle","time","setTime","concat","props","swapTimes","firstTime","setFirstTime","secondTime","setSecondTime","firstTimeRef","secondTimeRef","firstTimeSelectionRef","secondTimeSelectionRef","setFocusOnSwapTimesChange","current","_secondTimeRef$curren","setSelection","_firstTimeRef$current","onFirstTimeChange","onSecondTimeChange","onFirstTimeSelect","selection","onSecondTimeSelect","style","flexBasis","modified","allowValueWrapping","onSelect","undefined","transform","ONE_HOUR","handleOffset","calculatePositionAsTime","clientX","trackRect","getBoundingClientRect","leftEdge","Math","max","left","preciseTime","min","width","roundedTime","round","limitMax","handleMouseMove","_ref2","handleMouseUp","_ref3","window","removeEventListener","document","documentElement","classList","remove","startDragListening","addEventListener","add","stopDragListening","handleMouseDown","removeListenersOnUnmount","type","onMouseDown"],"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, {\n type SelectionSegment,\n type TimeInputElement,\n} 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): void {\n if (startTime <= endTime) {\n onStartTimeChange(value);\n } else {\n onEndTimeChange(value);\n }\n }\n\n function onSecondTimeChange(value: number): void {\n if (startTime <= endTime) {\n onEndTimeChange(value);\n } else {\n onStartTimeChange(value);\n }\n }\n\n const onFirstTimeSelect = useCallback((selection: SelectionSegment) => {\n firstTimeSelectionRef.current = selection;\n secondTimeSelectionRef.current = null;\n }, []);\n\n const onSecondTimeSelect = useCallback((selection: SelectionSegment) => {\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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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"TimeSlider.js","names":["React","useCallback","useMemo","useRef","useState","useEffect","classNames","TimeInput","StyleExports","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","HANDLE_SIZE","parseInt","POPOVER_WIDTH","SECONDS_IN_DAY","SNAP_NEAREST_MINUTES","TimeSlider","_ref","propStartTime","startTime","propEndTime","endTime","onChange","_ref$isStartModified","isStartModified","_ref$isEndModified","isEndModified","dataTestId","_useState","_useState2","_slicedToArray","setStartTime","_useState3","_useState4","setEndTime","track","setTimeOnPropTimeChange","updateTime","newStartTime","newEndTime","start","end","handleStartTimeChange","handleEndTimeChange","className","children","PopOvers","onStartTimeChange","onEndTimeChange","ref","TrackFills","Array","fill","map","value","index","Handle","time","setTime","concat","props","swapTimes","_useState5","_useState6","firstTime","setFirstTime","_useState7","_useState8","secondTime","setSecondTime","firstTimeRef","secondTimeRef","firstTimeSelectionRef","secondTimeSelectionRef","setFocusOnSwapTimesChange","current","_secondTimeRef$curren","setSelection","_firstTimeRef$current","onFirstTimeChange","onSecondTimeChange","onFirstTimeSelect","selection","onSecondTimeSelect","style","flexBasis","modified","allowValueWrapping","onSelect","undefined","transform","ONE_HOUR","handleOffset","calculatePositionAsTime","clientX","trackRect","getBoundingClientRect","leftEdge","Math","max","left","preciseTime","min","width","roundedTime","round","limitMax","handleMouseMove","_ref2","handleMouseUp","_ref3","window","removeEventListener","document","documentElement","classList","remove","startDragListening","addEventListener","add","stopDragListening","handleMouseDown","removeListenersOnUnmount","type","onMouseDown"],"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, {\n type SelectionSegment,\n type TimeInputElement,\n} 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): void {\n if (startTime <= endTime) {\n onStartTimeChange(value);\n } else {\n onEndTimeChange(value);\n }\n }\n\n function onSecondTimeChange(value: number): void {\n if (startTime <= endTime) {\n onEndTimeChange(value);\n } else {\n onStartTimeChange(value);\n }\n }\n\n const onFirstTimeSelect = useCallback((selection: SelectionSegment) => {\n firstTimeSelectionRef.current = selection;\n secondTimeSelectionRef.current = null;\n }, []);\n\n const onSecondTimeSelect = useCallback((selection: SelectionSegment) => {\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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","ignoreList":[]}
|
|
@@ -8,16 +8,15 @@ import "./ToastNotification.css";
|
|
|
8
8
|
import { FadeTransition } from "./transitions/index.js";
|
|
9
9
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
10
|
function ToastNotification(_ref) {
|
|
11
|
-
var
|
|
12
|
-
|
|
13
|
-
isShown = false,
|
|
14
|
-
classNames
|
|
15
|
-
message,
|
|
16
|
-
type,
|
|
17
|
-
onClick,
|
|
18
|
-
onDismiss,
|
|
19
|
-
'data-testid'
|
|
20
|
-
} = _ref;
|
|
11
|
+
var buttons = _ref.buttons,
|
|
12
|
+
_ref$isShown = _ref.isShown,
|
|
13
|
+
isShown = _ref$isShown === void 0 ? false : _ref$isShown,
|
|
14
|
+
classNamesProp = _ref.classNames,
|
|
15
|
+
message = _ref.message,
|
|
16
|
+
type = _ref.type,
|
|
17
|
+
onClick = _ref.onClick,
|
|
18
|
+
onDismiss = _ref.onDismiss,
|
|
19
|
+
dataTestId = _ref['data-testid'];
|
|
21
20
|
var nodeRef = useRef(null);
|
|
22
21
|
var hasButtons = buttons && buttons.length !== 0;
|
|
23
22
|
return /*#__PURE__*/_jsx(CSSTransition, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToastNotification.js","names":["React","useRef","classNames","CSSTransition","vsClose","Button","ThemeExport","FadeTransition","jsx","_jsx","jsxs","_jsxs","ToastNotification","_ref","buttons","isShown","classNamesProp","message","type","onClick","onDismiss","dataTestId","nodeRef","hasButtons","length","in","timeout","transitionMs","mountOnEnter","unmountOnExit","children","ref","className","role","onKeyPress","transitionSlowMs","kind","icon","tooltip","TYPE","Object","freeze","ERROR"],"sources":["../src/ToastNotification.tsx"],"sourcesContent":["import React, { useRef } 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';\nimport { FadeTransition } from './transitions';\n\ntype ToastNotificationProps = {\n buttons?: React.ReactNode[];\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 nodeRef = useRef<HTMLDivElement>(null);\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 nodeRef={nodeRef}\n >\n <div\n ref={nodeRef}\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 <FadeTransition\n in={hasButtons}\n timeout={ThemeExport.transitionSlowMs}\n mountOnEnter\n unmountOnExit\n >\n <div className=\"buttons-container\">{buttons}</div>\n </FadeTransition>\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,IAAIC,MAAM,QAAQ,OAAO;AACrC,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,aAAa,QAAQ,wBAAwB;AACtD,SAASC,OAAO,QAAQ,kBAAkB;AAAC,OACpCC,MAAM;AAAA,OACNC,WAAW;AAAA;AAAA,SAETC,cAAc;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAgBvB,SAASC,iBAAiBA,CAAAC,IAAA,EASc;EAAA,
|
|
1
|
+
{"version":3,"file":"ToastNotification.js","names":["React","useRef","classNames","CSSTransition","vsClose","Button","ThemeExport","FadeTransition","jsx","_jsx","jsxs","_jsxs","ToastNotification","_ref","buttons","_ref$isShown","isShown","classNamesProp","message","type","onClick","onDismiss","dataTestId","nodeRef","hasButtons","length","in","timeout","transitionMs","mountOnEnter","unmountOnExit","children","ref","className","role","onKeyPress","transitionSlowMs","kind","icon","tooltip","TYPE","Object","freeze","ERROR"],"sources":["../src/ToastNotification.tsx"],"sourcesContent":["import React, { useRef } 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';\nimport { FadeTransition } from './transitions';\n\ntype ToastNotificationProps = {\n buttons?: React.ReactNode[];\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 nodeRef = useRef<HTMLDivElement>(null);\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 nodeRef={nodeRef}\n >\n <div\n ref={nodeRef}\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 <FadeTransition\n in={hasButtons}\n timeout={ThemeExport.transitionSlowMs}\n mountOnEnter\n unmountOnExit\n >\n <div className=\"buttons-container\">{buttons}</div>\n </FadeTransition>\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,IAAIC,MAAM,QAAQ,OAAO;AACrC,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,aAAa,QAAQ,wBAAwB;AACtD,SAASC,OAAO,QAAQ,kBAAkB;AAAC,OACpCC,MAAM;AAAA,OACNC,WAAW;AAAA;AAAA,SAETC,cAAc;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAgBvB,SAASC,iBAAiBA,CAAAC,IAAA,EASc;EAAA,IARtCC,OAAO,GAAAD,IAAA,CAAPC,OAAO;IAAAC,YAAA,GAAAF,IAAA,CACPG,OAAO;IAAPA,OAAO,GAAAD,YAAA,cAAG,KAAK,GAAAA,YAAA;IACHE,cAAc,GAAAJ,IAAA,CAA1BX,UAAU;IACVgB,OAAO,GAAAL,IAAA,CAAPK,OAAO;IACPC,IAAI,GAAAN,IAAA,CAAJM,IAAI;IACJC,OAAO,GAAAP,IAAA,CAAPO,OAAO;IACPC,SAAS,GAAAR,IAAA,CAATQ,SAAS;IACMC,UAAU,GAAAT,IAAA,CAAzB,aAAa;EAEb,IAAMU,OAAO,GAAGtB,MAAM,CAAiB,IAAI,CAAC;EAC5C,IAAMuB,UAAU,GAAGV,OAAO,IAAIA,OAAO,CAACW,MAAM,KAAK,CAAC;EAElD,oBACEhB,IAAA,CAACN,aAAa;IACZuB,EAAE,EAAEV,OAAQ;IACZW,OAAO,EAAErB,WAAW,CAACsB,YAAa;IAClC1B,UAAU,EAAC,6BAA6B;IACxC2B,YAAY;IACZC,aAAa;IACbP,OAAO,EAAEA,OAAQ;IAAAQ,QAAA,eAEjBpB,KAAA;MACEqB,GAAG,EAAET,OAAQ;MACbU,SAAS,EAAE/B,UAAU,CAAC,oBAAoB,EAAEe,cAAc,EAAEE,IAAI,CAAE;MAClEe,IAAI,EAAC,cAAc;MACnBd,OAAO,EAAEA,OAAQ;MACjBe,UAAU,EAAEf,OAAQ;MACpB,eAAaE,UAAW;MAAAS,QAAA,gBAExBtB,IAAA;QAAKwB,SAAS,EAAC,mBAAmB;QAAAF,QAAA,eAChCtB,IAAA;UAAMwB,SAAS,EAAC,SAAS;UAAAF,QAAA,EAAEb;QAAO,CAAO;MAAC,CACvC,CAAC,eACNT,IAAA,CAACF,cAAc;QACbmB,EAAE,EAAEF,UAAW;QACfG,OAAO,EAAErB,WAAW,CAAC8B,gBAAiB;QACtCP,YAAY;QACZC,aAAa;QAAAC,QAAA,eAEbtB,IAAA;UAAKwB,SAAS,EAAC,mBAAmB;UAAAF,QAAA,EAAEjB;QAAO,CAAM;MAAC,CACpC,CAAC,EAChBO,SAAS,iBACRZ,IAAA,CAACJ,MAAM;QACLgC,IAAI,EAAC,OAAO;QACZC,IAAI,EAAElC,OAAQ;QACdmC,OAAO,EAAC,oBAAoB;QAC5BN,SAAS,EAAC,MAAM;QAChBb,OAAO,EAAEC;MAAU,CACpB,CACF;IAAA,CACE;EAAC,CACO,CAAC;AAEpB;AAEAT,iBAAiB,CAAC4B,IAAI,GAAGC,MAAM,CAACC,MAAM,CAAC;EACrCC,KAAK,EAAE;AACT,CAAC,CAAC;AAEF,eAAe/B,iBAAiB","ignoreList":[]}
|
package/dist/UISwitch.js
CHANGED
|
@@ -3,15 +3,14 @@ import classNames from 'classnames';
|
|
|
3
3
|
import "./UISwitch.css";
|
|
4
4
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
5
|
function UISwitch(_ref) {
|
|
6
|
-
var
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
disabled = false,
|
|
12
|
-
onClick,
|
|
13
|
-
'data-testid'
|
|
14
|
-
} = _ref;
|
|
6
|
+
var on = _ref.on,
|
|
7
|
+
id = _ref.id,
|
|
8
|
+
className = _ref.className,
|
|
9
|
+
isInvalid = _ref.isInvalid,
|
|
10
|
+
_ref$disabled = _ref.disabled,
|
|
11
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
12
|
+
onClick = _ref.onClick,
|
|
13
|
+
dataTestId = _ref['data-testid'];
|
|
15
14
|
return (
|
|
16
15
|
/*#__PURE__*/
|
|
17
16
|
// eslint-disable-next-line jsx-a11y/control-has-associated-label
|
package/dist/UISwitch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UISwitch.js","names":["React","classNames","jsx","_jsx","UISwitch","_ref","on","id","className","isInvalid","disabled","onClick","dataTestId","type","active","children"],"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 // eslint-disable-next-line jsx-a11y/control-has-associated-label\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,SAAAC,GAAA,IAAAC,IAAA;AAapC,SAASC,QAAQA,CAAAC,IAAA,EAQc;EAAA,
|
|
1
|
+
{"version":3,"file":"UISwitch.js","names":["React","classNames","jsx","_jsx","UISwitch","_ref","on","id","className","isInvalid","_ref$disabled","disabled","onClick","dataTestId","type","active","children"],"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 // eslint-disable-next-line jsx-a11y/control-has-associated-label\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,SAAAC,GAAA,IAAAC,IAAA;AAapC,SAASC,QAAQA,CAAAC,IAAA,EAQc;EAAA,IAP7BC,EAAE,GAAAD,IAAA,CAAFC,EAAE;IACFC,EAAE,GAAAF,IAAA,CAAFE,EAAE;IACFC,SAAS,GAAAH,IAAA,CAATG,SAAS;IACTC,SAAS,GAAAJ,IAAA,CAATI,SAAS;IAAAC,aAAA,GAAAL,IAAA,CACTM,QAAQ;IAARA,QAAQ,GAAAD,aAAA,cAAG,KAAK,GAAAA,aAAA;IAChBE,OAAO,GAAAP,IAAA,CAAPO,OAAO;IACQC,UAAU,GAAAR,IAAA,CAAzB,aAAa;EAEb;IAAA;IACE;IACAF,IAAA;MACEW,IAAI,EAAC,QAAQ;MACbN,SAAS,EAAEP,UAAU,CACnB,KAAK,EACL,YAAY,EACZO,SAAS,EACT;QAAEO,MAAM,EAAET;MAAG,CAAC,EACd;QAAE,YAAY,EAAEG;MAAU,CAC5B,CAAE;MACFF,EAAE,EAAEA,EAAG;MACPK,OAAO,EAAEA,OAAQ;MACjBD,QAAQ,EAAEA,QAAS;MACnB,eAAaE,UAAW;MAAAG,QAAA,eAExBb,IAAA;QAAKK,SAAS,EAAC;MAAQ,CAAE;IAAC,CACpB;EAAC;AAEb;AAEA,eAAeJ,QAAQ","ignoreList":[]}
|
|
@@ -4,15 +4,13 @@ import { ActionButtonDialogTrigger, ConfirmationDialog } from "../dialogs/index.
|
|
|
4
4
|
import { ACTION_ICON_HEIGHT } from "../UIConstants.js";
|
|
5
5
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
6
|
export function ConfirmActionButton(_ref) {
|
|
7
|
-
var
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
onConfirm: _onConfirm
|
|
15
|
-
} = _ref;
|
|
7
|
+
var ariaLabel = _ref.ariaLabel,
|
|
8
|
+
heading = _ref.heading,
|
|
9
|
+
confirmationButtonLabel = _ref.confirmationButtonLabel,
|
|
10
|
+
isHidden = _ref.isHidden,
|
|
11
|
+
children = _ref.children,
|
|
12
|
+
tooltip = _ref.tooltip,
|
|
13
|
+
_onConfirm = _ref.onConfirm;
|
|
16
14
|
var renderDialog = useCallback(close => /*#__PURE__*/_jsx(ConfirmationDialog, {
|
|
17
15
|
heading: heading,
|
|
18
16
|
confirmationButtonLabel: confirmationButtonLabel,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfirmActionButton.js","names":["useCallback","vsTrash","ActionButtonDialogTrigger","ConfirmationDialog","ACTION_ICON_HEIGHT","jsx","_jsx","ConfirmActionButton","_ref","ariaLabel","heading","confirmationButtonLabel","isHidden","children","tooltip","onConfirm","renderDialog","close","onCancel","icon","isQuiet","height"],"sources":["../../src/actions/ConfirmActionButton.tsx"],"sourcesContent":["import { type ReactElement, type ReactNode, useCallback } from 'react';\nimport type { SpectrumLabelableProps } from '@react-types/shared';\nimport { vsTrash } from '@deephaven/icons';\nimport { ActionButtonDialogTrigger, ConfirmationDialog } from '../dialogs';\nimport { ACTION_ICON_HEIGHT } from '../UIConstants';\n\nexport interface ConfirmActionButtonProps {\n ariaLabel: string;\n heading: ReactNode;\n confirmationButtonLabel: string;\n children:\n | ReactElement<SpectrumLabelableProps>\n | ReactElement<SpectrumLabelableProps>[];\n isHidden?: boolean;\n tooltip?: string;\n onConfirm: () => void;\n}\n\nexport function ConfirmActionButton({\n ariaLabel,\n heading,\n confirmationButtonLabel,\n isHidden,\n children,\n tooltip,\n onConfirm,\n}: ConfirmActionButtonProps): JSX.Element {\n const renderDialog = useCallback(\n (close: () => void) => (\n <ConfirmationDialog\n heading={heading}\n confirmationButtonLabel={confirmationButtonLabel}\n onCancel={close}\n onConfirm={() => {\n close();\n onConfirm();\n }}\n >\n {children}\n </ConfirmationDialog>\n ),\n [children, confirmationButtonLabel, heading, onConfirm]\n );\n\n return (\n <ActionButtonDialogTrigger\n ariaLabel={ariaLabel}\n icon={vsTrash}\n isHidden={isHidden}\n isQuiet\n height={ACTION_ICON_HEIGHT}\n tooltip={tooltip}\n >\n {renderDialog}\n </ActionButtonDialogTrigger>\n );\n}\n\nexport default ConfirmActionButton;\n"],"mappings":"AAAA,SAA4CA,WAAW,QAAQ,OAAO;AAEtE,SAASC,OAAO,QAAQ,kBAAkB;AAAC,SAClCC,yBAAyB,EAAEC,kBAAkB;AAAA,SAC7CC,kBAAkB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAc3B,OAAO,SAASC,mBAAmBA,CAAAC,IAAA,EAQO;EAAA,
|
|
1
|
+
{"version":3,"file":"ConfirmActionButton.js","names":["useCallback","vsTrash","ActionButtonDialogTrigger","ConfirmationDialog","ACTION_ICON_HEIGHT","jsx","_jsx","ConfirmActionButton","_ref","ariaLabel","heading","confirmationButtonLabel","isHidden","children","tooltip","onConfirm","renderDialog","close","onCancel","icon","isQuiet","height"],"sources":["../../src/actions/ConfirmActionButton.tsx"],"sourcesContent":["import { type ReactElement, type ReactNode, useCallback } from 'react';\nimport type { SpectrumLabelableProps } from '@react-types/shared';\nimport { vsTrash } from '@deephaven/icons';\nimport { ActionButtonDialogTrigger, ConfirmationDialog } from '../dialogs';\nimport { ACTION_ICON_HEIGHT } from '../UIConstants';\n\nexport interface ConfirmActionButtonProps {\n ariaLabel: string;\n heading: ReactNode;\n confirmationButtonLabel: string;\n children:\n | ReactElement<SpectrumLabelableProps>\n | ReactElement<SpectrumLabelableProps>[];\n isHidden?: boolean;\n tooltip?: string;\n onConfirm: () => void;\n}\n\nexport function ConfirmActionButton({\n ariaLabel,\n heading,\n confirmationButtonLabel,\n isHidden,\n children,\n tooltip,\n onConfirm,\n}: ConfirmActionButtonProps): JSX.Element {\n const renderDialog = useCallback(\n (close: () => void) => (\n <ConfirmationDialog\n heading={heading}\n confirmationButtonLabel={confirmationButtonLabel}\n onCancel={close}\n onConfirm={() => {\n close();\n onConfirm();\n }}\n >\n {children}\n </ConfirmationDialog>\n ),\n [children, confirmationButtonLabel, heading, onConfirm]\n );\n\n return (\n <ActionButtonDialogTrigger\n ariaLabel={ariaLabel}\n icon={vsTrash}\n isHidden={isHidden}\n isQuiet\n height={ACTION_ICON_HEIGHT}\n tooltip={tooltip}\n >\n {renderDialog}\n </ActionButtonDialogTrigger>\n );\n}\n\nexport default ConfirmActionButton;\n"],"mappings":"AAAA,SAA4CA,WAAW,QAAQ,OAAO;AAEtE,SAASC,OAAO,QAAQ,kBAAkB;AAAC,SAClCC,yBAAyB,EAAEC,kBAAkB;AAAA,SAC7CC,kBAAkB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAc3B,OAAO,SAASC,mBAAmBA,CAAAC,IAAA,EAQO;EAAA,IAPxCC,SAAS,GAAAD,IAAA,CAATC,SAAS;IACTC,OAAO,GAAAF,IAAA,CAAPE,OAAO;IACPC,uBAAuB,GAAAH,IAAA,CAAvBG,uBAAuB;IACvBC,QAAQ,GAAAJ,IAAA,CAARI,QAAQ;IACRC,QAAQ,GAAAL,IAAA,CAARK,QAAQ;IACRC,OAAO,GAAAN,IAAA,CAAPM,OAAO;IACPC,UAAS,GAAAP,IAAA,CAATO,SAAS;EAET,IAAMC,YAAY,GAAGhB,WAAW,CAC7BiB,KAAiB,iBAChBX,IAAA,CAACH,kBAAkB;IACjBO,OAAO,EAAEA,OAAQ;IACjBC,uBAAuB,EAAEA,uBAAwB;IACjDO,QAAQ,EAAED,KAAM;IAChBF,SAAS,EAAEA,CAAA,KAAM;MACfE,KAAK,CAAC,CAAC;MACPF,UAAS,CAAC,CAAC;IACb,CAAE;IAAAF,QAAA,EAEDA;EAAQ,CACS,CACrB,EACD,CAACA,QAAQ,EAAEF,uBAAuB,EAAED,OAAO,EAAEK,UAAS,CACxD,CAAC;EAED,oBACET,IAAA,CAACJ,yBAAyB;IACxBO,SAAS,EAAEA,SAAU;IACrBU,IAAI,EAAElB,OAAQ;IACdW,QAAQ,EAAEA,QAAS;IACnBQ,OAAO;IACPC,MAAM,EAAEjB,kBAAmB;IAC3BU,OAAO,EAAEA,OAAQ;IAAAD,QAAA,EAEhBG;EAAY,CACY,CAAC;AAEhC;AAEA,eAAeT,mBAAmB","ignoreList":[]}
|
|
@@ -13,11 +13,9 @@ import { Tooltip } from "../popper/index.js";
|
|
|
13
13
|
import { ACTION_ICON_HEIGHT } from "../UIConstants.js";
|
|
14
14
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
15
15
|
export function IconActionButton(_ref) {
|
|
16
|
-
var
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
tooltip
|
|
20
|
-
} = _ref,
|
|
16
|
+
var icon = _ref.icon,
|
|
17
|
+
label = _ref.label,
|
|
18
|
+
tooltip = _ref.tooltip,
|
|
21
19
|
props = _objectWithoutProperties(_ref, _excluded);
|
|
22
20
|
return /*#__PURE__*/_jsxs(ActionButton, _objectSpread(_objectSpread({}, props), {}, {
|
|
23
21
|
"aria-label": label,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IconActionButton.js","names":["FontAwesomeIcon","ActionButton","Icon","Tooltip","ACTION_ICON_HEIGHT","jsx","_jsx","jsxs","_jsxs","IconActionButton","_ref","icon","label","tooltip","props","_objectWithoutProperties","_excluded","_objectSpread","isQuiet","height","children","UNSAFE_className","undefined","displayName"],"sources":["../../src/actions/IconActionButton.tsx"],"sourcesContent":["/* eslint-disable react/jsx-props-no-spreading */\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport type { IconProp } from '@fortawesome/fontawesome-svg-core';\nimport { ActionButton, Icon, type ActionButtonProps } from '../spectrum';\nimport { Tooltip } from '../popper';\nimport { ACTION_ICON_HEIGHT } from '../UIConstants';\n\nexport interface IconActionButtonProps\n extends Omit<ActionButtonProps, 'aria-label' | 'isQuiet' | 'height'> {\n icon: IconProp;\n label: string;\n tooltip?: string;\n}\n\nexport function IconActionButton({\n icon,\n label,\n tooltip,\n ...props\n}: IconActionButtonProps): JSX.Element {\n return (\n <ActionButton\n {...props}\n aria-label={label}\n isQuiet\n height={ACTION_ICON_HEIGHT}\n >\n <Icon\n UNSAFE_className={\n tooltip == null ? undefined : 'action-button-icon-with-tooltip'\n }\n >\n <FontAwesomeIcon icon={icon} />\n </Icon>\n {tooltip == null ? null : <Tooltip>{tooltip}</Tooltip>}\n </ActionButton>\n );\n}\nIconActionButton.displayName = 'IconActionButton';\n\nexport default IconActionButton;\n"],"mappings":";;;;;;;;AAAA;AACA,SAASA,eAAe,QAAQ,gCAAgC;AAAC,SAExDC,YAAY,EAAEC,IAAI;AAAA,SAClBC,OAAO;AAAA,SACPC,kBAAkB;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAS3B,OAAO,SAASC,gBAAgBA,CAAAC,IAAA,EAKO;EAAA,
|
|
1
|
+
{"version":3,"file":"IconActionButton.js","names":["FontAwesomeIcon","ActionButton","Icon","Tooltip","ACTION_ICON_HEIGHT","jsx","_jsx","jsxs","_jsxs","IconActionButton","_ref","icon","label","tooltip","props","_objectWithoutProperties","_excluded","_objectSpread","isQuiet","height","children","UNSAFE_className","undefined","displayName"],"sources":["../../src/actions/IconActionButton.tsx"],"sourcesContent":["/* eslint-disable react/jsx-props-no-spreading */\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport type { IconProp } from '@fortawesome/fontawesome-svg-core';\nimport { ActionButton, Icon, type ActionButtonProps } from '../spectrum';\nimport { Tooltip } from '../popper';\nimport { ACTION_ICON_HEIGHT } from '../UIConstants';\n\nexport interface IconActionButtonProps\n extends Omit<ActionButtonProps, 'aria-label' | 'isQuiet' | 'height'> {\n icon: IconProp;\n label: string;\n tooltip?: string;\n}\n\nexport function IconActionButton({\n icon,\n label,\n tooltip,\n ...props\n}: IconActionButtonProps): JSX.Element {\n return (\n <ActionButton\n {...props}\n aria-label={label}\n isQuiet\n height={ACTION_ICON_HEIGHT}\n >\n <Icon\n UNSAFE_className={\n tooltip == null ? undefined : 'action-button-icon-with-tooltip'\n }\n >\n <FontAwesomeIcon icon={icon} />\n </Icon>\n {tooltip == null ? null : <Tooltip>{tooltip}</Tooltip>}\n </ActionButton>\n );\n}\nIconActionButton.displayName = 'IconActionButton';\n\nexport default IconActionButton;\n"],"mappings":";;;;;;;;AAAA;AACA,SAASA,eAAe,QAAQ,gCAAgC;AAAC,SAExDC,YAAY,EAAEC,IAAI;AAAA,SAClBC,OAAO;AAAA,SACPC,kBAAkB;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAS3B,OAAO,SAASC,gBAAgBA,CAAAC,IAAA,EAKO;EAAA,IAJrCC,IAAI,GAAAD,IAAA,CAAJC,IAAI;IACJC,KAAK,GAAAF,IAAA,CAALE,KAAK;IACLC,OAAO,GAAAH,IAAA,CAAPG,OAAO;IACJC,KAAK,GAAAC,wBAAA,CAAAL,IAAA,EAAAM,SAAA;EAER,oBACER,KAAA,CAACP,YAAY,EAAAgB,aAAA,CAAAA,aAAA,KACPH,KAAK;IACT,cAAYF,KAAM;IAClBM,OAAO;IACPC,MAAM,EAAEf,kBAAmB;IAAAgB,QAAA,gBAE3Bd,IAAA,CAACJ,IAAI;MACHmB,gBAAgB,EACdR,OAAO,IAAI,IAAI,GAAGS,SAAS,GAAG,iCAC/B;MAAAF,QAAA,eAEDd,IAAA,CAACN,eAAe;QAACW,IAAI,EAAEA;MAAK,CAAE;IAAC,CAC3B,CAAC,EACNE,OAAO,IAAI,IAAI,GAAG,IAAI,gBAAGP,IAAA,CAACH,OAAO;MAAAiB,QAAA,EAAEP;IAAO,CAAU,CAAC;EAAA,EAC1C,CAAC;AAEnB;AACAJ,gBAAgB,CAACc,WAAW,GAAG,kBAAkB;AAEjD,eAAed,gBAAgB","ignoreList":[]}
|