@cdek-it/react-native-ui-kit 0.2.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 (261) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +151 -0
  3. package/dist/components/Accordion/Accordion.d.ts +39 -0
  4. package/dist/components/Accordion/Accordion.js +103 -0
  5. package/dist/components/Accordion/index.d.ts +1 -0
  6. package/dist/components/Accordion/index.js +1 -0
  7. package/dist/components/Avatar/Avatar.d.ts +96 -0
  8. package/dist/components/Avatar/Avatar.js +121 -0
  9. package/dist/components/Avatar/index.d.ts +1 -0
  10. package/dist/components/Avatar/index.js +1 -0
  11. package/dist/components/Badge/Badge.d.ts +35 -0
  12. package/dist/components/Badge/Badge.js +74 -0
  13. package/dist/components/Badge/index.d.ts +1 -0
  14. package/dist/components/Badge/index.js +1 -0
  15. package/dist/components/Button/BaseButton.d.ts +5 -0
  16. package/dist/components/Button/BaseButton.js +62 -0
  17. package/dist/components/Button/Button.d.ts +16 -0
  18. package/dist/components/Button/Button.js +21 -0
  19. package/dist/components/Button/ButtonBadge.d.ts +21 -0
  20. package/dist/components/Button/ButtonBadge.js +53 -0
  21. package/dist/components/Button/ButtonSeverity.d.ts +17 -0
  22. package/dist/components/Button/ButtonSeverity.js +22 -0
  23. package/dist/components/Button/index.d.ts +4 -0
  24. package/dist/components/Button/index.js +3 -0
  25. package/dist/components/Button/styles/index.d.ts +2 -0
  26. package/dist/components/Button/styles/index.js +2 -0
  27. package/dist/components/Button/styles/useBasicButtonStyles.d.ts +98 -0
  28. package/dist/components/Button/styles/useBasicButtonStyles.js +81 -0
  29. package/dist/components/Button/styles/useDangerButtonStyles.d.ts +63 -0
  30. package/dist/components/Button/styles/useDangerButtonStyles.js +57 -0
  31. package/dist/components/Button/styles/useInfoButtonStyles.d.ts +63 -0
  32. package/dist/components/Button/styles/useInfoButtonStyles.js +56 -0
  33. package/dist/components/Button/styles/useSeverityButtonStyles.d.ts +64 -0
  34. package/dist/components/Button/styles/useSeverityButtonStyles.js +29 -0
  35. package/dist/components/Button/styles/useSuccessButtonStyles.d.ts +63 -0
  36. package/dist/components/Button/styles/useSuccessButtonStyles.js +61 -0
  37. package/dist/components/Button/styles/useWarningButtonStyles.d.ts +63 -0
  38. package/dist/components/Button/styles/useWarningButtonStyles.js +61 -0
  39. package/dist/components/Button/types.d.ts +107 -0
  40. package/dist/components/Button/types.js +0 -0
  41. package/dist/components/Button/utils/ButtonActivityIndicator.d.ts +3 -0
  42. package/dist/components/Button/utils/ButtonActivityIndicator.js +17 -0
  43. package/dist/components/Button/utils/ButtonContainer.d.ts +7 -0
  44. package/dist/components/Button/utils/ButtonContainer.js +10 -0
  45. package/dist/components/Button/utils/ButtonIcon.d.ts +4 -0
  46. package/dist/components/Button/utils/ButtonIcon.js +11 -0
  47. package/dist/components/Button/utils/ButtonLabel.d.ts +4 -0
  48. package/dist/components/Button/utils/ButtonLabel.js +13 -0
  49. package/dist/components/Button/utils/ButtonLeftArea.d.ts +4 -0
  50. package/dist/components/Button/utils/ButtonLeftArea.js +13 -0
  51. package/dist/components/Button/utils/ButtonRightArea.d.ts +3 -0
  52. package/dist/components/Button/utils/ButtonRightArea.js +13 -0
  53. package/dist/components/Button/utils/index.d.ts +4 -0
  54. package/dist/components/Button/utils/index.js +4 -0
  55. package/dist/components/Button/utils/useButtonContainerCallbackStyle.d.ts +3 -0
  56. package/dist/components/Button/utils/useButtonContainerCallbackStyle.js +141 -0
  57. package/dist/components/Button/utils/useButtonLabelStyle.d.ts +3 -0
  58. package/dist/components/Button/utils/useButtonLabelStyle.js +40 -0
  59. package/dist/components/Button/utils/useIconStyle.d.ts +7 -0
  60. package/dist/components/Button/utils/useIconStyle.js +35 -0
  61. package/dist/components/Button/utils/useTypeBasedStyle.d.ts +2 -0
  62. package/dist/components/Button/utils/useTypeBasedStyle.js +4 -0
  63. package/dist/components/Checkbox/Checkbox.d.ts +31 -0
  64. package/dist/components/Checkbox/Checkbox.js +55 -0
  65. package/dist/components/Checkbox/hooks/usePressableStyles.d.ts +15 -0
  66. package/dist/components/Checkbox/hooks/usePressableStyles.js +91 -0
  67. package/dist/components/Checkbox/index.d.ts +1 -0
  68. package/dist/components/Checkbox/index.js +1 -0
  69. package/dist/components/Chip/Chip.d.ts +30 -0
  70. package/dist/components/Chip/Chip.js +70 -0
  71. package/dist/components/Chip/index.d.ts +1 -0
  72. package/dist/components/Chip/index.js +1 -0
  73. package/dist/components/Dialog/Dialog.d.ts +14 -0
  74. package/dist/components/Dialog/Dialog.js +96 -0
  75. package/dist/components/Dialog/DialogComponent.d.ts +7 -0
  76. package/dist/components/Dialog/DialogComponent.js +34 -0
  77. package/dist/components/Dialog/DialogHeader.d.ts +12 -0
  78. package/dist/components/Dialog/DialogHeader.js +68 -0
  79. package/dist/components/Dialog/index.d.ts +3 -0
  80. package/dist/components/Dialog/index.js +3 -0
  81. package/dist/components/Divider/Divider.d.ts +42 -0
  82. package/dist/components/Divider/Divider.js +95 -0
  83. package/dist/components/Divider/index.d.ts +1 -0
  84. package/dist/components/Divider/index.js +1 -0
  85. package/dist/components/Input/FloatLabel.d.ts +22 -0
  86. package/dist/components/Input/FloatLabel.js +19 -0
  87. package/dist/components/Input/InputGroup.d.ts +21 -0
  88. package/dist/components/Input/InputGroup.js +52 -0
  89. package/dist/components/Input/InputGroupAddon.d.ts +17 -0
  90. package/dist/components/Input/InputGroupAddon.js +57 -0
  91. package/dist/components/Input/InputSwitch/InputSwitch.d.ts +8 -0
  92. package/dist/components/Input/InputSwitch/InputSwitch.js +16 -0
  93. package/dist/components/Input/InputSwitch/index.d.ts +1 -0
  94. package/dist/components/Input/InputSwitch/index.js +1 -0
  95. package/dist/components/Input/InputSwitch/styles/index.d.ts +2 -0
  96. package/dist/components/Input/InputSwitch/styles/index.js +2 -0
  97. package/dist/components/Input/InputSwitch/styles/useHandleStyles.d.ts +13 -0
  98. package/dist/components/Input/InputSwitch/styles/useHandleStyles.js +47 -0
  99. package/dist/components/Input/InputSwitch/styles/useSliderStyles.d.ts +17 -0
  100. package/dist/components/Input/InputSwitch/styles/useSliderStyles.js +95 -0
  101. package/dist/components/Input/InputText.d.ts +13 -0
  102. package/dist/components/Input/InputText.js +14 -0
  103. package/dist/components/Input/InputTextBase/InputTextBase.d.ts +13 -0
  104. package/dist/components/Input/InputTextBase/InputTextBase.js +124 -0
  105. package/dist/components/Input/InputTextBase/testIds.d.ts +11 -0
  106. package/dist/components/Input/InputTextBase/testIds.js +11 -0
  107. package/dist/components/Input/InputTextBase/types.d.ts +41 -0
  108. package/dist/components/Input/InputTextBase/types.js +0 -0
  109. package/dist/components/Input/InputTextBase/useStyles.d.ts +86 -0
  110. package/dist/components/Input/InputTextBase/useStyles.js +78 -0
  111. package/dist/components/Input/index.d.ts +5 -0
  112. package/dist/components/Input/index.js +4 -0
  113. package/dist/components/List/Base/ListBase.d.ts +32 -0
  114. package/dist/components/List/Base/ListBase.js +88 -0
  115. package/dist/components/List/Base/index.d.ts +1 -0
  116. package/dist/components/List/Base/index.js +1 -0
  117. package/dist/components/MenuItem/MenuItemAccessory.d.ts +11 -0
  118. package/dist/components/MenuItem/MenuItemAccessory.js +23 -0
  119. package/dist/components/MenuItem/MenuItemIcon.d.ts +36 -0
  120. package/dist/components/MenuItem/MenuItemIcon.js +33 -0
  121. package/dist/components/MenuItem/Template/MenuItemTemplate.d.ts +42 -0
  122. package/dist/components/MenuItem/Template/MenuItemTemplate.js +79 -0
  123. package/dist/components/MenuItem/index.d.ts +1 -0
  124. package/dist/components/MenuItem/index.js +1 -0
  125. package/dist/components/Message/Message.d.ts +65 -0
  126. package/dist/components/Message/Message.js +126 -0
  127. package/dist/components/Message/index.d.ts +1 -0
  128. package/dist/components/Message/index.js +1 -0
  129. package/dist/components/ProgressBar/ProgressBar.d.ts +33 -0
  130. package/dist/components/ProgressBar/ProgressBar.js +62 -0
  131. package/dist/components/ProgressBar/index.d.ts +1 -0
  132. package/dist/components/ProgressBar/index.js +1 -0
  133. package/dist/components/ProgressSpinner/ProgressSpinner.d.ts +17 -0
  134. package/dist/components/ProgressSpinner/ProgressSpinner.js +68 -0
  135. package/dist/components/ProgressSpinner/index.d.ts +1 -0
  136. package/dist/components/ProgressSpinner/index.js +1 -0
  137. package/dist/components/RadioButton/RadioButton.d.ts +18 -0
  138. package/dist/components/RadioButton/RadioButton.js +134 -0
  139. package/dist/components/RadioButton/index.d.ts +1 -0
  140. package/dist/components/RadioButton/index.js +1 -0
  141. package/dist/components/Rating/Rating.d.ts +48 -0
  142. package/dist/components/Rating/Rating.js +37 -0
  143. package/dist/components/Rating/RatingClear.d.ts +14 -0
  144. package/dist/components/Rating/RatingClear.js +28 -0
  145. package/dist/components/Rating/RatingItem.d.ts +19 -0
  146. package/dist/components/Rating/RatingItem.js +44 -0
  147. package/dist/components/Rating/RatingItemContainer.d.ts +37 -0
  148. package/dist/components/Rating/RatingItemContainer.js +30 -0
  149. package/dist/components/Rating/index.d.ts +1 -0
  150. package/dist/components/Rating/index.js +1 -0
  151. package/dist/components/SelectButton/SelectButton.d.ts +32 -0
  152. package/dist/components/SelectButton/SelectButton.js +75 -0
  153. package/dist/components/SelectButton/SelectButtonItem.d.ts +35 -0
  154. package/dist/components/SelectButton/SelectButtonItem.js +133 -0
  155. package/dist/components/SelectButton/index.d.ts +1 -0
  156. package/dist/components/SelectButton/index.js +1 -0
  157. package/dist/components/Skeleton/Skeleton.d.ts +15 -0
  158. package/dist/components/Skeleton/Skeleton.js +53 -0
  159. package/dist/components/Skeleton/index.d.ts +1 -0
  160. package/dist/components/Skeleton/index.js +1 -0
  161. package/dist/components/Slider/Slider.d.ts +36 -0
  162. package/dist/components/Slider/Slider.js +153 -0
  163. package/dist/components/Slider/index.d.ts +1 -0
  164. package/dist/components/Slider/index.js +1 -0
  165. package/dist/components/Tabs/TabItem/TabItem.d.ts +24 -0
  166. package/dist/components/Tabs/TabItem/TabItem.js +82 -0
  167. package/dist/components/Tabs/TabItem/index.d.ts +1 -0
  168. package/dist/components/Tabs/TabItem/index.js +1 -0
  169. package/dist/components/Tabs/TabPanel/TabPanel.d.ts +9 -0
  170. package/dist/components/Tabs/TabPanel/TabPanel.js +11 -0
  171. package/dist/components/Tabs/TabPanel/index.d.ts +1 -0
  172. package/dist/components/Tabs/TabPanel/index.js +1 -0
  173. package/dist/components/Tabs/Tabs.d.ts +15 -0
  174. package/dist/components/Tabs/Tabs.js +48 -0
  175. package/dist/components/Tabs/index.d.ts +2 -0
  176. package/dist/components/Tabs/index.js +2 -0
  177. package/dist/components/Tag/Tag.d.ts +33 -0
  178. package/dist/components/Tag/Tag.js +71 -0
  179. package/dist/components/Tag/index.d.ts +1 -0
  180. package/dist/components/Tag/index.js +1 -0
  181. package/dist/components/Timer/Timer.d.ts +18 -0
  182. package/dist/components/Timer/Timer.js +74 -0
  183. package/dist/components/Timer/TimerFlip.d.ts +7 -0
  184. package/dist/components/Timer/TimerFlip.js +69 -0
  185. package/dist/components/Timer/constants.d.ts +1 -0
  186. package/dist/components/Timer/constants.js +1 -0
  187. package/dist/components/ToggleButton/ToggleButton.d.ts +45 -0
  188. package/dist/components/ToggleButton/ToggleButton.js +85 -0
  189. package/dist/components/ToggleButton/hooks/useIconSize.d.ts +14 -0
  190. package/dist/components/ToggleButton/hooks/useIconSize.js +26 -0
  191. package/dist/components/ToggleButton/hooks/useLabelSize.d.ts +8 -0
  192. package/dist/components/ToggleButton/hooks/useLabelSize.js +19 -0
  193. package/dist/components/ToggleButton/hooks/useStateStyles.d.ts +11 -0
  194. package/dist/components/ToggleButton/hooks/useStateStyles.js +92 -0
  195. package/dist/components/ToggleButton/index.d.ts +1 -0
  196. package/dist/components/ToggleButton/index.js +1 -0
  197. package/dist/components/Typography/Anchor.d.ts +31 -0
  198. package/dist/components/Typography/Anchor.js +75 -0
  199. package/dist/components/Typography/Body.d.ts +9 -0
  200. package/dist/components/Typography/Body.js +32 -0
  201. package/dist/components/Typography/Caption.d.ts +9 -0
  202. package/dist/components/Typography/Caption.js +38 -0
  203. package/dist/components/Typography/Service.d.ts +25 -0
  204. package/dist/components/Typography/Service.js +63 -0
  205. package/dist/components/Typography/Subtitle.d.ts +18 -0
  206. package/dist/components/Typography/Subtitle.js +23 -0
  207. package/dist/components/Typography/Title.d.ts +5 -0
  208. package/dist/components/Typography/Title.js +24 -0
  209. package/dist/components/Typography/index.d.ts +6 -0
  210. package/dist/components/Typography/index.js +6 -0
  211. package/dist/components/index.d.ts +23 -0
  212. package/dist/components/index.js +23 -0
  213. package/dist/hooks/useChangeTheme.d.ts +1 -0
  214. package/dist/hooks/useChangeTheme.js +5 -0
  215. package/dist/hooks/useFonts.d.ts +1 -0
  216. package/dist/hooks/useFonts.js +5 -0
  217. package/dist/hooks/useLoadingRotationAnimation.d.ts +5 -0
  218. package/dist/hooks/useLoadingRotationAnimation.js +19 -0
  219. package/dist/hooks/useMakeTestId.d.ts +3 -0
  220. package/dist/hooks/useMakeTestId.js +7 -0
  221. package/dist/hooks/useTheme.d.ts +1 -0
  222. package/dist/hooks/useTheme.js +5 -0
  223. package/dist/index.d.ts +6 -0
  224. package/dist/index.js +6 -0
  225. package/dist/theme/ThemeContext.d.ts +15 -0
  226. package/dist/theme/ThemeContext.js +20 -0
  227. package/dist/theme/assets/background.json +149 -0
  228. package/dist/theme/assets/border.json +103 -0
  229. package/dist/theme/assets/customCommon.d.ts +4 -0
  230. package/dist/theme/assets/customCommon.js +4 -0
  231. package/dist/theme/assets/customDark.d.ts +5 -0
  232. package/dist/theme/assets/customDark.js +15 -0
  233. package/dist/theme/assets/customLight.d.ts +15 -0
  234. package/dist/theme/assets/customLight.js +15 -0
  235. package/dist/theme/assets/effects.json +15 -0
  236. package/dist/theme/assets/global.json +114 -0
  237. package/dist/theme/assets/primaryColors.json +14 -0
  238. package/dist/theme/assets/shadow.d.ts +6 -0
  239. package/dist/theme/assets/shadow.js +6 -0
  240. package/dist/theme/assets/sizing.json +78 -0
  241. package/dist/theme/assets/spacing.json +48 -0
  242. package/dist/theme/assets/themeDark.json +1141 -0
  243. package/dist/theme/assets/themeLight.json +1141 -0
  244. package/dist/theme/assets/typography.json +45 -0
  245. package/dist/theme/commonTheme.d.ts +582 -0
  246. package/dist/theme/commonTheme.js +22 -0
  247. package/dist/theme/darkTheme.d.ts +2 -0
  248. package/dist/theme/darkTheme.js +7 -0
  249. package/dist/theme/index.d.ts +4 -0
  250. package/dist/theme/index.js +4 -0
  251. package/dist/theme/lightTheme.d.ts +2 -0
  252. package/dist/theme/lightTheme.js +7 -0
  253. package/dist/theme/types.d.ts +40 -0
  254. package/dist/theme/types.js +5 -0
  255. package/dist/utils/SvgUniversal.d.ts +29 -0
  256. package/dist/utils/SvgUniversal.js +28 -0
  257. package/dist/utils/genericMemo.d.ts +1 -0
  258. package/dist/utils/genericMemo.js +2 -0
  259. package/dist/utils/makeStyles.d.ts +11 -0
  260. package/dist/utils/makeStyles.js +19 -0
  261. package/package.json +159 -0
@@ -0,0 +1,133 @@
1
+ import { memo, useMemo, useState } from 'react';
2
+ import { TouchableOpacity } from 'react-native';
3
+ import Animated, { interpolateColor, runOnJS, useAnimatedReaction, useAnimatedStyle, } from 'react-native-reanimated';
4
+ import { SvgUniversal } from '../../utils/SvgUniversal';
5
+ import { makeStyles } from '../../utils/makeStyles';
6
+ /**
7
+ * Дочерний элемент компонента SelectButton. Не используется отдельно от SelectButton.
8
+ * @see https://www.figma.com/design/4TYeki0MDLhfPGJstbIicf/UI-kit-PrimeFace-(DS)?node-id=481-4393
9
+ */
10
+ export const SelectButtonItem = memo(({ index, position, onPress, disabled, label, onLayout, size = 'base', showIcon = true, Icon, }) => {
11
+ const styles = useStyles();
12
+ const iconSize = useMemo(() => {
13
+ switch (size) {
14
+ case 'small':
15
+ return styles.iconSmall;
16
+ case 'base':
17
+ return styles.iconBase;
18
+ case 'large':
19
+ return styles.iconLarge;
20
+ case 'xlarge':
21
+ return styles.iconXLarge;
22
+ }
23
+ }, [
24
+ size,
25
+ styles.iconBase,
26
+ styles.iconLarge,
27
+ styles.iconSmall,
28
+ styles.iconXLarge,
29
+ ]);
30
+ const labelFontSize = useMemo(() => {
31
+ switch (size) {
32
+ case 'small':
33
+ return styles.labelSmall;
34
+ case 'base':
35
+ return styles.labelBase;
36
+ case 'large':
37
+ return styles.labelLarge;
38
+ case 'xlarge':
39
+ return styles.labelXLarge;
40
+ }
41
+ }, [
42
+ size,
43
+ styles.labelBase,
44
+ styles.labelLarge,
45
+ styles.labelSmall,
46
+ styles.labelXLarge,
47
+ ]);
48
+ const animatedColorStyle = useAnimatedStyle(() => {
49
+ return {
50
+ color: interpolateColor(position.value, [index - 1, index, index + 1], [
51
+ styles.textColor.color,
52
+ styles.checkedTextColor.color,
53
+ styles.textColor.color,
54
+ ]),
55
+ };
56
+ });
57
+ const [isSelected, setIsSelected] = useState(false);
58
+ useAnimatedReaction(() => position.value, (value, prevValue) => {
59
+ if (value !== prevValue) {
60
+ runOnJS(setIsSelected)(value === index);
61
+ }
62
+ });
63
+ return (<TouchableOpacity disabled={disabled} style={[
64
+ styles.container,
65
+ styles[size],
66
+ disabled && styles.disabledContainer,
67
+ ]} testID='SelectButtonItem_TouchableOpacity' onLayout={onLayout} onPress={onPress}>
68
+ {Icon && showIcon ? (<SvgUniversal height={iconSize.height} source={Icon} style={[
69
+ styles.textColor,
70
+ isSelected && styles.checkedTextColor,
71
+ disabled && styles.disabledTextColor,
72
+ ]} testID='SelectButtonItem_Icon' width={iconSize.width}/>) : null}
73
+ <Animated.Text numberOfLines={1} style={[
74
+ styles.label,
75
+ labelFontSize,
76
+ styles.textColor,
77
+ disabled ? styles.disabledTextColor : animatedColorStyle,
78
+ ]} testID='SelectButtonItem_Text'>
79
+ {label}
80
+ </Animated.Text>
81
+ </TouchableOpacity>);
82
+ });
83
+ const useStyles = makeStyles(({ theme, typography, border, spacing, fonts }) => ({
84
+ container: {
85
+ flex: 1,
86
+ flexDirection: 'row',
87
+ alignItems: 'center',
88
+ justifyContent: 'center',
89
+ gap: theme.General.inlineSpacing,
90
+ borderWidth: border.Width.border,
91
+ borderColor: 'transparent',
92
+ },
93
+ small: { height: theme.Button.Common.buttonHeightSM },
94
+ base: { height: theme.Button.Common.buttonHeight },
95
+ large: {
96
+ height: theme.Button.Common.buttonHeightLG,
97
+ gap: spacing.Gap['gap-3'],
98
+ },
99
+ xlarge: {
100
+ height: theme.Button.Common.buttonHeightXL,
101
+ gap: spacing.Gap['gap-3'],
102
+ },
103
+ disabledContainer: {
104
+ borderRadius: theme.Form.SelectButton.selectButtonBorderRadius,
105
+ borderWidth: 1,
106
+ borderColor: theme.Button.Disabled.disabledButtonBorderColor,
107
+ },
108
+ iconSmall: {
109
+ width: typography.Size['text-base'],
110
+ height: typography.Size['text-base'],
111
+ },
112
+ iconBase: {
113
+ width: typography.Size['text-xl'],
114
+ height: typography.Size['text-xl'],
115
+ },
116
+ iconLarge: {
117
+ width: typography.Size['text-2xl'],
118
+ height: typography.Size['text-2xl'],
119
+ },
120
+ iconXLarge: { width: 28, height: 28 },
121
+ label: { flexShrink: 1, fontWeight: 600, fontFamily: fonts.primary },
122
+ labelSmall: { fontSize: typography.Size['text-sm'] },
123
+ labelBase: { fontSize: typography.Size['text-base'] },
124
+ labelLarge: { fontSize: typography.Size['text-xl'] },
125
+ labelXLarge: { fontSize: typography.Size['text-2xl'] },
126
+ textColor: { color: theme.Form.SelectButton.selectButtonTextColor },
127
+ checkedTextColor: {
128
+ color: theme.Form.SelectButton.selectButtonIconActiveColor,
129
+ },
130
+ disabledTextColor: {
131
+ color: theme.Button.Disabled.disabledButtonBorderColor,
132
+ },
133
+ }));
@@ -0,0 +1 @@
1
+ export { SelectButton, type SelectButtonProps } from './SelectButton';
@@ -0,0 +1 @@
1
+ export { SelectButton } from './SelectButton';
@@ -0,0 +1,15 @@
1
+ import type { ViewProps } from 'react-native-svg/lib/typescript/fabric/utils';
2
+ interface SkeletonProps extends ViewProps {
3
+ }
4
+ export declare const ANIMATION_DURATION = 1200;
5
+ /**
6
+ * Используется для отображения контента в момент загрузки
7
+ * @see https://www.figma.com/design/4TYeki0MDLhfPGJstbIicf/UI-kit-PrimeFace-(DS)?node-id=5241-3731
8
+ */
9
+ export declare const Skeleton: import("react").NamedExoticComponent<SkeletonProps>;
10
+ export declare const SkeletonTestId: {
11
+ root: string;
12
+ animatedView: string;
13
+ svg: string;
14
+ };
15
+ export {};
@@ -0,0 +1,53 @@
1
+ import { memo, useEffect } from 'react';
2
+ import { View } from 'react-native';
3
+ import Animated, { Easing, interpolate, useAnimatedStyle, useSharedValue, withRepeat, withTiming, } from 'react-native-reanimated';
4
+ import Svg, { Defs, LinearGradient, Rect, Stop } from 'react-native-svg';
5
+ import { makeStyles } from '../../utils/makeStyles';
6
+ export const ANIMATION_DURATION = 1200; // ms
7
+ /**
8
+ * Используется для отображения контента в момент загрузки
9
+ * @see https://www.figma.com/design/4TYeki0MDLhfPGJstbIicf/UI-kit-PrimeFace-(DS)?node-id=5241-3731
10
+ */
11
+ export const Skeleton = memo(({ style, testID, ...rest }) => {
12
+ const styles = useStyles();
13
+ const animation = useSharedValue(0);
14
+ const animatedStyles = useAnimatedStyle(() => ({
15
+ left: `${interpolate(animation.value, [0, 1], [-100, 100])}%`,
16
+ }));
17
+ useEffect(() => {
18
+ animation.value = withRepeat(withTiming(1, { duration: ANIMATION_DURATION, easing: Easing.ease }), -1);
19
+ }, [animation]);
20
+ return (<View {...rest} style={[styles.container, style]} testID={testID ?? SkeletonTestId.root}>
21
+ <Animated.View style={[styles.gradientContainer, animatedStyles]} testID={SkeletonTestId.animatedView}>
22
+ <Svg testID={SkeletonTestId.svg}>
23
+ <Defs>
24
+ <LinearGradient id='gradient' x1='0' x2='1' y1='1' y2='1'>
25
+ <Stop offset='0' stopColor={styles.container.backgroundColor} stopOpacity='0.4'/>
26
+ <Stop offset='0.5' stopColor={styles.gradientColor.backgroundColor} stopOpacity='0.4'/>
27
+ <Stop offset='1' stopColor={styles.container.backgroundColor} stopOpacity='0.4'/>
28
+ </LinearGradient>
29
+ </Defs>
30
+ <Rect fill='url(#gradient)' height='100%' width='100%'/>
31
+ </Svg>
32
+ </Animated.View>
33
+ </View>);
34
+ });
35
+ const useStyles = makeStyles(({ border, theme }) => ({
36
+ container: {
37
+ borderRadius: border.Radius['rounded-lg'],
38
+ overflow: 'hidden',
39
+ backgroundColor: theme.Misc.Skeleton.skeletonBg,
40
+ },
41
+ gradientContainer: {
42
+ position: 'absolute',
43
+ width: '100%',
44
+ height: '100%',
45
+ left: '-100%',
46
+ },
47
+ gradientColor: { backgroundColor: theme.Misc.Skeleton.skeletonAnimationBg },
48
+ }));
49
+ export const SkeletonTestId = {
50
+ root: 'Skeleton',
51
+ animatedView: 'Skeleton.animatedView',
52
+ svg: 'Skeleton.svg',
53
+ };
@@ -0,0 +1 @@
1
+ export { Skeleton } from './Skeleton';
@@ -0,0 +1 @@
1
+ export { Skeleton } from './Skeleton';
@@ -0,0 +1,36 @@
1
+ import { type AccessibilityProps, type ViewProps } from 'react-native';
2
+ export interface SliderProps extends AccessibilityProps, Pick<ViewProps, 'testID'> {
3
+ /**
4
+ * Управление доступностью компонента
5
+ * @default false
6
+ */
7
+ disabled?: boolean;
8
+ /**
9
+ * Признак наличия диапазона выбираемых значений
10
+ * @default false
11
+ */
12
+ range?: boolean;
13
+ /**
14
+ * Начальное значение/позиция стартового ползунка
15
+ * @default 0
16
+ */
17
+ minPointerValueInit: number;
18
+ /**
19
+ * Конечное значение/позиция конечного ползунка
20
+ * @default 100
21
+ */
22
+ maxPointerValueInit?: number;
23
+ /**
24
+ * Значение/позиция возвращаемое стартовым ползунком
25
+ */
26
+ onMinPointerValueChange: (value: number) => void;
27
+ /**
28
+ * Значение/позиция возвращаемое конечным ползунком
29
+ */
30
+ onMaxPointerValueChange: (value: number) => void;
31
+ }
32
+ /**
33
+ * Используется для указания значения или диапазона значений с помощью ползунка
34
+ * @see https://www.figma.com/design/4TYeki0MDLhfPGJstbIicf/UI-kit-PrimeFace-(DS)?node-id=484-6090&m=dev
35
+ */
36
+ export declare const Slider: import("react").NamedExoticComponent<SliderProps>;
@@ -0,0 +1,153 @@
1
+ import { memo, useCallback, useMemo, useState } from 'react';
2
+ import { View, } from 'react-native';
3
+ import { Gesture, GestureDetector } from 'react-native-gesture-handler';
4
+ import Animated, { useSharedValue, useAnimatedStyle, interpolate, Extrapolation, runOnJS, } from 'react-native-reanimated';
5
+ import { makeStyles } from '../../utils/makeStyles';
6
+ const MIN_TRACK_SCALE = 0;
7
+ const MAX_TRACK_SCALE = 100;
8
+ const clamp = (val, min, max) => {
9
+ 'worklet';
10
+ return Math.min(Math.max(val, min), max);
11
+ };
12
+ /**
13
+ * Используется для указания значения или диапазона значений с помощью ползунка
14
+ * @see https://www.figma.com/design/4TYeki0MDLhfPGJstbIicf/UI-kit-PrimeFace-(DS)?node-id=484-6090&m=dev
15
+ */
16
+ export const Slider = memo(
17
+ // TODO: refactor component to fix max-statements
18
+ // eslint-disable-next-line max-statements
19
+ ({ disabled = false, range = false, minPointerValueInit = 0, maxPointerValueInit = 100, onMinPointerValueChange, onMaxPointerValueChange, testID, ...rest }) => {
20
+ const styles = useStyles();
21
+ const minPointX = useSharedValue(0);
22
+ const maxPointX = useSharedValue(0);
23
+ const trackWidth = useSharedValue(0);
24
+ const pointerWidth = styles.point.width;
25
+ const [isPressed, setIsPressed] = useState(false);
26
+ const prevMinPointX = useSharedValue(0);
27
+ const prevMaxPointX = useSharedValue(0);
28
+ const pointerStyle = useMemo(() => [styles.point, isPressed && styles.hovered], [styles.point, isPressed, styles.hovered]);
29
+ const lineStyle = useMemo(() => [styles.line, isPressed && styles.hovered], [styles.line, isPressed, styles.hovered]);
30
+ const interpolateInitVal = useCallback((value, width) => {
31
+ return interpolate(value, [MIN_TRACK_SCALE, MAX_TRACK_SCALE], [0, width - pointerWidth], Extrapolation.CLAMP);
32
+ }, [pointerWidth]);
33
+ const onContainerLayout = useCallback((event) => {
34
+ event.target.measure((x, y, width) => {
35
+ trackWidth.value = width;
36
+ const min = interpolateInitVal(minPointerValueInit, width);
37
+ const max = interpolateInitVal(maxPointerValueInit, width);
38
+ minPointX.value = min;
39
+ maxPointX.value = max;
40
+ });
41
+ }, [
42
+ minPointerValueInit,
43
+ maxPointerValueInit,
44
+ interpolateInitVal,
45
+ trackWidth,
46
+ minPointX,
47
+ maxPointX,
48
+ ]);
49
+ const returnMinVal = useCallback((value) => {
50
+ const min = interpolate(value, [0, trackWidth.value - pointerWidth * 2], [MIN_TRACK_SCALE, MAX_TRACK_SCALE], Extrapolation.CLAMP);
51
+ onMinPointerValueChange(min);
52
+ }, [trackWidth, pointerWidth, onMinPointerValueChange]);
53
+ const returnMaxVal = useCallback((value) => {
54
+ const min = interpolate(value, [pointerWidth, trackWidth.value - pointerWidth], [MIN_TRACK_SCALE, MAX_TRACK_SCALE], Extrapolation.CLAMP);
55
+ onMaxPointerValueChange(min);
56
+ }, [trackWidth, pointerWidth, onMaxPointerValueChange]);
57
+ const panMinPoint = Gesture.Pan()
58
+ .minDistance(1)
59
+ .onBegin(() => {
60
+ prevMinPointX.value = minPointX.value;
61
+ runOnJS(setIsPressed)(true);
62
+ })
63
+ .onUpdate((event) => {
64
+ const maxTranslateX = trackWidth.value - pointerWidth;
65
+ const minPointPosition = clamp(prevMinPointX.value + event.translationX, 0, range ? maxPointX.value - pointerWidth : maxTranslateX);
66
+ minPointX.value = minPointPosition;
67
+ runOnJS(returnMinVal)(minPointPosition);
68
+ })
69
+ .onFinalize(() => {
70
+ runOnJS(setIsPressed)(false);
71
+ });
72
+ const minPointStyle = useAnimatedStyle(() => ({
73
+ transform: [{ translateX: minPointX.value }],
74
+ }));
75
+ const panMaxPoint = Gesture.Pan()
76
+ .minDistance(1)
77
+ .onBegin(() => {
78
+ prevMaxPointX.value = maxPointX.value;
79
+ runOnJS(setIsPressed)(true);
80
+ })
81
+ .onUpdate((event) => {
82
+ const maxTranslateX = trackWidth.value - pointerWidth;
83
+ const maxPointPosition = clamp(prevMaxPointX.value + event.translationX, minPointX.value + pointerWidth, maxTranslateX);
84
+ maxPointX.value = maxPointPosition;
85
+ runOnJS(returnMaxVal)(maxPointPosition);
86
+ })
87
+ .onFinalize(() => {
88
+ runOnJS(setIsPressed)(false);
89
+ });
90
+ const maxPointStyle = useAnimatedStyle(() => ({
91
+ transform: [{ translateX: maxPointX.value }],
92
+ }));
93
+ const minLineStyle = useAnimatedStyle(() => ({
94
+ left: 0,
95
+ width: minPointX.value + pointerWidth / 2,
96
+ }));
97
+ const betweenLineStyle = useAnimatedStyle(() => ({
98
+ left: minPointX.value + pointerWidth / 2,
99
+ width: maxPointX.value - minPointX.value,
100
+ }));
101
+ return (<View style={[styles.container, disabled && styles.disabled]} testID={testID} onLayout={onContainerLayout} {...rest}>
102
+ <View style={styles.track}>
103
+ {range ? null : ( // индикатор старта
104
+ <Animated.View style={[lineStyle, minLineStyle]}/>)}
105
+
106
+ {range ? ( // индикатор между точками
107
+ <Animated.View style={[lineStyle, betweenLineStyle]}/>) : null}
108
+
109
+ <GestureDetector gesture={panMinPoint}>
110
+ <Animated.View pointerEvents={disabled ? 'none' : 'auto'} style={[pointerStyle, minPointStyle]}/>
111
+ </GestureDetector>
112
+
113
+ {range ? ( // индикатор между точками
114
+ <GestureDetector gesture={panMaxPoint}>
115
+ <Animated.View pointerEvents={disabled ? 'none' : 'auto'} style={[pointerStyle, maxPointStyle]}/>
116
+ </GestureDetector>) : null}
117
+ </View>
118
+ </View>);
119
+ });
120
+ const useStyles = makeStyles(({ theme, border }) => {
121
+ return {
122
+ container: {
123
+ width: '100%',
124
+ justifyContent: 'center',
125
+ alignItems: 'center',
126
+ },
127
+ track: {
128
+ height: theme.Form.Slider.sliderHorizontalHeight,
129
+ backgroundColor: theme.Form.Slider.sliderBg,
130
+ borderRadius: theme.Form.Slider.sliderHandleBorderRadius,
131
+ position: 'relative',
132
+ width: '100%',
133
+ justifyContent: 'center',
134
+ },
135
+ line: {
136
+ height: theme.Form.Slider.sliderHorizontalHeight,
137
+ borderRadius: theme.Form.Slider.sliderHandleBorderRadius,
138
+ position: 'absolute',
139
+ backgroundColor: theme.Form.Slider.sliderRangeBg,
140
+ },
141
+ point: {
142
+ width: theme.Form.Slider.sliderHandleWidth,
143
+ height: theme.Form.Slider.sliderHandleHeight,
144
+ borderRadius: theme.Form.Slider.sliderHandleHeight / 2,
145
+ position: 'absolute',
146
+ backgroundColor: theme.Form.Slider.sliderHandleBg,
147
+ borderWidth: border.Width['border-3'],
148
+ borderColor: theme.Form.Slider.sliderHandleBorder,
149
+ },
150
+ disabled: { opacity: 0.6, mixBlendMode: 'luminosity' },
151
+ hovered: { backgroundColor: theme.Form.Slider.sliderHandleHoverBg },
152
+ };
153
+ });
@@ -0,0 +1 @@
1
+ export { Slider, type SliderProps } from './Slider';
@@ -0,0 +1 @@
1
+ export { Slider } from './Slider';
@@ -0,0 +1,24 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type ViewProps } from 'react-native';
3
+ import { type SvgSource } from '../../../utils/SvgUniversal';
4
+ export interface TabItemProps {
5
+ /** SVG-иконка */
6
+ Icon?: SvgSource;
7
+ /** Текст для отображения */
8
+ label: string;
9
+ /** Компонент бейджа **/
10
+ badge?: ReactNode;
11
+ /** Индекс этой табы **/
12
+ index: number;
13
+ /** Обработчик нажатия на кнопку */
14
+ onPress: (index: number) => void;
15
+ /** Признак доступности компонента */
16
+ disabled?: boolean;
17
+ /** Признак активен ли компонент */
18
+ active?: boolean;
19
+ onLayout?: ViewProps['onLayout'];
20
+ }
21
+ export declare const TabItem: import("react").NamedExoticComponent<TabItemProps>;
22
+ export declare enum TestId {
23
+ Container = "TabItem_Container"
24
+ }
@@ -0,0 +1,82 @@
1
+ import { memo, useCallback } from 'react';
2
+ import { Text, Pressable, View } from 'react-native';
3
+ import { SvgUniversal } from '../../../utils/SvgUniversal';
4
+ import { makeStyles } from '../../../utils/makeStyles';
5
+ // Часть навигационного компонента Tabs
6
+ // @see https://www.figma.com/design/4TYeki0MDLhfPGJstbIicf/UI-kit-PrimeFace-(DS)?node-id=888-13076&t=hIQjdrqPKK8BWYev-4
7
+ //
8
+ export const TabItem = memo(({ Icon, label, badge, index, onPress, disabled, active, onLayout }) => {
9
+ const styles = useStyles();
10
+ const getIconColor = useCallback((pressed) => {
11
+ if (disabled) {
12
+ return styles.disabledIcon.color;
13
+ }
14
+ if (pressed) {
15
+ return styles.pressedIcon.color;
16
+ }
17
+ if (active) {
18
+ return styles.activeIcon.color;
19
+ }
20
+ return styles.icon.color;
21
+ }, [disabled, active, styles]);
22
+ return (<Pressable accessibilityRole='button' disabled={disabled} testID={TestId.Container + index} onLayout={onLayout} onPress={() => onPress(index)}>
23
+ {({ pressed }) => (<View style={[
24
+ styles.container,
25
+ pressed && styles.pressedContainer,
26
+ active && styles.activeContainer,
27
+ disabled && styles.disabledContainer,
28
+ ]}>
29
+ {Icon ? (<SvgUniversal color={getIconColor(pressed)} height={styles.icon.height} source={Icon} width={styles.icon.width}/>) : null}
30
+ <Text numberOfLines={1} style={[
31
+ styles.text,
32
+ active && styles.activeText,
33
+ pressed && styles.pressedText,
34
+ disabled && styles.disabledText,
35
+ ]}>
36
+ {label}
37
+ </Text>
38
+ {badge}
39
+ </View>)}
40
+ </Pressable>);
41
+ });
42
+ const useStyles = makeStyles(({ theme, typography, fonts }) => ({
43
+ container: {
44
+ alignItems: 'center',
45
+ flexDirection: 'row',
46
+ height: theme.Misc.Badge.badgeHeight +
47
+ theme.Panel.TabView.tabviewHeaderPaddingTopBottom * 2,
48
+ gap: theme.General.inlineSpacing,
49
+ paddingHorizontal: theme.Panel.TabView.tabviewHeaderPaddingLeftRight,
50
+ paddingVertical: theme.Panel.TabView.tabviewHeaderPaddingTopBottom,
51
+ backgroundColor: theme.Panel.TabView.tabviewHeaderBg,
52
+ },
53
+ pressedContainer: {
54
+ backgroundColor: theme.Panel.TabView.tabviewHeaderHoverBg,
55
+ },
56
+ activeContainer: {
57
+ backgroundColor: theme.Panel.TabView.tabviewHeaderActiveBg,
58
+ },
59
+ disabledContainer: { opacity: 0.6, mixBlendMode: 'luminosity' },
60
+ icon: {
61
+ width: theme.Menu.Item.menuitemSubmenuIconFontSize,
62
+ height: theme.Menu.Item.menuitemSubmenuIconFontSize,
63
+ color: theme.Panel.TabView.tabviewHeaderTextColor,
64
+ },
65
+ pressedIcon: { color: theme.Panel.TabView.tabviewHeaderHoverTextColor },
66
+ activeIcon: { color: theme.Panel.TabView.tabviewHeaderActiveTextColor },
67
+ disabledIcon: { color: theme.Button.Disabled.disabledButtonTextColor },
68
+ text: {
69
+ fontFamily: fonts.primary,
70
+ fontSize: typography.Size['text-base'],
71
+ verticalAlign: 'middle',
72
+ includeFontPadding: false,
73
+ color: theme.Panel.TabView.tabviewHeaderTextColor,
74
+ },
75
+ pressedText: { color: theme.Panel.TabView.tabviewHeaderHoverTextColor },
76
+ activeText: { color: theme.Panel.TabView.tabviewHeaderActiveTextColor },
77
+ disabledText: { color: theme.Button.Disabled.disabledButtonTextColor },
78
+ }));
79
+ export var TestId;
80
+ (function (TestId) {
81
+ TestId["Container"] = "TabItem_Container";
82
+ })(TestId || (TestId = {}));
@@ -0,0 +1 @@
1
+ export { TabItem } from './TabItem';
@@ -0,0 +1 @@
1
+ export { TabItem } from './TabItem';
@@ -0,0 +1,9 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface TabPanelProps {
3
+ /** Текущий активный индекс */
4
+ activeIndex: number;
5
+ /** Индекс этой панели **/
6
+ index: number;
7
+ children?: ReactNode;
8
+ }
9
+ export declare const TabPanel: import("react").NamedExoticComponent<TabPanelProps>;
@@ -0,0 +1,11 @@
1
+ import { memo } from 'react';
2
+ import { View } from 'react-native';
3
+ // Часть навигационного компонента Tabs
4
+ // Для упрощения связанного с табами контекста в верстке
5
+ //
6
+ export const TabPanel = memo(({ activeIndex, index, children, ...rest }) => {
7
+ if (activeIndex !== index) {
8
+ return null;
9
+ }
10
+ return <View {...rest}>{children}</View>;
11
+ });
@@ -0,0 +1 @@
1
+ export { TabPanel, type TabPanelProps } from './TabPanel';
@@ -0,0 +1 @@
1
+ export { TabPanel } from './TabPanel';
@@ -0,0 +1,15 @@
1
+ import { type AccessibilityProps, type ViewProps } from 'react-native';
2
+ import { type TabItemProps } from './TabItem/TabItem';
3
+ export interface TabsProps extends AccessibilityProps, Pick<ViewProps, 'testID'> {
4
+ /** Список табов см. компонент TabItem */
5
+ items: Array<Pick<TabItemProps, 'Icon' | 'label' | 'badge'> & {
6
+ key: string;
7
+ }>;
8
+ /** Текущий активный индекс */
9
+ activeIndex: number;
10
+ /** Функция вызывается при нажатии на таб, при этом сам таб не переключается */
11
+ onChange: (index: number) => void;
12
+ /** Признак доступности компонента */
13
+ disabled?: boolean;
14
+ }
15
+ export declare const Tabs: import("react").NamedExoticComponent<TabsProps>;
@@ -0,0 +1,48 @@
1
+ import { memo, useEffect, useState } from 'react';
2
+ import { View, } from 'react-native';
3
+ import Animated, { interpolate, useAnimatedStyle, useSharedValue, withTiming, } from 'react-native-reanimated';
4
+ import { makeStyles } from '../../utils/makeStyles';
5
+ import { TabItem } from './TabItem/TabItem';
6
+ // Навигационный компонент Tabs
7
+ // @see https://www.figma.com/design/4TYeki0MDLhfPGJstbIicf/UI-kit-PrimeFace-(DS)?node-id=888-13076&t=hIQjdrqPKK8BWYev-4
8
+ //
9
+ export const Tabs = memo(({ items, disabled = false, activeIndex, onChange, testID, ...rest }) => {
10
+ const styles = useStyles();
11
+ const [tabsLayouts, setTabsLayouts] = useState({});
12
+ const lineSharedValue = useSharedValue(activeIndex);
13
+ const animatedStyles = useAnimatedStyle(() => {
14
+ return {
15
+ width: interpolate(lineSharedValue.value, items.map((_, index) => index), items.map(({ key }) => tabsLayouts[key]?.width ?? 0)),
16
+ left: interpolate(lineSharedValue.value, items.map((_, index) => index), items.map(({ key }) => tabsLayouts[key]?.x ?? 0)),
17
+ };
18
+ });
19
+ useEffect(() => {
20
+ lineSharedValue.value = withTiming(activeIndex);
21
+ }, [activeIndex, tabsLayouts, lineSharedValue, items]);
22
+ const handleTabLayout = (e, key) => {
23
+ e.persist();
24
+ setTabsLayouts((prevTabsLayouts) => {
25
+ return { ...prevTabsLayouts, [key]: e.nativeEvent.layout };
26
+ });
27
+ };
28
+ return (<View {...rest} style={styles.container} testID={testID}>
29
+ {items.map((prop, index) => {
30
+ return (<TabItem {...prop} active={activeIndex === index} disabled={disabled} index={index} key={prop.key} onLayout={(e) => handleTabLayout(e, prop.key)} onPress={onChange}/>);
31
+ })}
32
+ <Animated.View style={[styles.line, animatedStyles]}/>
33
+ </View>);
34
+ });
35
+ const useStyles = makeStyles(({ theme, border }) => ({
36
+ container: {
37
+ flexDirection: 'row',
38
+ gap: theme.Panel.TabView.tabviewHeaderSpacing,
39
+ borderBottomWidth: border.Width.border,
40
+ borderColor: theme.Panel.TabView.tabviewNavBorderColor,
41
+ },
42
+ line: {
43
+ position: 'absolute',
44
+ bottom: 0,
45
+ height: border.Width['border-2'],
46
+ backgroundColor: theme.Panel.TabView.tabviewHeaderActiveBorderColor,
47
+ },
48
+ }));
@@ -0,0 +1,2 @@
1
+ export { TabPanel, type TabPanelProps } from './TabPanel';
2
+ export { Tabs, type TabsProps } from './Tabs';
@@ -0,0 +1,2 @@
1
+ export { TabPanel } from './TabPanel';
2
+ export { Tabs } from './Tabs';
@@ -0,0 +1,33 @@
1
+ import { type ViewStyle, type StyleProp, type AccessibilityProps, type ViewProps } from 'react-native';
2
+ import { type SvgSource } from '../../utils/SvgUniversal';
3
+ export interface TagProps extends AccessibilityProps, Pick<ViewProps, 'testID'> {
4
+ /** Текст */
5
+ text: string;
6
+ /** true, если необходимо полное скругление углов компонента */
7
+ rounded?: boolean;
8
+ /**
9
+ * Выбор варианта стиля компонента
10
+ * @default 'basic'
11
+ */
12
+ severity?: 'basic' | 'info' | 'success' | 'warning' | 'danger' | 'secondary';
13
+ /**
14
+ * Показать или скрыть иконку внутри компонента
15
+ * @default true
16
+ */
17
+ showIcon?: boolean;
18
+ /** Дополнительная стилизация для контейнера компонента */
19
+ style?: StyleProp<ViewStyle>;
20
+ /** SVG-иконка */
21
+ Icon?: SvgSource;
22
+ }
23
+ /**
24
+ * Используется для маркировки элементов интерфейса
25
+ * @see https://www.figma.com/design/4TYeki0MDLhfPGJstbIicf/UI-kit-PrimeFace-(DS)?node-id=484-4921
26
+ */
27
+ export declare const Tag: import("react").NamedExoticComponent<TagProps>;
28
+ export declare const TagTestId: {
29
+ root: string;
30
+ innerContainer: string;
31
+ icon: string;
32
+ text: string;
33
+ };