@alfalab/core-components-picker-button 7.2.0 → 7.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/dist/{Component-2d26cd3f.d.ts → Component-d96d5e4c.d.ts} +39 -5
  3. package/dist/{Component-2d26cd3f.js → Component-d96d5e4c.js} +3 -3
  4. package/dist/Component.d.ts +2 -2
  5. package/dist/Component.js +10 -4
  6. package/dist/{esm/Component-003da863.d.ts → cssm/Component-aeb02c1b.d.ts} +39 -5
  7. package/dist/cssm/{Component-34f0d762.js → Component-aeb02c1b.js} +2 -2
  8. package/dist/cssm/Component.d.ts +2 -2
  9. package/dist/cssm/Component.js +9 -3
  10. package/dist/cssm/field/Component.js +1 -1
  11. package/dist/cssm/field/index.d.ts +1 -1
  12. package/dist/cssm/field/index.js +1 -1
  13. package/dist/cssm/index.js +1 -1
  14. package/dist/cssm/index.module.css +23 -0
  15. package/dist/{cssm/Component-34f0d762.d.ts → esm/Component-df824d76.d.ts} +39 -5
  16. package/dist/esm/{Component-003da863.js → Component-df824d76.js} +3 -3
  17. package/dist/esm/Component.d.ts +2 -2
  18. package/dist/esm/Component.js +10 -4
  19. package/dist/esm/field/Component.js +1 -1
  20. package/dist/esm/field/index.css +3 -3
  21. package/dist/esm/field/index.d.ts +1 -1
  22. package/dist/esm/field/index.js +1 -1
  23. package/dist/esm/index.css +25 -2
  24. package/dist/esm/index.js +1 -1
  25. package/dist/field/Component.js +1 -1
  26. package/dist/field/index.css +3 -3
  27. package/dist/field/index.d.ts +1 -1
  28. package/dist/field/index.js +1 -1
  29. package/dist/index.css +25 -2
  30. package/dist/index.js +1 -1
  31. package/dist/modern/Component.d.ts +2 -2
  32. package/dist/modern/Component.js +15 -8
  33. package/dist/modern/field/Component.d.ts +39 -5
  34. package/dist/modern/field/Component.js +3 -3
  35. package/dist/modern/field/index.css +3 -3
  36. package/dist/modern/index.css +25 -2
  37. package/package.json +4 -4
package/CHANGELOG.md CHANGED
@@ -3,6 +3,45 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [7.4.1](https://github.com/alfa-laboratory/core-components/compare/@alfalab/core-components-picker-button@7.4.0...@alfalab/core-components-picker-button@7.4.1) (2022-02-09)
7
+
8
+ **Note:** Version bump only for package @alfalab/core-components-picker-button
9
+
10
+
11
+
12
+
13
+
14
+ # [7.4.0](https://github.com/alfa-laboratory/core-components/compare/@alfalab/core-components-picker-button@7.3.1...@alfalab/core-components-picker-button@7.4.0) (2022-02-03)
15
+
16
+
17
+ ### Features
18
+
19
+ * **picker-button:** add conditional righAddons prop for custom icon ([#975](https://github.com/alfa-laboratory/core-components/issues/975)) ([d2544b7](https://github.com/alfa-laboratory/core-components/commit/d2544b74e56deda9cae735e5b3ca6a2d97aef94d))
20
+
21
+
22
+
23
+
24
+
25
+ ## [7.3.1](https://github.com/alfa-laboratory/core-components/compare/@alfalab/core-components-picker-button@7.3.0...@alfalab/core-components-picker-button@7.3.1) (2022-02-02)
26
+
27
+ **Note:** Version bump only for package @alfalab/core-components-picker-button
28
+
29
+
30
+
31
+
32
+
33
+ # [7.3.0](https://github.com/alfa-laboratory/core-components/compare/@alfalab/core-components-picker-button@7.2.0...@alfalab/core-components-picker-button@7.3.0) (2022-01-27)
34
+
35
+
36
+ ### Features
37
+
38
+ * **picker-button:** gap между picker-button и popover в 8px ([#935](https://github.com/alfa-laboratory/core-components/issues/935)) ([9b3aa2b](https://github.com/alfa-laboratory/core-components/commit/9b3aa2b70b534d8e571baa62b973e1f67667ac43))
39
+ * **select:** add OptionsListWithApply ([#948](https://github.com/alfa-laboratory/core-components/issues/948)) ([d8ef8dd](https://github.com/alfa-laboratory/core-components/commit/d8ef8dd257dfc100095c923c4f3e317787ed1877))
40
+
41
+
42
+
43
+
44
+
6
45
  # [7.2.0](https://github.com/alfa-laboratory/core-components/compare/@alfalab/core-components-picker-button@7.1.4...@alfalab/core-components-picker-button@7.2.0) (2021-12-29)
7
46
 
8
47
 
@@ -296,6 +296,10 @@ type BaseSelectProps = {
296
296
  * Дополнительный класс для пункта меню
297
297
  */
298
298
  optionClassName?: string;
299
+ /**
300
+ * Дополнительный класс для поповера
301
+ */
302
+ popperClassName?: string;
299
303
  /**
300
304
  * Список вариантов выбора
301
305
  */
@@ -439,6 +443,7 @@ type BaseSelectProps = {
439
443
  onChange?: (payload: {
440
444
  selected: OptionShape | null;
441
445
  selectedMultiple: OptionShape[];
446
+ initiator: OptionShape | null;
442
447
  name?: string;
443
448
  }) => void;
444
449
  /**
@@ -491,6 +496,14 @@ type FieldProps = {
491
496
  * Список выбранных пунктов
492
497
  */
493
498
  selectedMultiple?: OptionShape[];
499
+ /**
500
+ * Метод для ручной установки выбранных пунктов
501
+ */
502
+ setSelectedItems: (selected: OptionShape[]) => void;
503
+ /**
504
+ * Метод переключающий видимость выпадающего списка
505
+ */
506
+ toggleMenu: () => void;
494
507
  /**
495
508
  * Флаг, можно ли выбрать несколько значений
496
509
  */
@@ -568,10 +581,31 @@ type OptionsListProps = {
568
581
  /**
569
582
  * Компонент пункта меню
570
583
  */
571
- Option: (props: {
572
- option: OptionShape;
573
- index: number;
574
- }) => JSX.Element | null;
584
+ Option: FC<OptionProps>;
585
+ /**
586
+ * Функция для получения пропсов для ячейки
587
+ */
588
+ getOptionProps: (option: OptionShape, index: number) => OptionProps;
589
+ /**
590
+ * Список выбранных пунктов
591
+ */
592
+ selectedItems?: OptionShape[];
593
+ /**
594
+ * Метод для ручной установки выбранных пунктов
595
+ */
596
+ setSelectedItems: (selected: OptionShape[]) => void;
597
+ /**
598
+ * Метод переключающий видимость выпадающего списка
599
+ */
600
+ toggleMenu: () => void;
601
+ /**
602
+ * Контент шапки
603
+ */
604
+ header?: ReactNode;
605
+ /**
606
+ * Контент футера
607
+ */
608
+ footer?: ReactNode;
575
609
  /**
576
610
  * Список вариантов выбора
577
611
  */
@@ -645,7 +679,7 @@ type OptionProps = {
645
679
  */
646
680
  option: OptionShape;
647
681
  /**
648
- * Индект пункта
682
+ * Индекс пункта
649
683
  */
650
684
  index: number;
651
685
  /**
@@ -50,7 +50,7 @@ function __rest(s, e) {
50
50
  return t;
51
51
  }
52
52
 
53
- var styles = {"iconContainer":"picker-button__iconContainer_1wgjf","open":"picker-button__open_1wgjf"};
53
+ var styles = {"iconContainer":"picker-button__iconContainer_78x44","open":"picker-button__open_78x44"};
54
54
  require('./field/index.css')
55
55
 
56
56
  var Field = function (_a) {
@@ -59,8 +59,8 @@ var Field = function (_a) {
59
59
  var ref = innerProps.ref, restInnerProps = __rest(innerProps, ["ref"]);
60
60
  var buttonProps = exports.__assign(exports.__assign({}, restProps), restInnerProps);
61
61
  return (React__default['default'].createElement("div", { ref: ref },
62
- React__default['default'].createElement(coreComponentsButton.Button, exports.__assign({}, buttonProps, { rightAddons: React__default['default'].createElement("span", { className: cn__default['default'](styles.iconContainer, open && styles.open) },
63
- React__default['default'].createElement(Icon, { "data-test-id": 'picker-button-icon' })), block: true, view: view, size: buttonSize, className: cn__default['default'](styles.component, view === 'primary' && styles.primary, className) }), label)));
62
+ React__default['default'].createElement(coreComponentsButton.Button, exports.__assign({}, buttonProps, { rightAddons: rightAddons !== null && rightAddons !== void 0 ? rightAddons : (React__default['default'].createElement("span", { className: cn__default['default'](styles.iconContainer, open && styles.open) },
63
+ React__default['default'].createElement(Icon, { "data-test-id": 'picker-button-icon' }))), block: true, view: view, size: buttonSize, className: cn__default['default'](styles.component, view === 'primary' && styles.primary, className) }), label)));
64
64
  };
65
65
 
66
66
  exports.Field = Field;
@@ -3,13 +3,13 @@ import React from 'react';
3
3
  import { ButtonProps } from "@alfalab/core-components-button";
4
4
  import { BaseSelectProps } from "@alfalab/core-components-select";
5
5
  type PickerButtonSize = 'xs' | 's' | 'm';
6
- type PickerButtonProps = Omit<BaseSelectProps, 'Field' | 'placeholder' | 'Arrow' | 'autocomplete' | 'size' | 'onFocus' | 'selected' | 'closeOnSelect' | 'multiple' | 'fieldProps' | 'hint' | 'allowUnselect'> & Pick<ButtonProps, 'view' | 'loading' | 'leftAddons'> & {
6
+ type PickerButtonProps = Omit<BaseSelectProps, 'Field' | 'placeholder' | 'Arrow' | 'autocomplete' | 'size' | 'onFocus' | 'selected' | 'closeOnSelect' | 'multiple' | 'fieldProps' | 'hint' | 'allowUnselect'> & Pick<ButtonProps, 'view' | 'loading' | 'leftAddons' | 'rightAddons'> & {
7
7
  /**
8
8
  * Размер кнопки
9
9
  */
10
10
  size?: PickerButtonSize;
11
11
  };
12
- declare const PickerButton: React.ForwardRefExoticComponent<Pick<BaseSelectProps, "className" | "dataTestId" | "label" | "block" | "id" | "onBlur" | "onChange" | "onScroll" | "disabled" | "name" | "fieldClassName" | "error" | "preventFlip" | "open" | "options" | "valueRenderer" | "Optgroup" | "visibleOptions" | "Option" | "optionsListClassName" | "optionClassName" | "circularNavigation" | "nativeSelect" | "defaultOpen" | "popoverPosition" | "optionsListWidth" | "optionsSize" | "optionsListProps" | "optionProps" | "onOpen" | "OptionsList" | "updatePopover" | "zIndexPopover" | "showEmptyOptionsList"> & Pick<Partial<import("@alfalab/core-components-button").ComponentProps & React.AnchorHTMLAttributes<HTMLAnchorElement>> | Partial<import("@alfalab/core-components-button").ComponentProps & React.ButtonHTMLAttributes<HTMLButtonElement>>, "view" | "leftAddons" | "loading"> & {
12
+ declare const PickerButton: React.ForwardRefExoticComponent<Pick<BaseSelectProps, "className" | "dataTestId" | "label" | "block" | "id" | "onBlur" | "onChange" | "onScroll" | "disabled" | "name" | "fieldClassName" | "error" | "preventFlip" | "popperClassName" | "open" | "options" | "valueRenderer" | "Optgroup" | "visibleOptions" | "Option" | "optionsListClassName" | "optionClassName" | "circularNavigation" | "nativeSelect" | "defaultOpen" | "popoverPosition" | "optionsListWidth" | "optionsSize" | "optionsListProps" | "optionProps" | "onOpen" | "OptionsList" | "updatePopover" | "zIndexPopover" | "showEmptyOptionsList"> & Pick<Partial<import("@alfalab/core-components-button").ComponentProps & React.AnchorHTMLAttributes<HTMLAnchorElement>> | Partial<import("@alfalab/core-components-button").ComponentProps & React.ButtonHTMLAttributes<HTMLButtonElement>>, "view" | "leftAddons" | "rightAddons" | "loading"> & {
13
13
  /**
14
14
  * Размер кнопки
15
15
  */
package/dist/Component.js CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var field_Component = require('./Component-2d26cd3f.js');
5
+ var field_Component = require('./Component-d96d5e4c.js');
6
6
  var React = require('react');
7
7
  var cn = require('classnames');
8
8
  var coreComponentsSelect = require('@alfalab/core-components-select');
@@ -15,18 +15,24 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
15
15
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
16
16
  var cn__default = /*#__PURE__*/_interopDefaultLegacy(cn);
17
17
 
18
- var styles = {"container":"picker-button__container_1xbj0"};
18
+ var styles = {"container":"picker-button__container_eix51","optionsPopover":"picker-button__optionsPopover_eix51","sideGap":"picker-button__sideGap_eix51","optionsListContainer":"picker-button__optionsListContainer_eix51"};
19
19
  require('./index.css')
20
20
 
21
+ var SIDE_POSITIONS = ['right', 'right-start', 'right-end', 'left', 'left-start', 'left-end'];
21
22
  var PickerButton = React.forwardRef(function (_a, ref) {
22
- var _b = _a.OptionsList, OptionsList = _b === void 0 ? coreComponentsSelect.OptionsList : _b, _c = _a.Optgroup, Optgroup = _c === void 0 ? coreComponentsSelect.Optgroup : _c, _d = _a.Option, Option = _d === void 0 ? coreComponentsSelect.Option : _d, view = _a.view, loading = _a.loading, _e = _a.size, size = _e === void 0 ? 'm' : _e, className = _a.className, leftAddons = _a.leftAddons, restProps = field_Component.__rest(_a, ["OptionsList", "Optgroup", "Option", "view", "loading", "size", "className", "leftAddons"]);
23
+ var _b;
24
+ var _c = _a.OptionsList, OptionsList = _c === void 0 ? coreComponentsSelect.OptionsList : _c, _d = _a.Optgroup, Optgroup = _d === void 0 ? coreComponentsSelect.Optgroup : _d, _e = _a.Option, Option = _e === void 0 ? coreComponentsSelect.Option : _e, view = _a.view, loading = _a.loading, _f = _a.size, size = _f === void 0 ? 'm' : _f, className = _a.className, leftAddons = _a.leftAddons, rightAddons = _a.rightAddons, popperClassName = _a.popperClassName, optionsListClassName = _a.optionsListClassName, restProps = field_Component.__rest(_a, ["OptionsList", "Optgroup", "Option", "view", "loading", "size", "className", "leftAddons", "rightAddons", "popperClassName", "optionsListClassName"]);
25
+ var isSideGap = !!restProps.popoverPosition && SIDE_POSITIONS.includes(restProps.popoverPosition);
23
26
  return (React__default['default'].createElement(coreComponentsSelect.BaseSelect, field_Component.__assign({}, restProps, { ref: ref, Option: Option, Field: field_Component.Field, size: size === 'm' ? 'm' : 's', fieldProps: {
24
27
  view: view,
25
28
  loading: loading,
26
29
  /** size у select, button несовместимы */
27
30
  buttonSize: size,
28
31
  leftAddons: leftAddons,
29
- }, Optgroup: Optgroup, OptionsList: OptionsList, className: cn__default['default'](styles.container, className), selected: [], closeOnSelect: true })));
32
+ rightAddons: rightAddons,
33
+ }, Optgroup: Optgroup, OptionsList: OptionsList, className: cn__default['default'](styles.container, className), popperClassName: cn__default['default'](styles.optionsPopover, popperClassName, (_b = {},
34
+ _b[styles.sideGap] = isSideGap,
35
+ _b)), optionsListClassName: cn__default['default'](styles.optionsListContainer, optionsListClassName), selected: [], closeOnSelect: true })));
30
36
  });
31
37
 
32
38
  exports.PickerButton = PickerButton;
@@ -296,6 +296,10 @@ type BaseSelectProps = {
296
296
  * Дополнительный класс для пункта меню
297
297
  */
298
298
  optionClassName?: string;
299
+ /**
300
+ * Дополнительный класс для поповера
301
+ */
302
+ popperClassName?: string;
299
303
  /**
300
304
  * Список вариантов выбора
301
305
  */
@@ -439,6 +443,7 @@ type BaseSelectProps = {
439
443
  onChange?: (payload: {
440
444
  selected: OptionShape | null;
441
445
  selectedMultiple: OptionShape[];
446
+ initiator: OptionShape | null;
442
447
  name?: string;
443
448
  }) => void;
444
449
  /**
@@ -491,6 +496,14 @@ type FieldProps = {
491
496
  * Список выбранных пунктов
492
497
  */
493
498
  selectedMultiple?: OptionShape[];
499
+ /**
500
+ * Метод для ручной установки выбранных пунктов
501
+ */
502
+ setSelectedItems: (selected: OptionShape[]) => void;
503
+ /**
504
+ * Метод переключающий видимость выпадающего списка
505
+ */
506
+ toggleMenu: () => void;
494
507
  /**
495
508
  * Флаг, можно ли выбрать несколько значений
496
509
  */
@@ -568,10 +581,31 @@ type OptionsListProps = {
568
581
  /**
569
582
  * Компонент пункта меню
570
583
  */
571
- Option: (props: {
572
- option: OptionShape;
573
- index: number;
574
- }) => JSX.Element | null;
584
+ Option: FC<OptionProps>;
585
+ /**
586
+ * Функция для получения пропсов для ячейки
587
+ */
588
+ getOptionProps: (option: OptionShape, index: number) => OptionProps;
589
+ /**
590
+ * Список выбранных пунктов
591
+ */
592
+ selectedItems?: OptionShape[];
593
+ /**
594
+ * Метод для ручной установки выбранных пунктов
595
+ */
596
+ setSelectedItems: (selected: OptionShape[]) => void;
597
+ /**
598
+ * Метод переключающий видимость выпадающего списка
599
+ */
600
+ toggleMenu: () => void;
601
+ /**
602
+ * Контент шапки
603
+ */
604
+ header?: ReactNode;
605
+ /**
606
+ * Контент футера
607
+ */
608
+ footer?: ReactNode;
575
609
  /**
576
610
  * Список вариантов выбора
577
611
  */
@@ -645,7 +679,7 @@ type OptionProps = {
645
679
  */
646
680
  option: OptionShape;
647
681
  /**
648
- * Индект пункта
682
+ * Индекс пункта
649
683
  */
650
684
  index: number;
651
685
  /**
@@ -58,8 +58,8 @@ var Field = function (_a) {
58
58
  var ref = innerProps.ref, restInnerProps = __rest(innerProps, ["ref"]);
59
59
  var buttonProps = exports.__assign(exports.__assign({}, restProps), restInnerProps);
60
60
  return (React__default['default'].createElement("div", { ref: ref },
61
- React__default['default'].createElement(coreComponentsButton.Button, exports.__assign({}, buttonProps, { rightAddons: React__default['default'].createElement("span", { className: cn__default['default'](styles__default['default'].iconContainer, open && styles__default['default'].open) },
62
- React__default['default'].createElement(Icon, { "data-test-id": 'picker-button-icon' })), block: true, view: view, size: buttonSize, className: cn__default['default'](styles__default['default'].component, view === 'primary' && styles__default['default'].primary, className) }), label)));
61
+ React__default['default'].createElement(coreComponentsButton.Button, exports.__assign({}, buttonProps, { rightAddons: rightAddons !== null && rightAddons !== void 0 ? rightAddons : (React__default['default'].createElement("span", { className: cn__default['default'](styles__default['default'].iconContainer, open && styles__default['default'].open) },
62
+ React__default['default'].createElement(Icon, { "data-test-id": 'picker-button-icon' }))), block: true, view: view, size: buttonSize, className: cn__default['default'](styles__default['default'].component, view === 'primary' && styles__default['default'].primary, className) }), label)));
63
63
  };
64
64
 
65
65
  exports.Field = Field;
@@ -3,13 +3,13 @@ import React from 'react';
3
3
  import { ButtonProps } from "@alfalab/core-components-button";
4
4
  import { BaseSelectProps } from "@alfalab/core-components-select";
5
5
  type PickerButtonSize = 'xs' | 's' | 'm';
6
- type PickerButtonProps = Omit<BaseSelectProps, 'Field' | 'placeholder' | 'Arrow' | 'autocomplete' | 'size' | 'onFocus' | 'selected' | 'closeOnSelect' | 'multiple' | 'fieldProps' | 'hint' | 'allowUnselect'> & Pick<ButtonProps, 'view' | 'loading' | 'leftAddons'> & {
6
+ type PickerButtonProps = Omit<BaseSelectProps, 'Field' | 'placeholder' | 'Arrow' | 'autocomplete' | 'size' | 'onFocus' | 'selected' | 'closeOnSelect' | 'multiple' | 'fieldProps' | 'hint' | 'allowUnselect'> & Pick<ButtonProps, 'view' | 'loading' | 'leftAddons' | 'rightAddons'> & {
7
7
  /**
8
8
  * Размер кнопки
9
9
  */
10
10
  size?: PickerButtonSize;
11
11
  };
12
- declare const PickerButton: React.ForwardRefExoticComponent<Pick<BaseSelectProps, "className" | "dataTestId" | "label" | "block" | "id" | "onBlur" | "onChange" | "onScroll" | "disabled" | "name" | "fieldClassName" | "error" | "preventFlip" | "open" | "options" | "valueRenderer" | "Optgroup" | "visibleOptions" | "Option" | "optionsListClassName" | "optionClassName" | "circularNavigation" | "nativeSelect" | "defaultOpen" | "popoverPosition" | "optionsListWidth" | "optionsSize" | "optionsListProps" | "optionProps" | "onOpen" | "OptionsList" | "updatePopover" | "zIndexPopover" | "showEmptyOptionsList"> & Pick<Partial<import("@alfalab/core-components-button").ComponentProps & React.AnchorHTMLAttributes<HTMLAnchorElement>> | Partial<import("@alfalab/core-components-button").ComponentProps & React.ButtonHTMLAttributes<HTMLButtonElement>>, "view" | "leftAddons" | "loading"> & {
12
+ declare const PickerButton: React.ForwardRefExoticComponent<Pick<BaseSelectProps, "className" | "dataTestId" | "label" | "block" | "id" | "onBlur" | "onChange" | "onScroll" | "disabled" | "name" | "fieldClassName" | "error" | "preventFlip" | "popperClassName" | "open" | "options" | "valueRenderer" | "Optgroup" | "visibleOptions" | "Option" | "optionsListClassName" | "optionClassName" | "circularNavigation" | "nativeSelect" | "defaultOpen" | "popoverPosition" | "optionsListWidth" | "optionsSize" | "optionsListProps" | "optionProps" | "onOpen" | "OptionsList" | "updatePopover" | "zIndexPopover" | "showEmptyOptionsList"> & Pick<Partial<import("@alfalab/core-components-button").ComponentProps & React.AnchorHTMLAttributes<HTMLAnchorElement>> | Partial<import("@alfalab/core-components-button").ComponentProps & React.ButtonHTMLAttributes<HTMLButtonElement>>, "view" | "leftAddons" | "rightAddons" | "loading"> & {
13
13
  /**
14
14
  * Размер кнопки
15
15
  */
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var field_Component = require('./Component-34f0d762.js');
5
+ var field_Component = require('./Component-aeb02c1b.js');
6
6
  var React = require('react');
7
7
  var cn = require('classnames');
8
8
  var coreComponentsSelect = require('@alfalab/core-components-select/dist/cssm');
@@ -18,15 +18,21 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
18
18
  var cn__default = /*#__PURE__*/_interopDefaultLegacy(cn);
19
19
  var styles__default = /*#__PURE__*/_interopDefaultLegacy(styles);
20
20
 
21
+ var SIDE_POSITIONS = ['right', 'right-start', 'right-end', 'left', 'left-start', 'left-end'];
21
22
  var PickerButton = React.forwardRef(function (_a, ref) {
22
- var _b = _a.OptionsList, OptionsList = _b === void 0 ? coreComponentsSelect.OptionsList : _b, _c = _a.Optgroup, Optgroup = _c === void 0 ? coreComponentsSelect.Optgroup : _c, _d = _a.Option, Option = _d === void 0 ? coreComponentsSelect.Option : _d, view = _a.view, loading = _a.loading, _e = _a.size, size = _e === void 0 ? 'm' : _e, className = _a.className, leftAddons = _a.leftAddons, restProps = field_Component.__rest(_a, ["OptionsList", "Optgroup", "Option", "view", "loading", "size", "className", "leftAddons"]);
23
+ var _b;
24
+ var _c = _a.OptionsList, OptionsList = _c === void 0 ? coreComponentsSelect.OptionsList : _c, _d = _a.Optgroup, Optgroup = _d === void 0 ? coreComponentsSelect.Optgroup : _d, _e = _a.Option, Option = _e === void 0 ? coreComponentsSelect.Option : _e, view = _a.view, loading = _a.loading, _f = _a.size, size = _f === void 0 ? 'm' : _f, className = _a.className, leftAddons = _a.leftAddons, rightAddons = _a.rightAddons, popperClassName = _a.popperClassName, optionsListClassName = _a.optionsListClassName, restProps = field_Component.__rest(_a, ["OptionsList", "Optgroup", "Option", "view", "loading", "size", "className", "leftAddons", "rightAddons", "popperClassName", "optionsListClassName"]);
25
+ var isSideGap = !!restProps.popoverPosition && SIDE_POSITIONS.includes(restProps.popoverPosition);
23
26
  return (React__default['default'].createElement(coreComponentsSelect.BaseSelect, field_Component.__assign({}, restProps, { ref: ref, Option: Option, Field: field_Component.Field, size: size === 'm' ? 'm' : 's', fieldProps: {
24
27
  view: view,
25
28
  loading: loading,
26
29
  /** size у select, button несовместимы */
27
30
  buttonSize: size,
28
31
  leftAddons: leftAddons,
29
- }, Optgroup: Optgroup, OptionsList: OptionsList, className: cn__default['default'](styles__default['default'].container, className), selected: [], closeOnSelect: true })));
32
+ rightAddons: rightAddons,
33
+ }, Optgroup: Optgroup, OptionsList: OptionsList, className: cn__default['default'](styles__default['default'].container, className), popperClassName: cn__default['default'](styles__default['default'].optionsPopover, popperClassName, (_b = {},
34
+ _b[styles__default['default'].sideGap] = isSideGap,
35
+ _b)), optionsListClassName: cn__default['default'](styles__default['default'].optionsListContainer, optionsListClassName), selected: [], closeOnSelect: true })));
30
36
  });
31
37
 
32
38
  exports.PickerButton = PickerButton;
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var field_Component = require('../Component-34f0d762.js');
5
+ var field_Component = require('../Component-aeb02c1b.js');
6
6
  require('react');
7
7
  require('classnames');
8
8
  require('@alfalab/core-components-button/dist/cssm');
@@ -1 +1 @@
1
- export * from "../Component-34f0d762";
1
+ export * from "../Component-aeb02c1b";
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var field_Component = require('../Component-34f0d762.js');
5
+ var field_Component = require('../Component-aeb02c1b.js');
6
6
  require('react');
7
7
  require('classnames');
8
8
  require('@alfalab/core-components-button/dist/cssm');
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- require('./Component-34f0d762.js');
5
+ require('./Component-aeb02c1b.js');
6
6
  require('react');
7
7
  require('classnames');
8
8
  require('@alfalab/core-components-select/dist/cssm');
@@ -1,3 +1,26 @@
1
+ :root {
2
+
3
+ /* Hard */
4
+
5
+ /* Up */
6
+
7
+ /* Hard up */
8
+ }
9
+ :root {
10
+ --gap-xs: 8px;
11
+ }
12
+ :root {
13
+ --border-radius-s: 4px;
14
+ }
1
15
  .container {
2
16
  min-width: auto;
3
17
  }
18
+ .optionsPopover {
19
+ padding: var(--gap-xs) 0
20
+ }
21
+ .optionsPopover.sideGap {
22
+ padding: 0 var(--gap-xs);
23
+ }
24
+ .optionsListContainer {
25
+ border-radius: var(--border-radius-s);
26
+ }
@@ -296,6 +296,10 @@ type BaseSelectProps = {
296
296
  * Дополнительный класс для пункта меню
297
297
  */
298
298
  optionClassName?: string;
299
+ /**
300
+ * Дополнительный класс для поповера
301
+ */
302
+ popperClassName?: string;
299
303
  /**
300
304
  * Список вариантов выбора
301
305
  */
@@ -439,6 +443,7 @@ type BaseSelectProps = {
439
443
  onChange?: (payload: {
440
444
  selected: OptionShape | null;
441
445
  selectedMultiple: OptionShape[];
446
+ initiator: OptionShape | null;
442
447
  name?: string;
443
448
  }) => void;
444
449
  /**
@@ -491,6 +496,14 @@ type FieldProps = {
491
496
  * Список выбранных пунктов
492
497
  */
493
498
  selectedMultiple?: OptionShape[];
499
+ /**
500
+ * Метод для ручной установки выбранных пунктов
501
+ */
502
+ setSelectedItems: (selected: OptionShape[]) => void;
503
+ /**
504
+ * Метод переключающий видимость выпадающего списка
505
+ */
506
+ toggleMenu: () => void;
494
507
  /**
495
508
  * Флаг, можно ли выбрать несколько значений
496
509
  */
@@ -568,10 +581,31 @@ type OptionsListProps = {
568
581
  /**
569
582
  * Компонент пункта меню
570
583
  */
571
- Option: (props: {
572
- option: OptionShape;
573
- index: number;
574
- }) => JSX.Element | null;
584
+ Option: FC<OptionProps>;
585
+ /**
586
+ * Функция для получения пропсов для ячейки
587
+ */
588
+ getOptionProps: (option: OptionShape, index: number) => OptionProps;
589
+ /**
590
+ * Список выбранных пунктов
591
+ */
592
+ selectedItems?: OptionShape[];
593
+ /**
594
+ * Метод для ручной установки выбранных пунктов
595
+ */
596
+ setSelectedItems: (selected: OptionShape[]) => void;
597
+ /**
598
+ * Метод переключающий видимость выпадающего списка
599
+ */
600
+ toggleMenu: () => void;
601
+ /**
602
+ * Контент шапки
603
+ */
604
+ header?: ReactNode;
605
+ /**
606
+ * Контент футера
607
+ */
608
+ footer?: ReactNode;
575
609
  /**
576
610
  * Список вариантов выбора
577
611
  */
@@ -645,7 +679,7 @@ type OptionProps = {
645
679
  */
646
680
  option: OptionShape;
647
681
  /**
648
- * Индект пункта
682
+ * Индекс пункта
649
683
  */
650
684
  index: number;
651
685
  /**
@@ -43,7 +43,7 @@ function __rest(s, e) {
43
43
  return t;
44
44
  }
45
45
 
46
- var styles = {"iconContainer":"picker-button__iconContainer_1wgjf","open":"picker-button__open_1wgjf"};
46
+ var styles = {"iconContainer":"picker-button__iconContainer_78x44","open":"picker-button__open_78x44"};
47
47
  require('./field/index.css')
48
48
 
49
49
  var Field = function (_a) {
@@ -52,8 +52,8 @@ var Field = function (_a) {
52
52
  var ref = innerProps.ref, restInnerProps = __rest(innerProps, ["ref"]);
53
53
  var buttonProps = __assign(__assign({}, restProps), restInnerProps);
54
54
  return (React.createElement("div", { ref: ref },
55
- React.createElement(Button, __assign({}, buttonProps, { rightAddons: React.createElement("span", { className: cn(styles.iconContainer, open && styles.open) },
56
- React.createElement(Icon, { "data-test-id": 'picker-button-icon' })), block: true, view: view, size: buttonSize, className: cn(styles.component, view === 'primary' && styles.primary, className) }), label)));
55
+ React.createElement(Button, __assign({}, buttonProps, { rightAddons: rightAddons !== null && rightAddons !== void 0 ? rightAddons : (React.createElement("span", { className: cn(styles.iconContainer, open && styles.open) },
56
+ React.createElement(Icon, { "data-test-id": 'picker-button-icon' }))), block: true, view: view, size: buttonSize, className: cn(styles.component, view === 'primary' && styles.primary, className) }), label)));
57
57
  };
58
58
 
59
59
  export { Field as F, __rest as _, __assign as a };
@@ -3,13 +3,13 @@ import React from 'react';
3
3
  import { ButtonProps } from "@alfalab/core-components-button";
4
4
  import { BaseSelectProps } from "@alfalab/core-components-select";
5
5
  type PickerButtonSize = 'xs' | 's' | 'm';
6
- type PickerButtonProps = Omit<BaseSelectProps, 'Field' | 'placeholder' | 'Arrow' | 'autocomplete' | 'size' | 'onFocus' | 'selected' | 'closeOnSelect' | 'multiple' | 'fieldProps' | 'hint' | 'allowUnselect'> & Pick<ButtonProps, 'view' | 'loading' | 'leftAddons'> & {
6
+ type PickerButtonProps = Omit<BaseSelectProps, 'Field' | 'placeholder' | 'Arrow' | 'autocomplete' | 'size' | 'onFocus' | 'selected' | 'closeOnSelect' | 'multiple' | 'fieldProps' | 'hint' | 'allowUnselect'> & Pick<ButtonProps, 'view' | 'loading' | 'leftAddons' | 'rightAddons'> & {
7
7
  /**
8
8
  * Размер кнопки
9
9
  */
10
10
  size?: PickerButtonSize;
11
11
  };
12
- declare const PickerButton: React.ForwardRefExoticComponent<Pick<BaseSelectProps, "className" | "dataTestId" | "label" | "block" | "id" | "onBlur" | "onChange" | "onScroll" | "disabled" | "name" | "fieldClassName" | "error" | "preventFlip" | "open" | "options" | "valueRenderer" | "Optgroup" | "visibleOptions" | "Option" | "optionsListClassName" | "optionClassName" | "circularNavigation" | "nativeSelect" | "defaultOpen" | "popoverPosition" | "optionsListWidth" | "optionsSize" | "optionsListProps" | "optionProps" | "onOpen" | "OptionsList" | "updatePopover" | "zIndexPopover" | "showEmptyOptionsList"> & Pick<Partial<import("@alfalab/core-components-button").ComponentProps & React.AnchorHTMLAttributes<HTMLAnchorElement>> | Partial<import("@alfalab/core-components-button").ComponentProps & React.ButtonHTMLAttributes<HTMLButtonElement>>, "view" | "leftAddons" | "loading"> & {
12
+ declare const PickerButton: React.ForwardRefExoticComponent<Pick<BaseSelectProps, "className" | "dataTestId" | "label" | "block" | "id" | "onBlur" | "onChange" | "onScroll" | "disabled" | "name" | "fieldClassName" | "error" | "preventFlip" | "popperClassName" | "open" | "options" | "valueRenderer" | "Optgroup" | "visibleOptions" | "Option" | "optionsListClassName" | "optionClassName" | "circularNavigation" | "nativeSelect" | "defaultOpen" | "popoverPosition" | "optionsListWidth" | "optionsSize" | "optionsListProps" | "optionProps" | "onOpen" | "OptionsList" | "updatePopover" | "zIndexPopover" | "showEmptyOptionsList"> & Pick<Partial<import("@alfalab/core-components-button").ComponentProps & React.AnchorHTMLAttributes<HTMLAnchorElement>> | Partial<import("@alfalab/core-components-button").ComponentProps & React.ButtonHTMLAttributes<HTMLButtonElement>>, "view" | "leftAddons" | "rightAddons" | "loading"> & {
13
13
  /**
14
14
  * Размер кнопки
15
15
  */
@@ -1,4 +1,4 @@
1
- import { _ as __rest, a as __assign, F as Field } from './Component-003da863.js';
1
+ import { _ as __rest, a as __assign, F as Field } from './Component-df824d76.js';
2
2
  import React, { forwardRef } from 'react';
3
3
  import cn from 'classnames';
4
4
  import { BaseSelect, OptionsList, Optgroup, Option } from '@alfalab/core-components-select/dist/esm';
@@ -6,18 +6,24 @@ import '@alfalab/core-components-button/dist/esm';
6
6
  import '@alfalab/icons-classic/ArrowDownMIcon';
7
7
  import '@alfalab/icons-classic/ArrowDownSIcon';
8
8
 
9
- var styles = {"container":"picker-button__container_1xbj0"};
9
+ var styles = {"container":"picker-button__container_eix51","optionsPopover":"picker-button__optionsPopover_eix51","sideGap":"picker-button__sideGap_eix51","optionsListContainer":"picker-button__optionsListContainer_eix51"};
10
10
  require('./index.css')
11
11
 
12
+ var SIDE_POSITIONS = ['right', 'right-start', 'right-end', 'left', 'left-start', 'left-end'];
12
13
  var PickerButton = forwardRef(function (_a, ref) {
13
- var _b = _a.OptionsList, OptionsList$1 = _b === void 0 ? OptionsList : _b, _c = _a.Optgroup, Optgroup$1 = _c === void 0 ? Optgroup : _c, _d = _a.Option, Option$1 = _d === void 0 ? Option : _d, view = _a.view, loading = _a.loading, _e = _a.size, size = _e === void 0 ? 'm' : _e, className = _a.className, leftAddons = _a.leftAddons, restProps = __rest(_a, ["OptionsList", "Optgroup", "Option", "view", "loading", "size", "className", "leftAddons"]);
14
+ var _b;
15
+ var _c = _a.OptionsList, OptionsList$1 = _c === void 0 ? OptionsList : _c, _d = _a.Optgroup, Optgroup$1 = _d === void 0 ? Optgroup : _d, _e = _a.Option, Option$1 = _e === void 0 ? Option : _e, view = _a.view, loading = _a.loading, _f = _a.size, size = _f === void 0 ? 'm' : _f, className = _a.className, leftAddons = _a.leftAddons, rightAddons = _a.rightAddons, popperClassName = _a.popperClassName, optionsListClassName = _a.optionsListClassName, restProps = __rest(_a, ["OptionsList", "Optgroup", "Option", "view", "loading", "size", "className", "leftAddons", "rightAddons", "popperClassName", "optionsListClassName"]);
16
+ var isSideGap = !!restProps.popoverPosition && SIDE_POSITIONS.includes(restProps.popoverPosition);
14
17
  return (React.createElement(BaseSelect, __assign({}, restProps, { ref: ref, Option: Option$1, Field: Field, size: size === 'm' ? 'm' : 's', fieldProps: {
15
18
  view: view,
16
19
  loading: loading,
17
20
  /** size у select, button несовместимы */
18
21
  buttonSize: size,
19
22
  leftAddons: leftAddons,
20
- }, Optgroup: Optgroup$1, OptionsList: OptionsList$1, className: cn(styles.container, className), selected: [], closeOnSelect: true })));
23
+ rightAddons: rightAddons,
24
+ }, Optgroup: Optgroup$1, OptionsList: OptionsList$1, className: cn(styles.container, className), popperClassName: cn(styles.optionsPopover, popperClassName, (_b = {},
25
+ _b[styles.sideGap] = isSideGap,
26
+ _b)), optionsListClassName: cn(styles.optionsListContainer, optionsListClassName), selected: [], closeOnSelect: true })));
21
27
  });
22
28
 
23
29
  export { PickerButton };
@@ -1,4 +1,4 @@
1
- export { F as Field } from '../Component-003da863.js';
1
+ export { F as Field } from '../Component-df824d76.js';
2
2
  import 'react';
3
3
  import 'classnames';
4
4
  import '@alfalab/core-components-button/dist/esm';
@@ -1,4 +1,4 @@
1
- /* hash: 4ucab */
1
+ /* hash: 1czq3 */
2
2
  :root {
3
3
 
4
4
  /* Hard */
@@ -10,10 +10,10 @@
10
10
  :root {
11
11
  --arrow-transform: rotate(180deg);
12
12
  }
13
- .picker-button__iconContainer_1wgjf {
13
+ .picker-button__iconContainer_78x44 {
14
14
  display: flex;
15
15
  transition: transform 0.15s ease-in-out;
16
16
  }
17
- .picker-button__open_1wgjf {
17
+ .picker-button__open_78x44 {
18
18
  transform: var(--arrow-transform);
19
19
  }
@@ -1 +1 @@
1
- export * from "../Component-003da863";
1
+ export * from "../Component-df824d76";
@@ -1,4 +1,4 @@
1
- export { F as Field } from '../Component-003da863.js';
1
+ export { F as Field } from '../Component-df824d76.js';
2
2
  import 'react';
3
3
  import 'classnames';
4
4
  import '@alfalab/core-components-button/dist/esm';
@@ -1,4 +1,27 @@
1
- /* hash: di35b */
2
- .picker-button__container_1xbj0 {
1
+ /* hash: 1hh7a */
2
+ :root {
3
+
4
+ /* Hard */
5
+
6
+ /* Up */
7
+
8
+ /* Hard up */
9
+ }
10
+ :root {
11
+ --gap-xs: 8px;
12
+ }
13
+ :root {
14
+ --border-radius-s: 4px;
15
+ }
16
+ .picker-button__container_eix51 {
3
17
  min-width: auto;
4
18
  }
19
+ .picker-button__optionsPopover_eix51 {
20
+ padding: var(--gap-xs) 0
21
+ }
22
+ .picker-button__optionsPopover_eix51.picker-button__sideGap_eix51 {
23
+ padding: 0 var(--gap-xs);
24
+ }
25
+ .picker-button__optionsListContainer_eix51 {
26
+ border-radius: var(--border-radius-s);
27
+ }
package/dist/esm/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import './Component-003da863.js';
1
+ import './Component-df824d76.js';
2
2
  import 'react';
3
3
  import 'classnames';
4
4
  import '@alfalab/core-components-select/dist/esm';
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var field_Component = require('../Component-2d26cd3f.js');
5
+ var field_Component = require('../Component-d96d5e4c.js');
6
6
  require('react');
7
7
  require('classnames');
8
8
  require('@alfalab/core-components-button');
@@ -1,4 +1,4 @@
1
- /* hash: 4ucab */
1
+ /* hash: 1czq3 */
2
2
  :root {
3
3
 
4
4
  /* Hard */
@@ -10,10 +10,10 @@
10
10
  :root {
11
11
  --arrow-transform: rotate(180deg);
12
12
  }
13
- .picker-button__iconContainer_1wgjf {
13
+ .picker-button__iconContainer_78x44 {
14
14
  display: flex;
15
15
  transition: transform 0.15s ease-in-out;
16
16
  }
17
- .picker-button__open_1wgjf {
17
+ .picker-button__open_78x44 {
18
18
  transform: var(--arrow-transform);
19
19
  }
@@ -1 +1 @@
1
- export * from "../Component-2d26cd3f";
1
+ export * from "../Component-d96d5e4c";
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var field_Component = require('../Component-2d26cd3f.js');
5
+ var field_Component = require('../Component-d96d5e4c.js');
6
6
  require('react');
7
7
  require('classnames');
8
8
  require('@alfalab/core-components-button');
package/dist/index.css CHANGED
@@ -1,4 +1,27 @@
1
- /* hash: di35b */
2
- .picker-button__container_1xbj0 {
1
+ /* hash: 1hh7a */
2
+ :root {
3
+
4
+ /* Hard */
5
+
6
+ /* Up */
7
+
8
+ /* Hard up */
9
+ }
10
+ :root {
11
+ --gap-xs: 8px;
12
+ }
13
+ :root {
14
+ --border-radius-s: 4px;
15
+ }
16
+ .picker-button__container_eix51 {
3
17
  min-width: auto;
4
18
  }
19
+ .picker-button__optionsPopover_eix51 {
20
+ padding: var(--gap-xs) 0
21
+ }
22
+ .picker-button__optionsPopover_eix51.picker-button__sideGap_eix51 {
23
+ padding: 0 var(--gap-xs);
24
+ }
25
+ .picker-button__optionsListContainer_eix51 {
26
+ border-radius: var(--border-radius-s);
27
+ }
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- require('./Component-2d26cd3f.js');
5
+ require('./Component-d96d5e4c.js');
6
6
  require('react');
7
7
  require('classnames');
8
8
  require('@alfalab/core-components-select');
@@ -3,13 +3,13 @@ import React from 'react';
3
3
  import { ButtonProps } from "@alfalab/core-components-button";
4
4
  import { BaseSelectProps } from "@alfalab/core-components-select";
5
5
  type PickerButtonSize = 'xs' | 's' | 'm';
6
- type PickerButtonProps = Omit<BaseSelectProps, 'Field' | 'placeholder' | 'Arrow' | 'autocomplete' | 'size' | 'onFocus' | 'selected' | 'closeOnSelect' | 'multiple' | 'fieldProps' | 'hint' | 'allowUnselect'> & Pick<ButtonProps, 'view' | 'loading' | 'leftAddons'> & {
6
+ type PickerButtonProps = Omit<BaseSelectProps, 'Field' | 'placeholder' | 'Arrow' | 'autocomplete' | 'size' | 'onFocus' | 'selected' | 'closeOnSelect' | 'multiple' | 'fieldProps' | 'hint' | 'allowUnselect'> & Pick<ButtonProps, 'view' | 'loading' | 'leftAddons' | 'rightAddons'> & {
7
7
  /**
8
8
  * Размер кнопки
9
9
  */
10
10
  size?: PickerButtonSize;
11
11
  };
12
- declare const PickerButton: React.ForwardRefExoticComponent<Pick<BaseSelectProps, "className" | "dataTestId" | "label" | "block" | "id" | "onBlur" | "onChange" | "onScroll" | "disabled" | "name" | "fieldClassName" | "error" | "preventFlip" | "open" | "options" | "valueRenderer" | "Optgroup" | "visibleOptions" | "Option" | "optionsListClassName" | "optionClassName" | "circularNavigation" | "nativeSelect" | "defaultOpen" | "popoverPosition" | "optionsListWidth" | "optionsSize" | "optionsListProps" | "optionProps" | "onOpen" | "OptionsList" | "updatePopover" | "zIndexPopover" | "showEmptyOptionsList"> & Pick<Partial<import("@alfalab/core-components-button").ComponentProps & React.AnchorHTMLAttributes<HTMLAnchorElement>> | Partial<import("@alfalab/core-components-button").ComponentProps & React.ButtonHTMLAttributes<HTMLButtonElement>>, "view" | "leftAddons" | "loading"> & {
12
+ declare const PickerButton: React.ForwardRefExoticComponent<Pick<BaseSelectProps, "className" | "dataTestId" | "label" | "block" | "id" | "onBlur" | "onChange" | "onScroll" | "disabled" | "name" | "fieldClassName" | "error" | "preventFlip" | "popperClassName" | "open" | "options" | "valueRenderer" | "Optgroup" | "visibleOptions" | "Option" | "optionsListClassName" | "optionClassName" | "circularNavigation" | "nativeSelect" | "defaultOpen" | "popoverPosition" | "optionsListWidth" | "optionsSize" | "optionsListProps" | "optionProps" | "onOpen" | "OptionsList" | "updatePopover" | "zIndexPopover" | "showEmptyOptionsList"> & Pick<Partial<import("@alfalab/core-components-button").ComponentProps & React.AnchorHTMLAttributes<HTMLAnchorElement>> | Partial<import("@alfalab/core-components-button").ComponentProps & React.ButtonHTMLAttributes<HTMLButtonElement>>, "view" | "leftAddons" | "rightAddons" | "loading"> & {
13
13
  /**
14
14
  * Размер кнопки
15
15
  */
@@ -6,15 +6,22 @@ import '@alfalab/icons-classic/ArrowDownMIcon';
6
6
  import '@alfalab/icons-classic/ArrowDownSIcon';
7
7
  import { Field } from './field/Component.js';
8
8
 
9
- var styles = {"container":"picker-button__container_1xbj0"};
9
+ var styles = {"container":"picker-button__container_eix51","optionsPopover":"picker-button__optionsPopover_eix51","sideGap":"picker-button__sideGap_eix51","optionsListContainer":"picker-button__optionsListContainer_eix51"};
10
10
  require('./index.css')
11
11
 
12
- const PickerButton = forwardRef(({ OptionsList: OptionsList$1 = OptionsList, Optgroup: Optgroup$1 = Optgroup, Option: Option$1 = Option, view, loading, size = 'm', className, leftAddons, ...restProps }, ref) => (React.createElement(BaseSelect, Object.assign({}, restProps, { ref: ref, Option: Option$1, Field: Field, size: size === 'm' ? 'm' : 's', fieldProps: {
13
- view,
14
- loading,
15
- /** size у select, button несовместимы */
16
- buttonSize: size,
17
- leftAddons,
18
- }, Optgroup: Optgroup$1, OptionsList: OptionsList$1, className: cn(styles.container, className), selected: [], closeOnSelect: true }))));
12
+ const SIDE_POSITIONS = ['right', 'right-start', 'right-end', 'left', 'left-start', 'left-end'];
13
+ const PickerButton = forwardRef(({ OptionsList: OptionsList$1 = OptionsList, Optgroup: Optgroup$1 = Optgroup, Option: Option$1 = Option, view, loading, size = 'm', className, leftAddons, rightAddons, popperClassName, optionsListClassName, ...restProps }, ref) => {
14
+ const isSideGap = !!restProps.popoverPosition && SIDE_POSITIONS.includes(restProps.popoverPosition);
15
+ return (React.createElement(BaseSelect, Object.assign({}, restProps, { ref: ref, Option: Option$1, Field: Field, size: size === 'm' ? 'm' : 's', fieldProps: {
16
+ view,
17
+ loading,
18
+ /** size у select, button несовместимы */
19
+ buttonSize: size,
20
+ leftAddons,
21
+ rightAddons,
22
+ }, Optgroup: Optgroup$1, OptionsList: OptionsList$1, className: cn(styles.container, className), popperClassName: cn(styles.optionsPopover, popperClassName, {
23
+ [styles.sideGap]: isSideGap,
24
+ }), optionsListClassName: cn(styles.optionsListContainer, optionsListClassName), selected: [], closeOnSelect: true })));
25
+ });
19
26
 
20
27
  export { PickerButton };
@@ -265,6 +265,10 @@ type BaseSelectProps = {
265
265
  * Дополнительный класс для пункта меню
266
266
  */
267
267
  optionClassName?: string;
268
+ /**
269
+ * Дополнительный класс для поповера
270
+ */
271
+ popperClassName?: string;
268
272
  /**
269
273
  * Список вариантов выбора
270
274
  */
@@ -408,6 +412,7 @@ type BaseSelectProps = {
408
412
  onChange?: (payload: {
409
413
  selected: OptionShape | null;
410
414
  selectedMultiple: OptionShape[];
415
+ initiator: OptionShape | null;
411
416
  name?: string;
412
417
  }) => void;
413
418
  /**
@@ -460,6 +465,14 @@ type FieldProps = {
460
465
  * Список выбранных пунктов
461
466
  */
462
467
  selectedMultiple?: OptionShape[];
468
+ /**
469
+ * Метод для ручной установки выбранных пунктов
470
+ */
471
+ setSelectedItems: (selected: OptionShape[]) => void;
472
+ /**
473
+ * Метод переключающий видимость выпадающего списка
474
+ */
475
+ toggleMenu: () => void;
463
476
  /**
464
477
  * Флаг, можно ли выбрать несколько значений
465
478
  */
@@ -537,10 +550,31 @@ type OptionsListProps = {
537
550
  /**
538
551
  * Компонент пункта меню
539
552
  */
540
- Option: (props: {
541
- option: OptionShape;
542
- index: number;
543
- }) => JSX.Element | null;
553
+ Option: FC<OptionProps>;
554
+ /**
555
+ * Функция для получения пропсов для ячейки
556
+ */
557
+ getOptionProps: (option: OptionShape, index: number) => OptionProps;
558
+ /**
559
+ * Список выбранных пунктов
560
+ */
561
+ selectedItems?: OptionShape[];
562
+ /**
563
+ * Метод для ручной установки выбранных пунктов
564
+ */
565
+ setSelectedItems: (selected: OptionShape[]) => void;
566
+ /**
567
+ * Метод переключающий видимость выпадающего списка
568
+ */
569
+ toggleMenu: () => void;
570
+ /**
571
+ * Контент шапки
572
+ */
573
+ header?: ReactNode;
574
+ /**
575
+ * Контент футера
576
+ */
577
+ footer?: ReactNode;
544
578
  /**
545
579
  * Список вариантов выбора
546
580
  */
@@ -614,7 +648,7 @@ type OptionProps = {
614
648
  */
615
649
  option: OptionShape;
616
650
  /**
617
- * Индект пункта
651
+ * Индекс пункта
618
652
  */
619
653
  index: number;
620
654
  /**
@@ -4,7 +4,7 @@ import { Button } from '@alfalab/core-components-button/dist/modern';
4
4
  import { ArrowDownMIcon } from '@alfalab/icons-classic/ArrowDownMIcon';
5
5
  import { ArrowDownSIcon } from '@alfalab/icons-classic/ArrowDownSIcon';
6
6
 
7
- var styles = {"iconContainer":"picker-button__iconContainer_1wgjf","open":"picker-button__open_1wgjf"};
7
+ var styles = {"iconContainer":"picker-button__iconContainer_78x44","open":"picker-button__open_78x44"};
8
8
  require('./index.css')
9
9
 
10
10
  const Field = ({ buttonSize = 'm', view, label, open, multiple, rightAddons, Arrow, innerProps, className, selected, selectedMultiple, valueRenderer, ...restProps }) => {
@@ -15,8 +15,8 @@ const Field = ({ buttonSize = 'm', view, label, open, multiple, rightAddons, Arr
15
15
  ...restInnerProps,
16
16
  };
17
17
  return (React.createElement("div", { ref: ref },
18
- React.createElement(Button, Object.assign({}, buttonProps, { rightAddons: React.createElement("span", { className: cn(styles.iconContainer, open && styles.open) },
19
- React.createElement(Icon, { "data-test-id": 'picker-button-icon' })), block: true, view: view, size: buttonSize, className: cn(styles.component, view === 'primary' && styles.primary, className) }), label)));
18
+ React.createElement(Button, Object.assign({}, buttonProps, { rightAddons: rightAddons ?? (React.createElement("span", { className: cn(styles.iconContainer, open && styles.open) },
19
+ React.createElement(Icon, { "data-test-id": 'picker-button-icon' }))), block: true, view: view, size: buttonSize, className: cn(styles.component, view === 'primary' && styles.primary, className) }), label)));
20
20
  };
21
21
 
22
22
  export { Field };
@@ -1,4 +1,4 @@
1
- /* hash: 4ucab */
1
+ /* hash: 1czq3 */
2
2
  :root {
3
3
 
4
4
  /* Hard */
@@ -10,10 +10,10 @@
10
10
  :root {
11
11
  --arrow-transform: rotate(180deg);
12
12
  }
13
- .picker-button__iconContainer_1wgjf {
13
+ .picker-button__iconContainer_78x44 {
14
14
  display: flex;
15
15
  transition: transform 0.15s ease-in-out;
16
16
  }
17
- .picker-button__open_1wgjf {
17
+ .picker-button__open_78x44 {
18
18
  transform: var(--arrow-transform);
19
19
  }
@@ -1,4 +1,27 @@
1
- /* hash: di35b */
2
- .picker-button__container_1xbj0 {
1
+ /* hash: 1hh7a */
2
+ :root {
3
+
4
+ /* Hard */
5
+
6
+ /* Up */
7
+
8
+ /* Hard up */
9
+ }
10
+ :root {
11
+ --gap-xs: 8px;
12
+ }
13
+ :root {
14
+ --border-radius-s: 4px;
15
+ }
16
+ .picker-button__container_eix51 {
3
17
  min-width: auto;
4
18
  }
19
+ .picker-button__optionsPopover_eix51 {
20
+ padding: var(--gap-xs) 0
21
+ }
22
+ .picker-button__optionsPopover_eix51.picker-button__sideGap_eix51 {
23
+ padding: 0 var(--gap-xs);
24
+ }
25
+ .picker-button__optionsListContainer_eix51 {
26
+ border-radius: var(--border-radius-s);
27
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfalab/core-components-picker-button",
3
- "version": "7.2.0",
3
+ "version": "7.4.1",
4
4
  "description": "Picker button component",
5
5
  "keywords": [],
6
6
  "license": "MIT",
@@ -19,11 +19,11 @@
19
19
  "react-dom": "^16.9.0 || ^17.0.1"
20
20
  },
21
21
  "dependencies": {
22
- "@alfalab/core-components-button": "^5.0.3",
23
- "@alfalab/core-components-select": "^10.3.0",
22
+ "@alfalab/core-components-button": "^5.1.0",
23
+ "@alfalab/core-components-select": "^10.4.3",
24
24
  "@alfalab/icons-classic": "^1.76.0",
25
25
  "@alfalab/icons-glyph": "^1.190.0",
26
26
  "classnames": "^2.2.6"
27
27
  },
28
- "gitHead": "94999e533968aa575e92106dffa8bbbb8e7ac71d"
28
+ "gitHead": "d5b56eb1bd377ac6da09c7826de36ae6f0d1a152"
29
29
  }