@skbkontur/react-ui 6.0.7-b5d2c.0 → 6.0.7-eab55.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/components/Autocomplete/Autocomplete.js +15 -4
- package/components/Autocomplete/Autocomplete.js.map +1 -1
- 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 +4 -1
- package/components/Calendar/CalendarDay.js.map +1 -1
- package/components/Calendar/DayCellView.styles.d.ts +1 -0
- package/components/Calendar/DayCellView.styles.js +6 -3
- package/components/Calendar/DayCellView.styles.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 +14 -11
- package/components/Checkbox/Checkbox.js +6 -3
- package/components/Checkbox/Checkbox.js.map +1 -1
- package/components/ComboBox/ComboBox.d.ts +3 -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 +16 -14
- package/components/DatePicker/DatePicker.js +5 -4
- package/components/DatePicker/DatePicker.js.map +1 -1
- package/components/DatePicker/MobilePicker.js +1 -1
- package/components/DatePicker/MobilePicker.js.map +1 -1
- package/components/DateRangePicker/DateRangePicker.d.ts +3 -4
- package/components/DateRangePicker/DateRangePicker.js +4 -6
- package/components/DateRangePicker/DateRangePicker.js.map +1 -1
- package/components/DateRangePicker/DateRangePickerInput.js +4 -6
- package/components/DateRangePicker/DateRangePickerInput.js.map +1 -1
- package/components/Dropdown/Dropdown.d.ts +15 -8
- package/components/Dropdown/Dropdown.js +8 -1
- package/components/Dropdown/Dropdown.js.map +1 -1
- package/components/DropdownMenu/DropdownMenu.d.ts +1 -2
- package/components/DropdownMenu/DropdownMenu.js +1 -2
- package/components/DropdownMenu/DropdownMenu.js.map +1 -1
- package/components/FileUploader/FileUploader.d.ts +6 -4
- package/components/FileUploader/FileUploader.js +3 -1
- 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/Loader/Loader.d.ts +12 -4
- package/components/Loader/Loader.js +18 -7
- package/components/Loader/Loader.js.map +1 -1
- package/components/MenuFooter/MenuFooter.d.ts +1 -1
- package/components/MenuFooter/MenuFooter.js +1 -1
- package/components/MenuFooter/MenuFooter.js.map +1 -1
- package/components/MenuHeader/MenuHeader.d.ts +2 -2
- package/components/MenuHeader/MenuHeader.js +1 -1
- package/components/MenuHeader/MenuHeader.js.map +1 -1
- package/components/MenuItem/MenuItem.d.ts +1 -0
- package/components/MenuItem/MenuItem.js +17 -1
- package/components/MenuItem/MenuItem.js.map +1 -1
- package/components/MenuItem/MenuItem.styles.d.ts +3 -0
- package/components/MenuItem/MenuItem.styles.js +25 -16
- package/components/MenuItem/MenuItem.styles.js.map +1 -1
- package/components/MenuSeparator/MenuSeparator.d.ts +1 -1
- package/components/MenuSeparator/MenuSeparator.js +1 -1
- 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/Select/Select.d.ts +4 -4
- package/components/Select/Select.js +11 -1
- package/components/Select/Select.js.map +1 -1
- package/components/SingleToast/SingleToast.d.ts +10 -7
- package/components/SingleToast/SingleToast.js +10 -7
- package/components/SingleToast/SingleToast.js.map +1 -1
- package/components/Spinner/Spinner.d.ts +23 -33
- package/components/Spinner/Spinner.js +23 -19
- package/components/Spinner/Spinner.js.map +1 -1
- package/components/Spinner/Spinner.styles.d.ts +0 -3
- package/components/Spinner/Spinner.styles.js +6 -15
- package/components/Spinner/Spinner.styles.js.map +1 -1
- package/components/Sticky/Sticky.d.ts +4 -0
- package/components/Sticky/Sticky.js +4 -0
- package/components/Sticky/Sticky.js.map +1 -1
- package/components/Switcher/Switcher.d.ts +10 -8
- package/components/Switcher/Switcher.js +3 -1
- package/components/Switcher/Switcher.js.map +1 -1
- package/components/Textarea/Textarea.js +1 -1
- package/components/Textarea/Textarea.js.map +1 -1
- package/components/Textarea/Textarea.styles.d.ts +1 -0
- package/components/Textarea/Textarea.styles.js +7 -4
- package/components/Textarea/Textarea.styles.js.map +1 -1
- package/components/Textarea/TextareaCounter.d.ts +2 -0
- package/components/Textarea/TextareaCounter.js +22 -4
- package/components/Textarea/TextareaCounter.js.map +1 -1
- package/components/TimePicker/TimeFragmentsView.js.map +1 -1
- package/components/TimePicker/TimeFragmentsView.styles.js +4 -4
- package/components/TimePicker/TimeFragmentsView.styles.js.map +1 -1
- package/components/TimePicker/TimeInput.d.ts +5 -7
- package/components/TimePicker/TimeInput.js +19 -7
- package/components/TimePicker/TimeInput.js.map +1 -1
- package/components/TimePicker/TimePicker.d.ts +39 -7
- package/components/TimePicker/TimePicker.js +275 -148
- package/components/TimePicker/TimePicker.js.map +1 -1
- package/components/TimePicker/TimePicker.styles.d.ts +3 -4
- package/components/TimePicker/TimePicker.styles.js +11 -14
- package/components/TimePicker/TimePicker.styles.js.map +1 -1
- package/components/TimePicker/TimePickerMobilePopup.d.ts +31 -0
- package/components/TimePicker/TimePickerMobilePopup.js +21 -0
- package/components/TimePicker/TimePickerMobilePopup.js.map +1 -0
- package/components/TimePicker/TimePickerPopup.d.ts +19 -0
- package/components/TimePicker/TimePickerPopup.js +18 -0
- package/components/TimePicker/TimePickerPopup.js.map +1 -0
- package/components/TimePicker/TimePickerSlots.d.ts +16 -0
- package/components/TimePicker/TimePickerSlots.js +67 -0
- package/components/TimePicker/TimePickerSlots.js.map +1 -0
- package/components/TimePicker/helpers/TimePicker.constants.d.ts +0 -1
- package/components/TimePicker/helpers/TimePicker.constants.js +0 -1
- package/components/TimePicker/helpers/TimePicker.constants.js.map +1 -1
- package/components/TimePicker/helpers/TimePicker.editing.js +10 -1
- package/components/TimePicker/helpers/TimePicker.editing.js.map +1 -1
- package/components/TimePicker/helpers/TimePicker.shared.d.ts +1 -2
- package/components/TimePicker/helpers/TimePicker.shared.js +4 -4
- package/components/TimePicker/helpers/TimePicker.shared.js.map +1 -1
- package/components/TimePicker/helpers/TimePicker.value.d.ts +3 -5
- package/components/TimePicker/helpers/TimePicker.value.js +21 -7
- package/components/TimePicker/helpers/TimePicker.value.js.map +1 -1
- package/components/TimePicker/hooks/useTimePickerValue.d.ts +1 -1
- package/components/TimePicker/hooks/useTimePickerValue.js +8 -7
- package/components/TimePicker/hooks/useTimePickerValue.js.map +1 -1
- package/components/Toast/Toast.d.ts +13 -14
- package/components/Toast/Toast.js +3 -3
- package/components/Toast/Toast.js.map +1 -1
- package/components/Toast/ToastView.d.ts +8 -5
- package/components/Toast/ToastView.js +28 -8
- package/components/Toast/ToastView.js.map +1 -1
- package/components/Toast/ToastView.styles.d.ts +7 -0
- package/components/Toast/ToastView.styles.js +30 -8
- package/components/Toast/ToastView.styles.js.map +1 -1
- package/components/Tooltip/Tooltip.d.ts +4 -4
- package/components/Tooltip/Tooltip.js.map +1 -1
- package/internal/CloseButtonIcon/CloseButtonIcon.js +1 -1
- package/internal/CloseButtonIcon/CloseButtonIcon.js.map +1 -1
- package/internal/CommonWrapper/CommonWrapper.js +5 -0
- package/internal/CommonWrapper/CommonWrapper.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxMenu.js +1 -1
- package/internal/CustomComboBox/ComboBoxMenu.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxView.js +13 -2
- package/internal/CustomComboBox/ComboBoxView.js.map +1 -1
- package/internal/Menu/Menu.js +3 -0
- package/internal/Menu/Menu.js.map +1 -1
- package/internal/Menu/Menu.styles.d.ts +1 -0
- package/internal/Menu/Menu.styles.js +13 -10
- package/internal/Menu/Menu.styles.js.map +1 -1
- package/internal/MenuMessage/MenuMessage.js +17 -1
- package/internal/MenuMessage/MenuMessage.js.map +1 -1
- package/internal/MenuMessage/MenuMessage.styles.d.ts +3 -0
- package/internal/MenuMessage/MenuMessage.styles.js +13 -4
- package/internal/MenuMessage/MenuMessage.styles.js.map +1 -1
- package/internal/MobilePopup/MobilePopup.d.ts +8 -0
- package/internal/MobilePopup/MobilePopup.js +34 -11
- package/internal/MobilePopup/MobilePopup.js.map +1 -1
- package/internal/MobilePopup/MobilePopup.styles.d.ts +7 -0
- package/internal/MobilePopup/MobilePopup.styles.js +34 -10
- package/internal/MobilePopup/MobilePopup.styles.js.map +1 -1
- package/internal/MobilePopup/MobilePopupFooter/MobilePopupFooter.d.ts +8 -1
- package/internal/MobilePopup/MobilePopupFooter/MobilePopupFooter.js +18 -1
- package/internal/MobilePopup/MobilePopupFooter/MobilePopupFooter.js.map +1 -1
- package/internal/MobilePopup/MobilePopupFooter/MobilePopupFooter.styles.d.ts +3 -0
- package/internal/MobilePopup/MobilePopupFooter/MobilePopupFooter.styles.js +14 -4
- package/internal/MobilePopup/MobilePopupFooter/MobilePopupFooter.styles.js.map +1 -1
- package/internal/MobilePopup/MobilePopupHeader/MobilePopupHeader.d.ts +4 -0
- package/internal/MobilePopup/MobilePopupHeader/MobilePopupHeader.js +48 -11
- package/internal/MobilePopup/MobilePopupHeader/MobilePopupHeader.js.map +1 -1
- package/internal/MobilePopup/MobilePopupHeader/MobilePopupHeader.styles.d.ts +6 -0
- package/internal/MobilePopup/MobilePopupHeader/MobilePopupHeader.styles.js +28 -8
- package/internal/MobilePopup/MobilePopupHeader/MobilePopupHeader.styles.js.map +1 -1
- package/internal/NativeTimeInput/NativeTimeInput.d.ts +16 -0
- package/internal/NativeTimeInput/NativeTimeInput.js +25 -0
- package/internal/NativeTimeInput/NativeTimeInput.js.map +1 -0
- package/internal/NativeTimeInput/NativeTimeInput.styles.d.ts +3 -0
- package/internal/NativeTimeInput/NativeTimeInput.styles.js +15 -0
- package/internal/NativeTimeInput/NativeTimeInput.styles.js.map +1 -0
- package/internal/NativeTimeInput/index.d.ts +1 -0
- package/internal/NativeTimeInput/index.js +2 -0
- package/internal/NativeTimeInput/index.js.map +1 -0
- package/internal/NativeTimeInput/utils.d.ts +7 -0
- package/internal/NativeTimeInput/utils.js +28 -0
- package/internal/NativeTimeInput/utils.js.map +1 -0
- package/internal/SpinnerIcon/SpinnerIcon.d.ts +3 -3
- package/internal/SpinnerIcon/SpinnerIcon.js +4 -4
- package/internal/SpinnerIcon/SpinnerIcon.js.map +1 -1
- package/internal/icons2022/LoadingIcon.js +1 -1
- package/internal/icons2022/LoadingIcon.js.map +1 -1
- package/internal/icons2022/QuestionCircleIcon/QuestionCircleIcon16Light.d.ts +2 -0
- package/internal/icons2022/QuestionCircleIcon/QuestionCircleIcon16Light.js +21 -0
- package/internal/icons2022/QuestionCircleIcon/QuestionCircleIcon16Light.js.map +1 -0
- package/internal/icons2022/QuestionCircleIcon/QuestionCircleIcon20Regular.d.ts +2 -0
- package/internal/icons2022/QuestionCircleIcon/QuestionCircleIcon20Regular.js +21 -0
- package/internal/icons2022/QuestionCircleIcon/QuestionCircleIcon20Regular.js.map +1 -0
- package/internal/icons2022/QuestionCircleIcon/QuestionCircleIcon24Regular.d.ts +2 -0
- package/internal/icons2022/QuestionCircleIcon/QuestionCircleIcon24Regular.js +21 -0
- package/internal/icons2022/QuestionCircleIcon/QuestionCircleIcon24Regular.js.map +1 -0
- package/internal/themes/BasicTheme.d.ts +48 -4
- package/internal/themes/BasicTheme.js +139 -5
- package/internal/themes/BasicTheme.js.map +1 -1
- package/internal/themes/DarkTheme6_1.d.ts +1 -0
- package/internal/themes/DarkTheme6_1.js +164 -0
- package/internal/themes/DarkTheme6_1.js.map +1 -0
- package/internal/themes/LightTheme6_1.d.ts +1 -0
- package/internal/themes/LightTheme6_1.js +164 -0
- package/internal/themes/LightTheme6_1.js.map +1 -0
- package/lib/theming/themes/DarkTheme.d.ts +1 -0
- package/lib/theming/themes/DarkTheme.js +3 -1
- package/lib/theming/themes/DarkTheme.js.map +1 -1
- package/lib/theming/themes/LightTheme.d.ts +1 -0
- package/lib/theming/themes/LightTheme.js +3 -1
- package/lib/theming/themes/LightTheme.js.map +1 -1
- package/package.json +3 -1
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
|
-
import type { Nullable } from '../../../typings/utility-types.js';
|
|
3
2
|
export type TimePrecision = 'minute' | 'second';
|
|
4
3
|
export type TimeSegment = 'hours' | 'minutes' | 'seconds';
|
|
5
4
|
export interface TimeSlot {
|
|
@@ -21,4 +20,4 @@ export declare const sanitizeSegment: (segment: string) => string;
|
|
|
21
20
|
export declare const normalizeTimeSegment: (segmentValue: string, segment: TimeSegment) => string;
|
|
22
21
|
export declare const normalizeEditableSegment: (segmentValue: string, segment: TimeSegment) => string;
|
|
23
22
|
export declare const hasPendingSingleDigit: (segmentValue: string) => boolean;
|
|
24
|
-
export declare const getDisplaySegments: (value:
|
|
23
|
+
export declare const getDisplaySegments: (value: string, precision: TimePrecision) => string[];
|
|
@@ -1,4 +1,4 @@
|
|
|
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,
|
|
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, ZERO_PAD_CHAR, } from './TimePicker.constants.js';
|
|
2
2
|
export var getTimeSegments = function (precision) { return TIME_SEGMENTS_BY_PRECISION[precision]; };
|
|
3
3
|
export var getTimeSegmentMax = function (segment) {
|
|
4
4
|
return segment === 'hours' ? HOURS_MAX_VALUE : MINUTES_AND_SECONDS_MAX_VALUE;
|
|
@@ -33,12 +33,12 @@ export var hasPendingSingleDigit = function (segmentValue) {
|
|
|
33
33
|
export var getDisplaySegments = function (value, precision) {
|
|
34
34
|
var segments = getTimeSegments(precision);
|
|
35
35
|
var fallback = segments.map(function () { return EMPTY_SEGMENT; });
|
|
36
|
-
if (
|
|
36
|
+
if (value === EMPTY_VALUE) {
|
|
37
37
|
return fallback;
|
|
38
38
|
}
|
|
39
39
|
if (value.includes(TIME_SEPARATOR) || value.includes(TIME_PLACEHOLDER_CHAR)) {
|
|
40
|
-
var sourceParts_1 = value.split(
|
|
41
|
-
return segments.map(function (_, index) { var _a; return sanitizeSegment((_a = sourceParts_1[index]) !== null && _a !== void 0 ? _a :
|
|
40
|
+
var sourceParts_1 = value.split(TIME_SEPARATOR);
|
|
41
|
+
return segments.map(function (_, index) { var _a; return sanitizeSegment((_a = sourceParts_1[index]) !== null && _a !== void 0 ? _a : EMPTY_VALUE); });
|
|
42
42
|
}
|
|
43
43
|
var digits = value.replace(NON_DIGIT_REGEXP, EMPTY_VALUE);
|
|
44
44
|
return segments.map(function (_, index) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimePicker.shared.js","sourceRoot":"","sources":["../../../../components/TimePicker/helpers/TimePicker.shared.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TimePicker.shared.js","sourceRoot":"","sources":["../../../../components/TimePicker/helpers/TimePicker.shared.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ReactNode } from 'react';\n\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 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: string, precision: TimePrecision): string[] => {\n const segments = getTimeSegments(precision);\n const fallback = segments.map(() => EMPTY_SEGMENT);\n\n if (value === EMPTY_VALUE) {\n return fallback;\n }\n\n if (value.includes(TIME_SEPARATOR) || value.includes(TIME_PLACEHOLDER_CHAR)) {\n const sourceParts = value.split(TIME_SEPARATOR);\n return segments.map((_, index) => sanitizeSegment(sourceParts[index] ?? EMPTY_VALUE));\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"]}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import type { Nullable } from '../../../typings/utility-types.js';
|
|
2
1
|
import { type TimePrecision, type TimeSegment } from './TimePicker.shared.js';
|
|
3
2
|
export declare const getEmptyDisplayValue: (precision: TimePrecision) => string;
|
|
4
|
-
export declare const isTimeDisplayEmpty: (value:
|
|
5
|
-
export declare const
|
|
6
|
-
export declare const
|
|
7
|
-
export declare const normalizeSlotValue: (value: string, precision: TimePrecision) => string;
|
|
3
|
+
export declare const isTimeDisplayEmpty: (value: string) => boolean;
|
|
4
|
+
export declare const normalizeTimeValue: (value: string, precision: TimePrecision) => string;
|
|
5
|
+
export declare const isTimeValueInRange: (value: string, precision: TimePrecision, minValue?: string, maxValue?: string) => boolean;
|
|
8
6
|
export declare const replaceTimeSegment: (value: string, segment: TimeSegment, nextSegmentValue: string, precision: TimePrecision) => string;
|
|
9
7
|
export declare const parsePastedTimeValue: (value: string, precision: TimePrecision) => string;
|
|
10
8
|
export declare const getTimeSegmentValue: (value: string, segment: TimeSegment, precision: TimePrecision) => string;
|
|
@@ -5,20 +5,34 @@ export var getEmptyDisplayValue = function (precision) {
|
|
|
5
5
|
.map(function () { return EMPTY_SEGMENT; })
|
|
6
6
|
.join(TIME_SEPARATOR);
|
|
7
7
|
};
|
|
8
|
-
export var isTimeDisplayEmpty = function (value) { return !DIGIT_REGEXP.test(value
|
|
9
|
-
export var formatToDisplayTimeValue = function (value, precision) {
|
|
10
|
-
return getDisplaySegments(value, precision).join(TIME_SEPARATOR);
|
|
11
|
-
};
|
|
8
|
+
export var isTimeDisplayEmpty = function (value) { return !DIGIT_REGEXP.test(value); };
|
|
12
9
|
export var normalizeTimeValue = function (value, precision) {
|
|
13
10
|
if (isTimeDisplayEmpty(value)) {
|
|
14
|
-
return
|
|
11
|
+
return EMPTY_VALUE;
|
|
15
12
|
}
|
|
16
13
|
return getTimeSegments(precision)
|
|
17
14
|
.map(function (segment, index) { return normalizeTimeSegment(getDisplaySegments(value, precision)[index], segment); })
|
|
18
15
|
.join(TIME_SEPARATOR);
|
|
19
16
|
};
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
var normalizeTimeRangeValue = function (value, precision) {
|
|
18
|
+
if (!value) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
var normalizedValue = normalizeTimeValue(value, precision);
|
|
22
|
+
return normalizedValue === EMPTY_VALUE ? undefined : normalizedValue;
|
|
23
|
+
};
|
|
24
|
+
export var isTimeValueInRange = function (value, precision, minValue, maxValue) {
|
|
25
|
+
var normalizedValue = normalizeTimeValue(value, precision);
|
|
26
|
+
if (normalizedValue === EMPTY_VALUE) {
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
var normalizedMinValue = normalizeTimeRangeValue(minValue, precision);
|
|
30
|
+
var normalizedMaxValue = normalizeTimeRangeValue(maxValue, precision);
|
|
31
|
+
if (normalizedMinValue && normalizedMaxValue && normalizedMinValue > normalizedMaxValue) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
return !((normalizedMinValue && normalizedValue < normalizedMinValue) ||
|
|
35
|
+
(normalizedMaxValue && normalizedValue > normalizedMaxValue));
|
|
22
36
|
};
|
|
23
37
|
export var replaceTimeSegment = function (value, segment, nextSegmentValue, precision) {
|
|
24
38
|
var segments = getDisplaySegments(value, precision);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimePicker.value.js","sourceRoot":"","sources":["../../../../components/TimePicker/helpers/TimePicker.value.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TimePicker.value.js","sourceRoot":"","sources":["../../../../components/TimePicker/helpers/TimePicker.value.ts"],"names":[],"mappings":"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","sourcesContent":["import {\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: string): boolean => !DIGIT_REGEXP.test(value);\n\nexport const normalizeTimeValue = (value: string, precision: TimePrecision): string => {\n if (isTimeDisplayEmpty(value)) {\n return EMPTY_VALUE;\n }\n\n return getTimeSegments(precision)\n .map((segment, index) => normalizeTimeSegment(getDisplaySegments(value, precision)[index], segment))\n .join(TIME_SEPARATOR);\n};\n\nconst normalizeTimeRangeValue = (value: string | undefined, precision: TimePrecision): string | undefined => {\n if (!value) {\n return undefined;\n }\n\n const normalizedValue = normalizeTimeValue(value, precision);\n\n return normalizedValue === EMPTY_VALUE ? undefined : normalizedValue;\n};\n\nexport const isTimeValueInRange = (\n value: string,\n precision: TimePrecision,\n minValue?: string,\n maxValue?: string,\n): boolean => {\n const normalizedValue = normalizeTimeValue(value, precision);\n\n if (normalizedValue === EMPTY_VALUE) {\n return true;\n }\n\n const normalizedMinValue = normalizeTimeRangeValue(minValue, precision);\n const normalizedMaxValue = normalizeTimeRangeValue(maxValue, precision);\n\n if (normalizedMinValue && normalizedMaxValue && normalizedMinValue > normalizedMaxValue) {\n return true;\n }\n\n return !(\n (normalizedMinValue && normalizedValue < normalizedMinValue) ||\n (normalizedMaxValue && normalizedValue > normalizedMaxValue)\n );\n};\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"]}
|
|
@@ -2,7 +2,7 @@ import type { RefObject } from 'react';
|
|
|
2
2
|
import type { TimePrecision } from '../helpers/TimePicker.shared.js';
|
|
3
3
|
interface UseTimePickerValueOptions {
|
|
4
4
|
isInputFocused: boolean;
|
|
5
|
-
value?: string
|
|
5
|
+
value?: string;
|
|
6
6
|
precision: TimePrecision;
|
|
7
7
|
onValueChange?(value: string): void;
|
|
8
8
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { useCallback, useEffect,
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
|
+
import { EMPTY_VALUE } from '../helpers/TimePicker.constants.js';
|
|
2
3
|
import { isTimeDisplayEmpty, normalizeTimeValue } from '../helpers/TimePicker.value.js';
|
|
3
4
|
export var useTimePickerValue = function (options) {
|
|
4
5
|
var value = options.value, precision = options.precision, isInputFocused = options.isInputFocused, onValueChange = options.onValueChange;
|
|
5
|
-
var
|
|
6
|
-
var _a = useState(
|
|
6
|
+
var committedValue = normalizeTimeValue(value !== null && value !== void 0 ? value : EMPTY_VALUE, precision);
|
|
7
|
+
var _a = useState(committedValue), editingValue = _a[0], setEditingValueState = _a[1];
|
|
7
8
|
var editingValueRef = useRef(editingValue);
|
|
8
9
|
var setEditingValue = useCallback(function (nextEditingValue) {
|
|
9
10
|
editingValueRef.current = nextEditingValue;
|
|
@@ -11,9 +12,9 @@ export var useTimePickerValue = function (options) {
|
|
|
11
12
|
}, []);
|
|
12
13
|
useEffect(function () {
|
|
13
14
|
if (!isInputFocused) {
|
|
14
|
-
setEditingValue(
|
|
15
|
+
setEditingValue(committedValue);
|
|
15
16
|
}
|
|
16
|
-
}, [
|
|
17
|
+
}, [committedValue, isInputFocused, setEditingValue]);
|
|
17
18
|
var emitValue = useCallback(function (nextValue) {
|
|
18
19
|
onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(nextValue);
|
|
19
20
|
}, [onValueChange]);
|
|
@@ -22,13 +23,13 @@ export var useTimePickerValue = function (options) {
|
|
|
22
23
|
emitValue(normalizeTimeValue(nextEditingValue, precision));
|
|
23
24
|
}, [emitValue, precision, setEditingValue]);
|
|
24
25
|
var clearEditingValue = useCallback(function () {
|
|
25
|
-
setEditingValue(
|
|
26
|
+
setEditingValue(EMPTY_VALUE);
|
|
26
27
|
}, [setEditingValue]);
|
|
27
28
|
var commitEditingValue = useCallback(function () {
|
|
28
29
|
var currentEditingValue = editingValueRef.current;
|
|
29
30
|
if (isTimeDisplayEmpty(currentEditingValue)) {
|
|
30
31
|
clearEditingValue();
|
|
31
|
-
return
|
|
32
|
+
return EMPTY_VALUE;
|
|
32
33
|
}
|
|
33
34
|
var nextValue = normalizeTimeValue(currentEditingValue, precision);
|
|
34
35
|
setEditingValue(nextValue);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTimePickerValue.js","sourceRoot":"","sources":["../../../../components/TimePicker/hooks/useTimePickerValue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"useTimePickerValue.js","sourceRoot":"","sources":["../../../../components/TimePicker/hooks/useTimePickerValue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAEjE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAkBxF,MAAM,CAAC,IAAM,kBAAkB,GAAG,UAAC,OAAkC;IAC3D,IAAA,KAAK,GAA+C,OAAO,MAAtD,EAAE,SAAS,GAAoC,OAAO,UAA3C,EAAE,cAAc,GAAoB,OAAO,eAA3B,EAAE,aAAa,GAAK,OAAO,cAAZ,CAAa;IAEpE,IAAM,cAAc,GAAG,kBAAkB,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,WAAW,EAAE,SAAS,CAAC,CAAC;IAErE,IAAA,KAAuC,QAAQ,CAAS,cAAc,CAAC,EAAtE,YAAY,QAAA,EAAE,oBAAoB,QAAoC,CAAC;IAE9E,IAAM,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IAE7C,IAAM,eAAe,GAAG,WAAW,CAAC,UAAC,gBAAwB;QAC3D,eAAe,CAAC,OAAO,GAAG,gBAAgB,CAAC;QAC3C,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;IACzC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC;QACR,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,eAAe,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC;IACH,CAAC,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC;IAEtD,IAAM,SAAS,GAAG,WAAW,CAC3B,UAAC,SAAiB;QAChB,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAG,SAAS,CAAC,CAAC;IAC7B,CAAC,EACD,CAAC,aAAa,CAAC,CAChB,CAAC;IAEF,IAAM,kBAAkB,GAAG,WAAW,CACpC,UAAC,gBAAwB;QACvB,eAAe,CAAC,gBAAgB,CAAC,CAAC;QAClC,SAAS,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,CAAC;IAC7D,CAAC,EACD,CAAC,SAAS,EAAE,SAAS,EAAE,eAAe,CAAC,CACxC,CAAC;IAEF,IAAM,iBAAiB,GAAG,WAAW,CAAC;QACpC,eAAe,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,IAAM,kBAAkB,GAAG,WAAW,CAAC;QACrC,IAAM,mBAAmB,GAAG,eAAe,CAAC,OAAO,CAAC;QAEpD,IAAI,kBAAkB,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC5C,iBAAiB,EAAE,CAAC;YACpB,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,IAAM,SAAS,GAAG,kBAAkB,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;QAErE,eAAe,CAAC,SAAS,CAAC,CAAC;QAC3B,SAAS,CAAC,SAAS,CAAC,CAAC;QAErB,OAAO,SAAS,CAAC;IACnB,CAAC,EAAE,CAAC,iBAAiB,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;IAEhF,OAAO;QACL,YAAY,cAAA;QACZ,eAAe,iBAAA;QACf,eAAe,iBAAA;QACf,kBAAkB,oBAAA;QAClB,kBAAkB,oBAAA;QAClB,iBAAiB,mBAAA;KAClB,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type { RefObject } from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { EMPTY_VALUE } from '../helpers/TimePicker.constants.js';\nimport type { TimePrecision } from '../helpers/TimePicker.shared.js';\nimport { isTimeDisplayEmpty, normalizeTimeValue } from '../helpers/TimePicker.value.js';\n\ninterface UseTimePickerValueOptions {\n isInputFocused: boolean;\n value?: string;\n precision: TimePrecision;\n onValueChange?(value: string): void;\n}\n\ninterface UseTimePickerValueResult {\n editingValue: string;\n editingValueRef: RefObject<string>;\n setEditingValue(value: string): void;\n updateEditingValue(value: string): void;\n commitEditingValue(): string;\n clearEditingValue(): void;\n}\n\nexport const useTimePickerValue = (options: UseTimePickerValueOptions): UseTimePickerValueResult => {\n const { value, precision, isInputFocused, onValueChange } = options;\n\n const committedValue = normalizeTimeValue(value ?? EMPTY_VALUE, precision);\n\n const [editingValue, setEditingValueState] = useState<string>(committedValue);\n\n const editingValueRef = useRef(editingValue);\n\n const setEditingValue = useCallback((nextEditingValue: string) => {\n editingValueRef.current = nextEditingValue;\n setEditingValueState(nextEditingValue);\n }, []);\n\n useEffect(() => {\n if (!isInputFocused) {\n setEditingValue(committedValue);\n }\n }, [committedValue, isInputFocused, setEditingValue]);\n\n const emitValue = useCallback(\n (nextValue: string) => {\n onValueChange?.(nextValue);\n },\n [onValueChange],\n );\n\n const updateEditingValue = useCallback(\n (nextEditingValue: string) => {\n setEditingValue(nextEditingValue);\n emitValue(normalizeTimeValue(nextEditingValue, precision));\n },\n [emitValue, precision, setEditingValue],\n );\n\n const clearEditingValue = useCallback(() => {\n setEditingValue(EMPTY_VALUE);\n }, [setEditingValue]);\n\n const commitEditingValue = useCallback((): string => {\n const currentEditingValue = editingValueRef.current;\n\n if (isTimeDisplayEmpty(currentEditingValue)) {\n clearEditingValue();\n return EMPTY_VALUE;\n }\n\n const nextValue = normalizeTimeValue(currentEditingValue, precision);\n\n setEditingValue(nextValue);\n emitValue(nextValue);\n\n return nextValue;\n }, [clearEditingValue, editingValueRef, emitValue, precision, setEditingValue]);\n\n return {\n editingValue,\n editingValueRef,\n setEditingValue,\n updateEditingValue,\n commitEditingValue,\n clearEditingValue,\n };\n};\n"]}
|
|
@@ -6,8 +6,11 @@ import type { ThemeIn } from '../../lib/theming/Theme.js';
|
|
|
6
6
|
import type { Nullable } from '../../typings/utility-types.js';
|
|
7
7
|
import { ToastView } from './ToastView.js';
|
|
8
8
|
export interface Action {
|
|
9
|
+
/** Текст на кнопке действия. */
|
|
9
10
|
label: string;
|
|
11
|
+
/** Выполняется при нажатии на кнопку действия. */
|
|
10
12
|
handler: () => void;
|
|
13
|
+
/** Уточняет доступное имя кнопки для вспомогательных технологий. */
|
|
11
14
|
'aria-label'?: string;
|
|
12
15
|
}
|
|
13
16
|
/**
|
|
@@ -26,26 +29,22 @@ export interface ToastState {
|
|
|
26
29
|
currentUse: ToastUse;
|
|
27
30
|
}
|
|
28
31
|
export interface ToastProps extends Pick<AriaAttributes, 'aria-label'>, CommonProps {
|
|
29
|
-
/**
|
|
32
|
+
/** Событие появления уведомления. */
|
|
30
33
|
onPush?: (notification: string, action?: Action) => void;
|
|
31
|
-
/**
|
|
34
|
+
/** Событие закрытия уведомления. */
|
|
32
35
|
onClose?: (notification: string, action?: Action) => void;
|
|
33
|
-
/**
|
|
36
|
+
/** Переменные темы поверх значений из контекста. */
|
|
34
37
|
theme?: ThemeIn;
|
|
35
38
|
}
|
|
36
39
|
/** Объект с конфигурацией отображения Toast-а */
|
|
37
40
|
export interface ToastPushConfig {
|
|
41
|
+
/** Добавляет кнопку действия в тост. */
|
|
38
42
|
action?: Nullable<Action>;
|
|
43
|
+
/** Длительность показа в миллисекундах. */
|
|
39
44
|
showTime?: number;
|
|
45
|
+
/** Показывает кнопку закрытия рядом с текстом. */
|
|
40
46
|
showCloseIcon?: boolean;
|
|
41
|
-
/**
|
|
42
|
-
* Определяет стили для тоста.
|
|
43
|
-
*
|
|
44
|
-
* - default стиль для отображения по умолчанию
|
|
45
|
-
* - error стиль для отображения ошибок
|
|
46
|
-
*
|
|
47
|
-
* По умолчанию будет использован стиль default.
|
|
48
|
-
**/
|
|
47
|
+
/** Определяет стиль оформления: обычный или ошибка (`error`). */
|
|
49
48
|
use?: ToastUse;
|
|
50
49
|
}
|
|
51
50
|
export type ToastPushApi = (notification: React.ReactNode, config?: ToastPushConfig) => void;
|
|
@@ -57,9 +56,7 @@ export declare const ToastDataTids: {
|
|
|
57
56
|
readonly close: "ToastView__close";
|
|
58
57
|
};
|
|
59
58
|
/**
|
|
60
|
-
*
|
|
61
|
-
* Результат может быть положительным, отрицательным или нейтральным.
|
|
62
|
-
*
|
|
59
|
+
* Тост — это короткое немодальное уведомление о результате действия пользователя: успех, ошибка или нейтральный статус.
|
|
63
60
|
*/
|
|
64
61
|
export declare class Toast extends React.Component<ToastProps, ToastState> {
|
|
65
62
|
static __KONTUR_REACT_UI__: string;
|
|
@@ -87,6 +84,8 @@ export declare class Toast extends React.Component<ToastProps, ToastState> {
|
|
|
87
84
|
*/
|
|
88
85
|
push: ToastPushApi;
|
|
89
86
|
/**
|
|
87
|
+
* Закрывает текущее уведомление без ожидания таймера.
|
|
88
|
+
*
|
|
90
89
|
* @public
|
|
91
90
|
*/
|
|
92
91
|
close: () => void;
|
|
@@ -48,9 +48,7 @@ export var ToastDataTids = {
|
|
|
48
48
|
close: 'ToastView__close',
|
|
49
49
|
};
|
|
50
50
|
/**
|
|
51
|
-
*
|
|
52
|
-
* Результат может быть положительным, отрицательным или нейтральным.
|
|
53
|
-
*
|
|
51
|
+
* Тост — это короткое немодальное уведомление о результате действия пользователя: успех, ошибка или нейтральный статус.
|
|
54
52
|
*/
|
|
55
53
|
var Toast = /** @class */ (function (_super) {
|
|
56
54
|
__extends(Toast, _super);
|
|
@@ -86,6 +84,8 @@ var Toast = /** @class */ (function (_super) {
|
|
|
86
84
|
}, _this._setTimer);
|
|
87
85
|
};
|
|
88
86
|
/**
|
|
87
|
+
* Закрывает текущее уведомление без ожидания таймера.
|
|
88
|
+
*
|
|
89
89
|
* @public
|
|
90
90
|
*/
|
|
91
91
|
_this.close = function () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toast.js","sourceRoot":"","sources":["../../../components/Toast/Toast.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport type { AriaAttributes } from 'react';\nimport React from 'react';\nimport { CSSTransition, TransitionGroup } from 'react-transition-group';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { RenderContainer } from '../../internal/RenderContainer/index.js';\nimport { isTestEnv } from '../../lib/currentEnvironment.js';\nimport type { SafeTimer } from '../../lib/globalObject.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport type { Theme, ThemeIn } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport { getStyles } from './Toast.styles.js';\nimport { ToastView } from './ToastView.js';\nimport type { ToastViewProps } from './ToastView.js';\n\nexport interface Action {\n label: string;\n handler: () => void;\n 'aria-label'?: string;\n}\n\n/**\n * Состояния тоста:\n *\n * - default стиль для отображения по умолчанию\n * - error стиль для отображения ошибок\n **/\nexport type ToastUse = 'default' | 'error';\n\nexport interface ToastState {\n notification: Nullable<React.ReactNode>;\n action: Nullable<Action>;\n id: number;\n showTime: Nullable<number>;\n showCloseIcon?: boolean;\n currentUse: ToastUse;\n}\n\nexport interface ToastProps extends Pick<AriaAttributes, 'aria-label'>, CommonProps {\n /** Задает функцию, которая вызывается при возникновении тоста. */\n onPush?: (notification: string, action?: Action) => void;\n\n /** Задает функцию, которая вызывается при закрытии тоста. */\n onClose?: (notification: string, action?: Action) => void;\n\n /** Задает объект с переменными темы. Он будет объединён с темой из контекста. */\n theme?: ThemeIn;\n}\n\n/** Объект с конфигурацией отображения Toast-а */\nexport interface ToastPushConfig {\n action?: Nullable<Action>;\n showTime?: number;\n showCloseIcon?: boolean;\n /**\n * Определяет стили для тоста.\n *\n * - default стиль для отображения по умолчанию\n * - error стиль для отображения ошибок\n *\n * По умолчанию будет использован стиль default.\n **/\n use?: ToastUse;\n}\n\nexport type ToastPushApi = (notification: React.ReactNode, config?: ToastPushConfig) => void;\n\nexport type ToastClose = () => void;\n\nexport const ToastDataTids = {\n toastStatic: 'StaticToast',\n toastView: 'ToastView__root',\n action: 'ToastView__action',\n close: 'ToastView__close',\n} as const;\n\n/**\n * `Toast` — это короткое немодальное уведомление, которое сообщает пользователю о результате выполнения его команды.\n * Результат может быть положительным, отрицательным или нейтральным.\n *\n */\n@withRenderEnvironment\n@rootNode\nexport class Toast extends React.Component<ToastProps, ToastState> {\n public static __KONTUR_REACT_UI__ = 'Toast';\n public static displayName = 'Toast';\n\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n private styles!: ReturnType<typeof getStyles>;\n private emotion!: Emotion;\n private theme!: Theme;\n\n public _toast: Nullable<ToastView>;\n private _timeout: SafeTimer;\n private rootRef = React.createRef<HTMLElement>();\n\n constructor(props: ToastProps) {\n super(props);\n this.state = {\n notification: null,\n action: null,\n id: 0,\n showTime: null,\n showCloseIcon: false,\n currentUse: 'default',\n };\n }\n\n public componentWillUnmount() {\n this._clearTimer();\n }\n\n public render(): React.JSX.Element {\n this.styles = getStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = this.props.theme ? ThemeFactory.create(this.props.theme as Theme, theme) : theme;\n return (\n <ThemeContext.Provider value={this.theme}>\n <RenderContainer>\n <TransitionGroup>{this._renderToast()}</TransitionGroup>\n </RenderContainer>\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * Показывает тост с `notification` в качестве сообщения.\n * Тост автоматически скрывается через 3 или 7 секунд,\n * в зависимости от наличия у него кнопки `action` внутри config-а.\n * Время показа можно задать вручную, передав `showTime` внутри config-а.\n *\n * @public\n * @param {React.ReactNode} notification\n * @param {ToastPushConfig} config объект с конфигурацией отображения компонента Toast\n */\n public push: ToastPushApi = (notification: React.ReactNode, config?: ToastPushConfig) => {\n if (this.state.notification) {\n this.close();\n }\n\n safelyCall(this.props.onPush, notification, config?.action);\n\n this.setState(\n ({ id }) => ({\n notification,\n action: config?.action,\n id: id + 1,\n showTime: config?.showTime,\n showCloseIcon: config?.showCloseIcon,\n currentUse: config?.use ?? 'default',\n }),\n this._setTimer,\n );\n };\n\n /**\n * @public\n */\n public close = (): void => {\n safelyCall(this.props.onClose, this.state.notification, this.state.action);\n this.setState({ notification: null, action: null });\n };\n\n private _renderToast() {\n const { notification, action, id, showCloseIcon, currentUse } = this.state;\n\n if (!notification) {\n return null;\n }\n\n const toastProps: ToastViewProps = {\n onMouseEnter: this._clearTimer,\n onMouseLeave: this._setTimer,\n onClose: this.close,\n children: notification,\n 'aria-label': this.props['aria-label'],\n action,\n showCloseIcon,\n use: currentUse,\n };\n\n return (\n <CSSTransition\n key={id}\n classNames={{\n enter: this.styles.enter(),\n enterActive: this.styles.enterActive(),\n exit: this.styles.exit(),\n exitActive: this.styles.exitActive(),\n }}\n timeout={{\n enter: 200,\n exit: 150,\n }}\n enter={!isTestEnv}\n exit={!isTestEnv}\n nodeRef={this.rootRef}\n >\n <CommonWrapper rootNodeRef={this.setRootRef} {...this.props}>\n <ToastView ref={this._refToast} {...toastProps} />\n </CommonWrapper>\n </CSSTransition>\n );\n }\n\n private setRootRef = (element: Nullable<Element>) => {\n this.setRootNode(element);\n // @ts-expect-error: See: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/31065.\n this.rootRef.current = element;\n };\n\n private _clearTimer = () => {\n if (this._timeout) {\n clearTimeout(this._timeout);\n this._timeout = null;\n }\n };\n\n private _setTimer = () => {\n this._clearTimer();\n\n let showTime = this.state.action ? 7000 : 3000;\n showTime = this.state.showTime ?? showTime;\n this._timeout = setTimeout(this.close, showTime);\n };\n\n private _refToast = (element: ToastView) => {\n this._toast = element;\n };\n}\n\nfunction safelyCall(fn: Nullable<(a?: any) => any>, ...args: any[]) {\n if (fn) {\n fn(...args);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Toast.js","sourceRoot":"","sources":["../../../components/Toast/Toast.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport type { AriaAttributes } from 'react';\nimport React from 'react';\nimport { CSSTransition, TransitionGroup } from 'react-transition-group';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { RenderContainer } from '../../internal/RenderContainer/index.js';\nimport { isTestEnv } from '../../lib/currentEnvironment.js';\nimport type { SafeTimer } from '../../lib/globalObject.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport type { Theme, ThemeIn } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport { getStyles } from './Toast.styles.js';\nimport { ToastView } from './ToastView.js';\nimport type { ToastViewProps } from './ToastView.js';\n\nexport interface Action {\n /** Текст на кнопке действия. */\n label: string;\n /** Выполняется при нажатии на кнопку действия. */\n handler: () => void;\n /** Уточняет доступное имя кнопки для вспомогательных технологий. */\n 'aria-label'?: string;\n}\n\n/**\n * Состояния тоста:\n *\n * - default стиль для отображения по умолчанию\n * - error стиль для отображения ошибок\n **/\nexport type ToastUse = 'default' | 'error';\n\nexport interface ToastState {\n notification: Nullable<React.ReactNode>;\n action: Nullable<Action>;\n id: number;\n showTime: Nullable<number>;\n showCloseIcon?: boolean;\n currentUse: ToastUse;\n}\n\nexport interface ToastProps extends Pick<AriaAttributes, 'aria-label'>, CommonProps {\n /** Событие появления уведомления. */\n onPush?: (notification: string, action?: Action) => void;\n\n /** Событие закрытия уведомления. */\n onClose?: (notification: string, action?: Action) => void;\n\n /** Переменные темы поверх значений из контекста. */\n theme?: ThemeIn;\n}\n\n/** Объект с конфигурацией отображения Toast-а */\nexport interface ToastPushConfig {\n /** Добавляет кнопку действия в тост. */\n action?: Nullable<Action>;\n /** Длительность показа в миллисекундах. */\n showTime?: number;\n /** Показывает кнопку закрытия рядом с текстом. */\n showCloseIcon?: boolean;\n /** Определяет стиль оформления: обычный или ошибка (`error`). */\n use?: ToastUse;\n}\n\nexport type ToastPushApi = (notification: React.ReactNode, config?: ToastPushConfig) => void;\n\nexport type ToastClose = () => void;\n\nexport const ToastDataTids = {\n toastStatic: 'StaticToast',\n toastView: 'ToastView__root',\n action: 'ToastView__action',\n close: 'ToastView__close',\n} as const;\n\n/**\n * Тост — это короткое немодальное уведомление о результате действия пользователя: успех, ошибка или нейтральный статус.\n */\n@withRenderEnvironment\n@rootNode\nexport class Toast extends React.Component<ToastProps, ToastState> {\n public static __KONTUR_REACT_UI__ = 'Toast';\n public static displayName = 'Toast';\n\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n private styles!: ReturnType<typeof getStyles>;\n private emotion!: Emotion;\n private theme!: Theme;\n\n public _toast: Nullable<ToastView>;\n private _timeout: SafeTimer;\n private rootRef = React.createRef<HTMLElement>();\n\n constructor(props: ToastProps) {\n super(props);\n this.state = {\n notification: null,\n action: null,\n id: 0,\n showTime: null,\n showCloseIcon: false,\n currentUse: 'default',\n };\n }\n\n public componentWillUnmount() {\n this._clearTimer();\n }\n\n public render(): React.JSX.Element {\n this.styles = getStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = this.props.theme ? ThemeFactory.create(this.props.theme as Theme, theme) : theme;\n return (\n <ThemeContext.Provider value={this.theme}>\n <RenderContainer>\n <TransitionGroup>{this._renderToast()}</TransitionGroup>\n </RenderContainer>\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * Показывает тост с `notification` в качестве сообщения.\n * Тост автоматически скрывается через 3 или 7 секунд,\n * в зависимости от наличия у него кнопки `action` внутри config-а.\n * Время показа можно задать вручную, передав `showTime` внутри config-а.\n *\n * @public\n * @param {React.ReactNode} notification\n * @param {ToastPushConfig} config объект с конфигурацией отображения компонента Toast\n */\n public push: ToastPushApi = (notification: React.ReactNode, config?: ToastPushConfig) => {\n if (this.state.notification) {\n this.close();\n }\n\n safelyCall(this.props.onPush, notification, config?.action);\n\n this.setState(\n ({ id }) => ({\n notification,\n action: config?.action,\n id: id + 1,\n showTime: config?.showTime,\n showCloseIcon: config?.showCloseIcon,\n currentUse: config?.use ?? 'default',\n }),\n this._setTimer,\n );\n };\n\n /**\n * Закрывает текущее уведомление без ожидания таймера.\n *\n * @public\n */\n public close = (): void => {\n safelyCall(this.props.onClose, this.state.notification, this.state.action);\n this.setState({ notification: null, action: null });\n };\n\n private _renderToast() {\n const { notification, action, id, showCloseIcon, currentUse } = this.state;\n\n if (!notification) {\n return null;\n }\n\n const toastProps: ToastViewProps = {\n onMouseEnter: this._clearTimer,\n onMouseLeave: this._setTimer,\n onClose: this.close,\n children: notification,\n 'aria-label': this.props['aria-label'],\n action,\n showCloseIcon,\n use: currentUse,\n };\n\n return (\n <CSSTransition\n key={id}\n classNames={{\n enter: this.styles.enter(),\n enterActive: this.styles.enterActive(),\n exit: this.styles.exit(),\n exitActive: this.styles.exitActive(),\n }}\n timeout={{\n enter: 200,\n exit: 150,\n }}\n enter={!isTestEnv}\n exit={!isTestEnv}\n nodeRef={this.rootRef}\n >\n <CommonWrapper rootNodeRef={this.setRootRef} {...this.props}>\n <ToastView ref={this._refToast} {...toastProps} />\n </CommonWrapper>\n </CSSTransition>\n );\n }\n\n private setRootRef = (element: Nullable<Element>) => {\n this.setRootNode(element);\n // @ts-expect-error: See: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/31065.\n this.rootRef.current = element;\n };\n\n private _clearTimer = () => {\n if (this._timeout) {\n clearTimeout(this._timeout);\n this._timeout = null;\n }\n };\n\n private _setTimer = () => {\n this._clearTimer();\n\n let showTime = this.state.action ? 7000 : 3000;\n showTime = this.state.showTime ?? showTime;\n this._timeout = setTimeout(this.close, showTime);\n };\n\n private _refToast = (element: ToastView) => {\n this._toast = element;\n };\n}\n\nfunction safelyCall(fn: Nullable<(a?: any) => any>, ...args: any[]) {\n if (fn) {\n fn(...args);\n }\n}\n"]}
|
|
@@ -5,17 +5,19 @@ import type { TGetRootNode } from '../../lib/rootNode/index.js';
|
|
|
5
5
|
import type { Nullable } from '../../typings/utility-types.js';
|
|
6
6
|
import type { Action, ToastUse } from './Toast.js';
|
|
7
7
|
export interface ToastViewProps extends Pick<AriaAttributes, 'aria-label'>, CommonProps {
|
|
8
|
-
/**
|
|
8
|
+
/** Отображает контент уведомления. */
|
|
9
9
|
children?: React.ReactNode;
|
|
10
|
-
/** Добавляет
|
|
10
|
+
/** Добавляет кнопку действия в тост. */
|
|
11
11
|
action?: Nullable<Action>;
|
|
12
|
+
/** Показывает кнопку закрытия рядом с текстом. */
|
|
12
13
|
showCloseIcon?: boolean;
|
|
14
|
+
/** Вызывается при закрытии тоста из разметки. */
|
|
13
15
|
onClose?: () => void;
|
|
16
|
+
/** Вызывается при наведении курсора на тост. */
|
|
14
17
|
onMouseEnter?: () => void;
|
|
18
|
+
/** Вызывается при уходе курсора с тоста. */
|
|
15
19
|
onMouseLeave?: () => void;
|
|
16
|
-
/**
|
|
17
|
-
* Задаёт стили для отображения тоста в зависимости от назначения.
|
|
18
|
-
**/
|
|
20
|
+
/** Выбирает стиль оформления: обычный или ошибка (`error`). */
|
|
19
21
|
use?: ToastUse;
|
|
20
22
|
}
|
|
21
23
|
export declare class ToastView extends React.Component<ToastViewProps> {
|
|
@@ -26,6 +28,7 @@ export declare class ToastView extends React.Component<ToastViewProps> {
|
|
|
26
28
|
getRootNode: TGetRootNode;
|
|
27
29
|
private setRootNode;
|
|
28
30
|
private readonly locale;
|
|
31
|
+
private isMobileLayout;
|
|
29
32
|
render(): React.JSX.Element;
|
|
30
33
|
private renderMain;
|
|
31
34
|
}
|
|
@@ -38,6 +38,8 @@ import { locale } from '../../lib/locale/decorators.js';
|
|
|
38
38
|
import { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';
|
|
39
39
|
import { rootNode } from '../../lib/rootNode/index.js';
|
|
40
40
|
import { ThemeContext } from '../../lib/theming/ThemeContext.js';
|
|
41
|
+
import { isThemeGTE } from '../../lib/theming/ThemeHelpers.js';
|
|
42
|
+
import { responsiveLayout } from '../ResponsiveLayout/decorator.js';
|
|
41
43
|
import { ToastLocaleHelper } from './locale/index.js';
|
|
42
44
|
import { ToastDataTids } from './Toast.js';
|
|
43
45
|
import { getStyles } from './ToastView.styles.js';
|
|
@@ -47,19 +49,36 @@ var ToastView = /** @class */ (function (_super) {
|
|
|
47
49
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
48
50
|
_this.renderMain = function () {
|
|
49
51
|
var _a = _this.props, action = _a.action, showCloseIcon = _a.showCloseIcon, onClose = _a.onClose, onMouseEnter = _a.onMouseEnter, onMouseLeave = _a.onMouseLeave, use = _a.use;
|
|
52
|
+
var isTheme6_1 = isThemeGTE(_this.theme, '6.1');
|
|
50
53
|
var toastCloseColors = use === 'error'
|
|
51
|
-
? {
|
|
52
|
-
|
|
54
|
+
? {
|
|
55
|
+
hover: _this.theme.toastCloseHoverColorError,
|
|
56
|
+
default: _this.theme.toastCloseColorError,
|
|
57
|
+
}
|
|
58
|
+
: {
|
|
59
|
+
hover: _this.theme.toastCloseHoverColor,
|
|
60
|
+
default: _this.theme.toastCloseColor,
|
|
61
|
+
};
|
|
53
62
|
var toastActionColorsClassName = use === 'error' ? _this.styles.toastActionErrorColor(_this.theme) : _this.styles.toastActionDefaultColor(_this.theme);
|
|
54
|
-
var toastActionClassNames = _this.cx(_this.styles.link(_this.theme), toastActionColorsClassName);
|
|
63
|
+
var toastActionClassNames = _this.cx(_this.styles.link(_this.theme), isTheme6_1 && _this.styles.link_6_1(_this.theme), toastActionColorsClassName);
|
|
55
64
|
var link = action ? (React.createElement("button", { "aria-label": action['aria-label'], "data-tid": ToastDataTids.action, className: toastActionClassNames, onClick: action.handler }, action.label)) : null;
|
|
56
|
-
var
|
|
57
|
-
|
|
58
|
-
|
|
65
|
+
var themeDependantProps = isTheme6_1
|
|
66
|
+
? {
|
|
67
|
+
style: {
|
|
68
|
+
height: '100%',
|
|
69
|
+
},
|
|
70
|
+
side: parseInt(_this.theme.toastCloseBtnSide),
|
|
71
|
+
}
|
|
72
|
+
: { side: 40, size: parseInt(_this.theme.toastCloseSize) };
|
|
73
|
+
var close = action || showCloseIcon ? (React.createElement("span", { className: _this.cx(_this.styles.closeWrapper(_this.theme), isTheme6_1 && _this.styles.closeWrapper_6_1()) },
|
|
74
|
+
React.createElement(CloseButtonIcon, __assign({ "aria-label": _this.locale.closeButtonAriaLabel, "data-tid": ToastDataTids.close, onClick: onClose }, themeDependantProps, { color: toastCloseColors.default, colorHover: toastCloseColors.hover, tabbable: false })))) : null;
|
|
75
|
+
var rootClassName = _this.cx(_this.styles.root(_this.theme), isTheme6_1 && _this.styles.root_6_1(), isTheme6_1 && _this.isMobileLayout && _this.styles.rootMobile(_this.theme), _this.styles[use !== null && use !== void 0 ? use : 'default'](_this.theme));
|
|
76
|
+
var wrapperClassName = _this.cx(_this.styles.wrapper(_this.theme), isTheme6_1 && _this.styles.wrapper_6_1(_this.theme));
|
|
59
77
|
return (React.createElement(CommonWrapper, __assign({}, _this.props),
|
|
60
|
-
React.createElement(ZIndex, { priority: "Toast", className:
|
|
78
|
+
React.createElement(ZIndex, { priority: "Toast", className: wrapperClassName },
|
|
61
79
|
React.createElement("div", { "data-tid": ToastDataTids.toastView, className: rootClassName, ref: _this.setRootNode, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave },
|
|
62
|
-
React.createElement("span",
|
|
80
|
+
isTheme6_1 ? (React.createElement("span", { className: _this.styles.content(_this.theme) },
|
|
81
|
+
React.createElement("span", { className: _this.cx(_this.isMobileLayout && _this.styles.ellipsisContent()) }, _this.props.children))) : (React.createElement("span", null, _this.props.children)),
|
|
63
82
|
link,
|
|
64
83
|
close))));
|
|
65
84
|
};
|
|
@@ -74,6 +93,7 @@ var ToastView = /** @class */ (function (_super) {
|
|
|
74
93
|
}));
|
|
75
94
|
};
|
|
76
95
|
ToastView = __decorate([
|
|
96
|
+
responsiveLayout,
|
|
77
97
|
withRenderEnvironment,
|
|
78
98
|
rootNode,
|
|
79
99
|
locale('Toast', ToastLocaleHelper)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToastView.js","sourceRoot":"","sources":["../../../components/Toast/ToastView.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAC;AAEpF,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAE7E,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"ToastView.js","sourceRoot":"","sources":["../../../components/Toast/ToastView.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport type { AriaAttributes } from 'react';\nimport React from 'react';\n\nimport { CloseButtonIcon } from '../../internal/CloseButtonIcon/CloseButtonIcon.js';\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { ZIndex } from '../../internal/ZIndex/index.js';\nimport { locale } from '../../lib/locale/decorators.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { rootNode } from '../../lib/rootNode/index.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport { isThemeGTE } from '../../lib/theming/ThemeHelpers.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator.js';\nimport type { ToastLocale } from './locale/index.js';\nimport { ToastLocaleHelper } from './locale/index.js';\nimport type { Action, ToastUse } from './Toast.js';\nimport { ToastDataTids } from './Toast.js';\nimport { getStyles } from './ToastView.styles.js';\n\nexport interface ToastViewProps extends Pick<AriaAttributes, 'aria-label'>, CommonProps {\n /** Отображает контент уведомления. */\n children?: React.ReactNode;\n /** Добавляет кнопку действия в тост. */\n action?: Nullable<Action>;\n /** Показывает кнопку закрытия рядом с текстом. */\n showCloseIcon?: boolean;\n /** Вызывается при закрытии тоста из разметки. */\n onClose?: () => void;\n /** Вызывается при наведении курсора на тост. */\n onMouseEnter?: () => void;\n /** Вызывается при уходе курсора с тоста. */\n onMouseLeave?: () => void;\n /** Выбирает стиль оформления: обычный или ошибка (`error`). */\n use?: ToastUse;\n}\n\n@responsiveLayout\n@withRenderEnvironment\n@rootNode\n@locale('Toast', ToastLocaleHelper)\nexport class ToastView extends React.Component<ToastViewProps> {\n private styles!: ReturnType<typeof getStyles>;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private theme!: Theme;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n private readonly locale!: ToastLocale;\n private isMobileLayout!: boolean;\n\n public render(): React.JSX.Element {\n this.styles = getStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain = () => {\n const { action, showCloseIcon, onClose, onMouseEnter, onMouseLeave, use } = this.props;\n\n const isTheme6_1 = isThemeGTE(this.theme, '6.1');\n\n const toastCloseColors =\n use === 'error'\n ? {\n hover: this.theme.toastCloseHoverColorError,\n default: this.theme.toastCloseColorError,\n }\n : {\n hover: this.theme.toastCloseHoverColor,\n default: this.theme.toastCloseColor,\n };\n\n const toastActionColorsClassName =\n use === 'error' ? this.styles.toastActionErrorColor(this.theme) : this.styles.toastActionDefaultColor(this.theme);\n const toastActionClassNames = this.cx(\n this.styles.link(this.theme),\n isTheme6_1 && this.styles.link_6_1(this.theme),\n\n toastActionColorsClassName,\n );\n\n const link = action ? (\n <button\n aria-label={action['aria-label']}\n data-tid={ToastDataTids.action}\n className={toastActionClassNames}\n onClick={action.handler}\n >\n {action.label}\n </button>\n ) : null;\n\n const themeDependantProps = isTheme6_1\n ? {\n style: {\n height: '100%',\n },\n side: parseInt(this.theme.toastCloseBtnSide),\n }\n : { side: 40, size: parseInt(this.theme.toastCloseSize) };\n\n const close =\n action || showCloseIcon ? (\n <span className={this.cx(this.styles.closeWrapper(this.theme), isTheme6_1 && this.styles.closeWrapper_6_1())}>\n <CloseButtonIcon\n aria-label={this.locale.closeButtonAriaLabel}\n data-tid={ToastDataTids.close}\n onClick={onClose}\n {...themeDependantProps}\n color={toastCloseColors.default}\n colorHover={toastCloseColors.hover}\n tabbable={false}\n />\n </span>\n ) : null;\n\n const rootClassName = this.cx(\n this.styles.root(this.theme),\n isTheme6_1 && this.styles.root_6_1(),\n isTheme6_1 && this.isMobileLayout && this.styles.rootMobile(this.theme),\n this.styles[use ?? 'default'](this.theme),\n );\n\n const wrapperClassName = this.cx(\n this.styles.wrapper(this.theme),\n isTheme6_1 && this.styles.wrapper_6_1(this.theme),\n );\n\n return (\n <CommonWrapper {...this.props}>\n <ZIndex priority=\"Toast\" className={wrapperClassName}>\n <div\n data-tid={ToastDataTids.toastView}\n className={rootClassName}\n ref={this.setRootNode}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n {isTheme6_1 ? (\n <span className={this.styles.content(this.theme)}>\n <span className={this.cx(this.isMobileLayout && this.styles.ellipsisContent())}>\n {this.props.children}\n </span>\n </span>\n ) : (\n <span>{this.props.children}</span>\n )}\n {link}\n {close}\n </div>\n </ZIndex>\n </CommonWrapper>\n );\n };\n}\n"]}
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import type { Theme } from '../../lib/theming/Theme.js';
|
|
2
2
|
export declare const getStyles: import("../../lib/theming/Emotion.js").StylesGetter<{
|
|
3
3
|
root(t: Theme): string;
|
|
4
|
+
root_6_1(): string;
|
|
5
|
+
rootMobile(t: Theme): string;
|
|
4
6
|
default(t: Theme): string;
|
|
5
7
|
error(t: Theme): string;
|
|
6
8
|
wrapper(t: Theme): string;
|
|
9
|
+
wrapper_6_1(t: Theme): string;
|
|
10
|
+
content(t: Theme): string;
|
|
11
|
+
ellipsisContent(): string;
|
|
7
12
|
closeWrapper(t: Theme): string;
|
|
13
|
+
closeWrapper_6_1(): string;
|
|
8
14
|
link(t: Theme): string;
|
|
15
|
+
link_6_1(t: Theme): string;
|
|
9
16
|
toastActionErrorColor(t: Theme): string;
|
|
10
17
|
toastActionDefaultColor(t: Theme): string;
|
|
11
18
|
}>;
|