@hh.ru/magritte-ui-select 5.2.9 → 5.3.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/Select.js +3 -3
- package/Select.js.map +1 -1
- package/SelectActivator-125a6b32.js +110 -0
- package/SelectActivator-125a6b32.js.map +1 -0
- package/SelectActivator.d.ts +1 -1
- package/SelectActivator.js +2 -1
- package/SelectActivator.js.map +1 -1
- package/SelectForDesktopDevice.d.ts +3 -3
- package/SelectForDesktopDevice.js +29 -28
- package/SelectForDesktopDevice.js.map +1 -1
- package/SelectForMobileDevice.d.ts +2 -2
- package/SelectForMobileDevice.js +4 -3
- package/SelectForMobileDevice.js.map +1 -1
- package/SelectOption.d.ts +1 -1
- package/SelectOption.js +5 -5
- package/SelectOption.js.map +1 -1
- package/UncontrolledSelect.js +1 -1
- package/index.css +50 -46
- package/index.js +2 -2
- package/package.json +9 -9
- package/types.d.ts +6 -7
- package/useSelectOptionsList.d.ts +1 -1
- package/useSelectOptionsList.js +4 -2
- package/useSelectOptionsList.js.map +1 -1
- package/SelectActivator-7f53c708.js +0 -87
- package/SelectActivator-7f53c708.js.map +0 -1
package/Select.js
CHANGED
|
@@ -13,7 +13,7 @@ import '@hh.ru/magritte-ui-card';
|
|
|
13
13
|
import '@hh.ru/magritte-ui-cell';
|
|
14
14
|
import '@hh.ru/magritte-ui-drop';
|
|
15
15
|
import '@hh.ru/magritte-ui-icon/icon';
|
|
16
|
-
import './SelectActivator-
|
|
16
|
+
import './SelectActivator-125a6b32.js';
|
|
17
17
|
import 'classnames';
|
|
18
18
|
import '@hh.ru/magritte-ui-counter';
|
|
19
19
|
import '@hh.ru/magritte-ui-form-helper';
|
|
@@ -42,7 +42,7 @@ const Select = ({ multiple, showClearButton, showCloseButtonInNavigationBar = fa
|
|
|
42
42
|
const optionListSearchText = useRef([]);
|
|
43
43
|
const valueSelectArray = getValue(valueSelect);
|
|
44
44
|
const [selectedOptions, setSelectedOptions] = useState(() => valueSelectArray ? options.filter(({ value }) => valueSelectArray.includes(value)) : []);
|
|
45
|
-
const { optionsListRef, activatorRef,
|
|
45
|
+
const { optionsListRef, activatorRef, toggleOptions, onClearSelectionClick, onOptionsListClose, showOptions } = useSelectOptionsList(!!searchable);
|
|
46
46
|
const { values, onChange, clearSelectedValues, setLastValues } = useSelectState(!!multiple, valueSelect || []);
|
|
47
47
|
useEffect(() => {
|
|
48
48
|
const nextSelectedOptions = options.filter(({ value }) => valueSelectArray.includes(value));
|
|
@@ -68,7 +68,7 @@ const Select = ({ multiple, showClearButton, showCloseButtonInNavigationBar = fa
|
|
|
68
68
|
},
|
|
69
69
|
maxHeight,
|
|
70
70
|
bottomSheetHeight,
|
|
71
|
-
|
|
71
|
+
toggleOptions,
|
|
72
72
|
values,
|
|
73
73
|
multiple,
|
|
74
74
|
selectedOptions,
|
package/Select.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.js","sources":["../src/Select.tsx"],"sourcesContent":["import { ReactElement, useState, useEffect, useRef, useCallback } from 'react';\n\nimport { match } from '@hh.ru/magritte-common-fuzzy-search';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { SelectForDesktopDevice } from '@hh.ru/magritte-ui-select/SelectForDesktopDevice';\nimport { SelectForMobileDevice } from '@hh.ru/magritte-ui-select/SelectForMobileDevice';\nimport type { SelectProps, SelectOption } from '@hh.ru/magritte-ui-select/types';\nimport { useSelectOptionsList } from '@hh.ru/magritte-ui-select/useSelectOptionsList';\nimport { useSelectState } from '@hh.ru/magritte-ui-select/useSelectState';\n\nconst getValue = (values?: string | string[]): string[] => {\n if (values === undefined) {\n return [];\n }\n return typeof values === 'string' ? [values] : values;\n};\n\nconst Select = <ShowClearButtonType extends boolean, MultipleType extends boolean, T>({\n multiple,\n showClearButton,\n showCloseButtonInNavigationBar = false,\n onChange: onChangeHandler,\n value: valueSelect,\n renderItem,\n renderItemForDesktop,\n options,\n maxHeight = 460,\n widthEqualToActivator = true,\n maxWidth,\n bottomSheetHeight = 'full-screen',\n dropHost,\n maxSelectedOptions,\n searchable,\n onBottomSheetOpen,\n onBottomSheetClose,\n onDropClose,\n onDropOpen,\n ...props\n}: SelectProps<ShowClearButtonType, MultipleType, T>): ReactElement => {\n const { isMobile } = useBreakpoint();\n const [commitChanges, setCommitChanges] = useState<number | undefined>();\n const previousCommitChanges = useRef(commitChanges);\n const [searchValue, setSearchValue] = useState('');\n const [optionList, setOptionList] = useState(options);\n const optionListSearchText = useRef<{ search: string; value: string }[]>([]);\n\n const valueSelectArray = getValue(valueSelect);\n const [selectedOptions, setSelectedOptions] = useState<SelectOption<T>[]>(() =>\n valueSelectArray ? options.filter(({ value }) => valueSelectArray.includes(value)) : []\n );\n\n const { optionsListRef, activatorRef, onActivatorClick, onClearSelectionClick, onOptionsListClose, showOptions } =\n useSelectOptionsList(!!searchable);\n\n const { values, onChange, clearSelectedValues, setLastValues } = useSelectState<MultipleType>(\n !!multiple,\n valueSelect || []\n );\n\n useEffect(() => {\n const nextSelectedOptions = options.filter(({ value }) => valueSelectArray.includes(value));\n const isEqualsSelect = nextSelectedOptions.every((item) => {\n return selectedOptions.includes(item);\n });\n\n if (!isEqualsSelect) {\n setSelectedOptions(options.filter(({ value }) => valueSelectArray.includes(value)));\n }\n }, [options, valueSelectArray, selectedOptions]);\n\n const optionListProps = {\n ...props,\n searchable,\n onChange,\n maxWidth,\n widthEqualToActivator,\n visible: showOptions,\n setLastValues,\n clearSelectedValues: () => {\n clearSelectedValues();\n setCommitChanges(performance.now());\n onClearSelectionClick();\n },\n maxHeight,\n bottomSheetHeight,\n onActivatorClick,\n values,\n multiple,\n selectedOptions,\n onOptionsListClose,\n searchValue,\n setSearchValue,\n optionsListRef,\n activatorRef,\n options: optionList,\n optionsCount: options.length,\n setCommitChanges,\n showClearButton,\n isLimitExceeded:\n maxSelectedOptions !== undefined && Array.isArray(values) && values.length >= maxSelectedOptions,\n };\n\n useEffect(() => {\n if (optionListSearchText.current.length === 0 && showOptions && optionsListRef.current) {\n const options = optionsListRef.current.querySelectorAll<HTMLDivElement>('[data-magritte-option]');\n optionListSearchText.current = [...options].map((optionElement) => {\n return {\n search: optionElement.innerText ?? optionElement.textContent,\n value: optionElement.dataset.magritteOption as string,\n };\n });\n }\n if (!showOptions) {\n setSearchValue('');\n }\n }, [optionsListRef, showOptions]);\n\n useEffect(() => {\n if (searchValue === '') {\n setOptionList(options);\n } else {\n const optionToVisible = optionListSearchText.current\n .filter(({ search }) => {\n const result = match(searchValue, search);\n return result;\n })\n .map(({ value }) => value);\n const nextOptions = options.filter(({ value }) => optionToVisible.includes(value));\n\n setOptionList(nextOptions);\n }\n }, [searchValue, options]);\n\n const onChangeSelect = useCallback(() => onChangeHandler(values), [values, onChangeHandler]);\n\n // обработка выбора значения селекта\n useEffect(() => {\n // если изменения не было, то ничего не делаем\n if (previousCommitChanges.current === commitChanges) {\n return;\n }\n\n if (!multiple) {\n onOptionsListClose();\n }\n\n onChangeSelect();\n }, [isMobile, onChangeSelect, commitChanges, multiple, onOptionsListClose]);\n\n useEffect(() => {\n if (previousCommitChanges.current !== commitChanges) {\n const nextSelectedOptions = options.filter(({ value }) =>\n Array.isArray(values) ? values.includes(value) : values === value\n );\n setSelectedOptions(nextSelectedOptions);\n previousCommitChanges.current = commitChanges;\n }\n }, [options, values, commitChanges]);\n\n if (isMobile) {\n return (\n <SelectForMobileDevice\n {...optionListProps}\n showCloseButtonInNavigationBar={showCloseButtonInNavigationBar}\n renderItem={renderItem}\n onBottomSheetClose={onBottomSheetClose}\n onBottomSheetOpen={onBottomSheetOpen}\n />\n );\n }\n\n return (\n <SelectForDesktopDevice\n {...optionListProps}\n renderItemForDesktop={renderItemForDesktop}\n dropHost={dropHost}\n onDropClose={onDropClose}\n onDropOpen={onDropOpen}\n />\n );\n};\n\nSelect.displayName = 'Select';\n\nexport { Select };\n"],"names":["_jsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Select.js","sources":["../src/Select.tsx"],"sourcesContent":["import { ReactElement, useState, useEffect, useRef, useCallback } from 'react';\n\nimport { match } from '@hh.ru/magritte-common-fuzzy-search';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { SelectForDesktopDevice } from '@hh.ru/magritte-ui-select/SelectForDesktopDevice';\nimport { SelectForMobileDevice } from '@hh.ru/magritte-ui-select/SelectForMobileDevice';\nimport type { SelectProps, SelectOption } from '@hh.ru/magritte-ui-select/types';\nimport { useSelectOptionsList } from '@hh.ru/magritte-ui-select/useSelectOptionsList';\nimport { useSelectState } from '@hh.ru/magritte-ui-select/useSelectState';\n\nconst getValue = (values?: string | string[]): string[] => {\n if (values === undefined) {\n return [];\n }\n return typeof values === 'string' ? [values] : values;\n};\n\nconst Select = <ShowClearButtonType extends boolean, MultipleType extends boolean, T>({\n multiple,\n showClearButton,\n showCloseButtonInNavigationBar = false,\n onChange: onChangeHandler,\n value: valueSelect,\n renderItem,\n renderItemForDesktop,\n options,\n maxHeight = 460,\n widthEqualToActivator = true,\n maxWidth,\n bottomSheetHeight = 'full-screen',\n dropHost,\n maxSelectedOptions,\n searchable,\n onBottomSheetOpen,\n onBottomSheetClose,\n onDropClose,\n onDropOpen,\n ...props\n}: SelectProps<ShowClearButtonType, MultipleType, T>): ReactElement => {\n const { isMobile } = useBreakpoint();\n const [commitChanges, setCommitChanges] = useState<number | undefined>();\n const previousCommitChanges = useRef(commitChanges);\n const [searchValue, setSearchValue] = useState('');\n const [optionList, setOptionList] = useState(options);\n const optionListSearchText = useRef<{ search: string; value: string }[]>([]);\n\n const valueSelectArray = getValue(valueSelect);\n const [selectedOptions, setSelectedOptions] = useState<SelectOption<T>[]>(() =>\n valueSelectArray ? options.filter(({ value }) => valueSelectArray.includes(value)) : []\n );\n\n const { optionsListRef, activatorRef, toggleOptions, onClearSelectionClick, onOptionsListClose, showOptions } =\n useSelectOptionsList(!!searchable);\n\n const { values, onChange, clearSelectedValues, setLastValues } = useSelectState<MultipleType>(\n !!multiple,\n valueSelect || []\n );\n\n useEffect(() => {\n const nextSelectedOptions = options.filter(({ value }) => valueSelectArray.includes(value));\n const isEqualsSelect = nextSelectedOptions.every((item) => {\n return selectedOptions.includes(item);\n });\n\n if (!isEqualsSelect) {\n setSelectedOptions(options.filter(({ value }) => valueSelectArray.includes(value)));\n }\n }, [options, valueSelectArray, selectedOptions]);\n\n const optionListProps = {\n ...props,\n searchable,\n onChange,\n maxWidth,\n widthEqualToActivator,\n visible: showOptions,\n setLastValues,\n clearSelectedValues: () => {\n clearSelectedValues();\n setCommitChanges(performance.now());\n onClearSelectionClick();\n },\n maxHeight,\n bottomSheetHeight,\n toggleOptions,\n values,\n multiple,\n selectedOptions,\n onOptionsListClose,\n searchValue,\n setSearchValue,\n optionsListRef,\n activatorRef,\n options: optionList,\n optionsCount: options.length,\n setCommitChanges,\n showClearButton,\n isLimitExceeded:\n maxSelectedOptions !== undefined && Array.isArray(values) && values.length >= maxSelectedOptions,\n };\n\n useEffect(() => {\n if (optionListSearchText.current.length === 0 && showOptions && optionsListRef.current) {\n const options = optionsListRef.current.querySelectorAll<HTMLDivElement>('[data-magritte-option]');\n optionListSearchText.current = [...options].map((optionElement) => {\n return {\n search: optionElement.innerText ?? optionElement.textContent,\n value: optionElement.dataset.magritteOption as string,\n };\n });\n }\n if (!showOptions) {\n setSearchValue('');\n }\n }, [optionsListRef, showOptions]);\n\n useEffect(() => {\n if (searchValue === '') {\n setOptionList(options);\n } else {\n const optionToVisible = optionListSearchText.current\n .filter(({ search }) => {\n const result = match(searchValue, search);\n return result;\n })\n .map(({ value }) => value);\n const nextOptions = options.filter(({ value }) => optionToVisible.includes(value));\n\n setOptionList(nextOptions);\n }\n }, [searchValue, options]);\n\n const onChangeSelect = useCallback(() => onChangeHandler(values), [values, onChangeHandler]);\n\n // обработка выбора значения селекта\n useEffect(() => {\n // если изменения не было, то ничего не делаем\n if (previousCommitChanges.current === commitChanges) {\n return;\n }\n\n if (!multiple) {\n onOptionsListClose();\n }\n\n onChangeSelect();\n }, [isMobile, onChangeSelect, commitChanges, multiple, onOptionsListClose]);\n\n useEffect(() => {\n if (previousCommitChanges.current !== commitChanges) {\n const nextSelectedOptions = options.filter(({ value }) =>\n Array.isArray(values) ? values.includes(value) : values === value\n );\n setSelectedOptions(nextSelectedOptions);\n previousCommitChanges.current = commitChanges;\n }\n }, [options, values, commitChanges]);\n\n if (isMobile) {\n return (\n <SelectForMobileDevice\n {...optionListProps}\n showCloseButtonInNavigationBar={showCloseButtonInNavigationBar}\n renderItem={renderItem}\n onBottomSheetClose={onBottomSheetClose}\n onBottomSheetOpen={onBottomSheetOpen}\n />\n );\n }\n\n return (\n <SelectForDesktopDevice\n {...optionListProps}\n renderItemForDesktop={renderItemForDesktop}\n dropHost={dropHost}\n onDropClose={onDropClose}\n onDropOpen={onDropOpen}\n />\n );\n};\n\nSelect.displayName = 'Select';\n\nexport { Select };\n"],"names":["_jsx"],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import './index.css';
|
|
2
|
+
import { jsxs, jsx, Fragment as Fragment$1 } from 'react/jsx-runtime';
|
|
3
|
+
import { forwardRef, useRef, Fragment, useCallback, useLayoutEffect } from 'react';
|
|
4
|
+
import classnames from 'classnames';
|
|
5
|
+
import { keyboardMatch, keyboardKeys, findNextFocusableElement } from '@hh.ru/magritte-common-keyboard';
|
|
6
|
+
import { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';
|
|
7
|
+
import { Counter } from '@hh.ru/magritte-ui-counter';
|
|
8
|
+
import { FormHelper } from '@hh.ru/magritte-ui-form-helper';
|
|
9
|
+
import { ChevronDownOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';
|
|
10
|
+
import { BaseInput } from '@hh.ru/magritte-ui-input/BaseInput';
|
|
11
|
+
import { Text } from '@hh.ru/magritte-ui-typography';
|
|
12
|
+
|
|
13
|
+
var styles = {"select-activator":"magritte-select-activator___9XXwA_5-3-0","selectActivator":"magritte-select-activator___9XXwA_5-3-0","select-activator-label":"magritte-select-activator-label___Mc49R_5-3-0","selectActivatorLabel":"magritte-select-activator-label___Mc49R_5-3-0","select-activator-placeholder":"magritte-select-activator-placeholder___7ODSn_5-3-0","selectActivatorPlaceholder":"magritte-select-activator-placeholder___7ODSn_5-3-0","select-activator-value":"magritte-select-activator-value___wDbVR_5-3-0","selectActivatorValue":"magritte-select-activator-value___wDbVR_5-3-0","select-activator-chevron":"magritte-select-activator-chevron___DHIUH_5-3-0","selectActivatorChevron":"magritte-select-activator-chevron___DHIUH_5-3-0","select-activator-disabled":"magritte-select-activator-disabled___mYKi2_5-3-0","selectActivatorDisabled":"magritte-select-activator-disabled___mYKi2_5-3-0","select-activator-item":"magritte-select-activator-item___JsY4v_5-3-0","selectActivatorItem":"magritte-select-activator-item___JsY4v_5-3-0","select-activator-invalid":"magritte-select-activator-invalid___IdlRp_5-3-0","selectActivatorInvalid":"magritte-select-activator-invalid___IdlRp_5-3-0","select-activator-size-large":"magritte-select-activator-size-large___MIXAH_5-3-0","selectActivatorSizeLarge":"magritte-select-activator-size-large___MIXAH_5-3-0","select-activator-with-label":"magritte-select-activator-with-label___DwcKr_5-3-0","selectActivatorWithLabel":"magritte-select-activator-with-label___DwcKr_5-3-0","select-activator-label-root":"magritte-select-activator-label-root___eYIWQ_5-3-0","selectActivatorLabelRoot":"magritte-select-activator-label-root___eYIWQ_5-3-0","select-activator-has-counter":"magritte-select-activator-has-counter___k2Kc2_5-3-0","selectActivatorHasCounter":"magritte-select-activator-has-counter___k2Kc2_5-3-0","select-activator-ellipsis":"magritte-select-activator-ellipsis___16zkC_5-3-0","selectActivatorEllipsis":"magritte-select-activator-ellipsis___16zkC_5-3-0","select-activator-chevron-animation-timeout":"magritte-select-activator-chevron-animation-timeout___y19bf_5-3-0","selectActivatorChevronAnimationTimeout":"magritte-select-activator-chevron-animation-timeout___y19bf_5-3-0","select-activator-chevron-up":"magritte-select-activator-chevron-up___gtPyi_5-3-0","selectActivatorChevronUp":"magritte-select-activator-chevron-up___gtPyi_5-3-0","select-options":"magritte-select-options___y2KYZ_5-3-0","selectOptions":"magritte-select-options___y2KYZ_5-3-0","select-options-xs":"magritte-select-options-xs___BiiPo_5-3-0","selectOptionsXs":"magritte-select-options-xs___BiiPo_5-3-0","optionDelimiter":"magritte-optionDelimiter___OaKsB_5-3-0"};
|
|
14
|
+
|
|
15
|
+
// Когда активатор находится в фокусе, обрабатываем клавиатурную навигацию один раз и передаем фокус в дроп,
|
|
16
|
+
// внутри дропа ей будет заниматься useKeyboardNavigation
|
|
17
|
+
const focusOptionsList = (event, drop, direction) => {
|
|
18
|
+
if (drop) {
|
|
19
|
+
const nextFocusableElement = findNextFocusableElement(drop, null, direction, 'list');
|
|
20
|
+
if (nextFocusableElement !== null) {
|
|
21
|
+
event.preventDefault();
|
|
22
|
+
nextFocusableElement.focus();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
const SelectActivator = forwardRef(({ placeholder, size = 'medium', elevatePlaceholder = false, disabled = false, multiple, invalid = false, searchable = false, selectedOptions, toggleOptions, onFocus, onBlur, searchValue, setSearchValue, description, errorMessage, visible, dropRef, forcedState, setForcedState, }, ref) => {
|
|
27
|
+
const activatorRef = useRef(null);
|
|
28
|
+
const activatorRefCallback = useMultipleRefs(ref, activatorRef);
|
|
29
|
+
const counter = multiple ? selectedOptions?.length ?? 0 : 0;
|
|
30
|
+
const inputRef = useRef(null);
|
|
31
|
+
const prevVisibleRef = useRef(visible);
|
|
32
|
+
const value = selectedOptions?.map(({ label, value }, index) => (jsxs(Fragment, { children: [label, index === selectedOptions.length - 1 ? '' : ', '] }, value)));
|
|
33
|
+
const hintContent = (jsx(FormHelper, { description: description, errorMessage: errorMessage, disabled: disabled, invalid: invalid && !visible }, "hint"));
|
|
34
|
+
const handleKeyDown = useCallback((event) => {
|
|
35
|
+
if (visible && keyboardMatch(event.nativeEvent, keyboardKeys.Escape)) {
|
|
36
|
+
setForcedState?.('focus');
|
|
37
|
+
toggleOptions(false);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (visible && keyboardMatch(event.nativeEvent, keyboardKeys.ArrowUp)) {
|
|
41
|
+
focusOptionsList(event, dropRef?.current, 'up');
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (visible && keyboardMatch(event.nativeEvent, keyboardKeys.ArrowDown)) {
|
|
45
|
+
focusOptionsList(event, dropRef?.current, 'down');
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (!visible && !keyboardMatch(event.nativeEvent, keyboardKeys.Tab)) {
|
|
49
|
+
toggleOptions(true);
|
|
50
|
+
}
|
|
51
|
+
}, [dropRef, setForcedState, toggleOptions, visible]);
|
|
52
|
+
useLayoutEffect(() => {
|
|
53
|
+
if (forcedState === 'focus') {
|
|
54
|
+
if (inputRef.current !== null) {
|
|
55
|
+
inputRef.current.focus();
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
activatorRef.current?.focus();
|
|
59
|
+
setForcedState?.(null);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (forcedState === 'focusAndSelect') {
|
|
63
|
+
inputRef.current?.focus();
|
|
64
|
+
inputRef.current?.select();
|
|
65
|
+
}
|
|
66
|
+
// список опций закрылся по клику вне него
|
|
67
|
+
if (!forcedState && !visible && prevVisibleRef.current) {
|
|
68
|
+
onBlur?.();
|
|
69
|
+
}
|
|
70
|
+
prevVisibleRef.current = visible;
|
|
71
|
+
}, [forcedState, setForcedState, visible, onBlur]);
|
|
72
|
+
if (searchable && (visible || forcedState === 'focus' || forcedState === 'focusAndSelect')) {
|
|
73
|
+
const sizeProp = size === 'large' ? { size: 'large' } : { size: 'medium' };
|
|
74
|
+
return (jsxs(Fragment$1, { children: [jsx(BaseInput, { ...sizeProp, wrapperRef: ref, onKeyDown: handleKeyDown, ref: inputRef, value: searchValue, onChange: setSearchValue, onBlur: () => setForcedState?.(null), "data-qa": "magritte-select-activator-input", placeholder: selectedOptions.length > 0 ? value : placeholder, counter: counter === 0 ? undefined : counter, autoComplete: "off" }), hintContent] }));
|
|
75
|
+
}
|
|
76
|
+
const showValue = selectedOptions.length > 0;
|
|
77
|
+
const showPlaceholder = !!(placeholder && !showValue);
|
|
78
|
+
const isLargeSize = size === 'large';
|
|
79
|
+
const showLabel = !!(isLargeSize && placeholder && elevatePlaceholder && showValue);
|
|
80
|
+
return (jsxs(Fragment$1, { children: [jsxs("div", { ref: activatorRefCallback, "data-qa": "magritte-select-activator", className: classnames(styles.selectActivator, {
|
|
81
|
+
[styles.selectActivatorSizeLarge]: isLargeSize,
|
|
82
|
+
[styles.selectActivatorWithLabel]: showLabel,
|
|
83
|
+
[styles.selectActivatorHasCounter]: counter > 0,
|
|
84
|
+
[styles.selectActivatorDisabled]: disabled,
|
|
85
|
+
[styles.selectActivatorInvalid]: invalid,
|
|
86
|
+
}), onClick: () => {
|
|
87
|
+
if (!disabled && !visible) {
|
|
88
|
+
toggleOptions(true);
|
|
89
|
+
}
|
|
90
|
+
}, onFocus: () => {
|
|
91
|
+
if (!disabled && !visible && forcedState !== 'focus' && forcedState !== 'focusAndSelect') {
|
|
92
|
+
onFocus?.();
|
|
93
|
+
toggleOptions(true);
|
|
94
|
+
setForcedState?.('focus');
|
|
95
|
+
}
|
|
96
|
+
}, onBlur: () => {
|
|
97
|
+
if (!disabled && !visible) {
|
|
98
|
+
onBlur?.();
|
|
99
|
+
}
|
|
100
|
+
}, onKeyDown: handleKeyDown, tabIndex: disabled ? -1 : 0, children: [jsxs("div", { className: styles.selectActivatorLabelRoot, children: [showPlaceholder && (jsx("div", { className: styles.selectActivatorPlaceholder, children: jsx(Text, { typography: "label-2-regular", children: jsx("div", { className: styles.selectActivatorEllipsis, children: placeholder }) }) })), showLabel && (jsx("div", { className: styles.selectActivatorLabel, children: jsx(Text, { typography: "label-4-regular", children: jsx("div", { className: styles.selectActivatorEllipsis, children: placeholder }) }) })), showValue && (jsx("div", { className: styles.selectActivatorValue, children: jsx(Text, { typography: "label-2-regular", children: jsx("div", { className: styles.selectActivatorEllipsis, children: value }) }) }))] }), jsxs("div", { className: styles.selectActivatorItem, children: [counter > 0 && jsx(Counter, { label: counter }), jsx("div", { className: classnames(styles.selectActivatorChevron, {
|
|
101
|
+
[styles.selectActivatorChevronUp]: visible,
|
|
102
|
+
}), children: jsx(ChevronDownOutlinedSize24, {}) })] })] }), hintContent] }));
|
|
103
|
+
});
|
|
104
|
+
SelectActivator.displayName = 'SelectActivator';
|
|
105
|
+
const renderSelectActivator = (props) => {
|
|
106
|
+
return jsx(SelectActivator, { ...props });
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
export { SelectActivator as S, renderSelectActivator as r, styles as s };
|
|
110
|
+
//# sourceMappingURL=SelectActivator-125a6b32.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectActivator-125a6b32.js","sources":["../src/SelectActivator.tsx"],"sourcesContent":["import {\n ForwardedRef,\n Fragment,\n KeyboardEventHandler,\n ReactNode,\n SyntheticEvent,\n forwardRef,\n useCallback,\n useLayoutEffect,\n useRef,\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 { Counter } from '@hh.ru/magritte-ui-counter';\nimport { FormHelper } from '@hh.ru/magritte-ui-form-helper';\nimport { ChevronDownOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';\nimport { BaseInput } from '@hh.ru/magritte-ui-input/BaseInput';\nimport { type SelectActivatorProps } from '@hh.ru/magritte-ui-select/types';\nimport { Text } from '@hh.ru/magritte-ui-typography';\n\nimport styles from './styles.less';\n\n// Когда активатор находится в фокусе, обрабатываем клавиатурную навигацию один раз и передаем фокус в дроп,\n// внутри дропа ей будет заниматься useKeyboardNavigation\nconst focusOptionsList = (event: SyntheticEvent, drop: HTMLElement | null | undefined, direction: 'up' | 'down') => {\n if (drop) {\n const nextFocusableElement = findNextFocusableElement(drop, null, direction, 'list');\n if (nextFocusableElement !== null) {\n event.preventDefault();\n nextFocusableElement.focus();\n }\n }\n};\n\nconst SelectActivator = forwardRef(\n <T,>(\n {\n placeholder,\n size = 'medium',\n elevatePlaceholder = false,\n disabled = false,\n multiple,\n invalid = false,\n searchable = false,\n selectedOptions,\n toggleOptions,\n onFocus,\n onBlur,\n searchValue,\n setSearchValue,\n description,\n errorMessage,\n visible,\n dropRef,\n forcedState,\n setForcedState,\n }: SelectActivatorProps<T>,\n ref: ForwardedRef<HTMLElement>\n ) => {\n const activatorRef = useRef<HTMLDivElement>(null);\n const activatorRefCallback = useMultipleRefs(ref, activatorRef);\n const counter = multiple ? selectedOptions?.length ?? 0 : 0;\n const inputRef = useRef<HTMLInputElement>(null);\n const prevVisibleRef = useRef(visible);\n\n const value = selectedOptions?.map(({ label, value }, index) => (\n <Fragment key={value}>\n {label}\n {index === selectedOptions.length - 1 ? '' : ', '}\n </Fragment>\n ));\n\n const hintContent = (\n <FormHelper\n key=\"hint\"\n description={description}\n errorMessage={errorMessage}\n disabled={disabled}\n invalid={invalid && !visible}\n />\n );\n\n const handleKeyDown = useCallback<KeyboardEventHandler>(\n (event) => {\n if (visible && keyboardMatch(event.nativeEvent, keyboardKeys.Escape)) {\n setForcedState?.('focus');\n toggleOptions(false);\n return;\n }\n\n if (visible && keyboardMatch(event.nativeEvent, keyboardKeys.ArrowUp)) {\n focusOptionsList(event, dropRef?.current, 'up');\n return;\n }\n\n if (visible && keyboardMatch(event.nativeEvent, keyboardKeys.ArrowDown)) {\n focusOptionsList(event, dropRef?.current, 'down');\n return;\n }\n\n if (!visible && !keyboardMatch(event.nativeEvent, keyboardKeys.Tab)) {\n toggleOptions(true);\n }\n },\n [dropRef, setForcedState, toggleOptions, visible]\n );\n\n useLayoutEffect(() => {\n if (forcedState === 'focus') {\n if (inputRef.current !== null) {\n inputRef.current.focus();\n } else {\n activatorRef.current?.focus();\n setForcedState?.(null);\n }\n }\n\n if (forcedState === 'focusAndSelect') {\n inputRef.current?.focus();\n inputRef.current?.select();\n }\n\n // список опций закрылся по клику вне него\n if (!forcedState && !visible && prevVisibleRef.current) {\n onBlur?.();\n }\n\n prevVisibleRef.current = visible;\n }, [forcedState, setForcedState, visible, onBlur]);\n\n if (searchable && (visible || forcedState === 'focus' || forcedState === 'focusAndSelect')) {\n const sizeProp = size === 'large' ? ({ size: 'large' } as const) : ({ size: 'medium' } as const);\n\n return (\n <>\n <BaseInput\n {...sizeProp}\n wrapperRef={ref as ForwardedRef<HTMLDivElement> | undefined}\n onKeyDown={handleKeyDown}\n ref={inputRef}\n value={searchValue}\n onChange={setSearchValue}\n onBlur={() => setForcedState?.(null)}\n data-qa=\"magritte-select-activator-input\"\n placeholder={selectedOptions.length > 0 ? value : placeholder}\n counter={counter === 0 ? undefined : counter}\n autoComplete=\"off\"\n />\n {hintContent}\n </>\n );\n }\n\n const showValue = selectedOptions.length > 0;\n const showPlaceholder = !!(placeholder && !showValue);\n const isLargeSize = size === 'large';\n const showLabel = !!(isLargeSize && placeholder && elevatePlaceholder && showValue);\n\n return (\n <>\n <div\n ref={activatorRefCallback}\n data-qa=\"magritte-select-activator\"\n className={classnames(styles.selectActivator, {\n [styles.selectActivatorSizeLarge]: isLargeSize,\n [styles.selectActivatorWithLabel]: showLabel,\n [styles.selectActivatorHasCounter]: counter > 0,\n [styles.selectActivatorDisabled]: disabled,\n [styles.selectActivatorInvalid]: invalid,\n })}\n onClick={() => {\n if (!disabled && !visible) {\n toggleOptions(true);\n }\n }}\n onFocus={() => {\n if (!disabled && !visible && forcedState !== 'focus' && forcedState !== 'focusAndSelect') {\n onFocus?.();\n toggleOptions(true);\n setForcedState?.('focus');\n }\n }}\n onBlur={() => {\n if (!disabled && !visible) {\n onBlur?.();\n }\n }}\n onKeyDown={handleKeyDown}\n tabIndex={disabled ? -1 : 0}\n >\n <div className={styles.selectActivatorLabelRoot}>\n {showPlaceholder && (\n <div className={styles.selectActivatorPlaceholder}>\n <Text typography=\"label-2-regular\">\n <div className={styles.selectActivatorEllipsis}>{placeholder}</div>\n </Text>\n </div>\n )}\n {showLabel && (\n <div className={styles.selectActivatorLabel}>\n <Text typography=\"label-4-regular\">\n <div className={styles.selectActivatorEllipsis}>{placeholder}</div>\n </Text>\n </div>\n )}\n {showValue && (\n <div className={styles.selectActivatorValue}>\n <Text typography=\"label-2-regular\">\n <div className={styles.selectActivatorEllipsis}>{value}</div>\n </Text>\n </div>\n )}\n </div>\n <div className={styles.selectActivatorItem}>\n {counter > 0 && <Counter label={counter} />}\n <div\n className={classnames(styles.selectActivatorChevron, {\n [styles.selectActivatorChevronUp]: visible,\n })}\n >\n <ChevronDownOutlinedSize24 />\n </div>\n </div>\n </div>\n {hintContent}\n </>\n );\n }\n);\n\nSelectActivator.displayName = 'SelectActivator';\n\nconst renderSelectActivator = <T,>(props: SelectActivatorProps<T>): ReactNode => {\n return <SelectActivator {...props} />;\n};\n\nexport { SelectActivator, renderSelectActivator };\n"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
|
package/SelectActivator.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
2
|
import { type SelectActivatorProps } from './types';
|
|
3
3
|
declare const SelectActivator: import("react").ForwardRefExoticComponent<SelectActivatorProps<unknown> & import("react").RefAttributes<HTMLElement>>;
|
|
4
4
|
declare const renderSelectActivator: <T>(props: SelectActivatorProps<T>) => ReactNode;
|
package/SelectActivator.js
CHANGED
|
@@ -3,10 +3,11 @@ import 'react/jsx-runtime';
|
|
|
3
3
|
import 'react';
|
|
4
4
|
import 'classnames';
|
|
5
5
|
import '@hh.ru/magritte-common-keyboard';
|
|
6
|
+
import '@hh.ru/magritte-common-use-multiple-refs';
|
|
6
7
|
import '@hh.ru/magritte-ui-counter';
|
|
7
8
|
import '@hh.ru/magritte-ui-form-helper';
|
|
8
9
|
import '@hh.ru/magritte-ui-icon/icon';
|
|
9
10
|
import '@hh.ru/magritte-ui-input/BaseInput';
|
|
10
11
|
import '@hh.ru/magritte-ui-typography';
|
|
11
|
-
export { S as SelectActivator, r as renderSelectActivator } from './SelectActivator-
|
|
12
|
+
export { S as SelectActivator, r as renderSelectActivator } from './SelectActivator-125a6b32.js';
|
|
12
13
|
//# sourceMappingURL=SelectActivator.js.map
|
package/SelectActivator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectActivator.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SelectActivator.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ReactElement, RefObject } from 'react';
|
|
2
2
|
import type { InternalSelectProps, RenderItem } from './types';
|
|
3
3
|
export declare const SelectForDesktopDevice: {
|
|
4
|
-
<T, MultipleType extends boolean>({ name, options, disabled, multiple, onChange,
|
|
5
|
-
|
|
4
|
+
<T, MultipleType extends boolean>({ name, options, disabled, multiple, onChange, toggleOptions, maxHeight, values, visible, onOptionsListClose, selectedOptions, renderItemForDesktop, clearSelectedValues, setCommitChanges, searchValue, showClearButton, trls, optionsListRef, size, elevatePlaceholder, widthEqualToActivator, maxWidth, dropHost, isLimitExceeded, activatorRef, onDropOpen, onDropClose, ...activatorProps }: Omit<import("./types").SelectProps<boolean, boolean, T>, "onChange" | "value" | "renderItemForDesktop" | "renderItem"> & {
|
|
5
|
+
toggleOptions: (visible: boolean) => void;
|
|
6
6
|
selectedOptions: import("@hh.ru/magritte-ui-select/types").SelectOption<T>[];
|
|
7
7
|
values: [MultipleType] extends [true] ? string[] : string;
|
|
8
8
|
visible: boolean;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import './index.css';
|
|
2
|
-
import { useRef, createElement } from 'react';
|
|
2
|
+
import { useRef, useState, createElement } from 'react';
|
|
3
3
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
-
import {
|
|
4
|
+
import { keyboardMatches, keyboardKeys } from '@hh.ru/magritte-common-keyboard';
|
|
5
5
|
import { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';
|
|
6
6
|
import { Card } from '@hh.ru/magritte-ui-card';
|
|
7
7
|
import { Cell, CellText } from '@hh.ru/magritte-ui-cell';
|
|
8
8
|
import { Drop } from '@hh.ru/magritte-ui-drop';
|
|
9
9
|
import { CrossOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';
|
|
10
|
-
import { S as SelectActivator, s as styles } from './SelectActivator-
|
|
10
|
+
import { S as SelectActivator, s as styles } from './SelectActivator-125a6b32.js';
|
|
11
11
|
import { SelectOption } from './SelectOption.js';
|
|
12
12
|
import { getChecked } from './getChecked.js';
|
|
13
13
|
import 'classnames';
|
|
@@ -18,30 +18,27 @@ import '@hh.ru/magritte-ui-typography';
|
|
|
18
18
|
import '@hh.ru/magritte-ui-checkable-card/CheckableCardElement';
|
|
19
19
|
import '@hh.ru/magritte-ui-checkbox-radio';
|
|
20
20
|
|
|
21
|
-
const SelectForDesktopDevice = ({ name, options, disabled, multiple = false, onChange,
|
|
22
|
-
const
|
|
21
|
+
const SelectForDesktopDevice = ({ name, options, disabled, multiple = false, onChange, toggleOptions, maxHeight, values, visible, onOptionsListClose, selectedOptions, renderItemForDesktop, clearSelectedValues, setCommitChanges, searchValue, showClearButton, trls, optionsListRef, size, elevatePlaceholder, widthEqualToActivator, maxWidth, dropHost, isLimitExceeded, activatorRef, onDropOpen, onDropClose, ...activatorProps }) => {
|
|
22
|
+
const closedByKeyboardRef = useRef(false);
|
|
23
23
|
const dropRef = useRef(null);
|
|
24
|
-
const
|
|
25
|
-
const searchRef = useRef(null);
|
|
26
|
-
const rawOptions = options.filter(({ type }) => type !== 'delimiter');
|
|
27
|
-
const firstOption = rawOptions?.[0];
|
|
28
|
-
const lastOption = rawOptions?.[rawOptions.length - 1];
|
|
24
|
+
const optionsListRefCallback = useMultipleRefs(optionsListRef, dropRef);
|
|
29
25
|
const sizeProp = size === 'large' ? { size: 'large', elevatePlaceholder } : { size: 'medium' };
|
|
30
|
-
|
|
31
|
-
|
|
26
|
+
// стейт фокуса активатора, в которой его нужно привести после взаимодействия пользователя со списком опций
|
|
27
|
+
// его нужно отличать от обычного фокуса, инициированным пользователем, поэтому не используем activatorRef.focus()
|
|
28
|
+
const [forcedState, setForcedState] = useState(null);
|
|
29
|
+
return (jsxs("div", { tabIndex: -1, children: [jsx(SelectActivator, { ...sizeProp, ...activatorProps, disabled: disabled, selectedOptions: selectedOptions, toggleOptions: toggleOptions, searchValue: searchValue, ref: activatorRef, multiple: multiple, visible: visible, dropRef: dropRef, forcedState: forcedState, setForcedState: setForcedState }), jsx(Drop, { autoFocusWhenOpened: false, ref: optionsListRefCallback, maxWidth: maxWidth, visible: options.length > 0 && visible, direction: "bottom", alignment: "left", activatorRef: activatorRef, role: activatorProps.searchable ? 'status' : 'listbox', space: 400, widthEqualToActivator: widthEqualToActivator, host: dropHost, keyboardNavigationMode: "list", forcePosition: true, closeByClickOutside: false, onClose: () => {
|
|
30
|
+
setForcedState('focus');
|
|
32
31
|
onOptionsListClose();
|
|
33
|
-
},
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if (searchInput !== null &&
|
|
37
|
-
keyboardMatch(nativeEvent, keyboardKeys.ArrowUp) &&
|
|
38
|
-
activeElement?.dataset.magritteOptionFirstActiveElement) {
|
|
39
|
-
searchInput.focus();
|
|
32
|
+
}, onKeyDownCapture: (event) => {
|
|
33
|
+
if (keyboardMatches(event.nativeEvent, [keyboardKeys.Enter, keyboardKeys.Space])) {
|
|
34
|
+
closedByKeyboardRef.current = true;
|
|
40
35
|
}
|
|
41
|
-
}, onAfterExit: onDropClose, onAppear: onDropOpen, children: jsx("div", { style: { maxHeight: `${maxHeight}px` }, children: jsxs("div", { "data-qa": "magritte-select-option-list", className: styles.selectOptions, children: [showClearButton && (jsx(Card, { actionCard: true, showBorder: true, borderRadius: 12, padding: 16, stretched: true, hoverStyle: "neutral", onClick: () => {
|
|
36
|
+
}, onAfterExit: onDropClose, onAppear: onDropOpen, children: jsx("div", { style: { maxHeight: `${maxHeight}px` }, children: jsxs("div", { "data-qa": "magritte-select-option-list", className: styles.selectOptions, children: [showClearButton && (jsx(Card, { actionCard: true, showBorder: true, borderRadius: 12, padding: 16, stretched: true, hoverStyle: "neutral", onClick: (event) => {
|
|
37
|
+
if (event.type === 'keydown') {
|
|
38
|
+
setForcedState('focus');
|
|
39
|
+
}
|
|
42
40
|
clearSelectedValues();
|
|
43
|
-
|
|
44
|
-
}, "data-qa": "magritte-select-clear-action", "data-magritte-option-first-active-element": "true", children: jsx(Cell, { left: jsx(CrossOutlinedSize24, { initial: "secondary" }), children: jsx(CellText, { children: trls?.clearButton }) }) })), options?.map((option) => {
|
|
41
|
+
}, "data-qa": "magritte-select-clear-action", children: jsx(Cell, { left: jsx(CrossOutlinedSize24, { initial: "secondary" }), children: jsx(CellText, { children: trls?.clearButton }) }) })), options?.map((option) => {
|
|
45
42
|
const checked = getChecked(option.value, values, multiple);
|
|
46
43
|
const props = {
|
|
47
44
|
...option,
|
|
@@ -49,18 +46,22 @@ const SelectForDesktopDevice = ({ name, options, disabled, multiple = false, onC
|
|
|
49
46
|
onChange: (value, needToPut) => {
|
|
50
47
|
onChange(value, needToPut);
|
|
51
48
|
setCommitChanges(performance.now());
|
|
52
|
-
if (
|
|
53
|
-
|
|
54
|
-
|
|
49
|
+
if (!multiple && closedByKeyboardRef.current) {
|
|
50
|
+
setForcedState('focus');
|
|
51
|
+
return;
|
|
55
52
|
}
|
|
56
|
-
|
|
57
|
-
|
|
53
|
+
if (multiple && searchValue) {
|
|
54
|
+
setForcedState('focusAndSelect');
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
closedByKeyboardRef.current = false;
|
|
58
|
+
setForcedState(null);
|
|
58
59
|
},
|
|
59
60
|
checked,
|
|
60
61
|
multiple,
|
|
61
62
|
isLimitExceeded,
|
|
62
63
|
};
|
|
63
|
-
return (createElement(SelectOption, { ...props,
|
|
64
|
+
return (createElement(SelectOption, { ...props, key: option.value, onOptionsListClose: onOptionsListClose, render: renderItemForDesktop }));
|
|
64
65
|
})] }) }) })] }));
|
|
65
66
|
};
|
|
66
67
|
SelectForDesktopDevice.displayName = 'SelectForDesktopDevice';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectForDesktopDevice.js","sources":["../src/SelectForDesktopDevice.tsx"],"sourcesContent":["import { type ReactElement, useRef, RefObject } from 'react';\n\nimport { keyboardKeys, keyboardMatch } from '@hh.ru/magritte-common-keyboard';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { Card } from '@hh.ru/magritte-ui-card';\nimport { Cell, CellText } from '@hh.ru/magritte-ui-cell';\nimport { Drop } from '@hh.ru/magritte-ui-drop';\nimport { CrossOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';\nimport { SelectActivator } from '@hh.ru/magritte-ui-select/SelectActivator';\nimport { SelectOption } from '@hh.ru/magritte-ui-select/SelectOption';\nimport { getChecked } from '@hh.ru/magritte-ui-select/getChecked';\nimport type { InternalSelectProps, RenderItem } from '@hh.ru/magritte-ui-select/types';\n\nimport styles from './styles.less';\n\nexport const SelectForDesktopDevice = <T, MultipleType extends boolean>({\n name,\n options,\n disabled,\n multiple = false,\n onChange,\n onActivatorClick,\n maxHeight,\n values,\n visible,\n onOptionsListClose,\n selectedOptions,\n renderItemForDesktop,\n clearSelectedValues,\n setCommitChanges,\n searchValue,\n showClearButton,\n trls,\n optionsListRef,\n size,\n elevatePlaceholder,\n widthEqualToActivator,\n maxWidth,\n dropHost,\n isLimitExceeded,\n activatorRef,\n onDropOpen,\n onDropClose,\n ...activatorProps\n}: InternalSelectProps<T, MultipleType> & {\n renderItemForDesktop?: RenderItem<T>;\n dropHost?: RefObject<HTMLElement>;\n}): ReactElement => {\n const wrapperRef = useRef<HTMLDivElement>(null);\n const dropRef = useRef<HTMLDivElement>(null);\n const optionsMultiRef = useMultipleRefs(optionsListRef, dropRef);\n const searchRef = useRef<HTMLInputElement>(null);\n const rawOptions = options.filter(({ type }) => type !== 'delimiter');\n const firstOption = rawOptions?.[0];\n const lastOption = rawOptions?.[rawOptions.length - 1];\n const sizeProp =\n size === 'large' ? ({ size: 'large', elevatePlaceholder } as const) : ({ size: 'medium' } as const);\n\n return (\n <div ref={wrapperRef} tabIndex={-1}>\n <SelectActivator\n {...sizeProp}\n {...activatorProps}\n disabled={disabled}\n selectedOptions={selectedOptions}\n onClick={onActivatorClick}\n searchValue={searchValue}\n ref={activatorRef}\n multiple={multiple}\n visible={visible}\n dropRef={dropRef}\n searchRef={searchRef}\n />\n <Drop\n ref={optionsMultiRef}\n maxWidth={maxWidth}\n visible={options.length > 0 && visible}\n direction=\"bottom\"\n alignment=\"left\"\n activatorRef={activatorRef}\n role={activatorProps.searchable ? 'status' : 'listbox'}\n space={400}\n widthEqualToActivator={widthEqualToActivator}\n host={dropHost}\n arrowNavigation\n forcePosition\n closeByClickOutside={false}\n onClose={() => {\n wrapperRef.current?.focus();\n onOptionsListClose();\n }}\n onKeyDown={({ nativeEvent }: { nativeEvent: KeyboardEvent }) => {\n const activeElement = document.activeElement as HTMLElement;\n const searchInput = searchRef.current;\n\n if (\n searchInput !== null &&\n keyboardMatch(nativeEvent, keyboardKeys.ArrowUp) &&\n activeElement?.dataset.magritteOptionFirstActiveElement\n ) {\n searchInput.focus();\n }\n }}\n onAfterExit={onDropClose}\n onAppear={onDropOpen}\n >\n <div style={{ maxHeight: `${maxHeight}px` }}>\n <div data-qa=\"magritte-select-option-list\" className={styles.selectOptions}>\n {showClearButton && (\n <Card\n actionCard\n showBorder\n borderRadius={12}\n padding={16}\n stretched\n hoverStyle=\"neutral\"\n onClick={() => {\n clearSelectedValues();\n wrapperRef.current?.focus();\n }}\n data-qa=\"magritte-select-clear-action\"\n data-magritte-option-first-active-element=\"true\"\n >\n <Cell left={<CrossOutlinedSize24 initial=\"secondary\" />}>\n <CellText>{trls?.clearButton}</CellText>\n </Cell>\n </Card>\n )}\n {options?.map((option) => {\n const checked = getChecked(option.value, values, multiple);\n const props = {\n ...option,\n name,\n onChange: (value: string, needToPut: boolean) => {\n onChange(value, needToPut);\n setCommitChanges(performance.now());\n if (searchRef.current && searchValue) {\n searchRef.current?.focus();\n searchRef.current?.select();\n }\n // return focus after select item\n !multiple && wrapperRef.current?.focus();\n },\n checked,\n multiple,\n isLimitExceeded,\n };\n return (\n <SelectOption\n {...props}\n isFirstActiveElement={!showClearButton && firstOption?.value === option.value}\n isLastActiveElement={lastOption?.value === option.value}\n key={option.value}\n onOptionsListClose={onOptionsListClose}\n render={renderItemForDesktop}\n />\n );\n })}\n </div>\n </div>\n </Drop>\n </div>\n );\n};\n\nSelectForDesktopDevice.displayName = 'SelectForDesktopDevice';\n"],"names":["_jsxs","_jsx","_createElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SelectForDesktopDevice.js","sources":["../src/SelectForDesktopDevice.tsx"],"sourcesContent":["import { KeyboardEvent, ReactElement, RefObject, useRef, useState } from 'react';\n\nimport { keyboardKeys, keyboardMatches } from '@hh.ru/magritte-common-keyboard';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { Card } from '@hh.ru/magritte-ui-card';\nimport { Cell, CellText } from '@hh.ru/magritte-ui-cell';\nimport { Drop } from '@hh.ru/magritte-ui-drop';\nimport { CrossOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';\nimport { SelectActivator } from '@hh.ru/magritte-ui-select/SelectActivator';\nimport { SelectOption } from '@hh.ru/magritte-ui-select/SelectOption';\nimport { getChecked } from '@hh.ru/magritte-ui-select/getChecked';\nimport type { InternalSelectProps, RenderItem } from '@hh.ru/magritte-ui-select/types';\n\nimport styles from './styles.less';\n\nexport const SelectForDesktopDevice = <T, MultipleType extends boolean>({\n name,\n options,\n disabled,\n multiple = false,\n onChange,\n toggleOptions,\n maxHeight,\n values,\n visible,\n onOptionsListClose,\n selectedOptions,\n renderItemForDesktop,\n clearSelectedValues,\n setCommitChanges,\n searchValue,\n showClearButton,\n trls,\n optionsListRef,\n size,\n elevatePlaceholder,\n widthEqualToActivator,\n maxWidth,\n dropHost,\n isLimitExceeded,\n activatorRef,\n onDropOpen,\n onDropClose,\n ...activatorProps\n}: InternalSelectProps<T, MultipleType> & {\n renderItemForDesktop?: RenderItem<T>;\n dropHost?: RefObject<HTMLElement>;\n}): ReactElement => {\n const closedByKeyboardRef = useRef(false);\n const dropRef = useRef<HTMLDivElement>(null);\n const optionsListRefCallback = useMultipleRefs(optionsListRef, dropRef);\n const sizeProp =\n size === 'large' ? ({ size: 'large', elevatePlaceholder } as const) : ({ size: 'medium' } as const);\n // стейт фокуса активатора, в которой его нужно привести после взаимодействия пользователя со списком опций\n // его нужно отличать от обычного фокуса, инициированным пользователем, поэтому не используем activatorRef.focus()\n const [forcedState, setForcedState] = useState<'focus' | 'focusAndSelect' | null>(null);\n\n return (\n <div tabIndex={-1}>\n <SelectActivator\n {...sizeProp}\n {...activatorProps}\n disabled={disabled}\n selectedOptions={selectedOptions}\n toggleOptions={toggleOptions}\n searchValue={searchValue}\n ref={activatorRef}\n multiple={multiple}\n visible={visible}\n dropRef={dropRef}\n forcedState={forcedState}\n setForcedState={setForcedState}\n />\n <Drop\n autoFocusWhenOpened={false}\n ref={optionsListRefCallback}\n maxWidth={maxWidth}\n visible={options.length > 0 && visible}\n direction=\"bottom\"\n alignment=\"left\"\n activatorRef={activatorRef}\n role={activatorProps.searchable ? 'status' : 'listbox'}\n space={400}\n widthEqualToActivator={widthEqualToActivator}\n host={dropHost}\n keyboardNavigationMode=\"list\"\n forcePosition\n closeByClickOutside={false}\n onClose={() => {\n setForcedState('focus');\n onOptionsListClose();\n }}\n onKeyDownCapture={(event: KeyboardEvent) => {\n if (keyboardMatches(event.nativeEvent, [keyboardKeys.Enter, keyboardKeys.Space])) {\n closedByKeyboardRef.current = true;\n }\n }}\n onAfterExit={onDropClose}\n onAppear={onDropOpen}\n >\n <div style={{ maxHeight: `${maxHeight}px` }}>\n <div data-qa=\"magritte-select-option-list\" className={styles.selectOptions}>\n {showClearButton && (\n <Card\n actionCard\n showBorder\n borderRadius={12}\n padding={16}\n stretched\n hoverStyle=\"neutral\"\n onClick={(event) => {\n if (event.type === 'keydown') {\n setForcedState('focus');\n }\n clearSelectedValues();\n }}\n data-qa=\"magritte-select-clear-action\"\n >\n <Cell left={<CrossOutlinedSize24 initial=\"secondary\" />}>\n <CellText>{trls?.clearButton}</CellText>\n </Cell>\n </Card>\n )}\n {options?.map((option) => {\n const checked = getChecked(option.value, values, multiple);\n const props = {\n ...option,\n name,\n onChange: (value: string, needToPut: boolean) => {\n onChange(value, needToPut);\n setCommitChanges(performance.now());\n\n if (!multiple && closedByKeyboardRef.current) {\n setForcedState('focus');\n return;\n }\n\n if (multiple && searchValue) {\n setForcedState('focusAndSelect');\n return;\n }\n\n closedByKeyboardRef.current = false;\n setForcedState(null);\n },\n checked,\n multiple,\n isLimitExceeded,\n };\n return (\n <SelectOption\n {...props}\n key={option.value}\n onOptionsListClose={onOptionsListClose}\n render={renderItemForDesktop}\n />\n );\n })}\n </div>\n </div>\n </Drop>\n </div>\n );\n};\n\nSelectForDesktopDevice.displayName = 'SelectForDesktopDevice';\n"],"names":["_jsxs","_jsx","_createElement"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { type ReactElement, RefObject } from 'react';
|
|
2
2
|
import type { InternalSelectProps, RenderItem, OnChangeAction } from './types';
|
|
3
3
|
export declare const SelectForMobileDevice: {
|
|
4
|
-
<T, MultipleType extends boolean>({ name, options, disabled, multiple, onChange,
|
|
5
|
-
|
|
4
|
+
<T, MultipleType extends boolean>({ name, options, disabled, multiple, onChange, toggleOptions, renderItem, renderActivator, values, visible, onOptionsListClose, selectedOptions, searchable, clearSelectedValues, setCommitChanges, trls, bottomSheetHeight, optionsListRef, activatorRef, searchValue, showClearButton, showCloseButtonInNavigationBar, setSearchValue, size, elevatePlaceholder, setLastValues, placeholder, applyChangesButton: _applyChangesButton, clearButton: _clearButton, isLimitExceeded, onBottomSheetClose, onBottomSheetOpen, ...activatorProps }: Omit<import("./types").SelectProps<boolean, boolean, T>, "onChange" | "value" | "renderItemForDesktop" | "renderItem"> & {
|
|
5
|
+
toggleOptions: (visible: boolean) => void;
|
|
6
6
|
selectedOptions: import("@hh.ru/magritte-ui-select/types").SelectOption<T>[];
|
|
7
7
|
values: [MultipleType] extends [true] ? string[] : string;
|
|
8
8
|
visible: boolean;
|
package/SelectForMobileDevice.js
CHANGED
|
@@ -5,11 +5,12 @@ import { BottomSheet, BottomSheetFooter } from '@hh.ru/magritte-ui-bottom-sheet'
|
|
|
5
5
|
import { CrossOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';
|
|
6
6
|
import { SearchInput } from '@hh.ru/magritte-ui-input';
|
|
7
7
|
import { NavigationBar } from '@hh.ru/magritte-ui-navigation-bar';
|
|
8
|
-
import { s as styles, r as renderSelectActivator } from './SelectActivator-
|
|
8
|
+
import { s as styles, r as renderSelectActivator } from './SelectActivator-125a6b32.js';
|
|
9
9
|
import { SelectOption } from './SelectOption.js';
|
|
10
10
|
import { getChecked } from './getChecked.js';
|
|
11
11
|
import 'classnames';
|
|
12
12
|
import '@hh.ru/magritte-common-keyboard';
|
|
13
|
+
import '@hh.ru/magritte-common-use-multiple-refs';
|
|
13
14
|
import '@hh.ru/magritte-ui-counter';
|
|
14
15
|
import '@hh.ru/magritte-ui-form-helper';
|
|
15
16
|
import '@hh.ru/magritte-ui-input/BaseInput';
|
|
@@ -19,7 +20,7 @@ import '@hh.ru/magritte-ui-cell';
|
|
|
19
20
|
import '@hh.ru/magritte-ui-checkable-card/CheckableCardElement';
|
|
20
21
|
import '@hh.ru/magritte-ui-checkbox-radio';
|
|
21
22
|
|
|
22
|
-
const SelectForMobileDevice = ({ name, options, disabled, multiple = false, onChange,
|
|
23
|
+
const SelectForMobileDevice = ({ name, options, disabled, multiple = false, onChange, toggleOptions, renderItem, renderActivator = renderSelectActivator, values, visible, onOptionsListClose, selectedOptions, searchable, clearSelectedValues, setCommitChanges, trls, bottomSheetHeight, optionsListRef, activatorRef, searchValue, showClearButton, showCloseButtonInNavigationBar, setSearchValue, size, elevatePlaceholder, setLastValues, placeholder, applyChangesButton: _applyChangesButton, clearButton: _clearButton, isLimitExceeded, onBottomSheetClose, onBottomSheetOpen, ...activatorProps }) => {
|
|
23
24
|
const sizeProp = size === 'large' ? { size: 'large', elevatePlaceholder } : { size: 'medium' };
|
|
24
25
|
const clearButton = showClearButton &&
|
|
25
26
|
_clearButton &&
|
|
@@ -46,7 +47,7 @@ const SelectForMobileDevice = ({ name, options, disabled, multiple = false, onCh
|
|
|
46
47
|
return (jsxs("div", { ref: activatorRef, children: [renderActivator({
|
|
47
48
|
...sizeProp,
|
|
48
49
|
...activatorProps,
|
|
49
|
-
|
|
50
|
+
toggleOptions,
|
|
50
51
|
selectedOptions,
|
|
51
52
|
multiple,
|
|
52
53
|
searchValue,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectForMobileDevice.js","sources":["../src/SelectForMobileDevice.tsx"],"sourcesContent":["import { type ReactElement, useCallback, cloneElement, RefObject } from 'react';\n\nimport { BottomSheet, BottomSheetFooter } from '@hh.ru/magritte-ui-bottom-sheet';\nimport { CrossOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';\nimport { SearchInput } from '@hh.ru/magritte-ui-input';\nimport { NavigationBar } from '@hh.ru/magritte-ui-navigation-bar';\nimport { renderSelectActivator } from '@hh.ru/magritte-ui-select/SelectActivator';\nimport { SelectOption } from '@hh.ru/magritte-ui-select/SelectOption';\nimport { getChecked } from '@hh.ru/magritte-ui-select/getChecked';\nimport type { InternalSelectProps, RenderItem, OnChangeAction } from '@hh.ru/magritte-ui-select/types';\n\nimport styles from './styles.less';\n\nexport const SelectForMobileDevice = <T, MultipleType extends boolean>({\n name,\n options,\n disabled,\n multiple = false,\n onChange,\n
|
|
1
|
+
{"version":3,"file":"SelectForMobileDevice.js","sources":["../src/SelectForMobileDevice.tsx"],"sourcesContent":["import { type ReactElement, useCallback, cloneElement, RefObject } from 'react';\n\nimport { BottomSheet, BottomSheetFooter } from '@hh.ru/magritte-ui-bottom-sheet';\nimport { CrossOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';\nimport { SearchInput } from '@hh.ru/magritte-ui-input';\nimport { NavigationBar } from '@hh.ru/magritte-ui-navigation-bar';\nimport { renderSelectActivator } from '@hh.ru/magritte-ui-select/SelectActivator';\nimport { SelectOption } from '@hh.ru/magritte-ui-select/SelectOption';\nimport { getChecked } from '@hh.ru/magritte-ui-select/getChecked';\nimport type { InternalSelectProps, RenderItem, OnChangeAction } from '@hh.ru/magritte-ui-select/types';\n\nimport styles from './styles.less';\n\nexport const SelectForMobileDevice = <T, MultipleType extends boolean>({\n name,\n options,\n disabled,\n multiple = false,\n onChange,\n toggleOptions,\n renderItem,\n renderActivator = renderSelectActivator,\n values,\n visible,\n onOptionsListClose,\n selectedOptions,\n searchable,\n clearSelectedValues,\n setCommitChanges,\n trls,\n bottomSheetHeight,\n optionsListRef,\n activatorRef,\n searchValue,\n showClearButton,\n showCloseButtonInNavigationBar,\n setSearchValue,\n size,\n elevatePlaceholder,\n setLastValues,\n placeholder,\n applyChangesButton: _applyChangesButton,\n clearButton: _clearButton,\n isLimitExceeded,\n onBottomSheetClose,\n onBottomSheetOpen,\n ...activatorProps\n}: InternalSelectProps<T, MultipleType> & {\n showCloseButtonInNavigationBar: boolean;\n renderItem?: RenderItem<T>;\n}): ReactElement => {\n const sizeProp =\n size === 'large' ? ({ size: 'large', elevatePlaceholder } as const) : ({ size: 'medium' } as const);\n\n const clearButton =\n showClearButton &&\n _clearButton &&\n cloneElement(_clearButton, {\n 'data-qa': 'magritte-select-clear-action-on-xs',\n onClick: clearSelectedValues,\n });\n\n const applyButton =\n multiple &&\n _applyChangesButton &&\n cloneElement(_applyChangesButton, {\n 'data-qa': 'magritte-select-apply-on-xs',\n onClick: () => {\n setCommitChanges(performance.now());\n onOptionsListClose();\n },\n });\n\n const handleChange: OnChangeAction = useCallback(\n (...args) => {\n if (!multiple) {\n setCommitChanges(performance.now());\n onOptionsListClose();\n }\n onChange(...args);\n },\n [onChange, setCommitChanges, onOptionsListClose, multiple]\n );\n\n return (\n <div ref={activatorRef as RefObject<HTMLDivElement>}>\n {renderActivator({\n ...sizeProp,\n ...activatorProps,\n toggleOptions,\n selectedOptions,\n multiple,\n searchValue,\n setSearchValue,\n visible,\n disabled,\n placeholder,\n })}\n <BottomSheet\n allowScrollWhileFocused\n onAppear={onBottomSheetOpen}\n onAfterExit={onBottomSheetClose}\n keyboardOverlaysContent={false}\n visible={visible}\n onClose={() => {\n onOptionsListClose();\n setLastValues();\n }}\n ref={optionsListRef as React.RefObject<HTMLDivElement>}\n height={searchable ? 'full-screen' : bottomSheetHeight}\n header={\n <NavigationBar\n title={placeholder}\n right={\n showCloseButtonInNavigationBar\n ? [\n {\n key: 'close',\n icon: CrossOutlinedSize24,\n onClick: onOptionsListClose,\n 'data-qa': 'bottom-sheet-navigation-close',\n },\n ]\n : undefined\n }\n options={\n searchable && (\n <SearchInput\n clearable\n value={searchValue}\n onChange={setSearchValue}\n data-qa=\"bottom-sheet-navigation-input\"\n autoComplete=\"off\"\n />\n )\n }\n />\n }\n footer={\n multiple || showClearButton ? (\n <BottomSheetFooter>\n {clearButton}\n {applyButton}\n </BottomSheetFooter>\n ) : null\n }\n >\n <div\n data-qa=\"magritte-select-option-list-on-xs\"\n className={`${styles.selectOptions} ${styles['select-options-xs']}`}\n >\n {options?.map((option) => {\n const checked = getChecked(option.value, values, multiple);\n const props = {\n ...option,\n name,\n onChange: handleChange,\n checked,\n multiple,\n isXS: true,\n isLimitExceeded,\n };\n return (\n <SelectOption\n key={option.value}\n {...props}\n onOptionsListClose={onOptionsListClose}\n render={renderItem}\n />\n );\n })}\n </div>\n </BottomSheet>\n </div>\n );\n};\n\nSelectForMobileDevice.displayName = 'SelectForMobileDevice';\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
|
package/SelectOption.d.ts
CHANGED
|
@@ -4,5 +4,5 @@ declare const SelectOptionBase: {
|
|
|
4
4
|
<T>({ label, type, input, isXS }: SelectOptionProps<T>): ReactElement;
|
|
5
5
|
displayName: string;
|
|
6
6
|
};
|
|
7
|
-
declare const SelectOption: <T>({ checked, multiple, name, value, disabled, onChange, render, type,
|
|
7
|
+
declare const SelectOption: <T>({ checked, multiple, name, value, disabled, onChange, render, type, isLimitExceeded, onOptionsListClose, ...props }: SelectOptionWrapperProps<T>) => ReactElement;
|
|
8
8
|
export { SelectOptionBase, SelectOption };
|
package/SelectOption.js
CHANGED
|
@@ -18,7 +18,7 @@ const SelectOptionBase = ({ label, type, input, isXS = false }) => {
|
|
|
18
18
|
return (jsx(Cell, { Element: "div", align: "top", ...cellProps, children: jsx(CellText, { maxLines: 1, children: label }) }));
|
|
19
19
|
};
|
|
20
20
|
SelectOptionBase.displayName = 'SelectOptionBase';
|
|
21
|
-
const SelectOption = ({ checked, multiple, name, value, disabled, onChange, render = SelectOptionBase, type,
|
|
21
|
+
const SelectOption = ({ checked, multiple, name, value, disabled, onChange, render = SelectOptionBase, type, isLimitExceeded, onOptionsListClose, ...props }) => {
|
|
22
22
|
const renderProps = { ...props, checked, multiple, name, value, onChange, render, type, onOptionsListClose };
|
|
23
23
|
const [focusVisible, setFocusVisible] = useState(false);
|
|
24
24
|
const lockFocusVisibleAfterClickRef = useRef(false);
|
|
@@ -30,10 +30,10 @@ const SelectOption = ({ checked, multiple, name, value, disabled, onChange, rend
|
|
|
30
30
|
} })) : (jsx(Radio, { "data-focus-visible-skip": "true", tabIndex: -1, name: name, value: value, checked: checked, onChange: (event) => {
|
|
31
31
|
onChange(value, event.target.checked);
|
|
32
32
|
} }));
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
return (jsx(CheckableCardElement, { Element: "label", padding: 16, borderRadius: 12, flexible: false, checked: checked, "data-magritte-option": value, focusVisible: focusVisible, "data-qa": `magritte-select-option-${value}`, disabled: disabled || (isLimitExceeded && !checked), toneHover: true, onClick: (event) => {
|
|
34
|
+
if (event.target.matches('input') && !multiple) {
|
|
35
|
+
onOptionsListClose();
|
|
36
|
+
}
|
|
37
37
|
}, onMouseDown: () => {
|
|
38
38
|
lockFocusVisibleAfterClickRef.current = true;
|
|
39
39
|
}, onKeyDown: (event) => {
|
package/SelectOption.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectOption.js","sources":["../src/SelectOption.tsx"],"sourcesContent":["import { type ReactElement, useState, useRef } from 'react';\n\nimport { keyboardMatches, keyboardKeys } from '@hh.ru/magritte-common-keyboard';\nimport { Card } from '@hh.ru/magritte-ui-card';\nimport { Cell, CellText } from '@hh.ru/magritte-ui-cell';\nimport { CheckableCardElement } from '@hh.ru/magritte-ui-checkable-card/CheckableCardElement';\nimport { Radio, Checkbox } from '@hh.ru/magritte-ui-checkbox-radio';\nimport type { SelectOptionProps, SelectOptionWrapperProps } from '@hh.ru/magritte-ui-select/types';\nimport { Text } from '@hh.ru/magritte-ui-typography';\n\nconst SelectOptionBase = <T,>({ label, type, input, isXS = false }: SelectOptionProps<T>): ReactElement => {\n if (type === 'delimiter') {\n return (\n <Card paddingTop={8} paddingLeft={16} paddingRight={16}>\n <CellText maxLines={1} style=\"secondary\">\n {label}\n </CellText>\n </Card>\n );\n }\n\n const cellProps = {\n [isXS ? 'right' : 'left']: input,\n };\n\n return (\n <Cell Element=\"div\" align=\"top\" {...cellProps}>\n <CellText maxLines={1}>{label}</CellText>\n </Cell>\n );\n};\n\nSelectOptionBase.displayName = 'SelectOptionBase';\n\nconst SelectOption = <T,>({\n checked,\n multiple,\n name,\n value,\n disabled,\n onChange,\n render = SelectOptionBase,\n type,\n
|
|
1
|
+
{"version":3,"file":"SelectOption.js","sources":["../src/SelectOption.tsx"],"sourcesContent":["import { type ReactElement, useState, useRef } from 'react';\n\nimport { keyboardMatches, keyboardKeys } from '@hh.ru/magritte-common-keyboard';\nimport { Card } from '@hh.ru/magritte-ui-card';\nimport { Cell, CellText } from '@hh.ru/magritte-ui-cell';\nimport { CheckableCardElement } from '@hh.ru/magritte-ui-checkable-card/CheckableCardElement';\nimport { Radio, Checkbox } from '@hh.ru/magritte-ui-checkbox-radio';\nimport type { SelectOptionProps, SelectOptionWrapperProps } from '@hh.ru/magritte-ui-select/types';\nimport { Text } from '@hh.ru/magritte-ui-typography';\n\nconst SelectOptionBase = <T,>({ label, type, input, isXS = false }: SelectOptionProps<T>): ReactElement => {\n if (type === 'delimiter') {\n return (\n <Card paddingTop={8} paddingLeft={16} paddingRight={16}>\n <CellText maxLines={1} style=\"secondary\">\n {label}\n </CellText>\n </Card>\n );\n }\n\n const cellProps = {\n [isXS ? 'right' : 'left']: input,\n };\n\n return (\n <Cell Element=\"div\" align=\"top\" {...cellProps}>\n <CellText maxLines={1}>{label}</CellText>\n </Cell>\n );\n};\n\nSelectOptionBase.displayName = 'SelectOptionBase';\n\nconst SelectOption = <T,>({\n checked,\n multiple,\n name,\n value,\n disabled,\n onChange,\n render = SelectOptionBase,\n type,\n isLimitExceeded,\n onOptionsListClose,\n ...props\n}: SelectOptionWrapperProps<T>): ReactElement => {\n const renderProps = { ...props, checked, multiple, name, value, onChange, render, type, onOptionsListClose };\n const [focusVisible, setFocusVisible] = useState(false);\n const lockFocusVisibleAfterClickRef = useRef(false);\n\n if (type === 'delimiter') {\n return <Text typography=\"label-3-regular\">{render(renderProps)}</Text>;\n }\n const input = multiple ? (\n <Checkbox\n data-focus-visible-skip=\"true\"\n tabIndex={-1}\n name={name}\n value={value}\n checked={checked}\n onChange={(event) => {\n onChange(value, event.target.checked);\n }}\n />\n ) : (\n <Radio\n data-focus-visible-skip=\"true\"\n tabIndex={-1}\n name={name}\n value={value}\n checked={checked}\n onChange={(event) => {\n onChange(value, event.target.checked);\n }}\n />\n );\n\n return (\n <CheckableCardElement\n Element=\"label\"\n padding={16}\n borderRadius={12}\n flexible={false}\n checked={checked}\n data-magritte-option={value}\n focusVisible={focusVisible}\n data-qa={`magritte-select-option-${value}`}\n disabled={disabled || (isLimitExceeded && !checked)}\n toneHover\n onClick={(event) => {\n if ((event.target as HTMLElement).matches('input') && !multiple) {\n onOptionsListClose();\n }\n }}\n onMouseDown={() => {\n lockFocusVisibleAfterClickRef.current = true;\n }}\n onKeyDown={(event) => {\n if (keyboardMatches(event.nativeEvent, [keyboardKeys.Enter, keyboardKeys.Space])) {\n onChange(value, !checked);\n /* Нужно чтобы отменять автоскролл */\n event.preventDefault();\n setFocusVisible(true);\n }\n }}\n onFocus={(event) => {\n if (!event.target.dataset.focusVisibleSkip) {\n return;\n }\n\n if (lockFocusVisibleAfterClickRef.current) {\n lockFocusVisibleAfterClickRef.current = false;\n return;\n }\n\n setFocusVisible(true);\n }}\n onBlur={() => {\n if (focusVisible) {\n setFocusVisible(false);\n }\n }}\n >\n {render({ ...renderProps, input })}\n </CheckableCardElement>\n );\n};\n\nexport { SelectOptionBase, SelectOption };\n"],"names":["_jsx"],"mappings":";;;;;;;;;AAUA,MAAM,gBAAgB,GAAG,CAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,KAAK,EAAwB,KAAkB;IACtG,IAAI,IAAI,KAAK,WAAW,EAAE;AACtB,QAAA,QACIA,GAAA,CAAC,IAAI,EAAA,EAAC,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAClD,QAAA,EAAAA,GAAA,CAAC,QAAQ,EAAA,EAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAC,WAAW,EACnC,QAAA,EAAA,KAAK,EACC,CAAA,EAAA,CACR,EACT;AACL,KAAA;AAED,IAAA,MAAM,SAAS,GAAG;QACd,CAAC,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK;KACnC,CAAC;IAEF,QACIA,GAAC,CAAA,IAAI,EAAC,EAAA,OAAO,EAAC,KAAK,EAAC,KAAK,EAAC,KAAK,EAAA,GAAK,SAAS,EACzC,QAAA,EAAAA,GAAA,CAAC,QAAQ,EAAA,EAAC,QAAQ,EAAE,CAAC,EAAA,QAAA,EAAG,KAAK,EAAA,CAAY,EACtC,CAAA,EACT;AACN,EAAE;AAEF,gBAAgB,CAAC,WAAW,GAAG,kBAAkB,CAAC;AAElD,MAAM,YAAY,GAAG,CAAK,EACtB,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,MAAM,GAAG,gBAAgB,EACzB,IAAI,EACJ,eAAe,EACf,kBAAkB,EAClB,GAAG,KAAK,EACkB,KAAkB;IAC5C,MAAM,WAAW,GAAG,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;IAC7G,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxD,IAAA,MAAM,6BAA6B,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEpD,IAAI,IAAI,KAAK,WAAW,EAAE;AACtB,QAAA,OAAOA,GAAC,CAAA,IAAI,EAAC,EAAA,UAAU,EAAC,iBAAiB,EAAE,QAAA,EAAA,MAAM,CAAC,WAAW,CAAC,EAAA,CAAQ,CAAC;AAC1E,KAAA;AACD,IAAA,MAAM,KAAK,GAAG,QAAQ,IAClBA,GAAC,CAAA,QAAQ,+BACmB,MAAM,EAC9B,QAAQ,EAAE,CAAC,CAAC,EACZ,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,KAAK,KAAI;YAChB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC1C,SAAC,EACH,CAAA,KAEFA,GAAA,CAAC,KAAK,EAAA,EAAA,yBAAA,EACsB,MAAM,EAC9B,QAAQ,EAAE,CAAC,CAAC,EACZ,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,KAAK,KAAI;YAChB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;SACzC,EAAA,CACH,CACL,CAAC;IAEF,QACIA,GAAC,CAAA,oBAAoB,EACjB,EAAA,OAAO,EAAC,OAAO,EACf,OAAO,EAAE,EAAE,EACX,YAAY,EAAE,EAAE,EAChB,QAAQ,EAAE,KAAK,EACf,OAAO,EAAE,OAAO,EAAA,sBAAA,EACM,KAAK,EAC3B,YAAY,EAAE,YAAY,EACjB,SAAA,EAAA,CAAA,uBAAA,EAA0B,KAAK,CAAA,CAAE,EAC1C,QAAQ,EAAE,QAAQ,KAAK,eAAe,IAAI,CAAC,OAAO,CAAC,EACnD,SAAS,EAAA,IAAA,EACT,OAAO,EAAE,CAAC,KAAK,KAAI;YACf,IAAK,KAAK,CAAC,MAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC7D,gBAAA,kBAAkB,EAAE,CAAC;AACxB,aAAA;AACL,SAAC,EACD,WAAW,EAAE,MAAK;AACd,YAAA,6BAA6B,CAAC,OAAO,GAAG,IAAI,CAAC;AACjD,SAAC,EACD,SAAS,EAAE,CAAC,KAAK,KAAI;AACjB,YAAA,IAAI,eAAe,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE;AAC9E,gBAAA,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC;;gBAE1B,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,eAAe,CAAC,IAAI,CAAC,CAAC;AACzB,aAAA;AACL,SAAC,EACD,OAAO,EAAE,CAAC,KAAK,KAAI;YACf,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE;gBACxC,OAAO;AACV,aAAA;YAED,IAAI,6BAA6B,CAAC,OAAO,EAAE;AACvC,gBAAA,6BAA6B,CAAC,OAAO,GAAG,KAAK,CAAC;gBAC9C,OAAO;AACV,aAAA;YAED,eAAe,CAAC,IAAI,CAAC,CAAC;AAC1B,SAAC,EACD,MAAM,EAAE,MAAK;AACT,YAAA,IAAI,YAAY,EAAE;gBACd,eAAe,CAAC,KAAK,CAAC,CAAC;AAC1B,aAAA;AACL,SAAC,EAEA,QAAA,EAAA,MAAM,CAAC,EAAE,GAAG,WAAW,EAAE,KAAK,EAAE,CAAC,EACf,CAAA,EACzB;AACN;;;;"}
|
package/UncontrolledSelect.js
CHANGED
|
@@ -11,7 +11,7 @@ import '@hh.ru/magritte-ui-card';
|
|
|
11
11
|
import '@hh.ru/magritte-ui-cell';
|
|
12
12
|
import '@hh.ru/magritte-ui-drop';
|
|
13
13
|
import '@hh.ru/magritte-ui-icon/icon';
|
|
14
|
-
import './SelectActivator-
|
|
14
|
+
import './SelectActivator-125a6b32.js';
|
|
15
15
|
import 'classnames';
|
|
16
16
|
import '@hh.ru/magritte-ui-counter';
|
|
17
17
|
import '@hh.ru/magritte-ui-form-helper';
|
package/index.css
CHANGED
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
--magritte-color-component-input-icon-state-content-disabled-v18-1-2:#474747;
|
|
77
77
|
--magritte-color-component-input-icon-content-v18-1-2:#ABABAB;
|
|
78
78
|
}
|
|
79
|
-
.magritte-select-activator___9XXwA_5-
|
|
79
|
+
.magritte-select-activator___9XXwA_5-3-0{
|
|
80
80
|
display:flex;
|
|
81
81
|
flex:1 0 0;
|
|
82
82
|
align-items:center;
|
|
@@ -91,152 +91,156 @@
|
|
|
91
91
|
user-select:none;
|
|
92
92
|
--magritte-ui-icon-color-override:var(--magritte-color-component-input-icon-content-v18-1-2);
|
|
93
93
|
}
|
|
94
|
-
.magritte-select-activator___9XXwA_5-
|
|
94
|
+
.magritte-select-activator___9XXwA_5-3-0:focus{
|
|
95
95
|
background-color:var(--magritte-color-component-input-background-state-field-focused-v18-1-2);
|
|
96
96
|
box-shadow:inset 0 0 0 2px var(--magritte-color-component-input-stroke-state-field-focused-v18-1-2);
|
|
97
97
|
}
|
|
98
|
-
.magritte-select-activator___9XXwA_5-
|
|
98
|
+
.magritte-select-activator___9XXwA_5-3-0:focus .magritte-select-activator-label___Mc49R_5-3-0{
|
|
99
99
|
--magritte-ui-text-color-override:var(--magritte-color-component-input-text-state-label-focused-v18-1-2);
|
|
100
100
|
}
|
|
101
|
-
.magritte-select-activator___9XXwA_5-
|
|
101
|
+
.magritte-select-activator___9XXwA_5-3-0:focus .magritte-select-activator-placeholder___7ODSn_5-3-0{
|
|
102
102
|
--magritte-ui-text-color-override:var(--magritte-color-component-input-text-state-placeholder-focused-v18-1-2);
|
|
103
103
|
}
|
|
104
|
-
.magritte-select-activator___9XXwA_5-
|
|
104
|
+
.magritte-select-activator___9XXwA_5-3-0:focus .magritte-select-activator-value___wDbVR_5-3-0{
|
|
105
105
|
--magritte-ui-text-color-override:var(--magritte-color-component-input-text-state-content-focused-v18-1-2);
|
|
106
106
|
}
|
|
107
|
-
.magritte-select-activator___9XXwA_5-
|
|
107
|
+
.magritte-select-activator___9XXwA_5-3-0:focus .magritte-select-activator-chevron___DHIUH_5-3-0{
|
|
108
108
|
--magritte-ui-icon-color-override:var(--magritte-color-component-input-icon-state-content-focused-v18-1-2);
|
|
109
109
|
}
|
|
110
|
-
.magritte-select-activator___9XXwA_5-
|
|
110
|
+
.magritte-select-activator___9XXwA_5-3-0.focus-visible{
|
|
111
111
|
outline:var(--magritte-color-component-input-stroke-state-accent-focused-accessible-v18-1-2) solid 4px;
|
|
112
112
|
}
|
|
113
113
|
@media (min-width: 1020px){
|
|
114
|
-
body.magritte-old-layout .magritte-select-activator___9XXwA_5-
|
|
114
|
+
body.magritte-old-layout .magritte-select-activator___9XXwA_5-3-0:hover:not(.magritte-select-activator-disabled___mYKi2_5-3-0){
|
|
115
|
+
cursor:pointer;
|
|
116
|
+
}
|
|
117
|
+
body.magritte-old-layout .magritte-select-activator___9XXwA_5-3-0:hover:not(.magritte-select-activator-disabled___mYKi2_5-3-0):not(:focus){
|
|
115
118
|
background-color:var(--magritte-color-component-input-background-state-field-hovered-v18-1-2);
|
|
116
119
|
box-shadow:inset 0 0 0 1px var(--magritte-color-component-input-stroke-state-field-hovered-v18-1-2);
|
|
117
|
-
cursor:pointer;
|
|
118
120
|
}
|
|
119
|
-
body.magritte-old-layout .magritte-select-activator___9XXwA_5-
|
|
121
|
+
body.magritte-old-layout .magritte-select-activator___9XXwA_5-3-0:hover:not(.magritte-select-activator-disabled___mYKi2_5-3-0):not(:focus) .magritte-select-activator-label___Mc49R_5-3-0{
|
|
120
122
|
--magritte-ui-text-color-override:var(--magritte-color-component-input-text-state-label-hovered-v18-1-2);
|
|
121
123
|
}
|
|
122
|
-
body.magritte-old-layout .magritte-select-activator___9XXwA_5-
|
|
124
|
+
body.magritte-old-layout .magritte-select-activator___9XXwA_5-3-0:hover:not(.magritte-select-activator-disabled___mYKi2_5-3-0):not(:focus) .magritte-select-activator-placeholder___7ODSn_5-3-0{
|
|
123
125
|
--magritte-ui-text-color-override:var(--magritte-color-component-input-text-state-placeholder-hovered-v18-1-2);
|
|
124
126
|
}
|
|
125
|
-
body.magritte-old-layout .magritte-select-activator___9XXwA_5-
|
|
127
|
+
body.magritte-old-layout .magritte-select-activator___9XXwA_5-3-0:hover:not(.magritte-select-activator-disabled___mYKi2_5-3-0):not(:focus) .magritte-select-activator-value___wDbVR_5-3-0{
|
|
126
128
|
--magritte-ui-text-color-override:var(--magritte-color-component-input-text-state-content-hovered-v18-1-2);
|
|
127
129
|
}
|
|
128
|
-
body.magritte-old-layout .magritte-select-activator___9XXwA_5-
|
|
130
|
+
body.magritte-old-layout .magritte-select-activator___9XXwA_5-3-0:hover:not(.magritte-select-activator-disabled___mYKi2_5-3-0):not(:focus) .magritte-select-activator-chevron___DHIUH_5-3-0{
|
|
129
131
|
--magritte-ui-icon-color-override:var(--magritte-color-component-input-icon-state-content-hovered-v18-1-2);
|
|
130
132
|
}
|
|
131
133
|
}
|
|
132
134
|
@media (min-width: 1024px){
|
|
133
|
-
body:not(.magritte-old-layout) .magritte-select-activator___9XXwA_5-
|
|
135
|
+
body:not(.magritte-old-layout) .magritte-select-activator___9XXwA_5-3-0:hover:not(.magritte-select-activator-disabled___mYKi2_5-3-0){
|
|
136
|
+
cursor:pointer;
|
|
137
|
+
}
|
|
138
|
+
body:not(.magritte-old-layout) .magritte-select-activator___9XXwA_5-3-0:hover:not(.magritte-select-activator-disabled___mYKi2_5-3-0):not(:focus){
|
|
134
139
|
background-color:var(--magritte-color-component-input-background-state-field-hovered-v18-1-2);
|
|
135
140
|
box-shadow:inset 0 0 0 1px var(--magritte-color-component-input-stroke-state-field-hovered-v18-1-2);
|
|
136
|
-
cursor:pointer;
|
|
137
141
|
}
|
|
138
|
-
body:not(.magritte-old-layout) .magritte-select-activator___9XXwA_5-
|
|
142
|
+
body:not(.magritte-old-layout) .magritte-select-activator___9XXwA_5-3-0:hover:not(.magritte-select-activator-disabled___mYKi2_5-3-0):not(:focus) .magritte-select-activator-label___Mc49R_5-3-0{
|
|
139
143
|
--magritte-ui-text-color-override:var(--magritte-color-component-input-text-state-label-hovered-v18-1-2);
|
|
140
144
|
}
|
|
141
|
-
body:not(.magritte-old-layout) .magritte-select-activator___9XXwA_5-
|
|
145
|
+
body:not(.magritte-old-layout) .magritte-select-activator___9XXwA_5-3-0:hover:not(.magritte-select-activator-disabled___mYKi2_5-3-0):not(:focus) .magritte-select-activator-placeholder___7ODSn_5-3-0{
|
|
142
146
|
--magritte-ui-text-color-override:var(--magritte-color-component-input-text-state-placeholder-hovered-v18-1-2);
|
|
143
147
|
}
|
|
144
|
-
body:not(.magritte-old-layout) .magritte-select-activator___9XXwA_5-
|
|
148
|
+
body:not(.magritte-old-layout) .magritte-select-activator___9XXwA_5-3-0:hover:not(.magritte-select-activator-disabled___mYKi2_5-3-0):not(:focus) .magritte-select-activator-value___wDbVR_5-3-0{
|
|
145
149
|
--magritte-ui-text-color-override:var(--magritte-color-component-input-text-state-content-hovered-v18-1-2);
|
|
146
150
|
}
|
|
147
|
-
body:not(.magritte-old-layout) .magritte-select-activator___9XXwA_5-
|
|
151
|
+
body:not(.magritte-old-layout) .magritte-select-activator___9XXwA_5-3-0:hover:not(.magritte-select-activator-disabled___mYKi2_5-3-0):not(:focus) .magritte-select-activator-chevron___DHIUH_5-3-0{
|
|
148
152
|
--magritte-ui-icon-color-override:var(--magritte-color-component-input-icon-state-content-hovered-v18-1-2);
|
|
149
153
|
}
|
|
150
154
|
}
|
|
151
|
-
.magritte-select-activator___9XXwA_5-
|
|
155
|
+
.magritte-select-activator___9XXwA_5-3-0.magritte-select-activator-disabled___mYKi2_5-3-0{
|
|
152
156
|
cursor:not-allowed;
|
|
153
157
|
background-color:var(--magritte-color-component-input-background-state-field-disabled-v18-1-2);
|
|
154
158
|
box-shadow:inset 0 0 0 1px var(--magritte-color-component-input-stroke-state-field-disabled-v18-1-2);
|
|
155
159
|
}
|
|
156
|
-
.magritte-select-activator___9XXwA_5-
|
|
160
|
+
.magritte-select-activator___9XXwA_5-3-0.magritte-select-activator-disabled___mYKi2_5-3-0 .magritte-select-activator-item___JsY4v_5-3-0{
|
|
157
161
|
--magritte-counter-background-color:var(--magritte-color-component-input-counter-background-state-content-disabled-v18-1-2);
|
|
158
162
|
--magritte-counter-label-color:var(--magritte-color-component-input-counter-text-state-content-disabled-v18-1-2);
|
|
159
163
|
}
|
|
160
|
-
.magritte-select-activator___9XXwA_5-
|
|
164
|
+
.magritte-select-activator___9XXwA_5-3-0.magritte-select-activator-disabled___mYKi2_5-3-0 .magritte-select-activator-label___Mc49R_5-3-0{
|
|
161
165
|
--magritte-ui-text-color-override:var(--magritte-color-component-input-text-state-label-disabled-v18-1-2);
|
|
162
166
|
}
|
|
163
|
-
.magritte-select-activator___9XXwA_5-
|
|
167
|
+
.magritte-select-activator___9XXwA_5-3-0.magritte-select-activator-disabled___mYKi2_5-3-0 .magritte-select-activator-placeholder___7ODSn_5-3-0{
|
|
164
168
|
--magritte-ui-text-color-override:var(--magritte-color-component-input-text-state-placeholder-disabled-v18-1-2);
|
|
165
169
|
}
|
|
166
|
-
.magritte-select-activator___9XXwA_5-
|
|
170
|
+
.magritte-select-activator___9XXwA_5-3-0.magritte-select-activator-disabled___mYKi2_5-3-0 .magritte-select-activator-value___wDbVR_5-3-0{
|
|
167
171
|
--magritte-ui-text-color-override:var(--magritte-color-component-input-text-state-content-disabled-v18-1-2);
|
|
168
172
|
}
|
|
169
|
-
.magritte-select-activator___9XXwA_5-
|
|
173
|
+
.magritte-select-activator___9XXwA_5-3-0.magritte-select-activator-disabled___mYKi2_5-3-0 .magritte-select-activator-chevron___DHIUH_5-3-0{
|
|
170
174
|
--magritte-ui-icon-color-override:var(--magritte-color-component-input-icon-state-content-disabled-v18-1-2);
|
|
171
175
|
}
|
|
172
|
-
.magritte-select-activator-invalid___IdlRp_5-
|
|
176
|
+
.magritte-select-activator-invalid___IdlRp_5-3-0{
|
|
173
177
|
background-color:var(--magritte-color-component-input-background-state-field-invalid-v18-1-2);
|
|
174
178
|
box-shadow:inset 0 0 0 1px var(--magritte-color-component-input-stroke-state-field-invalid-v18-1-2);
|
|
175
179
|
}
|
|
176
|
-
.magritte-select-activator-invalid___IdlRp_5-
|
|
180
|
+
.magritte-select-activator-invalid___IdlRp_5-3-0 .magritte-select-activator-label___Mc49R_5-3-0{
|
|
177
181
|
--magritte-ui-text-color-override:var(--magritte-color-component-input-text-state-label-invalid-v18-1-2);
|
|
178
182
|
}
|
|
179
|
-
.magritte-select-activator-invalid___IdlRp_5-
|
|
183
|
+
.magritte-select-activator-invalid___IdlRp_5-3-0 .magritte-select-activator-placeholder___7ODSn_5-3-0{
|
|
180
184
|
--magritte-ui-text-color-override:var(--magritte-color-component-input-text-state-placeholder-invalid-v18-1-2);
|
|
181
185
|
}
|
|
182
|
-
.magritte-select-activator-invalid___IdlRp_5-
|
|
186
|
+
.magritte-select-activator-invalid___IdlRp_5-3-0 .magritte-select-activator-value___wDbVR_5-3-0{
|
|
183
187
|
--magritte-ui-text-color-override:var(--magritte-color-component-input-text-state-content-invalid-v18-1-2);
|
|
184
188
|
}
|
|
185
|
-
.magritte-select-activator-invalid___IdlRp_5-
|
|
189
|
+
.magritte-select-activator-invalid___IdlRp_5-3-0 .magritte-select-activator-chevron___DHIUH_5-3-0{
|
|
186
190
|
--magritte-ui-icon-color-override:var(--magritte-color-component-input-icon-state-content-invalid-v18-1-2);
|
|
187
191
|
}
|
|
188
|
-
.magritte-select-activator-size-large___MIXAH_5-
|
|
192
|
+
.magritte-select-activator-size-large___MIXAH_5-3-0{
|
|
189
193
|
padding:16px;
|
|
190
194
|
}
|
|
191
|
-
.magritte-select-activator-with-label___DwcKr_5-
|
|
195
|
+
.magritte-select-activator-with-label___DwcKr_5-3-0{
|
|
192
196
|
padding:8px 16px;
|
|
193
197
|
}
|
|
194
|
-
.magritte-select-activator-label-root___eYIWQ_5-
|
|
198
|
+
.magritte-select-activator-label-root___eYIWQ_5-3-0{
|
|
195
199
|
display:flex;
|
|
196
200
|
flex-direction:column;
|
|
197
201
|
overflow:hidden;
|
|
198
202
|
}
|
|
199
|
-
.magritte-select-activator-item___JsY4v_5-
|
|
203
|
+
.magritte-select-activator-item___JsY4v_5-3-0{
|
|
200
204
|
display:flex;
|
|
201
205
|
width:fit-content;
|
|
202
206
|
gap:12px;
|
|
203
207
|
--magritte-counter-background-color:var(--magritte-color-component-input-counter-background-content-v18-1-2);
|
|
204
208
|
--magritte-counter-label-color:var(--magritte-color-component-input-counter-text-content-v18-1-2);
|
|
205
209
|
}
|
|
206
|
-
.magritte-select-activator-has-counter___k2Kc2_5-
|
|
210
|
+
.magritte-select-activator-has-counter___k2Kc2_5-3-0{
|
|
207
211
|
min-width:96px;
|
|
208
212
|
}
|
|
209
|
-
.magritte-select-activator-ellipsis___16zkC_5-
|
|
213
|
+
.magritte-select-activator-ellipsis___16zkC_5-3-0{
|
|
210
214
|
white-space:nowrap;
|
|
211
215
|
overflow:hidden;
|
|
212
216
|
text-overflow:ellipsis;
|
|
213
217
|
}
|
|
214
|
-
.magritte-select-activator-placeholder___7ODSn_5-
|
|
218
|
+
.magritte-select-activator-placeholder___7ODSn_5-3-0{
|
|
215
219
|
--magritte-ui-text-color-override:var(--magritte-color-component-input-text-placeholder-v18-1-2);
|
|
216
220
|
}
|
|
217
|
-
.magritte-select-activator-label___Mc49R_5-
|
|
221
|
+
.magritte-select-activator-label___Mc49R_5-3-0{
|
|
218
222
|
--magritte-ui-text-color-override:var(--magritte-color-component-input-text-label-v18-1-2);
|
|
219
223
|
}
|
|
220
|
-
.magritte-select-activator-value___wDbVR_5-
|
|
224
|
+
.magritte-select-activator-value___wDbVR_5-3-0{
|
|
221
225
|
--magritte-ui-text-color-override:var(--magritte-color-component-input-text-content-v18-1-2);
|
|
222
226
|
}
|
|
223
|
-
.magritte-select-activator-chevron___DHIUH_5-
|
|
227
|
+
.magritte-select-activator-chevron___DHIUH_5-3-0{
|
|
224
228
|
height:24px;
|
|
225
229
|
}
|
|
226
230
|
@media (prefers-reduced-motion: no-preference){
|
|
227
|
-
.magritte-select-activator-chevron-animation-timeout___y19bf_5-
|
|
228
|
-
.magritte-select-activator-chevron___DHIUH_5-
|
|
231
|
+
.magritte-select-activator-chevron-animation-timeout___y19bf_5-3-0,
|
|
232
|
+
.magritte-select-activator-chevron___DHIUH_5-3-0{
|
|
229
233
|
transform:rotate(0);
|
|
230
234
|
transition-property:transform;
|
|
231
235
|
transition-duration:var(--magritte-semantic-animation-ease-in-out-100-duration-v18-1-2);
|
|
232
236
|
transition-timing-function:var(--magritte-semantic-animation-ease-in-out-100-timing-function-v18-1-2);
|
|
233
237
|
--animation-duration:var(--magritte-semantic-animation-ease-in-out-100-duration-v18-1-2);
|
|
234
238
|
}
|
|
235
|
-
.magritte-select-activator-chevron-up___gtPyi_5-
|
|
239
|
+
.magritte-select-activator-chevron-up___gtPyi_5-3-0{
|
|
236
240
|
transform:rotate(-180deg);
|
|
237
241
|
}
|
|
238
242
|
}
|
|
239
|
-
.magritte-select-options___y2KYZ_5-
|
|
243
|
+
.magritte-select-options___y2KYZ_5-3-0{
|
|
240
244
|
display:flex;
|
|
241
245
|
width:100%;
|
|
242
246
|
gap:12px;
|
|
@@ -246,9 +250,9 @@
|
|
|
246
250
|
align-items:stretch;
|
|
247
251
|
flex-direction:column;
|
|
248
252
|
}
|
|
249
|
-
.magritte-select-options-xs___BiiPo_5-
|
|
253
|
+
.magritte-select-options-xs___BiiPo_5-3-0{
|
|
250
254
|
margin-bottom:0;
|
|
251
255
|
}
|
|
252
|
-
.magritte-optionDelimiter___OaKsB_5-
|
|
256
|
+
.magritte-optionDelimiter___OaKsB_5-3-0{
|
|
253
257
|
padding:16px 8px 0;
|
|
254
258
|
}
|
package/index.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import './index.css';
|
|
2
|
-
export { S as SelectActivator } from './SelectActivator-
|
|
2
|
+
export { S as SelectActivator } from './SelectActivator-125a6b32.js';
|
|
3
3
|
export { UncontrolledSelect } from './UncontrolledSelect.js';
|
|
4
4
|
export { Select } from './Select.js';
|
|
5
5
|
import 'react/jsx-runtime';
|
|
6
6
|
import 'react';
|
|
7
7
|
import 'classnames';
|
|
8
8
|
import '@hh.ru/magritte-common-keyboard';
|
|
9
|
+
import '@hh.ru/magritte-common-use-multiple-refs';
|
|
9
10
|
import '@hh.ru/magritte-ui-counter';
|
|
10
11
|
import '@hh.ru/magritte-ui-form-helper';
|
|
11
12
|
import '@hh.ru/magritte-ui-icon/icon';
|
|
@@ -14,7 +15,6 @@ import '@hh.ru/magritte-ui-typography';
|
|
|
14
15
|
import '@hh.ru/magritte-common-fuzzy-search';
|
|
15
16
|
import '@hh.ru/magritte-ui-breakpoint';
|
|
16
17
|
import './SelectForDesktopDevice.js';
|
|
17
|
-
import '@hh.ru/magritte-common-use-multiple-refs';
|
|
18
18
|
import '@hh.ru/magritte-ui-card';
|
|
19
19
|
import '@hh.ru/magritte-ui-cell';
|
|
20
20
|
import '@hh.ru/magritte-ui-drop';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hh.ru/magritte-ui-select",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.3.0",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"types": "index.d.ts",
|
|
6
6
|
"sideEffects": [
|
|
@@ -20,21 +20,21 @@
|
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@hh.ru/magritte-common-fuzzy-search": "1.0.4",
|
|
23
|
-
"@hh.ru/magritte-common-keyboard": "
|
|
23
|
+
"@hh.ru/magritte-common-keyboard": "4.0.0",
|
|
24
24
|
"@hh.ru/magritte-common-use-multiple-refs": "1.1.2",
|
|
25
25
|
"@hh.ru/magritte-design-tokens": "18.1.2",
|
|
26
|
-
"@hh.ru/magritte-ui-bottom-sheet": "4.1.
|
|
26
|
+
"@hh.ru/magritte-ui-bottom-sheet": "4.1.29",
|
|
27
27
|
"@hh.ru/magritte-ui-breakpoint": "4.0.2",
|
|
28
|
-
"@hh.ru/magritte-ui-card": "6.0.
|
|
28
|
+
"@hh.ru/magritte-ui-card": "6.0.6",
|
|
29
29
|
"@hh.ru/magritte-ui-cell": "2.2.12",
|
|
30
|
-
"@hh.ru/magritte-ui-checkable-card": "3.0.
|
|
30
|
+
"@hh.ru/magritte-ui-checkable-card": "3.0.9",
|
|
31
31
|
"@hh.ru/magritte-ui-checkbox-radio": "3.0.3",
|
|
32
32
|
"@hh.ru/magritte-ui-counter": "4.0.10",
|
|
33
|
-
"@hh.ru/magritte-ui-drop": "
|
|
33
|
+
"@hh.ru/magritte-ui-drop": "6.0.0",
|
|
34
34
|
"@hh.ru/magritte-ui-form-helper": "1.0.3",
|
|
35
35
|
"@hh.ru/magritte-ui-icon": "7.1.7",
|
|
36
|
-
"@hh.ru/magritte-ui-input": "5.0.
|
|
37
|
-
"@hh.ru/magritte-ui-navigation-bar": "4.1.
|
|
36
|
+
"@hh.ru/magritte-ui-input": "5.0.21",
|
|
37
|
+
"@hh.ru/magritte-ui-navigation-bar": "4.1.14",
|
|
38
38
|
"@hh.ru/magritte-ui-typography": "3.0.10"
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
|
@@ -44,5 +44,5 @@
|
|
|
44
44
|
"publishConfig": {
|
|
45
45
|
"access": "public"
|
|
46
46
|
},
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "cb9ae2f8bc2a076dcb5e45ab962cd0ff27c92f1d"
|
|
48
48
|
}
|
package/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ReactNode, RefObject,
|
|
1
|
+
import type { ReactNode, RefObject, Dispatch, SetStateAction, ReactElement } from 'react';
|
|
2
2
|
import { BottomSheetHeight } from '@hh.ru/magritte-ui-bottom-sheet/src';
|
|
3
3
|
export interface BaseSelectActivatorProps<T> {
|
|
4
4
|
/** Текст плейсхолдера */
|
|
@@ -20,7 +20,7 @@ export interface BaseSelectActivatorProps<T> {
|
|
|
20
20
|
widthEqualToActivator?: boolean;
|
|
21
21
|
searchValue: string;
|
|
22
22
|
counter?: number;
|
|
23
|
-
|
|
23
|
+
toggleOptions: (visible: boolean) => void;
|
|
24
24
|
multiple: boolean;
|
|
25
25
|
onChange?: (values: string[]) => void;
|
|
26
26
|
/** Обработчик события получения фокуса */
|
|
@@ -32,7 +32,6 @@ export interface BaseSelectActivatorProps<T> {
|
|
|
32
32
|
selectedOptions: SelectOption<T>[];
|
|
33
33
|
visible?: boolean;
|
|
34
34
|
dropRef?: RefObject<HTMLDivElement>;
|
|
35
|
-
searchRef?: MutableRefObject<HTMLInputElement | null>;
|
|
36
35
|
/** Обработчик события открытия дропа */
|
|
37
36
|
onDropOpen?: VoidFunction;
|
|
38
37
|
/** Обработчик события закрытия дропа */
|
|
@@ -41,6 +40,8 @@ export interface BaseSelectActivatorProps<T> {
|
|
|
41
40
|
onBottomSheetOpen?: VoidFunction;
|
|
42
41
|
/** Обработчик события закрытия боттомшита */
|
|
43
42
|
onBottomSheetClose?: VoidFunction;
|
|
43
|
+
forcedState?: 'focus' | 'focusAndSelect' | null;
|
|
44
|
+
setForcedState?: (state: 'focus' | 'focusAndSelect' | null) => void;
|
|
44
45
|
}
|
|
45
46
|
export interface LargeSelectProps {
|
|
46
47
|
/** Размер cелекта, как и у инпута флаг elevatePlaceholder можно задать только для large */
|
|
@@ -78,8 +79,6 @@ export interface RenderSelectOption<T> {
|
|
|
78
79
|
export type SelectOptionWrapperProps<T> = Omit<SelectOptionProps<T>, 'input'> & {
|
|
79
80
|
render?: RenderSelectOption<T>;
|
|
80
81
|
multiple: boolean;
|
|
81
|
-
isFirstActiveElement?: boolean;
|
|
82
|
-
isLastActiveElement?: boolean;
|
|
83
82
|
};
|
|
84
83
|
export interface OnChangeAction {
|
|
85
84
|
(value: string, needToPut: boolean): void;
|
|
@@ -113,7 +112,7 @@ export type SelectBaseProps<T = unknown> = {
|
|
|
113
112
|
dropHost?: RefObject<HTMLElement>;
|
|
114
113
|
/** Максимальное количество выбранных опций */
|
|
115
114
|
maxSelectedOptions?: number;
|
|
116
|
-
} & (LargeSelectProps | MediumSelectProps) & Omit<SelectActivatorProps<T>, 'searchValue' | 'counter' | '
|
|
115
|
+
} & (LargeSelectProps | MediumSelectProps) & Omit<SelectActivatorProps<T>, 'searchValue' | 'counter' | 'toggleOptions' | 'multiple' | 'onChange' | 'selectedOptions' | 'visible' | 'dropRef' | 'searchRef' | 'setSearchValue' | 'size' | 'elevatePlaceholder' | 'optionsCount'>;
|
|
117
116
|
type ButtonTrls<ShowClearButtonType extends boolean> = [ShowClearButtonType] extends [true] ? {
|
|
118
117
|
/** Перевод для card/cell очистки списка в Drop */
|
|
119
118
|
trls: {
|
|
@@ -164,7 +163,7 @@ type ContolledSelectConditionalProps<ShowClearButtonType extends boolean, Multip
|
|
|
164
163
|
export type UncontrolledSelectProps<ShowClearButtonType extends boolean, MultipleType extends boolean, T = unknown> = SelectBaseProps<T> & UncontrolledSelectConditionalProps<ShowClearButtonType, MultipleType>;
|
|
165
164
|
export type SelectProps<ShowClearButtonType extends boolean, MultipleType extends boolean, T = unknown> = SelectBaseProps<T> & ContolledSelectConditionalProps<ShowClearButtonType, MultipleType>;
|
|
166
165
|
export type InternalSelectProps<T, MultipleType extends boolean> = Omit<SelectProps<boolean, boolean, T>, 'value' | 'onChange' | 'renderItemForDesktop' | 'renderItem'> & {
|
|
167
|
-
|
|
166
|
+
toggleOptions: (visible: boolean) => void;
|
|
168
167
|
selectedOptions: SelectOption<T>[];
|
|
169
168
|
values: [MultipleType] extends [true] ? string[] : string;
|
|
170
169
|
visible: boolean;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
interface HookReturnType {
|
|
3
|
-
|
|
3
|
+
toggleOptions: (show: boolean) => void;
|
|
4
4
|
activatorRef: React.RefObject<HTMLElement>;
|
|
5
5
|
optionsListRef: React.RefObject<HTMLElement>;
|
|
6
6
|
onOptionsListClose: VoidFunction;
|
package/useSelectOptionsList.js
CHANGED
|
@@ -3,7 +3,9 @@ import { useState, useCallback, useRef, useEffect } from 'react';
|
|
|
3
3
|
|
|
4
4
|
const useSelectOptionsList = (searchable) => {
|
|
5
5
|
const [showOptions, setShowOptions] = useState(false);
|
|
6
|
-
const
|
|
6
|
+
const toggleOptions = useCallback((show) => {
|
|
7
|
+
setShowOptions((optionsVisible) => (show ? !!(!optionsVisible || searchable) : false));
|
|
8
|
+
}, [searchable, setShowOptions]);
|
|
7
9
|
const activatorRef = useRef(null);
|
|
8
10
|
const optionsListRef = useRef(null);
|
|
9
11
|
useEffect(() => {
|
|
@@ -27,7 +29,7 @@ const useSelectOptionsList = (searchable) => {
|
|
|
27
29
|
const onOptionsListClose = () => setShowOptions(false);
|
|
28
30
|
const onClearSelectionClick = () => setShowOptions(false);
|
|
29
31
|
return {
|
|
30
|
-
|
|
32
|
+
toggleOptions,
|
|
31
33
|
activatorRef,
|
|
32
34
|
optionsListRef,
|
|
33
35
|
onOptionsListClose,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSelectOptionsList.js","sources":["../src/useSelectOptionsList.tsx"],"sourcesContent":["import { useState, useCallback, useEffect, useRef } from 'react';\n\ninterface HookReturnType {\n
|
|
1
|
+
{"version":3,"file":"useSelectOptionsList.js","sources":["../src/useSelectOptionsList.tsx"],"sourcesContent":["import { useState, useCallback, useEffect, useRef } from 'react';\n\ninterface HookReturnType {\n toggleOptions: (show: boolean) => void;\n activatorRef: React.RefObject<HTMLElement>;\n optionsListRef: React.RefObject<HTMLElement>;\n onOptionsListClose: VoidFunction;\n onClearSelectionClick: VoidFunction;\n showOptions: boolean;\n}\n\nexport const useSelectOptionsList = (searchable: boolean): HookReturnType => {\n const [showOptions, setShowOptions] = useState(false);\n\n const toggleOptions = useCallback(\n (show: boolean) => {\n setShowOptions((optionsVisible) => (show ? !!(!optionsVisible || searchable) : false));\n },\n [searchable, setShowOptions]\n );\n\n const activatorRef = useRef<HTMLElement>(null);\n const optionsListRef = useRef<HTMLElement>(null);\n\n useEffect(() => {\n if (!showOptions) {\n return undefined;\n }\n\n const blurHandler = () => {\n // даем фокусу перейти на другой элемент прежде чем проверить остался ли он внутри компонента\n requestAnimationFrame(() => {\n const activeElement = document.activeElement;\n\n if (activatorRef.current?.contains(activeElement) || optionsListRef.current?.contains(activeElement)) {\n return;\n }\n\n document.body.removeEventListener('blur', blurHandler, true);\n setShowOptions(false);\n });\n };\n\n document.body.addEventListener('blur', blurHandler, true);\n return () => document.body.removeEventListener('blur', blurHandler, true);\n }, [showOptions]);\n\n const onOptionsListClose = () => setShowOptions(false);\n const onClearSelectionClick = () => setShowOptions(false);\n\n return {\n toggleOptions,\n activatorRef,\n optionsListRef,\n onOptionsListClose,\n onClearSelectionClick,\n showOptions,\n };\n};\n"],"names":[],"mappings":";;AAWa,MAAA,oBAAoB,GAAG,CAAC,UAAmB,KAAoB;IACxE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AAEtD,IAAA,MAAM,aAAa,GAAG,WAAW,CAC7B,CAAC,IAAa,KAAI;QACd,cAAc,CAAC,CAAC,cAAc,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,cAAc,IAAI,UAAU,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAC3F,KAAC,EACD,CAAC,UAAU,EAAE,cAAc,CAAC,CAC/B,CAAC;AAEF,IAAA,MAAM,YAAY,GAAG,MAAM,CAAc,IAAI,CAAC,CAAC;AAC/C,IAAA,MAAM,cAAc,GAAG,MAAM,CAAc,IAAI,CAAC,CAAC;IAEjD,SAAS,CAAC,MAAK;QACX,IAAI,CAAC,WAAW,EAAE;AACd,YAAA,OAAO,SAAS,CAAC;AACpB,SAAA;QAED,MAAM,WAAW,GAAG,MAAK;;YAErB,qBAAqB,CAAC,MAAK;AACvB,gBAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;AAE7C,gBAAA,IAAI,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE;oBAClG,OAAO;AACV,iBAAA;gBAED,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;gBAC7D,cAAc,CAAC,KAAK,CAAC,CAAC;AAC1B,aAAC,CAAC,CAAC;AACP,SAAC,CAAC;QAEF,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;AAC1D,QAAA,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;AAC9E,KAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,MAAM,kBAAkB,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;IACvD,MAAM,qBAAqB,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;IAE1D,OAAO;QACH,aAAa;QACb,YAAY;QACZ,cAAc;QACd,kBAAkB;QAClB,qBAAqB;QACrB,WAAW;KACd,CAAC;AACN;;;;"}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import './index.css';
|
|
2
|
-
import { jsxs, jsx, Fragment as Fragment$1 } from 'react/jsx-runtime';
|
|
3
|
-
import { forwardRef, useRef, Fragment, useEffect } from 'react';
|
|
4
|
-
import classnames from 'classnames';
|
|
5
|
-
import { keyboardMatches, keyboardKeys } from '@hh.ru/magritte-common-keyboard';
|
|
6
|
-
import { Counter } from '@hh.ru/magritte-ui-counter';
|
|
7
|
-
import { FormHelper } from '@hh.ru/magritte-ui-form-helper';
|
|
8
|
-
import { ChevronDownOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';
|
|
9
|
-
import { BaseInput } from '@hh.ru/magritte-ui-input/BaseInput';
|
|
10
|
-
import { Text } from '@hh.ru/magritte-ui-typography';
|
|
11
|
-
|
|
12
|
-
var styles = {"select-activator":"magritte-select-activator___9XXwA_5-2-9","selectActivator":"magritte-select-activator___9XXwA_5-2-9","select-activator-label":"magritte-select-activator-label___Mc49R_5-2-9","selectActivatorLabel":"magritte-select-activator-label___Mc49R_5-2-9","select-activator-placeholder":"magritte-select-activator-placeholder___7ODSn_5-2-9","selectActivatorPlaceholder":"magritte-select-activator-placeholder___7ODSn_5-2-9","select-activator-value":"magritte-select-activator-value___wDbVR_5-2-9","selectActivatorValue":"magritte-select-activator-value___wDbVR_5-2-9","select-activator-chevron":"magritte-select-activator-chevron___DHIUH_5-2-9","selectActivatorChevron":"magritte-select-activator-chevron___DHIUH_5-2-9","select-activator-disabled":"magritte-select-activator-disabled___mYKi2_5-2-9","selectActivatorDisabled":"magritte-select-activator-disabled___mYKi2_5-2-9","select-activator-item":"magritte-select-activator-item___JsY4v_5-2-9","selectActivatorItem":"magritte-select-activator-item___JsY4v_5-2-9","select-activator-invalid":"magritte-select-activator-invalid___IdlRp_5-2-9","selectActivatorInvalid":"magritte-select-activator-invalid___IdlRp_5-2-9","select-activator-size-large":"magritte-select-activator-size-large___MIXAH_5-2-9","selectActivatorSizeLarge":"magritte-select-activator-size-large___MIXAH_5-2-9","select-activator-with-label":"magritte-select-activator-with-label___DwcKr_5-2-9","selectActivatorWithLabel":"magritte-select-activator-with-label___DwcKr_5-2-9","select-activator-label-root":"magritte-select-activator-label-root___eYIWQ_5-2-9","selectActivatorLabelRoot":"magritte-select-activator-label-root___eYIWQ_5-2-9","select-activator-has-counter":"magritte-select-activator-has-counter___k2Kc2_5-2-9","selectActivatorHasCounter":"magritte-select-activator-has-counter___k2Kc2_5-2-9","select-activator-ellipsis":"magritte-select-activator-ellipsis___16zkC_5-2-9","selectActivatorEllipsis":"magritte-select-activator-ellipsis___16zkC_5-2-9","select-activator-chevron-animation-timeout":"magritte-select-activator-chevron-animation-timeout___y19bf_5-2-9","selectActivatorChevronAnimationTimeout":"magritte-select-activator-chevron-animation-timeout___y19bf_5-2-9","select-activator-chevron-up":"magritte-select-activator-chevron-up___gtPyi_5-2-9","selectActivatorChevronUp":"magritte-select-activator-chevron-up___gtPyi_5-2-9","select-options":"magritte-select-options___y2KYZ_5-2-9","selectOptions":"magritte-select-options___y2KYZ_5-2-9","select-options-xs":"magritte-select-options-xs___BiiPo_5-2-9","selectOptionsXs":"magritte-select-options-xs___BiiPo_5-2-9","optionDelimiter":"magritte-optionDelimiter___OaKsB_5-2-9"};
|
|
13
|
-
|
|
14
|
-
const SelectActivator = forwardRef(({ placeholder, size = 'medium', elevatePlaceholder = false, disabled = false, multiple, invalid = false, searchable = false, selectedOptions, onClick, onFocus, onBlur, searchValue, setSearchValue, description, errorMessage, visible, dropRef, searchRef, }, ref) => {
|
|
15
|
-
const prevVisibleRef = useRef(visible);
|
|
16
|
-
const focusedRef = useRef(false);
|
|
17
|
-
const counter = multiple ? selectedOptions?.length ?? 0 : 0;
|
|
18
|
-
const value = selectedOptions?.map(({ label, value }, index) => (jsxs(Fragment, { children: [label, index === selectedOptions.length - 1 ? '' : ', '] }, value)));
|
|
19
|
-
const hintContent = (jsx(FormHelper, { description: description, errorMessage: errorMessage, disabled: disabled, invalid: invalid && !visible }, "hint"));
|
|
20
|
-
useEffect(() => {
|
|
21
|
-
if (prevVisibleRef.current && !visible) {
|
|
22
|
-
onBlur?.();
|
|
23
|
-
}
|
|
24
|
-
else if (visible) {
|
|
25
|
-
onFocus?.();
|
|
26
|
-
}
|
|
27
|
-
prevVisibleRef.current = visible;
|
|
28
|
-
}, [visible, onBlur, onFocus]);
|
|
29
|
-
if (searchable && visible) {
|
|
30
|
-
const sizeProp = size === 'large' ? { size: 'large' } : { size: 'medium' };
|
|
31
|
-
return (jsxs(Fragment$1, { children: [jsx(BaseInput, { ...sizeProp, wrapperRef: ref, onKeyDown: (event) => {
|
|
32
|
-
if (dropRef?.current &&
|
|
33
|
-
keyboardMatches(event.nativeEvent, [keyboardKeys.ArrowDown, keyboardKeys.Tab])) {
|
|
34
|
-
const focusableElement = dropRef.current.querySelector('[data-magritte-option-first-active-element]');
|
|
35
|
-
event.preventDefault();
|
|
36
|
-
event.stopPropagation();
|
|
37
|
-
focusableElement?.focus();
|
|
38
|
-
}
|
|
39
|
-
if (visible && keyboardMatches(event.nativeEvent, [keyboardKeys.Escape])) {
|
|
40
|
-
event.stopPropagation();
|
|
41
|
-
const dropHost = dropRef?.current || document.body;
|
|
42
|
-
dropHost?.dispatchEvent(new KeyboardEvent(event.type, { key: event.key, code: event.code }));
|
|
43
|
-
}
|
|
44
|
-
}, ref: (input) => {
|
|
45
|
-
input?.focus();
|
|
46
|
-
if (searchRef) {
|
|
47
|
-
searchRef.current = input;
|
|
48
|
-
}
|
|
49
|
-
}, value: searchValue, onChange: setSearchValue, "data-qa": "magritte-select-activator-input", placeholder: selectedOptions.length > 0 ? value : placeholder, counter: counter === 0 ? undefined : counter, autoComplete: "off" }), hintContent] }));
|
|
50
|
-
}
|
|
51
|
-
const showValue = selectedOptions.length > 0;
|
|
52
|
-
const showPlaceholder = !!(placeholder && !showValue);
|
|
53
|
-
const isLargeSize = size === 'large';
|
|
54
|
-
const showLabel = !!(isLargeSize && placeholder && elevatePlaceholder && showValue);
|
|
55
|
-
return (jsxs(Fragment$1, { children: [jsxs("div", { ref: ref, "data-qa": "magritte-select-activator", className: classnames(styles.selectActivator, {
|
|
56
|
-
[styles.selectActivatorSizeLarge]: isLargeSize,
|
|
57
|
-
[styles.selectActivatorWithLabel]: showLabel,
|
|
58
|
-
[styles.selectActivatorHasCounter]: counter > 0,
|
|
59
|
-
[styles.selectActivatorDisabled]: disabled,
|
|
60
|
-
[styles.selectActivatorInvalid]: invalid,
|
|
61
|
-
}), onClick: () => {
|
|
62
|
-
if (disabled) {
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
if (!focusedRef.current) {
|
|
66
|
-
onClick(!visible);
|
|
67
|
-
}
|
|
68
|
-
focusedRef.current = false;
|
|
69
|
-
}, onFocus: () => {
|
|
70
|
-
if (disabled) {
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
onClick(true);
|
|
74
|
-
focusedRef.current = true;
|
|
75
|
-
}, onBlur: () => {
|
|
76
|
-
focusedRef.current = false;
|
|
77
|
-
}, tabIndex: disabled ? -1 : 0, children: [jsxs("div", { className: styles.selectActivatorLabelRoot, children: [showPlaceholder && (jsx("div", { className: styles.selectActivatorPlaceholder, children: jsx(Text, { typography: "label-2-regular", children: jsx("div", { className: styles.selectActivatorEllipsis, children: placeholder }) }) })), showLabel && (jsx("div", { className: styles.selectActivatorLabel, children: jsx(Text, { typography: "label-4-regular", children: jsx("div", { className: styles.selectActivatorEllipsis, children: placeholder }) }) })), showValue && (jsx("div", { className: styles.selectActivatorValue, children: jsx(Text, { typography: "label-2-regular", children: jsx("div", { className: styles.selectActivatorEllipsis, children: value }) }) }))] }), jsxs("div", { className: styles.selectActivatorItem, children: [counter > 0 && jsx(Counter, { label: counter }), jsx("div", { className: classnames(styles.selectActivatorChevron, {
|
|
78
|
-
[styles.selectActivatorChevronUp]: visible,
|
|
79
|
-
}), children: jsx(ChevronDownOutlinedSize24, {}) })] })] }), hintContent] }));
|
|
80
|
-
});
|
|
81
|
-
SelectActivator.displayName = 'SelectActivator';
|
|
82
|
-
const renderSelectActivator = (props) => {
|
|
83
|
-
return jsx(SelectActivator, { ...props });
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
export { SelectActivator as S, renderSelectActivator as r, styles as s };
|
|
87
|
-
//# sourceMappingURL=SelectActivator-7f53c708.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SelectActivator-7f53c708.js","sources":["../src/SelectActivator.tsx"],"sourcesContent":["import { type ForwardedRef, type ReactNode, forwardRef, useEffect, Fragment, useRef, RefObject } from 'react';\nimport classnames from 'classnames';\n\nimport { keyboardMatches, keyboardKeys } from '@hh.ru/magritte-common-keyboard';\nimport { Counter } from '@hh.ru/magritte-ui-counter';\nimport { FormHelper } from '@hh.ru/magritte-ui-form-helper';\nimport { ChevronDownOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';\nimport { BaseInput } from '@hh.ru/magritte-ui-input/BaseInput';\nimport { type SelectActivatorProps } from '@hh.ru/magritte-ui-select/types';\nimport { Text } from '@hh.ru/magritte-ui-typography';\n\nimport styles from './styles.less';\n\nconst SelectActivator = forwardRef(\n <T,>(\n {\n placeholder,\n size = 'medium',\n elevatePlaceholder = false,\n disabled = false,\n multiple,\n invalid = false,\n searchable = false,\n selectedOptions,\n onClick,\n onFocus,\n onBlur,\n searchValue,\n setSearchValue,\n description,\n errorMessage,\n visible,\n dropRef,\n searchRef,\n }: SelectActivatorProps<T>,\n ref: ForwardedRef<HTMLElement>\n ) => {\n const prevVisibleRef = useRef(visible);\n const focusedRef = useRef(false);\n const counter = multiple ? selectedOptions?.length ?? 0 : 0;\n const value = selectedOptions?.map(({ label, value }, index) => (\n <Fragment key={value}>\n {label}\n {index === selectedOptions.length - 1 ? '' : ', '}\n </Fragment>\n ));\n\n const hintContent = (\n <FormHelper\n key=\"hint\"\n description={description}\n errorMessage={errorMessage}\n disabled={disabled}\n invalid={invalid && !visible}\n />\n );\n\n useEffect(() => {\n if (prevVisibleRef.current && !visible) {\n onBlur?.();\n } else if (visible) {\n onFocus?.();\n }\n prevVisibleRef.current = visible;\n }, [visible, onBlur, onFocus]);\n\n if (searchable && visible) {\n const sizeProp = size === 'large' ? ({ size: 'large' } as const) : ({ size: 'medium' } as const);\n\n return (\n <>\n <BaseInput\n {...sizeProp}\n wrapperRef={ref as ForwardedRef<HTMLDivElement> | undefined}\n onKeyDown={(event) => {\n if (\n dropRef?.current &&\n keyboardMatches(event.nativeEvent, [keyboardKeys.ArrowDown, keyboardKeys.Tab])\n ) {\n const focusableElement = dropRef.current.querySelector(\n '[data-magritte-option-first-active-element]'\n ) as HTMLElement;\n event.preventDefault();\n event.stopPropagation();\n focusableElement?.focus();\n }\n if (visible && keyboardMatches(event.nativeEvent, [keyboardKeys.Escape])) {\n event.stopPropagation();\n const dropHost = dropRef?.current || document.body;\n dropHost?.dispatchEvent(\n new KeyboardEvent(event.type, { key: event.key, code: event.code })\n );\n }\n }}\n ref={(input) => {\n input?.focus();\n if (searchRef) {\n searchRef.current = input;\n }\n }}\n value={searchValue}\n onChange={setSearchValue}\n data-qa=\"magritte-select-activator-input\"\n placeholder={selectedOptions.length > 0 ? value : placeholder}\n counter={counter === 0 ? undefined : counter}\n autoComplete=\"off\"\n />\n {hintContent}\n </>\n );\n }\n\n const showValue = selectedOptions.length > 0;\n const showPlaceholder = !!(placeholder && !showValue);\n const isLargeSize = size === 'large';\n const showLabel = !!(isLargeSize && placeholder && elevatePlaceholder && showValue);\n\n return (\n <>\n <div\n ref={ref as RefObject<HTMLDivElement>}\n data-qa=\"magritte-select-activator\"\n className={classnames(styles.selectActivator, {\n [styles.selectActivatorSizeLarge]: isLargeSize,\n [styles.selectActivatorWithLabel]: showLabel,\n [styles.selectActivatorHasCounter]: counter > 0,\n [styles.selectActivatorDisabled]: disabled,\n [styles.selectActivatorInvalid]: invalid,\n })}\n onClick={() => {\n if (disabled) {\n return;\n }\n\n if (!focusedRef.current) {\n onClick(!visible);\n }\n focusedRef.current = false;\n }}\n onFocus={() => {\n if (disabled) {\n return;\n }\n onClick(true);\n focusedRef.current = true;\n }}\n onBlur={() => {\n focusedRef.current = false;\n }}\n tabIndex={disabled ? -1 : 0}\n >\n <div className={styles.selectActivatorLabelRoot}>\n {showPlaceholder && (\n <div className={styles.selectActivatorPlaceholder}>\n <Text typography=\"label-2-regular\">\n <div className={styles.selectActivatorEllipsis}>{placeholder}</div>\n </Text>\n </div>\n )}\n {showLabel && (\n <div className={styles.selectActivatorLabel}>\n <Text typography=\"label-4-regular\">\n <div className={styles.selectActivatorEllipsis}>{placeholder}</div>\n </Text>\n </div>\n )}\n {showValue && (\n <div className={styles.selectActivatorValue}>\n <Text typography=\"label-2-regular\">\n <div className={styles.selectActivatorEllipsis}>{value}</div>\n </Text>\n </div>\n )}\n </div>\n <div className={styles.selectActivatorItem}>\n {counter > 0 && <Counter label={counter} />}\n <div\n className={classnames(styles.selectActivatorChevron, {\n [styles.selectActivatorChevronUp]: visible,\n })}\n >\n <ChevronDownOutlinedSize24 />\n </div>\n </div>\n </div>\n {hintContent}\n </>\n );\n }\n);\n\nSelectActivator.displayName = 'SelectActivator';\n\nconst renderSelectActivator = <T,>(props: SelectActivatorProps<T>): ReactNode => {\n return <SelectActivator {...props} />;\n};\n\nexport { SelectActivator, renderSelectActivator };\n"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
|