@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,19 @@
|
|
|
1
|
+
import type { SizeProp } from '../../../lib/types/props.js';
|
|
2
|
+
import type { TimePrecision, TimeSegment, TimeSlot } from './TimePicker.shared.js';
|
|
3
|
+
export declare const TIME_PLACEHOLDER_CHAR = "\u2212";
|
|
4
|
+
export declare const TIME_SEPARATOR = ":";
|
|
5
|
+
export declare const TIME_SEGMENT_LENGTH = 2;
|
|
6
|
+
export declare const HOURS_MAX_VALUE = 23;
|
|
7
|
+
export declare const MINUTES_AND_SECONDS_MAX_VALUE = 59;
|
|
8
|
+
export declare const ZERO_PAD_CHAR = "0";
|
|
9
|
+
export declare const EMPTY_VALUE = "";
|
|
10
|
+
export declare const DIGIT_REGEXP: RegExp;
|
|
11
|
+
export declare const NON_DIGIT_REGEXP: RegExp;
|
|
12
|
+
export declare const TIME_VALUE_SPLIT_REGEXP: RegExp;
|
|
13
|
+
export declare const EMPTY_SEGMENT: string;
|
|
14
|
+
export declare const TIME_SEGMENTS_BY_PRECISION: Record<TimePrecision, TimeSegment[]>;
|
|
15
|
+
export declare const MAX_DIGITS_BY_PRECISION: Record<TimePrecision, number>;
|
|
16
|
+
export declare const FIRST_DIGIT_MAX_BY_SEGMENT: Record<TimeSegment, number>;
|
|
17
|
+
export declare const INPUT_WIDTH_BY_SIZE: Record<SizeProp, number>;
|
|
18
|
+
export declare const INPUT_WIDTH_WITH_SECONDS_BY_SIZE: Record<SizeProp, number>;
|
|
19
|
+
export declare const DEFAULT_TIME_PICKER_SLOTS: TimeSlot[];
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export var TIME_PLACEHOLDER_CHAR = '\u2212';
|
|
2
|
+
export var TIME_SEPARATOR = ':';
|
|
3
|
+
export var TIME_SEGMENT_LENGTH = 2;
|
|
4
|
+
var HOURS_FIRST_DIGIT_MAX = 2;
|
|
5
|
+
var MINUTES_AND_SECONDS_FIRST_DIGIT_MAX = 5;
|
|
6
|
+
var MINUTE_PRECISION_DIGITS_COUNT = 4;
|
|
7
|
+
var SECOND_PRECISION_DIGITS_COUNT = 6;
|
|
8
|
+
export var HOURS_MAX_VALUE = 23;
|
|
9
|
+
export var MINUTES_AND_SECONDS_MAX_VALUE = 59;
|
|
10
|
+
export var ZERO_PAD_CHAR = '0';
|
|
11
|
+
export var EMPTY_VALUE = '';
|
|
12
|
+
export var DIGIT_REGEXP = /\d/;
|
|
13
|
+
export var NON_DIGIT_REGEXP = /\D/g;
|
|
14
|
+
export var TIME_VALUE_SPLIT_REGEXP = /:/;
|
|
15
|
+
export var EMPTY_SEGMENT = TIME_PLACEHOLDER_CHAR.repeat(TIME_SEGMENT_LENGTH);
|
|
16
|
+
export var TIME_SEGMENTS_BY_PRECISION = {
|
|
17
|
+
minute: ['hours', 'minutes'],
|
|
18
|
+
second: ['hours', 'minutes', 'seconds'],
|
|
19
|
+
};
|
|
20
|
+
export var MAX_DIGITS_BY_PRECISION = {
|
|
21
|
+
minute: MINUTE_PRECISION_DIGITS_COUNT,
|
|
22
|
+
second: SECOND_PRECISION_DIGITS_COUNT,
|
|
23
|
+
};
|
|
24
|
+
export var FIRST_DIGIT_MAX_BY_SEGMENT = {
|
|
25
|
+
hours: HOURS_FIRST_DIGIT_MAX,
|
|
26
|
+
minutes: MINUTES_AND_SECONDS_FIRST_DIGIT_MAX,
|
|
27
|
+
seconds: MINUTES_AND_SECONDS_FIRST_DIGIT_MAX,
|
|
28
|
+
};
|
|
29
|
+
export var INPUT_WIDTH_BY_SIZE = {
|
|
30
|
+
small: 80,
|
|
31
|
+
medium: 100,
|
|
32
|
+
large: 120,
|
|
33
|
+
};
|
|
34
|
+
export var INPUT_WIDTH_WITH_SECONDS_BY_SIZE = {
|
|
35
|
+
small: 106,
|
|
36
|
+
medium: 128,
|
|
37
|
+
large: 152,
|
|
38
|
+
};
|
|
39
|
+
export var DEFAULT_TIME_PICKER_SLOTS = Array.from({ length: 10 }, function (_, index) { return ({
|
|
40
|
+
time: "".concat(String(index + 9).padStart(TIME_SEGMENT_LENGTH, ZERO_PAD_CHAR)).concat(TIME_SEPARATOR, "00"),
|
|
41
|
+
}); });
|
|
42
|
+
//# sourceMappingURL=TimePicker.constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimePicker.constants.js","sourceRoot":"","sources":["../../../../components/TimePicker/helpers/TimePicker.constants.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,IAAM,qBAAqB,GAAG,QAAQ,CAAC;AAC9C,MAAM,CAAC,IAAM,cAAc,GAAG,GAAG,CAAC;AAClC,MAAM,CAAC,IAAM,mBAAmB,GAAG,CAAC,CAAC;AAErC,IAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,IAAM,mCAAmC,GAAG,CAAC,CAAC;AAC9C,IAAM,6BAA6B,GAAG,CAAC,CAAC;AACxC,IAAM,6BAA6B,GAAG,CAAC,CAAC;AAExC,MAAM,CAAC,IAAM,eAAe,GAAG,EAAE,CAAC;AAClC,MAAM,CAAC,IAAM,6BAA6B,GAAG,EAAE,CAAC;AAChD,MAAM,CAAC,IAAM,aAAa,GAAG,GAAG,CAAC;AACjC,MAAM,CAAC,IAAM,WAAW,GAAG,EAAE,CAAC;AAC9B,MAAM,CAAC,IAAM,YAAY,GAAG,IAAI,CAAC;AACjC,MAAM,CAAC,IAAM,gBAAgB,GAAG,KAAK,CAAC;AACtC,MAAM,CAAC,IAAM,uBAAuB,GAAG,GAAG,CAAC;AAC3C,MAAM,CAAC,IAAM,aAAa,GAAG,qBAAqB,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAE/E,MAAM,CAAC,IAAM,0BAA0B,GAAyC;IAC9E,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC;CACxC,CAAC;AAEF,MAAM,CAAC,IAAM,uBAAuB,GAAkC;IACpE,MAAM,EAAE,6BAA6B;IACrC,MAAM,EAAE,6BAA6B;CACtC,CAAC;AAEF,MAAM,CAAC,IAAM,0BAA0B,GAAgC;IACrE,KAAK,EAAE,qBAAqB;IAC5B,OAAO,EAAE,mCAAmC;IAC5C,OAAO,EAAE,mCAAmC;CAC7C,CAAC;AAEF,MAAM,CAAC,IAAM,mBAAmB,GAA6B;IAC3D,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,GAAG;CACX,CAAC;AAEF,MAAM,CAAC,IAAM,gCAAgC,GAA6B;IACxE,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,GAAG;CACX,CAAC;AAEF,MAAM,CAAC,IAAM,yBAAyB,GAAe,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,UAAC,CAAC,EAAE,KAAK,IAAK,OAAA,CAAC;IAC7F,IAAI,EAAE,UAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,EAAE,aAAa,CAAC,SAAG,cAAc,OAAI;CAC7F,CAAC,EAF4F,CAE5F,CAAC,CAAC","sourcesContent":["import type { SizeProp } from '../../../lib/types/props.js';\nimport type { TimePrecision, TimeSegment, TimeSlot } from './TimePicker.shared.js';\n\nexport const TIME_PLACEHOLDER_CHAR = '\\u2212';\nexport const TIME_SEPARATOR = ':';\nexport const TIME_SEGMENT_LENGTH = 2;\n\nconst HOURS_FIRST_DIGIT_MAX = 2;\nconst MINUTES_AND_SECONDS_FIRST_DIGIT_MAX = 5;\nconst MINUTE_PRECISION_DIGITS_COUNT = 4;\nconst SECOND_PRECISION_DIGITS_COUNT = 6;\n\nexport const HOURS_MAX_VALUE = 23;\nexport const MINUTES_AND_SECONDS_MAX_VALUE = 59;\nexport const ZERO_PAD_CHAR = '0';\nexport const EMPTY_VALUE = '';\nexport const DIGIT_REGEXP = /\\d/;\nexport const NON_DIGIT_REGEXP = /\\D/g;\nexport const TIME_VALUE_SPLIT_REGEXP = /:/;\nexport const EMPTY_SEGMENT = TIME_PLACEHOLDER_CHAR.repeat(TIME_SEGMENT_LENGTH);\n\nexport const TIME_SEGMENTS_BY_PRECISION: Record<TimePrecision, TimeSegment[]> = {\n minute: ['hours', 'minutes'],\n second: ['hours', 'minutes', 'seconds'],\n};\n\nexport const MAX_DIGITS_BY_PRECISION: Record<TimePrecision, number> = {\n minute: MINUTE_PRECISION_DIGITS_COUNT,\n second: SECOND_PRECISION_DIGITS_COUNT,\n};\n\nexport const FIRST_DIGIT_MAX_BY_SEGMENT: Record<TimeSegment, number> = {\n hours: HOURS_FIRST_DIGIT_MAX,\n minutes: MINUTES_AND_SECONDS_FIRST_DIGIT_MAX,\n seconds: MINUTES_AND_SECONDS_FIRST_DIGIT_MAX,\n};\n\nexport const INPUT_WIDTH_BY_SIZE: Record<SizeProp, number> = {\n small: 80,\n medium: 100,\n large: 120,\n};\n\nexport const INPUT_WIDTH_WITH_SECONDS_BY_SIZE: Record<SizeProp, number> = {\n small: 106,\n medium: 128,\n large: 152,\n};\n\nexport const DEFAULT_TIME_PICKER_SLOTS: TimeSlot[] = Array.from({ length: 10 }, (_, index) => ({\n time: `${String(index + 9).padStart(TIME_SEGMENT_LENGTH, ZERO_PAD_CHAR)}${TIME_SEPARATOR}00`,\n}));\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type TimeDigitInputResult, type TimePrecision, type TimeSegment } from './TimePicker.shared.js';
|
|
2
|
+
export declare const clearTimeSegment: (value: string, segment: TimeSegment, precision: TimePrecision) => string;
|
|
3
|
+
export declare const deleteTimeSegmentDigit: (value: string, segment: TimeSegment, precision: TimePrecision) => string;
|
|
4
|
+
export declare const commitTimeSegmentOnLeave: (value: string, segment: TimeSegment, precision: TimePrecision) => string;
|
|
5
|
+
export declare const shiftTimeSegmentValue: (value: string, segment: TimeSegment, step: 1 | -1, precision: TimePrecision) => string;
|
|
6
|
+
export declare const formatDigitToTimeSegment: (value: string, segment: TimeSegment, digit: string, precision: TimePrecision) => TimeDigitInputResult;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { DIGIT_REGEXP, EMPTY_SEGMENT, EMPTY_VALUE, FIRST_DIGIT_MAX_BY_SEGMENT, TIME_PLACEHOLDER_CHAR, TIME_SEGMENT_LENGTH, ZERO_PAD_CHAR, } from './TimePicker.constants.js';
|
|
2
|
+
import { getNextTimeSegment } from './TimePicker.selection.js';
|
|
3
|
+
import { getDigits, getTimeSegmentMax, hasPendingSingleDigit, normalizeEditableSegment, } from './TimePicker.shared.js';
|
|
4
|
+
import { getTimeSegmentValue, replaceTimeSegment } from './TimePicker.value.js';
|
|
5
|
+
export var clearTimeSegment = function (value, segment, precision) {
|
|
6
|
+
return replaceTimeSegment(value, segment, EMPTY_SEGMENT, precision);
|
|
7
|
+
};
|
|
8
|
+
export var deleteTimeSegmentDigit = function (value, segment, precision) {
|
|
9
|
+
var currentSegmentValue = getTimeSegmentValue(value, segment, precision);
|
|
10
|
+
var _a = Array.from(currentSegmentValue), first = _a[0], second = _a[1];
|
|
11
|
+
if (DIGIT_REGEXP.test(second !== null && second !== void 0 ? second : EMPTY_VALUE)) {
|
|
12
|
+
return replaceTimeSegment(value, segment, "".concat(first).concat(TIME_PLACEHOLDER_CHAR), precision);
|
|
13
|
+
}
|
|
14
|
+
if (DIGIT_REGEXP.test(first !== null && first !== void 0 ? first : EMPTY_VALUE)) {
|
|
15
|
+
return replaceTimeSegment(value, segment, EMPTY_SEGMENT, precision);
|
|
16
|
+
}
|
|
17
|
+
return value;
|
|
18
|
+
};
|
|
19
|
+
export var commitTimeSegmentOnLeave = function (value, segment, precision) {
|
|
20
|
+
var nextValue = normalizeEditableSegment(getTimeSegmentValue(value, segment, precision), segment);
|
|
21
|
+
if (nextValue === EMPTY_SEGMENT) {
|
|
22
|
+
return replaceTimeSegment(value, segment, EMPTY_SEGMENT, precision);
|
|
23
|
+
}
|
|
24
|
+
return replaceTimeSegment(value, segment, nextValue, precision);
|
|
25
|
+
};
|
|
26
|
+
export var shiftTimeSegmentValue = function (value, segment, step, precision) {
|
|
27
|
+
var currentSegmentValue = getTimeSegmentValue(value, segment, precision);
|
|
28
|
+
var normalizedSegmentValue = normalizeEditableSegment(currentSegmentValue, segment);
|
|
29
|
+
var max = getTimeSegmentMax(segment);
|
|
30
|
+
var current = normalizedSegmentValue === EMPTY_SEGMENT ? 0 : Number(normalizedSegmentValue);
|
|
31
|
+
var next = (current + step + max + 1) % (max + 1);
|
|
32
|
+
return replaceTimeSegment(value, segment, String(next).padStart(TIME_SEGMENT_LENGTH, ZERO_PAD_CHAR), precision);
|
|
33
|
+
};
|
|
34
|
+
export var formatDigitToTimeSegment = function (value, segment, digit, precision) {
|
|
35
|
+
var currentSegmentValue = getTimeSegmentValue(value, segment, precision);
|
|
36
|
+
var nextSegment = getNextTimeSegment(segment, precision);
|
|
37
|
+
var shouldAppend = hasPendingSingleDigit(currentSegmentValue);
|
|
38
|
+
var currentDigits = shouldAppend ? getDigits(currentSegmentValue) : '';
|
|
39
|
+
var firstDigitThreshold = FIRST_DIGIT_MAX_BY_SEGMENT[segment];
|
|
40
|
+
if (currentDigits.length === 0) {
|
|
41
|
+
if (Number(digit) > firstDigitThreshold) {
|
|
42
|
+
var nextValue_1 = replaceTimeSegment(value, segment, "0".concat(digit), precision);
|
|
43
|
+
return {
|
|
44
|
+
isFinalPart: nextSegment === null,
|
|
45
|
+
isCompletedPart: true,
|
|
46
|
+
selectedSegment: nextSegment !== null && nextSegment !== void 0 ? nextSegment : segment,
|
|
47
|
+
nextValue: nextValue_1,
|
|
48
|
+
shouldBlink: false,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
isFinalPart: false,
|
|
53
|
+
isCompletedPart: false,
|
|
54
|
+
selectedSegment: segment,
|
|
55
|
+
nextValue: replaceTimeSegment(value, segment, "".concat(digit).concat(TIME_PLACEHOLDER_CHAR), precision),
|
|
56
|
+
shouldBlink: false,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
if (segment === 'hours' && currentDigits === '2' && Number(digit) > 3) {
|
|
60
|
+
return {
|
|
61
|
+
isFinalPart: false,
|
|
62
|
+
isCompletedPart: false,
|
|
63
|
+
selectedSegment: segment,
|
|
64
|
+
nextValue: value,
|
|
65
|
+
shouldBlink: true,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
var nextValue = replaceTimeSegment(value, segment, String(Number("".concat(currentDigits).concat(digit))).padStart(TIME_SEGMENT_LENGTH, ZERO_PAD_CHAR), precision);
|
|
69
|
+
return {
|
|
70
|
+
isFinalPart: nextSegment === null,
|
|
71
|
+
isCompletedPart: true,
|
|
72
|
+
selectedSegment: nextSegment !== null && nextSegment !== void 0 ? nextSegment : segment,
|
|
73
|
+
nextValue: nextValue,
|
|
74
|
+
shouldBlink: false,
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=TimePicker.editing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimePicker.editing.js","sourceRoot":"","sources":["../../../../components/TimePicker/helpers/TimePicker.editing.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DIGIT_REGEXP,\n EMPTY_SEGMENT,\n EMPTY_VALUE,\n FIRST_DIGIT_MAX_BY_SEGMENT,\n TIME_PLACEHOLDER_CHAR,\n TIME_SEGMENT_LENGTH,\n ZERO_PAD_CHAR,\n} from './TimePicker.constants.js';\nimport { getNextTimeSegment } from './TimePicker.selection.js';\nimport {\n getDigits,\n getTimeSegmentMax,\n hasPendingSingleDigit,\n normalizeEditableSegment,\n type TimeDigitInputResult,\n type TimePrecision,\n type TimeSegment,\n} from './TimePicker.shared.js';\nimport { getTimeSegmentValue, replaceTimeSegment } from './TimePicker.value.js';\n\nexport const clearTimeSegment = (value: string, segment: TimeSegment, precision: TimePrecision): string =>\n replaceTimeSegment(value, segment, EMPTY_SEGMENT, precision);\n\nexport const deleteTimeSegmentDigit = (value: string, segment: TimeSegment, precision: TimePrecision): string => {\n const currentSegmentValue = getTimeSegmentValue(value, segment, precision);\n\n const [first, second] = Array.from(currentSegmentValue);\n\n if (DIGIT_REGEXP.test(second ?? EMPTY_VALUE)) {\n return replaceTimeSegment(value, segment, `${first}${TIME_PLACEHOLDER_CHAR}`, precision);\n }\n\n if (DIGIT_REGEXP.test(first ?? EMPTY_VALUE)) {\n return replaceTimeSegment(value, segment, EMPTY_SEGMENT, precision);\n }\n\n return value;\n};\n\nexport const commitTimeSegmentOnLeave = (value: string, segment: TimeSegment, precision: TimePrecision): string => {\n const nextValue = normalizeEditableSegment(getTimeSegmentValue(value, segment, precision), segment);\n\n if (nextValue === EMPTY_SEGMENT) {\n return replaceTimeSegment(value, segment, EMPTY_SEGMENT, precision);\n }\n\n return replaceTimeSegment(value, segment, nextValue, precision);\n};\n\nexport const shiftTimeSegmentValue = (\n value: string,\n segment: TimeSegment,\n step: 1 | -1,\n precision: TimePrecision,\n): string => {\n const currentSegmentValue = getTimeSegmentValue(value, segment, precision);\n\n const normalizedSegmentValue = normalizeEditableSegment(currentSegmentValue, segment);\n\n const max = getTimeSegmentMax(segment);\n\n const current = normalizedSegmentValue === EMPTY_SEGMENT ? 0 : Number(normalizedSegmentValue);\n const next = (current + step + max + 1) % (max + 1);\n\n return replaceTimeSegment(value, segment, String(next).padStart(TIME_SEGMENT_LENGTH, ZERO_PAD_CHAR), precision);\n};\n\nexport const formatDigitToTimeSegment = (\n value: string,\n segment: TimeSegment,\n digit: string,\n precision: TimePrecision,\n): TimeDigitInputResult => {\n const currentSegmentValue = getTimeSegmentValue(value, segment, precision);\n\n const nextSegment = getNextTimeSegment(segment, precision);\n\n const shouldAppend = hasPendingSingleDigit(currentSegmentValue);\n\n const currentDigits = shouldAppend ? getDigits(currentSegmentValue) : '';\n const firstDigitThreshold = FIRST_DIGIT_MAX_BY_SEGMENT[segment];\n\n if (currentDigits.length === 0) {\n if (Number(digit) > firstDigitThreshold) {\n const nextValue = replaceTimeSegment(value, segment, `0${digit}`, precision);\n\n return {\n isFinalPart: nextSegment === null,\n isCompletedPart: true,\n selectedSegment: nextSegment ?? segment,\n nextValue,\n shouldBlink: false,\n };\n }\n\n return {\n isFinalPart: false,\n isCompletedPart: false,\n selectedSegment: segment,\n nextValue: replaceTimeSegment(value, segment, `${digit}${TIME_PLACEHOLDER_CHAR}`, precision),\n shouldBlink: false,\n };\n }\n\n if (segment === 'hours' && currentDigits === '2' && Number(digit) > 3) {\n return {\n isFinalPart: false,\n isCompletedPart: false,\n selectedSegment: segment,\n nextValue: value,\n shouldBlink: true,\n };\n }\n\n const nextValue = replaceTimeSegment(\n value,\n segment,\n String(Number(`${currentDigits}${digit}`)).padStart(TIME_SEGMENT_LENGTH, ZERO_PAD_CHAR),\n precision,\n );\n\n return {\n isFinalPart: nextSegment === null,\n isCompletedPart: true,\n selectedSegment: nextSegment ?? segment,\n nextValue,\n shouldBlink: false,\n };\n};\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Theme } from '../../../lib/theming/Theme.js';
|
|
2
|
+
import type { SizeProp } from '../../../lib/types/props.js';
|
|
3
|
+
import { DEFAULT_TIME_PICKER_SLOTS } from './TimePicker.constants.js';
|
|
4
|
+
import type { TimePrecision } from './TimePicker.shared.js';
|
|
5
|
+
export { DEFAULT_TIME_PICKER_SLOTS };
|
|
6
|
+
export declare function getTimePickerPopupMaxHeight(size: SizeProp, theme: Theme): string;
|
|
7
|
+
export declare const getTimePickerInputWidth: (size: SizeProp, precision: TimePrecision) => number;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { DEFAULT_TIME_PICKER_SLOTS, INPUT_WIDTH_BY_SIZE, INPUT_WIDTH_WITH_SECONDS_BY_SIZE, } from './TimePicker.constants.js';
|
|
2
|
+
export { DEFAULT_TIME_PICKER_SLOTS };
|
|
3
|
+
export function getTimePickerPopupMaxHeight(size, theme) {
|
|
4
|
+
switch (size) {
|
|
5
|
+
case 'large':
|
|
6
|
+
return theme.timePickerMenuMaxHeightLarge;
|
|
7
|
+
case 'medium':
|
|
8
|
+
return theme.timePickerMenuMaxHeightMedium;
|
|
9
|
+
case 'small':
|
|
10
|
+
default:
|
|
11
|
+
return theme.timePickerMenuMaxHeightSmall;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export var getTimePickerInputWidth = function (size, precision) {
|
|
15
|
+
return precision === 'second' ? INPUT_WIDTH_WITH_SECONDS_BY_SIZE[size] : INPUT_WIDTH_BY_SIZE[size];
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=TimePicker.layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimePicker.layout.js","sourceRoot":"","sources":["../../../../components/TimePicker/helpers/TimePicker.layout.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,gCAAgC,GACjC,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,yBAAyB,EAAE,CAAC;AAErC,MAAM,UAAU,2BAA2B,CAAC,IAAc,EAAE,KAAY;IACtE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,KAAK,CAAC,4BAA4B,CAAC;QAE5C,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,6BAA6B,CAAC;QAE7C,KAAK,OAAO,CAAC;QAEb;YACE,OAAO,KAAK,CAAC,4BAA4B,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,IAAM,uBAAuB,GAAG,UAAC,IAAc,EAAE,SAAwB;IAC9E,OAAA,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,gCAAgC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAA3F,CAA2F,CAAC","sourcesContent":["import type { Theme } from '../../../lib/theming/Theme.js';\nimport type { SizeProp } from '../../../lib/types/props.js';\nimport {\n DEFAULT_TIME_PICKER_SLOTS,\n INPUT_WIDTH_BY_SIZE,\n INPUT_WIDTH_WITH_SECONDS_BY_SIZE,\n} from './TimePicker.constants.js';\nimport type { TimePrecision } from './TimePicker.shared.js';\n\nexport { DEFAULT_TIME_PICKER_SLOTS };\n\nexport function getTimePickerPopupMaxHeight(size: SizeProp, theme: Theme): string {\n switch (size) {\n case 'large':\n return theme.timePickerMenuMaxHeightLarge;\n\n case 'medium':\n return theme.timePickerMenuMaxHeightMedium;\n\n case 'small':\n\n default:\n return theme.timePickerMenuMaxHeightSmall;\n }\n}\n\nexport const getTimePickerInputWidth = (size: SizeProp, precision: TimePrecision): number =>\n precision === 'second' ? INPUT_WIDTH_WITH_SECONDS_BY_SIZE[size] : INPUT_WIDTH_BY_SIZE[size];\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type TimePrecision, type TimeSegment } from './TimePicker.shared.js';
|
|
2
|
+
export type TimeSelectionRange = [start: number, end: number];
|
|
3
|
+
export declare const getTimeSegmentSelectionRange: (segment: TimeSegment, precision: TimePrecision) => TimeSelectionRange;
|
|
4
|
+
export declare const getTimeSegmentSelectionNodeRange: (segment: TimeSegment, precision: TimePrecision) => TimeSelectionRange;
|
|
5
|
+
export declare const getTimeSegmentByCursorPosition: (position: number | null, precision: TimePrecision) => TimeSegment;
|
|
6
|
+
export declare const getNextTimeSegment: (segment: TimeSegment, precision: TimePrecision) => TimeSegment | null;
|
|
7
|
+
export declare const getPreviousTimeSegment: (segment: TimeSegment) => TimeSegment | null;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { TIME_SEGMENT_LENGTH, TIME_SEPARATOR } from './TimePicker.constants.js';
|
|
2
|
+
import { getTimeSegments } from './TimePicker.shared.js';
|
|
3
|
+
export var getTimeSegmentSelectionRange = function (segment, precision) {
|
|
4
|
+
var segments = getTimeSegments(precision);
|
|
5
|
+
var index = segments.indexOf(segment);
|
|
6
|
+
if (index < 0) {
|
|
7
|
+
return [0, TIME_SEGMENT_LENGTH];
|
|
8
|
+
}
|
|
9
|
+
var start = index * (TIME_SEGMENT_LENGTH + TIME_SEPARATOR.length);
|
|
10
|
+
return [start, start + TIME_SEGMENT_LENGTH];
|
|
11
|
+
};
|
|
12
|
+
export var getTimeSegmentSelectionNodeRange = function (segment, precision) {
|
|
13
|
+
var segments = getTimeSegments(precision);
|
|
14
|
+
var index = segments.indexOf(segment);
|
|
15
|
+
if (index < 0) {
|
|
16
|
+
return [0, 1];
|
|
17
|
+
}
|
|
18
|
+
var start = index * 2;
|
|
19
|
+
return [start, start + 1];
|
|
20
|
+
};
|
|
21
|
+
export var getTimeSegmentByCursorPosition = function (position, precision) {
|
|
22
|
+
var segments = getTimeSegments(precision);
|
|
23
|
+
if (position === null || position <= TIME_SEGMENT_LENGTH) {
|
|
24
|
+
return 'hours';
|
|
25
|
+
}
|
|
26
|
+
if (precision === 'minute' || position <= TIME_SEGMENT_LENGTH * 2 + TIME_SEPARATOR.length) {
|
|
27
|
+
return 'minutes';
|
|
28
|
+
}
|
|
29
|
+
return segments.includes('seconds') ? 'seconds' : 'minutes';
|
|
30
|
+
};
|
|
31
|
+
export var getNextTimeSegment = function (segment, precision) {
|
|
32
|
+
switch (segment) {
|
|
33
|
+
case 'hours':
|
|
34
|
+
return 'minutes';
|
|
35
|
+
case 'minutes':
|
|
36
|
+
return precision === 'second' ? 'seconds' : null;
|
|
37
|
+
case 'seconds':
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
export var getPreviousTimeSegment = function (segment) {
|
|
42
|
+
switch (segment) {
|
|
43
|
+
case 'hours':
|
|
44
|
+
return null;
|
|
45
|
+
case 'minutes':
|
|
46
|
+
return 'hours';
|
|
47
|
+
case 'seconds':
|
|
48
|
+
return 'minutes';
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=TimePicker.selection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimePicker.selection.js","sourceRoot":"","sources":["../../../../components/TimePicker/helpers/TimePicker.selection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,EAAE,eAAe,EAAwC,MAAM,wBAAwB,CAAC;AAI/F,MAAM,CAAC,IAAM,4BAA4B,GAAG,UAAC,OAAoB,EAAE,SAAwB;IACzF,IAAM,QAAQ,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAE5C,IAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAExC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,OAAO,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;IAClC,CAAC;IAED,IAAM,KAAK,GAAG,KAAK,GAAG,CAAC,mBAAmB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAEpE,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,mBAAmB,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,gCAAgC,GAAG,UAC9C,OAAoB,EACpB,SAAwB;IAExB,IAAM,QAAQ,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAE5C,IAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAExC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChB,CAAC;IAED,IAAM,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC;IAExB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,8BAA8B,GAAG,UAAC,QAAuB,EAAE,SAAwB;IAC9F,IAAM,QAAQ,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAE5C,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,IAAI,mBAAmB,EAAE,CAAC;QACzD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,SAAS,KAAK,QAAQ,IAAI,QAAQ,IAAI,mBAAmB,GAAG,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;QAC1F,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,kBAAkB,GAAG,UAAC,OAAoB,EAAE,SAAwB;IAC/E,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO;YACV,OAAO,SAAS,CAAC;QAEnB,KAAK,SAAS;YACZ,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QAEnD,KAAK,SAAS;YACZ,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,sBAAsB,GAAG,UAAC,OAAoB;IACzD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO;YACV,OAAO,IAAI,CAAC;QAEd,KAAK,SAAS;YACZ,OAAO,OAAO,CAAC;QAEjB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC,CAAC","sourcesContent":["import { TIME_SEGMENT_LENGTH, TIME_SEPARATOR } from './TimePicker.constants.js';\nimport { getTimeSegments, type TimePrecision, type TimeSegment } from './TimePicker.shared.js';\n\nexport type TimeSelectionRange = [start: number, end: number];\n\nexport const getTimeSegmentSelectionRange = (segment: TimeSegment, precision: TimePrecision): TimeSelectionRange => {\n const segments = getTimeSegments(precision);\n\n const index = segments.indexOf(segment);\n\n if (index < 0) {\n return [0, TIME_SEGMENT_LENGTH];\n }\n\n const start = index * (TIME_SEGMENT_LENGTH + TIME_SEPARATOR.length);\n\n return [start, start + TIME_SEGMENT_LENGTH];\n};\n\nexport const getTimeSegmentSelectionNodeRange = (\n segment: TimeSegment,\n precision: TimePrecision,\n): TimeSelectionRange => {\n const segments = getTimeSegments(precision);\n\n const index = segments.indexOf(segment);\n\n if (index < 0) {\n return [0, 1];\n }\n\n const start = index * 2;\n\n return [start, start + 1];\n};\n\nexport const getTimeSegmentByCursorPosition = (position: number | null, precision: TimePrecision): TimeSegment => {\n const segments = getTimeSegments(precision);\n\n if (position === null || position <= TIME_SEGMENT_LENGTH) {\n return 'hours';\n }\n\n if (precision === 'minute' || position <= TIME_SEGMENT_LENGTH * 2 + TIME_SEPARATOR.length) {\n return 'minutes';\n }\n\n return segments.includes('seconds') ? 'seconds' : 'minutes';\n};\n\nexport const getNextTimeSegment = (segment: TimeSegment, precision: TimePrecision): TimeSegment | null => {\n switch (segment) {\n case 'hours':\n return 'minutes';\n\n case 'minutes':\n return precision === 'second' ? 'seconds' : null;\n\n case 'seconds':\n return null;\n }\n};\n\nexport const getPreviousTimeSegment = (segment: TimeSegment): TimeSegment | null => {\n switch (segment) {\n case 'hours':\n return null;\n\n case 'minutes':\n return 'hours';\n\n case 'seconds':\n return 'minutes';\n }\n};\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { Nullable } from '../../../typings/utility-types.js';
|
|
3
|
+
export type TimePrecision = 'minute' | 'second';
|
|
4
|
+
export type TimeSegment = 'hours' | 'minutes' | 'seconds';
|
|
5
|
+
export interface TimeSlot {
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
time: string;
|
|
8
|
+
info?: ReactNode;
|
|
9
|
+
}
|
|
10
|
+
export interface TimeDigitInputResult {
|
|
11
|
+
isFinalPart: boolean;
|
|
12
|
+
isCompletedPart: boolean;
|
|
13
|
+
nextValue: string;
|
|
14
|
+
selectedSegment: TimeSegment;
|
|
15
|
+
shouldBlink: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare const getTimeSegments: (precision: TimePrecision) => TimeSegment[];
|
|
18
|
+
export declare const getTimeSegmentMax: (segment: TimeSegment) => number;
|
|
19
|
+
export declare const getDigits: (segment: string) => string;
|
|
20
|
+
export declare const sanitizeSegment: (segment: string) => string;
|
|
21
|
+
export declare const normalizeTimeSegment: (segmentValue: string, segment: TimeSegment) => string;
|
|
22
|
+
export declare const normalizeEditableSegment: (segmentValue: string, segment: TimeSegment) => string;
|
|
23
|
+
export declare const hasPendingSingleDigit: (segmentValue: string) => boolean;
|
|
24
|
+
export declare const getDisplaySegments: (value: Nullable<string>, precision: TimePrecision) => string[];
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { DIGIT_REGEXP, EMPTY_SEGMENT, EMPTY_VALUE, HOURS_MAX_VALUE, MINUTES_AND_SECONDS_MAX_VALUE, NON_DIGIT_REGEXP, TIME_PLACEHOLDER_CHAR, TIME_SEGMENT_LENGTH, TIME_SEGMENTS_BY_PRECISION, TIME_SEPARATOR, TIME_VALUE_SPLIT_REGEXP, ZERO_PAD_CHAR, } from './TimePicker.constants.js';
|
|
2
|
+
export var getTimeSegments = function (precision) { return TIME_SEGMENTS_BY_PRECISION[precision]; };
|
|
3
|
+
export var getTimeSegmentMax = function (segment) {
|
|
4
|
+
return segment === 'hours' ? HOURS_MAX_VALUE : MINUTES_AND_SECONDS_MAX_VALUE;
|
|
5
|
+
};
|
|
6
|
+
export var getDigits = function (segment) {
|
|
7
|
+
return segment.replace(NON_DIGIT_REGEXP, EMPTY_VALUE).slice(0, TIME_SEGMENT_LENGTH);
|
|
8
|
+
};
|
|
9
|
+
export var sanitizeSegment = function (segment) {
|
|
10
|
+
return Array.from(segment)
|
|
11
|
+
.filter(function (char) { return DIGIT_REGEXP.test(char) || char === TIME_PLACEHOLDER_CHAR; })
|
|
12
|
+
.slice(0, TIME_SEGMENT_LENGTH)
|
|
13
|
+
.join('')
|
|
14
|
+
.padEnd(TIME_SEGMENT_LENGTH, TIME_PLACEHOLDER_CHAR);
|
|
15
|
+
};
|
|
16
|
+
export var normalizeTimeSegment = function (segmentValue, segment) {
|
|
17
|
+
var digits = getDigits(segmentValue);
|
|
18
|
+
if (!digits) {
|
|
19
|
+
return '00';
|
|
20
|
+
}
|
|
21
|
+
return String(Math.min(Number(digits), getTimeSegmentMax(segment))).padStart(TIME_SEGMENT_LENGTH, ZERO_PAD_CHAR);
|
|
22
|
+
};
|
|
23
|
+
export var normalizeEditableSegment = function (segmentValue, segment) {
|
|
24
|
+
var digits = getDigits(segmentValue);
|
|
25
|
+
if (!digits) {
|
|
26
|
+
return EMPTY_SEGMENT;
|
|
27
|
+
}
|
|
28
|
+
return String(Math.min(Number(digits), getTimeSegmentMax(segment))).padStart(TIME_SEGMENT_LENGTH, ZERO_PAD_CHAR);
|
|
29
|
+
};
|
|
30
|
+
export var hasPendingSingleDigit = function (segmentValue) {
|
|
31
|
+
return new RegExp("^\\d".concat(TIME_PLACEHOLDER_CHAR, "$")).test(segmentValue);
|
|
32
|
+
};
|
|
33
|
+
export var getDisplaySegments = function (value, precision) {
|
|
34
|
+
var segments = getTimeSegments(precision);
|
|
35
|
+
var fallback = segments.map(function () { return EMPTY_SEGMENT; });
|
|
36
|
+
if (!value) {
|
|
37
|
+
return fallback;
|
|
38
|
+
}
|
|
39
|
+
if (value.includes(TIME_SEPARATOR) || value.includes(TIME_PLACEHOLDER_CHAR)) {
|
|
40
|
+
var sourceParts_1 = value.split(TIME_VALUE_SPLIT_REGEXP);
|
|
41
|
+
return segments.map(function (_, index) { var _a; return sanitizeSegment((_a = sourceParts_1[index]) !== null && _a !== void 0 ? _a : ''); });
|
|
42
|
+
}
|
|
43
|
+
var digits = value.replace(NON_DIGIT_REGEXP, EMPTY_VALUE);
|
|
44
|
+
return segments.map(function (_, index) {
|
|
45
|
+
var segmentStart = index * TIME_SEGMENT_LENGTH;
|
|
46
|
+
var segmentEnd = segmentStart + TIME_SEGMENT_LENGTH;
|
|
47
|
+
return sanitizeSegment(digits.slice(segmentStart, segmentEnd));
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=TimePicker.shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimePicker.shared.js","sourceRoot":"","sources":["../../../../components/TimePicker/helpers/TimePicker.shared.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,YAAY,EACZ,aAAa,EACb,WAAW,EACX,eAAe,EACf,6BAA6B,EAC7B,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,EACnB,0BAA0B,EAC1B,cAAc,EACd,uBAAuB,EACvB,aAAa,GACd,MAAM,2BAA2B,CAAC;AAmBnC,MAAM,CAAC,IAAM,eAAe,GAAG,UAAC,SAAwB,IAAoB,OAAA,0BAA0B,CAAC,SAAS,CAAC,EAArC,CAAqC,CAAC;AAElH,MAAM,CAAC,IAAM,iBAAiB,GAAG,UAAC,OAAoB;IACpD,OAAA,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,6BAA6B;AAArE,CAAqE,CAAC;AAExE,MAAM,CAAC,IAAM,SAAS,GAAG,UAAC,OAAe;IACvC,OAAA,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC;AAA5E,CAA4E,CAAC;AAE/E,MAAM,CAAC,IAAM,eAAe,GAAG,UAAC,OAAe;IAC7C,OAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;SAChB,MAAM,CAAC,UAAC,IAAI,IAAK,OAAA,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,qBAAqB,EAAzD,CAAyD,CAAC;SAC3E,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC;SAC7B,IAAI,CAAC,EAAE,CAAC;SACR,MAAM,CAAC,mBAAmB,EAAE,qBAAqB,CAAC;AAJrD,CAIqD,CAAC;AAExD,MAAM,CAAC,IAAM,oBAAoB,GAAG,UAAC,YAAoB,EAAE,OAAoB;IAC7E,IAAM,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;IAEvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC;AACnH,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,wBAAwB,GAAG,UAAC,YAAoB,EAAE,OAAoB;IACjF,IAAM,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;IAEvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC;AACnH,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,qBAAqB,GAAG,UAAC,YAAoB;IACxD,OAAA,IAAI,MAAM,CAAC,cAAO,qBAAqB,MAAG,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;AAA9D,CAA8D,CAAC;AAEjE,MAAM,CAAC,IAAM,kBAAkB,GAAG,UAAC,KAAuB,EAAE,SAAwB;IAClF,IAAM,QAAQ,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,cAAM,OAAA,aAAa,EAAb,CAAa,CAAC,CAAC;IAEnD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAC5E,IAAM,aAAW,GAAG,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACzD,OAAO,QAAQ,CAAC,GAAG,CAAC,UAAC,CAAC,EAAE,KAAK,YAAK,OAAA,eAAe,CAAC,MAAA,aAAW,CAAC,KAAK,CAAC,mCAAI,EAAE,CAAC,CAAA,EAAA,CAAC,CAAC;IAC/E,CAAC;IAED,IAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;IAE5D,OAAO,QAAQ,CAAC,GAAG,CAAC,UAAC,CAAC,EAAE,KAAK;QAC3B,IAAM,YAAY,GAAG,KAAK,GAAG,mBAAmB,CAAC;QACjD,IAAM,UAAU,GAAG,YAAY,GAAG,mBAAmB,CAAC;QAEtD,OAAO,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import type { ReactNode } from 'react';\n\nimport type { Nullable } from '../../../typings/utility-types.js';\nimport {\n DIGIT_REGEXP,\n EMPTY_SEGMENT,\n EMPTY_VALUE,\n HOURS_MAX_VALUE,\n MINUTES_AND_SECONDS_MAX_VALUE,\n NON_DIGIT_REGEXP,\n TIME_PLACEHOLDER_CHAR,\n TIME_SEGMENT_LENGTH,\n TIME_SEGMENTS_BY_PRECISION,\n TIME_SEPARATOR,\n TIME_VALUE_SPLIT_REGEXP,\n ZERO_PAD_CHAR,\n} from './TimePicker.constants.js';\n\nexport type TimePrecision = 'minute' | 'second';\nexport type TimeSegment = 'hours' | 'minutes' | 'seconds';\n\nexport interface TimeSlot {\n disabled?: boolean;\n time: string;\n info?: ReactNode;\n}\n\nexport interface TimeDigitInputResult {\n isFinalPart: boolean;\n isCompletedPart: boolean;\n nextValue: string;\n selectedSegment: TimeSegment;\n shouldBlink: boolean;\n}\n\nexport const getTimeSegments = (precision: TimePrecision): TimeSegment[] => TIME_SEGMENTS_BY_PRECISION[precision];\n\nexport const getTimeSegmentMax = (segment: TimeSegment): number =>\n segment === 'hours' ? HOURS_MAX_VALUE : MINUTES_AND_SECONDS_MAX_VALUE;\n\nexport const getDigits = (segment: string): string =>\n segment.replace(NON_DIGIT_REGEXP, EMPTY_VALUE).slice(0, TIME_SEGMENT_LENGTH);\n\nexport const sanitizeSegment = (segment: string): string =>\n Array.from(segment)\n .filter((char) => DIGIT_REGEXP.test(char) || char === TIME_PLACEHOLDER_CHAR)\n .slice(0, TIME_SEGMENT_LENGTH)\n .join('')\n .padEnd(TIME_SEGMENT_LENGTH, TIME_PLACEHOLDER_CHAR);\n\nexport const normalizeTimeSegment = (segmentValue: string, segment: TimeSegment): string => {\n const digits = getDigits(segmentValue);\n\n if (!digits) {\n return '00';\n }\n\n return String(Math.min(Number(digits), getTimeSegmentMax(segment))).padStart(TIME_SEGMENT_LENGTH, ZERO_PAD_CHAR);\n};\n\nexport const normalizeEditableSegment = (segmentValue: string, segment: TimeSegment): string => {\n const digits = getDigits(segmentValue);\n\n if (!digits) {\n return EMPTY_SEGMENT;\n }\n\n return String(Math.min(Number(digits), getTimeSegmentMax(segment))).padStart(TIME_SEGMENT_LENGTH, ZERO_PAD_CHAR);\n};\n\nexport const hasPendingSingleDigit = (segmentValue: string): boolean =>\n new RegExp(`^\\\\d${TIME_PLACEHOLDER_CHAR}$`).test(segmentValue);\n\nexport const getDisplaySegments = (value: Nullable<string>, precision: TimePrecision): string[] => {\n const segments = getTimeSegments(precision);\n const fallback = segments.map(() => EMPTY_SEGMENT);\n\n if (!value) {\n return fallback;\n }\n\n if (value.includes(TIME_SEPARATOR) || value.includes(TIME_PLACEHOLDER_CHAR)) {\n const sourceParts = value.split(TIME_VALUE_SPLIT_REGEXP);\n return segments.map((_, index) => sanitizeSegment(sourceParts[index] ?? ''));\n }\n\n const digits = value.replace(NON_DIGIT_REGEXP, EMPTY_VALUE);\n\n return segments.map((_, index) => {\n const segmentStart = index * TIME_SEGMENT_LENGTH;\n const segmentEnd = segmentStart + TIME_SEGMENT_LENGTH;\n\n return sanitizeSegment(digits.slice(segmentStart, segmentEnd));\n });\n};\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Nullable } from '../../../typings/utility-types.js';
|
|
2
|
+
import { type TimePrecision, type TimeSegment } from './TimePicker.shared.js';
|
|
3
|
+
export declare const getEmptyDisplayValue: (precision: TimePrecision) => string;
|
|
4
|
+
export declare const isTimeDisplayEmpty: (value: Nullable<string>) => boolean;
|
|
5
|
+
export declare const formatToDisplayTimeValue: (value: string, precision: TimePrecision) => string;
|
|
6
|
+
export declare const normalizeTimeValue: (value: Nullable<string>, precision: TimePrecision) => string;
|
|
7
|
+
export declare const normalizeSlotValue: (value: string, precision: TimePrecision) => string;
|
|
8
|
+
export declare const replaceTimeSegment: (value: string, segment: TimeSegment, nextSegmentValue: string, precision: TimePrecision) => string;
|
|
9
|
+
export declare const parsePastedTimeValue: (value: string, precision: TimePrecision) => string;
|
|
10
|
+
export declare const getTimeSegmentValue: (value: string, segment: TimeSegment, precision: TimePrecision) => string;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { DIGIT_REGEXP, EMPTY_SEGMENT, EMPTY_VALUE, MAX_DIGITS_BY_PRECISION, NON_DIGIT_REGEXP, TIME_SEGMENT_LENGTH, TIME_SEPARATOR, } from './TimePicker.constants.js';
|
|
2
|
+
import { getDisplaySegments, getTimeSegments, normalizeTimeSegment, sanitizeSegment, } from './TimePicker.shared.js';
|
|
3
|
+
export var getEmptyDisplayValue = function (precision) {
|
|
4
|
+
return getTimeSegments(precision)
|
|
5
|
+
.map(function () { return EMPTY_SEGMENT; })
|
|
6
|
+
.join(TIME_SEPARATOR);
|
|
7
|
+
};
|
|
8
|
+
export var isTimeDisplayEmpty = function (value) { return !DIGIT_REGEXP.test(value !== null && value !== void 0 ? value : EMPTY_VALUE); };
|
|
9
|
+
export var formatToDisplayTimeValue = function (value, precision) {
|
|
10
|
+
return getDisplaySegments(value, precision).join(TIME_SEPARATOR);
|
|
11
|
+
};
|
|
12
|
+
export var normalizeTimeValue = function (value, precision) {
|
|
13
|
+
if (isTimeDisplayEmpty(value)) {
|
|
14
|
+
return '';
|
|
15
|
+
}
|
|
16
|
+
return getTimeSegments(precision)
|
|
17
|
+
.map(function (segment, index) { return normalizeTimeSegment(getDisplaySegments(value, precision)[index], segment); })
|
|
18
|
+
.join(TIME_SEPARATOR);
|
|
19
|
+
};
|
|
20
|
+
export var normalizeSlotValue = function (value, precision) {
|
|
21
|
+
return normalizeTimeValue(value, precision);
|
|
22
|
+
};
|
|
23
|
+
export var replaceTimeSegment = function (value, segment, nextSegmentValue, precision) {
|
|
24
|
+
var segments = getDisplaySegments(value, precision);
|
|
25
|
+
var index = getTimeSegments(precision).indexOf(segment);
|
|
26
|
+
segments[index] = sanitizeSegment(nextSegmentValue);
|
|
27
|
+
return segments.join(TIME_SEPARATOR);
|
|
28
|
+
};
|
|
29
|
+
export var parsePastedTimeValue = function (value, precision) {
|
|
30
|
+
var digits = value.replace(NON_DIGIT_REGEXP, EMPTY_VALUE).slice(0, MAX_DIGITS_BY_PRECISION[precision]);
|
|
31
|
+
if (!digits) {
|
|
32
|
+
return EMPTY_VALUE;
|
|
33
|
+
}
|
|
34
|
+
var segments = getTimeSegments(precision).map(function (_, index) {
|
|
35
|
+
var segmentStart = index * TIME_SEGMENT_LENGTH;
|
|
36
|
+
var segmentEnd = segmentStart + TIME_SEGMENT_LENGTH;
|
|
37
|
+
return sanitizeSegment(digits.slice(segmentStart, segmentEnd));
|
|
38
|
+
});
|
|
39
|
+
return normalizeTimeValue(segments.join(TIME_SEPARATOR), precision);
|
|
40
|
+
};
|
|
41
|
+
export var getTimeSegmentValue = function (value, segment, precision) {
|
|
42
|
+
var _a;
|
|
43
|
+
var segments = getDisplaySegments(value, precision);
|
|
44
|
+
var index = getTimeSegments(precision).indexOf(segment);
|
|
45
|
+
return (_a = segments[index]) !== null && _a !== void 0 ? _a : EMPTY_SEGMENT;
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=TimePicker.value.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimePicker.value.js","sourceRoot":"","sources":["../../../../components/TimePicker/helpers/TimePicker.value.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from '../../../typings/utility-types.js';\nimport {\n DIGIT_REGEXP,\n EMPTY_SEGMENT,\n EMPTY_VALUE,\n MAX_DIGITS_BY_PRECISION,\n NON_DIGIT_REGEXP,\n TIME_SEGMENT_LENGTH,\n TIME_SEPARATOR,\n} from './TimePicker.constants.js';\nimport {\n getDisplaySegments,\n getTimeSegments,\n normalizeTimeSegment,\n sanitizeSegment,\n type TimePrecision,\n type TimeSegment,\n} from './TimePicker.shared.js';\n\nexport const getEmptyDisplayValue = (precision: TimePrecision): string =>\n getTimeSegments(precision)\n .map(() => EMPTY_SEGMENT)\n .join(TIME_SEPARATOR);\n\nexport const isTimeDisplayEmpty = (value: Nullable<string>): boolean => !DIGIT_REGEXP.test(value ?? EMPTY_VALUE);\n\nexport const formatToDisplayTimeValue = (value: string, precision: TimePrecision): string =>\n getDisplaySegments(value, precision).join(TIME_SEPARATOR);\n\nexport const normalizeTimeValue = (value: Nullable<string>, precision: TimePrecision): string => {\n if (isTimeDisplayEmpty(value)) {\n return '';\n }\n\n return getTimeSegments(precision)\n .map((segment, index) => normalizeTimeSegment(getDisplaySegments(value, precision)[index], segment))\n .join(TIME_SEPARATOR);\n};\n\nexport const normalizeSlotValue = (value: string, precision: TimePrecision): string =>\n normalizeTimeValue(value, precision);\n\nexport const replaceTimeSegment = (\n value: string,\n segment: TimeSegment,\n nextSegmentValue: string,\n precision: TimePrecision,\n): string => {\n const segments = getDisplaySegments(value, precision);\n const index = getTimeSegments(precision).indexOf(segment);\n\n segments[index] = sanitizeSegment(nextSegmentValue);\n\n return segments.join(TIME_SEPARATOR);\n};\n\nexport const parsePastedTimeValue = (value: string, precision: TimePrecision): string => {\n const digits = value.replace(NON_DIGIT_REGEXP, EMPTY_VALUE).slice(0, MAX_DIGITS_BY_PRECISION[precision]);\n\n if (!digits) {\n return EMPTY_VALUE;\n }\n\n const segments = getTimeSegments(precision).map((_, index) => {\n const segmentStart = index * TIME_SEGMENT_LENGTH;\n const segmentEnd = segmentStart + TIME_SEGMENT_LENGTH;\n\n return sanitizeSegment(digits.slice(segmentStart, segmentEnd));\n });\n\n return normalizeTimeValue(segments.join(TIME_SEPARATOR), precision);\n};\n\nexport const getTimeSegmentValue = (value: string, segment: TimeSegment, precision: TimePrecision): string => {\n const segments = getDisplaySegments(value, precision);\n const index = getTimeSegments(precision).indexOf(segment);\n\n return segments[index] ?? EMPTY_SEGMENT;\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const scrollSelectedSlotIntoView: (element: HTMLElement) => void;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { findNearestScrollableParent } from '../../../lib/dom/scrollYCenterIntoNearestScrollable.js';
|
|
2
|
+
import { getOwnerGlobalObject, isBrowser } from '../../../lib/globalObject.js';
|
|
3
|
+
export var scrollSelectedSlotIntoView = function (element) {
|
|
4
|
+
var globalObject = getOwnerGlobalObject(element);
|
|
5
|
+
if (!isBrowser(globalObject)) {
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
var parent = findNearestScrollableParent(element);
|
|
9
|
+
if (!parent) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
var elementRect = element.getBoundingClientRect();
|
|
13
|
+
var parentRect = parent.getBoundingClientRect();
|
|
14
|
+
var scrollTopPos = elementRect.top - parentRect.top;
|
|
15
|
+
var scrollBottomPos = elementRect.bottom - parentRect.bottom;
|
|
16
|
+
var scrollCenterPos = (scrollTopPos + scrollBottomPos) / 2;
|
|
17
|
+
if (scrollCenterPos !== 0) {
|
|
18
|
+
parent.scrollTo({ top: parent.scrollTop + scrollCenterPos });
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=scrollSelectedSlotIntoView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrollSelectedSlotIntoView.js","sourceRoot":"","sources":["../../../../components/TimePicker/helpers/scrollSelectedSlotIntoView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,wDAAwD,CAAC;AACrG,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAE/E,MAAM,CAAC,IAAM,0BAA0B,GAAG,UAAC,OAAoB;IAC7D,IAAM,YAAY,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAEnD,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,IAAM,MAAM,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAEpD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,IAAM,WAAW,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IACpD,IAAM,UAAU,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;IAElD,IAAM,YAAY,GAAG,WAAW,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;IACtD,IAAM,eAAe,GAAG,WAAW,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/D,IAAM,eAAe,GAAG,CAAC,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAE7D,IAAI,eAAe,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,SAAS,GAAG,eAAe,EAAE,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC,CAAC","sourcesContent":["import { findNearestScrollableParent } from '../../../lib/dom/scrollYCenterIntoNearestScrollable.js';\nimport { getOwnerGlobalObject, isBrowser } from '../../../lib/globalObject.js';\n\nexport const scrollSelectedSlotIntoView = (element: HTMLElement): void => {\n const globalObject = getOwnerGlobalObject(element);\n\n if (!isBrowser(globalObject)) {\n return;\n }\n\n const parent = findNearestScrollableParent(element);\n\n if (!parent) {\n return;\n }\n\n const elementRect = element.getBoundingClientRect();\n const parentRect = parent.getBoundingClientRect();\n\n const scrollTopPos = elementRect.top - parentRect.top;\n const scrollBottomPos = elementRect.bottom - parentRect.bottom;\n const scrollCenterPos = (scrollTopPos + scrollBottomPos) / 2;\n\n if (scrollCenterPos !== 0) {\n parent.scrollTo({ top: parent.scrollTop + scrollCenterPos });\n }\n};\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { TimeSlot } from '../helpers/TimePicker.shared.js';
|
|
2
|
+
interface UseTimePickerDropdownOptions {
|
|
3
|
+
dropdown: boolean;
|
|
4
|
+
disabled?: boolean;
|
|
5
|
+
slots: TimeSlot[];
|
|
6
|
+
selectedSlotIndex: number | null;
|
|
7
|
+
}
|
|
8
|
+
interface UseTimePickerDropdownResult {
|
|
9
|
+
isDropdownOpened: boolean;
|
|
10
|
+
highlightedSlotIndex: number | null;
|
|
11
|
+
openDropdown(): void;
|
|
12
|
+
closeDropdown(): void;
|
|
13
|
+
resetHighlightedSlot(): void;
|
|
14
|
+
tryNavigateSlots(step: 1 | -1): boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare const useTimePickerDropdown: (options: UseTimePickerDropdownOptions) => UseTimePickerDropdownResult;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { useCallback, useState } from 'react';
|
|
2
|
+
export var useTimePickerDropdown = function (options) {
|
|
3
|
+
var dropdown = options.dropdown, disabled = options.disabled, slots = options.slots, selectedSlotIndex = options.selectedSlotIndex;
|
|
4
|
+
var _a = useState(false), isDropdownOpened = _a[0], setIsDropdownOpened = _a[1];
|
|
5
|
+
var _b = useState(null), highlightedSlotIndex = _b[0], setHighlightedSlotIndex = _b[1];
|
|
6
|
+
var openDropdown = useCallback(function () {
|
|
7
|
+
if (!dropdown || disabled) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
setIsDropdownOpened(true);
|
|
11
|
+
}, [disabled, dropdown]);
|
|
12
|
+
var closeDropdown = useCallback(function () {
|
|
13
|
+
setIsDropdownOpened(false);
|
|
14
|
+
setHighlightedSlotIndex(null);
|
|
15
|
+
}, []);
|
|
16
|
+
var resetHighlightedSlot = useCallback(function () {
|
|
17
|
+
setHighlightedSlotIndex(null);
|
|
18
|
+
}, []);
|
|
19
|
+
var tryNavigateSlots = useCallback(function (step) {
|
|
20
|
+
if (!dropdown || !isDropdownOpened) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
var enabledIndexes = slots
|
|
24
|
+
.map(function (slot, index) { return ({ slot: slot, index: index }); })
|
|
25
|
+
.filter(function (_a) {
|
|
26
|
+
var slot = _a.slot;
|
|
27
|
+
return !slot.disabled;
|
|
28
|
+
})
|
|
29
|
+
.map(function (_a) {
|
|
30
|
+
var index = _a.index;
|
|
31
|
+
return index;
|
|
32
|
+
});
|
|
33
|
+
if (enabledIndexes.length === 0) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
if (highlightedSlotIndex === null) {
|
|
37
|
+
if (selectedSlotIndex !== null) {
|
|
38
|
+
var selectedEnabledIndex = enabledIndexes.indexOf(selectedSlotIndex);
|
|
39
|
+
if (selectedEnabledIndex >= 0) {
|
|
40
|
+
var nextEnabledIndex_1 = enabledIndexes[selectedEnabledIndex + step];
|
|
41
|
+
setHighlightedSlotIndex(nextEnabledIndex_1 !== null && nextEnabledIndex_1 !== void 0 ? nextEnabledIndex_1 : (step > 0 ? enabledIndexes[0] : enabledIndexes[enabledIndexes.length - 1]));
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
setHighlightedSlotIndex(step > 0 ? enabledIndexes[0] : enabledIndexes[enabledIndexes.length - 1]);
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
var currentIndex = enabledIndexes.indexOf(highlightedSlotIndex);
|
|
49
|
+
var nextEnabledIndex = enabledIndexes[currentIndex + step];
|
|
50
|
+
setHighlightedSlotIndex(nextEnabledIndex !== null && nextEnabledIndex !== void 0 ? nextEnabledIndex : (step > 0 ? enabledIndexes[0] : enabledIndexes[enabledIndexes.length - 1]));
|
|
51
|
+
return true;
|
|
52
|
+
}, [dropdown, highlightedSlotIndex, isDropdownOpened, selectedSlotIndex, slots]);
|
|
53
|
+
return {
|
|
54
|
+
isDropdownOpened: isDropdownOpened,
|
|
55
|
+
highlightedSlotIndex: highlightedSlotIndex,
|
|
56
|
+
openDropdown: openDropdown,
|
|
57
|
+
closeDropdown: closeDropdown,
|
|
58
|
+
resetHighlightedSlot: resetHighlightedSlot,
|
|
59
|
+
tryNavigateSlots: tryNavigateSlots,
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=useTimePickerDropdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTimePickerDropdown.js","sourceRoot":"","sources":["../../../../components/TimePicker/hooks/useTimePickerDropdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAwB9C,MAAM,CAAC,IAAM,qBAAqB,GAAG,UAAC,OAAqC;IACjE,IAAA,QAAQ,GAAyC,OAAO,SAAhD,EAAE,QAAQ,GAA+B,OAAO,SAAtC,EAAE,KAAK,GAAwB,OAAO,MAA/B,EAAE,iBAAiB,GAAK,OAAO,kBAAZ,CAAa;IAE3D,IAAA,KAA0C,QAAQ,CAAC,KAAK,CAAC,EAAxD,gBAAgB,QAAA,EAAE,mBAAmB,QAAmB,CAAC;IAC1D,IAAA,KAAkD,QAAQ,CAAgB,IAAI,CAAC,EAA9E,oBAAoB,QAAA,EAAE,uBAAuB,QAAiC,CAAC;IAEtF,IAAM,YAAY,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEzB,IAAM,aAAa,GAAG,WAAW,CAAC;QAChC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3B,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAM,oBAAoB,GAAG,WAAW,CAAC;QACvC,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAM,gBAAgB,GAAG,WAAW,CAClC,UAAC,IAAY;QACX,IAAI,CAAC,QAAQ,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACnC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAM,cAAc,GAAG,KAAK;aACzB,GAAG,CAAC,UAAC,IAAI,EAAE,KAAK,IAAK,OAAA,CAAC,EAAE,IAAI,MAAA,EAAE,KAAK,OAAA,EAAE,CAAC,EAAjB,CAAiB,CAAC;aACvC,MAAM,CAAC,UAAC,EAAQ;gBAAN,IAAI,UAAA;YAAO,OAAA,CAAC,IAAI,CAAC,QAAQ;QAAd,CAAc,CAAC;aACpC,GAAG,CAAC,UAAC,EAAS;gBAAP,KAAK,WAAA;YAAO,OAAA,KAAK;QAAL,CAAK,CAAC,CAAC;QAE7B,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,oBAAoB,KAAK,IAAI,EAAE,CAAC;YAClC,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;gBAC/B,IAAM,oBAAoB,GAAG,cAAc,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;gBAEvE,IAAI,oBAAoB,IAAI,CAAC,EAAE,CAAC;oBAC9B,IAAM,kBAAgB,GAAG,cAAc,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;oBAErE,uBAAuB,CACrB,kBAAgB,aAAhB,kBAAgB,cAAhB,kBAAgB,GAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAC/F,CAAC;oBACF,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAED,uBAAuB,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAClG,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAClE,IAAM,gBAAgB,GAAG,cAAc,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;QAE7D,uBAAuB,CACrB,gBAAgB,aAAhB,gBAAgB,cAAhB,gBAAgB,GAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAC/F,CAAC;QAEF,OAAO,IAAI,CAAC;IACd,CAAC,EACD,CAAC,QAAQ,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAC7E,CAAC;IAEF,OAAO;QACL,gBAAgB,kBAAA;QAChB,oBAAoB,sBAAA;QACpB,YAAY,cAAA;QACZ,aAAa,eAAA;QACb,oBAAoB,sBAAA;QACpB,gBAAgB,kBAAA;KACjB,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { useCallback, useState } from 'react';\n\nimport type { TimeSlot } from '../helpers/TimePicker.shared.js';\n\ninterface UseTimePickerDropdownOptions {\n dropdown: boolean;\n disabled?: boolean;\n slots: TimeSlot[];\n selectedSlotIndex: number | null;\n}\n\ninterface UseTimePickerDropdownResult {\n isDropdownOpened: boolean;\n highlightedSlotIndex: number | null;\n\n openDropdown(): void;\n\n closeDropdown(): void;\n\n resetHighlightedSlot(): void;\n\n tryNavigateSlots(step: 1 | -1): boolean;\n}\n\nexport const useTimePickerDropdown = (options: UseTimePickerDropdownOptions): UseTimePickerDropdownResult => {\n const { dropdown, disabled, slots, selectedSlotIndex } = options;\n\n const [isDropdownOpened, setIsDropdownOpened] = useState(false);\n const [highlightedSlotIndex, setHighlightedSlotIndex] = useState<number | null>(null);\n\n const openDropdown = useCallback(() => {\n if (!dropdown || disabled) {\n return;\n }\n\n setIsDropdownOpened(true);\n }, [disabled, dropdown]);\n\n const closeDropdown = useCallback(() => {\n setIsDropdownOpened(false);\n setHighlightedSlotIndex(null);\n }, []);\n\n const resetHighlightedSlot = useCallback(() => {\n setHighlightedSlotIndex(null);\n }, []);\n\n const tryNavigateSlots = useCallback(\n (step: 1 | -1) => {\n if (!dropdown || !isDropdownOpened) {\n return false;\n }\n\n const enabledIndexes = slots\n .map((slot, index) => ({ slot, index }))\n .filter(({ slot }) => !slot.disabled)\n .map(({ index }) => index);\n\n if (enabledIndexes.length === 0) {\n return true;\n }\n\n if (highlightedSlotIndex === null) {\n if (selectedSlotIndex !== null) {\n const selectedEnabledIndex = enabledIndexes.indexOf(selectedSlotIndex);\n\n if (selectedEnabledIndex >= 0) {\n const nextEnabledIndex = enabledIndexes[selectedEnabledIndex + step];\n\n setHighlightedSlotIndex(\n nextEnabledIndex ?? (step > 0 ? enabledIndexes[0] : enabledIndexes[enabledIndexes.length - 1]),\n );\n return true;\n }\n }\n\n setHighlightedSlotIndex(step > 0 ? enabledIndexes[0] : enabledIndexes[enabledIndexes.length - 1]);\n return true;\n }\n\n const currentIndex = enabledIndexes.indexOf(highlightedSlotIndex);\n const nextEnabledIndex = enabledIndexes[currentIndex + step];\n\n setHighlightedSlotIndex(\n nextEnabledIndex ?? (step > 0 ? enabledIndexes[0] : enabledIndexes[enabledIndexes.length - 1]),\n );\n\n return true;\n },\n [dropdown, highlightedSlotIndex, isDropdownOpened, selectedSlotIndex, slots],\n );\n\n return {\n isDropdownOpened,\n highlightedSlotIndex,\n openDropdown,\n closeDropdown,\n resetHighlightedSlot,\n tryNavigateSlots,\n };\n};\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { RefObject } from 'react';
|
|
2
|
+
import type { TimePrecision, TimeSegment } from '../helpers/TimePicker.shared.js';
|
|
3
|
+
import type { TimeInputRef } from '../TimeInput.js';
|
|
4
|
+
interface UseTimePickerSelectionOptions {
|
|
5
|
+
isInputFocused: boolean;
|
|
6
|
+
precision: TimePrecision;
|
|
7
|
+
inputRef: RefObject<TimeInputRef | null>;
|
|
8
|
+
displayValue: string;
|
|
9
|
+
}
|
|
10
|
+
interface UseTimePickerSelectionResult {
|
|
11
|
+
selectedSegment: TimeSegment;
|
|
12
|
+
selectSegment: (segment: TimeSegment) => void;
|
|
13
|
+
}
|
|
14
|
+
export declare const useTimePickerSelection: (options: UseTimePickerSelectionOptions) => UseTimePickerSelectionResult;
|
|
15
|
+
export {};
|