@true-engineering/true-react-common-ui-kit 3.32.0 → 3.33.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 (99) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +15 -0
  3. package/dist/components/FlexibleTable/FlexibleTable.stories.d.ts +2 -0
  4. package/dist/components/FlexibleTable/components/FlexibleTableCell/FlexibleTableCell.d.ts +1 -1
  5. package/dist/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.d.ts +2 -1
  6. package/dist/components/SearchInput/SearchInput.stories.d.ts +1 -1
  7. package/dist/components/WithPopup/WithPopup.styles.d.ts +1 -1
  8. package/dist/components/WithPopup/types.d.ts +9 -3
  9. package/dist/true-react-common-ui-kit.js +144 -171
  10. package/dist/true-react-common-ui-kit.js.map +1 -1
  11. package/dist/true-react-common-ui-kit.umd.cjs +143 -170
  12. package/dist/true-react-common-ui-kit.umd.cjs.map +1 -1
  13. package/dist/types.d.ts +7 -2
  14. package/package.json +98 -98
  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/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/Description/Description.stories.tsx +27 -27
  23. package/src/components/Description/Description.tsx +61 -61
  24. package/src/components/FiltersPane/components/FilterValueView/FilterValueView.tsx +166 -166
  25. package/src/components/FiltersPane/components/FilterWithDates/FilterWithDates.tsx +210 -210
  26. package/src/components/FiltersPane/components/FilterWithPeriod/FilterWithPeriod.tsx +177 -177
  27. package/src/components/FiltersPane/components/FilterWrapper/FilterWrapper.tsx +2 -2
  28. package/src/components/Flag/Flag.stories.tsx +29 -29
  29. package/src/components/Flag/Flag.tsx +26 -26
  30. package/src/components/Flag/augment.d.ts +1 -1
  31. package/src/components/FlexibleTable/FlexibleTable.stories.tsx +14 -1
  32. package/src/components/FlexibleTable/FlexibleTable.tsx +22 -10
  33. package/src/components/FlexibleTable/components/FlexibleTableCell/FlexibleTableCell.styles.ts +39 -38
  34. package/src/components/FlexibleTable/components/FlexibleTableCell/FlexibleTableCell.tsx +4 -2
  35. package/src/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.styles.ts +25 -25
  36. package/src/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.tsx +2 -1
  37. package/src/components/FlexibleTable/types.ts +70 -70
  38. package/src/components/Icon/Icon.stories.tsx +86 -86
  39. package/src/components/Icon/complexIcons/augment.d.ts +1 -1
  40. package/src/components/Icon/complexIcons/avatarGreen.svg +57 -57
  41. package/src/components/Icon/complexIcons/index.ts +1 -1
  42. package/src/components/Icon/icons-list.ts +855 -856
  43. package/src/components/IncrementInput/IncrementInput.tsx +105 -105
  44. package/src/components/Input/types.ts +32 -32
  45. package/src/components/List/List.tsx +3 -1
  46. package/src/components/Modal/Modal.stories.tsx +105 -105
  47. package/src/components/MultiSelect/MultiSelect.stories.tsx +46 -46
  48. package/src/components/MultiSelect/MultiSelect.tsx +106 -106
  49. package/src/components/MultiSelect/components/MultiSelectInput/MultiSelectInput.tsx +53 -53
  50. package/src/components/NewMoreMenu/NewMoreMenu.tsx +5 -5
  51. package/src/components/Notification/Notification.stories.tsx +55 -55
  52. package/src/components/Notification/Notification.styles.ts +57 -57
  53. package/src/components/Notification/Notification.tsx +77 -77
  54. package/src/components/Notification/types.ts +1 -1
  55. package/src/components/NumberInput/NumberInput.tsx +137 -137
  56. package/src/components/NumberInput/index.ts +1 -1
  57. package/src/components/PhoneInput/PhoneInput.tsx +214 -214
  58. package/src/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.tsx +155 -155
  59. package/src/components/PhoneInput/types.ts +16 -16
  60. package/src/components/RadioButton/RadioButton.stories.tsx +46 -46
  61. package/src/components/RadioButton/RadioButton.tsx +57 -57
  62. package/src/components/ScrollIntoViewIfNeeded/index.ts +1 -1
  63. package/src/components/Select/Select.stories.tsx +235 -235
  64. package/src/components/Select/constants.ts +2 -2
  65. package/src/components/Select/types.ts +1 -1
  66. package/src/components/Selector/Selector.stories.tsx +62 -62
  67. package/src/components/Selector/Selector.tsx +115 -115
  68. package/src/components/Selector/index.ts +2 -2
  69. package/src/components/Selector/types.ts +12 -12
  70. package/src/components/Skeleton/Skeleton.stories.tsx +19 -19
  71. package/src/components/SmartInput/SmartInput.tsx +134 -134
  72. package/src/components/Status/Status.stories.tsx +73 -73
  73. package/src/components/Status/Status.styles.ts +143 -143
  74. package/src/components/Status/Status.tsx +49 -49
  75. package/src/components/Status/constants.ts +11 -11
  76. package/src/components/Status/index.ts +3 -3
  77. package/src/components/Status/types.ts +5 -5
  78. package/src/components/Switch/Switch.stories.tsx +40 -40
  79. package/src/components/Switch/Switch.tsx +75 -75
  80. package/src/components/TextWithInfo/TextWithInfo.stories.tsx +53 -53
  81. package/src/components/TextWithInfo/TextWithInfo.tsx +62 -62
  82. package/src/components/TextWithTooltip/TextWithTooltip.stories.tsx +58 -58
  83. package/src/components/ThemedPreloader/ThemedPreloader.stories.tsx +41 -41
  84. package/src/components/ThemedPreloader/ThemedPreloader.tsx +54 -54
  85. package/src/components/ThemedPreloader/components/DefaultPreloader/index.ts +1 -1
  86. package/src/components/Toaster/Toaster.stories.tsx +30 -30
  87. package/src/components/Tooltip/Tooltip.stories.tsx +19 -19
  88. package/src/components/Tooltip/Tooltip.tsx +35 -35
  89. package/src/components/Tooltip/types.ts +1 -1
  90. package/src/components/WithPopup/WithPopup.stories.tsx +3 -3
  91. package/src/components/WithPopup/WithPopup.styles.ts +2 -0
  92. package/src/components/WithPopup/WithPopup.tsx +18 -8
  93. package/src/components/WithPopup/types.ts +11 -3
  94. package/src/helpers/popper-helpers.ts +17 -17
  95. package/src/hooks/use-dropdown.ts +84 -84
  96. package/src/hooks/use-is-mounted.ts +15 -15
  97. package/src/theme/helpers.ts +76 -76
  98. package/src/types.ts +10 -2
  99. package/src/vite-env.d.ts +1 -1
package/dist/types.d.ts CHANGED
@@ -1,13 +1,18 @@
1
1
  import { FocusEventHandler, KeyboardEventHandler, MouseEventHandler, PointerEventHandler, ReactNode } from 'react';
2
2
  import { Modifier, Placement } from 'react-overlays/usePopper';
3
+ export interface ITestIdProps {
4
+ testId?: string;
5
+ }
3
6
  export interface IDataAttributes {
4
7
  [key: string]: unknown;
5
8
  }
6
- export interface ICommonProps<TweakStyles> {
9
+ export interface IDataAttributesProps extends ITestIdProps {
7
10
  data?: IDataAttributes;
8
- testId?: string;
11
+ }
12
+ export interface ITweakStylesProps<TweakStyles> {
9
13
  tweakStyles?: TweakStyles;
10
14
  }
15
+ export type ICommonProps<TweakStyles> = IDataAttributesProps & ITweakStylesProps<TweakStyles>;
11
16
  export interface IDropdownWithPopperOptions {
12
17
  shouldUsePopper?: boolean;
13
18
  shouldRenderInBody?: boolean;
package/package.json CHANGED
@@ -1,98 +1,98 @@
1
- {
2
- "name": "@true-engineering/true-react-common-ui-kit",
3
- "version": "3.32.0",
4
- "description": "True Engineering React UI Kit with theming support",
5
- "author": "True Engineering (https://trueengineering.ru)",
6
- "keywords": [
7
- "TE",
8
- "True Engineering",
9
- "UI Kit with theming support",
10
- "UI Kit"
11
- ],
12
- "homepage": "",
13
- "license": "Apache-2.0",
14
- "type": "module",
15
- "types": "dist/index.d.ts",
16
- "main": "dist/true-react-common-ui-kit.umd.cjs",
17
- "module": "./dist/true-react-common-ui-kit.js",
18
- "directories": {
19
- "lib": "src"
20
- },
21
- "publishConfig": {
22
- "access": "public"
23
- },
24
- "files": [
25
- "src",
26
- "dist"
27
- ],
28
- "exports": {
29
- ".": {
30
- "require": "./dist/true-react-common-ui-kit.umd.cjs",
31
- "import": "./dist/true-react-common-ui-kit.js"
32
- },
33
- "./dist/style.css": "./dist/style.css",
34
- "./src": "./src/index.ts"
35
- },
36
- "scripts": {
37
- "build": "tsc && vite build",
38
- "lint": "eslint \"**/*.{js,jsx,ts,tsx}\"",
39
- "format": "prettier --write \"**/*.{js,jsx,css,json,ts,tsx}\"",
40
- "format:check": "prettier --check \"**/*.{js,jsx,css,json,ts,tsx}\"",
41
- "full-check": "yarn format:check && yarn lint",
42
- "types-check": "tsc --noEmit"
43
- },
44
- "dependencies": {
45
- "@floating-ui/react": "0.26.12",
46
- "@true-engineering/true-react-platform-helpers": "0.4.4",
47
- "clsx": "1.2.1",
48
- "country-flag-icons": "1.5.5",
49
- "date-fns": "2.29.3",
50
- "filesize": "10.1.1",
51
- "hex-to-rgba": "2.0.1",
52
- "jss": "10.10.0",
53
- "lodash-es": "4.17.21",
54
- "react": "18.2.0",
55
- "react-datepicker": "4.25.0",
56
- "react-dom": "18.2.0",
57
- "react-input-mask": "3.0.0-alpha.2",
58
- "react-jss": "10.10.0",
59
- "react-overlays": "5.2.1",
60
- "react-remove-scroll": "2.5.6",
61
- "react-transition-group": "4.4.5",
62
- "scroll-into-view-if-needed": "3.0.6",
63
- "ts-debounce": "4.0.0"
64
- },
65
- "devDependencies": {
66
- "@babel/core": "7.20.12",
67
- "@storybook/addon-essentials": "7.6.17",
68
- "@storybook/blocks": "7.6.17",
69
- "@storybook/react": "7.6.17",
70
- "@storybook/react-vite": "7.6.17",
71
- "@storybook/test": "7.6.17",
72
- "@swc/core": "^1.3.30",
73
- "@trivago/prettier-plugin-sort-imports": "4.3.0",
74
- "@types/lodash-es": "4.17.11",
75
- "@types/react": "18.2.79",
76
- "@types/react-datepicker": "4.19.4",
77
- "@types/react-dom": "18.2.25",
78
- "@types/react-input-mask": "3.0.2",
79
- "@types/react-transition-group": "4.4.10",
80
- "@typescript-eslint/eslint-plugin": "5.48.2",
81
- "@typescript-eslint/parser": "5.48.2",
82
- "@vitejs/plugin-react": "3.0.0",
83
- "eslint": "8.36.0",
84
- "eslint-config-prettier": "8.7.0",
85
- "eslint-plugin-import": "2.29.0",
86
- "eslint-plugin-react": "7.32.2",
87
- "eslint-plugin-react-hooks": "4.6.0",
88
- "prettier": "2.8.3",
89
- "rollup-plugin-swc3": "0.3.0",
90
- "typescript": "4.9.3",
91
- "unplugin-swc": "1.3.2",
92
- "vite": "4.0.0",
93
- "vite-plugin-dts": "3.7.3"
94
- },
95
- "resolutions": {
96
- "strip-ansi": "6.0.1"
97
- }
98
- }
1
+ {
2
+ "name": "@true-engineering/true-react-common-ui-kit",
3
+ "version": "3.33.1",
4
+ "description": "True Engineering React UI Kit with theming support",
5
+ "author": "True Engineering (https://trueengineering.ru)",
6
+ "keywords": [
7
+ "TE",
8
+ "True Engineering",
9
+ "UI Kit with theming support",
10
+ "UI Kit"
11
+ ],
12
+ "homepage": "",
13
+ "license": "Apache-2.0",
14
+ "type": "module",
15
+ "types": "dist/index.d.ts",
16
+ "main": "dist/true-react-common-ui-kit.umd.cjs",
17
+ "module": "./dist/true-react-common-ui-kit.js",
18
+ "directories": {
19
+ "lib": "src"
20
+ },
21
+ "publishConfig": {
22
+ "access": "public"
23
+ },
24
+ "files": [
25
+ "src",
26
+ "dist"
27
+ ],
28
+ "exports": {
29
+ ".": {
30
+ "require": "./dist/true-react-common-ui-kit.umd.cjs",
31
+ "import": "./dist/true-react-common-ui-kit.js"
32
+ },
33
+ "./dist/style.css": "./dist/style.css",
34
+ "./src": "./src/index.ts"
35
+ },
36
+ "scripts": {
37
+ "build": "tsc && vite build",
38
+ "lint": "eslint \"**/*.{js,jsx,ts,tsx}\"",
39
+ "format": "prettier --write \"**/*.{js,jsx,css,json,ts,tsx}\"",
40
+ "format:check": "prettier --check \"**/*.{js,jsx,css,json,ts,tsx}\"",
41
+ "full-check": "yarn format:check && yarn lint",
42
+ "types-check": "tsc --noEmit"
43
+ },
44
+ "dependencies": {
45
+ "@floating-ui/react": "0.26.12",
46
+ "@true-engineering/true-react-platform-helpers": "0.4.4",
47
+ "clsx": "1.2.1",
48
+ "country-flag-icons": "1.5.5",
49
+ "date-fns": "2.29.3",
50
+ "filesize": "10.1.1",
51
+ "hex-to-rgba": "2.0.1",
52
+ "jss": "10.10.0",
53
+ "lodash-es": "4.17.21",
54
+ "react": "18.2.0",
55
+ "react-datepicker": "4.25.0",
56
+ "react-dom": "18.2.0",
57
+ "react-input-mask": "3.0.0-alpha.2",
58
+ "react-jss": "10.10.0",
59
+ "react-overlays": "5.2.1",
60
+ "react-remove-scroll": "2.5.6",
61
+ "react-transition-group": "4.4.5",
62
+ "scroll-into-view-if-needed": "3.0.6",
63
+ "ts-debounce": "4.0.0"
64
+ },
65
+ "devDependencies": {
66
+ "@babel/core": "7.20.12",
67
+ "@storybook/addon-essentials": "7.6.17",
68
+ "@storybook/blocks": "7.6.17",
69
+ "@storybook/react": "7.6.17",
70
+ "@storybook/react-vite": "7.6.17",
71
+ "@storybook/test": "7.6.17",
72
+ "@swc/core": "^1.3.30",
73
+ "@trivago/prettier-plugin-sort-imports": "4.3.0",
74
+ "@types/lodash-es": "4.17.11",
75
+ "@types/react": "18.2.79",
76
+ "@types/react-datepicker": "4.19.4",
77
+ "@types/react-dom": "18.2.25",
78
+ "@types/react-input-mask": "3.0.2",
79
+ "@types/react-transition-group": "4.4.10",
80
+ "@typescript-eslint/eslint-plugin": "5.48.2",
81
+ "@typescript-eslint/parser": "5.48.2",
82
+ "@vitejs/plugin-react": "3.0.0",
83
+ "eslint": "8.36.0",
84
+ "eslint-config-prettier": "8.7.0",
85
+ "eslint-plugin-import": "2.29.0",
86
+ "eslint-plugin-react": "7.32.2",
87
+ "eslint-plugin-react-hooks": "4.6.0",
88
+ "prettier": "2.8.3",
89
+ "rollup-plugin-swc3": "0.3.0",
90
+ "typescript": "4.9.3",
91
+ "unplugin-swc": "1.3.2",
92
+ "vite": "4.0.0",
93
+ "vite-plugin-dts": "3.7.3"
94
+ },
95
+ "resolutions": {
96
+ "strip-ansi": "6.0.1"
97
+ }
98
+ }
@@ -1,32 +1,32 @@
1
- import { ComponentStory } from '@storybook/react';
2
- import { AccountInfo } from './AccountInfo';
3
-
4
- export default {
5
- title: 'Data Display/AccountInfo',
6
- component: AccountInfo,
7
- };
8
-
9
- const Template: ComponentStory<typeof AccountInfo> = (args) => (
10
- <div
11
- style={{
12
- display: 'flex',
13
- alignItems: 'center',
14
- justifyContent: 'center',
15
- width: 400,
16
- height: 200,
17
- border: '1px dotted rgba(0, 0, 0, 0.2)',
18
- }}
19
- >
20
- <AccountInfo {...args} options={[{ item: 'Logout', onClick: () => console.log('logout') }]} />
21
- </div>
22
- );
23
-
24
- export const Default = Template.bind({});
25
- Default.args = {
26
- accountName: 'Ivan Ivanov',
27
- };
28
- Default.parameters = {
29
- controls: {
30
- exclude: ['data', 'options', 'avatar'],
31
- },
32
- };
1
+ import { ComponentStory } from '@storybook/react';
2
+ import { AccountInfo } from './AccountInfo';
3
+
4
+ export default {
5
+ title: 'Data Display/AccountInfo',
6
+ component: AccountInfo,
7
+ };
8
+
9
+ const Template: ComponentStory<typeof AccountInfo> = (args) => (
10
+ <div
11
+ style={{
12
+ display: 'flex',
13
+ alignItems: 'center',
14
+ justifyContent: 'center',
15
+ width: 400,
16
+ height: 200,
17
+ border: '1px dotted rgba(0, 0, 0, 0.2)',
18
+ }}
19
+ >
20
+ <AccountInfo {...args} options={[{ item: 'Logout', onClick: () => console.log('logout') }]} />
21
+ </div>
22
+ );
23
+
24
+ export const Default = Template.bind({});
25
+ Default.args = {
26
+ accountName: 'Ivan Ivanov',
27
+ };
28
+ Default.parameters = {
29
+ controls: {
30
+ exclude: ['data', 'options', 'avatar'],
31
+ },
32
+ };
@@ -1,80 +1,80 @@
1
- import { FC, ReactNode, useRef, useState, MouseEvent } from 'react';
2
- import { CSSTransition } from 'react-transition-group';
3
- import clsx from 'clsx';
4
- import { addDataTestId } from '@true-engineering/true-react-platform-helpers';
5
- import { addDataAttributes } from '../../helpers';
6
- import { useOnClickOutsideWithRef, useTweakStyles } from '../../hooks';
7
- import { ICommonProps } from '../../types';
8
- import { Icon } from '../Icon';
9
- import { IListProps, List } from '../List';
10
- import { ANIMATION_TIMEOUT } from './constants';
11
- import { useStyles, IAccountInfoStyles } from './AccountInfo.styles';
12
-
13
- export interface IAccountInfoProps extends ICommonProps<IAccountInfoStyles> {
14
- /** @default `<Icon type='avatar' />` */
15
- avatar?: ReactNode;
16
- accountName: ReactNode;
17
- options: IListProps['items'];
18
- }
19
-
20
- export const AccountInfo: FC<IAccountInfoProps> = ({
21
- data,
22
- testId,
23
- avatar,
24
- tweakStyles,
25
- accountName,
26
- options,
27
- }) => {
28
- const classes = useStyles({ theme: tweakStyles });
29
-
30
- const tweakListStyles = useTweakStyles({
31
- tweakStyles,
32
- className: 'tweakList',
33
- currentComponentName: 'AccountInfo',
34
- });
35
-
36
- const nameRef = useRef<HTMLDivElement>(null);
37
- const dropdownRef = useRef<HTMLDivElement>(null);
38
-
39
- const [isMenuOpen, setIsMenuOpen] = useState(false);
40
-
41
- const toggleMenu = (event: MouseEvent<HTMLDivElement>) => {
42
- event.stopPropagation();
43
- setIsMenuOpen((v) => !v);
44
- };
45
-
46
- useOnClickOutsideWithRef(dropdownRef, () => setIsMenuOpen(false), nameRef);
47
-
48
- return (
49
- <div className={classes.root} {...addDataTestId(testId)} {...addDataAttributes(data)}>
50
- {avatar ?? (
51
- <div className={classes.avatarIcon}>
52
- <Icon type="avatar" />
53
- </div>
54
- )}
55
- <div ref={nameRef} className={classes.account} onClick={toggleMenu}>
56
- <div className={clsx(classes.accountName, isMenuOpen && classes.accountNameOpened)}>
57
- {accountName}
58
- </div>
59
- <div className={clsx(classes.accountChevron, isMenuOpen && classes.accountChevronOpened)}>
60
- <Icon type="chevron-down-small" />
61
- </div>
62
- <CSSTransition
63
- in={isMenuOpen}
64
- timeout={ANIMATION_TIMEOUT}
65
- unmountOnExit
66
- classNames={{
67
- enter: classes['slide-up-enter'],
68
- enterActive: classes['slide-up-enter-active'],
69
- exit: classes['slide-up-exit'],
70
- exitActive: classes['slide-up-exit-active'],
71
- }}
72
- >
73
- <div ref={dropdownRef} className={classes.accountMenu} onClick={toggleMenu}>
74
- <List items={options} tweakStyles={tweakListStyles} />
75
- </div>
76
- </CSSTransition>
77
- </div>
78
- </div>
79
- );
80
- };
1
+ import { FC, ReactNode, useRef, useState, MouseEvent } from 'react';
2
+ import { CSSTransition } from 'react-transition-group';
3
+ import clsx from 'clsx';
4
+ import { addDataTestId } from '@true-engineering/true-react-platform-helpers';
5
+ import { addDataAttributes } from '../../helpers';
6
+ import { useOnClickOutsideWithRef, useTweakStyles } from '../../hooks';
7
+ import { ICommonProps } from '../../types';
8
+ import { Icon } from '../Icon';
9
+ import { IListProps, List } from '../List';
10
+ import { ANIMATION_TIMEOUT } from './constants';
11
+ import { useStyles, IAccountInfoStyles } from './AccountInfo.styles';
12
+
13
+ export interface IAccountInfoProps extends ICommonProps<IAccountInfoStyles> {
14
+ /** @default `<Icon type='avatar' />` */
15
+ avatar?: ReactNode;
16
+ accountName: ReactNode;
17
+ options: IListProps['items'];
18
+ }
19
+
20
+ export const AccountInfo: FC<IAccountInfoProps> = ({
21
+ data,
22
+ testId,
23
+ avatar,
24
+ tweakStyles,
25
+ accountName,
26
+ options,
27
+ }) => {
28
+ const classes = useStyles({ theme: tweakStyles });
29
+
30
+ const tweakListStyles = useTweakStyles({
31
+ tweakStyles,
32
+ className: 'tweakList',
33
+ currentComponentName: 'AccountInfo',
34
+ });
35
+
36
+ const nameRef = useRef<HTMLDivElement>(null);
37
+ const dropdownRef = useRef<HTMLDivElement>(null);
38
+
39
+ const [isMenuOpen, setIsMenuOpen] = useState(false);
40
+
41
+ const toggleMenu = (event: MouseEvent<HTMLDivElement>) => {
42
+ event.stopPropagation();
43
+ setIsMenuOpen((v) => !v);
44
+ };
45
+
46
+ useOnClickOutsideWithRef(dropdownRef, () => setIsMenuOpen(false), nameRef);
47
+
48
+ return (
49
+ <div className={classes.root} {...addDataTestId(testId)} {...addDataAttributes(data)}>
50
+ {avatar ?? (
51
+ <div className={classes.avatarIcon}>
52
+ <Icon type="avatar" />
53
+ </div>
54
+ )}
55
+ <div ref={nameRef} className={classes.account} onClick={toggleMenu}>
56
+ <div className={clsx(classes.accountName, isMenuOpen && classes.accountNameOpened)}>
57
+ {accountName}
58
+ </div>
59
+ <div className={clsx(classes.accountChevron, isMenuOpen && classes.accountChevronOpened)}>
60
+ <Icon type="chevron-down-small" />
61
+ </div>
62
+ <CSSTransition
63
+ in={isMenuOpen}
64
+ timeout={ANIMATION_TIMEOUT}
65
+ unmountOnExit
66
+ classNames={{
67
+ enter: classes['slide-up-enter'],
68
+ enterActive: classes['slide-up-enter-active'],
69
+ exit: classes['slide-up-exit'],
70
+ exitActive: classes['slide-up-exit-active'],
71
+ }}
72
+ >
73
+ <div ref={dropdownRef} className={classes.accountMenu} onClick={toggleMenu}>
74
+ <List items={options} tweakStyles={tweakListStyles} />
75
+ </div>
76
+ </CSSTransition>
77
+ </div>
78
+ </div>
79
+ );
80
+ };
@@ -1,21 +1,21 @@
1
- import { ComponentStory } from '@storybook/react';
2
- import { AddButton } from './AddButton';
3
-
4
- export default {
5
- title: 'Buttons/AddButton',
6
- component: AddButton,
7
- };
8
-
9
- const Template: ComponentStory<typeof AddButton> = (args) => (
10
- <AddButton {...args} onClick={console.log} />
11
- );
12
-
13
- export const Default = Template.bind({});
14
-
15
- Default.args = {
16
- text: 'Добавить билет',
17
- isDisabled: false,
18
- isFullWidth: false,
19
- };
20
-
21
- Default.parameters = { controls: { exclude: ['onClick'] } };
1
+ import { ComponentStory } from '@storybook/react';
2
+ import { AddButton } from './AddButton';
3
+
4
+ export default {
5
+ title: 'Buttons/AddButton',
6
+ component: AddButton,
7
+ };
8
+
9
+ const Template: ComponentStory<typeof AddButton> = (args) => (
10
+ <AddButton {...args} onClick={console.log} />
11
+ );
12
+
13
+ export const Default = Template.bind({});
14
+
15
+ Default.args = {
16
+ text: 'Добавить билет',
17
+ isDisabled: false,
18
+ isFullWidth: false,
19
+ };
20
+
21
+ Default.parameters = { controls: { exclude: ['onClick'] } };
@@ -1,52 +1,52 @@
1
- import { FC } from 'react';
2
- import clsx from 'clsx';
3
- import { addDataTestId } from '@true-engineering/true-react-platform-helpers';
4
- import { addDataAttributes } from '../../helpers';
5
- import { ICommonProps } from '../../types';
6
- import { Icon } from '../Icon';
7
- import { useStyles, IAddButtonStyles } from './AddButton.styles';
8
-
9
- export interface IAddButtonProps extends ICommonProps<IAddButtonStyles> {
10
- text: string;
11
- /** @default 'button' */
12
- type?: 'submit' | 'button';
13
- /** @default false */
14
- isDisabled?: boolean;
15
- /** @default false */
16
- isFullWidth?: boolean;
17
- onClick?: () => void | Promise<void>;
18
- }
19
-
20
- // TODO: Весьма сомнительный компонент
21
- export const AddButton: FC<IAddButtonProps> = ({
22
- text,
23
- type = 'button',
24
- isDisabled = false,
25
- onClick,
26
- isFullWidth = false,
27
- data,
28
- testId,
29
- tweakStyles,
30
- }) => {
31
- const classes = useStyles({ theme: tweakStyles });
32
-
33
- return (
34
- <button
35
- type={type}
36
- className={clsx(
37
- classes.root,
38
- isDisabled && classes.disabled,
39
- isFullWidth && classes.fullWidth,
40
- )}
41
- onClick={!isDisabled ? onClick : undefined}
42
- disabled={isDisabled}
43
- {...addDataTestId(testId)}
44
- {...addDataAttributes(data)}
45
- >
46
- <div className={classes.icon}>
47
- <Icon type="plus" />
48
- </div>
49
- <div>{text}</div>
50
- </button>
51
- );
52
- };
1
+ import { FC } from 'react';
2
+ import clsx from 'clsx';
3
+ import { addDataTestId } from '@true-engineering/true-react-platform-helpers';
4
+ import { addDataAttributes } from '../../helpers';
5
+ import { ICommonProps } from '../../types';
6
+ import { Icon } from '../Icon';
7
+ import { useStyles, IAddButtonStyles } from './AddButton.styles';
8
+
9
+ export interface IAddButtonProps extends ICommonProps<IAddButtonStyles> {
10
+ text: string;
11
+ /** @default 'button' */
12
+ type?: 'submit' | 'button';
13
+ /** @default false */
14
+ isDisabled?: boolean;
15
+ /** @default false */
16
+ isFullWidth?: boolean;
17
+ onClick?: () => void | Promise<void>;
18
+ }
19
+
20
+ // TODO: Весьма сомнительный компонент
21
+ export const AddButton: FC<IAddButtonProps> = ({
22
+ text,
23
+ type = 'button',
24
+ isDisabled = false,
25
+ onClick,
26
+ isFullWidth = false,
27
+ data,
28
+ testId,
29
+ tweakStyles,
30
+ }) => {
31
+ const classes = useStyles({ theme: tweakStyles });
32
+
33
+ return (
34
+ <button
35
+ type={type}
36
+ className={clsx(
37
+ classes.root,
38
+ isDisabled && classes.disabled,
39
+ isFullWidth && classes.fullWidth,
40
+ )}
41
+ onClick={!isDisabled ? onClick : undefined}
42
+ disabled={isDisabled}
43
+ {...addDataTestId(testId)}
44
+ {...addDataAttributes(data)}
45
+ >
46
+ <div className={classes.icon}>
47
+ <Icon type="plus" />
48
+ </div>
49
+ <div>{text}</div>
50
+ </button>
51
+ );
52
+ };
@@ -1,7 +1,7 @@
1
- import { Colors } from './Colors';
2
-
3
- export default {
4
- title: 'Data Display/Colors',
5
- };
6
-
7
- export const Default = (): JSX.Element => <Colors />;
1
+ import { Colors } from './Colors';
2
+
3
+ export default {
4
+ title: 'Data Display/Colors',
5
+ };
6
+
7
+ export const Default = (): JSX.Element => <Colors />;