@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,134 +1,134 @@
1
- import { useState, useEffect, forwardRef, FormEvent, ClipboardEvent } from 'react';
2
- import { Input, IInputProps } from '../Input';
3
- import { CharactersMap, SMART_INPUT_REGEX_MAP, TransliterationMap } from './constants';
4
- import { transformCaseSensitive } from './helpers';
5
- import { ISmartType } from './types';
6
-
7
- export interface ISmartInputProps extends IInputProps {
8
- /** @default false */
9
- isUpperCase?: boolean;
10
- /** @default 'default' */
11
- smartType?: ISmartType;
12
- regExp?: RegExp;
13
- onChange: (value: string) => void;
14
- }
15
-
16
- export const SmartInput = forwardRef<HTMLInputElement, ISmartInputProps>(
17
- (
18
- {
19
- onChange,
20
- isUpperCase = false,
21
- smartType = 'default',
22
- regExp,
23
- value = '',
24
- maxLength,
25
- ...rest
26
- },
27
- ref,
28
- ) => {
29
- const [currentValue, setCurrentValue] = useState<string>(getUpperCaseIfNeeded(value));
30
- const [caretPosition, setCaretPosition] = useState<number | null>(null);
31
- const [input, setInput] = useState<HTMLInputElement | null>(null);
32
- const regex = regExp || SMART_INPUT_REGEX_MAP[smartType];
33
-
34
- useEffect(() => {
35
- if (input && input.type !== 'email' && input.selectionStart !== caretPosition) {
36
- input.selectionStart = caretPosition;
37
- input.selectionEnd = caretPosition;
38
- }
39
- }, [caretPosition]);
40
-
41
- useEffect(() => {
42
- setCurrentValue(getUpperCaseIfNeeded(value));
43
- }, [value]);
44
-
45
- function getUpperCaseIfNeeded(str: string) {
46
- return isUpperCase ? str.toUpperCase() : str;
47
- }
48
-
49
- const handleChange = (str: string, event?: FormEvent<HTMLInputElement>) => {
50
- const mappedValue = str
51
- .split('')
52
- .map((symbol) =>
53
- regex.test(symbol)
54
- ? symbol
55
- : transformCaseSensitive(
56
- smartType,
57
- smartType !== 'email' ? CharactersMap : { ...CharactersMap, '"': '@' },
58
- symbol,
59
- ),
60
- )
61
- .filter((symbol) => regex.test(symbol))
62
- .join('');
63
- const domElement = event?.currentTarget;
64
-
65
- if (domElement) {
66
- if (!input) {
67
- setInput(domElement);
68
- }
69
-
70
- setCurrentValue(getUpperCaseIfNeeded(mappedValue));
71
- onChange(getUpperCaseIfNeeded(mappedValue));
72
-
73
- if (mappedValue !== currentValue) {
74
- setCaretPosition(domElement.selectionStart);
75
- } else {
76
- setCaretPosition(domElement.selectionStart ? domElement.selectionStart - 1 : null);
77
- }
78
- }
79
- };
80
-
81
- const handlePaste = (event: ClipboardEvent<HTMLInputElement>) => {
82
- const str = event.clipboardData.getData('text/plain').split('').join('');
83
- const domElement = event.currentTarget;
84
-
85
- if (!input) {
86
- setInput(domElement);
87
- }
88
-
89
- event.preventDefault();
90
- const selectionStart = domElement.selectionStart ?? 0;
91
- const selectionEnd = domElement.selectionEnd ?? 0;
92
-
93
- let mappedValue = str
94
- .split('')
95
- .map((symbol) =>
96
- regex.test(symbol)
97
- ? symbol
98
- : transformCaseSensitive(smartType, TransliterationMap, symbol),
99
- )
100
- .filter((letter) => regex.test(letter))
101
- .join('');
102
-
103
- const newValueLength =
104
- mappedValue.length + currentValue.length - (selectionEnd - selectionStart);
105
-
106
- if (maxLength !== undefined && maxLength >= 0 && newValueLength > maxLength) {
107
- const validMappedValueLength = mappedValue.length - (newValueLength - maxLength);
108
-
109
- mappedValue = mappedValue.substring(0, validMappedValueLength);
110
- }
111
-
112
- const newValue = getUpperCaseIfNeeded(
113
- `${currentValue?.substring(0, selectionStart)}${mappedValue}${currentValue?.substring(
114
- selectionEnd,
115
- )}`,
116
- );
117
-
118
- setCaretPosition(selectionStart + mappedValue.length);
119
- setCurrentValue(newValue);
120
- onChange(newValue);
121
- };
122
-
123
- return (
124
- <Input
125
- {...rest}
126
- ref={ref}
127
- maxLength={maxLength}
128
- onChange={handleChange}
129
- onPaste={handlePaste}
130
- value={currentValue}
131
- />
132
- );
133
- },
134
- );
1
+ import { useState, useEffect, forwardRef, FormEvent, ClipboardEvent } from 'react';
2
+ import { Input, IInputProps } from '../Input';
3
+ import { CharactersMap, SMART_INPUT_REGEX_MAP, TransliterationMap } from './constants';
4
+ import { transformCaseSensitive } from './helpers';
5
+ import { ISmartType } from './types';
6
+
7
+ export interface ISmartInputProps extends IInputProps {
8
+ /** @default false */
9
+ isUpperCase?: boolean;
10
+ /** @default 'default' */
11
+ smartType?: ISmartType;
12
+ regExp?: RegExp;
13
+ onChange: (value: string) => void;
14
+ }
15
+
16
+ export const SmartInput = forwardRef<HTMLInputElement, ISmartInputProps>(
17
+ (
18
+ {
19
+ onChange,
20
+ isUpperCase = false,
21
+ smartType = 'default',
22
+ regExp,
23
+ value = '',
24
+ maxLength,
25
+ ...rest
26
+ },
27
+ ref,
28
+ ) => {
29
+ const [currentValue, setCurrentValue] = useState<string>(getUpperCaseIfNeeded(value));
30
+ const [caretPosition, setCaretPosition] = useState<number | null>(null);
31
+ const [input, setInput] = useState<HTMLInputElement | null>(null);
32
+ const regex = regExp || SMART_INPUT_REGEX_MAP[smartType];
33
+
34
+ useEffect(() => {
35
+ if (input && input.type !== 'email' && input.selectionStart !== caretPosition) {
36
+ input.selectionStart = caretPosition;
37
+ input.selectionEnd = caretPosition;
38
+ }
39
+ }, [caretPosition]);
40
+
41
+ useEffect(() => {
42
+ setCurrentValue(getUpperCaseIfNeeded(value));
43
+ }, [value]);
44
+
45
+ function getUpperCaseIfNeeded(str: string) {
46
+ return isUpperCase ? str.toUpperCase() : str;
47
+ }
48
+
49
+ const handleChange = (str: string, event?: FormEvent<HTMLInputElement>) => {
50
+ const mappedValue = str
51
+ .split('')
52
+ .map((symbol) =>
53
+ regex.test(symbol)
54
+ ? symbol
55
+ : transformCaseSensitive(
56
+ smartType,
57
+ smartType !== 'email' ? CharactersMap : { ...CharactersMap, '"': '@' },
58
+ symbol,
59
+ ),
60
+ )
61
+ .filter((symbol) => regex.test(symbol))
62
+ .join('');
63
+ const domElement = event?.currentTarget;
64
+
65
+ if (domElement) {
66
+ if (!input) {
67
+ setInput(domElement);
68
+ }
69
+
70
+ setCurrentValue(getUpperCaseIfNeeded(mappedValue));
71
+ onChange(getUpperCaseIfNeeded(mappedValue));
72
+
73
+ if (mappedValue !== currentValue) {
74
+ setCaretPosition(domElement.selectionStart);
75
+ } else {
76
+ setCaretPosition(domElement.selectionStart ? domElement.selectionStart - 1 : null);
77
+ }
78
+ }
79
+ };
80
+
81
+ const handlePaste = (event: ClipboardEvent<HTMLInputElement>) => {
82
+ const str = event.clipboardData.getData('text/plain').split('').join('');
83
+ const domElement = event.currentTarget;
84
+
85
+ if (!input) {
86
+ setInput(domElement);
87
+ }
88
+
89
+ event.preventDefault();
90
+ const selectionStart = domElement.selectionStart ?? 0;
91
+ const selectionEnd = domElement.selectionEnd ?? 0;
92
+
93
+ let mappedValue = str
94
+ .split('')
95
+ .map((symbol) =>
96
+ regex.test(symbol)
97
+ ? symbol
98
+ : transformCaseSensitive(smartType, TransliterationMap, symbol),
99
+ )
100
+ .filter((letter) => regex.test(letter))
101
+ .join('');
102
+
103
+ const newValueLength =
104
+ mappedValue.length + currentValue.length - (selectionEnd - selectionStart);
105
+
106
+ if (maxLength !== undefined && maxLength >= 0 && newValueLength > maxLength) {
107
+ const validMappedValueLength = mappedValue.length - (newValueLength - maxLength);
108
+
109
+ mappedValue = mappedValue.substring(0, validMappedValueLength);
110
+ }
111
+
112
+ const newValue = getUpperCaseIfNeeded(
113
+ `${currentValue?.substring(0, selectionStart)}${mappedValue}${currentValue?.substring(
114
+ selectionEnd,
115
+ )}`,
116
+ );
117
+
118
+ setCaretPosition(selectionStart + mappedValue.length);
119
+ setCurrentValue(newValue);
120
+ onChange(newValue);
121
+ };
122
+
123
+ return (
124
+ <Input
125
+ {...rest}
126
+ ref={ref}
127
+ maxLength={maxLength}
128
+ onChange={handleChange}
129
+ onPaste={handlePaste}
130
+ value={currentValue}
131
+ />
132
+ );
133
+ },
134
+ );
@@ -1,73 +1,73 @@
1
- import { Status } from '.';
2
- import { ComponentStory } from '@storybook/react';
3
- import { IIconType, iconsList } from '../Icon';
4
- import { complexIcons } from '../Icon/complexIcons';
5
- import { STATUS_COLORS, STATUS_SIZES } from './constants';
6
- import { IStatusStyles } from './Status.styles';
7
-
8
- export default {
9
- title: 'Data Display/Status',
10
- component: Status,
11
- };
12
-
13
- const iconTypes = [
14
- undefined,
15
- ...Object.keys(iconsList),
16
- ...Object.keys(complexIcons),
17
- ] as IIconType[];
18
-
19
- const customTweakStyles: IStatusStyles = {
20
- custom: {
21
- '--status-color': '#793472',
22
- '--status-background': '#F2B9ED',
23
- },
24
- };
25
-
26
- const Template: ComponentStory<typeof Status> = (args) => (
27
- <div
28
- style={{
29
- display: 'grid',
30
- gridTemplateRows: `repeat(${STATUS_SIZES.length + 1}, 1fr)`,
31
- gridTemplateColumns: `repeat(${STATUS_COLORS.length + 1}, 1fr)`,
32
- gap: 20,
33
- }}
34
- >
35
- <div key={0} style={{ display: 'contents' }}>
36
- <div />
37
- {STATUS_COLORS.map((color, j) => (
38
- <div key={j + 1}>{color}</div>
39
- ))}
40
- </div>
41
-
42
- {STATUS_SIZES.map((size, i) => (
43
- <div key={i + 1} style={{ display: 'contents' }}>
44
- <div>{size}</div>
45
- {STATUS_COLORS.map((color, j) => (
46
- <div key={j + 1}>
47
- <Status {...args} size={size} color={color} tweakStyles={customTweakStyles} />
48
- </div>
49
- ))}
50
- </div>
51
- ))}
52
- </div>
53
- );
54
-
55
- export const Default = Template.bind({});
56
-
57
- Default.args = {
58
- children: 'Status',
59
- badge: '+ Badge',
60
- icon: 'balloon',
61
- iconPosition: 'left',
62
- };
63
-
64
- Default.argTypes = {
65
- icon: { options: iconTypes, control: 'select' },
66
- iconPosition: { options: ['left', 'right'], control: 'inline-radio' },
67
- };
68
-
69
- Default.parameters = {
70
- controls: {
71
- exclude: ['size', 'color', 'tweakStyles', 'testId', 'data'],
72
- },
73
- };
1
+ import { Status } from '.';
2
+ import { ComponentStory } from '@storybook/react';
3
+ import { IIconType, iconsList } from '../Icon';
4
+ import { complexIcons } from '../Icon/complexIcons';
5
+ import { STATUS_COLORS, STATUS_SIZES } from './constants';
6
+ import { IStatusStyles } from './Status.styles';
7
+
8
+ export default {
9
+ title: 'Data Display/Status',
10
+ component: Status,
11
+ };
12
+
13
+ const iconTypes = [
14
+ undefined,
15
+ ...Object.keys(iconsList),
16
+ ...Object.keys(complexIcons),
17
+ ] as IIconType[];
18
+
19
+ const customTweakStyles: IStatusStyles = {
20
+ custom: {
21
+ '--status-color': '#793472',
22
+ '--status-background': '#F2B9ED',
23
+ },
24
+ };
25
+
26
+ const Template: ComponentStory<typeof Status> = (args) => (
27
+ <div
28
+ style={{
29
+ display: 'grid',
30
+ gridTemplateRows: `repeat(${STATUS_SIZES.length + 1}, 1fr)`,
31
+ gridTemplateColumns: `repeat(${STATUS_COLORS.length + 1}, 1fr)`,
32
+ gap: 20,
33
+ }}
34
+ >
35
+ <div key={0} style={{ display: 'contents' }}>
36
+ <div />
37
+ {STATUS_COLORS.map((color, j) => (
38
+ <div key={j + 1}>{color}</div>
39
+ ))}
40
+ </div>
41
+
42
+ {STATUS_SIZES.map((size, i) => (
43
+ <div key={i + 1} style={{ display: 'contents' }}>
44
+ <div>{size}</div>
45
+ {STATUS_COLORS.map((color, j) => (
46
+ <div key={j + 1}>
47
+ <Status {...args} size={size} color={color} tweakStyles={customTweakStyles} />
48
+ </div>
49
+ ))}
50
+ </div>
51
+ ))}
52
+ </div>
53
+ );
54
+
55
+ export const Default = Template.bind({});
56
+
57
+ Default.args = {
58
+ children: 'Status',
59
+ badge: '+ Badge',
60
+ icon: 'balloon',
61
+ iconPosition: 'left',
62
+ };
63
+
64
+ Default.argTypes = {
65
+ icon: { options: iconTypes, control: 'select' },
66
+ iconPosition: { options: ['left', 'right'], control: 'inline-radio' },
67
+ };
68
+
69
+ Default.parameters = {
70
+ controls: {
71
+ exclude: ['size', 'color', 'tweakStyles', 'testId', 'data'],
72
+ },
73
+ };