@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.
Files changed (228) hide show
  1. package/StepperVertical/package.json +5 -0
  2. package/__inner__/cjs/components/Autocomplete/helper.d.ts +1 -1
  3. package/__inner__/cjs/components/Autocomplete/types.d.ts +1 -1
  4. package/__inner__/cjs/components/Calendar/Calendar.js +26 -2
  5. package/__inner__/cjs/components/Calendar/CalendarContext.d.ts +8 -1
  6. package/__inner__/cjs/components/Calendar/CalendarContext.js +10 -1
  7. package/__inner__/cjs/components/Calendar/__tests__/utils.d.ts +11 -0
  8. package/__inner__/cjs/components/Calendar/__tests__/utils.js +58 -0
  9. package/__inner__/cjs/components/Calendar/components/CalendarGrid/CalendarGrid.js +4 -3
  10. package/__inner__/cjs/components/Calendar/components/CalendarItem/CalendarItem.js +25 -2
  11. package/__inner__/cjs/components/Calendar/components/CalendarItem/CalendarItemContext.d.ts +1 -0
  12. package/__inner__/cjs/components/Calendar/components/CalendarItem/CalendarItemContext.js +1 -0
  13. package/__inner__/cjs/components/Calendar/components/CalendarModeRange/CalendarModeRange.js +68 -13
  14. package/__inner__/cjs/components/Calendar/components/CalendarModeSingle/CalendarModeSingle.js +62 -16
  15. package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/CalendarSwitcher.js +6 -7
  16. package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/CalendarSwitcherText.d.ts +3 -0
  17. package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/CalendarSwitcherText.js +13 -0
  18. package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/index.d.ts +2 -0
  19. package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/index.js +5 -0
  20. package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/types.d.ts +4 -0
  21. package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/types.js +2 -0
  22. package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/index.d.ts +1 -0
  23. package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/index.js +4 -0
  24. package/__inner__/cjs/components/Calendar/constants.d.ts +2 -0
  25. package/__inner__/cjs/components/Calendar/constants.js +7 -1
  26. package/__inner__/cjs/components/Calendar/index.d.ts +1 -0
  27. package/__inner__/cjs/components/Calendar/index.js +1 -0
  28. package/__inner__/cjs/components/Calendar/types.d.ts +13 -5
  29. package/__inner__/cjs/components/Calendar/utils.d.ts +10 -1
  30. package/__inner__/cjs/components/Calendar/utils.js +12 -1
  31. package/__inner__/cjs/components/DataList/types.d.ts +1 -1
  32. package/__inner__/cjs/components/DatePicker/components/DateInput/DateInput.js +4 -3
  33. package/__inner__/cjs/components/DatePicker/components/DateInput/types.d.ts +6 -2
  34. package/__inner__/cjs/components/DatePicker/components/DateInput/utils/dateInputMask/dateInputMask.d.ts +2 -1
  35. package/__inner__/cjs/components/DatePicker/components/DateInput/utils/dateInputMask/dateInputMask.js +67 -7
  36. package/__inner__/cjs/components/DatePicker/components/DatePickerModeDate/DatePickerModeDate.js +32 -20
  37. package/__inner__/cjs/components/DatePicker/components/DatePickerModeDateRange/DatePickerModeDateRange.js +74 -51
  38. package/__inner__/cjs/components/DatePicker/constants.d.ts +2 -0
  39. package/__inner__/cjs/components/DatePicker/constants.js +4 -1
  40. package/__inner__/cjs/components/DatePicker/types.d.ts +10 -6
  41. package/__inner__/cjs/components/DatePicker/types.js +3 -1
  42. package/__inner__/cjs/components/DatePicker/utils/formatDateToString/formatDateToString.d.ts +2 -1
  43. package/__inner__/cjs/components/DatePicker/utils/formatDateToString/formatDateToString.js +18 -5
  44. package/__inner__/cjs/components/DatePicker/utils/formatStringToDate/formatStringToDate.d.ts +2 -1
  45. package/__inner__/cjs/components/DatePicker/utils/formatStringToDate/formatStringToDate.js +6 -5
  46. package/__inner__/cjs/components/DatePicker/utils/getCommonCalendarProps/getCommonCalendarProps.js +2 -2
  47. package/__inner__/cjs/components/DatePicker/utils/index.d.ts +2 -0
  48. package/__inner__/cjs/components/DatePicker/utils/index.js +2 -0
  49. package/__inner__/cjs/components/DatePicker/utils/isValidDateString/isValidDateString.d.ts +2 -1
  50. package/__inner__/cjs/components/DatePicker/utils/isValidDateString/isValidDateString.js +9 -8
  51. package/__inner__/cjs/components/DatePicker/utils/maskPastedDate/index.d.ts +1 -0
  52. package/__inner__/cjs/components/DatePicker/utils/maskPastedDate/index.js +4 -0
  53. package/__inner__/cjs/components/DatePicker/utils/maskPastedDate/maskPastedDate.d.ts +6 -0
  54. package/__inner__/cjs/components/DatePicker/utils/maskPastedDate/maskPastedDate.js +43 -0
  55. package/__inner__/cjs/components/DatePicker/utils/parseDateString/index.d.ts +1 -0
  56. package/__inner__/cjs/components/DatePicker/utils/parseDateString/index.js +4 -0
  57. package/__inner__/cjs/components/DatePicker/utils/parseDateString/parseDateString.d.ts +6 -0
  58. package/__inner__/cjs/components/DatePicker/utils/parseDateString/parseDateString.js +66 -0
  59. package/__inner__/cjs/components/ListCardItem/hooks/useListCardItemRatio.js +10 -14
  60. package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/color/b-business-dark/color-b-business-dark.css +1 -1
  61. package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/color/b-business-default/color-b-business-default.css +1 -1
  62. package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/color/ozen-dark/color-ozen-dark.css +1 -1
  63. package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/color/ozen-default/color-ozen-default.css +1 -1
  64. package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/color/vip-dark/color-vip-dark.css +1 -1
  65. package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/color/vip-default/color-vip-default.css +1 -1
  66. package/__inner__/cjs/components/OzenProvider/providers/theme/tokens/shadow/ozen-default/shadow-ozen-default.css +1 -1
  67. package/__inner__/cjs/components/Select/Select.css +10 -1
  68. package/__inner__/cjs/components/Select/Select.d.ts +0 -1
  69. package/__inner__/cjs/components/Select/Select.js +40 -10
  70. package/__inner__/cjs/components/Select/SelectContext.d.ts +21 -0
  71. package/__inner__/cjs/components/Select/SelectContext.js +29 -0
  72. package/__inner__/cjs/components/Select/classNames.d.ts +1 -0
  73. package/__inner__/cjs/components/Select/classNames.js +5 -0
  74. package/__inner__/cjs/components/Select/components/SelectInput/SelectInput.js +14 -15
  75. package/__inner__/cjs/components/Select/components/SelectInput/types.d.ts +0 -22
  76. package/__inner__/cjs/components/Select/components/SelectInputContextConsumer/SelectInputContextConsumer.js +3 -3
  77. package/__inner__/cjs/components/Select/components/SelectInputRenderRight/SelectInputRenderRight.d.ts +2 -0
  78. package/__inner__/cjs/components/Select/components/SelectInputRenderRight/SelectInputRenderRight.js +42 -0
  79. package/__inner__/cjs/components/Select/components/SelectInputRenderRight/index.d.ts +1 -0
  80. package/__inner__/cjs/components/Select/components/SelectInputRenderRight/index.js +4 -0
  81. package/__inner__/cjs/components/Select/components/index.d.ts +1 -0
  82. package/__inner__/cjs/components/Select/components/index.js +1 -0
  83. package/__inner__/cjs/components/Select/constants.d.ts +3 -0
  84. package/__inner__/cjs/components/Select/constants.js +8 -1
  85. package/__inner__/cjs/components/Select/entities/index.d.ts +2 -0
  86. package/__inner__/cjs/components/Select/entities/index.js +5 -0
  87. package/__inner__/cjs/components/Select/entities/onClear.d.ts +2 -0
  88. package/__inner__/cjs/components/Select/entities/onClear.js +2 -0
  89. package/__inner__/cjs/components/Select/entities/render.d.ts +6 -0
  90. package/__inner__/cjs/components/Select/entities/render.js +4 -0
  91. package/__inner__/cjs/components/Select/index.d.ts +1 -0
  92. package/__inner__/cjs/components/Select/index.js +1 -0
  93. package/__inner__/cjs/components/Select/types.d.ts +30 -5
  94. package/__inner__/cjs/components/Select/types.js +3 -0
  95. package/__inner__/cjs/components/Stack/Stack.css +3 -0
  96. package/__inner__/cjs/components/Stack/Stack.js +2 -1
  97. package/__inner__/cjs/components/Stack/constants.d.ts +1 -0
  98. package/__inner__/cjs/components/Stack/constants.js +2 -1
  99. package/__inner__/cjs/components/Stack/types.d.ts +4 -0
  100. package/__inner__/cjs/components/Stack/types.js +2 -1
  101. package/__inner__/cjs/hooks/useDevEffect/index.d.ts +1 -0
  102. package/__inner__/cjs/hooks/useDevEffect/index.js +4 -0
  103. package/__inner__/cjs/hooks/useDevEffect/useDevEffect.d.ts +3 -0
  104. package/__inner__/cjs/hooks/useDevEffect/useDevEffect.js +13 -0
  105. package/__inner__/cjs/hooks/useIntersectionObserver/useIntersectionObserver.js +3 -2
  106. package/__inner__/cjs/locale/locale.js +48 -3
  107. package/__inner__/cjs/utils/array/createFilled/createFilledArray.d.ts +1 -1
  108. package/__inner__/cjs/utils/array/createFilled/createFilledArray.js +6 -1
  109. package/__inner__/cjs/utils/array/generatePermutations/generatePermutations.d.ts +1 -0
  110. package/__inner__/cjs/utils/array/generatePermutations/generatePermutations.js +47 -0
  111. package/__inner__/cjs/utils/array/generatePermutations/index.d.ts +1 -0
  112. package/__inner__/cjs/utils/array/generatePermutations/index.js +4 -0
  113. package/__inner__/cjs/utils/array/index.d.ts +1 -0
  114. package/__inner__/cjs/utils/array/index.js +1 -0
  115. package/__inner__/esm/components/Autocomplete/helper.d.ts +1 -1
  116. package/__inner__/esm/components/Autocomplete/types.d.ts +1 -1
  117. package/__inner__/esm/components/Calendar/Calendar.js +27 -3
  118. package/__inner__/esm/components/Calendar/CalendarContext.d.ts +8 -1
  119. package/__inner__/esm/components/Calendar/CalendarContext.js +10 -1
  120. package/__inner__/esm/components/Calendar/__tests__/utils.d.ts +11 -0
  121. package/__inner__/esm/components/Calendar/__tests__/utils.js +45 -0
  122. package/__inner__/esm/components/Calendar/components/CalendarGrid/CalendarGrid.js +4 -3
  123. package/__inner__/esm/components/Calendar/components/CalendarItem/CalendarItem.js +25 -2
  124. package/__inner__/esm/components/Calendar/components/CalendarItem/CalendarItemContext.d.ts +1 -0
  125. package/__inner__/esm/components/Calendar/components/CalendarItem/CalendarItemContext.js +1 -0
  126. package/__inner__/esm/components/Calendar/components/CalendarModeRange/CalendarModeRange.js +70 -15
  127. package/__inner__/esm/components/Calendar/components/CalendarModeSingle/CalendarModeSingle.js +64 -18
  128. package/__inner__/esm/components/Calendar/components/CalendarSwitcher/CalendarSwitcher.js +6 -7
  129. package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/CalendarSwitcherText.d.ts +3 -0
  130. package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/CalendarSwitcherText.js +9 -0
  131. package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/index.d.ts +2 -0
  132. package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/index.js +2 -0
  133. package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/types.d.ts +4 -0
  134. package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/types.js +1 -0
  135. package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/index.d.ts +1 -0
  136. package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/index.js +1 -0
  137. package/__inner__/esm/components/Calendar/constants.d.ts +2 -0
  138. package/__inner__/esm/components/Calendar/constants.js +6 -0
  139. package/__inner__/esm/components/Calendar/index.d.ts +1 -0
  140. package/__inner__/esm/components/Calendar/index.js +1 -0
  141. package/__inner__/esm/components/Calendar/types.d.ts +13 -5
  142. package/__inner__/esm/components/Calendar/utils.d.ts +10 -1
  143. package/__inner__/esm/components/Calendar/utils.js +9 -0
  144. package/__inner__/esm/components/DataList/types.d.ts +1 -1
  145. package/__inner__/esm/components/DatePicker/components/DateInput/DateInput.js +3 -2
  146. package/__inner__/esm/components/DatePicker/components/DateInput/types.d.ts +6 -2
  147. package/__inner__/esm/components/DatePicker/components/DateInput/utils/dateInputMask/dateInputMask.d.ts +2 -1
  148. package/__inner__/esm/components/DatePicker/components/DateInput/utils/dateInputMask/dateInputMask.js +67 -7
  149. package/__inner__/esm/components/DatePicker/components/DatePickerModeDate/DatePickerModeDate.js +33 -21
  150. package/__inner__/esm/components/DatePicker/components/DatePickerModeDateRange/DatePickerModeDateRange.js +68 -45
  151. package/__inner__/esm/components/DatePicker/constants.d.ts +2 -0
  152. package/__inner__/esm/components/DatePicker/constants.js +3 -0
  153. package/__inner__/esm/components/DatePicker/types.d.ts +10 -6
  154. package/__inner__/esm/components/DatePicker/types.js +2 -0
  155. package/__inner__/esm/components/DatePicker/utils/formatDateToString/formatDateToString.d.ts +2 -1
  156. package/__inner__/esm/components/DatePicker/utils/formatDateToString/formatDateToString.js +18 -5
  157. package/__inner__/esm/components/DatePicker/utils/formatStringToDate/formatStringToDate.d.ts +2 -1
  158. package/__inner__/esm/components/DatePicker/utils/formatStringToDate/formatStringToDate.js +6 -5
  159. package/__inner__/esm/components/DatePicker/utils/getCommonCalendarProps/getCommonCalendarProps.js +2 -2
  160. package/__inner__/esm/components/DatePicker/utils/index.d.ts +2 -0
  161. package/__inner__/esm/components/DatePicker/utils/index.js +2 -0
  162. package/__inner__/esm/components/DatePicker/utils/isValidDateString/isValidDateString.d.ts +2 -1
  163. package/__inner__/esm/components/DatePicker/utils/isValidDateString/isValidDateString.js +8 -7
  164. package/__inner__/esm/components/DatePicker/utils/maskPastedDate/index.d.ts +1 -0
  165. package/__inner__/esm/components/DatePicker/utils/maskPastedDate/index.js +1 -0
  166. package/__inner__/esm/components/DatePicker/utils/maskPastedDate/maskPastedDate.d.ts +6 -0
  167. package/__inner__/esm/components/DatePicker/utils/maskPastedDate/maskPastedDate.js +39 -0
  168. package/__inner__/esm/components/DatePicker/utils/parseDateString/index.d.ts +1 -0
  169. package/__inner__/esm/components/DatePicker/utils/parseDateString/index.js +1 -0
  170. package/__inner__/esm/components/DatePicker/utils/parseDateString/parseDateString.d.ts +6 -0
  171. package/__inner__/esm/components/DatePicker/utils/parseDateString/parseDateString.js +62 -0
  172. package/__inner__/esm/components/ListCardItem/hooks/useListCardItemRatio.js +10 -14
  173. package/__inner__/esm/components/OzenProvider/providers/theme/tokens/color/b-business-dark/color-b-business-dark.css +1 -1
  174. package/__inner__/esm/components/OzenProvider/providers/theme/tokens/color/b-business-default/color-b-business-default.css +1 -1
  175. package/__inner__/esm/components/OzenProvider/providers/theme/tokens/color/ozen-dark/color-ozen-dark.css +1 -1
  176. package/__inner__/esm/components/OzenProvider/providers/theme/tokens/color/ozen-default/color-ozen-default.css +1 -1
  177. package/__inner__/esm/components/OzenProvider/providers/theme/tokens/color/vip-dark/color-vip-dark.css +1 -1
  178. package/__inner__/esm/components/OzenProvider/providers/theme/tokens/color/vip-default/color-vip-default.css +1 -1
  179. package/__inner__/esm/components/OzenProvider/providers/theme/tokens/shadow/ozen-default/shadow-ozen-default.css +1 -1
  180. package/__inner__/esm/components/Select/Select.css +10 -1
  181. package/__inner__/esm/components/Select/Select.d.ts +0 -1
  182. package/__inner__/esm/components/Select/Select.js +40 -10
  183. package/__inner__/esm/components/Select/SelectContext.d.ts +21 -0
  184. package/__inner__/esm/components/Select/SelectContext.js +25 -0
  185. package/__inner__/esm/components/Select/classNames.d.ts +1 -0
  186. package/__inner__/esm/components/Select/classNames.js +2 -0
  187. package/__inner__/esm/components/Select/components/SelectInput/SelectInput.js +7 -8
  188. package/__inner__/esm/components/Select/components/SelectInput/types.d.ts +0 -22
  189. package/__inner__/esm/components/Select/components/SelectInputContextConsumer/SelectInputContextConsumer.js +1 -1
  190. package/__inner__/esm/components/Select/components/SelectInputRenderRight/SelectInputRenderRight.d.ts +2 -0
  191. package/__inner__/esm/components/Select/components/SelectInputRenderRight/SelectInputRenderRight.js +38 -0
  192. package/__inner__/esm/components/Select/components/SelectInputRenderRight/index.d.ts +1 -0
  193. package/__inner__/esm/components/Select/components/SelectInputRenderRight/index.js +1 -0
  194. package/__inner__/esm/components/Select/components/index.d.ts +1 -0
  195. package/__inner__/esm/components/Select/components/index.js +1 -0
  196. package/__inner__/esm/components/Select/constants.d.ts +3 -0
  197. package/__inner__/esm/components/Select/constants.js +7 -0
  198. package/__inner__/esm/components/Select/entities/index.d.ts +2 -0
  199. package/__inner__/esm/components/Select/entities/index.js +2 -0
  200. package/__inner__/esm/components/Select/entities/onClear.d.ts +2 -0
  201. package/__inner__/esm/components/Select/entities/onClear.js +1 -0
  202. package/__inner__/esm/components/Select/entities/render.d.ts +6 -0
  203. package/__inner__/esm/components/Select/entities/render.js +1 -0
  204. package/__inner__/esm/components/Select/index.d.ts +1 -0
  205. package/__inner__/esm/components/Select/index.js +1 -0
  206. package/__inner__/esm/components/Select/types.d.ts +30 -5
  207. package/__inner__/esm/components/Select/types.js +2 -1
  208. package/__inner__/esm/components/Stack/Stack.css +3 -0
  209. package/__inner__/esm/components/Stack/Stack.js +3 -2
  210. package/__inner__/esm/components/Stack/constants.d.ts +1 -0
  211. package/__inner__/esm/components/Stack/constants.js +1 -0
  212. package/__inner__/esm/components/Stack/types.d.ts +4 -0
  213. package/__inner__/esm/components/Stack/types.js +1 -0
  214. package/__inner__/esm/hooks/useDevEffect/index.d.ts +1 -0
  215. package/__inner__/esm/hooks/useDevEffect/index.js +1 -0
  216. package/__inner__/esm/hooks/useDevEffect/useDevEffect.d.ts +3 -0
  217. package/__inner__/esm/hooks/useDevEffect/useDevEffect.js +9 -0
  218. package/__inner__/esm/hooks/useIntersectionObserver/useIntersectionObserver.js +3 -2
  219. package/__inner__/esm/locale/locale.js +48 -3
  220. package/__inner__/esm/utils/array/createFilled/createFilledArray.d.ts +1 -1
  221. package/__inner__/esm/utils/array/createFilled/createFilledArray.js +6 -1
  222. package/__inner__/esm/utils/array/generatePermutations/generatePermutations.d.ts +1 -0
  223. package/__inner__/esm/utils/array/generatePermutations/generatePermutations.js +43 -0
  224. package/__inner__/esm/utils/array/generatePermutations/index.d.ts +1 -0
  225. package/__inner__/esm/utils/array/generatePermutations/index.js +1 -0
  226. package/__inner__/esm/utils/array/index.d.ts +1 -0
  227. package/__inner__/esm/utils/array/index.js +1 -0
  228. 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 { isDev } from '../../../constants/environment';
2
+ import { useDevEffect } from '../../../hooks/useDevEffect';
4
3
  export var useListCardItemRatio = function (contentTrailingRatio) {
5
- if (isDev) {
6
- // eslint-disable-next-line react-hooks/rules-of-hooks
7
- useEffect(function () {
8
- if (contentTrailingRatio < 0) {
9
- logger.error('Свойство «contentTrailingRatio» у компонента ListCardItem не может быть меньше 0');
10
- return;
11
- }
12
- if (contentTrailingRatio > 1) {
13
- logger.error('Свойство «contentTrailingRatio» у компонента ListCardItem не может быть больше 1');
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 };
@@ -169,4 +169,4 @@
169
169
  --color-additional-h1: #9f891a;
170
170
  --color-additional-h2: #ffda1f;
171
171
  --color-additional-h3: #fff0a5;
172
- }
172
+ }
@@ -169,4 +169,4 @@
169
169
  --color-additional-h1: #9f891a;
170
170
  --color-additional-h2: #ffda1f;
171
171
  --color-additional-h3: #fff0a5;
172
- }
172
+ }
@@ -169,4 +169,4 @@
169
169
  --color-additional-h1: #9f891a;
170
170
  --color-additional-h2: #ffda1f;
171
171
  --color-additional-h3: #fff0a5;
172
- }
172
+ }
@@ -169,4 +169,4 @@
169
169
  --color-additional-h1: #9f891a;
170
170
  --color-additional-h2: #ffda1f;
171
171
  --color-additional-h3: #fff0a5;
172
- }
172
+ }
@@ -169,4 +169,4 @@
169
169
  --color-additional-h1: #9f891a;
170
170
  --color-additional-h2: #ffda1f;
171
171
  --color-additional-h3: #fff0a5;
172
- }
172
+ }
@@ -169,4 +169,4 @@
169
169
  --color-additional-h1: #9f891a;
170
170
  --color-additional-h2: #ffda1f;
171
171
  --color-additional-h3: #fff0a5;
172
- }
172
+ }
@@ -2,4 +2,4 @@
2
2
  --shadow-l: 0px 8px 32px rgb(0 0 0 / 8%);
3
3
  --shadow-m: 0px 4px 20px rgb(0 0 0 / 6%);
4
4
  --shadow-s: 0px 4px 8px rgb(0 0 0 / 3%);
5
- }
5
+ }
@@ -79,10 +79,19 @@
79
79
  }
80
80
 
81
81
  .Select-RenderLeft,
82
- .Select-RenderRight {
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,4 +1,3 @@
1
1
  import './Select.css';
2
2
  import type { SelectComponent } from './types';
3
- export declare const cnSelect: import("@bem-react/classname").ClassNameFormatter;
4
3
  export declare const Select: SelectComponent;
@@ -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 { cn } from '../../utils/classname';
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
- export var cnSelect = cn('Select');
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 _h = __read(useControlled({
32
+ var _l = __read(useControlled({
26
33
  value: valueProp,
27
34
  defaultValue: defaultValue,
28
35
  name: 'Select',
29
36
  state: 'value',
30
- }), 2), valueState = _h[0], setValueState = _h[1];
31
- var _j = __read(useControlled({
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 = _j[0], setOpen = _j[1];
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(React.Fragment, null,
142
- React.createElement(SelectInput, __assign({ size: size, disabled: disabled, required: required, multiline: multiline, fullWidth: fullWidth }, other, { open: open, value: inputValue(), onClick: handleClick, onKeyDown: handleKeyDown, renderedValue: renderValue({
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;
@@ -0,0 +1,2 @@
1
+ import { cn } from '../../utils';
2
+ export var cnSelect = cn('Select');
@@ -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 { SELECT_DEFAULT_MULTILINE, SELECT_DEFAULT_SIZE } from '../../constants';
13
- import { cnSelect } from '../../index';
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 _b = _a.size, size = _b === void 0 ? SELECT_DEFAULT_SIZE : _b, _c = _a.multiline, multiline = _c === void 0 ? SELECT_DEFAULT_MULTILINE : _c, open = _a.open, label = _a.label, error = _a.error, id = _a.id, name = _a.name, renderLeft = _a.renderLeft, renderRight = _a.renderRight, renderedValue = _a.renderedValue, fullWidth = _a.fullWidth, disabled = _a.disabled, hint = _a.hint, required = _a.required, 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, ["size", "multiline", "open", "label", "error", "id", "name", "renderLeft", "renderRight", "renderedValue", "fullWidth", "disabled", "hint", "required", "className", "inputProps", "value", "placeholder", "defaultValue", "onFocus", "onBlur", "onClick", "onKeyDown", "labelProps", "fieldProps", "hintProps", "labelRef", "inputRef", "fieldRef", "bodyProps"]);
17
- var _d = __read(useBoolean(), 2), focused = _d[0], _e = _d[1], on = _e.on, off = _e.off;
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(FieldIcon, { icon: renderRight, className: cnSelect('RenderRight') }),
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 '../../index';
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();
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const SelectInputRenderRight: () => React.JSX.Element;
@@ -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';
@@ -1 +1,2 @@
1
1
  export * from './SelectInput';
2
+ export * from './SelectInputRenderRight';
@@ -1 +1,2 @@
1
1
  export * from './SelectInput';
2
+ 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,2 @@
1
+ export * from './onClear';
2
+ export * from './render';
@@ -0,0 +1,2 @@
1
+ export * from './onClear';
2
+ export * from './render';
@@ -0,0 +1,2 @@
1
+ import type { MouseEvent } from 'react';
2
+ export type SelectOnClear = (event: MouseEvent<HTMLElement>) => void;
@@ -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,4 +1,5 @@
1
1
  export { DataListOption as Option } from '../DataList';
2
2
  export { ListItemText as OptionItemText, ListItemIcon as OptionItemIcon, } from '../List';
3
+ export * from './classNames';
3
4
  export * from './Select';
4
5
  export * from './types';
@@ -1,4 +1,5 @@
1
1
  export { DataListOption as Option } from '../DataList';
2
2
  export { ListItemText as OptionItemText, ListItemIcon as OptionItemIcon, } from '../List';
3
+ export * from './classNames';
3
4
  export * from './Select';
4
5
  export * from './types';
@@ -1,13 +1,14 @@
1
1
  import type { ReactElement, ReactNode, SyntheticEvent } from 'react';
2
- import type { ExtendableComponentPropsWithRef } from '../../types/ExtendableComponentPropsWithRef';
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
- export type SelectPropSize = FormElementSizeVariant;
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' | 'disabled' | 'required' | 'disableStroke' | 'error' | 'hint' | 'fullWidth' | 'renderLeft' | 'renderRight' | 'multiline' | 'inputProps' | 'labelProps' | 'hintProps' | 'bodyProps' | 'inputRef' | 'labelRef' | 'bodyRef'> & SelectPropsDeprecated<MULTIPLE>, 'div'>;
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
- export {};
1
+ import { formElementSizeVariant } from '../../types';
2
+ export var selectSizeVariant = formElementSizeVariant;