@alfalab/core-components-input-autocomplete 11.1.0 → 11.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/autocomplete-field/Component.js +1 -1
  2. package/autocomplete-field/index.css +2 -2
  3. package/autocomplete-mobile-field/Component.js +1 -1
  4. package/autocomplete-mobile-field/index.css +8 -8
  5. package/cssm/mobile/Component.mobile.d.ts +3 -0
  6. package/cssm/mobile/Component.mobile.js +12 -6
  7. package/cssm/mobile/Component.modal.mobile.d.ts +3 -0
  8. package/cssm/types.d.ts +13 -0
  9. package/esm/autocomplete-field/Component.js +1 -1
  10. package/esm/autocomplete-field/index.css +2 -2
  11. package/esm/autocomplete-mobile-field/Component.js +1 -1
  12. package/esm/autocomplete-mobile-field/index.css +8 -8
  13. package/esm/mobile/Component.mobile.d.ts +3 -0
  14. package/esm/mobile/Component.mobile.js +13 -7
  15. package/esm/mobile/Component.modal.mobile.d.ts +3 -0
  16. package/esm/mobile/mobile.css +2 -2
  17. package/esm/types.d.ts +13 -0
  18. package/mobile/Component.mobile.d.ts +3 -0
  19. package/mobile/Component.mobile.js +13 -7
  20. package/mobile/Component.modal.mobile.d.ts +3 -0
  21. package/mobile/mobile.css +2 -2
  22. package/modern/autocomplete-field/Component.js +1 -1
  23. package/modern/autocomplete-field/index.css +2 -2
  24. package/modern/autocomplete-mobile-field/Component.js +1 -1
  25. package/modern/autocomplete-mobile-field/index.css +8 -8
  26. package/modern/mobile/Component.mobile.d.ts +3 -0
  27. package/modern/mobile/Component.mobile.js +13 -7
  28. package/modern/mobile/Component.modal.mobile.d.ts +3 -0
  29. package/modern/mobile/mobile.css +2 -2
  30. package/modern/types.d.ts +13 -0
  31. package/package.json +1 -1
  32. package/src/mobile/Component.mobile.tsx +14 -6
  33. package/src/types.ts +16 -0
  34. package/types.d.ts +13 -0
@@ -14,7 +14,7 @@ var React__default = /*#__PURE__*/_interopDefaultCompat(React);
14
14
  var mergeRefs__default = /*#__PURE__*/_interopDefaultCompat(mergeRefs);
15
15
  var cn__default = /*#__PURE__*/_interopDefaultCompat(cn);
16
16
 
17
- var styles = {"arrow":"input-autocomplete__arrow_wt0tr","error":"input-autocomplete__error_wt0tr"};
17
+ var styles = {"arrow":"input-autocomplete__arrow_ldg52","error":"input-autocomplete__error_ldg52"};
18
18
  require('./index.css')
19
19
 
20
20
  var AutocompleteField = function (_a) {
@@ -1,4 +1,4 @@
1
- /* hash: wsrha */
2
- .input-autocomplete__arrow_wt0tr.input-autocomplete__error_wt0tr ~ * {
1
+ /* hash: 5vm6i */
2
+ .input-autocomplete__arrow_ldg52.input-autocomplete__error_ldg52 ~ * {
3
3
  display: none;
4
4
  }
@@ -15,7 +15,7 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
15
15
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
16
16
  var cn__default = /*#__PURE__*/_interopDefaultCompat(cn);
17
17
 
18
- var styles = {"component":"input-autocomplete__component_ymkry","field":"input-autocomplete__field_ymkry","disabled":"input-autocomplete__disabled_ymkry","placeholder":"input-autocomplete__placeholder_ymkry","contentWrapper":"input-autocomplete__contentWrapper_ymkry","value":"input-autocomplete__value_ymkry","focusVisible":"input-autocomplete__focusVisible_ymkry"};
18
+ var styles = {"component":"input-autocomplete__component_3udw2","field":"input-autocomplete__field_3udw2","disabled":"input-autocomplete__disabled_3udw2","placeholder":"input-autocomplete__placeholder_3udw2","contentWrapper":"input-autocomplete__contentWrapper_3udw2","value":"input-autocomplete__value_3udw2","focusVisible":"input-autocomplete__focusVisible_3udw2"};
19
19
  require('./index.css')
20
20
 
21
21
  var AutocompleteMobileField = function (_a) {
@@ -1,4 +1,4 @@
1
- /* hash: ru4db */
1
+ /* hash: 1yog3 */
2
2
  :root {
3
3
  } /* deprecated */ :root {
4
4
  --color-light-border-link: #2288fa;
@@ -18,16 +18,16 @@
18
18
  } :root {
19
19
  --focus-color: var(--color-light-border-link);
20
20
  --disabled-cursor: not-allowed;
21
- } .input-autocomplete__component_ymkry {
21
+ } .input-autocomplete__component_3udw2 {
22
22
  width: 100%;
23
23
  outline: none;
24
- } .input-autocomplete__field_ymkry:not(.input-autocomplete__disabled_ymkry) {
24
+ } .input-autocomplete__field_3udw2:not(.input-autocomplete__disabled_3udw2) {
25
25
  cursor: pointer;
26
- } .input-autocomplete__disabled_ymkry {
26
+ } .input-autocomplete__disabled_3udw2 {
27
27
  cursor: var(--disabled-cursor);
28
- } .input-autocomplete__placeholder_ymkry {
28
+ } .input-autocomplete__placeholder_3udw2 {
29
29
  color: var(--color-light-text-secondary);
30
- } .input-autocomplete__contentWrapper_ymkry {
30
+ } .input-autocomplete__contentWrapper_3udw2 {
31
31
  font-size: 16px;
32
32
  line-height: 20px;
33
33
  font-weight: 400;
@@ -36,11 +36,11 @@
36
36
  text-overflow: ellipsis;
37
37
  overflow: hidden;
38
38
  width: 100%;
39
- } .input-autocomplete__value_ymkry {
39
+ } .input-autocomplete__value_3udw2 {
40
40
  overflow: hidden;
41
41
  text-overflow: ellipsis;
42
42
  text-align: left;
43
- } .input-autocomplete__focusVisible_ymkry {
43
+ } .input-autocomplete__focusVisible_3udw2 {
44
44
  outline: 2px solid var(--focus-color);
45
45
  outline-offset: 2px;
46
46
  }
@@ -4,5 +4,8 @@ import React from 'react';
4
4
  declare const InputAutocompleteMobile: React.ForwardRefExoticComponent<import("../types").InputAutocompleteCommonProps & {
5
5
  isBottomSheet?: boolean | undefined;
6
6
  transitionProps?: Partial<import("react-transition-group/Transition").TransitionProps<undefined>> | undefined;
7
+ onApply?: (() => void) | undefined;
8
+ onCancel?: (() => void) | undefined;
9
+ title?: string | undefined;
7
10
  } & React.RefAttributes<unknown>>;
8
11
  export { InputAutocompleteMobile };
@@ -29,7 +29,7 @@ var styles__default = /*#__PURE__*/_interopDefaultCompat(styles);
29
29
  var InputAutocompleteMobile = React__default.default.forwardRef(function (_a, ref) {
30
30
  var _b;
31
31
  var _c;
32
- var Input = _a.Input, value = _a.value, name = _a.name, _d = _a.Arrow, Arrow = _d === void 0 ? null : _d, label = _a.label, _e = _a.placeholder, placeholder = _e === void 0 ? '' : _e, _f = _a.size, size = _f === void 0 ? 's' : _f, openProp = _a.open, onInput = _a.onInput, onOpen = _a.onOpen, multiple = _a.multiple, inputProps = _a.inputProps, _g = _a.isBottomSheet, isBottomSheet = _g === void 0 ? true : _g, dataTestId = _a.dataTestId, transitionProps = _a.transitionProps, restProps = tslib.__rest(_a, ["Input", "value", "name", "Arrow", "label", "placeholder", "size", "open", "onInput", "onOpen", "multiple", "inputProps", "isBottomSheet", "dataTestId", "transitionProps"]);
32
+ var Input = _a.Input, value = _a.value, name = _a.name, _d = _a.Arrow, Arrow = _d === void 0 ? null : _d, label = _a.label, _e = _a.placeholder, placeholder = _e === void 0 ? '' : _e, _f = _a.size, size = _f === void 0 ? 's' : _f, openProp = _a.open, onInput = _a.onInput, onOpen = _a.onOpen, multiple = _a.multiple, inputProps = _a.inputProps, _g = _a.isBottomSheet, isBottomSheet = _g === void 0 ? true : _g, dataTestId = _a.dataTestId, transitionProps = _a.transitionProps, onCancel = _a.onCancel, onApply = _a.onApply, title = _a.title, restProps = tslib.__rest(_a, ["Input", "value", "name", "Arrow", "label", "placeholder", "size", "open", "onInput", "onOpen", "multiple", "inputProps", "isBottomSheet", "dataTestId", "transitionProps", "onCancel", "onApply", "title"]);
33
33
  var _h = React.useState(false), open = _h[0], setOpen = _h[1];
34
34
  var frozenValue = React.useRef('');
35
35
  var searchInputRef = React.useRef(null);
@@ -55,12 +55,15 @@ var InputAutocompleteMobile = React__default.default.forwardRef(function (_a, re
55
55
  }
56
56
  }, 300);
57
57
  }, []);
58
- var handleApply = function () { return setModalVisibility(false); };
58
+ var handleApply = function () {
59
+ setModalVisibility(false);
60
+ onApply === null || onApply === void 0 ? void 0 : onApply();
61
+ };
59
62
  var handleCancel = function () {
60
63
  setModalVisibility(false);
61
64
  restorePrevValue();
65
+ onCancel === null || onCancel === void 0 ? void 0 : onCancel();
62
66
  };
63
- var handleClear = function () { return onInput === null || onInput === void 0 ? void 0 : onInput(null, { value: '' }); };
64
67
  var handleExiting = function (node) {
65
68
  var _a, _b;
66
69
  (_a = targetRef.current) === null || _a === void 0 ? void 0 : _a.focus();
@@ -69,7 +72,7 @@ var InputAutocompleteMobile = React__default.default.forwardRef(function (_a, re
69
72
  var isOpen = Boolean(open || openProp);
70
73
  var Component = isBottomSheet ? mobile.SelectMobile : mobile.SelectModalMobile;
71
74
  var componentProps = (_b = {
72
- title: label || placeholder,
75
+ title: title || label || placeholder,
73
76
  onClose: restorePrevValue,
74
77
  transitionProps: tslib.__assign(tslib.__assign({}, transitionProps), { onExiting: handleExiting })
75
78
  },
@@ -80,11 +83,14 @@ var InputAutocompleteMobile = React__default.default.forwardRef(function (_a, re
80
83
  var clear = (_c = inputProps === null || inputProps === void 0 ? void 0 : inputProps.clear) !== null && _c !== void 0 ? _c : false;
81
84
  return (React__default.default.createElement(Component, tslib.__assign({ Field: autocompleteMobileField_Component.AutocompleteMobileField }, restProps, (isBottomSheet
82
85
  ? { bottomSheetProps: componentProps }
83
- : { modalProps: componentProps }), { dataTestId: dataTestId, useWithApplyHook: false, showSearch: true, searchProps: {
86
+ : {
87
+ modalProps: componentProps,
88
+ modalHeaderProps: { title: title },
89
+ }), { dataTestId: dataTestId, useWithApplyHook: false, showSearch: true, searchProps: {
84
90
  value: value,
85
91
  filterFn: utils.searchFilterStub,
86
92
  componentProps: tslib.__assign(tslib.__assign({ leftAddons: null, placeholder: placeholder }, inputProps), { className: cn__default.default(styles__default.default.input, inputProps === null || inputProps === void 0 ? void 0 : inputProps.className), clear: clear, ref: mergeRefs__default.default([searchInputRef, inputProps === null || inputProps === void 0 ? void 0 : inputProps.ref]), onChange: onInput }),
87
- }, Search: Input, ref: mergeRefs__default.default([targetRef, ref]), open: isOpen, onOpen: handleOpen, Arrow: Arrow, placeholder: placeholder, label: label, size: size, name: name, multiple: multiple, optionsListProps: tslib.__assign({ footer: (React__default.default.createElement(shared.Footer, { showClear: true, handleClear: handleCancel, handleApply: handleApply, clearText: '\u041E\u0442\u043C\u0435\u043D\u0430', applyText: '\u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C', dataTestId: dataTestId })) }, restProps.optionsListProps), fieldProps: tslib.__assign({ value: isOpen ? frozenValue.current : value, clear: clear, onClear: clear ? handleClear : undefined }, restProps.fieldProps) })));
93
+ }, Search: Input, ref: mergeRefs__default.default([targetRef, ref]), open: isOpen, onOpen: handleOpen, Arrow: Arrow, placeholder: placeholder, label: label, size: size, name: name, multiple: multiple, optionsListProps: tslib.__assign({ footer: (React__default.default.createElement(shared.Footer, { showClear: true, handleClear: handleCancel, handleApply: handleApply, clearText: '\u041E\u0442\u043C\u0435\u043D\u0430', applyText: '\u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C', dataTestId: dataTestId })) }, restProps.optionsListProps), fieldProps: tslib.__assign({ value: isOpen ? frozenValue.current : value, clear: clear, onClear: clear ? inputProps === null || inputProps === void 0 ? void 0 : inputProps.onClear : undefined }, restProps.fieldProps) })));
88
94
  });
89
95
 
90
96
  exports.InputAutocompleteMobile = InputAutocompleteMobile;
@@ -4,5 +4,8 @@ import React from 'react';
4
4
  declare const InputAutocompleteModalMobile: React.ForwardRefExoticComponent<import("../types").InputAutocompleteCommonProps & {
5
5
  isBottomSheet?: boolean | undefined;
6
6
  transitionProps?: Partial<import("react-transition-group/Transition").TransitionProps<undefined>> | undefined;
7
+ onApply?: (() => void) | undefined;
8
+ onCancel?: (() => void) | undefined;
9
+ title?: string | undefined;
7
10
  } & React.RefAttributes<HTMLDivElement>>;
8
11
  export { InputAutocompleteModalMobile };
package/cssm/types.d.ts CHANGED
@@ -38,6 +38,19 @@ type MobileProps = {
38
38
  * Пропсы анимации контента (CSSTransition)
39
39
  */
40
40
  transitionProps?: NonNullable<BottomSheetSelectMobileProps['bottomSheetProps']>['transitionProps'];
41
+ /**
42
+ * Обработчик нажатия на кнопку «Продолжить» в BottomSheet или модальном окне
43
+ */
44
+ onApply?: () => void;
45
+ /**
46
+ * Обработчик нажатия на кнопку «Отмена» в BottomSheet или модальном окне
47
+ */
48
+ onCancel?: () => void;
49
+ /**
50
+ * Заголовок в модальном окне или шторке.
51
+ * Если не передан, то заголовок будет совпадать с label. Если не передан и label, то заголовок будет равен placeholder
52
+ */
53
+ title?: string;
41
54
  };
42
55
  type InputAutocompleteMobileProps = InputAutocompleteCommonProps & MobileProps;
43
56
  interface InputAutocompleteProps extends InputAutocompleteCommonProps {
@@ -4,7 +4,7 @@ import mergeRefs from 'react-merge-refs';
4
4
  import cn from 'classnames';
5
5
  import { InputDesktop } from '@alfalab/core-components-input/esm/desktop';
6
6
 
7
- var styles = {"arrow":"input-autocomplete__arrow_wt0tr","error":"input-autocomplete__error_wt0tr"};
7
+ var styles = {"arrow":"input-autocomplete__arrow_ldg52","error":"input-autocomplete__error_ldg52"};
8
8
  require('./index.css')
9
9
 
10
10
  var AutocompleteField = function (_a) {
@@ -1,4 +1,4 @@
1
- /* hash: wsrha */
2
- .input-autocomplete__arrow_wt0tr.input-autocomplete__error_wt0tr ~ * {
1
+ /* hash: 5vm6i */
2
+ .input-autocomplete__arrow_ldg52.input-autocomplete__error_ldg52 ~ * {
3
3
  display: none;
4
4
  }
@@ -6,7 +6,7 @@ import { ClearButton } from '@alfalab/core-components-input/esm/shared';
6
6
  import { getDataTestId } from '@alfalab/core-components-shared/esm';
7
7
  import { useFocus } from '@alfalab/hooks';
8
8
 
9
- var styles = {"component":"input-autocomplete__component_ymkry","field":"input-autocomplete__field_ymkry","disabled":"input-autocomplete__disabled_ymkry","placeholder":"input-autocomplete__placeholder_ymkry","contentWrapper":"input-autocomplete__contentWrapper_ymkry","value":"input-autocomplete__value_ymkry","focusVisible":"input-autocomplete__focusVisible_ymkry"};
9
+ var styles = {"component":"input-autocomplete__component_3udw2","field":"input-autocomplete__field_3udw2","disabled":"input-autocomplete__disabled_3udw2","placeholder":"input-autocomplete__placeholder_3udw2","contentWrapper":"input-autocomplete__contentWrapper_3udw2","value":"input-autocomplete__value_3udw2","focusVisible":"input-autocomplete__focusVisible_3udw2"};
10
10
  require('./index.css')
11
11
 
12
12
  var AutocompleteMobileField = function (_a) {
@@ -1,4 +1,4 @@
1
- /* hash: ru4db */
1
+ /* hash: 1yog3 */
2
2
  :root {
3
3
  } /* deprecated */ :root {
4
4
  --color-light-border-link: #2288fa;
@@ -18,16 +18,16 @@
18
18
  } :root {
19
19
  --focus-color: var(--color-light-border-link);
20
20
  --disabled-cursor: not-allowed;
21
- } .input-autocomplete__component_ymkry {
21
+ } .input-autocomplete__component_3udw2 {
22
22
  width: 100%;
23
23
  outline: none;
24
- } .input-autocomplete__field_ymkry:not(.input-autocomplete__disabled_ymkry) {
24
+ } .input-autocomplete__field_3udw2:not(.input-autocomplete__disabled_3udw2) {
25
25
  cursor: pointer;
26
- } .input-autocomplete__disabled_ymkry {
26
+ } .input-autocomplete__disabled_3udw2 {
27
27
  cursor: var(--disabled-cursor);
28
- } .input-autocomplete__placeholder_ymkry {
28
+ } .input-autocomplete__placeholder_3udw2 {
29
29
  color: var(--color-light-text-secondary);
30
- } .input-autocomplete__contentWrapper_ymkry {
30
+ } .input-autocomplete__contentWrapper_3udw2 {
31
31
  font-size: 16px;
32
32
  line-height: 20px;
33
33
  font-weight: 400;
@@ -36,11 +36,11 @@
36
36
  text-overflow: ellipsis;
37
37
  overflow: hidden;
38
38
  width: 100%;
39
- } .input-autocomplete__value_ymkry {
39
+ } .input-autocomplete__value_3udw2 {
40
40
  overflow: hidden;
41
41
  text-overflow: ellipsis;
42
42
  text-align: left;
43
- } .input-autocomplete__focusVisible_ymkry {
43
+ } .input-autocomplete__focusVisible_3udw2 {
44
44
  outline: 2px solid var(--focus-color);
45
45
  outline-offset: 2px;
46
46
  }
@@ -4,5 +4,8 @@ import React from 'react';
4
4
  declare const InputAutocompleteMobile: React.ForwardRefExoticComponent<import("../types").InputAutocompleteCommonProps & {
5
5
  isBottomSheet?: boolean | undefined;
6
6
  transitionProps?: Partial<import("react-transition-group/Transition").TransitionProps<undefined>> | undefined;
7
+ onApply?: (() => void) | undefined;
8
+ onCancel?: (() => void) | undefined;
9
+ title?: string | undefined;
7
10
  } & React.RefAttributes<unknown>>;
8
11
  export { InputAutocompleteMobile };
@@ -12,13 +12,13 @@ import '@alfalab/core-components-input/esm/shared';
12
12
  import '@alfalab/core-components-shared/esm';
13
13
  import '@alfalab/hooks';
14
14
 
15
- var styles = {"input":"input-autocomplete__input_fjopa"};
15
+ var styles = {"input":"input-autocomplete__input_qz9dz"};
16
16
  require('./mobile.css')
17
17
 
18
18
  var InputAutocompleteMobile = React.forwardRef(function (_a, ref) {
19
19
  var _b;
20
20
  var _c;
21
- var Input = _a.Input, value = _a.value, name = _a.name, _d = _a.Arrow, Arrow = _d === void 0 ? null : _d, label = _a.label, _e = _a.placeholder, placeholder = _e === void 0 ? '' : _e, _f = _a.size, size = _f === void 0 ? 's' : _f, openProp = _a.open, onInput = _a.onInput, onOpen = _a.onOpen, multiple = _a.multiple, inputProps = _a.inputProps, _g = _a.isBottomSheet, isBottomSheet = _g === void 0 ? true : _g, dataTestId = _a.dataTestId, transitionProps = _a.transitionProps, restProps = __rest(_a, ["Input", "value", "name", "Arrow", "label", "placeholder", "size", "open", "onInput", "onOpen", "multiple", "inputProps", "isBottomSheet", "dataTestId", "transitionProps"]);
21
+ var Input = _a.Input, value = _a.value, name = _a.name, _d = _a.Arrow, Arrow = _d === void 0 ? null : _d, label = _a.label, _e = _a.placeholder, placeholder = _e === void 0 ? '' : _e, _f = _a.size, size = _f === void 0 ? 's' : _f, openProp = _a.open, onInput = _a.onInput, onOpen = _a.onOpen, multiple = _a.multiple, inputProps = _a.inputProps, _g = _a.isBottomSheet, isBottomSheet = _g === void 0 ? true : _g, dataTestId = _a.dataTestId, transitionProps = _a.transitionProps, onCancel = _a.onCancel, onApply = _a.onApply, title = _a.title, restProps = __rest(_a, ["Input", "value", "name", "Arrow", "label", "placeholder", "size", "open", "onInput", "onOpen", "multiple", "inputProps", "isBottomSheet", "dataTestId", "transitionProps", "onCancel", "onApply", "title"]);
22
22
  var _h = useState(false), open = _h[0], setOpen = _h[1];
23
23
  var frozenValue = useRef('');
24
24
  var searchInputRef = useRef(null);
@@ -44,12 +44,15 @@ var InputAutocompleteMobile = React.forwardRef(function (_a, ref) {
44
44
  }
45
45
  }, 300);
46
46
  }, []);
47
- var handleApply = function () { return setModalVisibility(false); };
47
+ var handleApply = function () {
48
+ setModalVisibility(false);
49
+ onApply === null || onApply === void 0 ? void 0 : onApply();
50
+ };
48
51
  var handleCancel = function () {
49
52
  setModalVisibility(false);
50
53
  restorePrevValue();
54
+ onCancel === null || onCancel === void 0 ? void 0 : onCancel();
51
55
  };
52
- var handleClear = function () { return onInput === null || onInput === void 0 ? void 0 : onInput(null, { value: '' }); };
53
56
  var handleExiting = function (node) {
54
57
  var _a, _b;
55
58
  (_a = targetRef.current) === null || _a === void 0 ? void 0 : _a.focus();
@@ -58,7 +61,7 @@ var InputAutocompleteMobile = React.forwardRef(function (_a, ref) {
58
61
  var isOpen = Boolean(open || openProp);
59
62
  var Component = isBottomSheet ? SelectMobile : SelectModalMobile;
60
63
  var componentProps = (_b = {
61
- title: label || placeholder,
64
+ title: title || label || placeholder,
62
65
  onClose: restorePrevValue,
63
66
  transitionProps: __assign(__assign({}, transitionProps), { onExiting: handleExiting })
64
67
  },
@@ -69,11 +72,14 @@ var InputAutocompleteMobile = React.forwardRef(function (_a, ref) {
69
72
  var clear = (_c = inputProps === null || inputProps === void 0 ? void 0 : inputProps.clear) !== null && _c !== void 0 ? _c : false;
70
73
  return (React.createElement(Component, __assign({ Field: AutocompleteMobileField }, restProps, (isBottomSheet
71
74
  ? { bottomSheetProps: componentProps }
72
- : { modalProps: componentProps }), { dataTestId: dataTestId, useWithApplyHook: false, showSearch: true, searchProps: {
75
+ : {
76
+ modalProps: componentProps,
77
+ modalHeaderProps: { title: title },
78
+ }), { dataTestId: dataTestId, useWithApplyHook: false, showSearch: true, searchProps: {
73
79
  value: value,
74
80
  filterFn: searchFilterStub,
75
81
  componentProps: __assign(__assign({ leftAddons: null, placeholder: placeholder }, inputProps), { className: cn(styles.input, inputProps === null || inputProps === void 0 ? void 0 : inputProps.className), clear: clear, ref: mergeRefs([searchInputRef, inputProps === null || inputProps === void 0 ? void 0 : inputProps.ref]), onChange: onInput }),
76
- }, Search: Input, ref: mergeRefs([targetRef, ref]), open: isOpen, onOpen: handleOpen, Arrow: Arrow, placeholder: placeholder, label: label, size: size, name: name, multiple: multiple, optionsListProps: __assign({ footer: (React.createElement(Footer, { showClear: true, handleClear: handleCancel, handleApply: handleApply, clearText: '\u041E\u0442\u043C\u0435\u043D\u0430', applyText: '\u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C', dataTestId: dataTestId })) }, restProps.optionsListProps), fieldProps: __assign({ value: isOpen ? frozenValue.current : value, clear: clear, onClear: clear ? handleClear : undefined }, restProps.fieldProps) })));
82
+ }, Search: Input, ref: mergeRefs([targetRef, ref]), open: isOpen, onOpen: handleOpen, Arrow: Arrow, placeholder: placeholder, label: label, size: size, name: name, multiple: multiple, optionsListProps: __assign({ footer: (React.createElement(Footer, { showClear: true, handleClear: handleCancel, handleApply: handleApply, clearText: '\u041E\u0442\u043C\u0435\u043D\u0430', applyText: '\u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C', dataTestId: dataTestId })) }, restProps.optionsListProps), fieldProps: __assign({ value: isOpen ? frozenValue.current : value, clear: clear, onClear: clear ? inputProps === null || inputProps === void 0 ? void 0 : inputProps.onClear : undefined }, restProps.fieldProps) })));
77
83
  });
78
84
 
79
85
  export { InputAutocompleteMobile };
@@ -4,5 +4,8 @@ import React from 'react';
4
4
  declare const InputAutocompleteModalMobile: React.ForwardRefExoticComponent<import("../types").InputAutocompleteCommonProps & {
5
5
  isBottomSheet?: boolean | undefined;
6
6
  transitionProps?: Partial<import("react-transition-group/Transition").TransitionProps<undefined>> | undefined;
7
+ onApply?: (() => void) | undefined;
8
+ onCancel?: (() => void) | undefined;
9
+ title?: string | undefined;
7
10
  } & React.RefAttributes<HTMLDivElement>>;
8
11
  export { InputAutocompleteModalMobile };
@@ -1,4 +1,4 @@
1
- /* hash: 1otm4 */
1
+ /* hash: x785z */
2
2
  :root {
3
3
  } /* deprecated */ :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
4
4
  } :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
@@ -14,6 +14,6 @@
14
14
  } :root {
15
15
  } :root {
16
16
  } :root {
17
- } .input-autocomplete__input_fjopa {
17
+ } .input-autocomplete__input_qz9dz {
18
18
  width: auto;
19
19
  }
package/esm/types.d.ts CHANGED
@@ -38,6 +38,19 @@ type MobileProps = {
38
38
  * Пропсы анимации контента (CSSTransition)
39
39
  */
40
40
  transitionProps?: NonNullable<BottomSheetSelectMobileProps['bottomSheetProps']>['transitionProps'];
41
+ /**
42
+ * Обработчик нажатия на кнопку «Продолжить» в BottomSheet или модальном окне
43
+ */
44
+ onApply?: () => void;
45
+ /**
46
+ * Обработчик нажатия на кнопку «Отмена» в BottomSheet или модальном окне
47
+ */
48
+ onCancel?: () => void;
49
+ /**
50
+ * Заголовок в модальном окне или шторке.
51
+ * Если не передан, то заголовок будет совпадать с label. Если не передан и label, то заголовок будет равен placeholder
52
+ */
53
+ title?: string;
41
54
  };
42
55
  type InputAutocompleteMobileProps = InputAutocompleteCommonProps & MobileProps;
43
56
  interface InputAutocompleteProps extends InputAutocompleteCommonProps {
@@ -4,5 +4,8 @@ import React from 'react';
4
4
  declare const InputAutocompleteMobile: React.ForwardRefExoticComponent<import("../types").InputAutocompleteCommonProps & {
5
5
  isBottomSheet?: boolean | undefined;
6
6
  transitionProps?: Partial<import("react-transition-group/Transition").TransitionProps<undefined>> | undefined;
7
+ onApply?: (() => void) | undefined;
8
+ onCancel?: (() => void) | undefined;
9
+ title?: string | undefined;
7
10
  } & React.RefAttributes<unknown>>;
8
11
  export { InputAutocompleteMobile };
@@ -23,13 +23,13 @@ var mergeRefs__default = /*#__PURE__*/_interopDefaultCompat(mergeRefs);
23
23
  var cn__default = /*#__PURE__*/_interopDefaultCompat(cn);
24
24
  var throttle__default = /*#__PURE__*/_interopDefaultCompat(throttle);
25
25
 
26
- var styles = {"input":"input-autocomplete__input_fjopa"};
26
+ var styles = {"input":"input-autocomplete__input_qz9dz"};
27
27
  require('./mobile.css')
28
28
 
29
29
  var InputAutocompleteMobile = React__default.default.forwardRef(function (_a, ref) {
30
30
  var _b;
31
31
  var _c;
32
- var Input = _a.Input, value = _a.value, name = _a.name, _d = _a.Arrow, Arrow = _d === void 0 ? null : _d, label = _a.label, _e = _a.placeholder, placeholder = _e === void 0 ? '' : _e, _f = _a.size, size = _f === void 0 ? 's' : _f, openProp = _a.open, onInput = _a.onInput, onOpen = _a.onOpen, multiple = _a.multiple, inputProps = _a.inputProps, _g = _a.isBottomSheet, isBottomSheet = _g === void 0 ? true : _g, dataTestId = _a.dataTestId, transitionProps = _a.transitionProps, restProps = tslib.__rest(_a, ["Input", "value", "name", "Arrow", "label", "placeholder", "size", "open", "onInput", "onOpen", "multiple", "inputProps", "isBottomSheet", "dataTestId", "transitionProps"]);
32
+ var Input = _a.Input, value = _a.value, name = _a.name, _d = _a.Arrow, Arrow = _d === void 0 ? null : _d, label = _a.label, _e = _a.placeholder, placeholder = _e === void 0 ? '' : _e, _f = _a.size, size = _f === void 0 ? 's' : _f, openProp = _a.open, onInput = _a.onInput, onOpen = _a.onOpen, multiple = _a.multiple, inputProps = _a.inputProps, _g = _a.isBottomSheet, isBottomSheet = _g === void 0 ? true : _g, dataTestId = _a.dataTestId, transitionProps = _a.transitionProps, onCancel = _a.onCancel, onApply = _a.onApply, title = _a.title, restProps = tslib.__rest(_a, ["Input", "value", "name", "Arrow", "label", "placeholder", "size", "open", "onInput", "onOpen", "multiple", "inputProps", "isBottomSheet", "dataTestId", "transitionProps", "onCancel", "onApply", "title"]);
33
33
  var _h = React.useState(false), open = _h[0], setOpen = _h[1];
34
34
  var frozenValue = React.useRef('');
35
35
  var searchInputRef = React.useRef(null);
@@ -55,12 +55,15 @@ var InputAutocompleteMobile = React__default.default.forwardRef(function (_a, re
55
55
  }
56
56
  }, 300);
57
57
  }, []);
58
- var handleApply = function () { return setModalVisibility(false); };
58
+ var handleApply = function () {
59
+ setModalVisibility(false);
60
+ onApply === null || onApply === void 0 ? void 0 : onApply();
61
+ };
59
62
  var handleCancel = function () {
60
63
  setModalVisibility(false);
61
64
  restorePrevValue();
65
+ onCancel === null || onCancel === void 0 ? void 0 : onCancel();
62
66
  };
63
- var handleClear = function () { return onInput === null || onInput === void 0 ? void 0 : onInput(null, { value: '' }); };
64
67
  var handleExiting = function (node) {
65
68
  var _a, _b;
66
69
  (_a = targetRef.current) === null || _a === void 0 ? void 0 : _a.focus();
@@ -69,7 +72,7 @@ var InputAutocompleteMobile = React__default.default.forwardRef(function (_a, re
69
72
  var isOpen = Boolean(open || openProp);
70
73
  var Component = isBottomSheet ? mobile.SelectMobile : mobile.SelectModalMobile;
71
74
  var componentProps = (_b = {
72
- title: label || placeholder,
75
+ title: title || label || placeholder,
73
76
  onClose: restorePrevValue,
74
77
  transitionProps: tslib.__assign(tslib.__assign({}, transitionProps), { onExiting: handleExiting })
75
78
  },
@@ -80,11 +83,14 @@ var InputAutocompleteMobile = React__default.default.forwardRef(function (_a, re
80
83
  var clear = (_c = inputProps === null || inputProps === void 0 ? void 0 : inputProps.clear) !== null && _c !== void 0 ? _c : false;
81
84
  return (React__default.default.createElement(Component, tslib.__assign({ Field: autocompleteMobileField_Component.AutocompleteMobileField }, restProps, (isBottomSheet
82
85
  ? { bottomSheetProps: componentProps }
83
- : { modalProps: componentProps }), { dataTestId: dataTestId, useWithApplyHook: false, showSearch: true, searchProps: {
86
+ : {
87
+ modalProps: componentProps,
88
+ modalHeaderProps: { title: title },
89
+ }), { dataTestId: dataTestId, useWithApplyHook: false, showSearch: true, searchProps: {
84
90
  value: value,
85
91
  filterFn: utils.searchFilterStub,
86
92
  componentProps: tslib.__assign(tslib.__assign({ leftAddons: null, placeholder: placeholder }, inputProps), { className: cn__default.default(styles.input, inputProps === null || inputProps === void 0 ? void 0 : inputProps.className), clear: clear, ref: mergeRefs__default.default([searchInputRef, inputProps === null || inputProps === void 0 ? void 0 : inputProps.ref]), onChange: onInput }),
87
- }, Search: Input, ref: mergeRefs__default.default([targetRef, ref]), open: isOpen, onOpen: handleOpen, Arrow: Arrow, placeholder: placeholder, label: label, size: size, name: name, multiple: multiple, optionsListProps: tslib.__assign({ footer: (React__default.default.createElement(shared.Footer, { showClear: true, handleClear: handleCancel, handleApply: handleApply, clearText: '\u041E\u0442\u043C\u0435\u043D\u0430', applyText: '\u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C', dataTestId: dataTestId })) }, restProps.optionsListProps), fieldProps: tslib.__assign({ value: isOpen ? frozenValue.current : value, clear: clear, onClear: clear ? handleClear : undefined }, restProps.fieldProps) })));
93
+ }, Search: Input, ref: mergeRefs__default.default([targetRef, ref]), open: isOpen, onOpen: handleOpen, Arrow: Arrow, placeholder: placeholder, label: label, size: size, name: name, multiple: multiple, optionsListProps: tslib.__assign({ footer: (React__default.default.createElement(shared.Footer, { showClear: true, handleClear: handleCancel, handleApply: handleApply, clearText: '\u041E\u0442\u043C\u0435\u043D\u0430', applyText: '\u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C', dataTestId: dataTestId })) }, restProps.optionsListProps), fieldProps: tslib.__assign({ value: isOpen ? frozenValue.current : value, clear: clear, onClear: clear ? inputProps === null || inputProps === void 0 ? void 0 : inputProps.onClear : undefined }, restProps.fieldProps) })));
88
94
  });
89
95
 
90
96
  exports.InputAutocompleteMobile = InputAutocompleteMobile;
@@ -4,5 +4,8 @@ import React from 'react';
4
4
  declare const InputAutocompleteModalMobile: React.ForwardRefExoticComponent<import("../types").InputAutocompleteCommonProps & {
5
5
  isBottomSheet?: boolean | undefined;
6
6
  transitionProps?: Partial<import("react-transition-group/Transition").TransitionProps<undefined>> | undefined;
7
+ onApply?: (() => void) | undefined;
8
+ onCancel?: (() => void) | undefined;
9
+ title?: string | undefined;
7
10
  } & React.RefAttributes<HTMLDivElement>>;
8
11
  export { InputAutocompleteModalMobile };
package/mobile/mobile.css CHANGED
@@ -1,4 +1,4 @@
1
- /* hash: 1otm4 */
1
+ /* hash: x785z */
2
2
  :root {
3
3
  } /* deprecated */ :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
4
4
  } :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
@@ -14,6 +14,6 @@
14
14
  } :root {
15
15
  } :root {
16
16
  } :root {
17
- } .input-autocomplete__input_fjopa {
17
+ } .input-autocomplete__input_qz9dz {
18
18
  width: auto;
19
19
  }
@@ -3,7 +3,7 @@ import mergeRefs from 'react-merge-refs';
3
3
  import cn from 'classnames';
4
4
  import { InputDesktop } from '@alfalab/core-components-input/modern/desktop';
5
5
 
6
- const styles = {"arrow":"input-autocomplete__arrow_wt0tr","error":"input-autocomplete__error_wt0tr"};
6
+ const styles = {"arrow":"input-autocomplete__arrow_ldg52","error":"input-autocomplete__error_ldg52"};
7
7
  require('./index.css')
8
8
 
9
9
  const AutocompleteField = ({ label, labelView = 'inner', placeholder, size, Arrow, Input = InputDesktop, value, error, success, hint, disabled, readOnly, onInput, inputProps = {}, innerProps, }) => {
@@ -1,4 +1,4 @@
1
- /* hash: wsrha */
2
- .input-autocomplete__arrow_wt0tr.input-autocomplete__error_wt0tr ~ * {
1
+ /* hash: 5vm6i */
2
+ .input-autocomplete__arrow_ldg52.input-autocomplete__error_ldg52 ~ * {
3
3
  display: none;
4
4
  }
@@ -5,7 +5,7 @@ import { ClearButton } from '@alfalab/core-components-input/modern/shared';
5
5
  import { getDataTestId } from '@alfalab/core-components-shared/modern';
6
6
  import { useFocus } from '@alfalab/hooks';
7
7
 
8
- const styles = {"component":"input-autocomplete__component_ymkry","field":"input-autocomplete__field_ymkry","disabled":"input-autocomplete__disabled_ymkry","placeholder":"input-autocomplete__placeholder_ymkry","contentWrapper":"input-autocomplete__contentWrapper_ymkry","value":"input-autocomplete__value_ymkry","focusVisible":"input-autocomplete__focusVisible_ymkry"};
8
+ const styles = {"component":"input-autocomplete__component_3udw2","field":"input-autocomplete__field_3udw2","disabled":"input-autocomplete__disabled_3udw2","placeholder":"input-autocomplete__placeholder_3udw2","contentWrapper":"input-autocomplete__contentWrapper_3udw2","value":"input-autocomplete__value_3udw2","focusVisible":"input-autocomplete__focusVisible_3udw2"};
9
9
  require('./index.css')
10
10
 
11
11
  const AutocompleteMobileField = ({ size = 'm', open, disabled, value, innerProps, dataTestId, fieldClassName, labelView = 'inner', placeholder, Arrow, valueRenderer, toggleMenu, setSelectedItems, selectedMultiple, FormControlComponent, rightAddons, error, readOnly, clear, onClear, onInput, colors = 'default', ...restProps }) => {
@@ -1,4 +1,4 @@
1
- /* hash: ru4db */
1
+ /* hash: 1yog3 */
2
2
  :root {
3
3
  } /* deprecated */ :root {
4
4
  --color-light-border-link: #2288fa;
@@ -18,16 +18,16 @@
18
18
  } :root {
19
19
  --focus-color: var(--color-light-border-link);
20
20
  --disabled-cursor: not-allowed;
21
- } .input-autocomplete__component_ymkry {
21
+ } .input-autocomplete__component_3udw2 {
22
22
  width: 100%;
23
23
  outline: none;
24
- } .input-autocomplete__field_ymkry:not(.input-autocomplete__disabled_ymkry) {
24
+ } .input-autocomplete__field_3udw2:not(.input-autocomplete__disabled_3udw2) {
25
25
  cursor: pointer;
26
- } .input-autocomplete__disabled_ymkry {
26
+ } .input-autocomplete__disabled_3udw2 {
27
27
  cursor: var(--disabled-cursor);
28
- } .input-autocomplete__placeholder_ymkry {
28
+ } .input-autocomplete__placeholder_3udw2 {
29
29
  color: var(--color-light-text-secondary);
30
- } .input-autocomplete__contentWrapper_ymkry {
30
+ } .input-autocomplete__contentWrapper_3udw2 {
31
31
  font-size: 16px;
32
32
  line-height: 20px;
33
33
  font-weight: 400;
@@ -36,11 +36,11 @@
36
36
  text-overflow: ellipsis;
37
37
  overflow: hidden;
38
38
  width: 100%;
39
- } .input-autocomplete__value_ymkry {
39
+ } .input-autocomplete__value_3udw2 {
40
40
  overflow: hidden;
41
41
  text-overflow: ellipsis;
42
42
  text-align: left;
43
- } .input-autocomplete__focusVisible_ymkry {
43
+ } .input-autocomplete__focusVisible_3udw2 {
44
44
  outline: 2px solid var(--focus-color);
45
45
  outline-offset: 2px;
46
46
  }
@@ -4,5 +4,8 @@ import React from 'react';
4
4
  declare const InputAutocompleteMobile: React.ForwardRefExoticComponent<import("../types").InputAutocompleteCommonProps & {
5
5
  isBottomSheet?: boolean | undefined;
6
6
  transitionProps?: Partial<import("react-transition-group/Transition").TransitionProps<undefined>> | undefined;
7
+ onApply?: (() => void) | undefined;
8
+ onCancel?: (() => void) | undefined;
9
+ title?: string | undefined;
7
10
  } & React.RefAttributes<unknown>>;
8
11
  export { InputAutocompleteMobile };
@@ -11,10 +11,10 @@ import '@alfalab/core-components-input/modern/shared';
11
11
  import '@alfalab/core-components-shared/modern';
12
12
  import '@alfalab/hooks';
13
13
 
14
- const styles = {"input":"input-autocomplete__input_fjopa"};
14
+ const styles = {"input":"input-autocomplete__input_qz9dz"};
15
15
  require('./mobile.css')
16
16
 
17
- const InputAutocompleteMobile = React.forwardRef(({ Input, value, name, Arrow = null, label, placeholder = '', size = 's', open: openProp, onInput, onOpen, multiple, inputProps, isBottomSheet = true, dataTestId, transitionProps, ...restProps }, ref) => {
17
+ const InputAutocompleteMobile = React.forwardRef(({ Input, value, name, Arrow = null, label, placeholder = '', size = 's', open: openProp, onInput, onOpen, multiple, inputProps, isBottomSheet = true, dataTestId, transitionProps, onCancel, onApply, title, ...restProps }, ref) => {
18
18
  const [open, setOpen] = useState(false);
19
19
  const frozenValue = useRef('');
20
20
  const searchInputRef = useRef(null);
@@ -38,12 +38,15 @@ const InputAutocompleteMobile = React.forwardRef(({ Input, value, name, Arrow =
38
38
  input.blur();
39
39
  }
40
40
  }, 300), []);
41
- const handleApply = () => setModalVisibility(false);
41
+ const handleApply = () => {
42
+ setModalVisibility(false);
43
+ onApply?.();
44
+ };
42
45
  const handleCancel = () => {
43
46
  setModalVisibility(false);
44
47
  restorePrevValue();
48
+ onCancel?.();
45
49
  };
46
- const handleClear = () => onInput?.(null, { value: '' });
47
50
  const handleExiting = (node) => {
48
51
  targetRef.current?.focus();
49
52
  transitionProps?.onExiting?.(node);
@@ -51,7 +54,7 @@ const InputAutocompleteMobile = React.forwardRef(({ Input, value, name, Arrow =
51
54
  const isOpen = Boolean(open || openProp);
52
55
  const Component = isBottomSheet ? SelectMobile : SelectModalMobile;
53
56
  const componentProps = {
54
- title: label || placeholder,
57
+ title: title || label || placeholder,
55
58
  onClose: restorePrevValue,
56
59
  transitionProps: {
57
60
  ...transitionProps,
@@ -64,7 +67,10 @@ const InputAutocompleteMobile = React.forwardRef(({ Input, value, name, Arrow =
64
67
  const clear = inputProps?.clear ?? false;
65
68
  return (React.createElement(Component, { Field: AutocompleteMobileField, ...restProps, ...(isBottomSheet
66
69
  ? { bottomSheetProps: componentProps }
67
- : { modalProps: componentProps }), dataTestId: dataTestId, useWithApplyHook: false, showSearch: true, searchProps: {
70
+ : {
71
+ modalProps: componentProps,
72
+ modalHeaderProps: { title },
73
+ }), dataTestId: dataTestId, useWithApplyHook: false, showSearch: true, searchProps: {
68
74
  value,
69
75
  filterFn: searchFilterStub,
70
76
  componentProps: {
@@ -82,7 +88,7 @@ const InputAutocompleteMobile = React.forwardRef(({ Input, value, name, Arrow =
82
88
  }, fieldProps: {
83
89
  value: isOpen ? frozenValue.current : value,
84
90
  clear,
85
- onClear: clear ? handleClear : undefined,
91
+ onClear: clear ? inputProps?.onClear : undefined,
86
92
  ...restProps.fieldProps,
87
93
  } }));
88
94
  });
@@ -4,5 +4,8 @@ import React from 'react';
4
4
  declare const InputAutocompleteModalMobile: React.ForwardRefExoticComponent<import("../types").InputAutocompleteCommonProps & {
5
5
  isBottomSheet?: boolean | undefined;
6
6
  transitionProps?: Partial<import("react-transition-group/Transition").TransitionProps<undefined>> | undefined;
7
+ onApply?: (() => void) | undefined;
8
+ onCancel?: (() => void) | undefined;
9
+ title?: string | undefined;
7
10
  } & React.RefAttributes<HTMLDivElement>>;
8
11
  export { InputAutocompleteModalMobile };
@@ -1,4 +1,4 @@
1
- /* hash: 1otm4 */
1
+ /* hash: x785z */
2
2
  :root {
3
3
  } /* deprecated */ :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
4
4
  } :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
@@ -14,6 +14,6 @@
14
14
  } :root {
15
15
  } :root {
16
16
  } :root {
17
- } .input-autocomplete__input_fjopa {
17
+ } .input-autocomplete__input_qz9dz {
18
18
  width: auto;
19
19
  }
package/modern/types.d.ts CHANGED
@@ -38,6 +38,19 @@ type MobileProps = {
38
38
  * Пропсы анимации контента (CSSTransition)
39
39
  */
40
40
  transitionProps?: NonNullable<BottomSheetSelectMobileProps['bottomSheetProps']>['transitionProps'];
41
+ /**
42
+ * Обработчик нажатия на кнопку «Продолжить» в BottomSheet или модальном окне
43
+ */
44
+ onApply?: () => void;
45
+ /**
46
+ * Обработчик нажатия на кнопку «Отмена» в BottomSheet или модальном окне
47
+ */
48
+ onCancel?: () => void;
49
+ /**
50
+ * Заголовок в модальном окне или шторке.
51
+ * Если не передан, то заголовок будет совпадать с label. Если не передан и label, то заголовок будет равен placeholder
52
+ */
53
+ title?: string;
41
54
  };
42
55
  type InputAutocompleteMobileProps = InputAutocompleteCommonProps & MobileProps;
43
56
  interface InputAutocompleteProps extends InputAutocompleteCommonProps {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfalab/core-components-input-autocomplete",
3
- "version": "11.1.0",
3
+ "version": "11.3.0",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "license": "MIT",
@@ -39,6 +39,9 @@ export const InputAutocompleteMobile = React.forwardRef(
39
39
  isBottomSheet = true,
40
40
  dataTestId,
41
41
  transitionProps,
42
+ onCancel,
43
+ onApply,
44
+ title,
42
45
  ...restProps
43
46
  }: InputAutocompleteMobileProps,
44
47
  ref,
@@ -78,15 +81,17 @@ export const InputAutocompleteMobile = React.forwardRef(
78
81
  [],
79
82
  );
80
83
 
81
- const handleApply = () => setModalVisibility(false);
84
+ const handleApply = () => {
85
+ setModalVisibility(false);
86
+ onApply?.();
87
+ };
82
88
 
83
89
  const handleCancel = () => {
84
90
  setModalVisibility(false);
85
91
  restorePrevValue();
92
+ onCancel?.();
86
93
  };
87
94
 
88
- const handleClear = () => onInput?.(null, { value: '' });
89
-
90
95
  const handleExiting = (node: HTMLElement) => {
91
96
  targetRef.current?.focus();
92
97
  transitionProps?.onExiting?.(node);
@@ -99,7 +104,7 @@ export const InputAutocompleteMobile = React.forwardRef(
99
104
  const componentProps:
100
105
  | ModalSelectMobileProps['modalProps']
101
106
  | BottomSheetSelectMobileProps['bottomSheetProps'] = {
102
- title: label || placeholder,
107
+ title: title || label || placeholder,
103
108
  onClose: restorePrevValue,
104
109
  transitionProps: {
105
110
  ...transitionProps,
@@ -118,7 +123,10 @@ export const InputAutocompleteMobile = React.forwardRef(
118
123
  {...restProps}
119
124
  {...(isBottomSheet
120
125
  ? { bottomSheetProps: componentProps }
121
- : { modalProps: componentProps })}
126
+ : {
127
+ modalProps: componentProps,
128
+ modalHeaderProps: { title },
129
+ })}
122
130
  dataTestId={dataTestId}
123
131
  useWithApplyHook={false}
124
132
  showSearch={true}
@@ -161,7 +169,7 @@ export const InputAutocompleteMobile = React.forwardRef(
161
169
  fieldProps={{
162
170
  value: isOpen ? frozenValue.current : value,
163
171
  clear,
164
- onClear: clear ? handleClear : undefined,
172
+ onClear: clear ? inputProps?.onClear : undefined,
165
173
  ...(restProps.fieldProps as AnyObject),
166
174
  }}
167
175
  />
package/src/types.ts CHANGED
@@ -54,6 +54,22 @@ type MobileProps = {
54
54
  transitionProps?: NonNullable<
55
55
  BottomSheetSelectMobileProps['bottomSheetProps']
56
56
  >['transitionProps'];
57
+
58
+ /**
59
+ * Обработчик нажатия на кнопку «Продолжить» в BottomSheet или модальном окне
60
+ */
61
+ onApply?: () => void;
62
+
63
+ /**
64
+ * Обработчик нажатия на кнопку «Отмена» в BottomSheet или модальном окне
65
+ */
66
+ onCancel?: () => void;
67
+
68
+ /**
69
+ * Заголовок в модальном окне или шторке.
70
+ * Если не передан, то заголовок будет совпадать с label. Если не передан и label, то заголовок будет равен placeholder
71
+ */
72
+ title?: string;
57
73
  };
58
74
 
59
75
  export type InputAutocompleteMobileProps = InputAutocompleteCommonProps & MobileProps;
package/types.d.ts CHANGED
@@ -38,6 +38,19 @@ type MobileProps = {
38
38
  * Пропсы анимации контента (CSSTransition)
39
39
  */
40
40
  transitionProps?: NonNullable<BottomSheetSelectMobileProps['bottomSheetProps']>['transitionProps'];
41
+ /**
42
+ * Обработчик нажатия на кнопку «Продолжить» в BottomSheet или модальном окне
43
+ */
44
+ onApply?: () => void;
45
+ /**
46
+ * Обработчик нажатия на кнопку «Отмена» в BottomSheet или модальном окне
47
+ */
48
+ onCancel?: () => void;
49
+ /**
50
+ * Заголовок в модальном окне или шторке.
51
+ * Если не передан, то заголовок будет совпадать с label. Если не передан и label, то заголовок будет равен placeholder
52
+ */
53
+ title?: string;
41
54
  };
42
55
  type InputAutocompleteMobileProps = InputAutocompleteCommonProps & MobileProps;
43
56
  interface InputAutocompleteProps extends InputAutocompleteCommonProps {