@true-engineering/true-react-common-ui-kit 4.0.0-alpha2 → 4.0.0-alpha21

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 (215) hide show
  1. package/README.md +11 -567
  2. package/dist/components/Button/Button.styles.d.ts +1 -1
  3. package/dist/components/Checkbox/Checkbox.styles.d.ts +1 -1
  4. package/dist/components/ControlWrapper/ControlWrapper.d.ts +2 -0
  5. package/dist/components/ControlWrapper/ControlWrapper.styles.d.ts +2 -1
  6. package/dist/components/ControlWrapper/index.d.ts +1 -0
  7. package/dist/components/ControlWrapper/types.d.ts +3 -0
  8. package/dist/components/DatePicker/DatePicker.d.ts +3 -3
  9. package/dist/components/DatePicker/DatePicker.styles.d.ts +1 -1
  10. package/dist/components/DatePicker/components/PopperContainer/PopperContainer.d.ts +2 -4
  11. package/dist/components/DatePicker/helpers.d.ts +3 -0
  12. package/dist/components/DatePicker/types.d.ts +5 -3
  13. package/dist/components/FiltersPane/FiltersPane.d.ts +7 -2
  14. package/dist/components/FiltersPane/components/Filter/Filter.d.ts +2 -2
  15. package/dist/components/FiltersPane/components/Filter/helpers.d.ts +4 -0
  16. package/dist/components/FiltersPane/components/FilterInterval/FilterInterval.styles.d.ts +1 -1
  17. package/dist/components/FiltersPane/components/FilterSelect/FilterSelect.styles.d.ts +1 -1
  18. package/dist/components/FiltersPane/components/FilterValueView/FilterValueView.d.ts +3 -1
  19. package/dist/components/FiltersPane/components/FilterWithDates/FilterWithDates.styles.d.ts +2 -2
  20. package/dist/components/FiltersPane/components/FilterWrapper/FilterWrapper.d.ts +2 -2
  21. package/dist/components/FiltersPane/types.d.ts +15 -5
  22. package/dist/components/Flag/customFlags/customFlags.d.ts +10 -0
  23. package/dist/components/Flag/customFlags/index.d.ts +1 -0
  24. package/dist/components/FlexibleTable/FlexibleTable.d.ts +4 -2
  25. package/dist/components/FlexibleTable/components/FlexibleTableCell/FlexibleTableCell.d.ts +4 -3
  26. package/dist/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.d.ts +6 -6
  27. package/dist/components/FlexibleTable/constants.d.ts +18 -2
  28. package/dist/components/FlexibleTable/types.d.ts +8 -8
  29. package/dist/components/Icon/icons-list.d.ts +1 -1
  30. package/dist/components/IconButton/IconButton.styles.d.ts +1 -1
  31. package/dist/components/IncrementInput/IncrementInput.styles.d.ts +1 -3
  32. package/dist/components/Input/Input.d.ts +3 -2
  33. package/dist/components/Input/InputBase.d.ts +2 -2
  34. package/dist/components/List/List.d.ts +1 -1
  35. package/dist/components/List/index.d.ts +2 -1
  36. package/dist/components/List/types.d.ts +4 -0
  37. package/dist/components/Modal/Modal.styles.d.ts +1 -1
  38. package/dist/components/Notification/Notification.styles.d.ts +1 -1
  39. package/dist/components/ScrollIntoViewIfNeeded/ScrollIntoViewIfNeeded.d.ts +1 -1
  40. package/dist/components/SearchInput/SearchInput.d.ts +2 -2
  41. package/dist/components/Select/Select.d.ts +5 -3
  42. package/dist/components/Select/Select.styles.d.ts +4 -4
  43. package/dist/components/Select/index.d.ts +1 -1
  44. package/dist/components/Status/Status.styles.d.ts +3 -2
  45. package/dist/components/Status/constants.d.ts +0 -1
  46. package/dist/components/Status/index.d.ts +1 -0
  47. package/dist/components/Status/types.d.ts +5 -2
  48. package/dist/components/TextArea/TextArea.d.ts +2 -5
  49. package/dist/components/TextArea/TextArea.styles.d.ts +1 -2
  50. package/dist/components/TextArea/index.d.ts +0 -1
  51. package/dist/components/TextButton/TextButton.styles.d.ts +1 -1
  52. package/dist/components/Tooltip/Tooltip.d.ts +1 -1
  53. package/dist/components/Tooltip/Tooltip.styles.d.ts +1 -1
  54. package/dist/components/WithMessages/WithMessages.styles.d.ts +1 -1
  55. package/dist/components/WithPopup/WithPopup.d.ts +21 -6
  56. package/dist/components/WithPopup/WithPopup.styles.d.ts +1 -1
  57. package/dist/components/WithPopup/helpers.d.ts +2 -0
  58. package/dist/components/WithPopup/types.d.ts +3 -0
  59. package/dist/components/WithTooltip/WithTooltip.styles.d.ts +1 -0
  60. package/dist/hooks/index.d.ts +1 -0
  61. package/dist/hooks/use-merge.d.ts +1 -0
  62. package/dist/hooks/use-mixed-styles.d.ts +3 -1
  63. package/dist/hooks/use-tweak-styles.d.ts +5 -5
  64. package/dist/style.css +78 -142
  65. package/dist/theme/Provider.d.ts +6 -3
  66. package/dist/theme/common.d.ts +4 -2
  67. package/dist/theme/create-themed-styles.d.ts +2 -0
  68. package/dist/theme/helpers.d.ts +9 -3
  69. package/dist/theme/index.d.ts +2 -0
  70. package/dist/theme/true-jss/ThemedStylesManager.d.ts +18 -0
  71. package/dist/theme/true-jss/TweakStylesManager.d.ts +34 -0
  72. package/dist/theme/true-jss/index.d.ts +2 -0
  73. package/dist/theme/true-jss/jss-context.d.ts +9 -0
  74. package/dist/theme/types.d.ts +5 -3
  75. package/dist/true-react-common-ui-kit.js +7580 -6523
  76. package/dist/true-react-common-ui-kit.js.map +1 -1
  77. package/dist/true-react-common-ui-kit.umd.cjs +7466 -6410
  78. package/dist/true-react-common-ui-kit.umd.cjs.map +1 -1
  79. package/dist/types.d.ts +10 -3
  80. package/package.json +4 -5
  81. package/src/components/ControlWrapper/ControlWrapper.stories.tsx +1 -1
  82. package/src/components/ControlWrapper/ControlWrapper.styles.ts +7 -6
  83. package/src/components/ControlWrapper/ControlWrapper.tsx +8 -2
  84. package/src/components/ControlWrapper/index.ts +1 -0
  85. package/src/components/ControlWrapper/types.ts +4 -0
  86. package/src/components/DatePicker/DatePicker.stories.tsx +2 -1
  87. package/src/components/DatePicker/DatePicker.styles.ts +3 -1
  88. package/src/components/DatePicker/DatePicker.tsx +12 -7
  89. package/src/components/DatePicker/components/PopperContainer/PopperContainer.tsx +4 -4
  90. package/src/components/DatePicker/helpers.ts +13 -1
  91. package/src/components/DatePicker/types.ts +9 -4
  92. package/src/components/FiltersPane/FiltersPane.stories.tsx +4 -2
  93. package/src/components/FiltersPane/FiltersPane.tsx +19 -13
  94. package/src/components/FiltersPane/components/Filter/Filter.tsx +24 -17
  95. package/src/components/FiltersPane/components/Filter/helpers.ts +18 -0
  96. package/src/components/FiltersPane/components/FilterValueView/FilterValueView.tsx +27 -22
  97. package/src/components/FiltersPane/components/FilterWithDates/FilterWithDates.styles.ts +1 -0
  98. package/src/components/FiltersPane/components/FilterWithDates/FilterWithDates.tsx +3 -4
  99. package/src/components/FiltersPane/components/FilterWithPeriod/FilterWithPeriod.tsx +1 -1
  100. package/src/components/FiltersPane/components/FilterWrapper/FilterWrapper.tsx +7 -5
  101. package/src/components/FiltersPane/types.ts +23 -5
  102. package/src/components/Flag/Flag.stories.tsx +2 -1
  103. package/src/components/Flag/Flag.styles.ts +4 -0
  104. package/src/components/Flag/Flag.tsx +23 -9
  105. package/src/components/Flag/customFlags/AB.svg +1 -0
  106. package/src/components/Flag/customFlags/OS.svg +1 -0
  107. package/src/components/Flag/customFlags/augment.d.ts +1 -0
  108. package/src/components/Flag/customFlags/customFlags.ts +13 -0
  109. package/src/components/Flag/customFlags/index.ts +1 -0
  110. package/src/components/FlexibleTable/FlexibleTable.tsx +13 -12
  111. package/src/components/FlexibleTable/components/FlexibleTableCell/FlexibleTableCell.tsx +8 -5
  112. package/src/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.tsx +13 -12
  113. package/src/components/FlexibleTable/constants.ts +6 -3
  114. package/src/components/FlexibleTable/types.ts +8 -12
  115. package/src/components/IncrementInput/IncrementInput.stories.tsx +2 -0
  116. package/src/components/IncrementInput/IncrementInput.styles.ts +31 -39
  117. package/src/components/IncrementInput/IncrementInput.tsx +28 -25
  118. package/src/components/Input/Input.tsx +5 -3
  119. package/src/components/Input/InputBase.tsx +29 -24
  120. package/src/components/List/List.tsx +5 -2
  121. package/src/components/List/index.ts +2 -1
  122. package/src/components/List/types.ts +5 -0
  123. package/src/components/NumberInput/NumberInput.stories.tsx +5 -1
  124. package/src/components/PhoneInput/PhoneInput.stories.tsx +2 -1
  125. package/src/components/PhoneInput/PhoneInput.tsx +5 -2
  126. package/src/components/SearchInput/SearchInput.tsx +20 -29
  127. package/src/components/Select/Select.tsx +12 -2
  128. package/src/components/Select/components/SelectList/SelectList.tsx +1 -1
  129. package/src/components/Select/index.ts +1 -1
  130. package/src/components/Status/Status.stories.tsx +54 -1
  131. package/src/components/Status/Status.styles.ts +2 -37
  132. package/src/components/Status/constants.ts +0 -10
  133. package/src/components/Status/index.ts +1 -1
  134. package/src/components/Status/types.ts +7 -3
  135. package/src/components/TextArea/TextArea.styles.ts +2 -6
  136. package/src/components/TextArea/TextArea.tsx +41 -20
  137. package/src/components/TextArea/index.ts +0 -1
  138. package/src/components/TextButton/TextButton.styles.ts +1 -0
  139. package/src/components/Tooltip/Tooltip.styles.ts +2 -0
  140. package/src/components/Tooltip/Tooltip.tsx +1 -1
  141. package/src/components/WithMessages/WithMessages.stories.tsx +1 -1
  142. package/src/components/WithPopup/WithPopup.stories.tsx +1 -0
  143. package/src/components/WithPopup/WithPopup.styles.ts +2 -0
  144. package/src/components/WithPopup/WithPopup.tsx +64 -16
  145. package/src/components/WithPopup/helpers.ts +9 -0
  146. package/src/components/WithPopup/types.ts +7 -0
  147. package/src/components/WithTooltip/WithTooltip.styles.ts +6 -0
  148. package/src/components/WithTooltip/WithTooltip.tsx +7 -2
  149. package/src/constants/phone-info.ts +20 -33
  150. package/src/helpers/phone.ts +19 -15
  151. package/src/hooks/index.ts +1 -0
  152. package/src/hooks/use-merge.ts +8 -0
  153. package/src/hooks/use-mixed-styles.ts +9 -11
  154. package/src/hooks/use-tweak-styles.ts +49 -27
  155. package/src/theme/Provider.tsx +10 -5
  156. package/src/theme/common.ts +5 -2
  157. package/src/theme/create-themed-styles.ts +78 -0
  158. package/src/theme/helpers.ts +39 -39
  159. package/src/theme/index.ts +2 -0
  160. package/src/theme/true-jss/ThemedStylesManager.ts +92 -0
  161. package/src/theme/true-jss/TweakStylesManager.ts +157 -0
  162. package/src/theme/true-jss/index.ts +2 -0
  163. package/src/theme/true-jss/jss-context.tsx +34 -0
  164. package/src/theme/types.ts +5 -3
  165. package/src/types.ts +17 -4
  166. package/dist/components/AccountInfo/AccountInfo.stories.d.ts +0 -6
  167. package/dist/components/AddButton/AddButton.stories.d.ts +0 -6
  168. package/dist/components/Button/Button.stories.d.ts +0 -6
  169. package/dist/components/Checkbox/Checkbox.stories.d.ts +0 -8
  170. package/dist/components/CloseButton/CloseButton.stories.d.ts +0 -5
  171. package/dist/components/Colors/Colors.stories.d.ts +0 -5
  172. package/dist/components/ControlWrapper/ControlWrapper.stories.d.ts +0 -6
  173. package/dist/components/DateInput/DateInput.stories.d.ts +0 -7
  174. package/dist/components/DatePicker/DatePicker.stories.d.ts +0 -7
  175. package/dist/components/Description/Description.stories.d.ts +0 -16
  176. package/dist/components/FileInput/FileInput.stories.d.ts +0 -7
  177. package/dist/components/FileItem/FileItem.stories.d.ts +0 -8
  178. package/dist/components/FiltersPane/FiltersPane.stories.d.ts +0 -31
  179. package/dist/components/Flag/Flag.stories.d.ts +0 -12
  180. package/dist/components/FlexibleTable/FlexibleTable.stories.d.ts +0 -19
  181. package/dist/components/Icon/Icon.stories.d.ts +0 -6
  182. package/dist/components/IconButton/IconButton.stories.d.ts +0 -6
  183. package/dist/components/IncrementInput/IncrementInput.stories.d.ts +0 -6
  184. package/dist/components/Input/Input.stories.d.ts +0 -25
  185. package/dist/components/List/List.stories.d.ts +0 -5
  186. package/dist/components/Modal/Modal.stories.d.ts +0 -29
  187. package/dist/components/MoreMenu/MoreMenu.stories.d.ts +0 -6
  188. package/dist/components/MultiSelect/MultiSelect.stories.d.ts +0 -13
  189. package/dist/components/NewMoreMenu/NewMoreMenu.stories.d.ts +0 -12
  190. package/dist/components/Notification/Notification.stories.d.ts +0 -8
  191. package/dist/components/NumberInput/NumberInput.stories.d.ts +0 -7
  192. package/dist/components/PhoneInput/PhoneInput.stories.d.ts +0 -28
  193. package/dist/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.stories.d.ts +0 -5
  194. package/dist/components/RadioButton/RadioButton.stories.d.ts +0 -7
  195. package/dist/components/SearchInput/SearchInput.stories.d.ts +0 -6
  196. package/dist/components/Select/CustomSelect.stories.d.ts +0 -11
  197. package/dist/components/Select/MultiSelect.stories.d.ts +0 -15
  198. package/dist/components/Select/Select.stories.d.ts +0 -15
  199. package/dist/components/Selector/Selector.stories.d.ts +0 -7
  200. package/dist/components/Skeleton/Skeleton.stories.d.ts +0 -6
  201. package/dist/components/SmartInput/SmartInput.stories.d.ts +0 -18
  202. package/dist/components/Status/Status.stories.d.ts +0 -6
  203. package/dist/components/Switch/Switch.stories.d.ts +0 -16
  204. package/dist/components/TextArea/TextArea.stories.d.ts +0 -17
  205. package/dist/components/TextArea/types.d.ts +0 -2
  206. package/dist/components/TextButton/TextButton.stories.d.ts +0 -6
  207. package/dist/components/TextWithInfo/TextWithInfo.stories.d.ts +0 -12
  208. package/dist/components/TextWithTooltip/TextWithTooltip.stories.d.ts +0 -24
  209. package/dist/components/ThemedPreloader/ThemedPreloader.stories.d.ts +0 -17
  210. package/dist/components/Toaster/Toaster.stories.d.ts +0 -5
  211. package/dist/components/Tooltip/Tooltip.stories.d.ts +0 -5
  212. package/dist/components/WithMessages/WithMessages.stories.d.ts +0 -7
  213. package/dist/components/WithPopup/WithPopup.stories.d.ts +0 -16
  214. package/dist/components/WithTooltip/WithTooltip.stories.d.ts +0 -6
  215. package/src/components/TextArea/types.ts +0 -6
@@ -1,5 +1,5 @@
1
- import { rgba } from '../../helpers';
2
1
  import { colors, createThemedStyles, ITweakStyles } from '../../theme';
2
+ import { IStatusColors } from './types';
3
3
 
4
4
  export const useStyles = createThemedStyles('Status', {
5
5
  root: {
@@ -102,42 +102,7 @@ export const useStyles = createThemedStyles('Status', {
102
102
  },
103
103
  },
104
104
 
105
- green: {
106
- '--status-background': rgba('#D4E3AC', 0.5),
107
- '--status-color': '#6F990F',
108
- },
109
-
110
- blue: {
111
- '--status-background': rgba('#AABFFC', 0.4),
112
- '--status-color': '#4C6EBF',
113
- },
114
-
115
- grey: {
116
- '--status-background': rgba('#95A0B3', 0.25),
117
- '--status-color': '#7A869A',
118
- },
119
-
120
- orange: {
121
- '--status-background': rgba('#FCD3A9', 0.5),
122
- '--status-color': '#E5741C',
123
- },
124
-
125
- red: {
126
- '--status-background': rgba('#F7949A', 0.25),
127
- '--status-color': '#F14D56',
128
- },
129
-
130
- teal: {
131
- '--status-background': rgba('#8CE3EA', 0.4),
132
- '--status-color': '#0092A6',
133
- },
134
-
135
- violet: {
136
- '--status-background': rgba('#BEABE0', 0.4),
137
- '--status-color': '#7450B2',
138
- },
139
-
140
105
  custom: {},
141
106
  });
142
107
 
143
- export type IStatusStyles = ITweakStyles<typeof useStyles>;
108
+ export type IStatusStyles = ITweakStyles<typeof useStyles, IStatusColors>;
@@ -1,11 +1 @@
1
- export const STATUS_COLORS = [
2
- 'green',
3
- 'teal',
4
- 'blue',
5
- 'grey',
6
- 'orange',
7
- 'red',
8
- 'violet',
9
- 'custom',
10
- ] as const;
11
1
  export const STATUS_SIZES = ['xs', 's', 'm'] as const;
@@ -1,3 +1,3 @@
1
1
  export * from './Status';
2
-
2
+ export * from './types';
3
3
  export type { IStatusStyles } from './Status.styles';
@@ -1,5 +1,9 @@
1
- import { STATUS_COLORS, STATUS_SIZES } from './constants';
2
-
3
- export type IStatusColor = (typeof STATUS_COLORS)[number];
1
+ import { IDefaultExtendableProps } from '../../types';
2
+ import type { STATUS_SIZES } from './constants';
4
3
 
5
4
  export type IStatusSize = (typeof STATUS_SIZES)[number];
5
+
6
+ // eslint-disable-next-line @typescript-eslint/no-empty-interface
7
+ export interface IStatusColors extends IDefaultExtendableProps {}
8
+
9
+ export type IStatusColor = keyof IStatusColors;
@@ -65,13 +65,9 @@ export const useStyles = createThemedStyles('TextArea', {
65
65
  symbolsCountError: {
66
66
  color: 'red',
67
67
  },
68
- });
69
68
 
70
- export const controlWrapperStyles: IControlWrapperStyles = {
71
- label: {
72
- top: 16,
73
- },
74
- };
69
+ withLabel: {},
70
+ });
75
71
 
76
72
  export type ITextAreaStyles = ITweakStyles<
77
73
  typeof useStyles,
@@ -1,7 +1,16 @@
1
- import { ChangeEvent, FocusEvent, FormEvent, forwardRef, useState } from 'react';
1
+ import {
2
+ ChangeEvent,
3
+ FocusEvent,
4
+ FormEvent,
5
+ forwardRef,
6
+ TextareaHTMLAttributes,
7
+ useState,
8
+ } from 'react';
2
9
  import clsx from 'clsx';
3
10
  import {
4
11
  addDataAttributes,
12
+ getTestId,
13
+ isArrayLikeNotEmpty,
5
14
  isNotEmpty,
6
15
  isReactNodeNotEmpty,
7
16
  isStringNotEmpty,
@@ -10,19 +19,19 @@ import { useTweakStyles } from '../../hooks';
10
19
  import { ICommonProps } from '../../types';
11
20
  import { ControlWrapper, IControlWrapperProps } from '../ControlWrapper';
12
21
  import { IWithMessagesProps, WithMessages } from '../WithMessages';
13
- import { ITextAreaHTMLBaseProps } from './types';
14
- import { controlWrapperStyles, ITextAreaStyles, useStyles } from './TextArea.styles';
22
+ import { ITextAreaStyles, useStyles } from './TextArea.styles';
15
23
 
16
24
  export interface ITextAreaProps
17
25
  extends ICommonProps<ITextAreaStyles>,
18
- Pick<IControlWrapperProps, 'label' | 'isInvalid' | 'isRequired' | 'isDisabled'>,
19
- Pick<IWithMessagesProps, 'infoMessage' | 'errorMessage'>,
20
- Pick<ITextAreaHTMLBaseProps, 'name' | 'maxLength' | 'rows' | 'onPaste' | 'onFocus' | 'onBlur'> {
26
+ Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'onChange'>,
27
+ Pick<
28
+ IControlWrapperProps,
29
+ 'label' | 'isInvalid' | 'isRequired' | 'isDisabled' | 'size' | 'groupPlacement'
30
+ >,
31
+ Pick<IWithMessagesProps, 'infoMessage' | 'errorMessage'> {
21
32
  value?: string;
22
33
  placeholder?: string;
23
34
  /** @default false */
24
- isDisabled?: boolean;
25
- /** @default false */
26
35
  isActive?: boolean;
27
36
  /**
28
37
  * Должна ли высота и ширина textarea подстраиваться под содержимое
@@ -46,17 +55,13 @@ export const TextArea = forwardRef<HTMLTextAreaElement, ITextAreaProps>(
46
55
  (
47
56
  {
48
57
  value = DEFAULT_VALUE,
49
- label,
50
58
  placeholder,
51
- infoMessage,
52
- errorMessage,
53
59
  name,
54
60
  shouldFocusOnMount,
55
61
  hasCounter = true,
56
62
  shouldTrimAfterMaxLength,
57
63
  isAutoSized = true,
58
64
  shouldAlwaysShowPlaceholder,
59
- isDisabled,
60
65
  isActive,
61
66
  maxLength,
62
67
  rows,
@@ -67,7 +72,17 @@ export const TextArea = forwardRef<HTMLTextAreaElement, ITextAreaProps>(
67
72
  onPaste,
68
73
  onFocus,
69
74
  onBlur,
70
- ...controlProps
75
+ // Пропсы WithMessages
76
+ infoMessage,
77
+ errorMessage,
78
+ // Пропсы ControlWrapper
79
+ label,
80
+ isDisabled,
81
+ isInvalid,
82
+ isRequired,
83
+ size,
84
+ groupPlacement,
85
+ ...textAreaProps
71
86
  },
72
87
  ref,
73
88
  ) => {
@@ -80,7 +95,6 @@ export const TextArea = forwardRef<HTMLTextAreaElement, ITextAreaProps>(
80
95
  });
81
96
 
82
97
  const tweakControlWrapperStyles = useTweakStyles({
83
- innerStyles: controlWrapperStyles,
84
98
  tweakStyles,
85
99
  className: 'tweakControlWrapper',
86
100
  currentComponentName: 'TextArea',
@@ -89,8 +103,7 @@ export const TextArea = forwardRef<HTMLTextAreaElement, ITextAreaProps>(
89
103
  const [isFocused, setFocused] = useState(false);
90
104
 
91
105
  const hasFocus = isFocused || isActive;
92
- // в hasValue нельзя использовать isStringNotEmpty из-за того что isStringNotEmpty делает trim
93
- const hasValue = value !== undefined && value !== '';
106
+ const hasValue = isArrayLikeNotEmpty(value);
94
107
  const hasLabel = isReactNodeNotEmpty(label);
95
108
  const hasPlaceholder =
96
109
  (!hasLabel || hasFocus || shouldAlwaysShowPlaceholder) && isStringNotEmpty(placeholder);
@@ -114,6 +127,7 @@ export const TextArea = forwardRef<HTMLTextAreaElement, ITextAreaProps>(
114
127
  errorMessage={errorMessage}
115
128
  infoMessage={infoMessage}
116
129
  tweakStyles={tweakWithMessagesStyles}
130
+ testId={getTestId(testId, 'wrapper')}
117
131
  >
118
132
  <ControlWrapper
119
133
  label={label}
@@ -121,12 +135,17 @@ export const TextArea = forwardRef<HTMLTextAreaElement, ITextAreaProps>(
121
135
  isFocused={hasFocus}
122
136
  isDisabled={isDisabled}
123
137
  hasValue={hasValue}
138
+ isInvalid={isInvalid}
139
+ isRequired={isRequired}
140
+ groupPlacement={groupPlacement}
141
+ size={size}
124
142
  isFullWidth
125
- testId={testId}
126
- {...controlProps}
127
143
  >
128
144
  <div
129
- className={clsx(classes.wrapper, { [classes.autoSized]: isAutoSized })}
145
+ className={clsx(classes.wrapper, {
146
+ [classes.autoSized]: isAutoSized,
147
+ [classes.withLabel]: hasLabel,
148
+ })}
130
149
  {...(isAutoSized && { 'data-value': value })}
131
150
  >
132
151
  <textarea
@@ -142,7 +161,9 @@ export const TextArea = forwardRef<HTMLTextAreaElement, ITextAreaProps>(
142
161
  onFocus={handleFocus}
143
162
  onBlur={handleBlur}
144
163
  onChange={handleChange}
145
- {...addDataAttributes(data, testId, 'control')}
164
+ autoFocus={shouldFocusOnMount}
165
+ {...addDataAttributes(data, testId)}
166
+ {...textAreaProps}
146
167
  />
147
168
  </div>
148
169
  </ControlWrapper>
@@ -1,3 +1,2 @@
1
1
  export * from './TextArea';
2
- export * from './types';
3
2
  export type { ITextAreaStyles } from './TextArea.styles';
@@ -7,6 +7,7 @@ export const useStyles = createThemedStyles('TextButton', {
7
7
  alignItems: 'center',
8
8
  height: 24,
9
9
  padding: 0,
10
+ position: 'relative',
10
11
  background: 'transparent',
11
12
  border: 'none',
12
13
  borderRadius: 0,
@@ -32,6 +32,8 @@ export const useStyles = createThemedStyles('Tooltip', {
32
32
  letterSpacing: 0.2,
33
33
  },
34
34
 
35
+ custom: {},
36
+
35
37
  info: {},
36
38
 
37
39
  error: {
@@ -8,7 +8,7 @@ import { useStyles, ITooltipStyles } from './Tooltip.styles';
8
8
  export interface ITooltipProps extends ICommonProps<ITooltipStyles> {
9
9
  text: ReactNode;
10
10
  /** @default 'tooltip' */
11
- view?: 'tooltip' | 'hint';
11
+ view?: 'tooltip' | 'hint' | 'custom';
12
12
  /** @default 'info' */
13
13
  type?: 'info' | 'error';
14
14
  }
@@ -4,7 +4,7 @@ import { IInputProps, Input } from '../Input';
4
4
  import { WithMessages } from './WithMessages';
5
5
 
6
6
  export default {
7
- title: 'WithMessages',
7
+ title: 'Data Display/WithMessages',
8
8
  component: WithMessages,
9
9
  };
10
10
 
@@ -91,6 +91,7 @@ Default.args = {
91
91
  shouldRenderInBody: true,
92
92
  shouldHideOnScroll: false,
93
93
  shouldStopPropagation: true,
94
+ shouldShowArrow: false,
94
95
  };
95
96
 
96
97
  Default.parameters = {
@@ -20,6 +20,8 @@ export const useStyles = createThemedStyles('WithPopup', {
20
20
  outline: 'none',
21
21
  },
22
22
 
23
+ arrow: {},
24
+
23
25
  animationEnd: {},
24
26
 
25
27
  animationStart: {},
@@ -1,7 +1,6 @@
1
- import { FC, useState } from 'react';
1
+ import { FC, useRef, useState } from 'react';
2
2
  import clsx from 'clsx';
3
3
  import {
4
- addDataTestId,
5
4
  applyAction,
6
5
  stopPropagation,
7
6
  addDataAttributes,
@@ -23,10 +22,18 @@ import {
23
22
  UseHoverProps,
24
23
  safePolygon,
25
24
  useFocus,
25
+ FloatingArrow,
26
+ arrow,
27
+ UseClickProps,
28
+ UseFocusProps,
29
+ UseDismissProps,
30
+ UseTransitionStatusProps,
26
31
  } from '@floating-ui/react';
27
- import { ICommonProps, IRenderNode } from '../../types';
32
+ import { ICommonProps, IDataAttributes, IRenderNode } from '../../types';
28
33
  import { DEFAULT_OFFSET } from './constants';
34
+ import { minWidthRelativeToTrigger } from './helpers';
29
35
  import {
36
+ IPopupArrowProps,
30
37
  IPopupEventType,
31
38
  IReferenceProps,
32
39
  IWithPopupChildrenProps,
@@ -43,11 +50,16 @@ export interface IWithPopupProps extends ICommonProps<IWithPopupStyles> {
43
50
  placement?: Placement;
44
51
  /** @default 'click' */
45
52
  eventType?: IPopupEventType;
46
- /** @default 0 */
47
- hoverDelay?: UseHoverProps['delay'];
53
+ /**
54
+ * @deprecated Используйте hoverOptions
55
+ * @default 0
56
+ */
57
+ hoverDelay?: number;
48
58
  /** @default 6 */
49
59
  popupOffset?: OffsetOptions;
50
- /** @default true */
60
+ arrowProps?: IPopupArrowProps;
61
+ popupData?: IDataAttributes;
62
+ /** @default true, if eventType === click */
51
63
  shouldStopPropagation?: boolean;
52
64
  /** @default false */
53
65
  shouldHideOnScroll?: boolean;
@@ -60,6 +72,16 @@ export interface IWithPopupProps extends ICommonProps<IWithPopupStyles> {
60
72
  canBeFlipped?: boolean;
61
73
  /** @default false */
62
74
  isDisabled?: boolean;
75
+ /** @default false */
76
+ shouldShowArrow?: boolean;
77
+ /** Должна ли минимальная ширина попапа быть равна ширине триггера
78
+ * @default false */
79
+ isMinWidthSameAsTrigger?: boolean;
80
+ hoverOptions?: UseHoverProps;
81
+ clickOptions?: UseClickProps;
82
+ focusOptions?: UseFocusProps;
83
+ dismissOptions?: UseDismissProps;
84
+ transitionOptions?: UseTransitionStatusProps;
63
85
  onToggle?: (isActive: boolean, event?: IWithPopupToggleEvent) => void;
64
86
  }
65
87
 
@@ -71,12 +93,21 @@ export const WithPopup: FC<IWithPopupProps> = ({
71
93
  placement = eventType === 'click' ? 'bottom-end' : 'top',
72
94
  hoverDelay = 0,
73
95
  popupOffset = DEFAULT_OFFSET,
74
- shouldStopPropagation = true,
96
+ arrowProps,
97
+ popupData,
98
+ shouldStopPropagation = eventType === 'click',
75
99
  shouldHideOnScroll = false,
76
100
  shouldRenderInBody = true,
77
101
  canBeFlipped = true,
78
102
  isTriggerWrapped = eventType === 'hover',
79
103
  isDisabled = false,
104
+ shouldShowArrow = false,
105
+ isMinWidthSameAsTrigger = false,
106
+ hoverOptions,
107
+ clickOptions,
108
+ focusOptions,
109
+ dismissOptions,
110
+ transitionOptions,
80
111
  tweakStyles,
81
112
  data,
82
113
  testId,
@@ -86,6 +117,8 @@ export const WithPopup: FC<IWithPopupProps> = ({
86
117
 
87
118
  const [isOpen, setIsOpen] = useState(false);
88
119
 
120
+ const arrowRef = useRef<SVGSVGElement>(null);
121
+
89
122
  const handleToggle = (isActive: boolean, event?: IWithPopupToggleEvent) => {
90
123
  event?.stopPropagation();
91
124
  if (!isDisabled) {
@@ -103,7 +136,9 @@ export const WithPopup: FC<IWithPopupProps> = ({
103
136
  middleware: [
104
137
  offset(popupOffset),
105
138
  canBeFlipped && flip({ fallbackAxisSideDirection: 'start' }),
139
+ isMinWidthSameAsTrigger && minWidthRelativeToTrigger,
106
140
  ...middlewares,
141
+ shouldShowArrow && arrow({ element: arrowRef }),
107
142
  ],
108
143
  whileElementsMounted: autoUpdate,
109
144
  placement,
@@ -112,22 +147,27 @@ export const WithPopup: FC<IWithPopupProps> = ({
112
147
 
113
148
  const hover = useHover(context, {
114
149
  enabled: eventType === 'hover',
115
- delay: typeof hoverDelay === 'number' ? { open: hoverDelay, close: 0 } : hoverDelay,
150
+ delay: { open: hoverDelay, close: 0 },
116
151
  handleClose: safePolygon(),
152
+ ...hoverOptions,
117
153
  });
118
154
 
119
- const focus = useFocus(context, { enabled: eventType === 'hover' });
155
+ const focus = useFocus(context, { enabled: eventType === 'hover', ...focusOptions });
120
156
 
121
- const click = useClick(context, { enabled: eventType === 'click' });
157
+ const click = useClick(context, { enabled: eventType === 'click', ...clickOptions });
122
158
 
123
159
  const dismiss = useDismiss(context, {
124
160
  enabled: eventType === 'click',
125
161
  ancestorScroll: shouldHideOnScroll,
162
+ ...dismissOptions,
126
163
  });
127
164
 
128
165
  const { getFloatingProps, getReferenceProps } = useInteractions([hover, click, focus, dismiss]);
129
166
 
130
- const { isMounted, status } = useTransitionStatus(context, { duration: { close: 500 } });
167
+ const { isMounted, status } = useTransitionStatus(context, {
168
+ duration: { close: 500 },
169
+ ...transitionOptions,
170
+ });
131
171
 
132
172
  const referenceProps: IReferenceProps = getReferenceProps({
133
173
  ref: refs.setReference,
@@ -155,8 +195,7 @@ export const WithPopup: FC<IWithPopupProps> = ({
155
195
  [classes.active]: isOpen,
156
196
  })}
157
197
  {...referenceProps}
158
- {...addDataTestId(testId)}
159
- {...addDataAttributes(data)}
198
+ {...addDataAttributes(data, testId)}
160
199
  >
161
200
  {triggerElement}
162
201
  </div>
@@ -165,16 +204,25 @@ export const WithPopup: FC<IWithPopupProps> = ({
165
204
  )}
166
205
  {isMounted && (
167
206
  <FloatingPortal
168
- root={!shouldRenderInBody ? (refs.reference.current as HTMLDivElement) : undefined}
207
+ root={shouldRenderInBody ? document.body : (refs.reference.current as HTMLElement)}
169
208
  >
170
209
  <div
210
+ ref={refs.setFloating}
171
211
  style={floatingStyles}
172
212
  className={classes.popup}
173
- ref={refs.setFloating}
174
213
  {...getFloatingProps()}
214
+ {...addDataAttributes(popupData, testId, 'popup')}
175
215
  >
176
216
  <div className={classes[`dropdown-${status}`]}>
177
- {applyAction(children, { onClose: handleClose })}
217
+ {shouldShowArrow && (
218
+ <FloatingArrow
219
+ {...arrowProps}
220
+ ref={arrowRef}
221
+ context={context}
222
+ className={classes.arrow}
223
+ />
224
+ )}
225
+ {applyAction(children, { floatingContext: context, onClose: handleClose })}
178
226
  </div>
179
227
  </div>
180
228
  </FloatingPortal>
@@ -0,0 +1,9 @@
1
+ import { Middleware, size } from '@floating-ui/react';
2
+
3
+ export const minWidthRelativeToTrigger: Middleware = size({
4
+ apply({ rects, elements }) {
5
+ Object.assign(elements.floating.style, {
6
+ minWidth: `${rects.reference.width}px`,
7
+ });
8
+ },
9
+ });
@@ -1,4 +1,5 @@
1
1
  import type { MouseEvent, KeyboardEvent } from 'react';
2
+ import type { FloatingArrowProps, UseFloatingReturn } from '@floating-ui/react';
2
3
  import type { IDataAttributesProps, IDomElementInteractions } from '../../types';
3
4
  import type { POPUP_EVENT_TYPES } from './constants';
4
5
 
@@ -21,5 +22,11 @@ export interface IWithPopupTriggerProps {
21
22
  }
22
23
 
23
24
  export interface IWithPopupChildrenProps {
25
+ floatingContext: UseFloatingReturn['context'];
24
26
  onClose: (event?: IWithPopupToggleEvent) => void;
25
27
  }
28
+
29
+ export type IPopupArrowProps = Pick<
30
+ FloatingArrowProps,
31
+ 'width' | 'height' | 'tipRadius' | 'staticOffset' | 'd' | 'stroke' | 'strokeWidth'
32
+ >;
@@ -1,6 +1,12 @@
1
1
  import { ITooltipStyles } from '../Tooltip';
2
2
  import { IWithPopupStyles } from '../WithPopup';
3
3
 
4
+ export const withPopupStyles: IWithPopupStyles = {
5
+ popup: {
6
+ zIndex: 9999,
7
+ },
8
+ };
9
+
4
10
  export interface IWithTooltipStyles {
5
11
  tweakWithPopup?: IWithPopupStyles;
6
12
  tweakTooltip?: ITooltipStyles;
@@ -4,7 +4,7 @@ import { useTweakStyles } from '../../hooks';
4
4
  import { ICommonProps } from '../../types';
5
5
  import { ITooltipProps, Tooltip } from '../Tooltip';
6
6
  import { IWithPopupProps, WithPopup } from '../WithPopup';
7
- import { IWithTooltipStyles } from './WithTooltip.styles';
7
+ import { IWithTooltipStyles, withPopupStyles } from './WithTooltip.styles';
8
8
 
9
9
  export interface IWithTooltipProps
10
10
  extends Omit<
@@ -32,17 +32,21 @@ export const WithTooltip: FC<IWithTooltipProps> = ({
32
32
  tooltipView = 'tooltip',
33
33
  tooltipType = 'info',
34
34
  isDisabled = false,
35
+ popupData,
35
36
  tweakStyles,
36
37
  ...restProps
37
38
  }) => {
38
39
  const tweakWithPopupStyles = useTweakStyles({
40
+ innerStyles: withPopupStyles,
39
41
  tweakStyles,
40
42
  className: 'tweakWithPopup',
43
+ currentComponentName: 'WithTooltip',
41
44
  });
42
45
 
43
46
  const tweakTooltipStyles = useTweakStyles({
44
47
  tweakStyles,
45
48
  className: 'tweakTooltip',
49
+ currentComponentName: 'WithTooltip',
46
50
  });
47
51
 
48
52
  return (
@@ -50,8 +54,9 @@ export const WithTooltip: FC<IWithTooltipProps> = ({
50
54
  trigger={children}
51
55
  placement={placement}
52
56
  eventType={eventType}
53
- isTriggerWrapped
57
+ popupData={{ ...popupData, tooltipView }}
54
58
  isDisabled={isDisabled || !isReactNodeNotEmpty(tooltipText)}
59
+ isTriggerWrapped
55
60
  tweakStyles={tweakWithPopupStyles}
56
61
  {...restProps}
57
62
  >
@@ -1,6 +1,15 @@
1
1
  import type { IPhoneInfo } from '../components';
2
2
 
3
3
  export const phoneInfo: IPhoneInfo[] = [
4
+ {
5
+ countryEn: 'Abkhazia',
6
+ countryRu: 'Абхазия',
7
+ countryCode: 'AB',
8
+ phoneMask: '(999) 999-99-99',
9
+ dialCode: '7',
10
+ dialCodePriority: 1,
11
+ fullCodes: ['7'],
12
+ },
4
13
  {
5
14
  countryEn: 'Afghanistan',
6
15
  countryRu: 'Афганистан',
@@ -785,40 +794,9 @@ export const phoneInfo: IPhoneInfo[] = [
785
794
  countryRu: 'Казахстан',
786
795
  countryCode: 'KZ',
787
796
  dialCode: '7',
788
- phoneMask: '999 999-99-99',
797
+ phoneMask: '(999) 999-99-99',
789
798
  dialCodePriority: 1,
790
- areaCodes: [
791
- '310',
792
- '311',
793
- '312',
794
- '313',
795
- '315',
796
- '318',
797
- '321',
798
- '324',
799
- '325',
800
- '326',
801
- '327',
802
- '336',
803
- '7172',
804
- '73622',
805
- ],
806
- fullCodes: [
807
- '7310',
808
- '7311',
809
- '7312',
810
- '7313',
811
- '7315',
812
- '7318',
813
- '7321',
814
- '7324',
815
- '7325',
816
- '7326',
817
- '7327',
818
- '7336',
819
- '77172',
820
- '773622',
821
- ],
799
+ fullCodes: ['7'],
822
800
  },
823
801
  {
824
802
  countryEn: 'Kenya',
@@ -1404,6 +1382,15 @@ export const phoneInfo: IPhoneInfo[] = [
1404
1382
  phoneMask: '999 9999 9999',
1405
1383
  fullCodes: ['82'],
1406
1384
  },
1385
+ {
1386
+ countryCode: 'OS',
1387
+ countryEn: 'South Ossetia',
1388
+ countryRu: 'Южная Осетия',
1389
+ phoneMask: '(999) 999-99-99',
1390
+ dialCode: '7',
1391
+ dialCodePriority: 1,
1392
+ fullCodes: ['7'],
1393
+ },
1407
1394
  {
1408
1395
  countryEn: 'South Sudan',
1409
1396
  countryRu: 'Южный Судан',