colibri-ui 0.7.126 → 0.7.127
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Calendar/components/Month/Month.js +1 -1
- package/Calendar/index.module.css +2 -2
- package/Datepicker/components/DatePicker/index.js +2 -2
- package/Datepicker/components/DatePicker/index.module.css +17 -17
- package/Datepicker/components/TimePicker/index.d.ts +0 -1
- package/Datepicker/components/TimePicker/index.js +4 -4
- package/Datepicker/components/TimePicker/index.module.css +19 -19
- package/Dropdown/index.js +2 -2
- package/Menu/components/MenuItem/index.js +0 -1
- package/MultiSelect/components/MenuOverlay/index.d.ts +19 -0
- package/MultiSelect/components/MenuOverlay/index.js +103 -0
- package/MultiSelect/components/MenuOverlay/index.module.css +9 -0
- package/MultiSelect/components/MenuOverlayItem/index.d.ts +14 -0
- package/MultiSelect/components/MenuOverlayItem/index.js +28 -0
- package/MultiSelect/index.d.ts +4 -0
- package/MultiSelect/index.js +136 -0
- package/MultiSelect/index.module.css +36 -0
- package/MultiSelect/index.props.d.ts +29 -0
- package/MultiSelect/package.json +6 -0
- package/MultiSelect/utils/index.d.ts +1 -0
- package/MultiSelect/utils/index.js +7 -0
- package/Select/index.js +2 -2
- package/Tooltip/index.js +4 -2
- package/base/InputRoot/index.js +2 -2
- package/esm/Calendar/components/Month/Month.js +1 -1
- package/esm/Calendar/index.module.css +2 -2
- package/esm/Datepicker/components/DatePicker/index.js +2 -2
- package/esm/Datepicker/components/DatePicker/index.module.css +17 -17
- package/esm/Datepicker/components/TimePicker/index.d.ts +0 -1
- package/esm/Datepicker/components/TimePicker/index.js +4 -4
- package/esm/Datepicker/components/TimePicker/index.module.css +19 -19
- package/esm/Dropdown/index.js +2 -2
- package/esm/Menu/components/MenuItem/index.js +0 -1
- package/esm/MultiSelect/components/MenuOverlay/index.d.ts +19 -0
- package/esm/MultiSelect/components/MenuOverlay/index.js +93 -0
- package/esm/MultiSelect/components/MenuOverlay/index.module.css +9 -0
- package/esm/MultiSelect/components/MenuOverlayItem/index.d.ts +14 -0
- package/esm/MultiSelect/components/MenuOverlayItem/index.js +20 -0
- package/esm/MultiSelect/index.d.ts +4 -0
- package/esm/MultiSelect/index.js +126 -0
- package/esm/MultiSelect/index.module.css +36 -0
- package/esm/MultiSelect/index.props.d.ts +29 -0
- package/esm/MultiSelect/utils/index.d.ts +1 -0
- package/esm/MultiSelect/utils/index.js +5 -0
- package/esm/Select/index.js +2 -2
- package/esm/Tooltip/index.js +4 -2
- package/esm/base/InputRoot/index.js +2 -2
- package/esm/index.d.ts +1 -0
- package/esm/index.js +1 -0
- package/index.d.ts +1 -0
- package/index.js +37 -35
- package/package.json +1 -1
|
@@ -77,7 +77,7 @@ var Month = function Month(props) {
|
|
|
77
77
|
className: clx(styles__default.default.table)
|
|
78
78
|
}, /*#__PURE__*/React__namespace.createElement("ul", {
|
|
79
79
|
className: clx(styles__default.default.legend)
|
|
80
|
-
}, tslib.__spreadArray([], Array(7), true).map(function (
|
|
80
|
+
}, tslib.__spreadArray([], Array(7), true).map(function (_) {
|
|
81
81
|
var rest = [];
|
|
82
82
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
83
83
|
rest[_i - 1] = arguments[_i];
|
|
@@ -39,9 +39,9 @@ var DatePicker = function DatePicker(_a) {
|
|
|
39
39
|
}
|
|
40
40
|
})
|
|
41
41
|
}, /*#__PURE__*/React__default.default.createElement("div", {
|
|
42
|
-
className: clx(styles__default.default[
|
|
42
|
+
className: clx(styles__default.default["input-container"], styles__default.default["input-date"], className)
|
|
43
43
|
}, /*#__PURE__*/React__default.default.createElement("input", {
|
|
44
|
-
className: clx(styles__default.default[
|
|
44
|
+
className: clx(styles__default.default["input-field"]),
|
|
45
45
|
tabIndex: 0,
|
|
46
46
|
"aria-expanded": "false",
|
|
47
47
|
"aria-haspopup": "true",
|
|
@@ -1,47 +1,47 @@
|
|
|
1
1
|
.input-container {
|
|
2
|
-
|
|
2
|
+
align-items: center;
|
|
3
|
+
border-bottom: 1px solid var(--palette-bg-3);
|
|
3
4
|
border-bottom-right-radius: 0.375rem;
|
|
4
|
-
border-top: 1px solid var(--palette-bg-3);
|
|
5
5
|
border-right: 1px solid var(--palette-bg-3);
|
|
6
|
-
border-
|
|
6
|
+
border-top: 1px solid var(--palette-bg-3);
|
|
7
|
+
border-top-right-radius: 0.375rem;
|
|
8
|
+
box-sizing: border-box;
|
|
7
9
|
display: flex;
|
|
8
|
-
justify-content: center;
|
|
9
|
-
align-items: center;
|
|
10
10
|
height: 36px;
|
|
11
|
-
|
|
11
|
+
justify-content: center;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
.input-field {
|
|
15
|
+
background: transparent;
|
|
16
|
+
border: none;
|
|
17
|
+
box-sizing: border-box;
|
|
18
|
+
font-size: 1em;
|
|
15
19
|
height: 100%;
|
|
20
|
+
outline: none;
|
|
16
21
|
padding: 4px;
|
|
17
22
|
text-align: center;
|
|
18
|
-
font-size: 1em;
|
|
19
|
-
outline: none;
|
|
20
|
-
border: none;
|
|
21
23
|
width: 100%;
|
|
22
|
-
background: transparent;
|
|
23
|
-
box-sizing: border-box;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
.input-date {
|
|
27
|
-
position: relative;
|
|
28
27
|
flex: 3;
|
|
28
|
+
position: relative;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
.input-date:focus-within {
|
|
32
|
-
border-top: 1px solid var(--palette-primary-3);
|
|
33
|
-
border-right: 1px solid var(--palette-primary-3);
|
|
34
32
|
border-bottom: 1px solid var(--palette-primary-3);
|
|
33
|
+
border-right: 1px solid var(--palette-primary-3);
|
|
34
|
+
border-top: 1px solid var(--palette-primary-3);
|
|
35
35
|
box-shadow: 0 0 0 2px var(--palette-primary-2);
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
.input-date:focus-within::before {
|
|
39
|
+
background-color: var(--palette-primary-3);
|
|
39
40
|
content: "";
|
|
40
|
-
position: absolute;
|
|
41
41
|
height: 100%;
|
|
42
|
-
width: 1px;
|
|
43
|
-
background-color: var(--palette-primary-3);
|
|
44
42
|
left: 0;
|
|
43
|
+
position: absolute;
|
|
44
|
+
width: 1px;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
.calendar {
|
|
@@ -2,7 +2,6 @@ import React from "react";
|
|
|
2
2
|
interface TimePickerProps {
|
|
3
3
|
className?: string;
|
|
4
4
|
interval?: 5 | 10 | 15 | 30;
|
|
5
|
-
value?: string;
|
|
6
5
|
selectedTime?: string;
|
|
7
6
|
}
|
|
8
7
|
declare const _default: React.MemoExoticComponent<({ className, interval, selectedTime, }: TimePickerProps) => React.JSX.Element>;
|
|
@@ -48,9 +48,9 @@ var TimePicker = function TimePicker(_a) {
|
|
|
48
48
|
options: options,
|
|
49
49
|
fontSize: 14,
|
|
50
50
|
customInputRoot: /*#__PURE__*/React__default.default.createElement("div", {
|
|
51
|
-
className: clx(styles__default.default[
|
|
51
|
+
className: clx(styles__default.default["input-container"], styles__default.default["input-time"])
|
|
52
52
|
}, /*#__PURE__*/React__default.default.createElement("input", {
|
|
53
|
-
className: clx(styles__default.default[
|
|
53
|
+
className: clx(styles__default.default["input-field"]),
|
|
54
54
|
tabIndex: 0,
|
|
55
55
|
"aria-expanded": "false",
|
|
56
56
|
"aria-haspopup": "true",
|
|
@@ -61,8 +61,8 @@ var TimePicker = function TimePicker(_a) {
|
|
|
61
61
|
value: time
|
|
62
62
|
})),
|
|
63
63
|
value: time,
|
|
64
|
-
onChange: function onChange(
|
|
65
|
-
return setTime(
|
|
64
|
+
onChange: function onChange(value) {
|
|
65
|
+
return setTime(value);
|
|
66
66
|
}
|
|
67
67
|
});
|
|
68
68
|
};
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
.input-container {
|
|
2
|
-
|
|
2
|
+
align-items: center;
|
|
3
|
+
border-bottom: 1px solid var(--palette-bg-3);
|
|
3
4
|
border-bottom-left-radius: 0.375rem;
|
|
4
|
-
border-top: 1px solid var(--palette-bg-3);
|
|
5
5
|
border-left: 1px solid var(--palette-bg-3);
|
|
6
|
-
border-
|
|
6
|
+
border-top: 1px solid var(--palette-bg-3);
|
|
7
|
+
border-top-left-radius: 0.375rem;
|
|
8
|
+
box-sizing: border-box;
|
|
7
9
|
display: flex;
|
|
8
|
-
justify-content: center;
|
|
9
|
-
align-items: center;
|
|
10
10
|
height: 36px;
|
|
11
|
-
|
|
11
|
+
justify-content: center;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
.input-field {
|
|
15
|
+
background: transparent;
|
|
16
|
+
border: none;
|
|
17
|
+
box-sizing: border-box;
|
|
18
|
+
font-size: 1em;
|
|
15
19
|
height: 100%;
|
|
20
|
+
outline: none;
|
|
16
21
|
padding: 4px;
|
|
17
22
|
text-align: center;
|
|
18
|
-
font-size: 1em;
|
|
19
|
-
outline: none;
|
|
20
|
-
border: none;
|
|
21
23
|
width: 100%;
|
|
22
|
-
background: transparent;
|
|
23
|
-
box-sizing: border-box;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
.input-time {
|
|
@@ -28,29 +28,29 @@
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
.input-time::before {
|
|
31
|
+
background-color: var(--palette-bg-3);
|
|
31
32
|
content: "";
|
|
32
|
-
position: absolute;
|
|
33
33
|
height: 100%;
|
|
34
|
-
|
|
35
|
-
background-color: var(--palette-bg-3);
|
|
34
|
+
position: absolute;
|
|
36
35
|
right: 0;
|
|
36
|
+
width: 1px;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
.input-time:focus-within {
|
|
40
|
-
border-top: 1px solid var(--palette-primary-3);
|
|
41
|
-
border-left: 1px solid var(--palette-primary-3);
|
|
42
40
|
border-bottom: 1px solid var(--palette-primary-3);
|
|
41
|
+
border-left: 1px solid var(--palette-primary-3);
|
|
42
|
+
border-top: 1px solid var(--palette-primary-3);
|
|
43
43
|
box-shadow: 0 0 0 2px var(--palette-primary-2);
|
|
44
44
|
z-index: 2;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
.input-time:focus-within::before {
|
|
48
|
+
background-color: var(--palette-primary-3);
|
|
48
49
|
content: "";
|
|
49
|
-
position: absolute;
|
|
50
50
|
height: 100%;
|
|
51
|
-
|
|
52
|
-
background-color: var(--palette-primary-3);
|
|
51
|
+
position: absolute;
|
|
53
52
|
right: 0;
|
|
53
|
+
width: 1px;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
.select {
|
package/Dropdown/index.js
CHANGED
|
@@ -60,7 +60,7 @@ var Dropdown = function Dropdown(_a) {
|
|
|
60
60
|
enabled: preventOverflow
|
|
61
61
|
}]
|
|
62
62
|
}),
|
|
63
|
-
|
|
63
|
+
popperStyles = _m.styles,
|
|
64
64
|
attributes = _m.attributes,
|
|
65
65
|
update = _m.update;
|
|
66
66
|
var isNotComponent = typeof children === "string";
|
|
@@ -134,7 +134,7 @@ var Dropdown = function Dropdown(_a) {
|
|
|
134
134
|
ref: setPopperElement,
|
|
135
135
|
"data-testid": "popper-container",
|
|
136
136
|
className: clx("popper-container"),
|
|
137
|
-
style: tslib.__assign(tslib.__assign(tslib.__assign(tslib.__assign({},
|
|
137
|
+
style: tslib.__assign(tslib.__assign(tslib.__assign(tslib.__assign({}, popperStyles.popper), {
|
|
138
138
|
zIndex: zIndex,
|
|
139
139
|
minWidth: controlElement === null || controlElement === void 0 ? void 0 : controlElement.offsetWidth
|
|
140
140
|
}), samewidth && {
|
|
@@ -24,7 +24,6 @@ var MenuItem = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
|
24
24
|
children = _a.children;
|
|
25
25
|
return /*#__PURE__*/React__default.default.createElement("li", {
|
|
26
26
|
ref: ref,
|
|
27
|
-
"data-component": "menu-item",
|
|
28
27
|
style: {
|
|
29
28
|
backgroundColor: isSelected ? "var(--palette-bg-2, rgb(232, 240, 254))" : ""
|
|
30
29
|
},
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { ReactNode } from "react";
|
|
3
|
+
import type { GroupProps } from "../../index.props";
|
|
4
|
+
export interface IOption {
|
|
5
|
+
selected: boolean;
|
|
6
|
+
value: string;
|
|
7
|
+
label: ReactNode;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
}
|
|
10
|
+
type MenuOverlayGroup = Omit<GroupProps, "options" | "value"> & {
|
|
11
|
+
options: IOption[];
|
|
12
|
+
value: string;
|
|
13
|
+
};
|
|
14
|
+
type MenuOverlayProps = {
|
|
15
|
+
groups: MenuOverlayGroup[];
|
|
16
|
+
onChange: (key: string) => void;
|
|
17
|
+
};
|
|
18
|
+
declare const _default: React.MemoExoticComponent<({ groups, onChange }: MenuOverlayProps) => React.JSX.Element>;
|
|
19
|
+
export default _default;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var React = require('react');
|
|
6
|
+
var classNames = require('classnames/bind');
|
|
7
|
+
var index$2 = require('../../../Menu/index.js');
|
|
8
|
+
var index$3 = require('../MenuOverlayItem/index.js');
|
|
9
|
+
var generateUniqID = require('../../../helpers/generateUniqID.js');
|
|
10
|
+
var index = require('../../../Typography/index.js');
|
|
11
|
+
var index$1 = require('../../../Separator/index.js');
|
|
12
|
+
var index$4 = require('../../utils/index.js');
|
|
13
|
+
var styles = require('./index.module.css');
|
|
14
|
+
|
|
15
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
|
+
|
|
17
|
+
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
18
|
+
var classNames__default = /*#__PURE__*/_interopDefault(classNames);
|
|
19
|
+
var styles__default = /*#__PURE__*/_interopDefault(styles);
|
|
20
|
+
|
|
21
|
+
var clx = classNames__default.default.bind(styles__default.default);
|
|
22
|
+
var OFFSET_ITEMS_COUNT = 2;
|
|
23
|
+
var MenuOverlay = function MenuOverlay(_a) {
|
|
24
|
+
var groups = _a.groups,
|
|
25
|
+
onChange = _a.onChange;
|
|
26
|
+
var refs = React.useRef({});
|
|
27
|
+
var _b = React.useState({
|
|
28
|
+
top: 0,
|
|
29
|
+
height: 0
|
|
30
|
+
}),
|
|
31
|
+
scrollView = _b[0],
|
|
32
|
+
setScrollView = _b[1];
|
|
33
|
+
var rootRef = React.useRef(null);
|
|
34
|
+
React.useLayoutEffect(function () {
|
|
35
|
+
if (!rootRef || !rootRef.current) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (typeof rootRef.current.scrollTo === "function") {
|
|
39
|
+
rootRef.current.scrollTo({
|
|
40
|
+
top: scrollView.top - OFFSET_ITEMS_COUNT * scrollView.height
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}, [scrollView, rootRef]);
|
|
44
|
+
function scrollToItem(key) {
|
|
45
|
+
var _a, _b, _c, _d;
|
|
46
|
+
if (!refs.current && !refs.current[key]) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
var offsetTop = (_b = (_a = refs.current[key]) === null || _a === void 0 ? void 0 : _a.offsetTop) !== null && _b !== void 0 ? _b : 0;
|
|
50
|
+
var offsetHeight = (_d = (_c = refs.current[key]) === null || _c === void 0 ? void 0 : _c.offsetHeight) !== null && _d !== void 0 ? _d : 0;
|
|
51
|
+
setScrollView({
|
|
52
|
+
top: offsetTop,
|
|
53
|
+
height: offsetHeight
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
React.useLayoutEffect(function () {
|
|
57
|
+
var allOptions = groups.flatMap(function (group) {
|
|
58
|
+
return group.options.map(function (option) {
|
|
59
|
+
return {
|
|
60
|
+
option: option,
|
|
61
|
+
key: "group-".concat(group.value, "-option-").concat(option.value)
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
var firstSelectedOptionWithKey = allOptions.find(function (_a) {
|
|
66
|
+
var option = _a.option;
|
|
67
|
+
return option.selected;
|
|
68
|
+
});
|
|
69
|
+
if (firstSelectedOptionWithKey) {
|
|
70
|
+
var key = firstSelectedOptionWithKey.key;
|
|
71
|
+
scrollToItem(key);
|
|
72
|
+
}
|
|
73
|
+
}, []);
|
|
74
|
+
return /*#__PURE__*/React__default.default.createElement("div", {
|
|
75
|
+
ref: rootRef,
|
|
76
|
+
className: clx(styles__default.default.root)
|
|
77
|
+
}, groups.map(function (group, groupIndex) {
|
|
78
|
+
return /*#__PURE__*/React__default.default.createElement("div", {
|
|
79
|
+
key: generateUniqID.default(groupIndex)
|
|
80
|
+
}, /*#__PURE__*/React__default.default.createElement("div", {
|
|
81
|
+
className: clx(styles__default.default.title)
|
|
82
|
+
}, /*#__PURE__*/React__default.default.createElement(index.default, {
|
|
83
|
+
style: {
|
|
84
|
+
color: "var(--typography-secondary)"
|
|
85
|
+
},
|
|
86
|
+
size: "s"
|
|
87
|
+
}, group.title)), /*#__PURE__*/React__default.default.createElement(index$1.default, null), /*#__PURE__*/React__default.default.createElement(index$2.default, null, group.options.map(function (option, optionIndex) {
|
|
88
|
+
return /*#__PURE__*/React__default.default.createElement(index$3.default, {
|
|
89
|
+
ref: function ref(_ref) {
|
|
90
|
+
refs.current["group-".concat(group.value, "-option-").concat(option.value)] = _ref;
|
|
91
|
+
},
|
|
92
|
+
option: option,
|
|
93
|
+
key: generateUniqID.default(optionIndex),
|
|
94
|
+
onClick: function onClick() {
|
|
95
|
+
return onChange(index$4.createGroupOptionString(group.value, option.value));
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
})));
|
|
99
|
+
}));
|
|
100
|
+
};
|
|
101
|
+
var MenuOverlay$1 = /*#__PURE__*/React.memo(MenuOverlay);
|
|
102
|
+
|
|
103
|
+
exports.default = MenuOverlay$1;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
type SelectItemProps = {
|
|
3
|
+
option: {
|
|
4
|
+
value: string;
|
|
5
|
+
label: React.ReactNode;
|
|
6
|
+
selected: boolean;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
};
|
|
9
|
+
onClick?: () => void;
|
|
10
|
+
};
|
|
11
|
+
declare const _default: React.ForwardRefExoticComponent<SelectItemProps & {
|
|
12
|
+
children?: React.ReactNode | undefined;
|
|
13
|
+
} & React.RefAttributes<HTMLLIElement>>;
|
|
14
|
+
export default _default;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var React = require('react');
|
|
6
|
+
var index = require('../../../Menu/components/MenuItem/index.js');
|
|
7
|
+
var Check = require('../../../Icons/Check.js');
|
|
8
|
+
|
|
9
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
|
|
11
|
+
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
12
|
+
|
|
13
|
+
var SelectItem = function SelectItem(_a, ref) {
|
|
14
|
+
var option = _a.option,
|
|
15
|
+
onClick = _a.onClick;
|
|
16
|
+
return /*#__PURE__*/React__default.default.createElement(index.default, {
|
|
17
|
+
ref: ref,
|
|
18
|
+
onClick: onClick,
|
|
19
|
+
isSelected: option.selected,
|
|
20
|
+
disabled: option.disabled
|
|
21
|
+
}, option.label, option.selected && /*#__PURE__*/React__default.default.createElement(Check.default, {
|
|
22
|
+
width: 16,
|
|
23
|
+
height: 16
|
|
24
|
+
}));
|
|
25
|
+
};
|
|
26
|
+
var SelectItem$1 = /*#__PURE__*/React.forwardRef(SelectItem);
|
|
27
|
+
|
|
28
|
+
exports.default = SelectItem$1;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { MultiSelectProps } from "./index.props";
|
|
3
|
+
declare const MultiSelect: ({ className, groups, zIndex, fontSize, disabled, fullWidth, required, label, hint, error, size, placeholder, name, }: MultiSelectProps) => React.JSX.Element;
|
|
4
|
+
export default MultiSelect;
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var tslib = require('tslib');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var classNames = require('classnames/bind');
|
|
8
|
+
var index$2 = require('../Dropdown/index.js');
|
|
9
|
+
var index$4 = require('../base/InputRoot/index.js');
|
|
10
|
+
var index$1 = require('../base/FormField/index.js');
|
|
11
|
+
require('../Icons/index.js');
|
|
12
|
+
var styles = require('./index.module.css');
|
|
13
|
+
var index$3 = require('./components/MenuOverlay/index.js');
|
|
14
|
+
var index = require('./utils/index.js');
|
|
15
|
+
var Chevron = require('../Icons/Chevron.js');
|
|
16
|
+
|
|
17
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
18
|
+
|
|
19
|
+
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
20
|
+
var classNames__default = /*#__PURE__*/_interopDefault(classNames);
|
|
21
|
+
var styles__default = /*#__PURE__*/_interopDefault(styles);
|
|
22
|
+
|
|
23
|
+
var clx = classNames__default.default.bind(styles__default.default);
|
|
24
|
+
var sortedItems = function sortedItems(items) {
|
|
25
|
+
return items.sort(function (a, b) {
|
|
26
|
+
if (!a || !b) return 0;
|
|
27
|
+
var matchA = a.match(/group-(\d+)-option-(\d+)/);
|
|
28
|
+
var matchB = b.match(/group-(\d+)-option-(\d+)/);
|
|
29
|
+
if (!matchA || !matchB) {
|
|
30
|
+
return 0;
|
|
31
|
+
}
|
|
32
|
+
var _a = matchA.map(Number),
|
|
33
|
+
groupA = _a[1],
|
|
34
|
+
optionA = _a[2];
|
|
35
|
+
var _b = matchB.map(Number),
|
|
36
|
+
groupB = _b[1],
|
|
37
|
+
optionB = _b[2];
|
|
38
|
+
return groupA - groupB || optionA - optionB;
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
var MultiSelect = function MultiSelect(_a) {
|
|
42
|
+
var className = _a.className,
|
|
43
|
+
groups = _a.groups,
|
|
44
|
+
zIndex = _a.zIndex,
|
|
45
|
+
fontSize = _a.fontSize,
|
|
46
|
+
disabled = _a.disabled,
|
|
47
|
+
_b = _a.fullWidth,
|
|
48
|
+
fullWidth = _b === void 0 ? false : _b,
|
|
49
|
+
required = _a.required,
|
|
50
|
+
label = _a.label,
|
|
51
|
+
hint = _a.hint,
|
|
52
|
+
error = _a.error,
|
|
53
|
+
_c = _a.size,
|
|
54
|
+
size = _c === void 0 ? "m" : _c,
|
|
55
|
+
placeholder = _a.placeholder,
|
|
56
|
+
name = _a.name;
|
|
57
|
+
var _d = React.useState(false),
|
|
58
|
+
isOpen = _d[0],
|
|
59
|
+
setIsOpen = _d[1];
|
|
60
|
+
var _e = React.useState([]),
|
|
61
|
+
value = _e[0],
|
|
62
|
+
setValue = _e[1];
|
|
63
|
+
var preparedGroups = React.useMemo(function () {
|
|
64
|
+
return groups.map(function (group) {
|
|
65
|
+
return tslib.__assign(tslib.__assign({}, group), {
|
|
66
|
+
options: group.options.map(function (option) {
|
|
67
|
+
return tslib.__assign(tslib.__assign({}, option), {
|
|
68
|
+
selected: (value === null || value === void 0 ? void 0 : value.includes(index.createGroupOptionString(group.value, option.value))) || false
|
|
69
|
+
});
|
|
70
|
+
})
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
}, [value, groups]);
|
|
74
|
+
var handleChange = React.useCallback(function (key) {
|
|
75
|
+
setValue(function (prev) {
|
|
76
|
+
if (prev.indexOf(key) !== -1) {
|
|
77
|
+
return prev.filter(function (prevValue) {
|
|
78
|
+
return prevValue !== key;
|
|
79
|
+
});
|
|
80
|
+
} else {
|
|
81
|
+
return sortedItems(tslib.__spreadArray(tslib.__spreadArray([], prev, true), [key], false));
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}, [sortedItems]);
|
|
85
|
+
var prepraredLabel = React.useMemo(function () {
|
|
86
|
+
return preparedGroups.flatMap(function (group) {
|
|
87
|
+
return group.options.filter(function (option) {
|
|
88
|
+
return option.selected;
|
|
89
|
+
}).map(function (option) {
|
|
90
|
+
return option.label;
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
}, [preparedGroups]);
|
|
94
|
+
return /*#__PURE__*/React__default.default.createElement(index$1.default, {
|
|
95
|
+
className: clx(styles__default.default["form-field"], {
|
|
96
|
+
"full-width": fullWidth ? 1 : 0
|
|
97
|
+
}, className),
|
|
98
|
+
required: required,
|
|
99
|
+
label: label,
|
|
100
|
+
hint: hint,
|
|
101
|
+
error: error
|
|
102
|
+
}, /*#__PURE__*/React__default.default.createElement(index$2.default, {
|
|
103
|
+
placement: "bottom-start",
|
|
104
|
+
onVisibleChange: setIsOpen,
|
|
105
|
+
trigger: ["click"],
|
|
106
|
+
zIndex: zIndex,
|
|
107
|
+
fontSize: fontSize,
|
|
108
|
+
disabled: !!disabled,
|
|
109
|
+
overlay: /*#__PURE__*/React__default.default.createElement(index$3.default, {
|
|
110
|
+
groups: preparedGroups,
|
|
111
|
+
onChange: handleChange
|
|
112
|
+
}),
|
|
113
|
+
samewidth: true
|
|
114
|
+
}, /*#__PURE__*/React__default.default.createElement(index$4.default, {
|
|
115
|
+
error: error,
|
|
116
|
+
size: size,
|
|
117
|
+
className: clx(styles__default.default.root),
|
|
118
|
+
endIcon: /*#__PURE__*/React__default.default.createElement(Chevron.default, {
|
|
119
|
+
className: clx(styles__default.default.icon, {
|
|
120
|
+
icon_isOpen: isOpen ? 1 : 0
|
|
121
|
+
})
|
|
122
|
+
}),
|
|
123
|
+
disabled: !!disabled
|
|
124
|
+
}, /*#__PURE__*/React__default.default.createElement("div", {
|
|
125
|
+
className: clx(styles__default.default["base-input"])
|
|
126
|
+
}, prepraredLabel.length ? prepraredLabel.join(", ") : (/*#__PURE__*/React__default.default.createElement("span", {
|
|
127
|
+
className: clx(styles__default.default.placeholder)
|
|
128
|
+
}, placeholder))), /*#__PURE__*/React__default.default.createElement("input", {
|
|
129
|
+
type: "hidden",
|
|
130
|
+
name: name,
|
|
131
|
+
tabIndex: -1,
|
|
132
|
+
value: value || ""
|
|
133
|
+
}))));
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
exports.default = MultiSelect;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
.root {
|
|
2
|
+
cursor: pointer;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.icon_isOpen {
|
|
6
|
+
transform: rotate(180deg);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.full-width {
|
|
10
|
+
width: 100%;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.base-input {
|
|
14
|
+
background: transparent;
|
|
15
|
+
border: none;
|
|
16
|
+
display: inline-block;
|
|
17
|
+
flex: 1;
|
|
18
|
+
margin: 7px 0;
|
|
19
|
+
overflow: hidden;
|
|
20
|
+
text-overflow: ellipsis;
|
|
21
|
+
white-space: nowrap;
|
|
22
|
+
width: 100%;
|
|
23
|
+
}
|
|
24
|
+
.base-input ::placeholder {
|
|
25
|
+
color: var(--palette-bg-2);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.placeholder {
|
|
29
|
+
color: var(--input-primary-plaseholder-color);
|
|
30
|
+
display: block;
|
|
31
|
+
max-width: 100%;
|
|
32
|
+
overflow: hidden;
|
|
33
|
+
text-overflow: ellipsis;
|
|
34
|
+
user-select: none;
|
|
35
|
+
white-space: nowrap;
|
|
36
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { FormFieldProps } from "../base/FormField/index.props";
|
|
2
|
+
export type GroupOptions = {
|
|
3
|
+
value: string;
|
|
4
|
+
label: string;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
};
|
|
7
|
+
export type Coordinates = {
|
|
8
|
+
top: number;
|
|
9
|
+
height: number;
|
|
10
|
+
};
|
|
11
|
+
export type GroupProps = {
|
|
12
|
+
value: string;
|
|
13
|
+
title: string;
|
|
14
|
+
options: GroupOptions[];
|
|
15
|
+
};
|
|
16
|
+
type Size = "s" | "m" | "l";
|
|
17
|
+
export interface MultiSelectProps extends Omit<FormFieldProps, "children"> {
|
|
18
|
+
groups: GroupProps[];
|
|
19
|
+
className?: string;
|
|
20
|
+
zIndex?: number;
|
|
21
|
+
fontSize?: number;
|
|
22
|
+
disabled?: boolean;
|
|
23
|
+
fullWidth?: boolean;
|
|
24
|
+
required?: boolean;
|
|
25
|
+
size?: Size;
|
|
26
|
+
placeholder?: string;
|
|
27
|
+
name?: string;
|
|
28
|
+
}
|
|
29
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function createGroupOptionString(groupValue: string, optionValue: string): string;
|
package/Select/index.js
CHANGED
|
@@ -45,12 +45,12 @@ var Select = function Select(_a) {
|
|
|
45
45
|
return options.map(function (_a) {
|
|
46
46
|
var lvalue = _a.value,
|
|
47
47
|
llabel = _a.label,
|
|
48
|
-
|
|
48
|
+
ldisabled = _a.disabled;
|
|
49
49
|
return {
|
|
50
50
|
value: lvalue,
|
|
51
51
|
label: llabel,
|
|
52
52
|
selected: value === lvalue,
|
|
53
|
-
disabled:
|
|
53
|
+
disabled: ldisabled
|
|
54
54
|
};
|
|
55
55
|
});
|
|
56
56
|
}, [value, options]);
|