@vkontakte/vkui 7.8.2 → 7.9.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.
- package/dist/components/Box/Box.d.ts +11 -0
- package/dist/components/Box/Box.d.ts.map +1 -0
- package/dist/components/Box/Box.js +25 -0
- package/dist/components/Box/Box.js.map +1 -0
- package/dist/components/CarouselBase/CarouselBase.d.ts +1 -1
- package/dist/components/CarouselBase/CarouselBase.d.ts.map +1 -1
- package/dist/components/CarouselBase/CarouselBase.js +6 -4
- package/dist/components/CarouselBase/CarouselBase.js.map +1 -1
- package/dist/components/CarouselBase/constants.d.ts +1 -1
- package/dist/components/CarouselBase/constants.d.ts.map +1 -1
- package/dist/components/CarouselBase/constants.js +1 -1
- package/dist/components/CarouselBase/constants.js.map +1 -1
- package/dist/components/CarouselBase/hooks.d.ts +3 -1
- package/dist/components/CarouselBase/hooks.d.ts.map +1 -1
- package/dist/components/CarouselBase/hooks.js +46 -6
- package/dist/components/CarouselBase/hooks.js.map +1 -1
- package/dist/components/CarouselBase/types.d.ts +12 -0
- package/dist/components/CarouselBase/types.d.ts.map +1 -1
- package/dist/components/CarouselBase/types.js.map +1 -1
- package/dist/components/Checkbox/Checkbox.d.ts +11 -2
- package/dist/components/Checkbox/Checkbox.d.ts.map +1 -1
- package/dist/components/Checkbox/Checkbox.js +44 -10
- package/dist/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/components/Checkbox/CheckboxInput/CheckboxInput.d.ts +16 -3
- package/dist/components/Checkbox/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/components/Checkbox/CheckboxInput/CheckboxInput.js +32 -19
- package/dist/components/Checkbox/CheckboxInput/CheckboxInput.js.map +1 -1
- package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.d.ts +1 -1
- package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.d.ts.map +1 -1
- package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.js +39 -10
- package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.js.map +1 -1
- package/dist/components/ChipsInput/ChipsInput.d.ts +1 -1
- package/dist/components/ChipsInput/ChipsInput.d.ts.map +1 -1
- package/dist/components/ChipsInput/ChipsInput.js +32 -13
- package/dist/components/ChipsInput/ChipsInput.js.map +1 -1
- package/dist/components/ChipsInputBase/ChipsInputBase.d.ts +1 -1
- package/dist/components/ChipsInputBase/ChipsInputBase.d.ts.map +1 -1
- package/dist/components/ChipsInputBase/ChipsInputBase.js +52 -26
- package/dist/components/ChipsInputBase/ChipsInputBase.js.map +1 -1
- package/dist/components/ChipsInputBase/types.d.ts +13 -4
- package/dist/components/ChipsInputBase/types.d.ts.map +1 -1
- package/dist/components/ChipsInputBase/types.js.map +1 -1
- package/dist/components/ChipsSelect/ChipsSelect.d.ts +1 -1
- package/dist/components/ChipsSelect/ChipsSelect.d.ts.map +1 -1
- package/dist/components/ChipsSelect/ChipsSelect.js +67 -38
- package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts +16 -2
- package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.js +99 -50
- package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.d.ts +6 -2
- package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.d.ts.map +1 -1
- package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.js +38 -20
- package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.js.map +1 -1
- package/dist/components/CustomSelect/helpers.d.ts +1 -0
- package/dist/components/CustomSelect/helpers.d.ts.map +1 -1
- package/dist/components/CustomSelect/helpers.js +11 -0
- package/dist/components/CustomSelect/helpers.js.map +1 -1
- package/dist/components/Div/Div.d.ts +3 -0
- package/dist/components/Div/Div.d.ts.map +1 -1
- package/dist/components/Div/Div.js +11 -1
- package/dist/components/Div/Div.js.map +1 -1
- package/dist/components/File/File.d.ts +16 -3
- package/dist/components/File/File.d.ts.map +1 -1
- package/dist/components/File/File.js +29 -17
- package/dist/components/File/File.js.map +1 -1
- package/dist/components/Input/Input.d.ts +16 -3
- package/dist/components/Input/Input.d.ts.map +1 -1
- package/dist/components/Input/Input.js +28 -13
- package/dist/components/Input/Input.js.map +1 -1
- package/dist/components/NativeSelect/NativeSelect.d.ts +17 -3
- package/dist/components/NativeSelect/NativeSelect.d.ts.map +1 -1
- package/dist/components/NativeSelect/NativeSelect.js +37 -14
- package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
- package/dist/components/Radio/Radio.d.ts +18 -3
- package/dist/components/Radio/Radio.d.ts.map +1 -1
- package/dist/components/Radio/Radio.js +31 -11
- package/dist/components/Radio/Radio.js.map +1 -1
- package/dist/components/Radio/RadioInput/RadioInput.d.ts +16 -3
- package/dist/components/Radio/RadioInput/RadioInput.d.ts.map +1 -1
- package/dist/components/Radio/RadioInput/RadioInput.js +22 -11
- package/dist/components/Radio/RadioInput/RadioInput.js.map +1 -1
- package/dist/components/Search/Search.d.ts +16 -3
- package/dist/components/Search/Search.d.ts.map +1 -1
- package/dist/components/Search/Search.js +50 -28
- package/dist/components/Search/Search.js.map +1 -1
- package/dist/components/Select/Select.d.ts.map +1 -1
- package/dist/components/Select/Select.js +10 -4
- package/dist/components/Select/Select.js.map +1 -1
- package/dist/components/SelectionControl/SelectionControl.d.ts +2 -2
- package/dist/components/SelectionControl/SelectionControl.d.ts.map +1 -1
- package/dist/components/SelectionControl/SelectionControl.js.map +1 -1
- package/dist/components/Snackbar/Snackbar.d.ts +10 -1
- package/dist/components/Snackbar/Snackbar.d.ts.map +1 -1
- package/dist/components/Snackbar/Snackbar.js +20 -6
- package/dist/components/Snackbar/Snackbar.js.map +1 -1
- package/dist/components/SplitLayout/SplitLayout.d.ts +16 -3
- package/dist/components/SplitLayout/SplitLayout.d.ts.map +1 -1
- package/dist/components/SplitLayout/SplitLayout.js +24 -9
- package/dist/components/SplitLayout/SplitLayout.js.map +1 -1
- package/dist/components/Switch/Switch.d.ts +16 -3
- package/dist/components/Switch/Switch.d.ts.map +1 -1
- package/dist/components/Switch/Switch.js +32 -20
- package/dist/components/Switch/Switch.js.map +1 -1
- package/dist/components/Textarea/Textarea.d.ts +16 -3
- package/dist/components/Textarea/Textarea.d.ts.map +1 -1
- package/dist/components/Textarea/Textarea.js +36 -18
- package/dist/components/Textarea/Textarea.js.map +1 -1
- package/dist/components/WriteBar/WriteBar.d.ts +16 -3
- package/dist/components/WriteBar/WriteBar.d.ts.map +1 -1
- package/dist/components/WriteBar/WriteBar.js +28 -11
- package/dist/components/WriteBar/WriteBar.js.map +1 -1
- package/dist/components.css +1 -1
- package/dist/components.css.map +1 -1
- package/dist/cssm/components/Box/Box.js +19 -0
- package/dist/cssm/components/Box/Box.js.map +1 -0
- package/dist/cssm/components/CarouselBase/CarouselBase.js +4 -4
- package/dist/cssm/components/CarouselBase/CarouselBase.js.map +1 -1
- package/dist/cssm/components/CarouselBase/constants.js +1 -1
- package/dist/cssm/components/CarouselBase/constants.js.map +1 -1
- package/dist/cssm/components/CarouselBase/hooks.js +46 -6
- package/dist/cssm/components/CarouselBase/hooks.js.map +1 -1
- package/dist/cssm/components/CarouselBase/types.js.map +1 -1
- package/dist/cssm/components/Checkbox/Checkbox.js +29 -6
- package/dist/cssm/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/cssm/components/Checkbox/CheckboxInput/CheckboxInput.js +24 -13
- package/dist/cssm/components/Checkbox/CheckboxInput/CheckboxInput.js.map +1 -1
- package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.js +24 -6
- package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.js.map +1 -1
- package/dist/cssm/components/ChipsInput/ChipsInput.js +25 -11
- package/dist/cssm/components/ChipsInput/ChipsInput.js.map +1 -1
- package/dist/cssm/components/ChipsInputBase/ChipsInputBase.js +30 -12
- package/dist/cssm/components/ChipsInputBase/ChipsInputBase.js.map +1 -1
- package/dist/cssm/components/ChipsInputBase/types.js.map +1 -1
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js +49 -30
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.js +73 -41
- package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelectInput/CustomSelectInput.js +20 -9
- package/dist/cssm/components/CustomSelect/CustomSelectInput/CustomSelectInput.js.map +1 -1
- package/dist/cssm/components/CustomSelect/helpers.js +11 -0
- package/dist/cssm/components/CustomSelect/helpers.js.map +1 -1
- package/dist/cssm/components/Div/Div.js +11 -1
- package/dist/cssm/components/Div/Div.js.map +1 -1
- package/dist/cssm/components/File/File.js +20 -7
- package/dist/cssm/components/File/File.js.map +1 -1
- package/dist/cssm/components/Input/Input.js +20 -7
- package/dist/cssm/components/Input/Input.js.map +1 -1
- package/dist/cssm/components/MiniInfoCell/MiniInfoCell.module.css +1 -1
- package/dist/cssm/components/NativeSelect/NativeSelect.js +25 -8
- package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
- package/dist/cssm/components/Radio/Radio.js +28 -8
- package/dist/cssm/components/Radio/Radio.js.map +1 -1
- package/dist/cssm/components/Radio/RadioInput/RadioInput.js +18 -6
- package/dist/cssm/components/Radio/RadioInput/RadioInput.js.map +1 -1
- package/dist/cssm/components/Search/Search.js +34 -17
- package/dist/cssm/components/Search/Search.js.map +1 -1
- package/dist/cssm/components/Select/Select.js +9 -1
- package/dist/cssm/components/Select/Select.js.map +1 -1
- package/dist/cssm/components/SelectionControl/SelectionControl.js.map +1 -1
- package/dist/cssm/components/Snackbar/Snackbar.js +11 -2
- package/dist/cssm/components/Snackbar/Snackbar.js.map +1 -1
- package/dist/cssm/components/SplitLayout/SplitLayout.js +22 -8
- package/dist/cssm/components/SplitLayout/SplitLayout.js.map +1 -1
- package/dist/cssm/components/Switch/Switch.js +29 -17
- package/dist/cssm/components/Switch/Switch.js.map +1 -1
- package/dist/cssm/components/Textarea/Textarea.js +22 -8
- package/dist/cssm/components/Textarea/Textarea.js.map +1 -1
- package/dist/cssm/components/WriteBar/WriteBar.js +24 -9
- package/dist/cssm/components/WriteBar/WriteBar.js.map +1 -1
- package/dist/cssm/hooks/useMergeProps.js +38 -0
- package/dist/cssm/hooks/useMergeProps.js.map +1 -0
- package/dist/cssm/index.js +2 -0
- package/dist/cssm/index.js.map +1 -1
- package/dist/cssm/lib/animation/useCSSTransition.js +1 -1
- package/dist/cssm/lib/animation/useCSSTransition.js.map +1 -1
- package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +1 -1
- package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
- package/dist/cssm/lib/fx.js +55 -8
- package/dist/cssm/lib/fx.js.map +1 -1
- package/dist/cssm/lib/layouts/gaps.js.map +1 -1
- package/dist/cssm/lib/layouts/helpers.js +21 -0
- package/dist/cssm/lib/layouts/helpers.js.map +1 -0
- package/dist/cssm/lib/layouts/index.js +1 -0
- package/dist/cssm/lib/layouts/index.js.map +1 -1
- package/dist/cssm/lib/layouts/layoutProps.js +89 -0
- package/dist/cssm/lib/layouts/layoutProps.js.map +1 -0
- package/dist/cssm/lib/layouts/resolveLayoutProps.js +36 -0
- package/dist/cssm/lib/layouts/resolveLayoutProps.js.map +1 -0
- package/dist/cssm/lib/layouts/types.js +3 -0
- package/dist/cssm/lib/layouts/types.js.map +1 -0
- package/dist/cssm/lib/warnOnce.js +1 -1
- package/dist/cssm/lib/warnOnce.js.map +1 -1
- package/dist/cssm/styles/layout.css +922 -0
- package/dist/hooks/useMergeProps.d.ts +6 -0
- package/dist/hooks/useMergeProps.d.ts.map +1 -0
- package/dist/hooks/useMergeProps.js +42 -0
- package/dist/hooks/useMergeProps.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/animation/useCSSTransition.js +1 -1
- package/dist/lib/animation/useCSSTransition.js.map +1 -1
- package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +1 -1
- package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
- package/dist/lib/fx.d.ts +8 -1
- package/dist/lib/fx.d.ts.map +1 -1
- package/dist/lib/fx.js +55 -8
- package/dist/lib/fx.js.map +1 -1
- package/dist/lib/layouts/gaps.d.ts +4 -5
- package/dist/lib/layouts/gaps.d.ts.map +1 -1
- package/dist/lib/layouts/gaps.js.map +1 -1
- package/dist/lib/layouts/helpers.d.ts +17 -0
- package/dist/lib/layouts/helpers.d.ts.map +1 -0
- package/dist/lib/layouts/helpers.js +21 -0
- package/dist/lib/layouts/helpers.js.map +1 -0
- package/dist/lib/layouts/index.d.ts +2 -0
- package/dist/lib/layouts/index.d.ts.map +1 -1
- package/dist/lib/layouts/index.js +1 -0
- package/dist/lib/layouts/index.js.map +1 -1
- package/dist/lib/layouts/layoutProps.d.ts +33 -0
- package/dist/lib/layouts/layoutProps.d.ts.map +1 -0
- package/dist/lib/layouts/layoutProps.js +89 -0
- package/dist/lib/layouts/layoutProps.js.map +1 -0
- package/dist/lib/layouts/resolveLayoutProps.d.ts +18 -0
- package/dist/lib/layouts/resolveLayoutProps.d.ts.map +1 -0
- package/dist/lib/layouts/resolveLayoutProps.js +35 -0
- package/dist/lib/layouts/resolveLayoutProps.js.map +1 -0
- package/dist/lib/layouts/types.d.ts +123 -0
- package/dist/lib/layouts/types.d.ts.map +1 -0
- package/dist/lib/layouts/types.js +3 -0
- package/dist/lib/layouts/types.js.map +1 -0
- package/dist/lib/warnOnce.js +1 -1
- package/dist/lib/warnOnce.js.map +1 -1
- package/dist/vkui.css +1 -1
- package/dist/vkui.css.map +1 -1
- package/package.json +2 -2
- package/src/components/Box/Box.tsx +26 -0
- package/src/components/CarouselBase/CarouselBase.tsx +11 -4
- package/src/components/CarouselBase/constants.ts +1 -1
- package/src/components/CarouselBase/hooks.ts +31 -6
- package/src/components/CarouselBase/types.ts +13 -0
- package/src/components/Checkbox/Checkbox.tsx +57 -7
- package/src/components/Checkbox/CheckboxInput/CheckboxInput.tsx +51 -18
- package/src/components/Checkbox/CheckboxSimple/CheckboxSimple.tsx +36 -6
- package/src/components/ChipsInput/ChipsInput.tsx +38 -11
- package/src/components/ChipsInputBase/ChipsInputBase.tsx +60 -17
- package/src/components/ChipsInputBase/types.ts +15 -4
- package/src/components/ChipsSelect/ChipsSelect.tsx +71 -33
- package/src/components/CustomSelect/CustomSelect.tsx +135 -45
- package/src/components/CustomSelect/CustomSelectInput/CustomSelectInput.tsx +48 -17
- package/src/components/CustomSelect/helpers.ts +23 -0
- package/src/components/Div/Div.tsx +13 -3
- package/src/components/File/File.tsx +48 -11
- package/src/components/Input/Input.tsx +51 -14
- package/src/components/MiniInfoCell/MiniInfoCell.module.css +1 -1
- package/src/components/NativeSelect/NativeSelect.tsx +57 -18
- package/src/components/Radio/Radio.tsx +51 -8
- package/src/components/Radio/RadioInput/RadioInput.tsx +35 -11
- package/src/components/Search/Search.tsx +80 -29
- package/src/components/Select/Select.tsx +22 -3
- package/src/components/SelectionControl/SelectionControl.tsx +2 -1
- package/src/components/Snackbar/Snackbar.tsx +35 -5
- package/src/components/SplitLayout/SplitLayout.tsx +46 -12
- package/src/components/Switch/Switch.tsx +62 -31
- package/src/components/Textarea/Textarea.tsx +58 -14
- package/src/components/WriteBar/WriteBar.tsx +59 -13
- package/src/hooks/useMergeProps.ts +66 -0
- package/src/index.ts +3 -0
- package/src/lib/animation/useCSSTransition.ts +1 -1
- package/src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts +1 -1
- package/src/lib/fx.ts +63 -8
- package/src/lib/layouts/gaps.ts +4 -5
- package/src/lib/layouts/helpers.ts +24 -0
- package/src/lib/layouts/index.ts +13 -0
- package/src/lib/layouts/layoutProps.ts +75 -0
- package/src/lib/layouts/resolveLayoutProps.ts +51 -0
- package/src/lib/layouts/types.ts +142 -0
- package/src/lib/warnOnce.ts +1 -1
- package/src/styles/layout.css +1 -0
- package/src/styles/layout.css.d.ts.map +1 -0
|
@@ -5,12 +5,15 @@ import { classNames } from '@vkontakte/vkjs';
|
|
|
5
5
|
import { isHTMLElement } from '@vkontakte/vkui-floating-ui/utils/dom';
|
|
6
6
|
import { useAdaptivity } from '../../hooks/useAdaptivity';
|
|
7
7
|
import { useExternRef } from '../../hooks/useExternRef';
|
|
8
|
+
import { useMergeProps } from '../../hooks/useMergeProps';
|
|
8
9
|
import { getHorizontalFocusGoTo, Keys } from '../../lib/accessibility';
|
|
10
|
+
import { callMultiple } from '../../lib/callMultiple';
|
|
9
11
|
import {
|
|
10
12
|
contains as checkTargetIsInputEl,
|
|
11
13
|
contains,
|
|
12
14
|
getActiveElementByAnotherElement,
|
|
13
15
|
} from '../../lib/dom';
|
|
16
|
+
import { warnOnce } from '../../lib/warnOnce';
|
|
14
17
|
import { FormField } from '../FormField/FormField';
|
|
15
18
|
import { FormFieldClearButton } from '../FormFieldClearButton/FormFieldClearButton';
|
|
16
19
|
import { Text } from '../Typography/Text/Text';
|
|
@@ -25,6 +28,8 @@ import {
|
|
|
25
28
|
import type { ChipOption, ChipOptionValue, ChipsInputBasePrivateProps, NavigateTo } from './types';
|
|
26
29
|
import styles from './ChipsInputBase.module.css';
|
|
27
30
|
|
|
31
|
+
const warn = warnOnce('ChipsInputBase');
|
|
32
|
+
|
|
28
33
|
const sizeYClassNames = {
|
|
29
34
|
none: styles.sizeYNone,
|
|
30
35
|
compact: styles.sizeYCompact,
|
|
@@ -32,9 +37,9 @@ const sizeYClassNames = {
|
|
|
32
37
|
|
|
33
38
|
export const ChipsInputBase = <O extends ChipOption>({
|
|
34
39
|
// FormFieldProps
|
|
35
|
-
getRootRef,
|
|
36
|
-
style,
|
|
37
|
-
className,
|
|
40
|
+
'getRootRef': rootGetRootRef,
|
|
41
|
+
'style': rootStyle,
|
|
42
|
+
'className': rootClassName,
|
|
38
43
|
before,
|
|
39
44
|
after,
|
|
40
45
|
status,
|
|
@@ -49,13 +54,8 @@ export const ChipsInputBase = <O extends ChipOption>({
|
|
|
49
54
|
|
|
50
55
|
// input
|
|
51
56
|
getRef,
|
|
52
|
-
'
|
|
53
|
-
inputValue = DEFAULT_INPUT_VALUE,
|
|
54
|
-
placeholder,
|
|
55
|
-
disabled,
|
|
56
|
-
readOnly,
|
|
57
|
+
'inputValue': inputValueProp = DEFAULT_INPUT_VALUE,
|
|
57
58
|
addOnBlur,
|
|
58
|
-
onBlur,
|
|
59
59
|
onInputChange,
|
|
60
60
|
|
|
61
61
|
// clear
|
|
@@ -67,11 +67,55 @@ export const ChipsInputBase = <O extends ChipOption>({
|
|
|
67
67
|
// a11y
|
|
68
68
|
chipsListLabel = 'Выбранные элементы',
|
|
69
69
|
'aria-label': ariaLabel = '',
|
|
70
|
+
|
|
71
|
+
slotProps,
|
|
70
72
|
...restProps
|
|
71
73
|
}: ChipsInputBasePrivateProps<O>): React.ReactNode => {
|
|
72
74
|
const { sizeY = 'none' } = useAdaptivity();
|
|
75
|
+
|
|
76
|
+
/* istanbul ignore if: не проверяем в тестах */
|
|
77
|
+
if (process.env.NODE_ENV === 'development' && getRef) {
|
|
78
|
+
warn('Свойство `getRef` устаревшее, используйте `slotProps={ input: { getRootRef: ... } }`');
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const {
|
|
82
|
+
className,
|
|
83
|
+
style,
|
|
84
|
+
getRootRef,
|
|
85
|
+
onClick: onRootClick,
|
|
86
|
+
onMouseDown: onRootMouseDown,
|
|
87
|
+
...rootRest
|
|
88
|
+
} = useMergeProps(
|
|
89
|
+
{
|
|
90
|
+
getRootRef: rootGetRootRef,
|
|
91
|
+
style: rootStyle,
|
|
92
|
+
className: rootClassName,
|
|
93
|
+
},
|
|
94
|
+
slotProps?.root,
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
const {
|
|
98
|
+
getRootRef: getInputRef,
|
|
99
|
+
onBlur,
|
|
100
|
+
placeholder,
|
|
101
|
+
readOnly,
|
|
102
|
+
disabled,
|
|
103
|
+
id,
|
|
104
|
+
value: inputValue = DEFAULT_INPUT_VALUE,
|
|
105
|
+
...inputRest
|
|
106
|
+
} = useMergeProps(
|
|
107
|
+
{
|
|
108
|
+
getRootRef: getRef,
|
|
109
|
+
className: styles.el,
|
|
110
|
+
value: inputValueProp,
|
|
111
|
+
onChange: onInputChange,
|
|
112
|
+
...restProps,
|
|
113
|
+
},
|
|
114
|
+
slotProps?.input,
|
|
115
|
+
);
|
|
116
|
+
|
|
73
117
|
const idGenerated = React.useId();
|
|
74
|
-
const inputRef = useExternRef(
|
|
118
|
+
const inputRef = useExternRef(getInputRef);
|
|
75
119
|
const containerRef = React.useRef<HTMLDivElement>(null);
|
|
76
120
|
const listboxRef = React.useRef<HTMLDivElement>(null);
|
|
77
121
|
|
|
@@ -232,7 +276,7 @@ export const ChipsInputBase = <O extends ChipOption>({
|
|
|
232
276
|
return undefined;
|
|
233
277
|
}, [after, clearButton]);
|
|
234
278
|
|
|
235
|
-
const inputId =
|
|
279
|
+
const inputId = id || `chips-input-base-generated-id-${idGenerated}`;
|
|
236
280
|
|
|
237
281
|
const handleRootMouseDown = (e: React.MouseEvent<HTMLDivElement>) => {
|
|
238
282
|
// Если клик был в один из чипов, то preventDefault делать не нужно, так как не будет срабатывать выделение текста
|
|
@@ -273,8 +317,9 @@ export const ChipsInputBase = <O extends ChipOption>({
|
|
|
273
317
|
mode={mode}
|
|
274
318
|
className={className}
|
|
275
319
|
maxHeight={maxHeight}
|
|
276
|
-
onClick={disabled ?
|
|
277
|
-
onMouseDown={handleRootMouseDown}
|
|
320
|
+
onClick={disabled ? onRootClick : callMultiple(handleRootClick, onRootClick)}
|
|
321
|
+
onMouseDown={callMultiple(handleRootMouseDown, onRootMouseDown)}
|
|
322
|
+
{...rootRest}
|
|
278
323
|
>
|
|
279
324
|
<div
|
|
280
325
|
className={classNames(
|
|
@@ -329,19 +374,17 @@ export const ChipsInputBase = <O extends ChipOption>({
|
|
|
329
374
|
autoComplete="off"
|
|
330
375
|
autoCorrect="off"
|
|
331
376
|
spellCheck={false}
|
|
332
|
-
{...restProps}
|
|
333
377
|
aria-label={ariaLabel}
|
|
334
378
|
Component="input"
|
|
335
379
|
type="text"
|
|
336
380
|
id={inputId}
|
|
337
381
|
getRootRef={inputRef}
|
|
338
|
-
className={styles.el}
|
|
339
382
|
disabled={disabled}
|
|
340
383
|
readOnly={readOnly}
|
|
341
|
-
placeholder={withPlaceholder ? placeholder : undefined}
|
|
342
384
|
value={inputValue}
|
|
343
|
-
|
|
385
|
+
placeholder={withPlaceholder ? placeholder : undefined}
|
|
344
386
|
onBlur={handleInputBlur}
|
|
387
|
+
{...inputRest}
|
|
345
388
|
/>
|
|
346
389
|
</div>
|
|
347
390
|
</FormField>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type * as React from 'react';
|
|
2
|
-
import type { HasAlign,
|
|
2
|
+
import type { HasAlign, HasDataAttribute, HasRootRef } from '../../types';
|
|
3
3
|
import { type FormFieldProps } from '../FormField/FormField';
|
|
4
4
|
import { type FormFieldClearButtonProps } from '../FormFieldClearButton/FormFieldClearButton';
|
|
5
5
|
import { type ChipProps } from './Chip/Chip';
|
|
@@ -119,12 +119,23 @@ export interface ChipsInputBaseProps<O extends ChipOption = ChipOption>
|
|
|
119
119
|
React.InputHTMLAttributes<HTMLInputElement>,
|
|
120
120
|
keyof UseChipsInputBaseProps<O> | 'defaultChecked'
|
|
121
121
|
>,
|
|
122
|
-
|
|
122
|
+
HasRootRef<HTMLDivElement>,
|
|
123
123
|
HasAlign {
|
|
124
124
|
/**
|
|
125
|
-
*
|
|
125
|
+
* @deprecated Since 7.9.0. Вместо этого используйте `slotProps={ input: { getRootRef: ... } }`.
|
|
126
126
|
*/
|
|
127
|
-
|
|
127
|
+
getRef?: React.Ref<HTMLInputElement>;
|
|
128
|
+
/**
|
|
129
|
+
* Свойства, которые можно прокинуть внутрь компонента:
|
|
130
|
+
* - `root`: свойства для прокидывания в корень компонента;
|
|
131
|
+
* - `input`: свойства для прокидывания в поле ввода.
|
|
132
|
+
*/
|
|
133
|
+
slotProps?: {
|
|
134
|
+
root?: React.HTMLAttributes<HTMLDivElement> & HasRootRef<HTMLDivElement> & HasDataAttribute;
|
|
135
|
+
input?: React.InputHTMLAttributes<HTMLInputElement> &
|
|
136
|
+
HasRootRef<HTMLInputElement> &
|
|
137
|
+
HasDataAttribute;
|
|
138
|
+
};
|
|
128
139
|
/**
|
|
129
140
|
* Добавляет значение в список на событие `onBlur`.
|
|
130
141
|
*/
|
|
@@ -5,6 +5,7 @@ import { type MouseEventHandler } from 'react';
|
|
|
5
5
|
import { classNames } from '@vkontakte/vkjs';
|
|
6
6
|
import { useExternRef } from '../../hooks/useExternRef';
|
|
7
7
|
import { useGlobalOnEventOutside } from '../../hooks/useGlobalOnClickOutside';
|
|
8
|
+
import { useMergeProps } from '../../hooks/useMergeProps';
|
|
8
9
|
import { Keys } from '../../lib/accessibility';
|
|
9
10
|
import type { Placement } from '../../lib/floating';
|
|
10
11
|
import { defaultFilterFn } from '../../lib/select';
|
|
@@ -147,7 +148,6 @@ export interface ChipsSelectProps<O extends ChipOption>
|
|
|
147
148
|
*/
|
|
148
149
|
export const ChipsSelect = <Option extends ChipOption>({
|
|
149
150
|
// FormFieldProps
|
|
150
|
-
id: labelledbyId,
|
|
151
151
|
getRootRef,
|
|
152
152
|
className,
|
|
153
153
|
status = 'default',
|
|
@@ -178,19 +178,14 @@ export const ChipsSelect = <Option extends ChipOption>({
|
|
|
178
178
|
value: valueProp,
|
|
179
179
|
defaultValue,
|
|
180
180
|
inputValue: inputValueProp,
|
|
181
|
-
defaultInputValue,
|
|
182
|
-
disabled,
|
|
183
|
-
readOnly,
|
|
181
|
+
defaultInputValue: defaultInputValueProp,
|
|
184
182
|
getOptionValue = getOptionValueDefault,
|
|
185
183
|
getOptionLabel = getOptionLabelDefault,
|
|
186
184
|
getNewOptionData = getNewOptionDataDefault,
|
|
187
185
|
renderChip = renderChipDefault,
|
|
188
186
|
renderOption = renderOptionDefault,
|
|
189
187
|
onChange,
|
|
190
|
-
onFocus: onFocusProp,
|
|
191
188
|
onInputChange: onInputChangeProp,
|
|
192
|
-
onBlur: onBlurProp,
|
|
193
|
-
onKeyDown: onKeyDownProp,
|
|
194
189
|
dropdownOffsetDistance = 0,
|
|
195
190
|
allowClearButton,
|
|
196
191
|
clearButtonTestId,
|
|
@@ -198,8 +193,46 @@ export const ChipsSelect = <Option extends ChipOption>({
|
|
|
198
193
|
|
|
199
194
|
// a11y
|
|
200
195
|
chipsListLabel,
|
|
196
|
+
|
|
197
|
+
// input native props
|
|
198
|
+
disabled: disabledProp,
|
|
199
|
+
readOnly: readOnlyProp,
|
|
200
|
+
id: idProp,
|
|
201
|
+
onFocus: onFocusProp,
|
|
202
|
+
onBlur: onBlurProp,
|
|
203
|
+
onKeyDown: onKeyDownProp,
|
|
204
|
+
|
|
205
|
+
slotProps,
|
|
201
206
|
...restProps
|
|
202
207
|
}: ChipsSelectProps<Option>): React.ReactNode => {
|
|
208
|
+
const {
|
|
209
|
+
getRootRef: getInputRef,
|
|
210
|
+
value: resolvedInputValue,
|
|
211
|
+
defaultValue: resolvedDefaultInputValue,
|
|
212
|
+
onChange: resolvedOnInputChange,
|
|
213
|
+
disabled,
|
|
214
|
+
readOnly,
|
|
215
|
+
id: labelledbyId,
|
|
216
|
+
onFocus,
|
|
217
|
+
onBlur,
|
|
218
|
+
onKeyDown,
|
|
219
|
+
...inputRest
|
|
220
|
+
} = useMergeProps(
|
|
221
|
+
{
|
|
222
|
+
getRootRef: getRef,
|
|
223
|
+
value: inputValueProp,
|
|
224
|
+
defaultValue: defaultInputValueProp,
|
|
225
|
+
onChange: onInputChangeProp,
|
|
226
|
+
disabled: disabledProp,
|
|
227
|
+
readOnly: readOnlyProp,
|
|
228
|
+
id: idProp,
|
|
229
|
+
onFocus: onFocusProp,
|
|
230
|
+
onBlur: onBlurProp,
|
|
231
|
+
onKeyDown: onKeyDownProp,
|
|
232
|
+
},
|
|
233
|
+
slotProps?.input,
|
|
234
|
+
);
|
|
235
|
+
|
|
203
236
|
const {
|
|
204
237
|
// Связано с ChipsInputProps
|
|
205
238
|
// option
|
|
@@ -232,9 +265,9 @@ export const ChipsSelect = <Option extends ChipOption>({
|
|
|
232
265
|
getNewOptionData,
|
|
233
266
|
|
|
234
267
|
// input
|
|
235
|
-
inputValue:
|
|
236
|
-
defaultInputValue,
|
|
237
|
-
onInputChange:
|
|
268
|
+
inputValue: resolvedInputValue as string,
|
|
269
|
+
defaultInputValue: resolvedDefaultInputValue as string,
|
|
270
|
+
onInputChange: resolvedOnInputChange,
|
|
238
271
|
|
|
239
272
|
// dropdown
|
|
240
273
|
options: optionsProp,
|
|
@@ -253,7 +286,7 @@ export const ChipsSelect = <Option extends ChipOption>({
|
|
|
253
286
|
|
|
254
287
|
// Связано с ChipsInputProps
|
|
255
288
|
const rootRef = useExternRef(getRootRef);
|
|
256
|
-
const inputRef = useExternRef(
|
|
289
|
+
const inputRef = useExternRef(getInputRef, inputRefHook);
|
|
257
290
|
|
|
258
291
|
// Связано с CustomSelectDropdownProps
|
|
259
292
|
const [dropdownVerticalPlacement, setDropdownVerticalPlacement] = React.useState<
|
|
@@ -274,8 +307,8 @@ export const ChipsSelect = <Option extends ChipOption>({
|
|
|
274
307
|
const dropdownScrollBoxRef = React.useRef<HTMLDivElement>(null);
|
|
275
308
|
|
|
276
309
|
const handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {
|
|
277
|
-
if (
|
|
278
|
-
|
|
310
|
+
if (onFocus) {
|
|
311
|
+
onFocus(event);
|
|
279
312
|
}
|
|
280
313
|
|
|
281
314
|
if (!readOnly) {
|
|
@@ -285,8 +318,8 @@ export const ChipsSelect = <Option extends ChipOption>({
|
|
|
285
318
|
};
|
|
286
319
|
|
|
287
320
|
const handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {
|
|
288
|
-
if (
|
|
289
|
-
|
|
321
|
+
if (onBlur) {
|
|
322
|
+
onBlur(event);
|
|
290
323
|
}
|
|
291
324
|
|
|
292
325
|
// Не добавляем значение, если его нужно выбрать строго из списка
|
|
@@ -352,8 +385,8 @@ export const ChipsSelect = <Option extends ChipOption>({
|
|
|
352
385
|
};
|
|
353
386
|
|
|
354
387
|
const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {
|
|
355
|
-
if (
|
|
356
|
-
|
|
388
|
+
if (onKeyDown) {
|
|
389
|
+
onKeyDown(event);
|
|
357
390
|
}
|
|
358
391
|
|
|
359
392
|
if (event.defaultPrevented || readOnly) {
|
|
@@ -554,13 +587,9 @@ export const ChipsSelect = <Option extends ChipOption>({
|
|
|
554
587
|
return (
|
|
555
588
|
<>
|
|
556
589
|
<ChipsInputBase
|
|
557
|
-
{...restProps}
|
|
558
|
-
disabled={disabled}
|
|
559
|
-
readOnly={readOnly}
|
|
560
590
|
clearButtonShown={clearButtonShown}
|
|
561
591
|
clearButtonTestId={clearButtonTestId}
|
|
562
592
|
// FormFieldProps
|
|
563
|
-
id={labelledbyId}
|
|
564
593
|
getRootRef={rootRef}
|
|
565
594
|
className={classNames(styles.host, openedClassNames, className)}
|
|
566
595
|
status={status}
|
|
@@ -582,20 +611,29 @@ export const ChipsSelect = <Option extends ChipOption>({
|
|
|
582
611
|
onRemoveChipOption={removeOption}
|
|
583
612
|
renderChip={renderChip}
|
|
584
613
|
onClear={clearOptions}
|
|
585
|
-
// input
|
|
586
|
-
getRef={inputRef}
|
|
587
|
-
inputValue={inputValue}
|
|
588
|
-
onInputChange={onInputChange}
|
|
589
|
-
onFocus={handleFocus}
|
|
590
|
-
onBlur={handleBlur}
|
|
591
|
-
onKeyDown={handleKeyDown}
|
|
592
614
|
// a11y
|
|
593
|
-
role="combobox"
|
|
594
|
-
aria-expanded={opened}
|
|
595
|
-
aria-autocomplete="list"
|
|
596
|
-
aria-activedescendant={opened ? dropdownCurrentItemId : undefined}
|
|
597
|
-
aria-haspopup="listbox"
|
|
598
615
|
chipsListLabel={chipsListLabel}
|
|
616
|
+
slotProps={{
|
|
617
|
+
...slotProps,
|
|
618
|
+
input: {
|
|
619
|
+
'role': 'combobox',
|
|
620
|
+
'aria-expanded': opened,
|
|
621
|
+
'aria-autocomplete': 'list',
|
|
622
|
+
'aria-activedescendant': opened ? dropdownCurrentItemId : undefined,
|
|
623
|
+
'aria-haspopup': 'listbox',
|
|
624
|
+
'getRootRef': inputRef,
|
|
625
|
+
'value': inputValue,
|
|
626
|
+
'onChange': onInputChange,
|
|
627
|
+
disabled,
|
|
628
|
+
readOnly,
|
|
629
|
+
'id': labelledbyId,
|
|
630
|
+
'onFocus': handleFocus,
|
|
631
|
+
'onBlur': handleBlur,
|
|
632
|
+
'onKeyDown': handleKeyDown,
|
|
633
|
+
...inputRest,
|
|
634
|
+
},
|
|
635
|
+
}}
|
|
636
|
+
{...restProps}
|
|
599
637
|
/>
|
|
600
638
|
{opened && (
|
|
601
639
|
<CustomSelectDropdown
|