@true-engineering/true-react-common-ui-kit 3.8.1 → 3.9.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 (122) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +10 -0
  3. package/dist/components/Checkbox/Checkbox.d.ts +2 -2
  4. package/dist/components/NewMoreMenu/NewMoreMenu.styles.d.ts +3 -1
  5. package/dist/components/ScrollIntoViewIfNeeded/ScrollIntoViewIfNeeded.d.ts +1 -1
  6. package/dist/components/Select/Select.d.ts +4 -4
  7. package/dist/components/Select/components/SelectList/SelectList.d.ts +5 -6
  8. package/dist/components/Select/components/SelectListItem/SelectListItem.d.ts +2 -2
  9. package/dist/components/WithPopup/WithPopup.styles.d.ts +1 -1
  10. package/dist/true-react-common-ui-kit.js +111 -86
  11. package/dist/true-react-common-ui-kit.js.map +1 -1
  12. package/dist/true-react-common-ui-kit.umd.cjs +111 -86
  13. package/dist/true-react-common-ui-kit.umd.cjs.map +1 -1
  14. package/package.json +1 -1
  15. package/src/components/AccountInfo/AccountInfo.stories.tsx +32 -32
  16. package/src/components/AccountInfo/AccountInfo.tsx +80 -80
  17. package/src/components/AddButton/AddButton.stories.tsx +21 -21
  18. package/src/components/AddButton/AddButton.tsx +52 -52
  19. package/src/components/Button/Button.stories.tsx +56 -56
  20. package/src/components/Button/Button.tsx +129 -129
  21. package/src/components/Checkbox/Checkbox.stories.tsx +28 -28
  22. package/src/components/Checkbox/Checkbox.tsx +7 -4
  23. package/src/components/CloseButton/CloseButton.tsx +34 -34
  24. package/src/components/Colors/Colors.stories.tsx +7 -7
  25. package/src/components/DateInput/DateInput.tsx +90 -90
  26. package/src/components/DateInput/constants.ts +2 -2
  27. package/src/components/DatePicker/DatePicker.tsx +308 -308
  28. package/src/components/Description/Description.stories.tsx +27 -27
  29. package/src/components/Description/Description.tsx +61 -61
  30. package/src/components/FiltersPane/FiltersPane.tsx +158 -158
  31. package/src/components/FiltersPane/components/Filter/Filter.tsx +203 -203
  32. package/src/components/FiltersPane/components/FilterValueView/FilterValueView.tsx +166 -166
  33. package/src/components/FiltersPane/components/FilterWithDates/FilterWithDates.tsx +210 -210
  34. package/src/components/FiltersPane/components/FilterWithPeriod/FilterWithPeriod.tsx +177 -177
  35. package/src/components/FiltersPane/components/FilterWrapper/FilterWrapper.tsx +167 -167
  36. package/src/components/Flag/Flag.stories.tsx +29 -29
  37. package/src/components/Flag/Flag.tsx +26 -26
  38. package/src/components/Flag/augment.d.ts +1 -1
  39. package/src/components/FlexibleTable/FlexibleTable.stories.tsx +267 -267
  40. package/src/components/FlexibleTable/FlexibleTable.styles.ts +110 -110
  41. package/src/components/FlexibleTable/FlexibleTable.tsx +271 -271
  42. package/src/components/FlexibleTable/components/FlexibleTableCell/FlexibleTableCell.styles.ts +38 -38
  43. package/src/components/FlexibleTable/components/FlexibleTableCell/FlexibleTableCell.tsx +83 -83
  44. package/src/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.styles.ts +25 -25
  45. package/src/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.tsx +196 -196
  46. package/src/components/FlexibleTable/helpers.ts +13 -13
  47. package/src/components/FlexibleTable/types.ts +52 -52
  48. package/src/components/Icon/Icon.stories.tsx +86 -86
  49. package/src/components/Icon/complexIcons/augment.d.ts +1 -1
  50. package/src/components/Icon/complexIcons/avatarGreen.svg +57 -57
  51. package/src/components/Icon/complexIcons/index.ts +1 -1
  52. package/src/components/IncrementInput/IncrementInput.tsx +105 -105
  53. package/src/components/Input/Input.tsx +297 -297
  54. package/src/components/Input/types.ts +32 -32
  55. package/src/components/List/List.stories.tsx +70 -70
  56. package/src/components/List/List.tsx +33 -33
  57. package/src/components/List/components/ListItem/ListItem.tsx +57 -57
  58. package/src/components/Modal/Modal.stories.tsx +105 -105
  59. package/src/components/Modal/Modal.tsx +196 -196
  60. package/src/components/MoreMenu/MoreMenu.styles.ts +68 -68
  61. package/src/components/MultiSelect/MultiSelect.stories.tsx +46 -46
  62. package/src/components/MultiSelect/MultiSelect.tsx +106 -106
  63. package/src/components/MultiSelect/components/MultiSelectInput/MultiSelectInput.tsx +53 -53
  64. package/src/components/MultiSelectList/MultiSelectList.tsx +461 -461
  65. package/src/components/NewMoreMenu/NewMoreMenu.styles.ts +5 -5
  66. package/src/components/NewMoreMenu/NewMoreMenu.tsx +15 -1
  67. package/src/components/Notification/Notification.stories.tsx +46 -46
  68. package/src/components/Notification/Notification.tsx +69 -69
  69. package/src/components/NumberInput/NumberInput.tsx +137 -137
  70. package/src/components/NumberInput/index.ts +1 -1
  71. package/src/components/PhoneInput/PhoneInput.tsx +214 -214
  72. package/src/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.tsx +155 -155
  73. package/src/components/PhoneInput/types.ts +16 -16
  74. package/src/components/RadioButton/RadioButton.stories.tsx +46 -46
  75. package/src/components/RadioButton/RadioButton.tsx +57 -57
  76. package/src/components/ScrollIntoViewIfNeeded/index.ts +1 -1
  77. package/src/components/Select/CustomSelect.stories.tsx +217 -217
  78. package/src/components/Select/MultiSelect.stories.tsx +240 -240
  79. package/src/components/Select/Select.stories.tsx +235 -235
  80. package/src/components/Select/Select.tsx +57 -28
  81. package/src/components/Select/components/SelectList/SelectList.tsx +8 -9
  82. package/src/components/Select/components/SelectListItem/SelectListItem.tsx +7 -3
  83. package/src/components/Select/constants.ts +2 -2
  84. package/src/components/Select/types.ts +1 -1
  85. package/src/components/Selector/Selector.stories.tsx +62 -62
  86. package/src/components/Selector/Selector.styles.ts +164 -164
  87. package/src/components/Selector/Selector.tsx +115 -115
  88. package/src/components/Selector/index.ts +2 -2
  89. package/src/components/Selector/types.ts +12 -12
  90. package/src/components/Skeleton/Skeleton.stories.tsx +19 -19
  91. package/src/components/SmartInput/SmartInput.tsx +134 -134
  92. package/src/components/Status/Status.stories.tsx +73 -73
  93. package/src/components/Status/Status.styles.ts +143 -143
  94. package/src/components/Status/Status.tsx +49 -49
  95. package/src/components/Status/constants.ts +11 -11
  96. package/src/components/Status/index.ts +3 -3
  97. package/src/components/Status/types.ts +5 -5
  98. package/src/components/Switch/Switch.stories.tsx +40 -40
  99. package/src/components/Switch/Switch.tsx +75 -75
  100. package/src/components/TextArea/TextArea.tsx +180 -180
  101. package/src/components/TextButton/TextButton.stories.tsx +46 -46
  102. package/src/components/TextButton/TextButton.styles.ts +129 -129
  103. package/src/components/TextButton/TextButton.tsx +103 -103
  104. package/src/components/TextButton/index.ts +4 -4
  105. package/src/components/TextWithInfo/TextWithInfo.stories.tsx +53 -53
  106. package/src/components/TextWithInfo/TextWithInfo.tsx +62 -62
  107. package/src/components/TextWithTooltip/TextWithTooltip.stories.tsx +58 -58
  108. package/src/components/ThemedPreloader/ThemedPreloader.stories.tsx +41 -41
  109. package/src/components/ThemedPreloader/ThemedPreloader.tsx +54 -54
  110. package/src/components/ThemedPreloader/components/DefaultPreloader/index.ts +1 -1
  111. package/src/components/Toaster/Toaster.stories.tsx +30 -30
  112. package/src/components/Toaster/Toaster.tsx +108 -108
  113. package/src/components/Tooltip/Tooltip.stories.tsx +19 -19
  114. package/src/components/Tooltip/Tooltip.tsx +35 -35
  115. package/src/components/Tooltip/types.ts +1 -1
  116. package/src/components/WithPopup/WithPopup.styles.ts +4 -0
  117. package/src/components/WithPopup/WithPopup.tsx +6 -1
  118. package/src/helpers/popper-helpers.ts +17 -17
  119. package/src/hooks/use-dropdown.ts +84 -84
  120. package/src/hooks/use-is-mounted.ts +15 -15
  121. package/src/theme/helpers.ts +76 -76
  122. package/src/vite-env.d.ts +1 -1
@@ -1,32 +1,31 @@
1
- import { ReactNode, useMemo, MouseEvent } from 'react';
1
+ import { ReactNode, useMemo } from 'react';
2
2
  import clsx from 'clsx';
3
3
  import {
4
4
  addDataTestId,
5
5
  isNotEmpty,
6
6
  isReactNodeNotEmpty,
7
- isStringNotEmpty,
8
7
  } from '@true-engineering/true-react-platform-helpers';
9
8
  import { ICommonProps } from '../../../../types';
10
9
  import { ScrollIntoViewIfNeeded } from '../../../ScrollIntoViewIfNeeded';
11
10
  import { ALL_OPTION_INDEX, DEFAULT_OPTION_INDEX } from '../../constants';
12
11
  import { IMultipleSelectValue } from '../../types';
13
- import { SelectListItem } from '../SelectListItem';
12
+ import { ISelectListItemProps, SelectListItem } from '../SelectListItem';
14
13
  import { useStyles, ISelectListStyles } from './SelectList.styles';
15
14
 
16
- export interface ISelectListProps<Value> extends ICommonProps<ISelectListStyles> {
17
- options: Value[];
15
+ export interface ISelectListProps<Value>
16
+ extends ICommonProps<ISelectListStyles>,
17
+ Pick<ISelectListItemProps, 'onToggleCheckbox' | 'onOptionSelect'> {
18
+ options: Value[] | Readonly<Value[]>;
18
19
  focusedIndex?: number;
19
20
  activeValue?: Value | Value[];
20
21
  noMatchesLabel?: string;
21
22
  isLoading?: boolean;
22
23
  loadingLabel?: ReactNode;
23
24
  defaultOptionLabel?: ReactNode;
24
- allOptionsLabel?: string;
25
+ allOptionsLabel?: ReactNode;
25
26
  areAllOptionsSelected?: boolean;
26
27
  shouldScrollToList?: boolean;
27
28
  customListHeader?: ReactNode;
28
- onOptionSelect: (index: number, event: MouseEvent<HTMLElement>) => void;
29
- onToggleCheckbox?: (index: number, isSelected: boolean) => void;
30
29
  isOptionDisabled: (value: Value) => boolean;
31
30
  convertValueToString: (value: Value) => string | undefined;
32
31
  convertValueToReactNode?: (value: Value, isDisabled: boolean) => ReactNode;
@@ -111,7 +110,7 @@ export function SelectList<Value>({
111
110
  {defaultOptionLabel}
112
111
  </ScrollIntoViewIfNeeded>
113
112
  )}
114
- {isStringNotEmpty(allOptionsLabel) && (
113
+ {isReactNodeNotEmpty(allOptionsLabel) && (
115
114
  <SelectListItem
116
115
  classes={classes}
117
116
  index={ALL_OPTION_INDEX}
@@ -1,4 +1,4 @@
1
- import { ReactNode, MouseEvent, FC } from 'react';
1
+ import { ReactNode, MouseEvent, FC, KeyboardEvent, ChangeEvent } from 'react';
2
2
  import clsx from 'clsx';
3
3
  import { Classes } from 'jss';
4
4
  import { isNotEmpty } from '@true-engineering/true-react-platform-helpers';
@@ -16,7 +16,11 @@ export interface ISelectListItemProps {
16
16
  children: ReactNode;
17
17
  classes: Classes<'cellWithCheckbox' | 'cell' | 'focused' | 'active' | 'disabled'>; // TODO: !!!
18
18
  onOptionSelect: (index: number, event: MouseEvent<HTMLElement>) => void;
19
- onToggleCheckbox?: (index: number, isSelected: boolean) => void;
19
+ onToggleCheckbox?: (
20
+ index: number,
21
+ isSelected: boolean,
22
+ event: ChangeEvent<HTMLElement> | KeyboardEvent,
23
+ ) => void;
20
24
  }
21
25
 
22
26
  export const SelectListItem: FC<ISelectListItemProps> = ({
@@ -56,7 +60,7 @@ export const SelectListItem: FC<ISelectListItemProps> = ({
56
60
  isSemiChecked={isSemiChecked}
57
61
  isDisabled={isDisabled}
58
62
  tweakStyles={checkboxStyles}
59
- onSelect={(v) => onToggleCheckbox(index, v.isSelected)}
63
+ onSelect={(v, event) => onToggleCheckbox(index, v.isSelected, event)}
60
64
  >
61
65
  {children}
62
66
  </Checkbox>
@@ -1,2 +1,2 @@
1
- export const DEFAULT_OPTION_INDEX = -2;
2
- export const ALL_OPTION_INDEX = -1;
1
+ export const DEFAULT_OPTION_INDEX = -2;
2
+ export const ALL_OPTION_INDEX = -1;
@@ -1 +1 @@
1
- export type IMultipleSelectValue<Value> = Array<NonNullable<Value>>;
1
+ export type IMultipleSelectValue<Value> = Array<NonNullable<Value>>;
@@ -1,62 +1,62 @@
1
- import { useState } from 'react';
2
- import { ComponentStory } from '@storybook/react';
3
- import { Status } from '../Status';
4
- import { Selector } from './Selector';
5
- import { ISelectorOption } from './types';
6
-
7
- const options: Array<ISelectorOption<string>> = [
8
- {
9
- label: 'Label 1',
10
- value: '1',
11
- icon: 'eye',
12
- },
13
- {
14
- label: 'My label 2',
15
- value: '2',
16
- },
17
- {
18
- label: (
19
- <>
20
- This is Label 3{' '}
21
- <Status size="xs" color="teal">
22
- P
23
- </Status>
24
- </>
25
- ),
26
- value: '3',
27
- },
28
- {
29
- label: 'This is disabled',
30
- value: '4',
31
- isDisabled: true,
32
- },
33
- ];
34
-
35
- export default {
36
- title: 'Controls/Selector',
37
- component: Selector,
38
- };
39
-
40
- const Template: ComponentStory<typeof Selector> = (args) => {
41
- const [value, setValue] = useState(options[0].value);
42
- return <Selector {...args} value={value} options={options} onChange={setValue} />;
43
- };
44
-
45
- export const Default = Template.bind({});
46
-
47
- Default.args = {
48
- size: 'l',
49
- iconPosition: 'left',
50
- hasSameOptionsWidth: true,
51
- isDisabled: false,
52
- isInvalid: false,
53
- isRequired: false,
54
- };
55
-
56
- Default.argTypes = {};
57
-
58
- Default.parameters = {
59
- controls: {
60
- exclude: ['options', 'value', 'testId', 'onChange'],
61
- },
62
- };
1
+ import { useState } from 'react';
2
+ import { ComponentStory } from '@storybook/react';
3
+ import { Status } from '../Status';
4
+ import { Selector } from './Selector';
5
+ import { ISelectorOption } from './types';
6
+
7
+ const options: Array<ISelectorOption<string>> = [
8
+ {
9
+ label: 'Label 1',
10
+ value: '1',
11
+ icon: 'eye',
12
+ },
13
+ {
14
+ label: 'My label 2',
15
+ value: '2',
16
+ },
17
+ {
18
+ label: (
19
+ <>
20
+ This is Label 3{' '}
21
+ <Status size="xs" color="teal">
22
+ P
23
+ </Status>
24
+ </>
25
+ ),
26
+ value: '3',
27
+ },
28
+ {
29
+ label: 'This is disabled',
30
+ value: '4',
31
+ isDisabled: true,
32
+ },
33
+ ];
34
+
35
+ export default {
36
+ title: 'Controls/Selector',
37
+ component: Selector,
38
+ };
39
+
40
+ const Template: ComponentStory<typeof Selector> = (args) => {
41
+ const [value, setValue] = useState(options[0].value);
42
+ return <Selector {...args} value={value} options={options} onChange={setValue} />;
43
+ };
44
+
45
+ export const Default = Template.bind({});
46
+
47
+ Default.args = {
48
+ size: 'l',
49
+ iconPosition: 'left',
50
+ hasSameOptionsWidth: true,
51
+ isDisabled: false,
52
+ isInvalid: false,
53
+ isRequired: false,
54
+ };
55
+
56
+ Default.argTypes = {};
57
+
58
+ Default.parameters = {
59
+ controls: {
60
+ exclude: ['options', 'value', 'testId', 'onChange'],
61
+ },
62
+ };
@@ -1,164 +1,164 @@
1
- import { CSSProperties } from 'react';
2
- import { isNotEmpty } from '@true-engineering/true-react-platform-helpers';
3
- import { colors, dimensions, ITweakStyles, createThemedStyles } from '../../theme';
4
-
5
- const SELECTOR_TOTAL_GAP = 4;
6
- const SELECTOR_BORDER_WIDTH = 1;
7
- export const SELECTOR_GAP = SELECTOR_TOTAL_GAP - SELECTOR_BORDER_WIDTH;
8
-
9
- export const getSelectorLineStyle = (activeElementData?: {
10
- clientWidth: number;
11
- offsetLeft: number;
12
- }): CSSProperties | undefined =>
13
- isNotEmpty(activeElementData)
14
- ? {
15
- width: activeElementData.clientWidth - SELECTOR_GAP * 2,
16
- transform: `translateX(${activeElementData.offsetLeft}px)`,
17
- }
18
- : undefined;
19
-
20
- export const useStyles = createThemedStyles('Selector', {
21
- root: {
22
- display: 'flex',
23
- alignItems: 'center',
24
- listStyle: 'none',
25
- position: 'relative',
26
- },
27
-
28
- disabled: {
29
- cursor: 'default',
30
-
31
- '& $optionText': {
32
- color: colors.FONT_LABEL,
33
- },
34
- },
35
-
36
- required: {
37
- '&::before': {
38
- top: '50%',
39
- left: -12,
40
- width: 6,
41
- height: 6,
42
- content: '""',
43
- position: 'absolute',
44
- transform: 'translate(0, -50%)',
45
- borderRadius: '50%',
46
- backgroundColor: colors.ORANGE_FOCUS,
47
- },
48
- },
49
-
50
- invalid: {},
51
-
52
- optionWrapper: {
53
- height: '100%',
54
- },
55
-
56
- option: {
57
- display: 'flex',
58
- alignItems: 'center',
59
- justifyContent: 'center',
60
- appearance: 'none',
61
- borderRadius: 0,
62
- padding: 0,
63
- border: 'none',
64
- cursor: 'pointer',
65
- width: '100%',
66
- },
67
-
68
- active: {
69
- cursor: 'default',
70
- },
71
-
72
- optionIcon: {
73
- width: 20,
74
- height: 20,
75
- },
76
-
77
- optionText: {},
78
-
79
- iconFromRight: {
80
- '& $option': {
81
- flexDirection: 'row-reverse',
82
- },
83
- },
84
-
85
- s: {},
86
-
87
- m: {},
88
-
89
- l: {},
90
-
91
- line: {},
92
-
93
- selector: {
94
- display: 'grid',
95
- gridAutoFlow: 'column',
96
- gridAutoColumns: '1fr',
97
- borderRadius: dimensions.BORDER_RADIUS_SMALL,
98
- backgroundColor: colors.BORDER_LIGHT,
99
- width: 'fit-content',
100
- position: 'relative',
101
- border: ['solid', SELECTOR_BORDER_WIDTH, 'transparent'],
102
-
103
- '& $line': {
104
- content: '""',
105
- position: 'absolute',
106
- left: SELECTOR_GAP,
107
- height: `calc(100% - ${SELECTOR_GAP * 2}px)`,
108
- backgroundColor: colors.CLASSIC_WHITE,
109
- borderRadius: dimensions.BORDER_RADIUS_SMALL,
110
- transition: '0.25s ease-in-out',
111
- transitionProperty: 'transform, width',
112
- },
113
-
114
- '&$invalid': {
115
- borderColor: colors.RED_WARNING,
116
- },
117
-
118
- '& $option': {
119
- gap: 6,
120
- position: 'relative',
121
- zIndex: 1,
122
- height: '100%',
123
- color: colors.FONT_MEDIUM,
124
- fontSize: 16,
125
- transition: 'color 0.25s ease-in-out',
126
- background: 'none',
127
-
128
- '&$s': {
129
- padding: [4, 8],
130
- fontSize: 10,
131
- lineHeight: '14px',
132
- },
133
-
134
- '&$m': {
135
- padding: [14, 18],
136
- },
137
-
138
- '&$l': {
139
- padding: [16, 24],
140
- },
141
-
142
- '&:hover, &:focus': {
143
- color: colors.FONT_MAIN,
144
- },
145
-
146
- '&$active': {
147
- color: colors.FONT_MAIN,
148
- },
149
- },
150
- },
151
-
152
- autoWidth: {
153
- '&$selector': {
154
- gridAutoColumns: 'auto',
155
-
156
- '& $line': {
157
- width: 'unset',
158
- transform: 'unset',
159
- },
160
- },
161
- },
162
- });
163
-
164
- export type ISelectorStyles = ITweakStyles<typeof useStyles>;
1
+ import { CSSProperties } from 'react';
2
+ import { isNotEmpty } from '@true-engineering/true-react-platform-helpers';
3
+ import { colors, dimensions, ITweakStyles, createThemedStyles } from '../../theme';
4
+
5
+ const SELECTOR_TOTAL_GAP = 4;
6
+ const SELECTOR_BORDER_WIDTH = 1;
7
+ export const SELECTOR_GAP = SELECTOR_TOTAL_GAP - SELECTOR_BORDER_WIDTH;
8
+
9
+ export const getSelectorLineStyle = (activeElementData?: {
10
+ clientWidth: number;
11
+ offsetLeft: number;
12
+ }): CSSProperties | undefined =>
13
+ isNotEmpty(activeElementData)
14
+ ? {
15
+ width: activeElementData.clientWidth - SELECTOR_GAP * 2,
16
+ transform: `translateX(${activeElementData.offsetLeft}px)`,
17
+ }
18
+ : undefined;
19
+
20
+ export const useStyles = createThemedStyles('Selector', {
21
+ root: {
22
+ display: 'flex',
23
+ alignItems: 'center',
24
+ listStyle: 'none',
25
+ position: 'relative',
26
+ },
27
+
28
+ disabled: {
29
+ cursor: 'default',
30
+
31
+ '& $optionText': {
32
+ color: colors.FONT_LABEL,
33
+ },
34
+ },
35
+
36
+ required: {
37
+ '&::before': {
38
+ top: '50%',
39
+ left: -12,
40
+ width: 6,
41
+ height: 6,
42
+ content: '""',
43
+ position: 'absolute',
44
+ transform: 'translate(0, -50%)',
45
+ borderRadius: '50%',
46
+ backgroundColor: colors.ORANGE_FOCUS,
47
+ },
48
+ },
49
+
50
+ invalid: {},
51
+
52
+ optionWrapper: {
53
+ height: '100%',
54
+ },
55
+
56
+ option: {
57
+ display: 'flex',
58
+ alignItems: 'center',
59
+ justifyContent: 'center',
60
+ appearance: 'none',
61
+ borderRadius: 0,
62
+ padding: 0,
63
+ border: 'none',
64
+ cursor: 'pointer',
65
+ width: '100%',
66
+ },
67
+
68
+ active: {
69
+ cursor: 'default',
70
+ },
71
+
72
+ optionIcon: {
73
+ width: 20,
74
+ height: 20,
75
+ },
76
+
77
+ optionText: {},
78
+
79
+ iconFromRight: {
80
+ '& $option': {
81
+ flexDirection: 'row-reverse',
82
+ },
83
+ },
84
+
85
+ s: {},
86
+
87
+ m: {},
88
+
89
+ l: {},
90
+
91
+ line: {},
92
+
93
+ selector: {
94
+ display: 'grid',
95
+ gridAutoFlow: 'column',
96
+ gridAutoColumns: '1fr',
97
+ borderRadius: dimensions.BORDER_RADIUS_SMALL,
98
+ backgroundColor: colors.BORDER_LIGHT,
99
+ width: 'fit-content',
100
+ position: 'relative',
101
+ border: ['solid', SELECTOR_BORDER_WIDTH, 'transparent'],
102
+
103
+ '& $line': {
104
+ content: '""',
105
+ position: 'absolute',
106
+ left: SELECTOR_GAP,
107
+ height: `calc(100% - ${SELECTOR_GAP * 2}px)`,
108
+ backgroundColor: colors.CLASSIC_WHITE,
109
+ borderRadius: dimensions.BORDER_RADIUS_SMALL,
110
+ transition: '0.25s ease-in-out',
111
+ transitionProperty: 'transform, width',
112
+ },
113
+
114
+ '&$invalid': {
115
+ borderColor: colors.RED_WARNING,
116
+ },
117
+
118
+ '& $option': {
119
+ gap: 6,
120
+ position: 'relative',
121
+ zIndex: 1,
122
+ height: '100%',
123
+ color: colors.FONT_MEDIUM,
124
+ fontSize: 16,
125
+ transition: 'color 0.25s ease-in-out',
126
+ background: 'none',
127
+
128
+ '&$s': {
129
+ padding: [4, 8],
130
+ fontSize: 10,
131
+ lineHeight: '14px',
132
+ },
133
+
134
+ '&$m': {
135
+ padding: [14, 18],
136
+ },
137
+
138
+ '&$l': {
139
+ padding: [16, 24],
140
+ },
141
+
142
+ '&:hover, &:focus': {
143
+ color: colors.FONT_MAIN,
144
+ },
145
+
146
+ '&$active': {
147
+ color: colors.FONT_MAIN,
148
+ },
149
+ },
150
+ },
151
+
152
+ autoWidth: {
153
+ '&$selector': {
154
+ gridAutoColumns: 'auto',
155
+
156
+ '& $line': {
157
+ width: 'unset',
158
+ transform: 'unset',
159
+ },
160
+ },
161
+ },
162
+ });
163
+
164
+ export type ISelectorStyles = ITweakStyles<typeof useStyles>;