@true-engineering/true-react-common-ui-kit 3.8.0 → 3.8.1

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 (117) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +6 -0
  3. package/dist/components/NewMoreMenu/NewMoreMenu.d.ts +1 -1
  4. package/dist/components/WithPopup/WithPopup.d.ts +2 -0
  5. package/dist/true-react-common-ui-kit.js +62 -60
  6. package/dist/true-react-common-ui-kit.js.map +1 -1
  7. package/dist/true-react-common-ui-kit.umd.cjs +62 -60
  8. package/dist/true-react-common-ui-kit.umd.cjs.map +1 -1
  9. package/package.json +1 -1
  10. package/src/components/AccountInfo/AccountInfo.stories.tsx +32 -32
  11. package/src/components/AccountInfo/AccountInfo.tsx +80 -80
  12. package/src/components/AddButton/AddButton.stories.tsx +21 -21
  13. package/src/components/AddButton/AddButton.tsx +52 -52
  14. package/src/components/Button/Button.stories.tsx +56 -56
  15. package/src/components/Button/Button.tsx +129 -129
  16. package/src/components/Checkbox/Checkbox.stories.tsx +28 -28
  17. package/src/components/Checkbox/Checkbox.tsx +85 -85
  18. package/src/components/CloseButton/CloseButton.tsx +34 -34
  19. package/src/components/Colors/Colors.stories.tsx +7 -7
  20. package/src/components/DateInput/DateInput.tsx +90 -90
  21. package/src/components/DateInput/constants.ts +2 -2
  22. package/src/components/DatePicker/DatePicker.tsx +308 -308
  23. package/src/components/Description/Description.stories.tsx +27 -27
  24. package/src/components/Description/Description.tsx +61 -61
  25. package/src/components/FiltersPane/FiltersPane.tsx +158 -158
  26. package/src/components/FiltersPane/components/Filter/Filter.tsx +203 -203
  27. package/src/components/FiltersPane/components/FilterValueView/FilterValueView.tsx +166 -166
  28. package/src/components/FiltersPane/components/FilterWithDates/FilterWithDates.tsx +210 -210
  29. package/src/components/FiltersPane/components/FilterWithPeriod/FilterWithPeriod.tsx +177 -177
  30. package/src/components/FiltersPane/components/FilterWrapper/FilterWrapper.tsx +167 -167
  31. package/src/components/Flag/Flag.stories.tsx +29 -29
  32. package/src/components/Flag/Flag.tsx +26 -26
  33. package/src/components/Flag/augment.d.ts +1 -1
  34. package/src/components/FlexibleTable/FlexibleTable.stories.tsx +267 -267
  35. package/src/components/FlexibleTable/FlexibleTable.styles.ts +110 -110
  36. package/src/components/FlexibleTable/FlexibleTable.tsx +271 -271
  37. package/src/components/FlexibleTable/components/FlexibleTableCell/FlexibleTableCell.styles.ts +38 -38
  38. package/src/components/FlexibleTable/components/FlexibleTableCell/FlexibleTableCell.tsx +83 -83
  39. package/src/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.styles.ts +25 -25
  40. package/src/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.tsx +196 -196
  41. package/src/components/FlexibleTable/helpers.ts +13 -13
  42. package/src/components/FlexibleTable/types.ts +52 -52
  43. package/src/components/Icon/Icon.stories.tsx +86 -86
  44. package/src/components/Icon/complexIcons/augment.d.ts +1 -1
  45. package/src/components/Icon/complexIcons/avatarGreen.svg +57 -57
  46. package/src/components/Icon/complexIcons/index.ts +1 -1
  47. package/src/components/IncrementInput/IncrementInput.tsx +105 -105
  48. package/src/components/Input/Input.tsx +297 -297
  49. package/src/components/Input/types.ts +32 -32
  50. package/src/components/List/List.stories.tsx +70 -70
  51. package/src/components/List/List.tsx +33 -33
  52. package/src/components/List/components/ListItem/ListItem.tsx +57 -57
  53. package/src/components/Modal/Modal.stories.tsx +105 -105
  54. package/src/components/Modal/Modal.tsx +196 -196
  55. package/src/components/MoreMenu/MoreMenu.styles.ts +68 -68
  56. package/src/components/MultiSelect/MultiSelect.stories.tsx +46 -46
  57. package/src/components/MultiSelect/MultiSelect.tsx +106 -106
  58. package/src/components/MultiSelect/components/MultiSelectInput/MultiSelectInput.tsx +53 -53
  59. package/src/components/MultiSelectList/MultiSelectList.tsx +461 -461
  60. package/src/components/NewMoreMenu/NewMoreMenu.stories.tsx +1 -0
  61. package/src/components/NewMoreMenu/NewMoreMenu.tsx +3 -1
  62. package/src/components/Notification/Notification.stories.tsx +46 -46
  63. package/src/components/Notification/Notification.tsx +69 -69
  64. package/src/components/NumberInput/NumberInput.tsx +137 -137
  65. package/src/components/NumberInput/index.ts +1 -1
  66. package/src/components/PhoneInput/PhoneInput.tsx +214 -214
  67. package/src/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.tsx +155 -155
  68. package/src/components/PhoneInput/types.ts +16 -16
  69. package/src/components/RadioButton/RadioButton.stories.tsx +46 -46
  70. package/src/components/RadioButton/RadioButton.tsx +57 -57
  71. package/src/components/ScrollIntoViewIfNeeded/index.ts +1 -1
  72. package/src/components/Select/CustomSelect.stories.tsx +217 -217
  73. package/src/components/Select/MultiSelect.stories.tsx +240 -240
  74. package/src/components/Select/Select.stories.tsx +235 -235
  75. package/src/components/Select/Select.tsx +580 -580
  76. package/src/components/Select/components/SelectList/SelectList.tsx +157 -157
  77. package/src/components/Select/components/SelectListItem/SelectListItem.tsx +68 -68
  78. package/src/components/Select/constants.ts +2 -2
  79. package/src/components/Select/types.ts +1 -1
  80. package/src/components/Selector/Selector.stories.tsx +62 -62
  81. package/src/components/Selector/Selector.styles.ts +164 -164
  82. package/src/components/Selector/Selector.tsx +115 -115
  83. package/src/components/Selector/index.ts +2 -2
  84. package/src/components/Selector/types.ts +12 -12
  85. package/src/components/Skeleton/Skeleton.stories.tsx +19 -19
  86. package/src/components/SmartInput/SmartInput.tsx +134 -134
  87. package/src/components/Status/Status.stories.tsx +73 -73
  88. package/src/components/Status/Status.styles.ts +143 -143
  89. package/src/components/Status/Status.tsx +49 -49
  90. package/src/components/Status/constants.ts +11 -11
  91. package/src/components/Status/index.ts +3 -3
  92. package/src/components/Status/types.ts +5 -5
  93. package/src/components/Switch/Switch.stories.tsx +40 -40
  94. package/src/components/Switch/Switch.tsx +75 -75
  95. package/src/components/TextArea/TextArea.tsx +180 -180
  96. package/src/components/TextButton/TextButton.stories.tsx +46 -46
  97. package/src/components/TextButton/TextButton.styles.ts +129 -129
  98. package/src/components/TextButton/TextButton.tsx +103 -103
  99. package/src/components/TextButton/index.ts +4 -4
  100. package/src/components/TextWithInfo/TextWithInfo.stories.tsx +53 -53
  101. package/src/components/TextWithInfo/TextWithInfo.tsx +62 -62
  102. package/src/components/TextWithTooltip/TextWithTooltip.stories.tsx +58 -58
  103. package/src/components/ThemedPreloader/ThemedPreloader.stories.tsx +41 -41
  104. package/src/components/ThemedPreloader/ThemedPreloader.tsx +54 -54
  105. package/src/components/ThemedPreloader/components/DefaultPreloader/index.ts +1 -1
  106. package/src/components/Toaster/Toaster.stories.tsx +30 -30
  107. package/src/components/Toaster/Toaster.tsx +108 -108
  108. package/src/components/Tooltip/Tooltip.stories.tsx +19 -19
  109. package/src/components/Tooltip/Tooltip.tsx +35 -35
  110. package/src/components/Tooltip/types.ts +1 -1
  111. package/src/components/WithPopup/WithPopup.stories.tsx +1 -0
  112. package/src/components/WithPopup/WithPopup.tsx +7 -1
  113. package/src/helpers/popper-helpers.ts +17 -17
  114. package/src/hooks/use-dropdown.ts +84 -84
  115. package/src/hooks/use-is-mounted.ts +15 -15
  116. package/src/theme/helpers.ts +76 -76
  117. package/src/vite-env.d.ts +1 -1
@@ -1,196 +1,196 @@
1
- import { FC, ReactNode, MouseEvent, useCallback, useEffect, useRef, useState } from 'react';
2
- import { RemoveScroll } from 'react-remove-scroll';
3
- import { CSSTransition } from 'react-transition-group';
4
- import clsx from 'clsx';
5
- import {
6
- addDataTestId,
7
- getTestId,
8
- isReactNodeNotEmpty,
9
- } from '@true-engineering/true-react-platform-helpers';
10
- import { addDataAttributes } from '../../helpers';
11
- import { useTweakStyles } from '../../hooks';
12
- import { ICommonProps } from '../../types';
13
- import { CloseButton } from '../CloseButton';
14
- import { IModalPosition, IModalTransitionProps } from './types';
15
- import { useStyles, IModalStyles } from './Modal.styles';
16
-
17
- export interface IModalProps extends ICommonProps<IModalStyles>, IModalTransitionProps {
18
- title?: ReactNode;
19
- /** @default 'l */
20
- size?: 'l' | 'm' | 's';
21
- /** @default false */
22
- isFooterSticky?: boolean;
23
- buttons?: ReactNode[];
24
- /** @default 'right' */
25
- buttonsAlign?: 'left' | 'center' | 'right';
26
- children?: ReactNode | ReactNode[];
27
- /** @default 'center' */
28
- position?: IModalPosition;
29
- /** @default true */
30
- hasCloseButton?: boolean;
31
- /** @default true */
32
- hasOverlay?: boolean;
33
- /** @default true */
34
- shouldCloseOnOverlayClick?: boolean;
35
- /** @default true */
36
- shouldCloseOnEsc?: boolean;
37
- /** @default true */
38
- shouldBlockScroll?: boolean;
39
- /** @default false */
40
- isOpen?: boolean;
41
- zIndex?: number;
42
- onClose?: () => void;
43
- }
44
-
45
- export const Modal: FC<IModalProps> = ({
46
- data,
47
- tweakStyles,
48
- title,
49
- size = 'l',
50
- isFooterSticky = false,
51
- buttons,
52
- buttonsAlign = 'right',
53
- hasCloseButton = true,
54
- hasOverlay = true,
55
- isOpen = false,
56
- position = 'center',
57
- children,
58
- zIndex,
59
- testId,
60
- shouldCloseOnOverlayClick = true,
61
- shouldCloseOnEsc = true,
62
- shouldBlockScroll = true,
63
- timeout = 150,
64
- unmountOnExit = true,
65
- onClose,
66
- ...restProps
67
- }) => {
68
- const classes = useStyles({ theme: tweakStyles });
69
-
70
- const tweakCloseButtonStyles = useTweakStyles({
71
- tweakStyles,
72
- className: 'tweakCloseButton',
73
- currentComponentName: 'Modal',
74
- });
75
-
76
- const [isClickOnOverlay, setIsClickOnOverlay] = useState(false);
77
-
78
- const isModalOpen = restProps.in ?? isOpen;
79
- const hasFooter = buttons !== undefined && buttons.length > 0;
80
- const overlay = useRef<HTMLDivElement>(null);
81
-
82
- // Клик на оверлее обрабатываем через связку onMouseDown и onMouseUp, т.к. клик
83
- // создает ложные срабатывания (баг при старте клика на модалке и отпусканием мышки уже на оверлее)
84
- const handleOutsideMouseDown = (event: MouseEvent) => {
85
- if (onClose !== undefined && event.target === overlay.current) {
86
- setIsClickOnOverlay(true);
87
- }
88
- };
89
-
90
- const handleOutsideMouseUp = (event: MouseEvent) => {
91
- if (onClose === undefined) {
92
- return;
93
- }
94
- if (event.target === overlay.current && isClickOnOverlay) {
95
- onClose();
96
- }
97
- setIsClickOnOverlay(false);
98
- };
99
-
100
- const handleEscClose = useCallback(
101
- (event: KeyboardEvent) => {
102
- if (event.code === 'Escape' && onClose !== undefined) {
103
- onClose();
104
- }
105
- },
106
- [onClose],
107
- );
108
-
109
- useEffect(() => {
110
- if (!shouldCloseOnEsc || onClose === undefined || !isModalOpen) {
111
- return () => null;
112
- }
113
-
114
- document.addEventListener('keydown', handleEscClose);
115
- return () => document.removeEventListener('keydown', handleEscClose);
116
- }, [shouldCloseOnEsc, onClose, isModalOpen, handleEscClose]);
117
-
118
- return (
119
- <CSSTransition
120
- in={isModalOpen}
121
- timeout={timeout}
122
- unmountOnExit={unmountOnExit}
123
- classNames={{
124
- enter: classes['modal-enter'],
125
- enterActive: classes['modal-enter-active'],
126
- exit: classes['modal-exit'],
127
- exitActive: classes['modal-exit-active'],
128
- }}
129
- {...restProps}
130
- >
131
- <div className={classes.modalWrapper}>
132
- <RemoveScroll enabled={shouldBlockScroll} forwardProps>
133
- <div
134
- className={clsx(classes.root, classes[size], {
135
- [classes.overlay]: position !== 'static' && hasOverlay,
136
- [classes.sideBar]: position === 'left' || position === 'right',
137
- [classes.fixedPosition]: position !== 'static',
138
- })}
139
- style={{ zIndex }}
140
- {...addDataTestId(testId)}
141
- {...addDataAttributes(data)}
142
- >
143
- <div
144
- ref={overlay}
145
- className={clsx(classes.innerOverlay, classes[`position-${position}`])}
146
- onMouseDown={shouldCloseOnOverlayClick ? handleOutsideMouseDown : undefined}
147
- onMouseUp={shouldCloseOnOverlayClick ? handleOutsideMouseUp : undefined}
148
- >
149
- <div
150
- className={clsx(classes.modal, {
151
- [classes.withoutFooter]: !hasFooter,
152
- [classes.withStickyFooter]: isFooterSticky,
153
- })}
154
- >
155
- {hasCloseButton && (
156
- <div className={classes.close}>
157
- <CloseButton
158
- testId={getTestId(testId, 'close-button')}
159
- tweakStyles={tweakCloseButtonStyles}
160
- onClose={onClose}
161
- />
162
- </div>
163
- )}
164
- {isReactNodeNotEmpty(title) && (
165
- <h3
166
- className={clsx(classes.title, {
167
- [classes.titleWithCloseButton]: hasCloseButton,
168
- })}
169
- >
170
- {title}
171
- </h3>
172
- )}
173
- {isReactNodeNotEmpty(children) && <div className={classes.content}>{children}</div>}
174
- {hasFooter && (
175
- <div
176
- className={clsx(classes.footerWrapper, {
177
- [classes.stickyFooterWrapper]: isFooterSticky,
178
- })}
179
- >
180
- <div
181
- className={clsx(classes.footer, classes[`buttons-${buttonsAlign}`], {
182
- [classes.stickyFooter]: isFooterSticky,
183
- })}
184
- >
185
- {buttons.map((button) => button)}
186
- </div>
187
- </div>
188
- )}
189
- </div>
190
- </div>
191
- </div>
192
- </RemoveScroll>
193
- </div>
194
- </CSSTransition>
195
- );
196
- };
1
+ import { FC, ReactNode, MouseEvent, useCallback, useEffect, useRef, useState } from 'react';
2
+ import { RemoveScroll } from 'react-remove-scroll';
3
+ import { CSSTransition } from 'react-transition-group';
4
+ import clsx from 'clsx';
5
+ import {
6
+ addDataTestId,
7
+ getTestId,
8
+ isReactNodeNotEmpty,
9
+ } from '@true-engineering/true-react-platform-helpers';
10
+ import { addDataAttributes } from '../../helpers';
11
+ import { useTweakStyles } from '../../hooks';
12
+ import { ICommonProps } from '../../types';
13
+ import { CloseButton } from '../CloseButton';
14
+ import { IModalPosition, IModalTransitionProps } from './types';
15
+ import { useStyles, IModalStyles } from './Modal.styles';
16
+
17
+ export interface IModalProps extends ICommonProps<IModalStyles>, IModalTransitionProps {
18
+ title?: ReactNode;
19
+ /** @default 'l */
20
+ size?: 'l' | 'm' | 's';
21
+ /** @default false */
22
+ isFooterSticky?: boolean;
23
+ buttons?: ReactNode[];
24
+ /** @default 'right' */
25
+ buttonsAlign?: 'left' | 'center' | 'right';
26
+ children?: ReactNode | ReactNode[];
27
+ /** @default 'center' */
28
+ position?: IModalPosition;
29
+ /** @default true */
30
+ hasCloseButton?: boolean;
31
+ /** @default true */
32
+ hasOverlay?: boolean;
33
+ /** @default true */
34
+ shouldCloseOnOverlayClick?: boolean;
35
+ /** @default true */
36
+ shouldCloseOnEsc?: boolean;
37
+ /** @default true */
38
+ shouldBlockScroll?: boolean;
39
+ /** @default false */
40
+ isOpen?: boolean;
41
+ zIndex?: number;
42
+ onClose?: () => void;
43
+ }
44
+
45
+ export const Modal: FC<IModalProps> = ({
46
+ data,
47
+ tweakStyles,
48
+ title,
49
+ size = 'l',
50
+ isFooterSticky = false,
51
+ buttons,
52
+ buttonsAlign = 'right',
53
+ hasCloseButton = true,
54
+ hasOverlay = true,
55
+ isOpen = false,
56
+ position = 'center',
57
+ children,
58
+ zIndex,
59
+ testId,
60
+ shouldCloseOnOverlayClick = true,
61
+ shouldCloseOnEsc = true,
62
+ shouldBlockScroll = true,
63
+ timeout = 150,
64
+ unmountOnExit = true,
65
+ onClose,
66
+ ...restProps
67
+ }) => {
68
+ const classes = useStyles({ theme: tweakStyles });
69
+
70
+ const tweakCloseButtonStyles = useTweakStyles({
71
+ tweakStyles,
72
+ className: 'tweakCloseButton',
73
+ currentComponentName: 'Modal',
74
+ });
75
+
76
+ const [isClickOnOverlay, setIsClickOnOverlay] = useState(false);
77
+
78
+ const isModalOpen = restProps.in ?? isOpen;
79
+ const hasFooter = buttons !== undefined && buttons.length > 0;
80
+ const overlay = useRef<HTMLDivElement>(null);
81
+
82
+ // Клик на оверлее обрабатываем через связку onMouseDown и onMouseUp, т.к. клик
83
+ // создает ложные срабатывания (баг при старте клика на модалке и отпусканием мышки уже на оверлее)
84
+ const handleOutsideMouseDown = (event: MouseEvent) => {
85
+ if (onClose !== undefined && event.target === overlay.current) {
86
+ setIsClickOnOverlay(true);
87
+ }
88
+ };
89
+
90
+ const handleOutsideMouseUp = (event: MouseEvent) => {
91
+ if (onClose === undefined) {
92
+ return;
93
+ }
94
+ if (event.target === overlay.current && isClickOnOverlay) {
95
+ onClose();
96
+ }
97
+ setIsClickOnOverlay(false);
98
+ };
99
+
100
+ const handleEscClose = useCallback(
101
+ (event: KeyboardEvent) => {
102
+ if (event.code === 'Escape' && onClose !== undefined) {
103
+ onClose();
104
+ }
105
+ },
106
+ [onClose],
107
+ );
108
+
109
+ useEffect(() => {
110
+ if (!shouldCloseOnEsc || onClose === undefined || !isModalOpen) {
111
+ return () => null;
112
+ }
113
+
114
+ document.addEventListener('keydown', handleEscClose);
115
+ return () => document.removeEventListener('keydown', handleEscClose);
116
+ }, [shouldCloseOnEsc, onClose, isModalOpen, handleEscClose]);
117
+
118
+ return (
119
+ <CSSTransition
120
+ in={isModalOpen}
121
+ timeout={timeout}
122
+ unmountOnExit={unmountOnExit}
123
+ classNames={{
124
+ enter: classes['modal-enter'],
125
+ enterActive: classes['modal-enter-active'],
126
+ exit: classes['modal-exit'],
127
+ exitActive: classes['modal-exit-active'],
128
+ }}
129
+ {...restProps}
130
+ >
131
+ <div className={classes.modalWrapper}>
132
+ <RemoveScroll enabled={shouldBlockScroll} forwardProps>
133
+ <div
134
+ className={clsx(classes.root, classes[size], {
135
+ [classes.overlay]: position !== 'static' && hasOverlay,
136
+ [classes.sideBar]: position === 'left' || position === 'right',
137
+ [classes.fixedPosition]: position !== 'static',
138
+ })}
139
+ style={{ zIndex }}
140
+ {...addDataTestId(testId)}
141
+ {...addDataAttributes(data)}
142
+ >
143
+ <div
144
+ ref={overlay}
145
+ className={clsx(classes.innerOverlay, classes[`position-${position}`])}
146
+ onMouseDown={shouldCloseOnOverlayClick ? handleOutsideMouseDown : undefined}
147
+ onMouseUp={shouldCloseOnOverlayClick ? handleOutsideMouseUp : undefined}
148
+ >
149
+ <div
150
+ className={clsx(classes.modal, {
151
+ [classes.withoutFooter]: !hasFooter,
152
+ [classes.withStickyFooter]: isFooterSticky,
153
+ })}
154
+ >
155
+ {hasCloseButton && (
156
+ <div className={classes.close}>
157
+ <CloseButton
158
+ testId={getTestId(testId, 'close-button')}
159
+ tweakStyles={tweakCloseButtonStyles}
160
+ onClose={onClose}
161
+ />
162
+ </div>
163
+ )}
164
+ {isReactNodeNotEmpty(title) && (
165
+ <h3
166
+ className={clsx(classes.title, {
167
+ [classes.titleWithCloseButton]: hasCloseButton,
168
+ })}
169
+ >
170
+ {title}
171
+ </h3>
172
+ )}
173
+ {isReactNodeNotEmpty(children) && <div className={classes.content}>{children}</div>}
174
+ {hasFooter && (
175
+ <div
176
+ className={clsx(classes.footerWrapper, {
177
+ [classes.stickyFooterWrapper]: isFooterSticky,
178
+ })}
179
+ >
180
+ <div
181
+ className={clsx(classes.footer, classes[`buttons-${buttonsAlign}`], {
182
+ [classes.stickyFooter]: isFooterSticky,
183
+ })}
184
+ >
185
+ {buttons.map((button) => button)}
186
+ </div>
187
+ </div>
188
+ )}
189
+ </div>
190
+ </div>
191
+ </div>
192
+ </RemoveScroll>
193
+ </div>
194
+ </CSSTransition>
195
+ );
196
+ };
@@ -1,68 +1,68 @@
1
- import { rgba } from '../../helpers';
2
- import { colors, ITweakStyles, createThemedStyles } from '../../theme';
3
- import { IListStyles } from '../List';
4
-
5
- export const useStyles = createThemedStyles('MoreMenu', {
6
- root: {
7
- position: 'relative',
8
- },
9
-
10
- hasCircle: {},
11
-
12
- button: {
13
- display: 'flex',
14
- alignItems: 'center',
15
- justifyContent: 'center',
16
- width: 32,
17
- height: 32,
18
- backgroundColor: 'transparent',
19
- color: colors.FONT_MEDIUM,
20
- padding: 0,
21
- borderRadius: '50%',
22
- border: 'none',
23
- cursor: 'pointer',
24
- transition: 'background-color 0.25s ease-in-out',
25
-
26
- '&$hasCircle': {
27
- backgroundColor: rgba(colors.GREY_HOVER, 0.5),
28
- },
29
-
30
- '&:hover': {
31
- backgroundColor: rgba(colors.BORDER_MAIN, 0.5),
32
- },
33
-
34
- '&:focus': {
35
- backgroundColor: rgba(colors.FONT_DISABLED, 0.2),
36
- },
37
-
38
- '&:active, &$active': {
39
- backgroundColor: rgba(colors.FONT_DISABLED, 0.5),
40
- },
41
-
42
- '&$disabled': {
43
- backgroundColor: rgba(colors.GREY_FOCUS, 0.5),
44
- color: colors.BORDER_MAIN,
45
- },
46
- },
47
-
48
- icon: {
49
- width: 30,
50
- height: 30,
51
- },
52
-
53
- active: {},
54
-
55
- disabled: {
56
- cursor: 'default',
57
- },
58
-
59
- menu: {
60
- position: 'absolute',
61
- zIndex: 5,
62
- top: '100%',
63
- right: 0,
64
- marginTop: 6,
65
- },
66
- });
67
-
68
- export type IMoreMenuStyles = ITweakStyles<typeof useStyles, { tweakList: IListStyles }>;
1
+ import { rgba } from '../../helpers';
2
+ import { colors, ITweakStyles, createThemedStyles } from '../../theme';
3
+ import { IListStyles } from '../List';
4
+
5
+ export const useStyles = createThemedStyles('MoreMenu', {
6
+ root: {
7
+ position: 'relative',
8
+ },
9
+
10
+ hasCircle: {},
11
+
12
+ button: {
13
+ display: 'flex',
14
+ alignItems: 'center',
15
+ justifyContent: 'center',
16
+ width: 32,
17
+ height: 32,
18
+ backgroundColor: 'transparent',
19
+ color: colors.FONT_MEDIUM,
20
+ padding: 0,
21
+ borderRadius: '50%',
22
+ border: 'none',
23
+ cursor: 'pointer',
24
+ transition: 'background-color 0.25s ease-in-out',
25
+
26
+ '&$hasCircle': {
27
+ backgroundColor: rgba(colors.GREY_HOVER, 0.5),
28
+ },
29
+
30
+ '&:hover': {
31
+ backgroundColor: rgba(colors.BORDER_MAIN, 0.5),
32
+ },
33
+
34
+ '&:focus': {
35
+ backgroundColor: rgba(colors.FONT_DISABLED, 0.2),
36
+ },
37
+
38
+ '&:active, &$active': {
39
+ backgroundColor: rgba(colors.FONT_DISABLED, 0.5),
40
+ },
41
+
42
+ '&$disabled': {
43
+ backgroundColor: rgba(colors.GREY_FOCUS, 0.5),
44
+ color: colors.BORDER_MAIN,
45
+ },
46
+ },
47
+
48
+ icon: {
49
+ width: 30,
50
+ height: 30,
51
+ },
52
+
53
+ active: {},
54
+
55
+ disabled: {
56
+ cursor: 'default',
57
+ },
58
+
59
+ menu: {
60
+ position: 'absolute',
61
+ zIndex: 5,
62
+ top: '100%',
63
+ right: 0,
64
+ marginTop: 6,
65
+ },
66
+ });
67
+
68
+ export type IMoreMenuStyles = ITweakStyles<typeof useStyles, { tweakList: IListStyles }>;
@@ -1,46 +1,46 @@
1
- import { useState } from 'react';
2
- import { ComponentStory } from '@storybook/react';
3
- import { MultiSelect } from './MultiSelect';
4
-
5
- export default {
6
- title: 'Controls/MultiSelect',
7
- component: MultiSelect,
8
- argTypes: {
9
- corners: { control: 'inline-radio', options: ['full', 'left', 'right'] },
10
- },
11
- };
12
-
13
- const stringOptions = [
14
- 'Опция 1',
15
- 'Опция 11',
16
- 'Еще одна опция',
17
- 'Еще выбор',
18
- 'Очень длинная опция вот такой текст',
19
- '1',
20
- '2',
21
- '3',
22
- '4',
23
- ];
24
-
25
- const Template: ComponentStory<typeof MultiSelect> = (args) => {
26
- const [value, setValue] = useState<string[]>([]);
27
-
28
- return (
29
- <MultiSelect
30
- {...args}
31
- value={{ include: value }}
32
- onChange={(e) => setValue(e?.include ?? [])}
33
- fetchOptions={() => Promise.resolve(stringOptions)}
34
- />
35
- );
36
- };
37
-
38
- export const Default = Template.bind({});
39
-
40
- Default.args = {
41
- placeholder: 'Placeholder',
42
- corners: 'full',
43
- isInvalid: false,
44
- isDisabled: false,
45
- isRequired: false,
46
- };
1
+ import { useState } from 'react';
2
+ import { ComponentStory } from '@storybook/react';
3
+ import { MultiSelect } from './MultiSelect';
4
+
5
+ export default {
6
+ title: 'Controls/MultiSelect',
7
+ component: MultiSelect,
8
+ argTypes: {
9
+ corners: { control: 'inline-radio', options: ['full', 'left', 'right'] },
10
+ },
11
+ };
12
+
13
+ const stringOptions = [
14
+ 'Опция 1',
15
+ 'Опция 11',
16
+ 'Еще одна опция',
17
+ 'Еще выбор',
18
+ 'Очень длинная опция вот такой текст',
19
+ '1',
20
+ '2',
21
+ '3',
22
+ '4',
23
+ ];
24
+
25
+ const Template: ComponentStory<typeof MultiSelect> = (args) => {
26
+ const [value, setValue] = useState<string[]>([]);
27
+
28
+ return (
29
+ <MultiSelect
30
+ {...args}
31
+ value={{ include: value }}
32
+ onChange={(e) => setValue(e?.include ?? [])}
33
+ fetchOptions={() => Promise.resolve(stringOptions)}
34
+ />
35
+ );
36
+ };
37
+
38
+ export const Default = Template.bind({});
39
+
40
+ Default.args = {
41
+ placeholder: 'Placeholder',
42
+ corners: 'full',
43
+ isInvalid: false,
44
+ isDisabled: false,
45
+ isRequired: false,
46
+ };