@ozen-ui/kit 0.74.0 → 0.76.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/StepperVertical/package.json +5 -0
- package/__inner__/cjs/components/Autocomplete/helper.d.ts +1 -1
- package/__inner__/cjs/components/Autocomplete/types.d.ts +1 -1
- package/__inner__/cjs/components/Calendar/Calendar.js +26 -2
- package/__inner__/cjs/components/Calendar/CalendarContext.d.ts +8 -1
- package/__inner__/cjs/components/Calendar/CalendarContext.js +10 -1
- package/__inner__/cjs/components/Calendar/__tests__/utils.d.ts +11 -0
- package/__inner__/cjs/components/Calendar/__tests__/utils.js +58 -0
- package/__inner__/cjs/components/Calendar/components/CalendarGrid/CalendarGrid.js +4 -3
- package/__inner__/cjs/components/Calendar/components/CalendarItem/CalendarItem.js +25 -2
- package/__inner__/cjs/components/Calendar/components/CalendarItem/CalendarItemContext.d.ts +1 -0
- package/__inner__/cjs/components/Calendar/components/CalendarItem/CalendarItemContext.js +1 -0
- package/__inner__/cjs/components/Calendar/components/CalendarModeRange/CalendarModeRange.js +68 -13
- package/__inner__/cjs/components/Calendar/components/CalendarModeSingle/CalendarModeSingle.js +62 -16
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/CalendarSwitcher.js +6 -7
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/CalendarSwitcherText.d.ts +3 -0
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/CalendarSwitcherText.js +13 -0
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/index.d.ts +2 -0
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/index.js +5 -0
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/types.d.ts +4 -0
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/types.js +2 -0
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/index.d.ts +1 -0
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/index.js +4 -0
- package/__inner__/cjs/components/Calendar/constants.d.ts +2 -0
- package/__inner__/cjs/components/Calendar/constants.js +7 -1
- package/__inner__/cjs/components/Calendar/index.d.ts +1 -0
- package/__inner__/cjs/components/Calendar/index.js +1 -0
- package/__inner__/cjs/components/Calendar/types.d.ts +13 -5
- package/__inner__/cjs/components/Calendar/utils.d.ts +10 -1
- package/__inner__/cjs/components/Calendar/utils.js +12 -1
- package/__inner__/cjs/components/DataList/types.d.ts +1 -1
- package/__inner__/cjs/components/DatePicker/components/DateInput/DateInput.js +4 -3
- package/__inner__/cjs/components/DatePicker/components/DateInput/types.d.ts +6 -2
- package/__inner__/cjs/components/DatePicker/components/DateInput/utils/dateInputMask/dateInputMask.d.ts +2 -1
- package/__inner__/cjs/components/DatePicker/components/DateInput/utils/dateInputMask/dateInputMask.js +67 -7
- package/__inner__/cjs/components/DatePicker/components/DatePickerModeDate/DatePickerModeDate.js +32 -20
- package/__inner__/cjs/components/DatePicker/components/DatePickerModeDateRange/DatePickerModeDateRange.js +74 -51
- package/__inner__/cjs/components/DatePicker/constants.d.ts +2 -0
- package/__inner__/cjs/components/DatePicker/constants.js +4 -1
- package/__inner__/cjs/components/DatePicker/types.d.ts +10 -6
- package/__inner__/cjs/components/DatePicker/types.js +3 -1
- package/__inner__/cjs/components/DatePicker/utils/formatDateToString/formatDateToString.d.ts +2 -1
- package/__inner__/cjs/components/DatePicker/utils/formatDateToString/formatDateToString.js +18 -5
- package/__inner__/cjs/components/DatePicker/utils/formatStringToDate/formatStringToDate.d.ts +2 -1
- package/__inner__/cjs/components/DatePicker/utils/formatStringToDate/formatStringToDate.js +6 -5
- package/__inner__/cjs/components/DatePicker/utils/getCommonCalendarProps/getCommonCalendarProps.js +2 -2
- package/__inner__/cjs/components/DatePicker/utils/index.d.ts +2 -0
- package/__inner__/cjs/components/DatePicker/utils/index.js +2 -0
- package/__inner__/cjs/components/DatePicker/utils/isValidDateString/isValidDateString.d.ts +2 -1
- package/__inner__/cjs/components/DatePicker/utils/isValidDateString/isValidDateString.js +9 -8
- package/__inner__/cjs/components/DatePicker/utils/maskPastedDate/index.d.ts +1 -0
- package/__inner__/cjs/components/DatePicker/utils/maskPastedDate/index.js +4 -0
- package/__inner__/cjs/components/DatePicker/utils/maskPastedDate/maskPastedDate.d.ts +6 -0
- package/__inner__/cjs/components/DatePicker/utils/maskPastedDate/maskPastedDate.js +43 -0
- package/__inner__/cjs/components/DatePicker/utils/parseDateString/index.d.ts +1 -0
- package/__inner__/cjs/components/DatePicker/utils/parseDateString/index.js +4 -0
- package/__inner__/cjs/components/DatePicker/utils/parseDateString/parseDateString.d.ts +6 -0
- package/__inner__/cjs/components/DatePicker/utils/parseDateString/parseDateString.js +66 -0
- package/__inner__/cjs/components/ListCardItem/hooks/useListCardItemRatio.js +10 -14
- package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/color/b-business-dark/color-b-business-dark.css +1 -1
- package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/color/b-business-default/color-b-business-default.css +1 -1
- package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/color/ozen-dark/color-ozen-dark.css +1 -1
- package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/color/ozen-default/color-ozen-default.css +1 -1
- package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/color/vip-dark/color-vip-dark.css +1 -1
- package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/color/vip-default/color-vip-default.css +1 -1
- package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/shadow/ozen-default/shadow-ozen-default.css +1 -1
- package/__inner__/cjs/components/Select/Select.css +10 -1
- package/__inner__/cjs/components/Select/Select.d.ts +0 -1
- package/__inner__/cjs/components/Select/Select.js +40 -10
- package/__inner__/cjs/components/Select/SelectContext.d.ts +21 -0
- package/__inner__/cjs/components/Select/SelectContext.js +29 -0
- package/__inner__/cjs/components/Select/classNames.d.ts +1 -0
- package/__inner__/cjs/components/Select/classNames.js +5 -0
- package/__inner__/cjs/components/Select/components/SelectInput/SelectInput.js +14 -15
- package/__inner__/cjs/components/Select/components/SelectInput/types.d.ts +0 -22
- package/__inner__/cjs/components/Select/components/SelectInputContextConsumer/SelectInputContextConsumer.js +3 -3
- package/__inner__/cjs/components/Select/components/SelectInputRenderRight/SelectInputRenderRight.d.ts +2 -0
- package/__inner__/cjs/components/Select/components/SelectInputRenderRight/SelectInputRenderRight.js +42 -0
- package/__inner__/cjs/components/Select/components/SelectInputRenderRight/index.d.ts +1 -0
- package/__inner__/cjs/components/Select/components/SelectInputRenderRight/index.js +4 -0
- package/__inner__/cjs/components/Select/components/index.d.ts +1 -0
- package/__inner__/cjs/components/Select/components/index.js +1 -0
- package/__inner__/cjs/components/Select/constants.d.ts +3 -0
- package/__inner__/cjs/components/Select/constants.js +8 -1
- package/__inner__/cjs/components/Select/entities/index.d.ts +2 -0
- package/__inner__/cjs/components/Select/entities/index.js +5 -0
- package/__inner__/cjs/components/Select/entities/onClear.d.ts +2 -0
- package/__inner__/cjs/components/Select/entities/onClear.js +2 -0
- package/__inner__/cjs/components/Select/entities/render.d.ts +6 -0
- package/__inner__/cjs/components/Select/entities/render.js +4 -0
- package/__inner__/cjs/components/Select/index.d.ts +1 -0
- package/__inner__/cjs/components/Select/index.js +1 -0
- package/__inner__/cjs/components/Select/types.d.ts +30 -5
- package/__inner__/cjs/components/Select/types.js +3 -0
- package/__inner__/cjs/components/Stack/Stack.css +3 -0
- package/__inner__/cjs/components/Stack/Stack.js +2 -1
- package/__inner__/cjs/components/Stack/constants.d.ts +1 -0
- package/__inner__/cjs/components/Stack/constants.js +2 -1
- package/__inner__/cjs/components/Stack/types.d.ts +4 -0
- package/__inner__/cjs/components/Stack/types.js +2 -1
- package/__inner__/cjs/hooks/useDevEffect/index.d.ts +1 -0
- package/__inner__/cjs/hooks/useDevEffect/index.js +4 -0
- package/__inner__/cjs/hooks/useDevEffect/useDevEffect.d.ts +3 -0
- package/__inner__/cjs/hooks/useDevEffect/useDevEffect.js +13 -0
- package/__inner__/cjs/hooks/useIntersectionObserver/useIntersectionObserver.js +3 -2
- package/__inner__/cjs/locale/locale.js +48 -3
- package/__inner__/cjs/utils/array/createFilled/createFilledArray.d.ts +1 -1
- package/__inner__/cjs/utils/array/createFilled/createFilledArray.js +6 -1
- package/__inner__/cjs/utils/array/generatePermutations/generatePermutations.d.ts +1 -0
- package/__inner__/cjs/utils/array/generatePermutations/generatePermutations.js +47 -0
- package/__inner__/cjs/utils/array/generatePermutations/index.d.ts +1 -0
- package/__inner__/cjs/utils/array/generatePermutations/index.js +4 -0
- package/__inner__/cjs/utils/array/index.d.ts +1 -0
- package/__inner__/cjs/utils/array/index.js +1 -0
- package/__inner__/esm/components/Autocomplete/helper.d.ts +1 -1
- package/__inner__/esm/components/Autocomplete/types.d.ts +1 -1
- package/__inner__/esm/components/Calendar/Calendar.js +27 -3
- package/__inner__/esm/components/Calendar/CalendarContext.d.ts +8 -1
- package/__inner__/esm/components/Calendar/CalendarContext.js +10 -1
- package/__inner__/esm/components/Calendar/__tests__/utils.d.ts +11 -0
- package/__inner__/esm/components/Calendar/__tests__/utils.js +45 -0
- package/__inner__/esm/components/Calendar/components/CalendarGrid/CalendarGrid.js +4 -3
- package/__inner__/esm/components/Calendar/components/CalendarItem/CalendarItem.js +25 -2
- package/__inner__/esm/components/Calendar/components/CalendarItem/CalendarItemContext.d.ts +1 -0
- package/__inner__/esm/components/Calendar/components/CalendarItem/CalendarItemContext.js +1 -0
- package/__inner__/esm/components/Calendar/components/CalendarModeRange/CalendarModeRange.js +70 -15
- package/__inner__/esm/components/Calendar/components/CalendarModeSingle/CalendarModeSingle.js +64 -18
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/CalendarSwitcher.js +6 -7
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/CalendarSwitcherText.d.ts +3 -0
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/CalendarSwitcherText.js +9 -0
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/index.d.ts +2 -0
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/index.js +2 -0
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/types.d.ts +4 -0
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/types.js +1 -0
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/index.d.ts +1 -0
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/index.js +1 -0
- package/__inner__/esm/components/Calendar/constants.d.ts +2 -0
- package/__inner__/esm/components/Calendar/constants.js +6 -0
- package/__inner__/esm/components/Calendar/index.d.ts +1 -0
- package/__inner__/esm/components/Calendar/index.js +1 -0
- package/__inner__/esm/components/Calendar/types.d.ts +13 -5
- package/__inner__/esm/components/Calendar/utils.d.ts +10 -1
- package/__inner__/esm/components/Calendar/utils.js +9 -0
- package/__inner__/esm/components/DataList/types.d.ts +1 -1
- package/__inner__/esm/components/DatePicker/components/DateInput/DateInput.js +3 -2
- package/__inner__/esm/components/DatePicker/components/DateInput/types.d.ts +6 -2
- package/__inner__/esm/components/DatePicker/components/DateInput/utils/dateInputMask/dateInputMask.d.ts +2 -1
- package/__inner__/esm/components/DatePicker/components/DateInput/utils/dateInputMask/dateInputMask.js +67 -7
- package/__inner__/esm/components/DatePicker/components/DatePickerModeDate/DatePickerModeDate.js +33 -21
- package/__inner__/esm/components/DatePicker/components/DatePickerModeDateRange/DatePickerModeDateRange.js +68 -45
- package/__inner__/esm/components/DatePicker/constants.d.ts +2 -0
- package/__inner__/esm/components/DatePicker/constants.js +3 -0
- package/__inner__/esm/components/DatePicker/types.d.ts +10 -6
- package/__inner__/esm/components/DatePicker/types.js +2 -0
- package/__inner__/esm/components/DatePicker/utils/formatDateToString/formatDateToString.d.ts +2 -1
- package/__inner__/esm/components/DatePicker/utils/formatDateToString/formatDateToString.js +18 -5
- package/__inner__/esm/components/DatePicker/utils/formatStringToDate/formatStringToDate.d.ts +2 -1
- package/__inner__/esm/components/DatePicker/utils/formatStringToDate/formatStringToDate.js +6 -5
- package/__inner__/esm/components/DatePicker/utils/getCommonCalendarProps/getCommonCalendarProps.js +2 -2
- package/__inner__/esm/components/DatePicker/utils/index.d.ts +2 -0
- package/__inner__/esm/components/DatePicker/utils/index.js +2 -0
- package/__inner__/esm/components/DatePicker/utils/isValidDateString/isValidDateString.d.ts +2 -1
- package/__inner__/esm/components/DatePicker/utils/isValidDateString/isValidDateString.js +8 -7
- package/__inner__/esm/components/DatePicker/utils/maskPastedDate/index.d.ts +1 -0
- package/__inner__/esm/components/DatePicker/utils/maskPastedDate/index.js +1 -0
- package/__inner__/esm/components/DatePicker/utils/maskPastedDate/maskPastedDate.d.ts +6 -0
- package/__inner__/esm/components/DatePicker/utils/maskPastedDate/maskPastedDate.js +39 -0
- package/__inner__/esm/components/DatePicker/utils/parseDateString/index.d.ts +1 -0
- package/__inner__/esm/components/DatePicker/utils/parseDateString/index.js +1 -0
- package/__inner__/esm/components/DatePicker/utils/parseDateString/parseDateString.d.ts +6 -0
- package/__inner__/esm/components/DatePicker/utils/parseDateString/parseDateString.js +62 -0
- package/__inner__/esm/components/ListCardItem/hooks/useListCardItemRatio.js +10 -14
- package/__inner__/esm/components/OzenProvider/providers/theme/tokens/color/b-business-dark/color-b-business-dark.css +1 -1
- package/__inner__/esm/components/OzenProvider/providers/theme/tokens/color/b-business-default/color-b-business-default.css +1 -1
- package/__inner__/esm/components/OzenProvider/providers/theme/tokens/color/ozen-dark/color-ozen-dark.css +1 -1
- package/__inner__/esm/components/OzenProvider/providers/theme/tokens/color/ozen-default/color-ozen-default.css +1 -1
- package/__inner__/esm/components/OzenProvider/providers/theme/tokens/color/vip-dark/color-vip-dark.css +1 -1
- package/__inner__/esm/components/OzenProvider/providers/theme/tokens/color/vip-default/color-vip-default.css +1 -1
- package/__inner__/esm/components/OzenProvider/providers/theme/tokens/shadow/ozen-default/shadow-ozen-default.css +1 -1
- package/__inner__/esm/components/Select/Select.css +10 -1
- package/__inner__/esm/components/Select/Select.d.ts +0 -1
- package/__inner__/esm/components/Select/Select.js +40 -10
- package/__inner__/esm/components/Select/SelectContext.d.ts +21 -0
- package/__inner__/esm/components/Select/SelectContext.js +25 -0
- package/__inner__/esm/components/Select/classNames.d.ts +1 -0
- package/__inner__/esm/components/Select/classNames.js +2 -0
- package/__inner__/esm/components/Select/components/SelectInput/SelectInput.js +7 -8
- package/__inner__/esm/components/Select/components/SelectInput/types.d.ts +0 -22
- package/__inner__/esm/components/Select/components/SelectInputContextConsumer/SelectInputContextConsumer.js +1 -1
- package/__inner__/esm/components/Select/components/SelectInputRenderRight/SelectInputRenderRight.d.ts +2 -0
- package/__inner__/esm/components/Select/components/SelectInputRenderRight/SelectInputRenderRight.js +38 -0
- package/__inner__/esm/components/Select/components/SelectInputRenderRight/index.d.ts +1 -0
- package/__inner__/esm/components/Select/components/SelectInputRenderRight/index.js +1 -0
- package/__inner__/esm/components/Select/components/index.d.ts +1 -0
- package/__inner__/esm/components/Select/components/index.js +1 -0
- package/__inner__/esm/components/Select/constants.d.ts +3 -0
- package/__inner__/esm/components/Select/constants.js +7 -0
- package/__inner__/esm/components/Select/entities/index.d.ts +2 -0
- package/__inner__/esm/components/Select/entities/index.js +2 -0
- package/__inner__/esm/components/Select/entities/onClear.d.ts +2 -0
- package/__inner__/esm/components/Select/entities/onClear.js +1 -0
- package/__inner__/esm/components/Select/entities/render.d.ts +6 -0
- package/__inner__/esm/components/Select/entities/render.js +1 -0
- package/__inner__/esm/components/Select/index.d.ts +1 -0
- package/__inner__/esm/components/Select/index.js +1 -0
- package/__inner__/esm/components/Select/types.d.ts +30 -5
- package/__inner__/esm/components/Select/types.js +2 -1
- package/__inner__/esm/components/Stack/Stack.css +3 -0
- package/__inner__/esm/components/Stack/Stack.js +3 -2
- package/__inner__/esm/components/Stack/constants.d.ts +1 -0
- package/__inner__/esm/components/Stack/constants.js +1 -0
- package/__inner__/esm/components/Stack/types.d.ts +4 -0
- package/__inner__/esm/components/Stack/types.js +1 -0
- package/__inner__/esm/hooks/useDevEffect/index.d.ts +1 -0
- package/__inner__/esm/hooks/useDevEffect/index.js +1 -0
- package/__inner__/esm/hooks/useDevEffect/useDevEffect.d.ts +3 -0
- package/__inner__/esm/hooks/useDevEffect/useDevEffect.js +9 -0
- package/__inner__/esm/hooks/useIntersectionObserver/useIntersectionObserver.js +3 -2
- package/__inner__/esm/locale/locale.js +48 -3
- package/__inner__/esm/utils/array/createFilled/createFilledArray.d.ts +1 -1
- package/__inner__/esm/utils/array/createFilled/createFilledArray.js +6 -1
- package/__inner__/esm/utils/array/generatePermutations/generatePermutations.d.ts +1 -0
- package/__inner__/esm/utils/array/generatePermutations/generatePermutations.js +43 -0
- package/__inner__/esm/utils/array/generatePermutations/index.d.ts +1 -0
- package/__inner__/esm/utils/array/generatePermutations/index.js +1 -0
- package/__inner__/esm/utils/array/index.d.ts +1 -0
- package/__inner__/esm/utils/array/index.js +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { isNotNil, isValidDate } from '../../../../utils';
|
|
2
|
+
export var parseDateString = function (value, steps) {
|
|
3
|
+
if (!isNotNil(value)) {
|
|
4
|
+
return null;
|
|
5
|
+
}
|
|
6
|
+
if (value === '') {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
var hasYearsSteps = steps.includes('years');
|
|
10
|
+
var hasMonthsSteps = steps.includes('months');
|
|
11
|
+
var hasDaysSteps = steps.includes('days');
|
|
12
|
+
var splitted = value.split('.');
|
|
13
|
+
var day;
|
|
14
|
+
var month;
|
|
15
|
+
var year;
|
|
16
|
+
var offset = 0;
|
|
17
|
+
if (hasDaysSteps) {
|
|
18
|
+
day = splitted[offset];
|
|
19
|
+
offset += 1;
|
|
20
|
+
}
|
|
21
|
+
if (hasMonthsSteps) {
|
|
22
|
+
month = splitted[offset];
|
|
23
|
+
offset += 1;
|
|
24
|
+
}
|
|
25
|
+
if (hasYearsSteps) {
|
|
26
|
+
year = splitted[offset];
|
|
27
|
+
}
|
|
28
|
+
var parts = [];
|
|
29
|
+
if (hasYearsSteps) {
|
|
30
|
+
parts.push(year);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
var now = new Date();
|
|
34
|
+
parts.push(now.getFullYear().toString());
|
|
35
|
+
}
|
|
36
|
+
if (hasMonthsSteps) {
|
|
37
|
+
parts.push(month);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
// 3 месяц для кейса, где пользователь вводит 31 день месяца
|
|
41
|
+
parts.push('03');
|
|
42
|
+
}
|
|
43
|
+
if (hasDaysSteps) {
|
|
44
|
+
parts.push(day);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
parts.push('01');
|
|
48
|
+
}
|
|
49
|
+
var filteredParts = parts.filter(function (part) { return part !== undefined; });
|
|
50
|
+
if (filteredParts.length !== 3) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
var stringDate = filteredParts.join('-');
|
|
54
|
+
if (stringDate.length !== 10 || !isValidDate(stringDate)) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
year: parts[0],
|
|
59
|
+
month: parts[1],
|
|
60
|
+
day: parts[2],
|
|
61
|
+
};
|
|
62
|
+
};
|
|
@@ -1,19 +1,15 @@
|
|
|
1
|
-
import { useEffect } from 'react';
|
|
2
1
|
import { logger } from '@ozen-ui/logger';
|
|
3
|
-
import {
|
|
2
|
+
import { useDevEffect } from '../../../hooks/useDevEffect';
|
|
4
3
|
export var useListCardItemRatio = function (contentTrailingRatio) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
}, [contentTrailingRatio]);
|
|
16
|
-
}
|
|
4
|
+
useDevEffect(function () {
|
|
5
|
+
if (contentTrailingRatio < 0) {
|
|
6
|
+
logger.error('Свойство «contentTrailingRatio» у компонента ListCardItem не может быть меньше 0');
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
if (contentTrailingRatio > 1) {
|
|
10
|
+
logger.error('Свойство «contentTrailingRatio» у компонента ListCardItem не может быть больше 1');
|
|
11
|
+
}
|
|
12
|
+
}, [contentTrailingRatio]);
|
|
17
13
|
var contentRatio = contentTrailingRatio * 100;
|
|
18
14
|
var trailingRatio = 100 - contentRatio;
|
|
19
15
|
return { content: contentRatio, trailing: trailingRatio };
|
|
@@ -79,10 +79,19 @@
|
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
.Select-RenderLeft,
|
|
82
|
-
.Select-
|
|
82
|
+
.Select-RenderRight_nonInteractive {
|
|
83
83
|
pointer-events: none;
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
+
.Select-ClearIcon {
|
|
87
|
+
visibility: hidden;
|
|
88
|
+
transition: visibility var(--transition-default);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.Select-ClearIcon_visibility {
|
|
92
|
+
visibility: visible;
|
|
93
|
+
}
|
|
94
|
+
|
|
86
95
|
.Select-DropDownIcon {
|
|
87
96
|
display: flex;
|
|
88
97
|
align-items: center;
|
|
@@ -1,39 +1,46 @@
|
|
|
1
1
|
import { __assign, __read, __rest, __spreadArray } from "tslib";
|
|
2
2
|
import './Select.css';
|
|
3
3
|
import React, { Children, forwardRef, isValidElement, useEffect, useRef, } from 'react';
|
|
4
|
+
import { logger } from '@ozen-ui/logger';
|
|
4
5
|
import { isFragment } from 'react-is';
|
|
5
6
|
import { useControlled } from '../../hooks/useControlled';
|
|
7
|
+
import { useDevEffect } from '../../hooks/useDevEffect';
|
|
6
8
|
import { useMultiRef } from '../../hooks/useMultiRef';
|
|
7
9
|
import { useThemeProps } from '../../hooks/useThemeProps';
|
|
8
|
-
import {
|
|
10
|
+
import { isArray, isNotNil } from '../../utils';
|
|
9
11
|
import { isKeys } from '../../utils/isKeys';
|
|
10
12
|
import { isString } from '../../utils/isString';
|
|
11
13
|
import { DataList, DataListOption } from '../DataList';
|
|
12
14
|
import { SelectInput } from './components';
|
|
13
|
-
import { SELECT_DEFAULT_AUTO_FOCUS, SELECT_DEFAULT_DEFAULT_OPEN, SELECT_DEFAULT_DISABLED, SELECT_DEFAULT_FULL_WIDTH, SELECT_DEFAULT_MULTILINE, SELECT_DEFAULT_REQUIRED, SELECT_DEFAULT_SIZE, } from './constants';
|
|
15
|
+
import { SELECT_DEFAULT_AUTO_FOCUS, SELECT_DEFAULT_DEFAULT_OPEN, SELECT_DEFAULT_DISABLED, SELECT_DEFAULT_FULL_WIDTH, SELECT_DEFAULT_RENDER_RIGHT_LAYOUT, SELECT_DEFAULT_MULTILINE, SELECT_DEFAULT_REQUIRED, SELECT_DEFAULT_SIZE, SELECT_DEFAULT_SHOW_CLEAR_BUTTON, SELECT_DEFAULT_ERROR, } from './constants';
|
|
14
16
|
import { isMultipleLabel, isMultipleParams, isNotMultipleLabel, isNotMultipleParams, } from './helpers';
|
|
15
|
-
|
|
17
|
+
import { SelectContext } from './SelectContext';
|
|
16
18
|
var SelectRender = function (inProps, ref) {
|
|
17
19
|
var props = useThemeProps({
|
|
18
20
|
props: inProps,
|
|
19
21
|
name: 'Select',
|
|
20
22
|
});
|
|
21
|
-
var _a = props.size, size = _a === void 0 ? SELECT_DEFAULT_SIZE : _a, _b = props.autoFocus, autoFocus = _b === void 0 ? SELECT_DEFAULT_AUTO_FOCUS : _b, _c = props.fullWidth, fullWidth = _c === void 0 ? SELECT_DEFAULT_FULL_WIDTH : _c, _d = props.disabled, disabled = _d === void 0 ? SELECT_DEFAULT_DISABLED : _d, _e = props.required, required = _e === void 0 ? SELECT_DEFAULT_REQUIRED : _e, _f = props.multiline, multiline = _f === void 0 ? SELECT_DEFAULT_MULTILINE : _f, _g = props.defaultOpen, defaultOpen = _g === void 0 ? SELECT_DEFAULT_DEFAULT_OPEN : _g, valueProp = props.value, defaultValue = props.defaultValue, onChange = props.onChange, renderValueProp = props.renderValue, children = props.children, onClick = props.onClick, onKeyDown = props.onKeyDown, menuProps = props.menuProps, dataListPropsProp = props.dataListProps, bodyProps = props.bodyProps, bodyRefProp = props.bodyRef, onCloseProp = props.onClose, onOpenProp = props.onOpen, openProp = props.open, multiple = props.multiple, other = __rest(props, ["size", "autoFocus", "fullWidth", "disabled", "required", "multiline", "defaultOpen", "value", "defaultValue", "onChange", "renderValue", "children", "onClick", "onKeyDown", "menuProps", "dataListProps", "bodyProps", "bodyRef", "onClose", "onOpen", "open", "multiple"]);
|
|
23
|
+
var _a = props.size, size = _a === void 0 ? SELECT_DEFAULT_SIZE : _a, _b = props.autoFocus, autoFocus = _b === void 0 ? SELECT_DEFAULT_AUTO_FOCUS : _b, _c = props.fullWidth, fullWidth = _c === void 0 ? SELECT_DEFAULT_FULL_WIDTH : _c, _d = props.disabled, disabled = _d === void 0 ? SELECT_DEFAULT_DISABLED : _d, _e = props.required, required = _e === void 0 ? SELECT_DEFAULT_REQUIRED : _e, _f = props.multiline, multiline = _f === void 0 ? SELECT_DEFAULT_MULTILINE : _f, _g = props.defaultOpen, defaultOpen = _g === void 0 ? SELECT_DEFAULT_DEFAULT_OPEN : _g, _h = props.renderRightLayout, renderRightLayout = _h === void 0 ? SELECT_DEFAULT_RENDER_RIGHT_LAYOUT : _h, valueProp = props.value, defaultValue = props.defaultValue, onChange = props.onChange, renderValueProp = props.renderValue, children = props.children, onClick = props.onClick, onKeyDown = props.onKeyDown, menuProps = props.menuProps, dataListPropsProp = props.dataListProps, bodyProps = props.bodyProps, bodyRefProp = props.bodyRef, onCloseProp = props.onClose, onOpenProp = props.onOpen, openProp = props.open, multiple = props.multiple, _j = props.showClearButton, showClearButton = _j === void 0 ? SELECT_DEFAULT_SHOW_CLEAR_BUTTON : _j, renderLeft = props.renderLeft, renderRight = props.renderRight, onClearProp = props.onClear, clearText = props.clearText, _k = props.error, error = _k === void 0 ? SELECT_DEFAULT_ERROR : _k, other = __rest(props, ["size", "autoFocus", "fullWidth", "disabled", "required", "multiline", "defaultOpen", "renderRightLayout", "value", "defaultValue", "onChange", "renderValue", "children", "onClick", "onKeyDown", "menuProps", "dataListProps", "bodyProps", "bodyRef", "onClose", "onOpen", "open", "multiple", "showClearButton", "renderLeft", "renderRight", "onClear", "clearText", "error"]);
|
|
24
|
+
useDevEffect(function () {
|
|
25
|
+
if (renderRightLayout.length !== new Set(renderRightLayout).size) {
|
|
26
|
+
logger.error("\u0412 renderRightLayout [".concat(renderRightLayout.map(function (element) { return "\"".concat(element, "\""); }).join(', '), "] \u0435\u0441\u0442\u044C \u0434\u0443\u0431\u043B\u0438\u0440\u0443\u044E\u0449\u0438\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B, \u043F\u0435\u0440\u0435\u043F\u0440\u043E\u0432\u0435\u0440\u044C\u0442\u0435 \u043F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043C\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435."));
|
|
27
|
+
}
|
|
28
|
+
}, [renderRightLayout]);
|
|
22
29
|
var bodyInnerRef = useRef(null);
|
|
23
30
|
var bodyRef = useMultiRef([(bodyProps === null || bodyProps === void 0 ? void 0 : bodyProps.ref) || bodyRefProp, bodyInnerRef]);
|
|
24
31
|
var dataListProps = dataListPropsProp || menuProps;
|
|
25
|
-
var
|
|
32
|
+
var _l = __read(useControlled({
|
|
26
33
|
value: valueProp,
|
|
27
34
|
defaultValue: defaultValue,
|
|
28
35
|
name: 'Select',
|
|
29
36
|
state: 'value',
|
|
30
|
-
}), 2), valueState =
|
|
31
|
-
var
|
|
37
|
+
}), 2), valueState = _l[0], setValueState = _l[1];
|
|
38
|
+
var _m = __read(useControlled({
|
|
32
39
|
value: openProp,
|
|
33
40
|
defaultValue: defaultOpen,
|
|
34
41
|
name: 'Select',
|
|
35
42
|
state: 'open',
|
|
36
|
-
}), 2), open =
|
|
43
|
+
}), 2), open = _m[0], setOpen = _m[1];
|
|
37
44
|
var currentLabel;
|
|
38
45
|
var isNotSelectOption = function (child) { return !isValidElement(child) || child.type !== DataListOption; };
|
|
39
46
|
var resolvedChildren = isFragment(children)
|
|
@@ -122,8 +129,16 @@ var SelectRender = function (inProps, ref) {
|
|
|
122
129
|
return (params === null || params === void 0 ? void 0 : params.value) || '';
|
|
123
130
|
return '';
|
|
124
131
|
};
|
|
132
|
+
var onClear = function (event) {
|
|
133
|
+
setValueState(undefined);
|
|
134
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(undefined, event);
|
|
135
|
+
onClearProp === null || onClearProp === void 0 ? void 0 : onClearProp(event);
|
|
136
|
+
};
|
|
125
137
|
/** Представление значение элемента контроля */
|
|
126
138
|
var renderValue = renderValueProp || renderDefaultValue;
|
|
139
|
+
var hasValue = isArray(valueState)
|
|
140
|
+
? valueState.length > 0
|
|
141
|
+
: isNotNil(valueState);
|
|
127
142
|
useEffect(function () {
|
|
128
143
|
var _a;
|
|
129
144
|
/** Устанавливает фокус на элементе контроля
|
|
@@ -138,8 +153,23 @@ var SelectRender = function (inProps, ref) {
|
|
|
138
153
|
if (autoFocus)
|
|
139
154
|
(_a = bodyInnerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
140
155
|
}, [autoFocus]);
|
|
141
|
-
return (React.createElement(
|
|
142
|
-
|
|
156
|
+
return (React.createElement(SelectContext.Provider, { value: {
|
|
157
|
+
open: open !== null && open !== void 0 ? open : false,
|
|
158
|
+
hasValue: hasValue,
|
|
159
|
+
size: size,
|
|
160
|
+
disabled: disabled,
|
|
161
|
+
renderRightLayout: renderRightLayout,
|
|
162
|
+
showClearButton: showClearButton,
|
|
163
|
+
fullWidth: fullWidth,
|
|
164
|
+
required: required,
|
|
165
|
+
multiline: multiline,
|
|
166
|
+
onClear: onClear,
|
|
167
|
+
clearText: clearText !== null && clearText !== void 0 ? clearText : '',
|
|
168
|
+
renderRight: renderRight,
|
|
169
|
+
renderLeft: renderLeft,
|
|
170
|
+
error: error,
|
|
171
|
+
} },
|
|
172
|
+
React.createElement(SelectInput, __assign({}, other, { value: inputValue(), onClick: handleClick, onKeyDown: handleKeyDown, renderedValue: renderValue({
|
|
143
173
|
label: currentLabel,
|
|
144
174
|
value: valueState,
|
|
145
175
|
}), bodyProps: __assign(__assign({}, bodyProps), { ref: bodyRef }), ref: ref })),
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { SelectOnClear, SelectRenderLeft, SelectRenderRight, SelectRenderRightLayout } from './entities';
|
|
2
|
+
import type { SelectPropSize } from './types';
|
|
3
|
+
export type SelectContextValue = {
|
|
4
|
+
renderRightLayout: SelectRenderRightLayout;
|
|
5
|
+
size: SelectPropSize;
|
|
6
|
+
open: boolean;
|
|
7
|
+
disabled: boolean;
|
|
8
|
+
hasValue: boolean;
|
|
9
|
+
onClear: SelectOnClear;
|
|
10
|
+
renderLeft: SelectRenderLeft;
|
|
11
|
+
renderRight: SelectRenderRight;
|
|
12
|
+
clearText: string;
|
|
13
|
+
showClearButton: boolean;
|
|
14
|
+
required: boolean;
|
|
15
|
+
multiline: boolean;
|
|
16
|
+
fullWidth: boolean;
|
|
17
|
+
error: boolean;
|
|
18
|
+
};
|
|
19
|
+
export declare const SelectContextDefaultValue: SelectContextValue;
|
|
20
|
+
export declare const SelectContext: import("react").Context<SelectContextValue>;
|
|
21
|
+
export declare const useSelectContext: () => SelectContextValue;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { useContext, createContext } from 'react';
|
|
2
|
+
import { isDev } from '../../constants/environment';
|
|
3
|
+
import { SELECT_DEFAULT_RENDER_RIGHT_LAYOUT, SELECT_DEFAULT_SIZE, SELECT_DEFAULT_DEFAULT_OPEN, SELECT_DEFAULT_DISABLED, SELECT_DEFAULT_SHOW_CLEAR_BUTTON, SELECT_DEFAULT_REQUIRED, SELECT_DEFAULT_MULTILINE, SELECT_DEFAULT_FULL_WIDTH, } from './constants';
|
|
4
|
+
export var SelectContextDefaultValue = {
|
|
5
|
+
renderRightLayout: SELECT_DEFAULT_RENDER_RIGHT_LAYOUT,
|
|
6
|
+
disabled: SELECT_DEFAULT_DISABLED,
|
|
7
|
+
size: SELECT_DEFAULT_SIZE,
|
|
8
|
+
open: SELECT_DEFAULT_DEFAULT_OPEN,
|
|
9
|
+
hasValue: false,
|
|
10
|
+
onClear: function () { },
|
|
11
|
+
clearText: '',
|
|
12
|
+
renderLeft: undefined,
|
|
13
|
+
renderRight: undefined,
|
|
14
|
+
showClearButton: SELECT_DEFAULT_SHOW_CLEAR_BUTTON,
|
|
15
|
+
required: SELECT_DEFAULT_REQUIRED,
|
|
16
|
+
multiline: SELECT_DEFAULT_MULTILINE,
|
|
17
|
+
fullWidth: SELECT_DEFAULT_FULL_WIDTH,
|
|
18
|
+
error: false,
|
|
19
|
+
};
|
|
20
|
+
export var SelectContext = createContext(SelectContextDefaultValue);
|
|
21
|
+
export var useSelectContext = function () { return useContext(SelectContext); };
|
|
22
|
+
// Именованный провайдер
|
|
23
|
+
if (isDev) {
|
|
24
|
+
SelectContext.displayName = 'SelectContext';
|
|
25
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const cnSelect: import("@bem-react/classname").ClassNameFormatter;
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { __assign, __read, __rest } from "tslib";
|
|
2
2
|
import '../../Select.css';
|
|
3
3
|
import React, { forwardRef, useCallback } from 'react';
|
|
4
|
-
import { classnames } from '@bem-react/classnames';
|
|
5
|
-
import { ChevronDownIcon } from '@ozen-ui/icons';
|
|
6
4
|
import { useBoolean } from '../../../../hooks/useBoolean';
|
|
7
5
|
import { FieldControl } from '../../../FieldControl';
|
|
8
6
|
import { FieldHint } from '../../../FieldHint';
|
|
9
7
|
import { FieldIcon } from '../../../FieldIcon';
|
|
10
8
|
import { FieldLabel } from '../../../FieldLabel';
|
|
11
9
|
import { Fieldset } from '../../../Fieldset';
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
10
|
+
import { cnSelect } from '../../classNames';
|
|
11
|
+
import { useSelectContext } from '../../SelectContext';
|
|
14
12
|
import { SelectInputContextConsumer } from '../SelectInputContextConsumer';
|
|
13
|
+
import { SelectInputRenderRight } from '../SelectInputRenderRight';
|
|
15
14
|
export var SelectInput = forwardRef(function (_a, ref) {
|
|
16
|
-
var
|
|
17
|
-
var
|
|
15
|
+
var label = _a.label, id = _a.id, name = _a.name, renderedValue = _a.renderedValue, hint = _a.hint, className = _a.className, inputProps = _a.inputProps, valueProp = _a.value, placeholderProp = _a.placeholder, defaultValue = _a.defaultValue, onFocus = _a.onFocus, onBlur = _a.onBlur, onClick = _a.onClick, onKeyDown = _a.onKeyDown, labelProps = _a.labelProps, fieldProps = _a.fieldProps, hintProps = _a.hintProps, labelRef = _a.labelRef, inputRef = _a.inputRef, fieldRef = _a.fieldRef, bodyProps = _a.bodyProps, other = __rest(_a, ["label", "id", "name", "renderedValue", "hint", "className", "inputProps", "value", "placeholder", "defaultValue", "onFocus", "onBlur", "onClick", "onKeyDown", "labelProps", "fieldProps", "hintProps", "labelRef", "inputRef", "fieldRef", "bodyProps"]);
|
|
16
|
+
var _b = useSelectContext(), open = _b.open, required = _b.required, disabled = _b.disabled, fullWidth = _b.fullWidth, renderLeft = _b.renderLeft, multiline = _b.multiline, size = _b.size, error = _b.error;
|
|
17
|
+
var _c = __read(useBoolean(), 2), focused = _c[0], _d = _c[1], on = _d.on, off = _d.off;
|
|
18
18
|
var filled = !!valueProp || valueProp === 0;
|
|
19
19
|
var handleFocus = useCallback(function (e) {
|
|
20
20
|
on();
|
|
@@ -31,8 +31,7 @@ export var SelectInput = forwardRef(function (_a, ref) {
|
|
|
31
31
|
React.createElement("div", { className: cnSelect('HiddenLabel'), "aria-hidden": true }, label),
|
|
32
32
|
React.createElement(FieldLabel, __assign({}, labelProps, { className: cnSelect('Label', [labelProps === null || labelProps === void 0 ? void 0 : labelProps.className]), ref: (labelProps === null || labelProps === void 0 ? void 0 : labelProps.ref) || labelRef }), label),
|
|
33
33
|
React.createElement(SelectInputContextConsumer, { id: id, name: name, value: valueProp, fieldProps: fieldProps, inputProps: inputProps, defaultValue: defaultValue, renderedValue: renderedValue, placeholder: placeholderProp, fieldRef: (fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.ref) || fieldRef, inputRef: (inputProps === null || inputProps === void 0 ? void 0 : inputProps.ref) || inputRef })),
|
|
34
|
-
React.createElement(
|
|
35
|
-
React.createElement(FieldIcon, { icon: ChevronDownIcon, className: classnames(cnSelect('RenderRight'), cnSelect('DropDownIcon', { open: open })) }),
|
|
34
|
+
React.createElement(SelectInputRenderRight, null),
|
|
36
35
|
React.createElement(Fieldset, { className: cnSelect('Fieldset') })),
|
|
37
36
|
React.createElement(FieldHint, __assign({}, hintProps), hint)));
|
|
38
37
|
});
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import type { ComponentPropsWithRef, ComponentRef, ReactNode, Ref } from 'react';
|
|
2
2
|
import type { ExtendableComponentPropsWithRef } from '../../../../types/ExtendableComponentPropsWithRef';
|
|
3
|
-
import type { FormElementSizeVariant } from '../../../../types/FormElementSizeVariant';
|
|
4
3
|
import type { FieldHintProps } from '../../../FieldHint';
|
|
5
|
-
import type { FieldIconProps } from '../../../FieldIcon';
|
|
6
4
|
import type { FieldLabelProps } from '../../../FieldLabel';
|
|
7
|
-
export type SelectInputSizeVariant = FormElementSizeVariant;
|
|
8
5
|
type LabelProps = FieldLabelProps;
|
|
9
6
|
type HintProps = FieldHintProps;
|
|
10
7
|
type InputProps = ComponentPropsWithRef<'input'> & {
|
|
@@ -46,31 +43,14 @@ export type SelectInputProps = ExtendableComponentPropsWithRef<{
|
|
|
46
43
|
name?: string;
|
|
47
44
|
/** Лейбл */
|
|
48
45
|
label?: string;
|
|
49
|
-
/** Размер компонента */
|
|
50
|
-
size?: SelectInputSizeVariant;
|
|
51
46
|
/** Подсказка. Отображается, когда вариант не выбран */
|
|
52
47
|
placeholder?: string;
|
|
53
48
|
/** Если `true` устанавливает автофокус */
|
|
54
49
|
autoFocus?: boolean;
|
|
55
|
-
/** Если `true` переводит поле в состояние ошибки */
|
|
56
|
-
error?: boolean;
|
|
57
|
-
/** Если `true` растягивает поле на всю ширину */
|
|
58
|
-
fullWidth?: boolean;
|
|
59
50
|
/** Дополнительное описание к полю */
|
|
60
51
|
hint?: string | null | undefined;
|
|
61
|
-
/** Если `true` делает элемент неактивным */
|
|
62
|
-
disabled?: boolean;
|
|
63
|
-
/** Если `true` делает элемент обязательным к заполнению */
|
|
64
|
-
required?: boolean;
|
|
65
52
|
/** Если `true` отключает обводку */
|
|
66
53
|
disableStroke?: boolean;
|
|
67
|
-
/** Если `true` предотвращает сокращение текста в значении и
|
|
68
|
-
* задает гибкую высоту контейнера компонента */
|
|
69
|
-
multiline?: boolean;
|
|
70
|
-
/** Текст или иконка слева */
|
|
71
|
-
renderLeft?: FieldIconProps['icon'];
|
|
72
|
-
/** Текст или иконка справа */
|
|
73
|
-
renderRight?: FieldIconProps['icon'];
|
|
74
54
|
/** Значение для отображения */
|
|
75
55
|
renderedValue?: ReactNode;
|
|
76
56
|
/** Выбранное значение */
|
|
@@ -87,8 +67,6 @@ export type SelectInputProps = ExtendableComponentPropsWithRef<{
|
|
|
87
67
|
bodyProps?: BodyProps;
|
|
88
68
|
/** Cвойства FieldHint */
|
|
89
69
|
hintProps?: Omit<HintProps, 'children'>;
|
|
90
|
-
/** Признак раскрытого списка */
|
|
91
|
-
open?: boolean;
|
|
92
70
|
/** Идентификатор компонента для тестов */
|
|
93
71
|
'data-testid'?: string;
|
|
94
72
|
/** Содержимое компонента */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { __assign, __read } from "tslib";
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { useFieldControl } from '../../../FieldControl';
|
|
4
|
-
import { cnSelect } from '../../
|
|
4
|
+
import { cnSelect } from '../../classNames';
|
|
5
5
|
export var SelectInputContextConsumer = function (_a) {
|
|
6
6
|
var id = _a.id, name = _a.name, _b = _a.value, valueProp = _b === void 0 ? '' : _b, placeholderProp = _a.placeholder, defaultValue = _a.defaultValue, inputProps = _a.inputProps, inputRef = _a.inputRef, fieldRef = _a.fieldRef, fieldProps = _a.fieldProps, renderedValue = _a.renderedValue;
|
|
7
7
|
var context = useFieldControl();
|
package/__inner__/esm/components/Select/components/SelectInputRenderRight/SelectInputRenderRight.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { __read } from "tslib";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { classnames } from '@bem-react/classnames';
|
|
4
|
+
import { ChevronDownIcon, CrossIcon } from '@ozen-ui/icons';
|
|
5
|
+
import { useFieldControl } from '../../../FieldControl';
|
|
6
|
+
import { FieldIcon } from '../../../FieldIcon';
|
|
7
|
+
import { IconButton } from '../../../IconButtonNext';
|
|
8
|
+
import { cnSelect } from '../../classNames';
|
|
9
|
+
import { useSelectContext } from '../../SelectContext';
|
|
10
|
+
export var SelectInputRenderRight = function () {
|
|
11
|
+
var _a = __read(useFieldControl(), 1), _b = _a[0], focused = _b.focused, hovered = _b.hovered;
|
|
12
|
+
var _c = useSelectContext(), hasValue = _c.hasValue, open = _c.open, onClear = _c.onClear, renderRight = _c.renderRight, clearText = _c.clearText, renderRightLayout = _c.renderRightLayout, showClearButton = _c.showClearButton, size = _c.size;
|
|
13
|
+
var isVisibleClearButton = !!(hovered || open || focused) && hasValue;
|
|
14
|
+
var clearButton = (React.createElement(IconButton, { key: "clear", tabIndex: -1, size: size, variant: "function", icon: CrossIcon, title: clearText, "aria-label": clearText, onClick: function (event) {
|
|
15
|
+
event.preventDefault();
|
|
16
|
+
event.stopPropagation();
|
|
17
|
+
onClear === null || onClear === void 0 ? void 0 : onClear(event);
|
|
18
|
+
}, className: classnames(cnSelect('RenderRight'), cnSelect('ClearIcon', {
|
|
19
|
+
visibility: isVisibleClearButton,
|
|
20
|
+
})), compressed: true }));
|
|
21
|
+
return (React.createElement(React.Fragment, null,
|
|
22
|
+
showClearButton && !isVisibleClearButton && clearButton,
|
|
23
|
+
renderRightLayout.map(function (element) {
|
|
24
|
+
if (element === 'suffix') {
|
|
25
|
+
return (React.createElement(FieldIcon, { key: element, icon: renderRight, className: classnames(cnSelect('RenderRight', { nonInteractive: true }), cnSelect('Suffix')) }));
|
|
26
|
+
}
|
|
27
|
+
if (element === 'clear') {
|
|
28
|
+
if (!isVisibleClearButton || !showClearButton) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
return clearButton;
|
|
32
|
+
}
|
|
33
|
+
if (element === 'chevron') {
|
|
34
|
+
return (React.createElement(FieldIcon, { key: element, icon: ChevronDownIcon, className: classnames(cnSelect('RenderRight', { nonInteractive: true }), cnSelect('DropDownIcon', { open: open })) }));
|
|
35
|
+
}
|
|
36
|
+
throw new Error("\u042D\u043B\u0435\u043C\u0435\u043D\u0442 \"".concat(element, "\" \u043D\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 renderRight."));
|
|
37
|
+
})));
|
|
38
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './SelectInputRenderRight';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './SelectInputRenderRight';
|
|
@@ -5,3 +5,6 @@ export declare const SELECT_DEFAULT_REQUIRED = false;
|
|
|
5
5
|
export declare const SELECT_DEFAULT_MULTILINE = false;
|
|
6
6
|
export declare const SELECT_DEFAULT_DEFAULT_OPEN = false;
|
|
7
7
|
export declare const SELECT_DEFAULT_SIZE = "m";
|
|
8
|
+
export declare const SELECT_DEFAULT_ERROR = false;
|
|
9
|
+
export declare const SELECT_DEFAULT_RENDER_RIGHT_LAYOUT: ("clear" | "suffix" | "chevron")[];
|
|
10
|
+
export declare const SELECT_DEFAULT_SHOW_CLEAR_BUTTON = false;
|
|
@@ -5,3 +5,10 @@ export var SELECT_DEFAULT_REQUIRED = false;
|
|
|
5
5
|
export var SELECT_DEFAULT_MULTILINE = false;
|
|
6
6
|
export var SELECT_DEFAULT_DEFAULT_OPEN = false;
|
|
7
7
|
export var SELECT_DEFAULT_SIZE = 'm';
|
|
8
|
+
export var SELECT_DEFAULT_ERROR = false;
|
|
9
|
+
export var SELECT_DEFAULT_RENDER_RIGHT_LAYOUT = [
|
|
10
|
+
'suffix',
|
|
11
|
+
'clear',
|
|
12
|
+
'chevron',
|
|
13
|
+
];
|
|
14
|
+
export var SELECT_DEFAULT_SHOW_CLEAR_BUTTON = false;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { FieldIconProps } from '../../FieldIcon';
|
|
2
|
+
export declare const selectRenderRightElement: readonly ["suffix", "clear", "chevron"];
|
|
3
|
+
export type SelectRenderRightElement = (typeof selectRenderRightElement)[number];
|
|
4
|
+
export type SelectRenderRightLayout = SelectRenderRightElement[];
|
|
5
|
+
export type SelectRenderLeft = FieldIconProps['icon'];
|
|
6
|
+
export type SelectRenderRight = FieldIconProps['icon'];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export var selectRenderRightElement = ['suffix', 'clear', 'chevron'];
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import type { ReactElement, ReactNode, SyntheticEvent } from 'react';
|
|
2
|
-
import type { ExtendableComponentPropsWithRef } from '../../types
|
|
3
|
-
import type { FormElementSizeVariant } from '../../types/FormElementSizeVariant';
|
|
2
|
+
import type { ExtendableComponentPropsWithRef } from '../../types';
|
|
4
3
|
import type { WithDisplayName } from '../../types/react';
|
|
5
4
|
import type { DataListBaseProps, DataListOptionProps, DataListSelected } from '../DataList';
|
|
6
5
|
import type { SelectInputProps, SelectInputRef } from './components';
|
|
7
|
-
|
|
6
|
+
import type { SelectOnClear, SelectRenderLeft, SelectRenderRight, SelectRenderRightLayout } from './entities';
|
|
7
|
+
export declare const selectSizeVariant: readonly ["2xs", "xs", "s", "m", "l"];
|
|
8
|
+
export type SelectPropSize = (typeof selectSizeVariant)[number];
|
|
8
9
|
export type SelectLabel<MULTIPLE extends boolean = false> = (MULTIPLE extends true ? DataListOptionProps['label'][] : DataListOptionProps['label']) | undefined;
|
|
9
10
|
export type SelectPropValue<MULTIPLE extends boolean = false> = DataListSelected<MULTIPLE>;
|
|
10
|
-
export type SelectPropOnChange<MULTIPLE extends boolean = false> = (value: SelectPropValue<MULTIPLE>, e: SyntheticEvent | KeyboardEvent) => void;
|
|
11
|
+
export type SelectPropOnChange<MULTIPLE extends boolean = false> = (value: SelectPropValue<MULTIPLE>, e: SyntheticEvent | KeyboardEvent | MouseEvent) => void;
|
|
11
12
|
export type SelectedOption<MULTIPLE extends boolean = false> = {
|
|
12
13
|
label?: SelectLabel<MULTIPLE>;
|
|
13
14
|
value?: SelectPropValue<MULTIPLE>;
|
|
@@ -60,6 +61,30 @@ export type SelectProps<MULTIPLE extends boolean = false> = ExtendableComponentP
|
|
|
60
61
|
renderValue?: SelectPropRenderValue<MULTIPLE>;
|
|
61
62
|
/** Содержимое компонента */
|
|
62
63
|
children?: ReactNode;
|
|
64
|
+
/** Layout правой части инпута.
|
|
65
|
+
* Определяет порядок и наличие элементов */
|
|
66
|
+
renderRightLayout?: SelectRenderRightLayout;
|
|
67
|
+
/** Функция обратного вызова, которая вызывается при очистке значения поля */
|
|
68
|
+
onClear?: SelectOnClear;
|
|
69
|
+
/** Текст для кнопки очистки поля */
|
|
70
|
+
clearText?: string;
|
|
71
|
+
/** Если `true`, то отображает кнопку закрытия */
|
|
72
|
+
showClearButton?: boolean;
|
|
73
|
+
/** Текст или иконка слева */
|
|
74
|
+
renderLeft?: SelectRenderLeft;
|
|
75
|
+
/** Текст или иконка справа */
|
|
76
|
+
renderRight?: SelectRenderRight;
|
|
77
|
+
/** Если `true` растягивает поле на всю ширину */
|
|
78
|
+
fullWidth?: boolean;
|
|
79
|
+
/** Если `true` предотвращает сокращение текста в значении и
|
|
80
|
+
* задает гибкую высоту контейнера компонента */
|
|
81
|
+
multiline?: boolean;
|
|
82
|
+
/** Если `true` делает элемент неактивным */
|
|
83
|
+
disabled?: boolean;
|
|
84
|
+
/** Если `true` делает элемент обязательным к заполнению */
|
|
85
|
+
required?: boolean;
|
|
86
|
+
/** Если `true` переводит поле в состояние ошибки */
|
|
87
|
+
error?: boolean;
|
|
63
88
|
/** Свойства компонента DataList */
|
|
64
89
|
dataListProps?: Partial<Omit<DataListBaseProps<MULTIPLE>, 'onClose' | 'open' | 'anchorRef' | 'multiple' | 'selected' | 'onSelect'>>;
|
|
65
90
|
/** Функция обратного вызова, которая будет вызвана когда компонент запрашивает закрытие */
|
|
@@ -70,6 +95,6 @@ export type SelectProps<MULTIPLE extends boolean = false> = ExtendableComponentP
|
|
|
70
95
|
multiple?: MULTIPLE;
|
|
71
96
|
/** Идентификатор компонента для тестов */
|
|
72
97
|
'data-testid'?: string;
|
|
73
|
-
} & Pick<SelectInputProps, 'id' | 'name' | 'label' | 'placeholder' | '
|
|
98
|
+
} & Pick<SelectInputProps, 'id' | 'name' | 'label' | 'placeholder' | 'disableStroke' | 'hint' | 'inputProps' | 'labelProps' | 'hintProps' | 'bodyProps' | 'inputRef' | 'labelRef' | 'bodyRef'> & SelectPropsDeprecated<MULTIPLE>, 'div'>;
|
|
74
99
|
export type SelectComponent = WithDisplayName<(<MULTIPLE extends boolean = false>(props: SelectProps<MULTIPLE>) => ReactElement | null)>;
|
|
75
100
|
export {};
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { formElementSizeVariant } from '../../types';
|
|
2
|
+
export var selectSizeVariant = formElementSizeVariant;
|