@true-engineering/true-react-common-ui-kit 3.25.1 → 3.26.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.
- package/LICENSE +201 -201
- package/README.md +11 -0
- package/dist/components/Button/Button.d.ts +2 -2
- package/dist/components/WithPopup/WithPopup.d.ts +13 -14
- package/dist/components/WithPopup/WithPopup.styles.d.ts +1 -1
- package/dist/components/WithPopup/types.d.ts +11 -0
- package/dist/true-react-common-ui-kit.js +156 -105
- package/dist/true-react-common-ui-kit.js.map +1 -1
- package/dist/true-react-common-ui-kit.umd.cjs +154 -103
- package/dist/true-react-common-ui-kit.umd.cjs.map +1 -1
- package/dist/types.d.ts +20 -0
- package/package.json +1 -1
- package/src/components/AccountInfo/AccountInfo.stories.tsx +32 -32
- package/src/components/AccountInfo/AccountInfo.tsx +80 -80
- package/src/components/AddButton/AddButton.stories.tsx +21 -21
- package/src/components/AddButton/AddButton.tsx +52 -52
- package/src/components/Button/Button.tsx +129 -129
- package/src/components/Colors/Colors.stories.tsx +7 -7
- package/src/components/DateInput/DateInput.tsx +90 -90
- package/src/components/DateInput/constants.ts +2 -2
- package/src/components/Description/Description.stories.tsx +27 -27
- package/src/components/Description/Description.tsx +61 -61
- package/src/components/FiltersPane/components/FilterValueView/FilterValueView.tsx +166 -166
- package/src/components/FiltersPane/components/FilterWithDates/FilterWithDates.tsx +210 -210
- package/src/components/FiltersPane/components/FilterWithPeriod/FilterWithPeriod.tsx +177 -177
- package/src/components/Flag/Flag.stories.tsx +29 -29
- package/src/components/Flag/Flag.tsx +26 -26
- package/src/components/Flag/augment.d.ts +1 -1
- package/src/components/FlexibleTable/components/FlexibleTableCell/FlexibleTableCell.styles.ts +38 -38
- package/src/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.styles.ts +25 -25
- package/src/components/FlexibleTable/helpers.ts +13 -13
- package/src/components/Icon/Icon.stories.tsx +86 -86
- package/src/components/Icon/complexIcons/augment.d.ts +1 -1
- package/src/components/Icon/complexIcons/avatarGreen.svg +57 -57
- package/src/components/Icon/complexIcons/index.ts +1 -1
- package/src/components/IncrementInput/IncrementInput.tsx +105 -105
- package/src/components/Input/Input.tsx +297 -297
- package/src/components/Input/types.ts +32 -32
- package/src/components/List/List.stories.tsx +70 -70
- package/src/components/List/List.tsx +33 -33
- package/src/components/List/components/ListItem/ListItem.tsx +57 -57
- package/src/components/Modal/Modal.stories.tsx +105 -105
- package/src/components/MultiSelect/MultiSelect.stories.tsx +46 -46
- package/src/components/MultiSelect/MultiSelect.tsx +106 -106
- package/src/components/MultiSelect/components/MultiSelectInput/MultiSelectInput.tsx +53 -53
- package/src/components/NewMoreMenu/NewMoreMenu.tsx +8 -9
- package/src/components/Notification/Notification.stories.tsx +46 -46
- package/src/components/Notification/Notification.tsx +69 -69
- package/src/components/NumberInput/NumberInput.tsx +137 -137
- package/src/components/NumberInput/index.ts +1 -1
- package/src/components/PhoneInput/PhoneInput.tsx +214 -214
- package/src/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.tsx +155 -155
- package/src/components/PhoneInput/types.ts +16 -16
- package/src/components/RadioButton/RadioButton.stories.tsx +46 -46
- package/src/components/RadioButton/RadioButton.tsx +57 -57
- package/src/components/ScrollIntoViewIfNeeded/index.ts +1 -1
- package/src/components/Select/Select.stories.tsx +235 -235
- package/src/components/Select/constants.ts +2 -2
- package/src/components/Select/types.ts +1 -1
- package/src/components/Selector/Selector.stories.tsx +62 -62
- package/src/components/Selector/Selector.tsx +115 -115
- package/src/components/Selector/index.ts +2 -2
- package/src/components/Selector/types.ts +12 -12
- package/src/components/Skeleton/Skeleton.stories.tsx +19 -19
- package/src/components/SmartInput/SmartInput.tsx +134 -134
- package/src/components/Status/Status.stories.tsx +73 -73
- package/src/components/Status/Status.styles.ts +143 -143
- package/src/components/Status/Status.tsx +49 -49
- package/src/components/Status/constants.ts +11 -11
- package/src/components/Status/index.ts +3 -3
- package/src/components/Status/types.ts +5 -5
- package/src/components/Switch/Switch.stories.tsx +40 -40
- package/src/components/Switch/Switch.tsx +75 -75
- package/src/components/TextWithInfo/TextWithInfo.stories.tsx +53 -53
- package/src/components/TextWithInfo/TextWithInfo.tsx +62 -62
- package/src/components/TextWithTooltip/TextWithTooltip.stories.tsx +58 -58
- package/src/components/ThemedPreloader/ThemedPreloader.stories.tsx +41 -41
- package/src/components/ThemedPreloader/ThemedPreloader.tsx +54 -54
- package/src/components/ThemedPreloader/components/DefaultPreloader/index.ts +1 -1
- package/src/components/Toaster/Toaster.stories.tsx +30 -30
- package/src/components/Tooltip/Tooltip.stories.tsx +19 -19
- package/src/components/Tooltip/Tooltip.tsx +35 -35
- package/src/components/Tooltip/types.ts +1 -1
- package/src/components/WithPopup/WithPopup.stories.tsx +36 -15
- package/src/components/WithPopup/WithPopup.styles.ts +6 -8
- package/src/components/WithPopup/WithPopup.tsx +64 -35
- package/src/components/WithPopup/types.ts +14 -0
- package/src/helpers/popper-helpers.ts +17 -17
- package/src/hooks/use-dropdown.ts +84 -84
- package/src/hooks/use-is-mounted.ts +15 -15
- package/src/theme/helpers.ts +76 -76
- package/src/types.ts +28 -0
- package/src/vite-env.d.ts +1 -1
|
@@ -1,84 +1,84 @@
|
|
|
1
|
-
import { DependencyList, useEffect } from 'react';
|
|
2
|
-
import usePopper, { VirtualElement } from 'react-overlays/usePopper';
|
|
3
|
-
import { getScrollParent, minWidthModifier } from '../helpers';
|
|
4
|
-
import { IDropdownWithPopperOptions } from '../types';
|
|
5
|
-
|
|
6
|
-
export const useDropdown = ({
|
|
7
|
-
isOpen,
|
|
8
|
-
onDropdownClose,
|
|
9
|
-
referenceElement,
|
|
10
|
-
dropdownElement,
|
|
11
|
-
options,
|
|
12
|
-
dependenciesForPositionUpdating = [],
|
|
13
|
-
}: {
|
|
14
|
-
isOpen: boolean;
|
|
15
|
-
referenceElement: VirtualElement | null | undefined;
|
|
16
|
-
dropdownElement: HTMLElement | null | undefined;
|
|
17
|
-
options?: IDropdownWithPopperOptions;
|
|
18
|
-
dependenciesForPositionUpdating?: DependencyList;
|
|
19
|
-
onDropdownClose: (event: Event) => void;
|
|
20
|
-
}): ReturnType<typeof usePopper> | undefined => {
|
|
21
|
-
const {
|
|
22
|
-
shouldUsePopper = false,
|
|
23
|
-
shouldRenderInBody = false,
|
|
24
|
-
shouldHideOnScroll = false,
|
|
25
|
-
scrollParent = 'document',
|
|
26
|
-
canBeFlipped = false,
|
|
27
|
-
modifiers = [],
|
|
28
|
-
placement = 'bottom-start',
|
|
29
|
-
flipOptions,
|
|
30
|
-
} = options ?? {};
|
|
31
|
-
|
|
32
|
-
useEffect(() => {
|
|
33
|
-
if (!shouldHideOnScroll || !isOpen) {
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const scrollParentEl =
|
|
38
|
-
scrollParent === 'auto'
|
|
39
|
-
? getScrollParent(referenceElement as Element)
|
|
40
|
-
: scrollParent === 'document'
|
|
41
|
-
? document
|
|
42
|
-
: scrollParent;
|
|
43
|
-
scrollParentEl.addEventListener('scroll', onDropdownClose);
|
|
44
|
-
|
|
45
|
-
return () => {
|
|
46
|
-
scrollParentEl.removeEventListener('scroll', onDropdownClose);
|
|
47
|
-
};
|
|
48
|
-
}, [shouldHideOnScroll, isOpen]);
|
|
49
|
-
|
|
50
|
-
let popperData: ReturnType<typeof usePopper> | undefined;
|
|
51
|
-
if (shouldUsePopper) {
|
|
52
|
-
// TODO: Вытащить хук из под условия???
|
|
53
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
54
|
-
popperData = usePopper(referenceElement, dropdownElement, {
|
|
55
|
-
enabled: isOpen,
|
|
56
|
-
placement,
|
|
57
|
-
modifiers: [
|
|
58
|
-
...(shouldRenderInBody ? [minWidthModifier] : []),
|
|
59
|
-
{
|
|
60
|
-
name: 'offset',
|
|
61
|
-
options: {
|
|
62
|
-
offset: [0, 6],
|
|
63
|
-
},
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
name: 'flip',
|
|
67
|
-
options: {
|
|
68
|
-
fallbackPlacements: canBeFlipped ? ['bottom-start', 'top-start'] : ['bottom-start'],
|
|
69
|
-
...flipOptions,
|
|
70
|
-
},
|
|
71
|
-
},
|
|
72
|
-
...modifiers,
|
|
73
|
-
],
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
useEffect(() => {
|
|
78
|
-
if (dependenciesForPositionUpdating.length !== 0) {
|
|
79
|
-
popperData?.update();
|
|
80
|
-
}
|
|
81
|
-
}, dependenciesForPositionUpdating);
|
|
82
|
-
|
|
83
|
-
return popperData;
|
|
84
|
-
};
|
|
1
|
+
import { DependencyList, useEffect } from 'react';
|
|
2
|
+
import usePopper, { VirtualElement } from 'react-overlays/usePopper';
|
|
3
|
+
import { getScrollParent, minWidthModifier } from '../helpers';
|
|
4
|
+
import { IDropdownWithPopperOptions } from '../types';
|
|
5
|
+
|
|
6
|
+
export const useDropdown = ({
|
|
7
|
+
isOpen,
|
|
8
|
+
onDropdownClose,
|
|
9
|
+
referenceElement,
|
|
10
|
+
dropdownElement,
|
|
11
|
+
options,
|
|
12
|
+
dependenciesForPositionUpdating = [],
|
|
13
|
+
}: {
|
|
14
|
+
isOpen: boolean;
|
|
15
|
+
referenceElement: VirtualElement | null | undefined;
|
|
16
|
+
dropdownElement: HTMLElement | null | undefined;
|
|
17
|
+
options?: IDropdownWithPopperOptions;
|
|
18
|
+
dependenciesForPositionUpdating?: DependencyList;
|
|
19
|
+
onDropdownClose: (event: Event) => void;
|
|
20
|
+
}): ReturnType<typeof usePopper> | undefined => {
|
|
21
|
+
const {
|
|
22
|
+
shouldUsePopper = false,
|
|
23
|
+
shouldRenderInBody = false,
|
|
24
|
+
shouldHideOnScroll = false,
|
|
25
|
+
scrollParent = 'document',
|
|
26
|
+
canBeFlipped = false,
|
|
27
|
+
modifiers = [],
|
|
28
|
+
placement = 'bottom-start',
|
|
29
|
+
flipOptions,
|
|
30
|
+
} = options ?? {};
|
|
31
|
+
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
if (!shouldHideOnScroll || !isOpen) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const scrollParentEl =
|
|
38
|
+
scrollParent === 'auto'
|
|
39
|
+
? getScrollParent(referenceElement as Element)
|
|
40
|
+
: scrollParent === 'document'
|
|
41
|
+
? document
|
|
42
|
+
: scrollParent;
|
|
43
|
+
scrollParentEl.addEventListener('scroll', onDropdownClose);
|
|
44
|
+
|
|
45
|
+
return () => {
|
|
46
|
+
scrollParentEl.removeEventListener('scroll', onDropdownClose);
|
|
47
|
+
};
|
|
48
|
+
}, [shouldHideOnScroll, isOpen]);
|
|
49
|
+
|
|
50
|
+
let popperData: ReturnType<typeof usePopper> | undefined;
|
|
51
|
+
if (shouldUsePopper) {
|
|
52
|
+
// TODO: Вытащить хук из под условия???
|
|
53
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
54
|
+
popperData = usePopper(referenceElement, dropdownElement, {
|
|
55
|
+
enabled: isOpen,
|
|
56
|
+
placement,
|
|
57
|
+
modifiers: [
|
|
58
|
+
...(shouldRenderInBody ? [minWidthModifier] : []),
|
|
59
|
+
{
|
|
60
|
+
name: 'offset',
|
|
61
|
+
options: {
|
|
62
|
+
offset: [0, 6],
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: 'flip',
|
|
67
|
+
options: {
|
|
68
|
+
fallbackPlacements: canBeFlipped ? ['bottom-start', 'top-start'] : ['bottom-start'],
|
|
69
|
+
...flipOptions,
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
...modifiers,
|
|
73
|
+
],
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
useEffect(() => {
|
|
78
|
+
if (dependenciesForPositionUpdating.length !== 0) {
|
|
79
|
+
popperData?.update();
|
|
80
|
+
}
|
|
81
|
+
}, dependenciesForPositionUpdating);
|
|
82
|
+
|
|
83
|
+
return popperData;
|
|
84
|
+
};
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { useCallback, useEffect, useRef } from 'react';
|
|
2
|
-
|
|
3
|
-
export const useIsMounted = (): (() => boolean) => {
|
|
4
|
-
const isMounted = useRef(false);
|
|
5
|
-
|
|
6
|
-
useEffect(() => {
|
|
7
|
-
isMounted.current = true;
|
|
8
|
-
|
|
9
|
-
return () => {
|
|
10
|
-
isMounted.current = false;
|
|
11
|
-
};
|
|
12
|
-
}, []);
|
|
13
|
-
|
|
14
|
-
return useCallback(() => isMounted.current, []);
|
|
15
|
-
};
|
|
1
|
+
import { useCallback, useEffect, useRef } from 'react';
|
|
2
|
+
|
|
3
|
+
export const useIsMounted = (): (() => boolean) => {
|
|
4
|
+
const isMounted = useRef(false);
|
|
5
|
+
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
isMounted.current = true;
|
|
8
|
+
|
|
9
|
+
return () => {
|
|
10
|
+
isMounted.current = false;
|
|
11
|
+
};
|
|
12
|
+
}, []);
|
|
13
|
+
|
|
14
|
+
return useCallback(() => isMounted.current, []);
|
|
15
|
+
};
|
package/src/theme/helpers.ts
CHANGED
|
@@ -1,76 +1,76 @@
|
|
|
1
|
-
import { createUseStyles, Styles } from 'react-jss';
|
|
2
|
-
import merge from 'lodash-es/merge';
|
|
3
|
-
import {
|
|
4
|
-
isArrayNotEmpty,
|
|
5
|
-
isNotEmpty,
|
|
6
|
-
mergeStyles,
|
|
7
|
-
} from '@true-engineering/true-react-platform-helpers';
|
|
8
|
-
import { getTheme } from './Provider';
|
|
9
|
-
import { IComponentName, IStyles, IUseStyles } from './types';
|
|
10
|
-
|
|
11
|
-
const EMPTY_STYLES = {};
|
|
12
|
-
|
|
13
|
-
const isTweakStyle = (key: string): boolean => key.startsWith('tweak');
|
|
14
|
-
|
|
15
|
-
const cleanStyles = <T>(tweakStyles?: T): T =>
|
|
16
|
-
isNotEmpty(tweakStyles) && Object.keys(tweakStyles).some((key) => !isTweakStyle(key))
|
|
17
|
-
? tweakStyles
|
|
18
|
-
: (EMPTY_STYLES as T);
|
|
19
|
-
|
|
20
|
-
const checkStyles = (componentName: string, styles: Record<string, unknown>): void => {
|
|
21
|
-
const invalidClasses = Object.keys(styles).reduce((acc, key) => {
|
|
22
|
-
if (isTweakStyle(key)) {
|
|
23
|
-
acc.push(key);
|
|
24
|
-
}
|
|
25
|
-
return acc;
|
|
26
|
-
}, [] as string[]);
|
|
27
|
-
|
|
28
|
-
if (isArrayNotEmpty(invalidClasses)) {
|
|
29
|
-
console.error(
|
|
30
|
-
`${componentName}: Названия классов не должны начинаться со слова "tweak": ${invalidClasses}`,
|
|
31
|
-
);
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
export const areStylesThemed = (styles: Record<string, unknown>): boolean =>
|
|
36
|
-
// eslint-disable-next-line no-underscore-dangle
|
|
37
|
-
styles.__themed === true;
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Подмешивает стили из темы. Мутирует, добавляя специально поле,
|
|
41
|
-
* по которому можно определить была ли уже произведена мутация ранее,
|
|
42
|
-
* тем самым сохраняя ссылку на объект и позволяя этим кэшировать JSS стили
|
|
43
|
-
*/
|
|
44
|
-
export const themedStyles = <T>(styles: T, themeComponentStyles: T): T => {
|
|
45
|
-
merge(styles, themeComponentStyles); // mutation !!!!
|
|
46
|
-
Object.defineProperty(styles, '__themed', { value: true });
|
|
47
|
-
return styles;
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
export function createThemedStyles<C extends string, P>(styles: IStyles<C, P>): IUseStyles<C, P>;
|
|
51
|
-
|
|
52
|
-
export function createThemedStyles<C extends string, P>(
|
|
53
|
-
componentName: IComponentName,
|
|
54
|
-
styles: IStyles<C, P>,
|
|
55
|
-
): IUseStyles<C, P>;
|
|
56
|
-
|
|
57
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
58
|
-
export function createThemedStyles<C extends string, P>(...args: any[]): IUseStyles<C, P> {
|
|
59
|
-
const shouldUseTheme = args.length > 1;
|
|
60
|
-
const styles: IStyles<C, P> = shouldUseTheme ? args[1] : args[0];
|
|
61
|
-
const componentName: IComponentName | undefined = shouldUseTheme ? args[0] : undefined;
|
|
62
|
-
|
|
63
|
-
if (process.env.NODE_ENV !== 'production') {
|
|
64
|
-
checkStyles(componentName ?? 'LocalComponent', styles);
|
|
65
|
-
}
|
|
66
|
-
const useStyles = createUseStyles<C, P>((tweakStyles) => {
|
|
67
|
-
const theme = getTheme();
|
|
68
|
-
return mergeStyles(
|
|
69
|
-
styles as Styles<C, P>,
|
|
70
|
-
isNotEmpty(componentName) ? (theme?.components?.[componentName] as Styles<C, P>) : undefined,
|
|
71
|
-
tweakStyles,
|
|
72
|
-
);
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
return (data) => useStyles(isNotEmpty(data) ? { ...data, theme: cleanStyles(data.theme) } : data);
|
|
76
|
-
}
|
|
1
|
+
import { createUseStyles, Styles } from 'react-jss';
|
|
2
|
+
import merge from 'lodash-es/merge';
|
|
3
|
+
import {
|
|
4
|
+
isArrayNotEmpty,
|
|
5
|
+
isNotEmpty,
|
|
6
|
+
mergeStyles,
|
|
7
|
+
} from '@true-engineering/true-react-platform-helpers';
|
|
8
|
+
import { getTheme } from './Provider';
|
|
9
|
+
import { IComponentName, IStyles, IUseStyles } from './types';
|
|
10
|
+
|
|
11
|
+
const EMPTY_STYLES = {};
|
|
12
|
+
|
|
13
|
+
const isTweakStyle = (key: string): boolean => key.startsWith('tweak');
|
|
14
|
+
|
|
15
|
+
const cleanStyles = <T>(tweakStyles?: T): T =>
|
|
16
|
+
isNotEmpty(tweakStyles) && Object.keys(tweakStyles).some((key) => !isTweakStyle(key))
|
|
17
|
+
? tweakStyles
|
|
18
|
+
: (EMPTY_STYLES as T);
|
|
19
|
+
|
|
20
|
+
const checkStyles = (componentName: string, styles: Record<string, unknown>): void => {
|
|
21
|
+
const invalidClasses = Object.keys(styles).reduce((acc, key) => {
|
|
22
|
+
if (isTweakStyle(key)) {
|
|
23
|
+
acc.push(key);
|
|
24
|
+
}
|
|
25
|
+
return acc;
|
|
26
|
+
}, [] as string[]);
|
|
27
|
+
|
|
28
|
+
if (isArrayNotEmpty(invalidClasses)) {
|
|
29
|
+
console.error(
|
|
30
|
+
`${componentName}: Названия классов не должны начинаться со слова "tweak": ${invalidClasses}`,
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export const areStylesThemed = (styles: Record<string, unknown>): boolean =>
|
|
36
|
+
// eslint-disable-next-line no-underscore-dangle
|
|
37
|
+
styles.__themed === true;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Подмешивает стили из темы. Мутирует, добавляя специально поле,
|
|
41
|
+
* по которому можно определить была ли уже произведена мутация ранее,
|
|
42
|
+
* тем самым сохраняя ссылку на объект и позволяя этим кэшировать JSS стили
|
|
43
|
+
*/
|
|
44
|
+
export const themedStyles = <T>(styles: T, themeComponentStyles: T): T => {
|
|
45
|
+
merge(styles, themeComponentStyles); // mutation !!!!
|
|
46
|
+
Object.defineProperty(styles, '__themed', { value: true });
|
|
47
|
+
return styles;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export function createThemedStyles<C extends string, P>(styles: IStyles<C, P>): IUseStyles<C, P>;
|
|
51
|
+
|
|
52
|
+
export function createThemedStyles<C extends string, P>(
|
|
53
|
+
componentName: IComponentName,
|
|
54
|
+
styles: IStyles<C, P>,
|
|
55
|
+
): IUseStyles<C, P>;
|
|
56
|
+
|
|
57
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
58
|
+
export function createThemedStyles<C extends string, P>(...args: any[]): IUseStyles<C, P> {
|
|
59
|
+
const shouldUseTheme = args.length > 1;
|
|
60
|
+
const styles: IStyles<C, P> = shouldUseTheme ? args[1] : args[0];
|
|
61
|
+
const componentName: IComponentName | undefined = shouldUseTheme ? args[0] : undefined;
|
|
62
|
+
|
|
63
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
64
|
+
checkStyles(componentName ?? 'LocalComponent', styles);
|
|
65
|
+
}
|
|
66
|
+
const useStyles = createUseStyles<C, P>((tweakStyles) => {
|
|
67
|
+
const theme = getTheme();
|
|
68
|
+
return mergeStyles(
|
|
69
|
+
styles as Styles<C, P>,
|
|
70
|
+
isNotEmpty(componentName) ? (theme?.components?.[componentName] as Styles<C, P>) : undefined,
|
|
71
|
+
tweakStyles,
|
|
72
|
+
);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
return (data) => useStyles(isNotEmpty(data) ? { ...data, theme: cleanStyles(data.theme) } : data);
|
|
76
|
+
}
|
package/src/types.ts
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FocusEventHandler,
|
|
3
|
+
KeyboardEventHandler,
|
|
4
|
+
MouseEventHandler,
|
|
5
|
+
PointerEventHandler,
|
|
6
|
+
ReactNode,
|
|
7
|
+
} from 'react';
|
|
1
8
|
import { Modifier, Placement } from 'react-overlays/usePopper';
|
|
2
9
|
|
|
3
10
|
export interface IDataAttributes {
|
|
@@ -24,3 +31,24 @@ export interface IDropdownWithPopperOptions {
|
|
|
24
31
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
25
32
|
flipOptions?: Record<string, any>; // только с shouldUsePopper
|
|
26
33
|
}
|
|
34
|
+
|
|
35
|
+
export interface IDomElementInteractions<T> {
|
|
36
|
+
onBlur?: FocusEventHandler<T>;
|
|
37
|
+
onFocus?: FocusEventHandler<T>;
|
|
38
|
+
onMouseLeave?: MouseEventHandler<T>;
|
|
39
|
+
onMouseEnter?: MouseEventHandler<T>;
|
|
40
|
+
onMouseMove?: MouseEventHandler<T>;
|
|
41
|
+
onMouseDown?: MouseEventHandler<T>;
|
|
42
|
+
onMouseUp?: MouseEventHandler<T>;
|
|
43
|
+
onClick?: MouseEventHandler<T>;
|
|
44
|
+
onKeyDown?: KeyboardEventHandler<T>;
|
|
45
|
+
onKeyPress?: KeyboardEventHandler<T>;
|
|
46
|
+
onKeyUp?: KeyboardEventHandler<T>;
|
|
47
|
+
onPointerLeave?: PointerEventHandler<T>;
|
|
48
|
+
onPointerDown?: PointerEventHandler<T>;
|
|
49
|
+
onPointerMove?: PointerEventHandler<T>;
|
|
50
|
+
onPointerEnter?: PointerEventHandler<T>;
|
|
51
|
+
onPointerUp?: PointerEventHandler<T>;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export type IRenderNode<T> = ReactNode | ((props: T) => ReactNode);
|
package/src/vite-env.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
/// <reference types="vite/client" />
|
|
1
|
+
/// <reference types="vite/client" />
|