@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 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
- export declare const ChipsTrigger: import("react").ForwardRefExoticComponent<ChipsTriggerProps & Omit<InputHTMLAttributes<HTMLInputElement>, keyof ChipsTriggerProps> & import("react").RefAttributes<HTMLInputElement>>;
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-4-1","focused":"magritte-focused___0Uzyu_4-4-1","invalid":"magritte-invalid___tVzQV_4-4-1","disabled":"magritte-disabled___UeqcV_4-4-1","label":"magritte-label___j7Trt_4-4-1","field-input":"magritte-field-input___04Cag_4-4-1","fieldInput":"magritte-field-input___04Cag_4-4-1","scrollable-area":"magritte-scrollable-area___-xMF2_4-4-1","scrollableArea":"magritte-scrollable-area___-xMF2_4-4-1","focus-visible":"magritte-focus-visible___ifvAP_4-4-1","focusVisible":"magritte-focus-visible___ifvAP_4-4-1","large":"magritte-large___JIrIy_4-4-1","field":"magritte-field___rlEmn_4-4-1","icon":"magritte-icon___fDMiz_4-4-1","scrollable-area-wrapper":"magritte-scrollable-area-wrapper___hZNQd_4-4-1","scrollableAreaWrapper":"magritte-scrollable-area-wrapper___hZNQd_4-4-1","scrollable-area-wrapper_with-icon":"magritte-scrollable-area-wrapper_with-icon___2VoX9_4-4-1","scrollableAreaWrapperWithIcon":"magritte-scrollable-area-wrapper_with-icon___2VoX9_4-4-1","medium":"magritte-medium___Xk-XB_4-4-1","chips-and-input":"magritte-chips-and-input___qg-Ba_4-4-1","chipsAndInput":"magritte-chips-and-input___qg-Ba_4-4-1","label-wrapper":"magritte-label-wrapper___De7Bm_4-4-1","labelWrapper":"magritte-label-wrapper___De7Bm_4-4-1","icon_expanded":"magritte-icon_expanded___RaOT-_4-4-1","iconExpanded":"magritte-icon_expanded___RaOT-_4-4-1","custom-chip-wrapper":"magritte-custom-chip-wrapper___a9kJ6_4-4-1","customChipWrapper":"magritte-custom-chip-wrapper___a9kJ6_4-4-1"};
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 ChipsTrigger = forwardRef(({ size = 'large', placeholder, disabled, expanded: externalExpanded, toggleExpanded: toggleExternalExpanded, state, rightIcon = true, invalid, maxHeight, description, errorMessage, wrapperRef, onChange, onFocus, onBlur, onKeyDown, onChangeInput: onChangeInputExternal, allowArbitraryValues = true, 'data-qa': dataQa = 'chips-trigger', deleteButtonAriaLabel: _deleteButtonAriaLabel, 'aria-expanded': ariaExpanded, 'aria-controls': ariaControls, }, ref) => {
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 deletedChip = state.chips.splice(index, 1);
61
+ const chips = [...state.chips];
62
+ const [deletedChip] = chips.splice(index, 1);
62
63
  onChange({
63
64
  value: state.value,
64
- chips: [...state.chips],
65
- event: { type: 'remove', modifier: 'cross', element: deletedChip?.[0] },
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 deletedChip = state.chips.pop();
87
+ const chips = [...state.chips];
88
+ const deletedChip = chips.pop();
87
89
  onChange({
88
90
  value: state.value,
89
- chips: [...state.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
- ? { maxHeight: `${maxHeight - (size === 'medium' ? 16 : 24)}px` }
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(CustomChip, { Element: "button", size: "extra-small", disabled: disabled, onDelete: () => {
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}`, deleteOnly: true, deleteButtonAriaLabel: deleteButtonAriaLabel, children: chip.label ?? chip.value }) }, `${chip.value}-${index}`));
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 };
@@ -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":";;;;;;;;;;;;;;;AA8BA,MAAM,eAAe,GAAG,CAAC,KAAqB,EAAE,cAAkC,EAAE,KAAyB,KAAI;AAC7G,IAAA,IAAI,CAAC,cAAc,IAAI,CAAC,KAAK,EAAE;QAC3B,OAAO;KACV;AACD,IAAA,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7F,IAAA,IAAI,oBAAoB,KAAK,IAAI,EAAE;QAC/B,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,oBAAoB,CAAC,KAAK,EAAE,CAAC;KAChC;AACL,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,KAAK,EAAyB,MAC5EA,GAAA,CAAC,UAAU,EAAK,EAAA,GAAA,KAAK,EAAI,CAAA,CAC5B,CAAC;AAOF,MAAM,qBAAqB,GAAG,CAC1B,EACI,IAAI,GAAG,OAAO,EACd,WAAW,EACX,QAAQ,EACR,QAAQ,EAAE,gBAAgB,EAC1B,cAAc,EAAE,sBAAsB,EACtC,KAAK,EACL,mBAAmB,EACnB,OAAO,EACP,SAAS,EACT,WAAW,EACX,YAAY,EACZ,UAAU,EACV,SAAS,GAAG,IAAI,EAChB,QAAQ,EACR,OAAO,EACP,MAAM,EACN,SAAS,EACT,aAAa,EAAE,qBAAqB,EACpC,oBAAoB,GAAG,IAAI,EAC3B,SAAS,EAAE,MAAM,GAAG,eAAe,EACnC,qBAAqB,EAAE,sBAAsB,EAC7C,eAAe,EAAE,YAAY,EAC7B,eAAe,EAAE,YAAY,GACgE,EACjG,GAAmC,KACnC;AACA,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,CAAC;IACrC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,CAAC,cAAc,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC1D,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAQ,EAAE,mBAAmB,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,CAAC;IAE9F,MAAM,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,GAAG,SAAS,EAAE,GAAG,YAAY,CAAC;QAC7E,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,UAAU;AACvC,KAAA,CAAC,CAAC;AAEH,IAAA,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAClD,MAAM,oBAAoB,GAAG,eAAe,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AACvE,IAAA,MAAM,iBAAiB,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACvD,MAAM,yBAAyB,GAAG,eAAe,CAAC,iBAAiB,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC;AAClG,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAChD,MAAM,gBAAgB,GAAG,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACxD,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,KAAK,EAAE,CAAC;AACvF,IAAA,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC;AACxB,IAAA,MAAM,aAAa,GAAG,CAAuB,oBAAA,EAAA,OAAO,EAAE,CAAC;IACvD,MAAM,mBAAmB,GAAG,cAAc,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;AAErE,IAAA,MAAM,aAAa,GAAG,WAAW,CAC7B,CAAC,KAAa,KAAI;AACd,QAAA,QAAQ,CAAC;YACL,KAAK;YACL,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE;AAClD,SAAA,CAAC,CAAC;AACH,QAAA,qBAAqB,GAAG,KAAK,CAAC,CAAC;KAClC,EACD,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CACjD,CAAC;AACF,IAAA,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAEzG,SAAS,CAAC,MAAK;AACX,QAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AAClB,YAAA,eAAe,CAAC,SAAS,IAAI,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;SACtF;AACL,KAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AAEhB,IAAA,MAAM,aAAa,GAAG,WAAW,CAC7B,CAAC,KAAa,KAAI;QACd,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AAC/B,QAAA,MAAM,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC7C,QAAA,QAAQ,CAAC;YACL,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK;AACL,YAAA,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE;AACrE,SAAA,CAAC,CAAC;AACP,KAAC,EACD,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CACvC,CAAC;AAEF,IAAA,MAAM,cAAc,GAAG,WAAW,CAC9B,CAAC,KAAK,KAAI;;AAEN,QAAA,IAAI,oBAAoB,IAAI,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE;YAC9E,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC1B,OAAO;aACV;AACD,YAAA,QAAQ,CAAC;AACL,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;gBAChE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE;AAC5C,aAAA,CAAC,CAAC;AACH,YAAA,qBAAqB,GAAG,EAAE,CAAC,CAAC;SAC/B;;AAED,QAAA,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,IAAI,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE;YAChF,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC1B,OAAO;aACV;YACD,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AAC/B,YAAA,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;AAChC,YAAA,QAAQ,CAAC;gBACL,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,KAAK;AACL,gBAAA,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;AACzE,aAAA,CAAC,CAAC;SACN;;AAED,QAAA,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,IAAI,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE;YAChF,eAAe,CAAC,KAAK,EAAE,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;SACvE;KACJ,EACD,CAAC,oBAAoB,EAAE,QAAQ,EAAE,qBAAqB,EAAE,KAAK,CAAC,CACjE,CAAC;;;AAIF,IAAA,MAAM,mBAAmB,GAAG,SAAS,GAAG,EAAE,SAAS,EAAE,CAAA,EAAG,SAAS,IAAI,IAAI,KAAK,QAAQ,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA,EAAA,CAAI,EAAE,GAAG,SAAS,CAAC;AACpH,IAAA,MAAM,mBAAmB,GAAG,mBAAmB,IAAI,0BAA0B,CAAC;AAE9E,IAAA,MAAM,QAAQ,GAAG,SAAS,KAAK,KAAK,CAAC;AACrC,IAAA,MAAM,cAAc,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAEjD,QACIC,yBACIA,IACI,CAAA,KAAA,EAAA,EAAA,GAAG,EAAE,oBAAoB,EACzB,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,sBAAsB,EAAE;AAC/E,oBAAA,CAAC,MAAM,CAAC,OAAO,GAAG,SAAS;AAC3B,oBAAA,CAAC,MAAM,CAAC,YAAY,GAAG,cAAc;AACrC,oBAAA,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ;AAC7B,oBAAA,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO;AAC9B,iBAAA,CAAC,EACF,OAAO,EAAE,MAAK;oBACV,IAAI,QAAQ,EAAE;wBACV,OAAO;qBACV;AACD,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;wBACnB,OAAO;qBACV;oBACD,WAAW,CAAC,IAAI,CAAC,CAAC;;;;oBAIlB,IAAI,QAAQ,CAAC,aAAa,KAAK,YAAY,CAAC,OAAO,EAAE;AACjD,wBAAA,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;qBAC5B;AACL,iBAAC,EACD,MAAM,EAAE,CAAC,KAAK,KAAI;oBACd,QAAQ,CAAC,OAAO,CAAC,mBAAmB;AAChC,wBAAA,KAAK,CAAC,aAAa,KAAK,YAAY,CAAC,OAAO,IAAI,KAAK,CAAC,aAAa,KAAK,QAAQ,CAAC,OAAO,CAAC;oBAC7F,WAAW,CAAC,KAAK,CAAC,CAAC;iBACtB,EACD,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,MAAK;;;;;AAKd,oBAAA,QAAQ,CAAC,OAAO,CAAC,mBAAmB,GAAG,QAAQ,CAAC,aAAa,KAAK,QAAQ,CAAC,OAAO,CAAC;oBACnF,QAAQ,CAAC,OAAO,CAAC,sBAAsB,GAAG,CAAC,CAAC,gBAAgB,CAAC;AACjE,iBAAC,EACD,OAAO,EAAE,MAAK;AACV,oBAAA,IACI,QAAQ,CAAC,OAAO,CAAC,mBAAmB;AACpC,wBAAA,QAAQ,CAAC,OAAO,CAAC,sBAAsB,KAAK,gBAAgB,EAC9D;wBACE,sBAAsB,IAAI,CAAC;qBAC9B;AACD,oBAAA,QAAQ,CAAC,OAAO,CAAC,mBAAmB,GAAG,KAAK,CAAC;AAC7C,oBAAA,QAAQ,CAAC,OAAO,CAAC,sBAAsB,GAAG,KAAK,CAAC;AACpD,iBAAC,EACD,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,CAAC,EACzB,SAAA,EAAA,MAAM,EACA,eAAA,EAAA,QAAQ,EAEvB,QAAA,EAAA,CAAAD,GAAA,CAAA,KAAA,EAAA,EACI,KAAK,EAAE,mBAAmB,EAC1B,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,qBAAqB,EAAE;AAChD,4BAAA,CAAC,MAAM,CAAC,6BAA6B,GAAG,QAAQ;AACnD,yBAAA,CAAC,YAEFA,GACI,CAAA,KAAA,EAAA,EAAA,SAAS,EAAE,MAAM,CAAC,cAAc,EAChC,GAAG,EAAE,SAAS,CAAC,kBAA+C,EAE9D,QAAA,EAAAC,IAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,yBAAyB,EAAE,SAAS,EAAE,MAAM,CAAC,aAAa,EAAA,QAAA,EAAA,CAC/D,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AAC7B,wCAAA,QACID,GAAA,CAAA,KAAA,EAAA,EAEI,SAAS,EAAE,MAAM,CAAC,iBAAiB,EACnC,WAAW,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,cAAc,EAAE,EAE9C,QAAA,EAAAA,GAAA,CAAC,mBAAmB,EAAA,EAChB,OAAO,EAAC,QAAQ,EAChB,IAAI,EAAC,aAAa,EAClB,QAAQ,EAAE,MAAK;oDACX,aAAa,CAAC,KAAK,CAAC,CAAC;iDACxB,EACD,aAAa,EAAE,CAAA,mBAAA,EAAsB,IAAI,CAAC,KAAK,EAAE,EACjD,qBAAqB,EAAE,sBAAsB,IAAI,mBAAmB,EACpE,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,UAAU,EAET,IAAA,EAAA,QAAA,EAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,GACP,EAjBjB,EAAA,CAAA,EAAG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAA,CAAE,CAkB3B,EACR;qCACL,CAAC,EACFC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,KAAK,EAAA,QAAA,EAAA,CACxBD,GACI,CAAA,OAAA,EAAA,EAAA,GAAG,EAAE,gBAAgB,EACrB,SAAS,EAAE,MAAM,CAAC,UAAU,EAC5B,IAAI,EAAC,MAAM,EACX,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,aAAa,EAAA,SAAA,EACf,qBAAqB,EAC7B,QAAQ,EAAE,QAAQ,EAAA,iBAAA,EACD,SAAS,GAAG,aAAa,GAAG,SAAS,EACtD,IAAI,EAAE,UAAU,EACD,eAAA,EAAA,SAAS,EACL,mBAAA,EAAA,MAAM,EACV,eAAA,EAAA,YAAY,EACZ,eAAA,EAAA,YAAY,EAC7B,CAAA,EACD,SAAS,KACNA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,YAAY,EAAA,QAAA,EAC/BA,GAAO,CAAA,OAAA,EAAA,EAAA,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,aAAa,EAAA,QAAA,EAC5C,WAAW,EAAA,CACR,EACN,CAAA,CACT,CACC,EAAA,CAAA,CAAA,EAAA,CACJ,EACJ,CAAA,EAAA,CACJ,EACL,QAAQ,KACLA,GACI,CAAA,KAAA,EAAA,EAAA,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE;AAC/B,4BAAA,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,QAAQ,IAAI,gBAAgB,KAAK,CAAC,cAAc;yBAC3E,CAAC,EAAA,SAAA,EACM,oBAAoB,EAE3B,QAAA,EAAA,cAAc,GAAG,SAAS,GAAGA,GAAC,CAAA,yBAAyB,KAAG,EACzD,CAAA,CACT,EACA,iBAAiB,IAAIA,GAAC,CAAA,SAAS,EAAK,EAAA,GAAA,sBAAsB,GAAI,CAC7D,EAAA,CAAA,EACNA,IAAC,UAAU,EAAA,EAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAA,CAAI,CACxG,EAAA,CAAA,EACR;AACN,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,UAAU,CAAC,qBAAqB,EAKD;AAEpD,YAAY,CAAC,WAAW,GAAG,cAAc;;;;"}
@@ -1,2 +1,8 @@
1
- import { InputHTMLAttributes } from 'react';
2
- export declare const UncontrolledChipsTrigger: import("react").ForwardRefExoticComponent<Partial<import("@hh.ru/magritte-ui-chips-trigger/types").ChipsTriggerProps> & Omit<InputHTMLAttributes<HTMLInputElement>, keyof import("@hh.ru/magritte-ui-chips-trigger/types").ChipsTriggerProps> & import("react").RefAttributes<HTMLInputElement>>;
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 UncontrolledChipsTrigger = forwardRef(({ state: defaultState = DEFAULT_STATE, onChange, name, ...restProps }, ref) => {
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\nexport const UncontrolledChipsTrigger = forwardRef<\n HTMLInputElement,\n UncontrolledChipsTriggerProps & Omit<InputHTMLAttributes<HTMLInputElement>, keyof UncontrolledChipsTriggerProps>\n>(({ state: defaultState = DEFAULT_STATE, onChange, name, ...restProps }, ref) => {\n const [state, setState] = useState<ChipsTriggerState>({ ...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\nUncontrolledChipsTrigger.displayName = 'UncontrolledChipsTrigger';\n"],"names":["_jsxs","_Fragment","_jsx"],"mappings":";;;;;;;;;;;;;;AAKA,MAAM,aAAa,GAAG;AAClB,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,KAAK,EAAE,EAAE;CACZ,CAAC;AAEW,MAAA,wBAAwB,GAAG,UAAU,CAGhD,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,SAAS,EAAE,EAAE,GAAG,KAAI;AAC7E,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAoB,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC;AAC3E,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,EAAE;AAEH,wBAAwB,CAAC,WAAW,GAAG,0BAA0B;;;;"}
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-4-1{
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-4-1:not(.magritte-focused___0Uzyu_4-4-1):not(.magritte-invalid___tVzQV_4-4-1):not(.magritte-disabled___UeqcV_4-4-1):hover{
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-4-1:not(.magritte-focused___0Uzyu_4-4-1):not(.magritte-invalid___tVzQV_4-4-1):not(.magritte-disabled___UeqcV_4-4-1):hover .magritte-label___j7Trt_4-4-1{
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-4-1:not(.magritte-focused___0Uzyu_4-4-1):not(.magritte-invalid___tVzQV_4-4-1):not(.magritte-disabled___UeqcV_4-4-1):hover .magritte-field-input___04Cag_4-4-1{
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-4-1:not(.magritte-focused___0Uzyu_4-4-1):not(.magritte-invalid___tVzQV_4-4-1):not(.magritte-disabled___UeqcV_4-4-1):hover{
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-4-1:not(.magritte-focused___0Uzyu_4-4-1):not(.magritte-invalid___tVzQV_4-4-1):not(.magritte-disabled___UeqcV_4-4-1):hover .magritte-label___j7Trt_4-4-1{
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-4-1:not(.magritte-focused___0Uzyu_4-4-1):not(.magritte-invalid___tVzQV_4-4-1):not(.magritte-disabled___UeqcV_4-4-1):hover .magritte-field-input___04Cag_4-4-1{
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-4-1:not(.magritte-disabled___UeqcV_4-4-1){
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-4-1.magritte-focused___0Uzyu_4-4-1{
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-4-1.magritte-focused___0Uzyu_4-4-1 .magritte-label___j7Trt_4-4-1{
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-4-1.magritte-focused___0Uzyu_4-4-1 .magritte-field-input___04Cag_4-4-1{
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-4-1.magritte-invalid___tVzQV_4-4-1{
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-4-1.magritte-invalid___tVzQV_4-4-1 .magritte-label___j7Trt_4-4-1{
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-4-1.magritte-invalid___tVzQV_4-4-1 .magritte-field-input___04Cag_4-4-1{
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-4-1.magritte-disabled___UeqcV_4-4-1{
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-4-1.magritte-disabled___UeqcV_4-4-1 .magritte-label___j7Trt_4-4-1{
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-4-1.magritte-disabled___UeqcV_4-4-1 .magritte-field-input___04Cag_4-4-1{
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-4-1.magritte-disabled___UeqcV_4-4-1 .magritte-scrollable-area___-xMF2_4-4-1{
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-4-1.magritte-focus-visible___ifvAP_4-4-1{
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-4-1.magritte-focus-visible___ifvAP_4-4-1.magritte-invalid___tVzQV_4-4-1{
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-4-1{
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-4-1 .magritte-field___rlEmn_4-4-1{
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-4-1 .magritte-icon___fDMiz_4-4-1{
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-4-1 .magritte-scrollable-area-wrapper___hZNQd_4-4-1{
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-4-1 .magritte-scrollable-area-wrapper_with-icon___2VoX9_4-4-1{
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-4-1{
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-4-1 .magritte-field___rlEmn_4-4-1{
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-4-1 .magritte-icon___fDMiz_4-4-1{
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-4-1 .magritte-scrollable-area-wrapper___hZNQd_4-4-1{
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-4-1 .magritte-scrollable-area-wrapper_with-icon___2VoX9_4-4-1{
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-4-1{
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-4-1{
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-4-1::-webkit-scrollbar{
209
+ .magritte-scrollable-area___-xMF2_4-5-0::-webkit-scrollbar{
210
210
  display:none;
211
211
  }
212
- .magritte-chips-and-input___qg-Ba_4-4-1{
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-4-1{
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-4-1{
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-4-1{
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-4-1{
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-4-1{
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-4-1{
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-4-1{
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.4.1",
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.5.0",
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.43",
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.48",
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": "cb4ef069c994e3e4a1e5c76a31a6f35749190ad1"
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 Chip {
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?: Chip;
16
+ element?: TriggerChip<T>;
14
17
  }
15
- export interface ChipsTriggerState {
18
+ export interface ChipsTriggerState<T = unknown> {
16
19
  value: string;
17
- chips: Chip[];
18
- event?: ChipsTriggerEvent;
20
+ chips: TriggerChip<T>[];
21
+ event?: ChipsTriggerEvent<T>;
19
22
  }
20
- export interface ChipsTriggerProps {
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 {};