@skbkontur/react-ui 6.0.5 → 6.0.7-b5d2c.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/CHANGELOG.md +11 -0
- package/components/Calendar/Calendar.d.ts +14 -14
- package/components/Calendar/Calendar.js +2 -2
- package/components/Calendar/Calendar.js.map +1 -1
- package/components/Calendar/CalendarDay.d.ts +2 -2
- package/components/Calendar/CalendarDay.js +1 -1
- package/components/Calendar/CalendarDay.js.map +1 -1
- package/components/Center/Center.d.ts +3 -3
- package/components/Center/Center.js +2 -2
- package/components/Center/Center.js.map +1 -1
- package/components/Checkbox/Checkbox.d.ts +11 -14
- package/components/Checkbox/Checkbox.js +3 -6
- package/components/Checkbox/Checkbox.js.map +1 -1
- package/components/ComboBox/ComboBox.d.ts +5 -3
- package/components/ComboBox/ComboBox.js.map +1 -1
- package/components/DateInput/DateInput.d.ts +15 -15
- package/components/DateInput/DateInput.js +1 -1
- package/components/DateInput/DateInput.js.map +1 -1
- package/components/DatePicker/DatePicker.d.ts +14 -16
- package/components/DatePicker/DatePicker.js +4 -5
- package/components/DatePicker/DatePicker.js.map +1 -1
- package/components/DateRangePicker/DateRangePicker.d.ts +4 -3
- package/components/DateRangePicker/DateRangePicker.js +5 -3
- package/components/DateRangePicker/DateRangePicker.js.map +1 -1
- package/components/DateRangePicker/DateRangePickerInput.js +6 -4
- package/components/DateRangePicker/DateRangePickerInput.js.map +1 -1
- package/components/Dropdown/Dropdown.d.ts +10 -15
- package/components/Dropdown/Dropdown.js +2 -8
- package/components/Dropdown/Dropdown.js.map +1 -1
- package/components/DropdownMenu/DropdownMenu.d.ts +17 -15
- package/components/DropdownMenu/DropdownMenu.js +4 -1
- package/components/DropdownMenu/DropdownMenu.js.map +1 -1
- package/components/FileUploader/FileUploader.d.ts +4 -6
- package/components/FileUploader/FileUploader.js +1 -3
- package/components/FileUploader/FileUploader.js.map +1 -1
- package/components/FileUploader/FileUploaderFile.d.ts +3 -3
- package/components/FileUploader/FileUploaderFile.js +1 -1
- package/components/FileUploader/FileUploaderFile.js.map +1 -1
- package/components/Input/Input.d.ts +2 -2
- package/components/Input/Input.js.map +1 -1
- package/components/MenuFooter/MenuFooter.d.ts +4 -8
- package/components/MenuFooter/MenuFooter.js +1 -5
- package/components/MenuFooter/MenuFooter.js.map +1 -1
- package/components/MenuHeader/MenuHeader.d.ts +4 -8
- package/components/MenuHeader/MenuHeader.js +1 -5
- package/components/MenuHeader/MenuHeader.js.map +1 -1
- package/components/MenuItem/MenuItem.d.ts +11 -13
- package/components/MenuItem/MenuItem.js +1 -3
- package/components/MenuItem/MenuItem.js.map +1 -1
- package/components/MenuSeparator/MenuSeparator.d.ts +1 -3
- package/components/MenuSeparator/MenuSeparator.js +1 -3
- package/components/MenuSeparator/MenuSeparator.js.map +1 -1
- package/components/MiniModal/MiniModal.d.ts +1 -1
- package/components/MiniModal/MiniModal.js +1 -1
- package/components/MiniModal/MiniModal.js.map +1 -1
- package/components/MiniModal/MiniModalBody.d.ts +1 -1
- package/components/MiniModal/MiniModalBody.js +1 -1
- package/components/MiniModal/MiniModalBody.js.map +1 -1
- package/components/MiniModal/MiniModalFooter.d.ts +1 -1
- package/components/MiniModal/MiniModalFooter.js +1 -1
- package/components/MiniModal/MiniModalFooter.js.map +1 -1
- package/components/MiniModal/MiniModalHeader.d.ts +1 -1
- package/components/MiniModal/MiniModalHeader.js +1 -1
- package/components/MiniModal/MiniModalHeader.js.map +1 -1
- package/components/Paging/Paging.d.ts +2 -2
- package/components/Paging/Paging.js.map +1 -1
- package/components/Radio/Radio.d.ts +7 -7
- package/components/Radio/Radio.js.map +1 -1
- package/components/RadioGroup/RadioGroup.d.ts +2 -2
- package/components/RadioGroup/RadioGroup.js.map +1 -1
- package/components/ResponsiveLayout/ResponsiveLayout.d.ts +2 -2
- package/components/ResponsiveLayout/ResponsiveLayout.js +1 -1
- package/components/ResponsiveLayout/ResponsiveLayout.js.map +1 -1
- package/components/ScrollContainer/ScrollBar.d.ts +4 -4
- package/components/ScrollContainer/ScrollBar.js.map +1 -1
- package/components/ScrollContainer/ScrollContainer.d.ts +17 -12
- package/components/ScrollContainer/ScrollContainer.js +6 -1
- package/components/ScrollContainer/ScrollContainer.js.map +1 -1
- package/components/Select/Select.d.ts +6 -4
- package/components/Select/Select.js +2 -2
- package/components/Select/Select.js.map +1 -1
- package/components/SingleToast/SingleToast.d.ts +1 -6
- package/components/SingleToast/SingleToast.js +1 -6
- package/components/SingleToast/SingleToast.js.map +1 -1
- package/components/Spinner/Spinner.d.ts +1 -1
- package/components/Spinner/Spinner.js +1 -1
- package/components/Spinner/Spinner.js.map +1 -1
- package/components/Sticky/Sticky.d.ts +0 -4
- package/components/Sticky/Sticky.js +0 -4
- package/components/Sticky/Sticky.js.map +1 -1
- package/components/Switcher/Switcher.d.ts +8 -10
- package/components/Switcher/Switcher.js +1 -3
- package/components/Switcher/Switcher.js.map +1 -1
- package/components/Tabs/Indicator.styles.d.ts +0 -1
- package/components/Tabs/Indicator.styles.js +1 -4
- package/components/Tabs/Indicator.styles.js.map +1 -1
- package/components/TimePicker/TimeClockIcon.d.ts +3 -0
- package/components/TimePicker/TimeClockIcon.js +11 -0
- package/components/TimePicker/TimeClockIcon.js.map +1 -0
- package/components/TimePicker/TimeFragmentsView.d.ts +15 -0
- package/components/TimePicker/TimeFragmentsView.js +72 -0
- package/components/TimePicker/TimeFragmentsView.js.map +1 -0
- package/components/TimePicker/TimeFragmentsView.styles.d.ts +12 -0
- package/components/TimePicker/TimeFragmentsView.styles.js +43 -0
- package/components/TimePicker/TimeFragmentsView.styles.js.map +1 -0
- package/components/TimePicker/TimeInput.d.ts +23 -0
- package/components/TimePicker/TimeInput.js +86 -0
- package/components/TimePicker/TimeInput.js.map +1 -0
- package/components/TimePicker/TimePicker.d.ts +27 -0
- package/components/TimePicker/TimePicker.js +351 -0
- package/components/TimePicker/TimePicker.js.map +1 -0
- package/components/TimePicker/TimePicker.styles.d.ts +12 -0
- package/components/TimePicker/TimePicker.styles.js +39 -0
- package/components/TimePicker/TimePicker.styles.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.constants.d.ts +19 -0
- package/components/TimePicker/helpers/TimePicker.constants.js +42 -0
- package/components/TimePicker/helpers/TimePicker.constants.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.editing.d.ts +6 -0
- package/components/TimePicker/helpers/TimePicker.editing.js +77 -0
- package/components/TimePicker/helpers/TimePicker.editing.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.layout.d.ts +7 -0
- package/components/TimePicker/helpers/TimePicker.layout.js +17 -0
- package/components/TimePicker/helpers/TimePicker.layout.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.selection.d.ts +7 -0
- package/components/TimePicker/helpers/TimePicker.selection.js +51 -0
- package/components/TimePicker/helpers/TimePicker.selection.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.shared.d.ts +24 -0
- package/components/TimePicker/helpers/TimePicker.shared.js +50 -0
- package/components/TimePicker/helpers/TimePicker.shared.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.value.d.ts +10 -0
- package/components/TimePicker/helpers/TimePicker.value.js +47 -0
- package/components/TimePicker/helpers/TimePicker.value.js.map +1 -0
- package/components/TimePicker/helpers/scrollSelectedSlotIntoView.d.ts +1 -0
- package/components/TimePicker/helpers/scrollSelectedSlotIntoView.js +21 -0
- package/components/TimePicker/helpers/scrollSelectedSlotIntoView.js.map +1 -0
- package/components/TimePicker/hooks/useTimePickerDropdown.d.ts +17 -0
- package/components/TimePicker/hooks/useTimePickerDropdown.js +62 -0
- package/components/TimePicker/hooks/useTimePickerDropdown.js.map +1 -0
- package/components/TimePicker/hooks/useTimePickerSelection.d.ts +15 -0
- package/components/TimePicker/hooks/useTimePickerSelection.js +43 -0
- package/components/TimePicker/hooks/useTimePickerSelection.js.map +1 -0
- package/components/TimePicker/hooks/useTimePickerValue.d.ts +18 -0
- package/components/TimePicker/hooks/useTimePickerValue.js +47 -0
- package/components/TimePicker/hooks/useTimePickerValue.js.map +1 -0
- package/components/TimePicker/index.d.ts +2 -0
- package/components/TimePicker/index.js +2 -0
- package/components/TimePicker/index.js.map +1 -0
- package/components/Tooltip/Tooltip.d.ts +4 -4
- package/components/Tooltip/Tooltip.js.map +1 -1
- package/components/TooltipMenu/TooltipMenu.d.ts +13 -19
- package/components/TooltipMenu/TooltipMenu.js +2 -8
- package/components/TooltipMenu/TooltipMenu.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxMenu.d.ts +1 -0
- package/internal/CustomComboBox/ComboBoxMenu.js +2 -2
- package/internal/CustomComboBox/ComboBoxMenu.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxView.d.ts +1 -0
- package/internal/CustomComboBox/ComboBoxView.js +2 -2
- package/internal/CustomComboBox/ComboBoxView.js.map +1 -1
- package/internal/CustomComboBox/CustomComboBox.d.ts +1 -0
- package/internal/CustomComboBox/CustomComboBox.js +1 -0
- package/internal/CustomComboBox/CustomComboBox.js.map +1 -1
- package/internal/icons2022/TimeClockIcon/TimeClockIcon16Light.d.ts +2 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon16Light.js +20 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon16Light.js.map +1 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon20Light.d.ts +2 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon20Light.js +20 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon20Light.js.map +1 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon24Regular.d.ts +2 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon24Regular.js +20 -0
- package/internal/icons2022/TimeClockIcon/TimeClockIcon24Regular.js.map +1 -0
- package/internal/themes/BasicTheme.d.ts +3 -0
- package/internal/themes/BasicTheme.js +33 -0
- package/internal/themes/BasicTheme.js.map +1 -1
- package/package.json +5 -2
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
13
|
+
var t = {};
|
|
14
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
15
|
+
t[p] = s[p];
|
|
16
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
17
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
18
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
19
|
+
t[p[i]] = s[p[i]];
|
|
20
|
+
}
|
|
21
|
+
return t;
|
|
22
|
+
};
|
|
23
|
+
import React, { useContext, useImperativeHandle, useRef } from 'react';
|
|
24
|
+
import { InputLikeText } from '../../internal/InputLikeText/index.js';
|
|
25
|
+
import { forwardRefAndName } from '../../lib/forwardRefAndName.js';
|
|
26
|
+
import { useEmotion, useStyles } from '../../lib/renderEnvironment/index.js';
|
|
27
|
+
import { ThemeContext } from '../../lib/theming/ThemeContext.js';
|
|
28
|
+
import { getTimePickerInputWidth } from './helpers/TimePicker.layout.js';
|
|
29
|
+
import { getTimeSegmentSelectionNodeRange } from './helpers/TimePicker.selection.js';
|
|
30
|
+
import { TimeClockIcon } from './TimeClockIcon.js';
|
|
31
|
+
import { TimeFragmentsView } from './TimeFragmentsView.js';
|
|
32
|
+
import { TimePickerDataTids } from './TimePicker.js';
|
|
33
|
+
import { getStyles } from './TimePicker.styles.js';
|
|
34
|
+
export var TimeInput = forwardRefAndName('TimeInput', function (props, ref) {
|
|
35
|
+
var _a;
|
|
36
|
+
var precision = props.precision, rightContent = props.rightContent, onRightContentMouseDown = props.onRightContentMouseDown, onSelectSegment = props.onSelectSegment, _b = props.size, size = _b === void 0 ? 'small' : _b, width = props.width, rest = __rest(props, ["precision", "rightContent", "onRightContentMouseDown", "onSelectSegment", "size", "width"]);
|
|
37
|
+
var theme = useContext(ThemeContext);
|
|
38
|
+
var cx = useEmotion().cx;
|
|
39
|
+
var styles = useStyles(getStyles);
|
|
40
|
+
var inputLikeTextRef = useRef(null);
|
|
41
|
+
var fragmentsViewRef = useRef(null);
|
|
42
|
+
useImperativeHandle(ref, function () { return ({
|
|
43
|
+
focus: function () { var _a; return (_a = inputLikeTextRef.current) === null || _a === void 0 ? void 0 : _a.focus(); },
|
|
44
|
+
blur: function () { var _a; return (_a = inputLikeTextRef.current) === null || _a === void 0 ? void 0 : _a.blur(); },
|
|
45
|
+
blink: function () { var _a; return (_a = inputLikeTextRef.current) === null || _a === void 0 ? void 0 : _a.blink(); },
|
|
46
|
+
getNode: function () { var _a, _b; return (_b = (_a = inputLikeTextRef.current) === null || _a === void 0 ? void 0 : _a.getNode()) !== null && _b !== void 0 ? _b : null; },
|
|
47
|
+
isFragment: function (el) { var _a, _b; return (_b = (_a = fragmentsViewRef.current) === null || _a === void 0 ? void 0 : _a.isFragment(el)) !== null && _b !== void 0 ? _b : false; },
|
|
48
|
+
getSegment: function (el) { var _a, _b; return (_b = (_a = fragmentsViewRef.current) === null || _a === void 0 ? void 0 : _a.getSegment(el)) !== null && _b !== void 0 ? _b : null; },
|
|
49
|
+
selectAll: function () {
|
|
50
|
+
var _a, _b, _c;
|
|
51
|
+
var rootNode = (_b = (_a = fragmentsViewRef.current) === null || _a === void 0 ? void 0 : _a.getRootNode()) !== null && _b !== void 0 ? _b : null;
|
|
52
|
+
if (!rootNode) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
(_c = inputLikeTextRef.current) === null || _c === void 0 ? void 0 : _c.selectInnerNode(rootNode, 0, rootNode.childNodes.length);
|
|
56
|
+
},
|
|
57
|
+
isAllSelected: function () {
|
|
58
|
+
var _a, _b, _c, _d, _e;
|
|
59
|
+
var rootNode = (_b = (_a = fragmentsViewRef.current) === null || _a === void 0 ? void 0 : _a.getRootNode()) !== null && _b !== void 0 ? _b : null;
|
|
60
|
+
if (!rootNode) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
var selection = (_d = (_c = rootNode.ownerDocument.defaultView) === null || _c === void 0 ? void 0 : _c.getSelection()) !== null && _d !== void 0 ? _d : null;
|
|
64
|
+
if (!selection || selection.rangeCount === 0 || selection.isCollapsed) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
var range = selection.getRangeAt(0);
|
|
68
|
+
var text = (_e = rootNode.textContent) !== null && _e !== void 0 ? _e : '';
|
|
69
|
+
return (range.toString() === text && rootNode.contains(range.startContainer) && rootNode.contains(range.endContainer));
|
|
70
|
+
},
|
|
71
|
+
selectSegment: function (segment) {
|
|
72
|
+
var _a, _b, _c;
|
|
73
|
+
var rootNode = (_b = (_a = fragmentsViewRef.current) === null || _a === void 0 ? void 0 : _a.getRootNode()) !== null && _b !== void 0 ? _b : null;
|
|
74
|
+
if (!rootNode) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
var _d = getTimeSegmentSelectionNodeRange(segment, precision), start = _d[0], end = _d[1];
|
|
78
|
+
(_c = inputLikeTextRef.current) === null || _c === void 0 ? void 0 : _c.selectInnerNode(rootNode, start, end);
|
|
79
|
+
},
|
|
80
|
+
}); }, [precision]);
|
|
81
|
+
return (React.createElement(InputLikeText, __assign({ ref: inputLikeTextRef }, rest, { takeContentWidth: true, inputMode: "numeric", size: size, width: width !== null && width !== void 0 ? width : getTimePickerInputWidth(size, precision), value: props.value, rightIcon: React.createElement("span", { "data-tid": TimePickerDataTids.rightContent, className: cx(styles.rightContent(), styles.rightContentInteractive(), (_a = {},
|
|
82
|
+
_a[styles.rightContentDefault(theme)] = !rightContent,
|
|
83
|
+
_a)), onMouseDown: onRightContentMouseDown }, rightContent !== null && rightContent !== void 0 ? rightContent : React.createElement(TimeClockIcon, { size: size })) }),
|
|
84
|
+
React.createElement(TimeFragmentsView, { ref: fragmentsViewRef, value: props.value, precision: precision, size: size, onSelectSegment: onSelectSegment })));
|
|
85
|
+
});
|
|
86
|
+
//# sourceMappingURL=TimeInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimeInput.js","sourceRoot":"","sources":["../../../components/TimePicker/TimeInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { MouseEventHandler, ReactNode } from 'react';\nimport React, { useContext, useImperativeHandle, useRef } from 'react';\n\nimport { InputLikeText } from '../../internal/InputLikeText/index.js';\nimport { forwardRefAndName } from '../../lib/forwardRefAndName.js';\nimport { useEmotion, useStyles } from '../../lib/renderEnvironment/index.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport type { InputProps } from '../Input/index.js';\nimport { getTimePickerInputWidth } from './helpers/TimePicker.layout.js';\nimport { getTimeSegmentSelectionNodeRange } from './helpers/TimePicker.selection.js';\nimport type { TimePrecision, TimeSegment } from './helpers/TimePicker.shared.js';\nimport { TimeClockIcon } from './TimeClockIcon.js';\nimport type { TimeFragmentsViewRef } from './TimeFragmentsView.js';\nimport { TimeFragmentsView } from './TimeFragmentsView.js';\nimport { TimePickerDataTids } from './TimePicker.js';\nimport { getStyles } from './TimePicker.styles.js';\n\nexport interface TimeInputProps extends Omit<\n InputProps,\n 'type' | 'value' | 'onValueChange' | 'rightIcon' | 'inputMode'\n> {\n precision: TimePrecision;\n rightContent?: ReactNode;\n value: string;\n onRightContentMouseDown?: MouseEventHandler<HTMLSpanElement>;\n onSelectSegment?: (segment: TimeSegment, event: React.MouseEvent<HTMLSpanElement>) => void;\n}\n\nexport interface TimeInputRef {\n focus(): void;\n\n blur(): void;\n\n blink(): void;\n\n getNode(): HTMLElement | null;\n\n isFragment(el: HTMLElement | EventTarget | null): boolean;\n\n getSegment(el: HTMLElement | EventTarget | null): TimeSegment | null;\n\n selectAll(): void;\n\n isAllSelected(): boolean;\n\n selectSegment(segment: TimeSegment): void;\n}\n\nexport const TimeInput = forwardRefAndName<TimeInputRef, TimeInputProps>('TimeInput', (props, ref) => {\n const { precision, rightContent, onRightContentMouseDown, onSelectSegment, size = 'small', width, ...rest } = props;\n\n const theme = useContext(ThemeContext);\n\n const { cx } = useEmotion();\n\n const styles = useStyles(getStyles);\n\n const inputLikeTextRef = useRef<InputLikeText>(null);\n const fragmentsViewRef = useRef<TimeFragmentsViewRef>(null);\n\n useImperativeHandle(\n ref,\n () => ({\n focus: () => inputLikeTextRef.current?.focus(),\n blur: () => inputLikeTextRef.current?.blur(),\n blink: () => inputLikeTextRef.current?.blink(),\n getNode: () => inputLikeTextRef.current?.getNode() ?? null,\n isFragment: (el) => fragmentsViewRef.current?.isFragment(el) ?? false,\n getSegment: (el) => fragmentsViewRef.current?.getSegment(el) ?? null,\n selectAll: () => {\n const rootNode = fragmentsViewRef.current?.getRootNode() ?? null;\n\n if (!rootNode) {\n return;\n }\n\n inputLikeTextRef.current?.selectInnerNode(rootNode, 0, rootNode.childNodes.length);\n },\n\n isAllSelected: () => {\n const rootNode = fragmentsViewRef.current?.getRootNode() ?? null;\n\n if (!rootNode) {\n return false;\n }\n\n const selection = rootNode.ownerDocument.defaultView?.getSelection() ?? null;\n\n if (!selection || selection.rangeCount === 0 || selection.isCollapsed) {\n return false;\n }\n\n const range = selection.getRangeAt(0);\n const text = rootNode.textContent ?? '';\n\n return (\n range.toString() === text && rootNode.contains(range.startContainer) && rootNode.contains(range.endContainer)\n );\n },\n\n selectSegment: (segment) => {\n const rootNode = fragmentsViewRef.current?.getRootNode() ?? null;\n\n if (!rootNode) {\n return;\n }\n\n const [start, end] = getTimeSegmentSelectionNodeRange(segment, precision);\n inputLikeTextRef.current?.selectInnerNode(rootNode, start, end);\n },\n }),\n [precision],\n );\n\n return (\n <InputLikeText\n ref={inputLikeTextRef}\n {...rest}\n takeContentWidth\n inputMode=\"numeric\"\n size={size}\n width={width ?? getTimePickerInputWidth(size, precision)}\n value={props.value}\n rightIcon={\n <span\n data-tid={TimePickerDataTids.rightContent}\n className={cx(styles.rightContent(), styles.rightContentInteractive(), {\n [styles.rightContentDefault(theme)]: !rightContent,\n })}\n onMouseDown={onRightContentMouseDown}\n >\n {rightContent ?? <TimeClockIcon size={size} />}\n </span>\n }\n >\n <TimeFragmentsView\n ref={fragmentsViewRef}\n value={props.value}\n precision={precision}\n size={size}\n onSelectSegment={onSelectSegment}\n />\n </InputLikeText>\n );\n});\n"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { AriaAttributes, ReactNode } from 'react';
|
|
2
|
+
import type { InputProps } from '../Input/index.js';
|
|
3
|
+
import type { TimePrecision, TimeSlot } from './helpers/TimePicker.shared.js';
|
|
4
|
+
export interface TimePickerProps extends Omit<InputProps, 'type' | 'value' | 'defaultValue' | 'onValueChange' | 'rightIcon' | 'inputMode'>, Pick<AriaAttributes, 'aria-describedby' | 'aria-label'> {
|
|
5
|
+
dropdown?: boolean;
|
|
6
|
+
menuPos?: 'top' | 'bottom';
|
|
7
|
+
menuAlign?: 'left' | 'right';
|
|
8
|
+
precision?: TimePrecision;
|
|
9
|
+
slots?: TimeSlot[];
|
|
10
|
+
rightContent?: ReactNode;
|
|
11
|
+
value?: string | null;
|
|
12
|
+
onValueChange?(value: string): void;
|
|
13
|
+
}
|
|
14
|
+
export interface TimePickerRef {
|
|
15
|
+
focus(): void;
|
|
16
|
+
blur(): void;
|
|
17
|
+
getNode(): HTMLElement | null;
|
|
18
|
+
getRootNode(): HTMLElement | null;
|
|
19
|
+
}
|
|
20
|
+
export declare const TimePickerDataTids: {
|
|
21
|
+
readonly root: "TimePicker__root";
|
|
22
|
+
readonly input: "TimePicker__input";
|
|
23
|
+
readonly popup: "TimePicker__popup";
|
|
24
|
+
readonly slot: "TimePicker__slot";
|
|
25
|
+
readonly rightContent: "TimePicker__rightContent";
|
|
26
|
+
};
|
|
27
|
+
export declare const TimePicker: import("../../lib/forwardRefAndName.js").ReactUIComponentWithRef<TimePickerRef, TimePickerProps> & Record<never, never>;
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
13
|
+
var t = {};
|
|
14
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
15
|
+
t[p] = s[p];
|
|
16
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
17
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
18
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
19
|
+
t[p[i]] = s[p[i]];
|
|
20
|
+
}
|
|
21
|
+
return t;
|
|
22
|
+
};
|
|
23
|
+
import React, { useCallback, useContext, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from 'react';
|
|
24
|
+
import { CommonWrapper } from '../../internal/CommonWrapper/index.js';
|
|
25
|
+
import { Menu } from '../../internal/Menu/index.js';
|
|
26
|
+
import { Popup } from '../../internal/Popup/index.js';
|
|
27
|
+
import { ZIndex } from '../../internal/ZIndex/index.js';
|
|
28
|
+
import { isShortcutSelectAll } from '../../lib/events/keyboard/identifiers.js';
|
|
29
|
+
import { forwardRefAndName } from '../../lib/forwardRefAndName.js';
|
|
30
|
+
import { getMenuPositions } from '../../lib/getMenuPositions.js';
|
|
31
|
+
import { useStyles } from '../../lib/renderEnvironment/index.js';
|
|
32
|
+
import { ThemeContext } from '../../lib/theming/ThemeContext.js';
|
|
33
|
+
import { MenuItem } from '../MenuItem/index.js';
|
|
34
|
+
import { scrollSelectedSlotIntoView } from './helpers/scrollSelectedSlotIntoView.js';
|
|
35
|
+
import { DIGIT_REGEXP } from './helpers/TimePicker.constants.js';
|
|
36
|
+
import { clearTimeSegment, commitTimeSegmentOnLeave, deleteTimeSegmentDigit, formatDigitToTimeSegment, shiftTimeSegmentValue, } from './helpers/TimePicker.editing.js';
|
|
37
|
+
import { DEFAULT_TIME_PICKER_SLOTS, getTimePickerPopupMaxHeight } from './helpers/TimePicker.layout.js';
|
|
38
|
+
import { getNextTimeSegment, getPreviousTimeSegment } from './helpers/TimePicker.selection.js';
|
|
39
|
+
import { getEmptyDisplayValue, isTimeDisplayEmpty, normalizeSlotValue, normalizeTimeValue, parsePastedTimeValue, } from './helpers/TimePicker.value.js';
|
|
40
|
+
import { useTimePickerDropdown } from './hooks/useTimePickerDropdown.js';
|
|
41
|
+
import { useTimePickerSelection } from './hooks/useTimePickerSelection.js';
|
|
42
|
+
import { useTimePickerValue } from './hooks/useTimePickerValue.js';
|
|
43
|
+
import { TimeInput } from './TimeInput.js';
|
|
44
|
+
import { getStyles } from './TimePicker.styles.js';
|
|
45
|
+
export var TimePickerDataTids = {
|
|
46
|
+
root: 'TimePicker__root',
|
|
47
|
+
input: 'TimePicker__input',
|
|
48
|
+
popup: 'TimePicker__popup',
|
|
49
|
+
slot: 'TimePicker__slot',
|
|
50
|
+
rightContent: 'TimePicker__rightContent',
|
|
51
|
+
};
|
|
52
|
+
export var TimePicker = forwardRefAndName('TimePicker', function (props, ref) {
|
|
53
|
+
var disabled = props.disabled, _a = props.dropdown, dropdown = _a === void 0 ? false : _a, _b = props.precision, precision = _b === void 0 ? 'minute' : _b, _c = props.size, size = _c === void 0 ? 'small' : _c, slots = props.slots, menuPos = props.menuPos, menuAlign = props.menuAlign, rightContent = props.rightContent, valueProp = props.value, onValueChange = props.onValueChange, onFocus = props.onFocus, onBlur = props.onBlur, onClick = props.onClick, onKeyDown = props.onKeyDown, onPaste = props.onPaste, inputProps = __rest(props, ["disabled", "dropdown", "precision", "size", "slots", "menuPos", "menuAlign", "rightContent", "value", "onValueChange", "onFocus", "onBlur", "onClick", "onKeyDown", "onPaste"]);
|
|
54
|
+
var theme = useContext(ThemeContext);
|
|
55
|
+
var styles = useStyles(getStyles);
|
|
56
|
+
var _d = useState(false), isInputFocused = _d[0], setIsInputFocused = _d[1];
|
|
57
|
+
var inputRef = useRef(null);
|
|
58
|
+
var rootRef = useRef(null);
|
|
59
|
+
var slotRefs = useRef(new Map());
|
|
60
|
+
var isMouseFocusRef = useRef(false);
|
|
61
|
+
var isMouseDownOnFragmentRef = useRef(false);
|
|
62
|
+
var mouseDownSegmentRef = useRef(null);
|
|
63
|
+
var resolvedSlots = useMemo(function () { return slots !== null && slots !== void 0 ? slots : DEFAULT_TIME_PICKER_SLOTS; }, [slots]);
|
|
64
|
+
var _e = useTimePickerValue({ isInputFocused: isInputFocused, precision: precision, value: valueProp, onValueChange: onValueChange }), editingValue = _e.editingValue, editingValueRef = _e.editingValueRef, setEditingValue = _e.setEditingValue, updateEditingValue = _e.updateEditingValue, commitEditingValue = _e.commitEditingValue, clearEditingValue = _e.clearEditingValue;
|
|
65
|
+
var displayValue = editingValue;
|
|
66
|
+
if (isInputFocused) {
|
|
67
|
+
displayValue = editingValue || getEmptyDisplayValue(precision);
|
|
68
|
+
}
|
|
69
|
+
else if (isTimeDisplayEmpty(editingValue)) {
|
|
70
|
+
displayValue = '';
|
|
71
|
+
}
|
|
72
|
+
var _f = useTimePickerSelection({
|
|
73
|
+
isInputFocused: isInputFocused,
|
|
74
|
+
precision: precision,
|
|
75
|
+
displayValue: displayValue,
|
|
76
|
+
inputRef: inputRef,
|
|
77
|
+
}), selectedSegment = _f.selectedSegment, selectSegment = _f.selectSegment;
|
|
78
|
+
var popupMaxHeight = getTimePickerPopupMaxHeight(size, theme);
|
|
79
|
+
var normalizedValue = normalizeTimeValue(editingValue || valueProp || '', precision);
|
|
80
|
+
var selectedSlotIndex = resolvedSlots.findIndex(function (slot) { return normalizeSlotValue(slot.time, precision) === normalizedValue; });
|
|
81
|
+
var normalizeCurrentSegmentIfNeeded = useCallback(function (segment) {
|
|
82
|
+
var nextDisplayValue = commitTimeSegmentOnLeave(editingValue || getEmptyDisplayValue(precision), segment, precision);
|
|
83
|
+
updateEditingValue(nextDisplayValue);
|
|
84
|
+
}, [editingValue, precision, updateEditingValue]);
|
|
85
|
+
var focusInput = useCallback(function () {
|
|
86
|
+
var _a;
|
|
87
|
+
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
88
|
+
}, []);
|
|
89
|
+
var blurInput = useCallback(function () {
|
|
90
|
+
var _a;
|
|
91
|
+
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.blur();
|
|
92
|
+
}, []);
|
|
93
|
+
var _g = useTimePickerDropdown({
|
|
94
|
+
disabled: disabled,
|
|
95
|
+
dropdown: dropdown,
|
|
96
|
+
slots: resolvedSlots,
|
|
97
|
+
selectedSlotIndex: selectedSlotIndex >= 0 ? selectedSlotIndex : null,
|
|
98
|
+
}), isDropdownOpened = _g.isDropdownOpened, highlightedSlotIndex = _g.highlightedSlotIndex, openDropdown = _g.openDropdown, closeDropdown = _g.closeDropdown, resetHighlightedSlot = _g.resetHighlightedSlot, tryNavigateSlots = _g.tryNavigateSlots;
|
|
99
|
+
var selectSlot = useCallback(function (slot) {
|
|
100
|
+
if (slot.disabled) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
var nextValue = normalizeSlotValue(slot.time, precision);
|
|
104
|
+
setEditingValue(nextValue);
|
|
105
|
+
onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(nextValue);
|
|
106
|
+
closeDropdown();
|
|
107
|
+
}, [closeDropdown, onValueChange, precision, setEditingValue]);
|
|
108
|
+
var isSelectHighlightedSlot = useCallback(function () {
|
|
109
|
+
if (highlightedSlotIndex === null) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
var slot = resolvedSlots[highlightedSlotIndex];
|
|
113
|
+
if (!slot || slot.disabled) {
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
selectSlot(slot);
|
|
117
|
+
return true;
|
|
118
|
+
}, [highlightedSlotIndex, resolvedSlots, selectSlot]);
|
|
119
|
+
useLayoutEffect(function () {
|
|
120
|
+
if (!isDropdownOpened) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
var selectedIndex = highlightedSlotIndex !== null && highlightedSlotIndex !== void 0 ? highlightedSlotIndex : selectedSlotIndex;
|
|
124
|
+
if (selectedIndex < 0) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
var targetNode = slotRefs.current.get(selectedIndex);
|
|
128
|
+
if (targetNode) {
|
|
129
|
+
scrollSelectedSlotIntoView(targetNode);
|
|
130
|
+
}
|
|
131
|
+
}, [highlightedSlotIndex, isDropdownOpened, selectedSlotIndex]);
|
|
132
|
+
useImperativeHandle(ref, function () { return ({
|
|
133
|
+
focus: focusInput,
|
|
134
|
+
blur: blurInput,
|
|
135
|
+
getNode: function () { var _a, _b; return (_b = (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.getNode()) !== null && _b !== void 0 ? _b : null; },
|
|
136
|
+
getRootNode: function () { return rootRef.current; },
|
|
137
|
+
}); }, [blurInput, focusInput]);
|
|
138
|
+
var handleFocus = function (event) {
|
|
139
|
+
setIsInputFocused(true);
|
|
140
|
+
openDropdown();
|
|
141
|
+
if (isMouseDownOnFragmentRef.current && !isInputFocused) {
|
|
142
|
+
if (isTimeDisplayEmpty(editingValueRef.current)) {
|
|
143
|
+
selectSegment('hours');
|
|
144
|
+
}
|
|
145
|
+
else if (mouseDownSegmentRef.current) {
|
|
146
|
+
selectSegment(mouseDownSegmentRef.current);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
selectSegment('hours');
|
|
151
|
+
}
|
|
152
|
+
onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
|
|
153
|
+
};
|
|
154
|
+
var handleBlur = function (event) {
|
|
155
|
+
setIsInputFocused(false);
|
|
156
|
+
isMouseFocusRef.current = false;
|
|
157
|
+
isMouseDownOnFragmentRef.current = false;
|
|
158
|
+
mouseDownSegmentRef.current = null;
|
|
159
|
+
closeDropdown();
|
|
160
|
+
if (isTimeDisplayEmpty(editingValueRef.current)) {
|
|
161
|
+
clearEditingValue();
|
|
162
|
+
onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
commitEditingValue();
|
|
166
|
+
onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
|
|
167
|
+
};
|
|
168
|
+
var handleClick = function (event) {
|
|
169
|
+
openDropdown();
|
|
170
|
+
onClick === null || onClick === void 0 ? void 0 : onClick(event);
|
|
171
|
+
};
|
|
172
|
+
var handleMouseDownCapture = function (event) {
|
|
173
|
+
var _a, _b;
|
|
174
|
+
var segment = (_b = (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.getSegment(event.target)) !== null && _b !== void 0 ? _b : null;
|
|
175
|
+
var isFragment = segment !== null;
|
|
176
|
+
if (isInputFocused && !isFragment) {
|
|
177
|
+
event.preventDefault();
|
|
178
|
+
}
|
|
179
|
+
isMouseFocusRef.current = !isInputFocused;
|
|
180
|
+
isMouseDownOnFragmentRef.current = isFragment;
|
|
181
|
+
mouseDownSegmentRef.current = segment;
|
|
182
|
+
};
|
|
183
|
+
var handleSelectSegmentByMouse = function (segment) {
|
|
184
|
+
openDropdown();
|
|
185
|
+
if (disabled) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
if (!(isMouseFocusRef.current && isTimeDisplayEmpty(editingValueRef.current)) && selectedSegment !== segment) {
|
|
189
|
+
normalizeCurrentSegmentIfNeeded(selectedSegment);
|
|
190
|
+
selectSegment(segment);
|
|
191
|
+
}
|
|
192
|
+
isMouseFocusRef.current = false;
|
|
193
|
+
isMouseDownOnFragmentRef.current = false;
|
|
194
|
+
mouseDownSegmentRef.current = null;
|
|
195
|
+
};
|
|
196
|
+
var handleRightContentMouseDown = function (event) {
|
|
197
|
+
if (disabled) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
event.preventDefault();
|
|
201
|
+
openDropdown();
|
|
202
|
+
focusInput();
|
|
203
|
+
};
|
|
204
|
+
var handleKeyDown = function (event) {
|
|
205
|
+
var _a, _b, _c, _d, _e, _f;
|
|
206
|
+
onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
|
|
207
|
+
if (event.defaultPrevented || disabled) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
if (isShortcutSelectAll(event)) {
|
|
211
|
+
event.preventDefault();
|
|
212
|
+
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.selectAll();
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
if (event.altKey || event.ctrlKey || event.metaKey) {
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
var currentDisplayValue = displayValue;
|
|
219
|
+
var currentSegment = selectedSegment;
|
|
220
|
+
var isAllSelected = (_c = (_b = inputRef.current) === null || _b === void 0 ? void 0 : _b.isAllSelected()) !== null && _c !== void 0 ? _c : false;
|
|
221
|
+
if (isAllSelected && (event.key === 'Backspace' || event.key === 'Delete')) {
|
|
222
|
+
event.preventDefault();
|
|
223
|
+
updateEditingValue(getEmptyDisplayValue(precision));
|
|
224
|
+
selectSegment('hours');
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
if (DIGIT_REGEXP.test(event.key)) {
|
|
228
|
+
event.preventDefault();
|
|
229
|
+
resetHighlightedSlot();
|
|
230
|
+
var result = formatDigitToTimeSegment(currentDisplayValue, currentSegment, event.key, precision);
|
|
231
|
+
if (result.shouldBlink) {
|
|
232
|
+
(_d = inputRef.current) === null || _d === void 0 ? void 0 : _d.blink();
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
updateEditingValue(result.nextValue);
|
|
236
|
+
selectSegment(result.selectedSegment);
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
switch (event.key) {
|
|
240
|
+
case 'ArrowLeft': {
|
|
241
|
+
event.preventDefault();
|
|
242
|
+
normalizeCurrentSegmentIfNeeded(currentSegment);
|
|
243
|
+
selectSegment((_e = getPreviousTimeSegment(currentSegment)) !== null && _e !== void 0 ? _e : currentSegment);
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
case 'ArrowRight': {
|
|
247
|
+
event.preventDefault();
|
|
248
|
+
normalizeCurrentSegmentIfNeeded(currentSegment);
|
|
249
|
+
selectSegment((_f = getNextTimeSegment(currentSegment, precision)) !== null && _f !== void 0 ? _f : currentSegment);
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
case 'ArrowUp':
|
|
253
|
+
case 'ArrowDown': {
|
|
254
|
+
event.preventDefault();
|
|
255
|
+
var slotStep = event.key === 'ArrowUp' ? -1 : 1;
|
|
256
|
+
if (tryNavigateSlots(slotStep)) {
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
var step = event.key === 'ArrowUp' ? 1 : -1;
|
|
260
|
+
updateEditingValue(shiftTimeSegmentValue(currentDisplayValue, currentSegment, step, precision));
|
|
261
|
+
selectSegment(currentSegment);
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
case 'Backspace': {
|
|
265
|
+
event.preventDefault();
|
|
266
|
+
var nextDisplayValue = deleteTimeSegmentDigit(currentDisplayValue, currentSegment, precision);
|
|
267
|
+
var nextSegment = currentSegment;
|
|
268
|
+
if (nextDisplayValue === currentDisplayValue) {
|
|
269
|
+
var previousSegment = getPreviousTimeSegment(currentSegment);
|
|
270
|
+
if (previousSegment) {
|
|
271
|
+
nextSegment = previousSegment;
|
|
272
|
+
nextDisplayValue = deleteTimeSegmentDigit(currentDisplayValue, previousSegment, precision);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
updateEditingValue(nextDisplayValue);
|
|
276
|
+
selectSegment(nextSegment);
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
case 'Delete': {
|
|
280
|
+
event.preventDefault();
|
|
281
|
+
updateEditingValue(clearTimeSegment(currentDisplayValue, currentSegment, precision));
|
|
282
|
+
selectSegment(currentSegment);
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
case 'Enter': {
|
|
286
|
+
if (isSelectHighlightedSlot()) {
|
|
287
|
+
event.preventDefault();
|
|
288
|
+
}
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
case ' ': {
|
|
292
|
+
event.preventDefault();
|
|
293
|
+
var nextSegment = getNextTimeSegment(currentSegment, precision);
|
|
294
|
+
var nextDisplayValue = commitTimeSegmentOnLeave(currentDisplayValue, currentSegment, precision);
|
|
295
|
+
updateEditingValue(nextDisplayValue);
|
|
296
|
+
if (nextSegment) {
|
|
297
|
+
selectSegment(nextSegment);
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
selectSegment(currentSegment);
|
|
301
|
+
}
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
default:
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
};
|
|
308
|
+
var handlePaste = function (event) {
|
|
309
|
+
var _a, _b, _c;
|
|
310
|
+
onPaste === null || onPaste === void 0 ? void 0 : onPaste(event);
|
|
311
|
+
if (event.defaultPrevented || disabled) {
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
var pastedValue = (_b = (_a = event.clipboardData) === null || _a === void 0 ? void 0 : _a.getData('text')) !== null && _b !== void 0 ? _b : '';
|
|
315
|
+
var nextDisplayValue = parsePastedTimeValue(pastedValue, precision);
|
|
316
|
+
event.preventDefault();
|
|
317
|
+
if (isTimeDisplayEmpty(nextDisplayValue)) {
|
|
318
|
+
(_c = inputRef.current) === null || _c === void 0 ? void 0 : _c.blink();
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
updateEditingValue(nextDisplayValue);
|
|
322
|
+
selectSegment('hours');
|
|
323
|
+
};
|
|
324
|
+
return (React.createElement(CommonWrapper, __assign({}, props),
|
|
325
|
+
React.createElement("span", { ref: rootRef, className: styles.root(), "data-tid": TimePickerDataTids.root },
|
|
326
|
+
React.createElement(TimeInput, __assign({}, inputProps, { "data-tid": TimePickerDataTids.input, ref: inputRef, disabled: disabled, size: size, precision: precision, rightContent: rightContent, value: displayValue, onClick: handleClick, onBlur: handleBlur, onFocus: handleFocus, onRightContentMouseDown: handleRightContentMouseDown, onMouseDownCapture: handleMouseDownCapture, onKeyDown: handleKeyDown, onSelectSegment: handleSelectSegmentByMouse, onPaste: handlePaste })),
|
|
327
|
+
dropdown && isDropdownOpened && rootRef.current && (React.createElement(Popup, { opened: true, hasShadow: true, "data-tid": TimePickerDataTids.popup, anchorElement: rootRef.current, priority: ZIndex.priorities.PopupMenu, positions: getMenuPositions(menuPos, menuAlign), margin: parseInt(theme.menuOffsetY) - 1 },
|
|
328
|
+
React.createElement("div", { className: styles.popup(theme), onMouseDown: function (event) { return event.preventDefault(); } },
|
|
329
|
+
React.createElement(Menu, { hasMargin: false, width: 'auto', maxHeight: popupMaxHeight }, resolvedSlots.map(function (slot, index) {
|
|
330
|
+
var normalizedSlot = normalizeSlotValue(slot.time, precision);
|
|
331
|
+
var state;
|
|
332
|
+
if (highlightedSlotIndex === index) {
|
|
333
|
+
state = 'hover';
|
|
334
|
+
}
|
|
335
|
+
else if (normalizedSlot === normalizedValue) {
|
|
336
|
+
state = 'selected';
|
|
337
|
+
}
|
|
338
|
+
return (React.createElement(MenuItem, { key: "".concat(slot.time, "-").concat(index), disabled: slot.disabled, size: size, state: state, onClick: function () { return selectSlot(slot); } },
|
|
339
|
+
React.createElement("span", { ref: function (node) {
|
|
340
|
+
if (node) {
|
|
341
|
+
slotRefs.current.set(index, node);
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
slotRefs.current.delete(index);
|
|
345
|
+
}
|
|
346
|
+
}, "data-tid": TimePickerDataTids.slot, className: styles.slot() },
|
|
347
|
+
React.createElement("span", { className: styles.slotTime() }, normalizedSlot),
|
|
348
|
+
slot.info && React.createElement("span", { className: styles.slotInfo(theme) }, slot.info))));
|
|
349
|
+
}))))))));
|
|
350
|
+
});
|
|
351
|
+
//# sourceMappingURL=TimePicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimePicker.js","sourceRoot":"","sources":["../../../components/TimePicker/TimePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { AriaAttributes, ReactNode } from 'react';\nimport React, { useCallback, useContext, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from 'react';\n\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { Menu } from '../../internal/Menu/index.js';\nimport { Popup } from '../../internal/Popup/index.js';\nimport { ZIndex } from '../../internal/ZIndex/index.js';\nimport { isShortcutSelectAll } from '../../lib/events/keyboard/identifiers.js';\nimport { forwardRefAndName } from '../../lib/forwardRefAndName.js';\nimport { getMenuPositions } from '../../lib/getMenuPositions.js';\nimport { useStyles } from '../../lib/renderEnvironment/index.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport type { InputProps } from '../Input/index.js';\nimport { MenuItem } from '../MenuItem/index.js';\nimport { scrollSelectedSlotIntoView } from './helpers/scrollSelectedSlotIntoView.js';\nimport { DIGIT_REGEXP } from './helpers/TimePicker.constants.js';\nimport {\n clearTimeSegment,\n commitTimeSegmentOnLeave,\n deleteTimeSegmentDigit,\n formatDigitToTimeSegment,\n shiftTimeSegmentValue,\n} from './helpers/TimePicker.editing.js';\nimport { DEFAULT_TIME_PICKER_SLOTS, getTimePickerPopupMaxHeight } from './helpers/TimePicker.layout.js';\nimport { getNextTimeSegment, getPreviousTimeSegment } from './helpers/TimePicker.selection.js';\nimport type { TimePrecision, TimeSegment, TimeSlot } from './helpers/TimePicker.shared.js';\nimport {\n getEmptyDisplayValue,\n isTimeDisplayEmpty,\n normalizeSlotValue,\n normalizeTimeValue,\n parsePastedTimeValue,\n} from './helpers/TimePicker.value.js';\nimport { useTimePickerDropdown } from './hooks/useTimePickerDropdown.js';\nimport { useTimePickerSelection } from './hooks/useTimePickerSelection.js';\nimport { useTimePickerValue } from './hooks/useTimePickerValue.js';\nimport type { TimeInputRef } from './TimeInput.js';\nimport { TimeInput } from './TimeInput.js';\nimport { getStyles } from './TimePicker.styles.js';\n\nexport interface TimePickerProps\n extends\n Omit<InputProps, 'type' | 'value' | 'defaultValue' | 'onValueChange' | 'rightIcon' | 'inputMode'>,\n Pick<AriaAttributes, 'aria-describedby' | 'aria-label'> {\n dropdown?: boolean;\n menuPos?: 'top' | 'bottom';\n menuAlign?: 'left' | 'right';\n precision?: TimePrecision;\n slots?: TimeSlot[];\n rightContent?: ReactNode;\n value?: string | null;\n\n onValueChange?(value: string): void;\n}\n\nexport interface TimePickerRef {\n focus(): void;\n\n blur(): void;\n\n getNode(): HTMLElement | null;\n\n getRootNode(): HTMLElement | null;\n}\n\nexport const TimePickerDataTids = {\n root: 'TimePicker__root',\n input: 'TimePicker__input',\n popup: 'TimePicker__popup',\n slot: 'TimePicker__slot',\n rightContent: 'TimePicker__rightContent',\n} as const;\n\nexport const TimePicker = forwardRefAndName<TimePickerRef, TimePickerProps>('TimePicker', (props, ref) => {\n const {\n disabled,\n dropdown = false,\n precision = 'minute',\n size = 'small',\n slots,\n menuPos,\n menuAlign,\n rightContent,\n value: valueProp,\n onValueChange,\n onFocus,\n onBlur,\n onClick,\n onKeyDown,\n onPaste,\n ...inputProps\n } = props;\n\n const theme = useContext(ThemeContext);\n\n const styles = useStyles(getStyles);\n\n const [isInputFocused, setIsInputFocused] = useState(false);\n\n const inputRef = useRef<TimeInputRef>(null);\n const rootRef = useRef<HTMLSpanElement>(null);\n const slotRefs = useRef(new Map<number, HTMLSpanElement>());\n const isMouseFocusRef = useRef(false);\n const isMouseDownOnFragmentRef = useRef(false);\n const mouseDownSegmentRef = useRef<TimeSegment | null>(null);\n\n const resolvedSlots = useMemo(() => slots ?? DEFAULT_TIME_PICKER_SLOTS, [slots]);\n\n const { editingValue, editingValueRef, setEditingValue, updateEditingValue, commitEditingValue, clearEditingValue } =\n useTimePickerValue({ isInputFocused, precision, value: valueProp, onValueChange });\n\n let displayValue = editingValue;\n\n if (isInputFocused) {\n displayValue = editingValue || getEmptyDisplayValue(precision);\n } else if (isTimeDisplayEmpty(editingValue)) {\n displayValue = '';\n }\n\n const { selectedSegment, selectSegment } = useTimePickerSelection({\n isInputFocused,\n precision,\n displayValue,\n inputRef,\n });\n\n const popupMaxHeight = getTimePickerPopupMaxHeight(size, theme);\n\n const normalizedValue = normalizeTimeValue(editingValue || valueProp || '', precision);\n\n const selectedSlotIndex = resolvedSlots.findIndex(\n (slot) => normalizeSlotValue(slot.time, precision) === normalizedValue,\n );\n\n const normalizeCurrentSegmentIfNeeded = useCallback(\n (segment: TimeSegment) => {\n const nextDisplayValue = commitTimeSegmentOnLeave(\n editingValue || getEmptyDisplayValue(precision),\n segment,\n precision,\n );\n\n updateEditingValue(nextDisplayValue);\n },\n [editingValue, precision, updateEditingValue],\n );\n\n const focusInput = useCallback(() => {\n inputRef.current?.focus();\n }, []);\n\n const blurInput = useCallback(() => {\n inputRef.current?.blur();\n }, []);\n\n const {\n isDropdownOpened,\n highlightedSlotIndex,\n openDropdown,\n closeDropdown,\n resetHighlightedSlot,\n tryNavigateSlots,\n } = useTimePickerDropdown({\n disabled,\n dropdown,\n slots: resolvedSlots,\n selectedSlotIndex: selectedSlotIndex >= 0 ? selectedSlotIndex : null,\n });\n\n const selectSlot = useCallback(\n (slot: TimeSlot) => {\n if (slot.disabled) {\n return;\n }\n\n const nextValue = normalizeSlotValue(slot.time, precision);\n\n setEditingValue(nextValue);\n onValueChange?.(nextValue);\n closeDropdown();\n },\n [closeDropdown, onValueChange, precision, setEditingValue],\n );\n\n const isSelectHighlightedSlot = useCallback(() => {\n if (highlightedSlotIndex === null) {\n return false;\n }\n\n const slot = resolvedSlots[highlightedSlotIndex];\n\n if (!slot || slot.disabled) {\n return true;\n }\n\n selectSlot(slot);\n return true;\n }, [highlightedSlotIndex, resolvedSlots, selectSlot]);\n\n useLayoutEffect(() => {\n if (!isDropdownOpened) {\n return;\n }\n\n const selectedIndex = highlightedSlotIndex ?? selectedSlotIndex;\n\n if (selectedIndex < 0) {\n return;\n }\n\n const targetNode = slotRefs.current.get(selectedIndex);\n\n if (targetNode) {\n scrollSelectedSlotIntoView(targetNode);\n }\n }, [highlightedSlotIndex, isDropdownOpened, selectedSlotIndex]);\n\n useImperativeHandle(\n ref,\n () => ({\n focus: focusInput,\n blur: blurInput,\n getNode: () => inputRef.current?.getNode() ?? null,\n getRootNode: () => rootRef.current,\n }),\n [blurInput, focusInput],\n );\n\n const handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n setIsInputFocused(true);\n openDropdown();\n\n if (isMouseDownOnFragmentRef.current && !isInputFocused) {\n if (isTimeDisplayEmpty(editingValueRef.current)) {\n selectSegment('hours');\n } else if (mouseDownSegmentRef.current) {\n selectSegment(mouseDownSegmentRef.current);\n }\n } else {\n selectSegment('hours');\n }\n\n onFocus?.(event);\n };\n\n const handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n setIsInputFocused(false);\n isMouseFocusRef.current = false;\n isMouseDownOnFragmentRef.current = false;\n mouseDownSegmentRef.current = null;\n closeDropdown();\n\n if (isTimeDisplayEmpty(editingValueRef.current)) {\n clearEditingValue();\n onBlur?.(event);\n return;\n }\n\n commitEditingValue();\n onBlur?.(event);\n };\n\n const handleClick = (event: React.MouseEvent<HTMLInputElement>) => {\n openDropdown();\n\n onClick?.(event);\n };\n\n const handleMouseDownCapture = (event: React.MouseEvent<HTMLInputElement>) => {\n const segment = inputRef.current?.getSegment(event.target) ?? null;\n const isFragment = segment !== null;\n\n if (isInputFocused && !isFragment) {\n event.preventDefault();\n }\n\n isMouseFocusRef.current = !isInputFocused;\n isMouseDownOnFragmentRef.current = isFragment;\n mouseDownSegmentRef.current = segment;\n };\n\n const handleSelectSegmentByMouse = (segment: TimeSegment) => {\n openDropdown();\n\n if (disabled) {\n return;\n }\n\n if (!(isMouseFocusRef.current && isTimeDisplayEmpty(editingValueRef.current)) && selectedSegment !== segment) {\n normalizeCurrentSegmentIfNeeded(selectedSegment);\n selectSegment(segment);\n }\n\n isMouseFocusRef.current = false;\n isMouseDownOnFragmentRef.current = false;\n mouseDownSegmentRef.current = null;\n };\n\n const handleRightContentMouseDown = (event: React.MouseEvent<HTMLSpanElement>) => {\n if (disabled) {\n return;\n }\n\n event.preventDefault();\n openDropdown();\n focusInput();\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(event);\n\n if (event.defaultPrevented || disabled) {\n return;\n }\n\n if (isShortcutSelectAll(event)) {\n event.preventDefault();\n inputRef.current?.selectAll();\n return;\n }\n\n if (event.altKey || event.ctrlKey || event.metaKey) {\n return;\n }\n\n const currentDisplayValue = displayValue;\n const currentSegment = selectedSegment;\n const isAllSelected = inputRef.current?.isAllSelected() ?? false;\n\n if (isAllSelected && (event.key === 'Backspace' || event.key === 'Delete')) {\n event.preventDefault();\n updateEditingValue(getEmptyDisplayValue(precision));\n selectSegment('hours');\n return;\n }\n\n if (DIGIT_REGEXP.test(event.key)) {\n event.preventDefault();\n\n resetHighlightedSlot();\n\n const result = formatDigitToTimeSegment(currentDisplayValue, currentSegment, event.key, precision);\n\n if (result.shouldBlink) {\n inputRef.current?.blink();\n return;\n }\n\n updateEditingValue(result.nextValue);\n selectSegment(result.selectedSegment);\n return;\n }\n\n switch (event.key) {\n case 'ArrowLeft': {\n event.preventDefault();\n normalizeCurrentSegmentIfNeeded(currentSegment);\n selectSegment(getPreviousTimeSegment(currentSegment) ?? currentSegment);\n return;\n }\n\n case 'ArrowRight': {\n event.preventDefault();\n normalizeCurrentSegmentIfNeeded(currentSegment);\n selectSegment(getNextTimeSegment(currentSegment, precision) ?? currentSegment);\n return;\n }\n\n case 'ArrowUp':\n case 'ArrowDown': {\n event.preventDefault();\n\n const slotStep = event.key === 'ArrowUp' ? -1 : 1;\n\n if (tryNavigateSlots(slotStep)) {\n return;\n }\n\n const step = event.key === 'ArrowUp' ? 1 : -1;\n\n updateEditingValue(shiftTimeSegmentValue(currentDisplayValue, currentSegment, step, precision));\n selectSegment(currentSegment);\n return;\n }\n\n case 'Backspace': {\n event.preventDefault();\n\n let nextDisplayValue = deleteTimeSegmentDigit(currentDisplayValue, currentSegment, precision);\n let nextSegment = currentSegment;\n\n if (nextDisplayValue === currentDisplayValue) {\n const previousSegment = getPreviousTimeSegment(currentSegment);\n\n if (previousSegment) {\n nextSegment = previousSegment;\n nextDisplayValue = deleteTimeSegmentDigit(currentDisplayValue, previousSegment, precision);\n }\n }\n\n updateEditingValue(nextDisplayValue);\n selectSegment(nextSegment);\n return;\n }\n\n case 'Delete': {\n event.preventDefault();\n updateEditingValue(clearTimeSegment(currentDisplayValue, currentSegment, precision));\n selectSegment(currentSegment);\n return;\n }\n\n case 'Enter': {\n if (isSelectHighlightedSlot()) {\n event.preventDefault();\n }\n return;\n }\n\n case ' ': {\n event.preventDefault();\n\n const nextSegment = getNextTimeSegment(currentSegment, precision);\n const nextDisplayValue = commitTimeSegmentOnLeave(currentDisplayValue, currentSegment, precision);\n\n updateEditingValue(nextDisplayValue);\n\n if (nextSegment) {\n selectSegment(nextSegment);\n } else {\n selectSegment(currentSegment);\n }\n return;\n }\n default:\n return;\n }\n };\n\n const handlePaste = (event: React.ClipboardEvent<HTMLInputElement>) => {\n onPaste?.(event);\n\n if (event.defaultPrevented || disabled) {\n return;\n }\n\n const pastedValue = event.clipboardData?.getData('text') ?? '';\n const nextDisplayValue = parsePastedTimeValue(pastedValue, precision);\n\n event.preventDefault();\n\n if (isTimeDisplayEmpty(nextDisplayValue)) {\n inputRef.current?.blink();\n return;\n }\n\n updateEditingValue(nextDisplayValue);\n selectSegment('hours');\n };\n\n return (\n <CommonWrapper {...props}>\n <span ref={rootRef} className={styles.root()} data-tid={TimePickerDataTids.root}>\n <TimeInput\n {...inputProps}\n data-tid={TimePickerDataTids.input}\n ref={inputRef}\n disabled={disabled}\n size={size}\n precision={precision}\n rightContent={rightContent}\n value={displayValue}\n onClick={handleClick}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onRightContentMouseDown={handleRightContentMouseDown}\n onMouseDownCapture={handleMouseDownCapture}\n onKeyDown={handleKeyDown}\n onSelectSegment={handleSelectSegmentByMouse}\n onPaste={handlePaste}\n />\n\n {dropdown && isDropdownOpened && rootRef.current && (\n <Popup\n opened\n hasShadow\n data-tid={TimePickerDataTids.popup}\n anchorElement={rootRef.current}\n priority={ZIndex.priorities.PopupMenu}\n positions={getMenuPositions(menuPos, menuAlign)}\n margin={parseInt(theme.menuOffsetY) - 1}\n >\n <div className={styles.popup(theme)} onMouseDown={(event) => event.preventDefault()}>\n <Menu hasMargin={false} width={'auto'} maxHeight={popupMaxHeight}>\n {resolvedSlots.map((slot, index) => {\n const normalizedSlot = normalizeSlotValue(slot.time, precision);\n\n let state: 'hover' | 'selected' | undefined;\n\n if (highlightedSlotIndex === index) {\n state = 'hover';\n } else if (normalizedSlot === normalizedValue) {\n state = 'selected';\n }\n\n return (\n <MenuItem\n key={`${slot.time}-${index}`}\n disabled={slot.disabled}\n size={size}\n state={state}\n onClick={() => selectSlot(slot)}\n >\n <span\n ref={(node) => {\n if (node) {\n slotRefs.current.set(index, node);\n } else {\n slotRefs.current.delete(index);\n }\n }}\n data-tid={TimePickerDataTids.slot}\n className={styles.slot()}\n >\n <span className={styles.slotTime()}>{normalizedSlot}</span>\n {slot.info && <span className={styles.slotInfo(theme)}>{slot.info}</span>}\n </span>\n </MenuItem>\n );\n })}\n </Menu>\n </div>\n </Popup>\n )}\n </span>\n </CommonWrapper>\n );\n});\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Theme } from '../../lib/theming/Theme.js';
|
|
2
|
+
export declare const getStyles: import("../../lib/theming/Emotion.js").StylesGetter<{
|
|
3
|
+
root(): string;
|
|
4
|
+
inputRoot(): string;
|
|
5
|
+
popup(t: Theme): string;
|
|
6
|
+
rightContent(): string;
|
|
7
|
+
rightContentInteractive(): string;
|
|
8
|
+
rightContentDefault(t: Theme): string;
|
|
9
|
+
slot(): string;
|
|
10
|
+
slotTime(): string;
|
|
11
|
+
slotInfo(t: Theme): string;
|
|
12
|
+
}>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
2
|
+
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
3
|
+
return cooked;
|
|
4
|
+
};
|
|
5
|
+
import { memoizeGetStyles } from '../../lib/theming/Emotion.js';
|
|
6
|
+
export var getStyles = memoizeGetStyles(function (_a) {
|
|
7
|
+
var css = _a.css;
|
|
8
|
+
return ({
|
|
9
|
+
root: function () {
|
|
10
|
+
return css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: inline-block;\n position: relative;\n line-height: normal;\n "], ["\n display: inline-block;\n position: relative;\n line-height: normal;\n "])));
|
|
11
|
+
},
|
|
12
|
+
inputRoot: function () {
|
|
13
|
+
return css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n input {\n font-variant-numeric: tabular-nums;\n }\n "], ["\n input {\n font-variant-numeric: tabular-nums;\n }\n "])));
|
|
14
|
+
},
|
|
15
|
+
popup: function (t) {
|
|
16
|
+
return css(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n background: ", ";\n border-radius: ", ";\n box-shadow: ", ";\n font-variant-numeric: tabular-nums;\n overflow: hidden;\n "], ["\n background: ", ";\n border-radius: ", ";\n box-shadow: ", ";\n font-variant-numeric: tabular-nums;\n overflow: hidden;\n "])), t.calendarBg, t.calendarBorderRadius, t.pickerShadow);
|
|
17
|
+
},
|
|
18
|
+
rightContent: function () {
|
|
19
|
+
return css(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n font-variant-numeric: tabular-nums;\n user-select: none;\n "], ["\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n font-variant-numeric: tabular-nums;\n user-select: none;\n "])));
|
|
20
|
+
},
|
|
21
|
+
rightContentInteractive: function () {
|
|
22
|
+
return css(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n cursor: pointer;\n "], ["\n cursor: pointer;\n "])));
|
|
23
|
+
},
|
|
24
|
+
rightContentDefault: function (t) {
|
|
25
|
+
return css(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n color: ", ";\n "], ["\n color: ", ";\n "])), t.textColorDefault);
|
|
26
|
+
},
|
|
27
|
+
slot: function () {
|
|
28
|
+
return css(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n font-variant-numeric: tabular-nums;\n "], ["\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n font-variant-numeric: tabular-nums;\n "])));
|
|
29
|
+
},
|
|
30
|
+
slotTime: function () {
|
|
31
|
+
return css(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n "], ["\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n "])));
|
|
32
|
+
},
|
|
33
|
+
slotInfo: function (t) {
|
|
34
|
+
return css(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n color: ", ";\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n "], ["\n color: ", ";\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n "])), t.menuItemCommentColor);
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9;
|
|
39
|
+
//# sourceMappingURL=TimePicker.styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimePicker.styles.js","sourceRoot":"","sources":["../../../components/TimePicker/TimePicker.styles.ts"],"names":[],"mappings":";;;;AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAGhE,MAAM,CAAC,IAAM,SAAS,GAAG,gBAAgB,CAAC,UAAC,EAAgB;QAAd,GAAG,SAAA;IAAgB,OAAA,CAAC;QAC/D,IAAI;YACF,OAAO,GAAG,gKAAA,6FAIT,KAAC;QACJ,CAAC;QAED,SAAS;YACP,OAAO,GAAG,gJAAA,6EAIT,KAAC;QACJ,CAAC;QAED,KAAK,YAAC,CAAQ;YACZ,OAAO,GAAG,6NAAA,sBACM,EAAY,0BACT,EAAsB,uBACzB,EAAc,6EAG7B,KALe,CAAC,CAAC,UAAU,EACT,CAAC,CAAC,oBAAoB,EACzB,CAAC,CAAC,YAAY,EAG5B;QACJ,CAAC;QAED,YAAY;YACV,OAAO,GAAG,6PAAA,0LAOT,KAAC;QACJ,CAAC;QAED,uBAAuB;YACrB,OAAO,GAAG,mGAAA,gCAET,KAAC;QACJ,CAAC;QAED,mBAAmB,YAAC,CAAQ;YAC1B,OAAO,GAAG,+FAAA,iBACC,EAAkB,SAC5B,KADU,CAAC,CAAC,gBAAgB,EAC3B;QACJ,CAAC;QAED,IAAI;YACF,OAAO,GAAG,6MAAA,0IAMT,KAAC;QACJ,CAAC;QAED,QAAQ;YACN,OAAO,GAAG,kJAAA,+EAGT,KAAC;QACJ,CAAC;QAED,QAAQ,YAAC,CAAQ;YACf,OAAO,GAAG,sKAAA,iBACC,EAAsB,gFAGhC,KAHU,CAAC,CAAC,oBAAoB,EAG/B;QACJ,CAAC;KACF,CAAC;AA1E8D,CA0E9D,CAAC,CAAC","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\n\nimport { memoizeGetStyles } from '../../lib/theming/Emotion.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\n\nexport const getStyles = memoizeGetStyles(({ css }: Emotion) => ({\n root() {\n return css`\n display: inline-block;\n position: relative;\n line-height: normal;\n `;\n },\n\n inputRoot() {\n return css`\n input {\n font-variant-numeric: tabular-nums;\n }\n `;\n },\n\n popup(t: Theme) {\n return css`\n background: ${t.calendarBg};\n border-radius: ${t.calendarBorderRadius};\n box-shadow: ${t.pickerShadow};\n font-variant-numeric: tabular-nums;\n overflow: hidden;\n `;\n },\n\n rightContent() {\n return css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n font-variant-numeric: tabular-nums;\n user-select: none;\n `;\n },\n\n rightContentInteractive() {\n return css`\n cursor: pointer;\n `;\n },\n\n rightContentDefault(t: Theme) {\n return css`\n color: ${t.textColorDefault};\n `;\n },\n\n slot() {\n return css`\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n font-variant-numeric: tabular-nums;\n `;\n },\n\n slotTime() {\n return css`\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n `;\n },\n\n slotInfo(t: Theme) {\n return css`\n color: ${t.menuItemCommentColor};\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n `;\n },\n}));\n"]}
|