@hh.ru/magritte-ui-chips-trigger 4.4.1 → 4.5.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/ChipsTrigger.d.ts +7 -2
- package/ChipsTrigger.js +16 -14
- package/ChipsTrigger.js.map +1 -1
- package/UncontrolledChipsTrigger.d.ts +8 -2
- package/UncontrolledChipsTrigger.js +3 -2
- package/UncontrolledChipsTrigger.js.map +1 -1
- package/index.css +41 -41
- package/package.json +5 -5
- package/types.d.ts +21 -11
package/ChipsTrigger.d.ts
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
-
import { InputHTMLAttributes } from 'react';
|
|
1
|
+
import { LegacyRef, InputHTMLAttributes, ReactElement } from 'react';
|
|
2
2
|
import { ChipsTriggerProps } from '@hh.ru/magritte-ui-chips-trigger/types';
|
|
3
|
-
|
|
3
|
+
declare const ChipsTrigger: (<T>(props: ChipsTriggerProps<T> & Omit<InputHTMLAttributes<HTMLInputElement>, keyof ChipsTriggerProps<T>> & {
|
|
4
|
+
ref?: LegacyRef<HTMLInputElement>;
|
|
5
|
+
}) => ReactElement | null) & {
|
|
6
|
+
displayName: string;
|
|
7
|
+
};
|
|
8
|
+
export { ChipsTrigger };
|
package/ChipsTrigger.js
CHANGED
|
@@ -12,7 +12,7 @@ import { ChevronDownOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';
|
|
|
12
12
|
import { useFocus } from '@hh.ru/magritte-ui-input/useFocus';
|
|
13
13
|
import { useScrollbar, Scrollbar } from '@hh.ru/magritte-ui-scrollbar';
|
|
14
14
|
|
|
15
|
-
var styles = {"root":"magritte-root___-zVdz_4-
|
|
15
|
+
var styles = {"root":"magritte-root___-zVdz_4-5-0","focused":"magritte-focused___0Uzyu_4-5-0","invalid":"magritte-invalid___tVzQV_4-5-0","disabled":"magritte-disabled___UeqcV_4-5-0","label":"magritte-label___j7Trt_4-5-0","field-input":"magritte-field-input___04Cag_4-5-0","fieldInput":"magritte-field-input___04Cag_4-5-0","scrollable-area":"magritte-scrollable-area___-xMF2_4-5-0","scrollableArea":"magritte-scrollable-area___-xMF2_4-5-0","focus-visible":"magritte-focus-visible___ifvAP_4-5-0","focusVisible":"magritte-focus-visible___ifvAP_4-5-0","large":"magritte-large___JIrIy_4-5-0","field":"magritte-field___rlEmn_4-5-0","icon":"magritte-icon___fDMiz_4-5-0","scrollable-area-wrapper":"magritte-scrollable-area-wrapper___hZNQd_4-5-0","scrollableAreaWrapper":"magritte-scrollable-area-wrapper___hZNQd_4-5-0","scrollable-area-wrapper_with-icon":"magritte-scrollable-area-wrapper_with-icon___2VoX9_4-5-0","scrollableAreaWrapperWithIcon":"magritte-scrollable-area-wrapper_with-icon___2VoX9_4-5-0","medium":"magritte-medium___Xk-XB_4-5-0","chips-and-input":"magritte-chips-and-input___qg-Ba_4-5-0","chipsAndInput":"magritte-chips-and-input___qg-Ba_4-5-0","label-wrapper":"magritte-label-wrapper___De7Bm_4-5-0","labelWrapper":"magritte-label-wrapper___De7Bm_4-5-0","icon_expanded":"magritte-icon_expanded___RaOT-_4-5-0","iconExpanded":"magritte-icon_expanded___RaOT-_4-5-0","custom-chip-wrapper":"magritte-custom-chip-wrapper___a9kJ6_4-5-0","customChipWrapper":"magritte-custom-chip-wrapper___a9kJ6_4-5-0"};
|
|
16
16
|
|
|
17
17
|
const focusOnLastChip = (event, chipsContainer, input) => {
|
|
18
18
|
if (!chipsContainer || !input) {
|
|
@@ -24,7 +24,8 @@ const focusOnLastChip = (event, chipsContainer, input) => {
|
|
|
24
24
|
nextFocusableElement.focus();
|
|
25
25
|
}
|
|
26
26
|
};
|
|
27
|
-
const
|
|
27
|
+
const ChipLayoutComponentDefault = ({ data: _, ...props }) => (jsx(CustomChip, { ...props }));
|
|
28
|
+
const ChipsTriggerComponent = ({ size = 'large', placeholder, disabled, expanded: externalExpanded, toggleExpanded: toggleExternalExpanded, state, chipLayoutComponent, invalid, maxHeight, description, errorMessage, wrapperRef, rightIcon = true, onChange, onFocus, onBlur, onKeyDown, onChangeInput: onChangeInputExternal, allowArbitraryValues = true, 'data-qa': dataQa = 'chips-trigger', deleteButtonAriaLabel: _deleteButtonAriaLabel, 'aria-expanded': ariaExpanded, 'aria-controls': ariaControls, }, ref) => {
|
|
28
29
|
const { isMobile } = useBreakpoint();
|
|
29
30
|
const [expanded, setExpanded] = useState(false);
|
|
30
31
|
const [isFocusVisible, setFocusVisible] = useState(false);
|
|
@@ -42,7 +43,6 @@ const ChipsTrigger = forwardRef(({ size = 'large', placeholder, disabled, expand
|
|
|
42
43
|
const labelId = useId();
|
|
43
44
|
const ariaLabeledBy = `chips-trigger-label-${labelId}`;
|
|
44
45
|
const deleteButtonAriaTrl = useTranslation('ChipsTrigger', 'delete');
|
|
45
|
-
const deleteButtonAriaLabel = _deleteButtonAriaLabel ?? deleteButtonAriaTrl;
|
|
46
46
|
const onChangeInput = useCallback((value) => {
|
|
47
47
|
onChange({
|
|
48
48
|
value,
|
|
@@ -58,11 +58,12 @@ const ChipsTrigger = forwardRef(({ size = 'large', placeholder, disabled, expand
|
|
|
58
58
|
}
|
|
59
59
|
}, [isFocused]);
|
|
60
60
|
const deleteHandler = useCallback((index) => {
|
|
61
|
-
const
|
|
61
|
+
const chips = [...state.chips];
|
|
62
|
+
const [deletedChip] = chips.splice(index, 1);
|
|
62
63
|
onChange({
|
|
63
64
|
value: state.value,
|
|
64
|
-
chips
|
|
65
|
-
event: { type: 'remove', modifier: 'cross', element: deletedChip
|
|
65
|
+
chips,
|
|
66
|
+
event: { type: 'remove', modifier: 'cross', element: deletedChip },
|
|
66
67
|
});
|
|
67
68
|
}, [onChange, state.chips, state.value]);
|
|
68
69
|
const keyDownHandler = useCallback((event) => {
|
|
@@ -83,10 +84,11 @@ const ChipsTrigger = forwardRef(({ size = 'large', placeholder, disabled, expand
|
|
|
83
84
|
if (state.chips.length === 0) {
|
|
84
85
|
return;
|
|
85
86
|
}
|
|
86
|
-
const
|
|
87
|
+
const chips = [...state.chips];
|
|
88
|
+
const deletedChip = chips.pop();
|
|
87
89
|
onChange({
|
|
88
90
|
value: state.value,
|
|
89
|
-
chips
|
|
91
|
+
chips,
|
|
90
92
|
event: { type: 'remove', modifier: 'backspace', element: deletedChip },
|
|
91
93
|
});
|
|
92
94
|
}
|
|
@@ -97,9 +99,8 @@ const ChipsTrigger = forwardRef(({ size = 'large', placeholder, disabled, expand
|
|
|
97
99
|
}, [allowArbitraryValues, onChange, onChangeInputExternal, state]);
|
|
98
100
|
// при выставлении высоты учитваем падинги
|
|
99
101
|
// иначе высота будет больше значения свойства
|
|
100
|
-
const scrollableAreaStyle = maxHeight
|
|
101
|
-
|
|
102
|
-
: undefined;
|
|
102
|
+
const scrollableAreaStyle = maxHeight ? { maxHeight: `${maxHeight - (size === 'medium' ? 16 : 24)}px` } : undefined;
|
|
103
|
+
const ChipLayoutComponent = chipLayoutComponent ?? ChipLayoutComponentDefault;
|
|
103
104
|
const showIcon = rightIcon !== false;
|
|
104
105
|
const showCustomIcon = isValidElement(rightIcon);
|
|
105
106
|
return (jsxs("div", { children: [jsxs("div", { ref: chipsRootRefCallback, className: classnames(styles.root, styles[size], scrollbar.hoverContainerCssClass, {
|
|
@@ -142,13 +143,14 @@ const ChipsTrigger = forwardRef(({ size = 'large', placeholder, disabled, expand
|
|
|
142
143
|
}, tabIndex: disabled ? undefined : 0, "data-qa": dataQa, "aria-disabled": disabled, children: [jsx("div", { style: scrollableAreaStyle, className: classnames(styles.scrollableAreaWrapper, {
|
|
143
144
|
[styles.scrollableAreaWrapperWithIcon]: showIcon,
|
|
144
145
|
}), children: jsx("div", { className: styles.scrollableArea, ref: scrollbar.scrollContainerRef, children: jsxs("div", { ref: chipsContainerRefCallback, className: styles.chipsAndInput, children: [state.chips.map((chip, index) => {
|
|
145
|
-
return (jsx("div", { className: styles.customChipWrapper, onMouseDown: (event) => event.preventDefault(), children: jsx(
|
|
146
|
+
return (jsx("div", { className: styles.customChipWrapper, onMouseDown: (event) => event.preventDefault(), children: jsx(ChipLayoutComponent, { Element: "button", size: "extra-small", onDelete: () => {
|
|
146
147
|
deleteHandler(index);
|
|
147
|
-
}, dataQaWrapper: `chips-trigger-chip-${chip.value}`,
|
|
148
|
+
}, dataQaWrapper: `chips-trigger-chip-${chip.value}`, deleteButtonAriaLabel: _deleteButtonAriaLabel ?? deleteButtonAriaTrl, disabled: disabled, data: chip.data, deleteOnly: true, children: chip.label ?? chip.value }) }, `${chip.value}-${index}`));
|
|
148
149
|
}), jsxs("div", { className: styles.field, children: [jsx("input", { ref: inputRefCallback, className: styles.fieldInput, type: "text", disabled: disabled, value: state.value, onKeyDown: keyDownHandler, onFocus: focusHandler, onBlur: blurHandler, onChange: changeHandler, "data-qa": "chips-trigger-input", readOnly: isMobile, "aria-labelledby": showLabel ? ariaLabeledBy : undefined, role: 'combobox', "aria-haspopup": 'listbox', "aria-autocomplete": 'list', "aria-expanded": ariaExpanded, "aria-controls": ariaControls }), showLabel && (jsx("div", { className: styles.labelWrapper, children: jsx("label", { className: styles.label, id: ariaLabeledBy, children: placeholder }) }))] })] }) }) }), showIcon && (jsx("div", { className: classnames(styles.icon, {
|
|
149
150
|
[styles.iconExpanded]: (expanded || externalExpanded) && !showCustomIcon,
|
|
150
151
|
}), "data-qa": "chips-trigger-icon", children: showCustomIcon ? rightIcon : jsx(ChevronDownOutlinedSize24, {}) })), hasVerticalScroll && jsx(Scrollbar, { ...verticalScrollbarProps })] }), jsx(FormHelper, { description: description, errorMessage: errorMessage, disabled: disabled, invalid: invalid })] }));
|
|
151
|
-
}
|
|
152
|
+
};
|
|
153
|
+
const ChipsTrigger = forwardRef(ChipsTriggerComponent);
|
|
152
154
|
ChipsTrigger.displayName = 'ChipsTrigger';
|
|
153
155
|
|
|
154
156
|
export { ChipsTrigger };
|
package/ChipsTrigger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChipsTrigger.js","sources":["src/ChipsTrigger.tsx"],"sourcesContent":["import {\n InputHTMLAttributes,\n KeyboardEventHandler,\n SyntheticEvent,\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n isValidElement,\n} from 'react';\nimport classnames from 'classnames';\n\nimport { findNextFocusableElement, keyboardKeys, keyboardMatch } from '@hh.ru/magritte-common-keyboard';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { useTranslation } from '@hh.ru/magritte-common-use-translation';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { CustomChip } from '@hh.ru/magritte-ui-chips';\nimport { ChipsTriggerProps } from '@hh.ru/magritte-ui-chips-trigger/types';\nimport { FormHelper } from '@hh.ru/magritte-ui-form-helper';\nimport { ChevronDownOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';\nimport { useFocus } from '@hh.ru/magritte-ui-input/useFocus';\nimport { Scrollbar, useScrollbar } from '@hh.ru/magritte-ui-scrollbar';\n\nimport styles from './chips-trigger.less';\n\nconst focusOnLastChip = (event: SyntheticEvent, chipsContainer: HTMLElement | null, input: HTMLElement | null) => {\n if (!chipsContainer || !input) {\n return;\n }\n const nextFocusableElement = findNextFocusableElement(chipsContainer, input, 'left', 'list');\n if (nextFocusableElement !== null) {\n event.preventDefault();\n nextFocusableElement.focus();\n }\n};\n\ntype State = {\n hadFocusWhenClicked: boolean;\n wasExpandedWhenClicked: boolean;\n};\n\nexport const ChipsTrigger = forwardRef<\n HTMLInputElement,\n ChipsTriggerProps & Omit<InputHTMLAttributes<HTMLInputElement>, keyof ChipsTriggerProps>\n>(\n (\n {\n size = 'large',\n placeholder,\n disabled,\n expanded: externalExpanded,\n toggleExpanded: toggleExternalExpanded,\n state,\n rightIcon = true,\n invalid,\n maxHeight,\n description,\n errorMessage,\n wrapperRef,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n onChangeInput: onChangeInputExternal,\n allowArbitraryValues = true,\n 'data-qa': dataQa = 'chips-trigger',\n deleteButtonAriaLabel: _deleteButtonAriaLabel,\n 'aria-expanded': ariaExpanded,\n 'aria-controls': ariaControls,\n },\n ref\n ) => {\n const { isMobile } = useBreakpoint();\n const [expanded, setExpanded] = useState(false);\n const [isFocusVisible, setFocusVisible] = useState(false);\n const stateRef = useRef<State>({ hadFocusWhenClicked: false, wasExpandedWhenClicked: false });\n\n const { hasVerticalScroll, verticalScrollbarProps, ...scrollbar } = useScrollbar({\n axis: disabled ? 'none' : 'vertical',\n });\n\n const chipsRootRef = useRef<HTMLDivElement>(null);\n const chipsRootRefCallback = useMultipleRefs(wrapperRef, chipsRootRef);\n const chipsContainerRef = useRef<HTMLDivElement>(null);\n const chipsContainerRefCallback = useMultipleRefs(chipsContainerRef, scrollbar.contentWrapperRef);\n const inputRef = useRef<HTMLInputElement>(null);\n const inputRefCallback = useMultipleRefs(inputRef, ref);\n const showLabel = state.value === '' && state.chips.length === 0 && placeholder !== '';\n const labelId = useId();\n const ariaLabeledBy = `chips-trigger-label-${labelId}`;\n const deleteButtonAriaTrl = useTranslation('ChipsTrigger', 'delete');\n const deleteButtonAriaLabel = _deleteButtonAriaLabel ?? deleteButtonAriaTrl;\n\n const onChangeInput = useCallback(\n (value: string) => {\n onChange({\n value,\n chips: state.chips,\n event: { type: 'change', modifier: 'keyboard' },\n });\n onChangeInputExternal?.(value);\n },\n [state.chips, onChange, onChangeInputExternal]\n );\n const { changeHandler, focusHandler, blurHandler, isFocused } = useFocus(onChangeInput, onFocus, onBlur);\n\n useEffect(() => {\n if (inputRef.current) {\n setFocusVisible(isFocused && inputRef.current.classList.contains('focus-visible'));\n }\n }, [isFocused]);\n\n const deleteHandler = useCallback(\n (index: number) => {\n const deletedChip = state.chips.splice(index, 1);\n onChange({\n value: state.value,\n chips: [...state.chips],\n event: { type: 'remove', modifier: 'cross', element: deletedChip?.[0] },\n });\n },\n [onChange, state.chips, state.value]\n );\n\n const keyDownHandler = useCallback<KeyboardEventHandler>(\n (event) => {\n // создаем новый чипс и затираем текстовый инпут\n if (allowArbitraryValues && keyboardMatch(event.nativeEvent, keyboardKeys.Enter)) {\n if (state.value.length === 0) {\n return;\n }\n onChange({\n value: '',\n chips: [...state.chips, { value: state.value, userInput: true }],\n event: { type: 'add', modifier: 'enter' },\n });\n onChangeInputExternal?.('');\n }\n // удаляем последний созданный чипс\n if (state.value === '' && keyboardMatch(event.nativeEvent, keyboardKeys.Backspace)) {\n if (state.chips.length === 0) {\n return;\n }\n const deletedChip = state.chips.pop();\n onChange({\n value: state.value,\n chips: [...state.chips],\n event: { type: 'remove', modifier: 'backspace', element: deletedChip },\n });\n }\n // пытаемся найти ближайший чипс для фокуса\n if (state.value === '' && keyboardMatch(event.nativeEvent, keyboardKeys.ArrowLeft)) {\n focusOnLastChip(event, chipsContainerRef.current, inputRef.current);\n }\n },\n [allowArbitraryValues, onChange, onChangeInputExternal, state]\n );\n\n // при выставлении высоты учитваем падинги\n // иначе высота будет больше значения свойства\n const scrollableAreaStyle = maxHeight\n ? { maxHeight: `${maxHeight - (size === 'medium' ? 16 : 24)}px` }\n : undefined;\n\n const showIcon = rightIcon !== false;\n const showCustomIcon = isValidElement(rightIcon);\n\n return (\n <div>\n <div\n ref={chipsRootRefCallback}\n className={classnames(styles.root, styles[size], scrollbar.hoverContainerCssClass, {\n [styles.focused]: isFocused,\n [styles.focusVisible]: isFocusVisible,\n [styles.disabled]: !!disabled,\n [styles.invalid]: !!invalid,\n })}\n onFocus={() => {\n if (disabled) {\n return;\n }\n if (!inputRef.current) {\n return;\n }\n setExpanded(true);\n // добавляем .focus() еще и тут\n // чтобы не сбрасывать фокус во время клика по chip\n // или по клику на враппер\n if (document.activeElement === chipsRootRef.current) {\n inputRef.current.focus();\n }\n }}\n onBlur={(event) => {\n stateRef.current.hadFocusWhenClicked &&=\n event.relatedTarget === chipsRootRef.current || event.relatedTarget === inputRef.current;\n setExpanded(false);\n }}\n onKeyDown={onKeyDown}\n onMouseDown={() => {\n // при повторном клике по инпуту в фокусе нужно закрыть дроп\n // при этом клик может прийтись на обертку, из-за чего инпут поймает blur и повторный фокус\n // что усложняет проверку того, что инпут уже был в фокусе в момент клика\n // поэтому в цепочке mouseDown -> blur -> focus -> click храним флаг, что фокус не вышел за пределы компонента\n stateRef.current.hadFocusWhenClicked = document.activeElement === inputRef.current;\n stateRef.current.wasExpandedWhenClicked = !!externalExpanded;\n }}\n onClick={() => {\n if (\n stateRef.current.hadFocusWhenClicked &&\n stateRef.current.wasExpandedWhenClicked === externalExpanded\n ) {\n toggleExternalExpanded?.();\n }\n stateRef.current.hadFocusWhenClicked = false;\n stateRef.current.wasExpandedWhenClicked = false;\n }}\n tabIndex={disabled ? undefined : 0}\n data-qa={dataQa}\n aria-disabled={disabled}\n >\n <div\n style={scrollableAreaStyle}\n className={classnames(styles.scrollableAreaWrapper, {\n [styles.scrollableAreaWrapperWithIcon]: showIcon,\n })}\n >\n <div\n className={styles.scrollableArea}\n ref={scrollbar.scrollContainerRef as React.Ref<HTMLDivElement>}\n >\n <div ref={chipsContainerRefCallback} className={styles.chipsAndInput}>\n {state.chips.map((chip, index) => {\n return (\n <div\n key={`${chip.value}-${index}`}\n className={styles.customChipWrapper}\n onMouseDown={(event) => event.preventDefault()}\n >\n <CustomChip\n Element=\"button\"\n size=\"extra-small\"\n disabled={disabled}\n onDelete={() => {\n deleteHandler(index);\n }}\n dataQaWrapper={`chips-trigger-chip-${chip.value}`}\n deleteOnly\n deleteButtonAriaLabel={deleteButtonAriaLabel}\n >\n {chip.label ?? chip.value}\n </CustomChip>\n </div>\n );\n })}\n <div className={styles.field}>\n <input\n ref={inputRefCallback}\n className={styles.fieldInput}\n type=\"text\"\n disabled={disabled}\n value={state.value}\n onKeyDown={keyDownHandler}\n onFocus={focusHandler}\n onBlur={blurHandler}\n onChange={changeHandler}\n data-qa=\"chips-trigger-input\"\n readOnly={isMobile}\n aria-labelledby={showLabel ? ariaLabeledBy : undefined}\n role={'combobox'}\n aria-haspopup={'listbox'}\n aria-autocomplete={'list'}\n aria-expanded={ariaExpanded}\n aria-controls={ariaControls}\n />\n {showLabel && (\n <div className={styles.labelWrapper}>\n <label className={styles.label} id={ariaLabeledBy}>\n {placeholder}\n </label>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n {showIcon && (\n <div\n className={classnames(styles.icon, {\n [styles.iconExpanded]: (expanded || externalExpanded) && !showCustomIcon,\n })}\n data-qa=\"chips-trigger-icon\"\n >\n {showCustomIcon ? rightIcon : <ChevronDownOutlinedSize24 />}\n </div>\n )}\n {hasVerticalScroll && <Scrollbar {...verticalScrollbarProps} />}\n </div>\n <FormHelper\n description={description}\n errorMessage={errorMessage}\n disabled={disabled}\n invalid={invalid}\n />\n </div>\n );\n }\n);\n\nChipsTrigger.displayName = 'ChipsTrigger';\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChipsTrigger.js","sources":["src/ChipsTrigger.tsx"],"sourcesContent":["import {\n ForwardedRef,\n LegacyRef,\n InputHTMLAttributes,\n KeyboardEventHandler,\n ReactElement,\n SyntheticEvent,\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n isValidElement,\n} from 'react';\nimport classnames from 'classnames';\n\nimport { findNextFocusableElement, keyboardKeys, keyboardMatch } from '@hh.ru/magritte-common-keyboard';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { useTranslation } from '@hh.ru/magritte-common-use-translation';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { CustomChip } from '@hh.ru/magritte-ui-chips';\nimport { ChipCustomLayoutProps, ChipsTriggerProps } from '@hh.ru/magritte-ui-chips-trigger/types';\nimport { FormHelper } from '@hh.ru/magritte-ui-form-helper';\nimport { ChevronDownOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';\nimport { useFocus } from '@hh.ru/magritte-ui-input/useFocus';\nimport { Scrollbar, useScrollbar } from '@hh.ru/magritte-ui-scrollbar';\n\nimport styles from './chips-trigger.less';\n\nconst focusOnLastChip = (event: SyntheticEvent, chipsContainer: HTMLElement | null, input: HTMLElement | null) => {\n if (!chipsContainer || !input) {\n return;\n }\n const nextFocusableElement = findNextFocusableElement(chipsContainer, input, 'left', 'list');\n if (nextFocusableElement !== null) {\n event.preventDefault();\n nextFocusableElement.focus();\n }\n};\n\nconst ChipLayoutComponentDefault = ({ data: _, ...props }: ChipCustomLayoutProps): ReactElement => (\n <CustomChip {...props} />\n);\n\ntype State = {\n hadFocusWhenClicked: boolean;\n wasExpandedWhenClicked: boolean;\n};\n\nconst ChipsTriggerComponent = <T,>(\n {\n size = 'large',\n placeholder,\n disabled,\n expanded: externalExpanded,\n toggleExpanded: toggleExternalExpanded,\n state,\n chipLayoutComponent,\n invalid,\n maxHeight,\n description,\n errorMessage,\n wrapperRef,\n rightIcon = true,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n onChangeInput: onChangeInputExternal,\n allowArbitraryValues = true,\n 'data-qa': dataQa = 'chips-trigger',\n deleteButtonAriaLabel: _deleteButtonAriaLabel,\n 'aria-expanded': ariaExpanded,\n 'aria-controls': ariaControls,\n }: ChipsTriggerProps<T> & Omit<InputHTMLAttributes<HTMLInputElement>, keyof ChipsTriggerProps<T>>,\n ref: ForwardedRef<HTMLInputElement>\n) => {\n const { isMobile } = useBreakpoint();\n const [expanded, setExpanded] = useState(false);\n const [isFocusVisible, setFocusVisible] = useState(false);\n const stateRef = useRef<State>({ hadFocusWhenClicked: false, wasExpandedWhenClicked: false });\n\n const { hasVerticalScroll, verticalScrollbarProps, ...scrollbar } = useScrollbar({\n axis: disabled ? 'none' : 'vertical',\n });\n\n const chipsRootRef = useRef<HTMLDivElement>(null);\n const chipsRootRefCallback = useMultipleRefs(wrapperRef, chipsRootRef);\n const chipsContainerRef = useRef<HTMLDivElement>(null);\n const chipsContainerRefCallback = useMultipleRefs(chipsContainerRef, scrollbar.contentWrapperRef);\n const inputRef = useRef<HTMLInputElement>(null);\n const inputRefCallback = useMultipleRefs(inputRef, ref);\n const showLabel = state.value === '' && state.chips.length === 0 && placeholder !== '';\n const labelId = useId();\n const ariaLabeledBy = `chips-trigger-label-${labelId}`;\n const deleteButtonAriaTrl = useTranslation('ChipsTrigger', 'delete');\n\n const onChangeInput = useCallback(\n (value: string) => {\n onChange({\n value,\n chips: state.chips,\n event: { type: 'change', modifier: 'keyboard' },\n });\n onChangeInputExternal?.(value);\n },\n [state.chips, onChange, onChangeInputExternal]\n );\n const { changeHandler, focusHandler, blurHandler, isFocused } = useFocus(onChangeInput, onFocus, onBlur);\n\n useEffect(() => {\n if (inputRef.current) {\n setFocusVisible(isFocused && inputRef.current.classList.contains('focus-visible'));\n }\n }, [isFocused]);\n\n const deleteHandler = useCallback(\n (index: number) => {\n const chips = [...state.chips];\n const [deletedChip] = chips.splice(index, 1);\n onChange({\n value: state.value,\n chips,\n event: { type: 'remove', modifier: 'cross', element: deletedChip },\n });\n },\n [onChange, state.chips, state.value]\n );\n\n const keyDownHandler = useCallback<KeyboardEventHandler>(\n (event) => {\n // создаем новый чипс и затираем текстовый инпут\n if (allowArbitraryValues && keyboardMatch(event.nativeEvent, keyboardKeys.Enter)) {\n if (state.value.length === 0) {\n return;\n }\n onChange({\n value: '',\n chips: [...state.chips, { value: state.value, userInput: true }],\n event: { type: 'add', modifier: 'enter' },\n });\n onChangeInputExternal?.('');\n }\n // удаляем последний созданный чипс\n if (state.value === '' && keyboardMatch(event.nativeEvent, keyboardKeys.Backspace)) {\n if (state.chips.length === 0) {\n return;\n }\n const chips = [...state.chips];\n const deletedChip = chips.pop();\n onChange({\n value: state.value,\n chips,\n event: { type: 'remove', modifier: 'backspace', element: deletedChip },\n });\n }\n // пытаемся найти ближайший чипс для фокуса\n if (state.value === '' && keyboardMatch(event.nativeEvent, keyboardKeys.ArrowLeft)) {\n focusOnLastChip(event, chipsContainerRef.current, inputRef.current);\n }\n },\n [allowArbitraryValues, onChange, onChangeInputExternal, state]\n );\n\n // при выставлении высоты учитваем падинги\n // иначе высота будет больше значения свойства\n const scrollableAreaStyle = maxHeight ? { maxHeight: `${maxHeight - (size === 'medium' ? 16 : 24)}px` } : undefined;\n const ChipLayoutComponent = chipLayoutComponent ?? ChipLayoutComponentDefault;\n\n const showIcon = rightIcon !== false;\n const showCustomIcon = isValidElement(rightIcon);\n\n return (\n <div>\n <div\n ref={chipsRootRefCallback}\n className={classnames(styles.root, styles[size], scrollbar.hoverContainerCssClass, {\n [styles.focused]: isFocused,\n [styles.focusVisible]: isFocusVisible,\n [styles.disabled]: !!disabled,\n [styles.invalid]: !!invalid,\n })}\n onFocus={() => {\n if (disabled) {\n return;\n }\n if (!inputRef.current) {\n return;\n }\n setExpanded(true);\n // добавляем .focus() еще и тут\n // чтобы не сбрасывать фокус во время клика по chip\n // или по клику на враппер\n if (document.activeElement === chipsRootRef.current) {\n inputRef.current.focus();\n }\n }}\n onBlur={(event) => {\n stateRef.current.hadFocusWhenClicked &&=\n event.relatedTarget === chipsRootRef.current || event.relatedTarget === inputRef.current;\n setExpanded(false);\n }}\n onKeyDown={onKeyDown}\n onMouseDown={() => {\n // при повторном клике по инпуту в фокусе нужно закрыть дроп\n // при этом клик может прийтись на обертку, из-за чего инпут поймает blur и повторный фокус\n // что усложняет проверку того, что инпут уже был в фокусе в момент клика\n // поэтому в цепочке mouseDown -> blur -> focus -> click храним флаг, что фокус не вышел за пределы компонента\n stateRef.current.hadFocusWhenClicked = document.activeElement === inputRef.current;\n stateRef.current.wasExpandedWhenClicked = !!externalExpanded;\n }}\n onClick={() => {\n if (\n stateRef.current.hadFocusWhenClicked &&\n stateRef.current.wasExpandedWhenClicked === externalExpanded\n ) {\n toggleExternalExpanded?.();\n }\n stateRef.current.hadFocusWhenClicked = false;\n stateRef.current.wasExpandedWhenClicked = false;\n }}\n tabIndex={disabled ? undefined : 0}\n data-qa={dataQa}\n aria-disabled={disabled}\n >\n <div\n style={scrollableAreaStyle}\n className={classnames(styles.scrollableAreaWrapper, {\n [styles.scrollableAreaWrapperWithIcon]: showIcon,\n })}\n >\n <div\n className={styles.scrollableArea}\n ref={scrollbar.scrollContainerRef as React.Ref<HTMLDivElement>}\n >\n <div ref={chipsContainerRefCallback} className={styles.chipsAndInput}>\n {state.chips.map((chip, index) => {\n return (\n <div\n key={`${chip.value}-${index}`}\n className={styles.customChipWrapper}\n onMouseDown={(event) => event.preventDefault()}\n >\n <ChipLayoutComponent\n Element=\"button\"\n size=\"extra-small\"\n onDelete={() => {\n deleteHandler(index);\n }}\n dataQaWrapper={`chips-trigger-chip-${chip.value}`}\n deleteButtonAriaLabel={_deleteButtonAriaLabel ?? deleteButtonAriaTrl}\n disabled={disabled}\n data={chip.data}\n deleteOnly\n >\n {chip.label ?? chip.value}\n </ChipLayoutComponent>\n </div>\n );\n })}\n <div className={styles.field}>\n <input\n ref={inputRefCallback}\n className={styles.fieldInput}\n type=\"text\"\n disabled={disabled}\n value={state.value}\n onKeyDown={keyDownHandler}\n onFocus={focusHandler}\n onBlur={blurHandler}\n onChange={changeHandler}\n data-qa=\"chips-trigger-input\"\n readOnly={isMobile}\n aria-labelledby={showLabel ? ariaLabeledBy : undefined}\n role={'combobox'}\n aria-haspopup={'listbox'}\n aria-autocomplete={'list'}\n aria-expanded={ariaExpanded}\n aria-controls={ariaControls}\n />\n {showLabel && (\n <div className={styles.labelWrapper}>\n <label className={styles.label} id={ariaLabeledBy}>\n {placeholder}\n </label>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n {showIcon && (\n <div\n className={classnames(styles.icon, {\n [styles.iconExpanded]: (expanded || externalExpanded) && !showCustomIcon,\n })}\n data-qa=\"chips-trigger-icon\"\n >\n {showCustomIcon ? rightIcon : <ChevronDownOutlinedSize24 />}\n </div>\n )}\n {hasVerticalScroll && <Scrollbar {...verticalScrollbarProps} />}\n </div>\n <FormHelper description={description} errorMessage={errorMessage} disabled={disabled} invalid={invalid} />\n </div>\n );\n};\n\nconst ChipsTrigger = forwardRef(ChipsTriggerComponent) as (<T>(\n props: ChipsTriggerProps<T> &\n Omit<InputHTMLAttributes<HTMLInputElement>, keyof ChipsTriggerProps<T>> & {\n ref?: LegacyRef<HTMLInputElement>;\n }\n) => ReactElement | null) & { displayName: string };\n\nChipsTrigger.displayName = 'ChipsTrigger';\n\nexport { ChipsTrigger };\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
@@ -1,2 +1,8 @@
|
|
|
1
|
-
import { InputHTMLAttributes } from 'react';
|
|
2
|
-
|
|
1
|
+
import { LegacyRef, ReactElement, InputHTMLAttributes } from 'react';
|
|
2
|
+
import { UncontrolledChipsTriggerProps } from '@hh.ru/magritte-ui-chips-trigger/types';
|
|
3
|
+
declare const UncontrolledChipsTrigger: (<T>(props: UncontrolledChipsTriggerProps<T> & Omit<InputHTMLAttributes<HTMLInputElement>, keyof UncontrolledChipsTriggerProps<T>> & {
|
|
4
|
+
ref?: LegacyRef<HTMLInputElement>;
|
|
5
|
+
}) => ReactElement | null) & {
|
|
6
|
+
displayName: string;
|
|
7
|
+
};
|
|
8
|
+
export { UncontrolledChipsTrigger };
|
|
@@ -17,13 +17,14 @@ const DEFAULT_STATE = {
|
|
|
17
17
|
value: '',
|
|
18
18
|
chips: [],
|
|
19
19
|
};
|
|
20
|
-
const
|
|
20
|
+
const UncontrolledChipsTriggerComponent = ({ state: defaultState = DEFAULT_STATE, onChange, name, ...restProps }, ref) => {
|
|
21
21
|
const [state, setState] = useState({ ...defaultState });
|
|
22
22
|
return (jsxs(Fragment, { children: [jsx(ChipsTrigger, { ...restProps, state: state, onChange: (newState) => {
|
|
23
23
|
setState(newState);
|
|
24
24
|
onChange?.(newState);
|
|
25
25
|
}, ref: ref }), state.chips.map((chip) => (jsx("input", { type: "hidden", name: name, value: chip.value }, chip.value)))] }));
|
|
26
|
-
}
|
|
26
|
+
};
|
|
27
|
+
const UncontrolledChipsTrigger = forwardRef(UncontrolledChipsTriggerComponent);
|
|
27
28
|
UncontrolledChipsTrigger.displayName = 'UncontrolledChipsTrigger';
|
|
28
29
|
|
|
29
30
|
export { UncontrolledChipsTrigger };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UncontrolledChipsTrigger.js","sources":["src/UncontrolledChipsTrigger.tsx"],"sourcesContent":["import { forwardRef, InputHTMLAttributes, useState } from 'react';\n\nimport { ChipsTrigger } from '@hh.ru/magritte-ui-chips-trigger/ChipsTrigger';\nimport { UncontrolledChipsTriggerProps, ChipsTriggerState } from '@hh.ru/magritte-ui-chips-trigger/types';\n\nconst DEFAULT_STATE = {\n value: '',\n chips: [],\n};\n\
|
|
1
|
+
{"version":3,"file":"UncontrolledChipsTrigger.js","sources":["src/UncontrolledChipsTrigger.tsx"],"sourcesContent":["import { ForwardedRef, LegacyRef, ReactElement, forwardRef, InputHTMLAttributes, useState } from 'react';\n\nimport { ChipsTrigger } from '@hh.ru/magritte-ui-chips-trigger/ChipsTrigger';\nimport { UncontrolledChipsTriggerProps, ChipsTriggerState } from '@hh.ru/magritte-ui-chips-trigger/types';\n\nconst DEFAULT_STATE = {\n value: '',\n chips: [],\n};\n\nconst UncontrolledChipsTriggerComponent = <T,>(\n {\n state: defaultState = DEFAULT_STATE,\n onChange,\n name,\n ...restProps\n }: UncontrolledChipsTriggerProps<T> &\n Omit<InputHTMLAttributes<HTMLInputElement>, keyof UncontrolledChipsTriggerProps<T>>,\n ref: ForwardedRef<HTMLInputElement>\n) => {\n const [state, setState] = useState<ChipsTriggerState<T>>({ ...defaultState });\n return (\n <>\n <ChipsTrigger\n {...restProps}\n state={state}\n onChange={(newState) => {\n setState(newState);\n onChange?.(newState);\n }}\n ref={ref}\n />\n {state.chips.map((chip) => (\n <input type=\"hidden\" name={name} value={chip.value} key={chip.value} />\n ))}\n </>\n );\n};\n\nconst UncontrolledChipsTrigger = forwardRef(UncontrolledChipsTriggerComponent) as (<T>(\n props: UncontrolledChipsTriggerProps<T> &\n Omit<InputHTMLAttributes<HTMLInputElement>, keyof UncontrolledChipsTriggerProps<T>> & {\n ref?: LegacyRef<HTMLInputElement>;\n }\n) => ReactElement | null) & { displayName: string };\n\nUncontrolledChipsTrigger.displayName = 'UncontrolledChipsTrigger';\n\nexport { UncontrolledChipsTrigger };\n"],"names":["_jsxs","_Fragment","_jsx"],"mappings":";;;;;;;;;;;;;;AAKA,MAAM,aAAa,GAAG;AAClB,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,KAAK,EAAE,EAAE;CACZ,CAAC;AAEF,MAAM,iCAAiC,GAAG,CACtC,EACI,KAAK,EAAE,YAAY,GAAG,aAAa,EACnC,QAAQ,EACR,IAAI,EACJ,GAAG,SAAS,EAEuE,EACvF,GAAmC,KACnC;AACA,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAuB,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC;AAC9E,IAAA,QACIA,IACI,CAAAC,QAAA,EAAA,EAAA,QAAA,EAAA,CAAAC,GAAA,CAAC,YAAY,EAAA,EAAA,GACL,SAAS,EACb,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,QAAQ,KAAI;oBACnB,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACnB,oBAAA,QAAQ,GAAG,QAAQ,CAAC,CAAC;AACzB,iBAAC,EACD,GAAG,EAAE,GAAG,EACV,CAAA,EACD,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,MAClBA,GAAO,CAAA,OAAA,EAAA,EAAA,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAO,EAAA,IAAI,CAAC,KAAK,CAAI,CAC1E,CAAC,CAAA,EAAA,CACH,EACL;AACN,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,UAAU,CAAC,iCAAiC,EAKzB;AAEpD,wBAAwB,CAAC,WAAW,GAAG,0BAA0B;;;;"}
|
package/index.css
CHANGED
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
--magritte-color-component-input-icon-state-chevron-hovered-v25-1-0:#8293a2;
|
|
69
69
|
--magritte-color-component-input-icon-state-chevron-disabled-v25-1-0:#96aabb;
|
|
70
70
|
}
|
|
71
|
-
.magritte-root___-zVdz_4-
|
|
71
|
+
.magritte-root___-zVdz_4-5-0{
|
|
72
72
|
display:inline-flex;
|
|
73
73
|
position:relative;
|
|
74
74
|
width:100%;
|
|
@@ -84,139 +84,139 @@
|
|
|
84
84
|
--magritte-ui-scrollbar-border-radius:12px;
|
|
85
85
|
}
|
|
86
86
|
@media (min-width: 1020px){
|
|
87
|
-
body.magritte-old-layout .magritte-root___-zVdz_4-
|
|
87
|
+
body.magritte-old-layout .magritte-root___-zVdz_4-5-0:not(.magritte-focused___0Uzyu_4-5-0):not(.magritte-invalid___tVzQV_4-5-0):not(.magritte-disabled___UeqcV_4-5-0):hover{
|
|
88
88
|
background-color:var(--magritte-color-component-input-background-state-field-hovered-v25-1-0);
|
|
89
89
|
box-shadow:inset 0 0 0 1px var(--magritte-color-component-input-stroke-state-field-hovered-v25-1-0);
|
|
90
90
|
--magritte-ui-icon-color-override:var(--magritte-color-component-input-icon-state-chevron-hovered-v25-1-0);
|
|
91
91
|
}
|
|
92
|
-
body.magritte-old-layout .magritte-root___-zVdz_4-
|
|
92
|
+
body.magritte-old-layout .magritte-root___-zVdz_4-5-0:not(.magritte-focused___0Uzyu_4-5-0):not(.magritte-invalid___tVzQV_4-5-0):not(.magritte-disabled___UeqcV_4-5-0):hover .magritte-label___j7Trt_4-5-0{
|
|
93
93
|
color:var(--magritte-color-component-input-text-state-placeholder-hovered-v25-1-0);
|
|
94
94
|
}
|
|
95
|
-
body.magritte-old-layout .magritte-root___-zVdz_4-
|
|
95
|
+
body.magritte-old-layout .magritte-root___-zVdz_4-5-0:not(.magritte-focused___0Uzyu_4-5-0):not(.magritte-invalid___tVzQV_4-5-0):not(.magritte-disabled___UeqcV_4-5-0):hover .magritte-field-input___04Cag_4-5-0{
|
|
96
96
|
color:var(--magritte-color-component-input-text-state-content-hovered-v25-1-0);
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
@media (min-width: 1024px){
|
|
100
|
-
body:not(.magritte-old-layout) .magritte-root___-zVdz_4-
|
|
100
|
+
body:not(.magritte-old-layout) .magritte-root___-zVdz_4-5-0:not(.magritte-focused___0Uzyu_4-5-0):not(.magritte-invalid___tVzQV_4-5-0):not(.magritte-disabled___UeqcV_4-5-0):hover{
|
|
101
101
|
background-color:var(--magritte-color-component-input-background-state-field-hovered-v25-1-0);
|
|
102
102
|
box-shadow:inset 0 0 0 1px var(--magritte-color-component-input-stroke-state-field-hovered-v25-1-0);
|
|
103
103
|
--magritte-ui-icon-color-override:var(--magritte-color-component-input-icon-state-chevron-hovered-v25-1-0);
|
|
104
104
|
}
|
|
105
|
-
body:not(.magritte-old-layout) .magritte-root___-zVdz_4-
|
|
105
|
+
body:not(.magritte-old-layout) .magritte-root___-zVdz_4-5-0:not(.magritte-focused___0Uzyu_4-5-0):not(.magritte-invalid___tVzQV_4-5-0):not(.magritte-disabled___UeqcV_4-5-0):hover .magritte-label___j7Trt_4-5-0{
|
|
106
106
|
color:var(--magritte-color-component-input-text-state-placeholder-hovered-v25-1-0);
|
|
107
107
|
}
|
|
108
|
-
body:not(.magritte-old-layout) .magritte-root___-zVdz_4-
|
|
108
|
+
body:not(.magritte-old-layout) .magritte-root___-zVdz_4-5-0:not(.magritte-focused___0Uzyu_4-5-0):not(.magritte-invalid___tVzQV_4-5-0):not(.magritte-disabled___UeqcV_4-5-0):hover .magritte-field-input___04Cag_4-5-0{
|
|
109
109
|
color:var(--magritte-color-component-input-text-state-content-hovered-v25-1-0);
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
|
-
.magritte-root___-zVdz_4-
|
|
112
|
+
.magritte-root___-zVdz_4-5-0:not(.magritte-disabled___UeqcV_4-5-0){
|
|
113
113
|
cursor:text;
|
|
114
114
|
}
|
|
115
|
-
.magritte-root___-zVdz_4-
|
|
115
|
+
.magritte-root___-zVdz_4-5-0.magritte-focused___0Uzyu_4-5-0{
|
|
116
116
|
background-color:var(--magritte-color-component-input-background-state-field-focused-v25-1-0);
|
|
117
117
|
box-shadow:inset 0 0 0 2px var(--magritte-color-component-input-stroke-state-field-focused-v25-1-0);
|
|
118
118
|
--magritte-ui-icon-color-override:var(--magritte-color-component-input-icon-state-chevron-focused-v25-1-0);
|
|
119
119
|
}
|
|
120
|
-
.magritte-root___-zVdz_4-
|
|
120
|
+
.magritte-root___-zVdz_4-5-0.magritte-focused___0Uzyu_4-5-0 .magritte-label___j7Trt_4-5-0{
|
|
121
121
|
color:var(--magritte-color-component-input-text-state-placeholder-focused-v25-1-0);
|
|
122
122
|
}
|
|
123
|
-
.magritte-root___-zVdz_4-
|
|
123
|
+
.magritte-root___-zVdz_4-5-0.magritte-focused___0Uzyu_4-5-0 .magritte-field-input___04Cag_4-5-0{
|
|
124
124
|
color:var(--magritte-color-component-input-text-state-content-focused-v25-1-0);
|
|
125
125
|
}
|
|
126
|
-
.magritte-root___-zVdz_4-
|
|
126
|
+
.magritte-root___-zVdz_4-5-0.magritte-invalid___tVzQV_4-5-0{
|
|
127
127
|
background-color:var(--magritte-color-component-input-background-state-field-invalid-v25-1-0);
|
|
128
128
|
box-shadow:inset 0 0 0 1px var(--magritte-color-component-input-stroke-state-field-invalid-v25-1-0);
|
|
129
129
|
--magritte-ui-icon-color-override:var(--magritte-color-component-input-icon-state-chevron-invalid-v25-1-0);
|
|
130
130
|
}
|
|
131
|
-
.magritte-root___-zVdz_4-
|
|
131
|
+
.magritte-root___-zVdz_4-5-0.magritte-invalid___tVzQV_4-5-0 .magritte-label___j7Trt_4-5-0{
|
|
132
132
|
color:var(--magritte-color-component-input-text-state-placeholder-invalid-v25-1-0);
|
|
133
133
|
}
|
|
134
|
-
.magritte-root___-zVdz_4-
|
|
134
|
+
.magritte-root___-zVdz_4-5-0.magritte-invalid___tVzQV_4-5-0 .magritte-field-input___04Cag_4-5-0{
|
|
135
135
|
color:var(--magritte-color-component-input-text-state-content-invalid-v25-1-0);
|
|
136
136
|
}
|
|
137
|
-
.magritte-root___-zVdz_4-
|
|
137
|
+
.magritte-root___-zVdz_4-5-0.magritte-disabled___UeqcV_4-5-0{
|
|
138
138
|
background-color:var(--magritte-color-component-input-background-state-field-disabled-v25-1-0);
|
|
139
139
|
box-shadow:inset 0 0 0 1px var(--magritte-color-component-input-stroke-state-field-disabled-v25-1-0);
|
|
140
140
|
--magritte-ui-icon-color-override:var(--magritte-color-component-input-icon-state-chevron-disabled-v25-1-0);
|
|
141
141
|
--magritte-ui-chip-text-color-override:var(--magritte-color-component-input-chips-text-state-neutral-disable-v25-1-0);
|
|
142
142
|
--magritte-ui-chip-background-color-override:var(--magritte-color-component-input-chips-background-state-neutral-disable-v25-1-0);
|
|
143
143
|
}
|
|
144
|
-
.magritte-root___-zVdz_4-
|
|
144
|
+
.magritte-root___-zVdz_4-5-0.magritte-disabled___UeqcV_4-5-0 .magritte-label___j7Trt_4-5-0{
|
|
145
145
|
color:var(--magritte-color-component-input-text-state-placeholder-disabled-v25-1-0);
|
|
146
146
|
}
|
|
147
|
-
.magritte-root___-zVdz_4-
|
|
147
|
+
.magritte-root___-zVdz_4-5-0.magritte-disabled___UeqcV_4-5-0 .magritte-field-input___04Cag_4-5-0{
|
|
148
148
|
color:var(--magritte-color-component-input-text-state-content-disabled-v25-1-0);
|
|
149
149
|
}
|
|
150
|
-
.magritte-root___-zVdz_4-
|
|
150
|
+
.magritte-root___-zVdz_4-5-0.magritte-disabled___UeqcV_4-5-0 .magritte-scrollable-area___-xMF2_4-5-0{
|
|
151
151
|
overflow:hidden;
|
|
152
152
|
}
|
|
153
|
-
.magritte-root___-zVdz_4-
|
|
153
|
+
.magritte-root___-zVdz_4-5-0.magritte-focus-visible___ifvAP_4-5-0{
|
|
154
154
|
outline:var(--magritte-color-component-input-stroke-state-accent-focused-accessible-v25-1-0) solid 4px;
|
|
155
155
|
}
|
|
156
|
-
.magritte-root___-zVdz_4-
|
|
156
|
+
.magritte-root___-zVdz_4-5-0.magritte-focus-visible___ifvAP_4-5-0.magritte-invalid___tVzQV_4-5-0{
|
|
157
157
|
outline-color:var(--magritte-color-component-input-stroke-state-negative-focused-accessible-v25-1-0);
|
|
158
158
|
}
|
|
159
|
-
.magritte-large___JIrIy_4-
|
|
159
|
+
.magritte-large___JIrIy_4-5-0{
|
|
160
160
|
padding-left:12px;
|
|
161
161
|
padding-top:12px;
|
|
162
162
|
padding-bottom:12px;
|
|
163
163
|
padding-right:2px;
|
|
164
164
|
}
|
|
165
|
-
.magritte-large___JIrIy_4-
|
|
165
|
+
.magritte-large___JIrIy_4-5-0 .magritte-field___rlEmn_4-5-0{
|
|
166
166
|
margin-left:4px;
|
|
167
167
|
}
|
|
168
|
-
.magritte-large___JIrIy_4-
|
|
168
|
+
.magritte-large___JIrIy_4-5-0 .magritte-icon___fDMiz_4-5-0{
|
|
169
169
|
top:12px;
|
|
170
170
|
right:16px;
|
|
171
171
|
}
|
|
172
|
-
.magritte-large___JIrIy_4-
|
|
172
|
+
.magritte-large___JIrIy_4-5-0 .magritte-scrollable-area-wrapper___hZNQd_4-5-0{
|
|
173
173
|
padding-right:10px;
|
|
174
174
|
}
|
|
175
|
-
.magritte-large___JIrIy_4-
|
|
175
|
+
.magritte-large___JIrIy_4-5-0 .magritte-scrollable-area-wrapper_with-icon___2VoX9_4-5-0{
|
|
176
176
|
padding-right:calc(24px + 10px + 12px);
|
|
177
177
|
}
|
|
178
|
-
.magritte-medium___Xk-XB_4-
|
|
178
|
+
.magritte-medium___Xk-XB_4-5-0{
|
|
179
179
|
padding-left:8px;
|
|
180
180
|
padding-top:8px;
|
|
181
181
|
padding-bottom:8px;
|
|
182
182
|
padding-right:2px;
|
|
183
183
|
}
|
|
184
|
-
.magritte-medium___Xk-XB_4-
|
|
184
|
+
.magritte-medium___Xk-XB_4-5-0 .magritte-field___rlEmn_4-5-0{
|
|
185
185
|
margin-left:8px;
|
|
186
186
|
}
|
|
187
|
-
.magritte-medium___Xk-XB_4-
|
|
187
|
+
.magritte-medium___Xk-XB_4-5-0 .magritte-icon___fDMiz_4-5-0{
|
|
188
188
|
top:8px;
|
|
189
189
|
right:12px;
|
|
190
190
|
}
|
|
191
|
-
.magritte-medium___Xk-XB_4-
|
|
191
|
+
.magritte-medium___Xk-XB_4-5-0 .magritte-scrollable-area-wrapper___hZNQd_4-5-0{
|
|
192
192
|
padding-right:6px;
|
|
193
193
|
}
|
|
194
|
-
.magritte-medium___Xk-XB_4-
|
|
194
|
+
.magritte-medium___Xk-XB_4-5-0 .magritte-scrollable-area-wrapper_with-icon___2VoX9_4-5-0{
|
|
195
195
|
padding-right:calc(24px + 6px + 12px);
|
|
196
196
|
}
|
|
197
|
-
.magritte-scrollable-area-wrapper___hZNQd_4-
|
|
197
|
+
.magritte-scrollable-area-wrapper___hZNQd_4-5-0{
|
|
198
198
|
width:100%;
|
|
199
199
|
position:relative;
|
|
200
200
|
overflow:hidden;
|
|
201
201
|
}
|
|
202
|
-
.magritte-scrollable-area___-xMF2_4-
|
|
202
|
+
.magritte-scrollable-area___-xMF2_4-5-0{
|
|
203
203
|
height:100%;
|
|
204
204
|
display:flex;
|
|
205
205
|
align-items:flex-start;
|
|
206
206
|
overflow-y:auto;
|
|
207
207
|
scrollbar-width:none;
|
|
208
208
|
}
|
|
209
|
-
.magritte-scrollable-area___-xMF2_4-
|
|
209
|
+
.magritte-scrollable-area___-xMF2_4-5-0::-webkit-scrollbar{
|
|
210
210
|
display:none;
|
|
211
211
|
}
|
|
212
|
-
.magritte-chips-and-input___qg-Ba_4-
|
|
212
|
+
.magritte-chips-and-input___qg-Ba_4-5-0{
|
|
213
213
|
display:flex;
|
|
214
214
|
gap:8px;
|
|
215
215
|
flex-wrap:wrap;
|
|
216
216
|
align-items:center;
|
|
217
217
|
width:100%;
|
|
218
218
|
}
|
|
219
|
-
.magritte-field___rlEmn_4-
|
|
219
|
+
.magritte-field___rlEmn_4-5-0{
|
|
220
220
|
display:flex;
|
|
221
221
|
align-items:center;
|
|
222
222
|
position:relative;
|
|
@@ -232,7 +232,7 @@
|
|
|
232
232
|
text-transform:none;
|
|
233
233
|
text-decoration:none;
|
|
234
234
|
}
|
|
235
|
-
.magritte-field-input___04Cag_4-
|
|
235
|
+
.magritte-field-input___04Cag_4-5-0{
|
|
236
236
|
border:0;
|
|
237
237
|
padding:0;
|
|
238
238
|
background:none;
|
|
@@ -241,19 +241,19 @@
|
|
|
241
241
|
z-index:1;
|
|
242
242
|
color:var(--magritte-color-component-input-text-content-v25-1-0);
|
|
243
243
|
}
|
|
244
|
-
.magritte-label-wrapper___De7Bm_4-
|
|
244
|
+
.magritte-label-wrapper___De7Bm_4-5-0{
|
|
245
245
|
display:flex;
|
|
246
246
|
align-items:center;
|
|
247
247
|
position:absolute;
|
|
248
248
|
height:100%;
|
|
249
249
|
inset:0;
|
|
250
250
|
}
|
|
251
|
-
.magritte-label___j7Trt_4-
|
|
251
|
+
.magritte-label___j7Trt_4-5-0{
|
|
252
252
|
color:var(--magritte-color-component-input-text-placeholder-v25-1-0);
|
|
253
253
|
overflow:hidden;
|
|
254
254
|
text-overflow:ellipsis;
|
|
255
255
|
}
|
|
256
|
-
.magritte-icon___fDMiz_4-
|
|
256
|
+
.magritte-icon___fDMiz_4-5-0{
|
|
257
257
|
display:inline-flex;
|
|
258
258
|
margin-left:auto;
|
|
259
259
|
padding:4px 0;
|
|
@@ -262,11 +262,11 @@
|
|
|
262
262
|
transition-duration:var(--magritte-semantic-animation-ease-in-out-100-duration-v25-1-0);
|
|
263
263
|
transition-timing-function:var(--magritte-semantic-animation-ease-in-out-100-timing-function-v25-1-0);
|
|
264
264
|
}
|
|
265
|
-
.magritte-icon_expanded___RaOT-_4-
|
|
265
|
+
.magritte-icon_expanded___RaOT-_4-5-0{
|
|
266
266
|
transform:rotate(-180deg);
|
|
267
267
|
--magritte-ui-icon-color-override:var(--magritte-color-component-input-icon-state-chevron-focused-v25-1-0);
|
|
268
268
|
}
|
|
269
|
-
.magritte-custom-chip-wrapper___a9kJ6_4-
|
|
269
|
+
.magritte-custom-chip-wrapper___a9kJ6_4-5-0{
|
|
270
270
|
display:inline-flex;
|
|
271
271
|
min-width:0;
|
|
272
272
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hh.ru/magritte-ui-chips-trigger",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.5.0",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"types": "index.d.ts",
|
|
6
6
|
"sideEffects": [
|
|
@@ -28,15 +28,15 @@
|
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@hh.ru/magritte-common-keyboard": "4.3.5",
|
|
30
30
|
"@hh.ru/magritte-common-use-multiple-refs": "1.1.11",
|
|
31
|
-
"@hh.ru/magritte-common-use-translation": "3.
|
|
31
|
+
"@hh.ru/magritte-common-use-translation": "3.6.0",
|
|
32
32
|
"@hh.ru/magritte-design-tokens": "25.1.0",
|
|
33
33
|
"@hh.ru/magritte-ui-breakpoint": "6.1.1",
|
|
34
|
-
"@hh.ru/magritte-ui-chips": "7.0.
|
|
34
|
+
"@hh.ru/magritte-ui-chips": "7.0.44",
|
|
35
35
|
"@hh.ru/magritte-ui-form-helper": "2.1.22",
|
|
36
36
|
"@hh.ru/magritte-ui-icon": "15.1.2",
|
|
37
|
-
"@hh.ru/magritte-ui-input": "9.4.
|
|
37
|
+
"@hh.ru/magritte-ui-input": "9.4.49",
|
|
38
38
|
"@hh.ru/magritte-ui-mock-component": "1.1.7",
|
|
39
39
|
"@hh.ru/magritte-ui-scrollbar": "1.0.36"
|
|
40
40
|
},
|
|
41
|
-
"gitHead": "
|
|
41
|
+
"gitHead": "c00f5c37313e3a3159b43c9fb028044e2b4d8dfc"
|
|
42
42
|
}
|
package/types.d.ts
CHANGED
|
@@ -1,23 +1,31 @@
|
|
|
1
|
-
import type { FocusEventHandler, ForwardedRef, ReactNode, KeyboardEventHandler, ReactElement } from 'react';
|
|
1
|
+
import type { FocusEventHandler, ForwardedRef, ReactNode, KeyboardEventHandler, ReactElement, ComponentType } from 'react';
|
|
2
|
+
import type { CustomChipProps } from '@hh.ru/magritte-ui-chips/types';
|
|
2
3
|
export type ChipsTriggerSize = 'medium' | 'large';
|
|
3
4
|
export type ChipsTriggerEventType = 'change' | 'remove' | 'add';
|
|
4
5
|
export type ChipsTriggerEventModifier = 'keyboard' | 'cross' | 'enter' | 'backspace';
|
|
5
|
-
interface
|
|
6
|
+
interface TriggerChip<T = unknown> {
|
|
6
7
|
value: string;
|
|
7
8
|
label?: string;
|
|
8
9
|
userInput?: boolean;
|
|
10
|
+
/** Данные элемента, из которого собран чипс */
|
|
11
|
+
data?: T;
|
|
9
12
|
}
|
|
10
|
-
interface ChipsTriggerEvent {
|
|
13
|
+
interface ChipsTriggerEvent<T = unknown> {
|
|
11
14
|
type: ChipsTriggerEventType;
|
|
12
15
|
modifier: ChipsTriggerEventModifier;
|
|
13
|
-
element?:
|
|
16
|
+
element?: TriggerChip<T>;
|
|
14
17
|
}
|
|
15
|
-
export interface ChipsTriggerState {
|
|
18
|
+
export interface ChipsTriggerState<T = unknown> {
|
|
16
19
|
value: string;
|
|
17
|
-
chips:
|
|
18
|
-
event?: ChipsTriggerEvent
|
|
20
|
+
chips: TriggerChip<T>[];
|
|
21
|
+
event?: ChipsTriggerEvent<T>;
|
|
19
22
|
}
|
|
20
|
-
export
|
|
23
|
+
export type ChipCustomLayoutProps<T = unknown> = {
|
|
24
|
+
/** Данные элемента, из которого собран чипс */
|
|
25
|
+
data?: T;
|
|
26
|
+
} & CustomChipProps;
|
|
27
|
+
export type ChipCustomLayoutComponent<T = unknown> = ComponentType<ChipCustomLayoutProps<T>>;
|
|
28
|
+
export interface ChipsTriggerProps<T = unknown> {
|
|
21
29
|
/** Размер для chips-trigger */
|
|
22
30
|
size?: ChipsTriggerSize;
|
|
23
31
|
/** Текст плейсхолдера */
|
|
@@ -31,11 +39,11 @@ export interface ChipsTriggerProps {
|
|
|
31
39
|
/** Признак невалидности */
|
|
32
40
|
invalid?: boolean;
|
|
33
41
|
/** Обработчик события изменения состояния компонента (chip+input) */
|
|
34
|
-
onChange: (state: ChipsTriggerState) => void;
|
|
42
|
+
onChange: (state: ChipsTriggerState<T>) => void;
|
|
35
43
|
/** Обработчик события изменения состояния input */
|
|
36
44
|
onChangeInput?: (value: string) => void;
|
|
37
45
|
/** Значение инпута */
|
|
38
|
-
state: ChipsTriggerState
|
|
46
|
+
state: ChipsTriggerState<T>;
|
|
39
47
|
/**
|
|
40
48
|
* Иконка справа
|
|
41
49
|
* true - показать дефолтный шеврон
|
|
@@ -43,6 +51,8 @@ export interface ChipsTriggerProps {
|
|
|
43
51
|
* ReactElement - своя иконка
|
|
44
52
|
*/
|
|
45
53
|
rightIcon?: ReactElement | boolean;
|
|
54
|
+
/** Компонент для кастомной верстки чипса, по умолчанию чипс рисуется через CustomChip */
|
|
55
|
+
chipLayoutComponent?: ChipCustomLayoutComponent<T>;
|
|
46
56
|
/** Обработчик события получения фокуса */
|
|
47
57
|
onFocus?: FocusEventHandler<HTMLInputElement>;
|
|
48
58
|
/** Обработчик события потери фокуса */
|
|
@@ -64,5 +74,5 @@ export interface ChipsTriggerProps {
|
|
|
64
74
|
/** aria-label кнопки удаления */
|
|
65
75
|
deleteButtonAriaLabel?: string;
|
|
66
76
|
}
|
|
67
|
-
export type UncontrolledChipsTriggerProps = Partial<ChipsTriggerProps
|
|
77
|
+
export type UncontrolledChipsTriggerProps<T = unknown> = Partial<ChipsTriggerProps<T>>;
|
|
68
78
|
export {};
|