@cloud-ru/uikit-product-mobile-chips 0.8.36 → 0.8.38
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/CHANGELOG.md +23 -0
- package/dist/cjs/components/AdaptiveChips/AdaptiveChips.d.ts +6 -0
- package/dist/cjs/components/AdaptiveChips/AdaptiveChips.js +28 -0
- package/dist/cjs/components/AdaptiveChips/index.d.ts +1 -0
- package/dist/cjs/components/AdaptiveChips/index.js +17 -0
- package/dist/cjs/components/MobileChipChoice/components/ChipChoiceBase/ChipChoiceBase.d.ts +20 -0
- package/dist/cjs/components/MobileChipChoice/components/ChipChoiceBase/ChipChoiceBase.js +72 -0
- package/dist/cjs/components/MobileChipChoice/components/ChipChoiceBase/index.d.ts +1 -0
- package/dist/cjs/components/MobileChipChoice/components/ChipChoiceBase/index.js +17 -0
- package/dist/cjs/components/MobileChipChoice/components/ChipChoiceBase/styles.module.css +427 -0
- package/dist/cjs/components/MobileChipChoice/components/MobileChipChoiceCustom.d.ts +25 -0
- package/dist/cjs/components/MobileChipChoice/components/MobileChipChoiceCustom.js +38 -0
- package/dist/cjs/components/MobileChipChoice/components/MobileChipChoiceDate.d.ts +22 -0
- package/dist/cjs/components/MobileChipChoice/components/MobileChipChoiceDate.js +73 -0
- package/dist/cjs/components/MobileChipChoice/components/MobileChipChoiceDateRange.d.ts +15 -0
- package/dist/cjs/components/MobileChipChoice/components/MobileChipChoiceDateRange.js +52 -0
- package/dist/cjs/components/MobileChipChoice/components/MobileChipChoiceMultiple.d.ts +8 -0
- package/dist/cjs/components/MobileChipChoice/components/MobileChipChoiceMultiple.js +128 -0
- package/dist/cjs/components/MobileChipChoice/components/MobileChipChoiceSingle.d.ts +8 -0
- package/dist/cjs/components/MobileChipChoice/components/MobileChipChoiceSingle.js +112 -0
- package/dist/cjs/components/MobileChipChoice/components/MobileChipChoiceTime.d.ts +12 -0
- package/dist/cjs/components/MobileChipChoice/components/MobileChipChoiceTime.js +71 -0
- package/dist/cjs/components/MobileChipChoice/components/index.d.ts +6 -0
- package/dist/cjs/components/MobileChipChoice/components/index.js +22 -0
- package/dist/cjs/components/MobileChipChoice/components/styles.module.css +37 -0
- package/dist/cjs/components/MobileChipChoice/constants.d.ts +16 -0
- package/dist/cjs/components/MobileChipChoice/constants.js +20 -0
- package/dist/cjs/components/MobileChipChoice/hooks.d.ts +23 -0
- package/dist/cjs/components/MobileChipChoice/hooks.js +69 -0
- package/dist/cjs/components/MobileChipChoice/index.d.ts +12 -0
- package/dist/cjs/components/MobileChipChoice/index.js +19 -0
- package/dist/cjs/components/MobileChipChoice/styles.module.css +211 -0
- package/dist/cjs/components/MobileChipChoice/types.d.ts +80 -0
- package/dist/cjs/components/MobileChipChoice/types.js +2 -0
- package/dist/cjs/components/MobileChipChoice/utils/index.d.ts +2 -0
- package/dist/cjs/components/MobileChipChoice/utils/index.js +18 -0
- package/dist/cjs/components/MobileChipChoice/utils/options.d.ts +9 -0
- package/dist/cjs/components/MobileChipChoice/utils/options.js +36 -0
- package/dist/cjs/components/MobileChipChoice/utils/typeGuards.d.ts +6 -0
- package/dist/cjs/components/MobileChipChoice/utils/typeGuards.js +22 -0
- package/dist/cjs/components/MobileChipChoice/utils/utils.d.ts +19 -0
- package/dist/cjs/components/MobileChipChoice/utils/utils.js +33 -0
- package/dist/cjs/components/MobileChipChoiceRow/MobileChipChoiceRow.d.ts +29 -0
- package/dist/cjs/components/MobileChipChoiceRow/MobileChipChoiceRow.js +124 -0
- package/dist/cjs/components/MobileChipChoiceRow/components/ForwardedChipChoice.d.ts +2 -0
- package/dist/cjs/components/MobileChipChoiceRow/components/ForwardedChipChoice.js +9 -0
- package/dist/cjs/components/MobileChipChoiceRow/components/constants.d.ts +9 -0
- package/dist/cjs/components/MobileChipChoiceRow/components/constants.js +14 -0
- package/dist/cjs/components/MobileChipChoiceRow/components/index.d.ts +1 -0
- package/dist/cjs/components/MobileChipChoiceRow/components/index.js +17 -0
- package/dist/cjs/components/MobileChipChoiceRow/constants.d.ts +12 -0
- package/dist/cjs/components/MobileChipChoiceRow/constants.js +19 -0
- package/dist/cjs/components/MobileChipChoiceRow/index.d.ts +2 -0
- package/dist/cjs/components/MobileChipChoiceRow/index.js +20 -0
- package/dist/cjs/components/MobileChipChoiceRow/styles.module.css +28 -0
- package/dist/cjs/components/MobileChipChoiceRow/types.d.ts +36 -0
- package/dist/cjs/components/MobileChipChoiceRow/types.js +2 -0
- package/dist/cjs/components/index.d.ts +3 -0
- package/dist/cjs/components/index.js +19 -0
- package/dist/cjs/constants.d.ts +43 -0
- package/dist/cjs/constants.js +46 -0
- package/dist/cjs/helperComponents/ButtonClearValue/ButtonClearValue.d.ts +11 -0
- package/dist/cjs/helperComponents/ButtonClearValue/ButtonClearValue.js +18 -0
- package/dist/cjs/helperComponents/ButtonClearValue/index.d.ts +1 -0
- package/dist/cjs/helperComponents/ButtonClearValue/index.js +17 -0
- package/dist/cjs/helperComponents/ButtonClearValue/styles.module.css +43 -0
- package/dist/cjs/helperComponents/ItemContent/ItemContent.d.ts +9 -0
- package/dist/cjs/helperComponents/ItemContent/ItemContent.js +25 -0
- package/dist/cjs/helperComponents/ItemContent/index.d.ts +1 -0
- package/dist/cjs/helperComponents/ItemContent/index.js +17 -0
- package/dist/cjs/helperComponents/ItemContent/styles.module.css +122 -0
- package/dist/cjs/helperComponents/index.d.ts +2 -0
- package/dist/cjs/helperComponents/index.js +18 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +17 -0
- package/dist/cjs/styles.module.css +0 -0
- package/dist/cjs/types.d.ts +20 -0
- package/dist/cjs/types.js +2 -0
- package/dist/esm/components/AdaptiveChips/AdaptiveChips.d.ts +6 -0
- package/dist/esm/components/AdaptiveChips/AdaptiveChips.js +24 -0
- package/dist/esm/components/AdaptiveChips/index.d.ts +1 -0
- package/dist/esm/components/AdaptiveChips/index.js +1 -0
- package/dist/esm/components/MobileChipChoice/components/ChipChoiceBase/ChipChoiceBase.d.ts +20 -0
- package/dist/esm/components/MobileChipChoice/components/ChipChoiceBase/ChipChoiceBase.js +66 -0
- package/dist/esm/components/MobileChipChoice/components/ChipChoiceBase/index.d.ts +1 -0
- package/dist/esm/components/MobileChipChoice/components/ChipChoiceBase/index.js +1 -0
- package/dist/esm/components/MobileChipChoice/components/ChipChoiceBase/styles.module.css +427 -0
- package/dist/esm/components/MobileChipChoice/components/MobileChipChoiceCustom.d.ts +25 -0
- package/dist/esm/components/MobileChipChoice/components/MobileChipChoiceCustom.js +35 -0
- package/dist/esm/components/MobileChipChoice/components/MobileChipChoiceDate.d.ts +22 -0
- package/dist/esm/components/MobileChipChoice/components/MobileChipChoiceDate.js +67 -0
- package/dist/esm/components/MobileChipChoice/components/MobileChipChoiceDateRange.d.ts +15 -0
- package/dist/esm/components/MobileChipChoice/components/MobileChipChoiceDateRange.js +46 -0
- package/dist/esm/components/MobileChipChoice/components/MobileChipChoiceMultiple.d.ts +8 -0
- package/dist/esm/components/MobileChipChoice/components/MobileChipChoiceMultiple.js +122 -0
- package/dist/esm/components/MobileChipChoice/components/MobileChipChoiceSingle.d.ts +8 -0
- package/dist/esm/components/MobileChipChoice/components/MobileChipChoiceSingle.js +105 -0
- package/dist/esm/components/MobileChipChoice/components/MobileChipChoiceTime.d.ts +12 -0
- package/dist/esm/components/MobileChipChoice/components/MobileChipChoiceTime.js +65 -0
- package/dist/esm/components/MobileChipChoice/components/index.d.ts +6 -0
- package/dist/esm/components/MobileChipChoice/components/index.js +6 -0
- package/dist/esm/components/MobileChipChoice/components/styles.module.css +37 -0
- package/dist/esm/components/MobileChipChoice/constants.d.ts +16 -0
- package/dist/esm/components/MobileChipChoice/constants.js +17 -0
- package/dist/esm/components/MobileChipChoice/hooks.d.ts +23 -0
- package/dist/esm/components/MobileChipChoice/hooks.js +61 -0
- package/dist/esm/components/MobileChipChoice/index.d.ts +12 -0
- package/dist/esm/components/MobileChipChoice/index.js +11 -0
- package/dist/esm/components/MobileChipChoice/styles.module.css +211 -0
- package/dist/esm/components/MobileChipChoice/types.d.ts +80 -0
- package/dist/esm/components/MobileChipChoice/types.js +1 -0
- package/dist/esm/components/MobileChipChoice/utils/index.d.ts +2 -0
- package/dist/esm/components/MobileChipChoice/utils/index.js +2 -0
- package/dist/esm/components/MobileChipChoice/utils/options.d.ts +9 -0
- package/dist/esm/components/MobileChipChoice/utils/options.js +33 -0
- package/dist/esm/components/MobileChipChoice/utils/typeGuards.d.ts +6 -0
- package/dist/esm/components/MobileChipChoice/utils/typeGuards.js +15 -0
- package/dist/esm/components/MobileChipChoice/utils/utils.d.ts +19 -0
- package/dist/esm/components/MobileChipChoice/utils/utils.js +30 -0
- package/dist/esm/components/MobileChipChoiceRow/MobileChipChoiceRow.d.ts +29 -0
- package/dist/esm/components/MobileChipChoiceRow/MobileChipChoiceRow.js +118 -0
- package/dist/esm/components/MobileChipChoiceRow/components/ForwardedChipChoice.d.ts +2 -0
- package/dist/esm/components/MobileChipChoiceRow/components/ForwardedChipChoice.js +6 -0
- package/dist/esm/components/MobileChipChoiceRow/components/constants.d.ts +9 -0
- package/dist/esm/components/MobileChipChoiceRow/components/constants.js +11 -0
- package/dist/esm/components/MobileChipChoiceRow/components/index.d.ts +1 -0
- package/dist/esm/components/MobileChipChoiceRow/components/index.js +1 -0
- package/dist/esm/components/MobileChipChoiceRow/constants.d.ts +12 -0
- package/dist/esm/components/MobileChipChoiceRow/constants.js +16 -0
- package/dist/esm/components/MobileChipChoiceRow/index.d.ts +2 -0
- package/dist/esm/components/MobileChipChoiceRow/index.js +2 -0
- package/dist/esm/components/MobileChipChoiceRow/styles.module.css +28 -0
- package/dist/esm/components/MobileChipChoiceRow/types.d.ts +36 -0
- package/dist/esm/components/MobileChipChoiceRow/types.js +1 -0
- package/dist/esm/components/index.d.ts +3 -0
- package/dist/esm/components/index.js +3 -0
- package/dist/esm/constants.d.ts +43 -0
- package/dist/esm/constants.js +43 -0
- package/dist/esm/helperComponents/ButtonClearValue/ButtonClearValue.d.ts +11 -0
- package/dist/esm/helperComponents/ButtonClearValue/ButtonClearValue.js +12 -0
- package/dist/esm/helperComponents/ButtonClearValue/index.d.ts +1 -0
- package/dist/esm/helperComponents/ButtonClearValue/index.js +1 -0
- package/dist/esm/helperComponents/ButtonClearValue/styles.module.css +43 -0
- package/dist/esm/helperComponents/ItemContent/ItemContent.d.ts +9 -0
- package/dist/esm/helperComponents/ItemContent/ItemContent.js +19 -0
- package/dist/esm/helperComponents/ItemContent/index.d.ts +1 -0
- package/dist/esm/helperComponents/ItemContent/index.js +1 -0
- package/dist/esm/helperComponents/ItemContent/styles.module.css +122 -0
- package/dist/esm/helperComponents/index.d.ts +2 -0
- package/dist/esm/helperComponents/index.js +2 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/styles.module.css +0 -0
- package/dist/esm/types.d.ts +20 -0
- package/dist/esm/types.js +1 -0
- package/package.json +7 -6
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_LOCALE = exports.CHIP_CHOICE_TYPE = exports.BUTTON_CLEAR_VALUE_SIZE_MAP = void 0;
|
|
4
|
+
const constants_1 = require("../../constants");
|
|
5
|
+
exports.BUTTON_CLEAR_VALUE_SIZE_MAP = {
|
|
6
|
+
[constants_1.SIZE.Xs]: constants_1.BUTTON_SIZE.Xxs,
|
|
7
|
+
[constants_1.SIZE.S]: constants_1.BUTTON_SIZE.Xs,
|
|
8
|
+
[constants_1.SIZE.M]: constants_1.BUTTON_SIZE.Xs,
|
|
9
|
+
[constants_1.SIZE.L]: constants_1.BUTTON_SIZE.Xs,
|
|
10
|
+
};
|
|
11
|
+
exports.CHIP_CHOICE_TYPE = {
|
|
12
|
+
Multiple: 'multiple',
|
|
13
|
+
Date: 'date',
|
|
14
|
+
DateTime: 'date-time',
|
|
15
|
+
DateRange: 'date-range',
|
|
16
|
+
Single: 'single',
|
|
17
|
+
Custom: 'custom',
|
|
18
|
+
Time: 'time',
|
|
19
|
+
};
|
|
20
|
+
exports.DEFAULT_LOCALE = new Intl.Locale('ru-RU');
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { KeyboardEvent, KeyboardEventHandler } from 'react';
|
|
2
|
+
import { MobileDroplistProps } from '@sbercloud/uikit-product-mobile-dropdown';
|
|
3
|
+
import { AccordionOption, BaseOption, ContentRenderProps, FilterOption, NestListOption } from './types';
|
|
4
|
+
type UseHandleOnKeyDownProps = {
|
|
5
|
+
setOpen(open: boolean): void;
|
|
6
|
+
};
|
|
7
|
+
export declare function useHandleOnKeyDown({ setOpen }: UseHandleOnKeyDownProps): (onKeyDown?: KeyboardEventHandler<HTMLElement>) => (e: KeyboardEvent<HTMLDivElement>) => void;
|
|
8
|
+
/**
|
|
9
|
+
* Нечеткий поиск среди айтемов по полям 'content.option', 'content.caption', 'content.description', 'label'
|
|
10
|
+
*/
|
|
11
|
+
export declare function useOptionSearch<T extends ContentRenderProps = ContentRenderProps>({ options, flatMapOptions, minSearchInputLength, disableFuzzySearch, }: {
|
|
12
|
+
options: FilterOption<T>[];
|
|
13
|
+
flatMapOptions: (BaseOption<T> | AccordionOption<T> | NestListOption<T>)[];
|
|
14
|
+
minSearchInputLength?: number;
|
|
15
|
+
disableFuzzySearch?: boolean;
|
|
16
|
+
}): (search: string) => FilterOption<T>[];
|
|
17
|
+
type UseAutoApplyProps = {
|
|
18
|
+
autoApply: boolean;
|
|
19
|
+
onApprove(): void;
|
|
20
|
+
onCancel(): void;
|
|
21
|
+
};
|
|
22
|
+
export declare function useAutoApplyFooter({ autoApply, onApprove, onCancel, }: UseAutoApplyProps): MobileDroplistProps['footer'];
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.useHandleOnKeyDown = useHandleOnKeyDown;
|
|
7
|
+
exports.useOptionSearch = useOptionSearch;
|
|
8
|
+
exports.useAutoApplyFooter = useAutoApplyFooter;
|
|
9
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
10
|
+
const fuzzy_search_1 = __importDefault(require("fuzzy-search"));
|
|
11
|
+
const react_1 = require("react");
|
|
12
|
+
const uikit_product_locale_1 = require("@sbercloud/uikit-product-locale");
|
|
13
|
+
const button_1 = require("@snack-uikit/button");
|
|
14
|
+
const constants_1 = require("../../constants");
|
|
15
|
+
const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
|
|
16
|
+
function useHandleOnKeyDown({ setOpen }) {
|
|
17
|
+
return (0, react_1.useCallback)((onKeyDown) => (e) => {
|
|
18
|
+
if (e.code === 'Space') {
|
|
19
|
+
e.stopPropagation();
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(e);
|
|
23
|
+
}
|
|
24
|
+
if (['ArrowDown'].includes(e.key)) {
|
|
25
|
+
e.preventDefault();
|
|
26
|
+
setOpen(true);
|
|
27
|
+
}
|
|
28
|
+
if (['ArrowUp'].includes(e.key)) {
|
|
29
|
+
e.preventDefault();
|
|
30
|
+
setOpen(false);
|
|
31
|
+
}
|
|
32
|
+
if (e.key === 'Tab') {
|
|
33
|
+
setOpen(false);
|
|
34
|
+
}
|
|
35
|
+
}, [setOpen]);
|
|
36
|
+
}
|
|
37
|
+
const DEFAULT_MIN_SEARCH_INPUT_LENGTH = 2;
|
|
38
|
+
/**
|
|
39
|
+
* Нечеткий поиск среди айтемов по полям 'content.option', 'content.caption', 'content.description', 'label'
|
|
40
|
+
*/
|
|
41
|
+
function useOptionSearch({ options, flatMapOptions, minSearchInputLength, disableFuzzySearch, }) {
|
|
42
|
+
return (0, react_1.useCallback)((search) => {
|
|
43
|
+
if (search.length < (minSearchInputLength !== null && minSearchInputLength !== void 0 ? minSearchInputLength : DEFAULT_MIN_SEARCH_INPUT_LENGTH))
|
|
44
|
+
return options;
|
|
45
|
+
if (disableFuzzySearch) {
|
|
46
|
+
return options.filter(option => {
|
|
47
|
+
var _a, _b;
|
|
48
|
+
const fieldsForSearch = [option.label];
|
|
49
|
+
if ('contentRenderProps' in option) {
|
|
50
|
+
fieldsForSearch.push((_a = option === null || option === void 0 ? void 0 : option.contentRenderProps) === null || _a === void 0 ? void 0 : _a.description);
|
|
51
|
+
fieldsForSearch.push((_b = option === null || option === void 0 ? void 0 : option.contentRenderProps) === null || _b === void 0 ? void 0 : _b.caption);
|
|
52
|
+
}
|
|
53
|
+
return fieldsForSearch
|
|
54
|
+
.filter((v) => Boolean(v))
|
|
55
|
+
.some(value => value.toString().includes(search));
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return new fuzzy_search_1.default(flatMapOptions, ['label', 'contentRenderProps.description', 'contentRenderProps.caption'], {}).search(search);
|
|
59
|
+
}, [disableFuzzySearch, flatMapOptions, minSearchInputLength, options]);
|
|
60
|
+
}
|
|
61
|
+
function useAutoApplyFooter({ autoApply, onApprove, onCancel, }) {
|
|
62
|
+
const { t } = (0, uikit_product_locale_1.useLocale)('Chips');
|
|
63
|
+
return (0, react_1.useMemo)(() => {
|
|
64
|
+
if (autoApply) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.autoApplyFooter, "data-test-id": constants_1.CHIP_CHOICE_TEST_IDS.footer, children: [(0, jsx_runtime_1.jsx)(button_1.ButtonFunction, { fullWidth: true, size: 'l', appearance: 'neutral', label: t('cancel'), onClick: onCancel, "data-test-id": constants_1.CHIP_CHOICE_TEST_IDS.cancelButton }), (0, jsx_runtime_1.jsx)(button_1.ButtonFilled, { size: 'l', fullWidth: true, appearance: 'primary', label: t('apply'), onClick: onApprove, "data-test-id": constants_1.CHIP_CHOICE_TEST_IDS.approveButton })] }));
|
|
68
|
+
}, [t, autoApply, onApprove, onCancel]);
|
|
69
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CustomContentRenderProps, MobileChipChoiceCustom, MobileChipChoiceCustomProps, MobileChipChoiceDate, MobileChipChoiceDateProps, MobileChipChoiceDateRange, MobileChipChoiceDateRangeProps, MobileChipChoiceMultiple, MobileChipChoiceSingle, MobileChipChoiceTime, MobileChipChoiceTimeProps } from './components';
|
|
2
|
+
export type { FilterOption, MobileChipChoiceMultipleProps, MobileChipChoiceSingleProps, ContentRenderProps, } from './types';
|
|
3
|
+
export type { MobileChipChoiceCustomProps, MobileChipChoiceDateProps, MobileChipChoiceDateRangeProps, MobileChipChoiceTimeProps, CustomContentRenderProps, };
|
|
4
|
+
export declare namespace MobileChipChoice {
|
|
5
|
+
const Custom: typeof MobileChipChoiceCustom;
|
|
6
|
+
const Single: typeof MobileChipChoiceSingle;
|
|
7
|
+
const Multiple: typeof MobileChipChoiceMultiple;
|
|
8
|
+
const Date: typeof MobileChipChoiceDate;
|
|
9
|
+
const DateRange: typeof MobileChipChoiceDateRange;
|
|
10
|
+
const Time: typeof MobileChipChoiceTime;
|
|
11
|
+
}
|
|
12
|
+
export { isAccordionOption, isBaseOption, isGroupOption, isGroupSelectOption, isNextListOption } from './utils';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isNextListOption = exports.isGroupSelectOption = exports.isGroupOption = exports.isBaseOption = exports.isAccordionOption = exports.MobileChipChoice = void 0;
|
|
4
|
+
const components_1 = require("./components");
|
|
5
|
+
var MobileChipChoice;
|
|
6
|
+
(function (MobileChipChoice) {
|
|
7
|
+
MobileChipChoice.Custom = components_1.MobileChipChoiceCustom;
|
|
8
|
+
MobileChipChoice.Single = components_1.MobileChipChoiceSingle;
|
|
9
|
+
MobileChipChoice.Multiple = components_1.MobileChipChoiceMultiple;
|
|
10
|
+
MobileChipChoice.Date = components_1.MobileChipChoiceDate;
|
|
11
|
+
MobileChipChoice.DateRange = components_1.MobileChipChoiceDateRange;
|
|
12
|
+
MobileChipChoice.Time = components_1.MobileChipChoiceTime;
|
|
13
|
+
})(MobileChipChoice || (exports.MobileChipChoice = MobileChipChoice = {}));
|
|
14
|
+
var utils_1 = require("./utils");
|
|
15
|
+
Object.defineProperty(exports, "isAccordionOption", { enumerable: true, get: function () { return utils_1.isAccordionOption; } });
|
|
16
|
+
Object.defineProperty(exports, "isBaseOption", { enumerable: true, get: function () { return utils_1.isBaseOption; } });
|
|
17
|
+
Object.defineProperty(exports, "isGroupOption", { enumerable: true, get: function () { return utils_1.isGroupOption; } });
|
|
18
|
+
Object.defineProperty(exports, "isGroupSelectOption", { enumerable: true, get: function () { return utils_1.isGroupSelectOption; } });
|
|
19
|
+
Object.defineProperty(exports, "isNextListOption", { enumerable: true, get: function () { return utils_1.isNextListOption; } });
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
.label,
|
|
2
|
+
.value{
|
|
3
|
+
display:inline-flex;
|
|
4
|
+
align-items:center;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.choiceChip{
|
|
8
|
+
background-color:var(--sys-neutral-background1-level, #fdfdfd);
|
|
9
|
+
border-color:var(--sys-neutral-decor-default, #dde0ea);
|
|
10
|
+
cursor:pointer;
|
|
11
|
+
position:relative;
|
|
12
|
+
display:inline-flex;
|
|
13
|
+
align-items:center;
|
|
14
|
+
box-sizing:border-box;
|
|
15
|
+
width:-moz-max-content;
|
|
16
|
+
width:max-content;
|
|
17
|
+
min-width:-moz-max-content;
|
|
18
|
+
min-width:max-content;
|
|
19
|
+
margin:0;
|
|
20
|
+
padding:0;
|
|
21
|
+
text-decoration:none;
|
|
22
|
+
text-transform:none;
|
|
23
|
+
border-style:solid;
|
|
24
|
+
outline:0;
|
|
25
|
+
outline-offset:0;
|
|
26
|
+
}
|
|
27
|
+
.choiceChip .spinner{
|
|
28
|
+
display:inline-flex;
|
|
29
|
+
}
|
|
30
|
+
.choiceChip .icon{
|
|
31
|
+
display:inline-flex;
|
|
32
|
+
}
|
|
33
|
+
.choiceChip .icon svg{
|
|
34
|
+
width:var(--size-icon-container-s, 24px) !important;
|
|
35
|
+
height:var(--size-icon-container-s, 24px) !important;
|
|
36
|
+
}
|
|
37
|
+
.choiceChip .labelLayout{
|
|
38
|
+
display:inline-flex;
|
|
39
|
+
align-items:center;
|
|
40
|
+
min-width:0;
|
|
41
|
+
}
|
|
42
|
+
.choiceChip[data-size=xs]{
|
|
43
|
+
height:var(--size-chips-xs, 24px);
|
|
44
|
+
padding-left:var(--space-chips-container-padding-xs, 3px);
|
|
45
|
+
padding-right:var(--space-chips-container-padding-xs, 3px);
|
|
46
|
+
border-radius:var(--radius-chips-xs, 12px);
|
|
47
|
+
border-width:var(--border-width-chips-single, 1px);
|
|
48
|
+
}
|
|
49
|
+
.choiceChip[data-size=xs] .label{
|
|
50
|
+
font-family:var(--light-label-s-font-family, SB Sans Interface);
|
|
51
|
+
font-weight:var(--light-label-s-font-weight, Regular);
|
|
52
|
+
line-height:var(--light-label-s-line-height, 14px);
|
|
53
|
+
font-size:var(--light-label-s-font-size, 11px);
|
|
54
|
+
letter-spacing:var(--light-label-s-letter-spacing, 0px);
|
|
55
|
+
paragraph-spacing:var(--light-label-s-paragraph-spacing, 6.05px);
|
|
56
|
+
}
|
|
57
|
+
.choiceChip[data-size=xs] .labelLayout{
|
|
58
|
+
padding-left:var(--space-chips-label-layout-padding-xs, 4px);
|
|
59
|
+
padding-right:var(--space-chips-label-layout-padding-xs, 4px);
|
|
60
|
+
gap:var(--space-chips-label-layout-gap, 2px);
|
|
61
|
+
}
|
|
62
|
+
.choiceChip[data-size=s]{
|
|
63
|
+
height:var(--size-chips-s, 32px);
|
|
64
|
+
padding-left:var(--space-chips-container-padding-s, 3px);
|
|
65
|
+
padding-right:var(--space-chips-container-padding-s, 3px);
|
|
66
|
+
border-radius:var(--radius-chips-s, 16px);
|
|
67
|
+
border-width:var(--border-width-chips-single, 1px);
|
|
68
|
+
}
|
|
69
|
+
.choiceChip[data-size=s] .label{
|
|
70
|
+
font-family:var(--light-label-m-font-family, SB Sans Interface);
|
|
71
|
+
font-weight:var(--light-label-m-font-weight, Regular);
|
|
72
|
+
line-height:var(--light-label-m-line-height, 16px);
|
|
73
|
+
font-size:var(--light-label-m-font-size, 12px);
|
|
74
|
+
letter-spacing:var(--light-label-m-letter-spacing, 0px);
|
|
75
|
+
paragraph-spacing:var(--light-label-m-paragraph-spacing, 6.6px);
|
|
76
|
+
}
|
|
77
|
+
.choiceChip[data-size=s] .labelLayout{
|
|
78
|
+
padding-left:var(--space-chips-label-layout-padding-s, 4px);
|
|
79
|
+
padding-right:var(--space-chips-label-layout-padding-s, 4px);
|
|
80
|
+
gap:var(--space-chips-label-layout-gap, 2px);
|
|
81
|
+
}
|
|
82
|
+
.choiceChip[data-size=m]{
|
|
83
|
+
height:var(--size-chips-m, 40px);
|
|
84
|
+
padding-left:var(--space-chips-container-padding-m, 7px);
|
|
85
|
+
padding-right:var(--space-chips-container-padding-m, 7px);
|
|
86
|
+
border-radius:var(--radius-chips-m, 20px);
|
|
87
|
+
border-width:var(--border-width-chips-single, 1px);
|
|
88
|
+
}
|
|
89
|
+
.choiceChip[data-size=m] .label{
|
|
90
|
+
font-family:var(--sans-label-l-font-family, SB Sans Interface);
|
|
91
|
+
font-weight:var(--sans-label-l-font-weight, Semibold);
|
|
92
|
+
line-height:var(--sans-label-l-line-height, 20px);
|
|
93
|
+
font-size:var(--sans-label-l-font-size, 14px);
|
|
94
|
+
letter-spacing:var(--sans-label-l-letter-spacing, 0px);
|
|
95
|
+
paragraph-spacing:var(--sans-label-l-paragraph-spacing, 7.7px);
|
|
96
|
+
}
|
|
97
|
+
.choiceChip[data-size=m] .labelLayout{
|
|
98
|
+
padding-left:var(--space-chips-label-layout-padding-m, 8px);
|
|
99
|
+
padding-right:var(--space-chips-label-layout-padding-m, 8px);
|
|
100
|
+
gap:var(--space-chips-label-layout-gap, 2px);
|
|
101
|
+
}
|
|
102
|
+
.choiceChip[data-size=l]{
|
|
103
|
+
height:var(--size-chips-l, 48px);
|
|
104
|
+
padding-left:var(--space-chips-container-padding-l, 11px);
|
|
105
|
+
padding-right:var(--space-chips-container-padding-l, 11px);
|
|
106
|
+
border-radius:var(--radius-chips-l, 24px);
|
|
107
|
+
border-width:var(--border-width-chips-single, 1px);
|
|
108
|
+
}
|
|
109
|
+
.choiceChip[data-size=l] .label{
|
|
110
|
+
font-family:var(--light-label-l-font-family, SB Sans Interface);
|
|
111
|
+
font-weight:var(--light-label-l-font-weight, Regular);
|
|
112
|
+
line-height:var(--light-label-l-line-height, 20px);
|
|
113
|
+
font-size:var(--light-label-l-font-size, 14px);
|
|
114
|
+
letter-spacing:var(--light-label-l-letter-spacing, 0px);
|
|
115
|
+
paragraph-spacing:var(--light-label-l-paragraph-spacing, 7.7px);
|
|
116
|
+
}
|
|
117
|
+
.choiceChip[data-size=l] .labelLayout{
|
|
118
|
+
padding-left:var(--space-chips-label-layout-padding-l, 12px);
|
|
119
|
+
padding-right:var(--space-chips-label-layout-padding-l, 12px);
|
|
120
|
+
gap:var(--space-chips-label-layout-gap, 2px);
|
|
121
|
+
}
|
|
122
|
+
.choiceChip .label,
|
|
123
|
+
.choiceChip .value{
|
|
124
|
+
color:var(--sys-neutral-text-support, #6d707f);
|
|
125
|
+
}
|
|
126
|
+
.choiceChip .icon{
|
|
127
|
+
color:var(--sys-neutral-text-light, #8b8e9b);
|
|
128
|
+
}
|
|
129
|
+
.choiceChip[data-size=xs] .value{
|
|
130
|
+
font-family:var(--sans-label-s-font-family, SB Sans Interface);
|
|
131
|
+
font-weight:var(--sans-label-s-font-weight, Semibold);
|
|
132
|
+
line-height:var(--sans-label-s-line-height, 14px);
|
|
133
|
+
font-size:var(--sans-label-s-font-size, 11px);
|
|
134
|
+
letter-spacing:var(--sans-label-s-letter-spacing, 0px);
|
|
135
|
+
paragraph-spacing:var(--sans-label-s-paragraph-spacing, 6.05px);
|
|
136
|
+
}
|
|
137
|
+
.choiceChip[data-size=s] .value{
|
|
138
|
+
font-family:var(--sans-label-m-font-family, SB Sans Interface);
|
|
139
|
+
font-weight:var(--sans-label-m-font-weight, Semibold);
|
|
140
|
+
line-height:var(--sans-label-m-line-height, 16px);
|
|
141
|
+
font-size:var(--sans-label-m-font-size, 12px);
|
|
142
|
+
letter-spacing:var(--sans-label-m-letter-spacing, 0px);
|
|
143
|
+
paragraph-spacing:var(--sans-label-m-paragraph-spacing, 6.6px);
|
|
144
|
+
}
|
|
145
|
+
.choiceChip[data-size=m] .value{
|
|
146
|
+
font-family:var(--sans-label-l-font-family, SB Sans Interface);
|
|
147
|
+
font-weight:var(--sans-label-l-font-weight, Semibold);
|
|
148
|
+
line-height:var(--sans-label-l-line-height, 20px);
|
|
149
|
+
font-size:var(--sans-label-l-font-size, 14px);
|
|
150
|
+
letter-spacing:var(--sans-label-l-letter-spacing, 0px);
|
|
151
|
+
paragraph-spacing:var(--sans-label-l-paragraph-spacing, 7.7px);
|
|
152
|
+
}
|
|
153
|
+
.choiceChip[data-size=l] .value{
|
|
154
|
+
font-family:var(--sans-label-l-font-family, SB Sans Interface);
|
|
155
|
+
font-weight:var(--sans-label-l-font-weight, Semibold);
|
|
156
|
+
line-height:var(--sans-label-l-line-height, 20px);
|
|
157
|
+
font-size:var(--sans-label-l-font-size, 14px);
|
|
158
|
+
letter-spacing:var(--sans-label-l-letter-spacing, 0px);
|
|
159
|
+
paragraph-spacing:var(--sans-label-l-paragraph-spacing, 7.7px);
|
|
160
|
+
}
|
|
161
|
+
.choiceChip:hover, .choiceChip:active, .choiceChip:focus-visible{
|
|
162
|
+
background-color:var(--sys-neutral-background2-level, #ffffff);
|
|
163
|
+
border-color:var(--sys-neutral-decor-hovered, #cfd2dc);
|
|
164
|
+
}
|
|
165
|
+
.choiceChip:hover .label, .choiceChip:active .label, .choiceChip:focus-visible .label{
|
|
166
|
+
color:var(--sys-neutral-text-support, #6d707f);
|
|
167
|
+
}
|
|
168
|
+
.choiceChip:hover .value, .choiceChip:active .value, .choiceChip:focus-visible .value{
|
|
169
|
+
color:var(--sys-neutral-text-main, #41424e);
|
|
170
|
+
}
|
|
171
|
+
.choiceChip:focus-visible{
|
|
172
|
+
outline-width:var(--border-state-focus-s-border-width, 2px);
|
|
173
|
+
outline-style:var(--border-state-focus-s-border-style, solid);
|
|
174
|
+
outline-color:var(--border-state-focus-s-border-color, );
|
|
175
|
+
outline-color:var(--sys-available-complementary, #1c1c24);
|
|
176
|
+
outline-offset:var(--spacing-state-focus-offset, 2px);
|
|
177
|
+
}
|
|
178
|
+
.choiceChip[data-disabled]{
|
|
179
|
+
cursor:not-allowed;
|
|
180
|
+
background-color:var(--sys-neutral-background, #eeeff3);
|
|
181
|
+
border-color:var(--sys-neutral-decor-disabled, #e6e8ef);
|
|
182
|
+
}
|
|
183
|
+
.choiceChip[data-disabled] .label,
|
|
184
|
+
.choiceChip[data-disabled] .value{
|
|
185
|
+
color:var(--sys-neutral-text-light, #8b8e9b);
|
|
186
|
+
}
|
|
187
|
+
.choiceChip[data-loading]{
|
|
188
|
+
background-color:var(--sys-neutral-background, #eeeff3);
|
|
189
|
+
border-color:var(--sys-neutral-decor-activated, #b6bac7);
|
|
190
|
+
cursor:progress;
|
|
191
|
+
}
|
|
192
|
+
.choiceChip[data-loading] true .spinner{
|
|
193
|
+
display:flex;
|
|
194
|
+
align-items:center;
|
|
195
|
+
justify-content:center;
|
|
196
|
+
}
|
|
197
|
+
.choiceChip[data-loading] .label,
|
|
198
|
+
.choiceChip[data-loading] .value{
|
|
199
|
+
color:var(--sys-neutral-text-support, #6d707f);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.triggerClassName{
|
|
203
|
+
--offset:var(--space-drop-list-drop-offset, 4px);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.autoApplyFooter{
|
|
207
|
+
display:flex;
|
|
208
|
+
align-items:center;
|
|
209
|
+
justify-content:space-between;
|
|
210
|
+
gap:8px;
|
|
211
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { MouseEventHandler, ReactNode } from 'react';
|
|
2
|
+
import { BaseItemProps, DroplistProps, GroupItemProps, GroupSelectItemProps, ItemContentProps, ItemId, NextListItemProps, SelectionMultipleState, SelectionSingleState } from '@sbercloud/uikit-product-mobile-dropdown';
|
|
3
|
+
import { TruncateStringProps } from '@snack-uikit/truncate-string';
|
|
4
|
+
import { WithSupportProps } from '@snack-uikit/utils';
|
|
5
|
+
import { BaseChipProps, Size } from '../../types';
|
|
6
|
+
export type AnyType = any;
|
|
7
|
+
export type ContentRenderProps = Omit<ItemContentProps, 'option' | 'disabled'>;
|
|
8
|
+
export type FilterOption<T extends ContentRenderProps = ContentRenderProps> = BaseOption<T> | AccordionOption<T> | GroupOption<T> | GroupSelectOption<T> | NestListOption<T>;
|
|
9
|
+
export type BaseOption<T extends ContentRenderProps = ContentRenderProps> = Omit<BaseItemProps, 'content' | 'id'> & {
|
|
10
|
+
value: ItemId;
|
|
11
|
+
label: ItemId;
|
|
12
|
+
contentRenderProps?: T;
|
|
13
|
+
};
|
|
14
|
+
export type AccordionOption<T extends ContentRenderProps = ContentRenderProps> = Omit<BaseOption<T>, 'switch' | 'inactive' | 'value'> & {
|
|
15
|
+
id?: ItemId;
|
|
16
|
+
type: 'collapse';
|
|
17
|
+
options: FilterOption<T>[];
|
|
18
|
+
};
|
|
19
|
+
export type GroupOption<T extends ContentRenderProps = ContentRenderProps> = Omit<GroupItemProps, 'items'> & {
|
|
20
|
+
options: FilterOption<T>[];
|
|
21
|
+
};
|
|
22
|
+
export type GroupSelectOption<T extends ContentRenderProps = ContentRenderProps> = Omit<GroupSelectItemProps, 'items'> & {
|
|
23
|
+
options: FilterOption<T>[];
|
|
24
|
+
};
|
|
25
|
+
export type NestListOption<T extends ContentRenderProps = ContentRenderProps> = Omit<NextListItemProps, 'items' | 'content'> & {
|
|
26
|
+
label: ItemId;
|
|
27
|
+
contentRenderProps?: T;
|
|
28
|
+
options: FilterOption<T>[];
|
|
29
|
+
};
|
|
30
|
+
export type ChipChoiceCommonProps = WithSupportProps<Partial<BaseChipProps> & {
|
|
31
|
+
/** Размер */
|
|
32
|
+
size?: Size;
|
|
33
|
+
/** Колбек обработки клика */
|
|
34
|
+
onClick?: MouseEventHandler<HTMLButtonElement | HTMLDivElement>;
|
|
35
|
+
/** Колбек для клика по кнопке очистки */
|
|
36
|
+
onClearButtonClick?: MouseEventHandler<HTMLButtonElement>;
|
|
37
|
+
/** Управляет состоянием показан/не показан. */
|
|
38
|
+
open?: boolean;
|
|
39
|
+
/** Колбек отображения компонента. Срабатывает при изменении состояния open. */
|
|
40
|
+
onOpenChange?(isOpen: boolean): void;
|
|
41
|
+
/** Вариант обрезания значения */
|
|
42
|
+
truncateVariant?: TruncateStringProps['variant'];
|
|
43
|
+
}>;
|
|
44
|
+
export type ChipChoiceSelectCommonProps<T extends ContentRenderProps = ContentRenderProps> = ChipChoiceCommonProps & {
|
|
45
|
+
options: FilterOption<T>[];
|
|
46
|
+
contentRender?(option: {
|
|
47
|
+
label: ItemId;
|
|
48
|
+
value?: ItemId;
|
|
49
|
+
contentRenderProps?: T;
|
|
50
|
+
}): ReactNode;
|
|
51
|
+
filterFn?(option: {
|
|
52
|
+
label: ItemId;
|
|
53
|
+
value?: ItemId;
|
|
54
|
+
contentRenderProps?: T;
|
|
55
|
+
}): boolean;
|
|
56
|
+
searchable?: boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Отключает Fuzzy Search. Иногда в дроплисте могут быть различные айдишники - нам важно искать их без Fuzzy Search
|
|
59
|
+
* @default false
|
|
60
|
+
*/
|
|
61
|
+
disableFuzzySearch?: boolean;
|
|
62
|
+
/** Флаг, отвечающий за применение выбранного значения по умолчанию */
|
|
63
|
+
autoApply?: boolean;
|
|
64
|
+
/** Колбек основной кнопки */
|
|
65
|
+
onApprove?(): void;
|
|
66
|
+
/** Колбек кнопки отмены */
|
|
67
|
+
onCancel?(): void;
|
|
68
|
+
} & Pick<DroplistProps, 'selection' | 'scrollRef' | 'scrollContainerRef' | 'noDataState' | 'footer' | 'footerActiveElementsRefs' | 'dataError' | 'errorDataState' | 'dataFiltered' | 'noResultsState' | 'loading' | 'virtualized'>;
|
|
69
|
+
export type MobileChipChoiceSingleProps<T extends ContentRenderProps = ContentRenderProps> = ChipChoiceSelectCommonProps<T> & Omit<SelectionSingleState, 'mode'> & {
|
|
70
|
+
/** Массив опций */
|
|
71
|
+
options: FilterOption<T>[];
|
|
72
|
+
/** Колбек формирующий отображение выбранного значения. Принимает выбранное значение. По умолчанию для отображения используется FilterOption.label */
|
|
73
|
+
valueRender?(option?: BaseOption<T>): ReactNode;
|
|
74
|
+
};
|
|
75
|
+
export type MobileChipChoiceMultipleProps<T extends ContentRenderProps = ContentRenderProps> = ChipChoiceSelectCommonProps<T> & Omit<SelectionMultipleState, 'mode'> & {
|
|
76
|
+
/** Массив опций */
|
|
77
|
+
options: FilterOption<T>[];
|
|
78
|
+
/** Колбек формирующий отображение выбранного значения. Принимает выбранное значение. По умолчанию для отображения используется FilterOption.label */
|
|
79
|
+
valueRender?(option?: BaseOption<T>[]): ReactNode;
|
|
80
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./typeGuards"), exports);
|
|
18
|
+
__exportStar(require("./utils"), exports);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { ItemId, MobileDroplistProps } from '@sbercloud/uikit-product-mobile-dropdown';
|
|
3
|
+
import { ContentRenderProps, FilterOption } from '../types';
|
|
4
|
+
export declare function transformOptionsToItems<T extends ContentRenderProps = ContentRenderProps>(options: FilterOption<T>[], contentRender?: (option: {
|
|
5
|
+
label: ItemId;
|
|
6
|
+
value?: ItemId;
|
|
7
|
+
contentRenderProps?: T;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
}) => ReactNode): MobileDroplistProps['items'];
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.transformOptionsToItems = transformOptionsToItems;
|
|
15
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
16
|
+
const helperComponents_1 = require("../../../helperComponents");
|
|
17
|
+
const typeGuards_1 = require("./typeGuards");
|
|
18
|
+
function transformOptionsToItems(options, contentRender) {
|
|
19
|
+
return options.map(option => {
|
|
20
|
+
if ((0, typeGuards_1.isAccordionOption)(option) || (0, typeGuards_1.isNextListOption)(option)) {
|
|
21
|
+
const { label, options, id, contentRenderProps, disabled } = option, rest = __rest(option, ["label", "options", "id", "contentRenderProps", "disabled"]);
|
|
22
|
+
return Object.assign(Object.assign({}, rest), { disabled,
|
|
23
|
+
id, content: contentRender ? (contentRender({ label, contentRenderProps, disabled })) : ((0, jsx_runtime_1.jsx)(helperComponents_1.ItemContent, Object.assign({ option: label }, contentRenderProps, { disabled: disabled }))), items: transformOptionsToItems(options) });
|
|
24
|
+
}
|
|
25
|
+
if ((0, typeGuards_1.isGroupSelectOption)(option)) {
|
|
26
|
+
const { options } = option, rest = __rest(option, ["options"]);
|
|
27
|
+
return Object.assign(Object.assign({}, rest), { items: transformOptionsToItems(options) });
|
|
28
|
+
}
|
|
29
|
+
if ((0, typeGuards_1.isGroupOption)(option)) {
|
|
30
|
+
const { options } = option, rest = __rest(option, ["options"]);
|
|
31
|
+
return Object.assign(Object.assign({}, rest), { items: transformOptionsToItems(options) });
|
|
32
|
+
}
|
|
33
|
+
const _a = option, { label, value, contentRenderProps, disabled } = _a, rest = __rest(_a, ["label", "value", "contentRenderProps", "disabled"]);
|
|
34
|
+
return Object.assign(Object.assign({}, rest), { disabled, id: value, content: contentRender ? (contentRender({ label, contentRenderProps, disabled, value })) : ((0, jsx_runtime_1.jsx)(helperComponents_1.ItemContent, Object.assign({ option: label }, contentRenderProps, { disabled: disabled }))) });
|
|
35
|
+
});
|
|
36
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AccordionOption, AnyType, BaseOption, ContentRenderProps, GroupOption, GroupSelectOption, NestListOption } from '../types';
|
|
2
|
+
export declare function isBaseOption<T extends ContentRenderProps = ContentRenderProps>(option: AnyType): option is BaseOption<T>;
|
|
3
|
+
export declare function isAccordionOption<T extends ContentRenderProps = ContentRenderProps>(option: AnyType): option is AccordionOption<T>;
|
|
4
|
+
export declare function isNextListOption<T extends ContentRenderProps = ContentRenderProps>(option: AnyType): option is NestListOption<T>;
|
|
5
|
+
export declare function isGroupOption<T extends ContentRenderProps = ContentRenderProps>(option: AnyType): option is GroupOption<T>;
|
|
6
|
+
export declare function isGroupSelectOption<T extends ContentRenderProps = ContentRenderProps>(option: AnyType): option is GroupSelectOption<T>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isBaseOption = isBaseOption;
|
|
4
|
+
exports.isAccordionOption = isAccordionOption;
|
|
5
|
+
exports.isNextListOption = isNextListOption;
|
|
6
|
+
exports.isGroupOption = isGroupOption;
|
|
7
|
+
exports.isGroupSelectOption = isGroupSelectOption;
|
|
8
|
+
function isBaseOption(option) {
|
|
9
|
+
return !('options' in option);
|
|
10
|
+
}
|
|
11
|
+
function isAccordionOption(option) {
|
|
12
|
+
return option && 'options' in option && option['type'] === 'collapse';
|
|
13
|
+
}
|
|
14
|
+
function isNextListOption(option) {
|
|
15
|
+
return option && 'options' in option && option['type'] === 'next-list';
|
|
16
|
+
}
|
|
17
|
+
function isGroupOption(option) {
|
|
18
|
+
return option && 'options' in option && option['type'] === 'group';
|
|
19
|
+
}
|
|
20
|
+
function isGroupSelectOption(option) {
|
|
21
|
+
return option && 'options' in option && option['type'] === 'group-select';
|
|
22
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { ItemId } from '@sbercloud/uikit-product-mobile-dropdown';
|
|
3
|
+
import { ContentRenderProps, FilterOption } from '../types';
|
|
4
|
+
export type FlattenOption<T extends ContentRenderProps = ContentRenderProps> = {
|
|
5
|
+
value: ItemId;
|
|
6
|
+
label: ItemId;
|
|
7
|
+
contentRenderProps?: T;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
hidden?: boolean;
|
|
10
|
+
afterContent?: ReactNode;
|
|
11
|
+
beforeContent?: ReactNode;
|
|
12
|
+
};
|
|
13
|
+
type KindFlattenOptionsProps<T extends ContentRenderProps = ContentRenderProps> = {
|
|
14
|
+
options: FilterOption<T>[];
|
|
15
|
+
};
|
|
16
|
+
export declare function kindFlattenOptions<T extends ContentRenderProps = ContentRenderProps>({ options, }: KindFlattenOptionsProps<T>): {
|
|
17
|
+
flattenOptions: Record<string, FlattenOption<T>>;
|
|
18
|
+
};
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.kindFlattenOptions = kindFlattenOptions;
|
|
4
|
+
const typeGuards_1 = require("./typeGuards");
|
|
5
|
+
function kindFlattenOptions({ options, }) {
|
|
6
|
+
const flattenOptions = {};
|
|
7
|
+
function flatten(option) {
|
|
8
|
+
if ((0, typeGuards_1.isBaseOption)(option)) {
|
|
9
|
+
const { value, label, contentRenderProps, disabled, afterContent, beforeContent, hidden } = option;
|
|
10
|
+
flattenOptions[value] = {
|
|
11
|
+
value,
|
|
12
|
+
label,
|
|
13
|
+
contentRenderProps,
|
|
14
|
+
disabled,
|
|
15
|
+
afterContent,
|
|
16
|
+
beforeContent,
|
|
17
|
+
hidden,
|
|
18
|
+
};
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const { options } = option;
|
|
22
|
+
for (let idx = 0; idx < options.length; idx++) {
|
|
23
|
+
flatten(options[idx]);
|
|
24
|
+
}
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
for (let idx = 0; idx < options.length; idx++) {
|
|
28
|
+
flatten(options[idx]);
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
flattenOptions,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { WithSupportProps } from '@snack-uikit/utils';
|
|
2
|
+
import { ChipChoiceProps, ChipChoiceRowSize, OmitBetter } from './types';
|
|
3
|
+
export type FiltersState = Record<string, unknown>;
|
|
4
|
+
export type MobileChipChoiceRowFilter = OmitBetter<ChipChoiceProps, 'onChange' | 'value' | 'size' | 'defaultValue'> & {
|
|
5
|
+
pinned?: boolean;
|
|
6
|
+
};
|
|
7
|
+
export type MobileChipChoiceRowProps<TState extends FiltersState> = WithSupportProps<{
|
|
8
|
+
/** Состояние фильтров */
|
|
9
|
+
value?: TState;
|
|
10
|
+
/** Начальное состояние фильтров */
|
|
11
|
+
defaultValue?: Partial<TState>;
|
|
12
|
+
/** Колбек изменения состояния фильтров */
|
|
13
|
+
onChange?(filters: TState): void;
|
|
14
|
+
/** Массив чипов */
|
|
15
|
+
filters: MobileChipChoiceRowFilter[];
|
|
16
|
+
/** Размер @default 's' */
|
|
17
|
+
size?: ChipChoiceRowSize;
|
|
18
|
+
/** CSS-класс */
|
|
19
|
+
className?: string;
|
|
20
|
+
/** Скрыть/показать кнопку очиски фильтров @default true */
|
|
21
|
+
showClearButton?: boolean;
|
|
22
|
+
/** Скрыть/показать кнопку добавления фильров @default true */
|
|
23
|
+
showAddButton?: boolean;
|
|
24
|
+
/** Состояние для видимых фильтров */
|
|
25
|
+
visibleFilters?: string[];
|
|
26
|
+
/** Коллбек на изменение видимых фильтров */
|
|
27
|
+
onVisibleFiltersChange?(value: string[]): void;
|
|
28
|
+
}>;
|
|
29
|
+
export declare function MobileChipChoiceRow<TState extends FiltersState>({ filters, onChange, showClearButton: showClearButtonProp, showAddButton, className, value, defaultValue: defaultValueProp, size, visibleFilters: visibleFiltersProp, onVisibleFiltersChange, ...rest }: MobileChipChoiceRowProps<TState>): import("react/jsx-runtime").JSX.Element;
|