@terraware/web-components 2.1.3 → 2.1.5
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/components/MultiSelect/MultiSelect.test.d.ts +2 -0
- package/components/MultiSelect/MultiSelect.test.d.ts.map +1 -0
- package/components/MultiSelect/MultiSelect.test.js +91 -0
- package/components/MultiSelect/index.d.ts +21 -0
- package/components/MultiSelect/index.d.ts.map +1 -0
- package/components/MultiSelect/index.js +115 -0
- package/components/MultiSelect/styles.scss +124 -0
- package/components/Pill/index.d.ts +3 -2
- package/components/Pill/index.d.ts.map +1 -1
- package/components/Pill/index.js +22 -12
- package/components/Pill/styles.scss +4 -2
- package/components/PillList/index.d.ts +4 -1
- package/components/PillList/index.d.ts.map +1 -1
- package/components/PillList/index.js +5 -4
- package/components/PillList/styles.scss +12 -0
- package/index.d.ts +2 -1
- package/index.d.ts.map +1 -1
- package/index.js +8 -0
- package/package.json +1 -1
- package/stories/MultiSelect.stories.d.ts +9 -0
- package/stories/MultiSelect.stories.d.ts.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiSelect.test.d.ts","sourceRoot":"","sources":["../../../src/components/MultiSelect/MultiSelect.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _react = require("@testing-library/react");
|
|
6
|
+
|
|
7
|
+
var _react2 = _interopRequireDefault(require("react"));
|
|
8
|
+
|
|
9
|
+
var _ = _interopRequireDefault(require("."));
|
|
10
|
+
|
|
11
|
+
test('show options when placeholder is clicked', function () {
|
|
12
|
+
(0, _react.render)( /*#__PURE__*/_react2.default.createElement(_.default, {
|
|
13
|
+
onAdd: function onAdd() {
|
|
14
|
+
return undefined;
|
|
15
|
+
},
|
|
16
|
+
onRemove: function onRemove() {
|
|
17
|
+
return undefined;
|
|
18
|
+
},
|
|
19
|
+
options: new Map([[1, 'foo'], [2, 'bar'], [3, 'baz']]),
|
|
20
|
+
valueRenderer: function valueRenderer(v) {
|
|
21
|
+
return v;
|
|
22
|
+
},
|
|
23
|
+
selectedOptions: [],
|
|
24
|
+
placeHolder: "Select..."
|
|
25
|
+
})); // we should find the placeholder text
|
|
26
|
+
|
|
27
|
+
var placeHolder = _react.screen.getByText('Select...');
|
|
28
|
+
|
|
29
|
+
expect(placeHolder).toBeInTheDocument(); // we should not find the options yet
|
|
30
|
+
|
|
31
|
+
expect(_react.screen.queryByText('foo')).not.toBeInTheDocument();
|
|
32
|
+
expect(_react.screen.queryByText('bar')).not.toBeInTheDocument();
|
|
33
|
+
expect(_react.screen.queryByText('baz')).not.toBeInTheDocument(); // click the placeholder
|
|
34
|
+
|
|
35
|
+
_react.fireEvent.click(placeHolder); // now the options should be visible
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
expect(_react.screen.queryByText('foo')).toBeInTheDocument();
|
|
39
|
+
expect(_react.screen.queryByText('bar')).toBeInTheDocument();
|
|
40
|
+
expect(_react.screen.queryByText('baz')).toBeInTheDocument();
|
|
41
|
+
});
|
|
42
|
+
test('clicking an option calls the onAdd handler', function () {
|
|
43
|
+
var handleAdd = jest.fn();
|
|
44
|
+
(0, _react.render)( /*#__PURE__*/_react2.default.createElement(_.default, {
|
|
45
|
+
onAdd: handleAdd,
|
|
46
|
+
onRemove: function onRemove() {
|
|
47
|
+
return undefined;
|
|
48
|
+
},
|
|
49
|
+
options: new Map([[1, 'foo'], [2, 'bar'], [3, 'baz']]),
|
|
50
|
+
valueRenderer: function valueRenderer(v) {
|
|
51
|
+
return v;
|
|
52
|
+
},
|
|
53
|
+
selectedOptions: [],
|
|
54
|
+
placeHolder: "Select..."
|
|
55
|
+
})); // click the dropdown chevron
|
|
56
|
+
|
|
57
|
+
var dropdown = _react.screen.getByLabelText('show-options');
|
|
58
|
+
|
|
59
|
+
_react.fireEvent.click(dropdown); // click one of the options
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
var option = _react.screen.getByText('bar');
|
|
63
|
+
|
|
64
|
+
_react.fireEvent.click(option); // addHandler should have been called with id 2
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
expect(handleAdd).toBeCalledWith(2);
|
|
68
|
+
});
|
|
69
|
+
test('clicking the pill remove button calls the onRemove handler', function () {
|
|
70
|
+
var handleRemove = jest.fn();
|
|
71
|
+
(0, _react.render)( /*#__PURE__*/_react2.default.createElement(_.default, {
|
|
72
|
+
onAdd: function onAdd() {
|
|
73
|
+
return undefined;
|
|
74
|
+
},
|
|
75
|
+
onRemove: handleRemove,
|
|
76
|
+
options: new Map([[1, 'foo']]),
|
|
77
|
+
valueRenderer: function valueRenderer(v) {
|
|
78
|
+
return v;
|
|
79
|
+
},
|
|
80
|
+
selectedOptions: [1]
|
|
81
|
+
})); // find a pill with the 'foo' text
|
|
82
|
+
|
|
83
|
+
expect(_react.screen.queryByText('foo')).toBeInTheDocument(); // click the remove button
|
|
84
|
+
|
|
85
|
+
var removeButton = _react.screen.getByLabelText('remove');
|
|
86
|
+
|
|
87
|
+
_react.fireEvent.click(removeButton); // handleRemove should have been called with id 1
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
expect(handleRemove).toBeCalledWith(1);
|
|
91
|
+
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import './styles.scss';
|
|
2
|
+
import { TooltipProps } from '@mui/material';
|
|
3
|
+
export type MultiSelectProps<K, V> = {
|
|
4
|
+
className?: string;
|
|
5
|
+
fullWidth?: boolean;
|
|
6
|
+
helperText?: string;
|
|
7
|
+
id?: string;
|
|
8
|
+
label?: string;
|
|
9
|
+
missingValuePlaceholder?: string;
|
|
10
|
+
onAdd: (item: K) => void;
|
|
11
|
+
onRemove: (item: K) => void;
|
|
12
|
+
onPillClick?: (item: K) => void;
|
|
13
|
+
options: Map<K, V>;
|
|
14
|
+
pillListClassName?: string;
|
|
15
|
+
placeHolder?: string;
|
|
16
|
+
valueRenderer: (value: V) => string;
|
|
17
|
+
selectedOptions: K[];
|
|
18
|
+
tooltipTitle?: TooltipProps['title'];
|
|
19
|
+
};
|
|
20
|
+
export default function MultiSelect<K, V>(props: MultiSelectProps<K, V>): JSX.Element;
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/MultiSelect/index.tsx"],"names":[],"mappings":"AACA,OAAO,eAAe,CAAC;AAEvB,OAAO,EAAa,YAAY,EAAC,MAAM,eAAe,CAAC;AAIvD,MAAM,MAAM,gBAAgB,CAAC,CAAC,EAAE,CAAC,IAAI;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IACzB,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IAChC,OAAO,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC;IACpC,eAAe,EAAE,CAAC,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;CACtC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAyFpF"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = MultiSelect;
|
|
9
|
+
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
11
|
+
|
|
12
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
13
|
+
|
|
14
|
+
require("./styles.scss");
|
|
15
|
+
|
|
16
|
+
var _IconTooltip = _interopRequireDefault(require("../IconTooltip"));
|
|
17
|
+
|
|
18
|
+
var _Icon = _interopRequireDefault(require("../Icon/Icon"));
|
|
19
|
+
|
|
20
|
+
var _PillList = _interopRequireDefault(require("../PillList"));
|
|
21
|
+
|
|
22
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
23
|
+
|
|
24
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
25
|
+
|
|
26
|
+
function MultiSelect(props) {
|
|
27
|
+
var className = props.className,
|
|
28
|
+
fullWidth = props.fullWidth,
|
|
29
|
+
helperText = props.helperText,
|
|
30
|
+
id = props.id,
|
|
31
|
+
label = props.label,
|
|
32
|
+
missingValuePlaceholder = props.missingValuePlaceholder,
|
|
33
|
+
onAdd = props.onAdd,
|
|
34
|
+
onRemove = props.onRemove,
|
|
35
|
+
onPillClick = props.onPillClick,
|
|
36
|
+
options = props.options,
|
|
37
|
+
pillListClassName = props.pillListClassName,
|
|
38
|
+
placeHolder = props.placeHolder,
|
|
39
|
+
valueRenderer = props.valueRenderer,
|
|
40
|
+
selectedOptions = props.selectedOptions,
|
|
41
|
+
tooltipTitle = props.tooltipTitle;
|
|
42
|
+
|
|
43
|
+
var _useState = (0, _react.useState)(false),
|
|
44
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
45
|
+
openedOptions = _useState2[0],
|
|
46
|
+
setOpenedOptions = _useState2[1];
|
|
47
|
+
|
|
48
|
+
var toggleOptions = function toggleOptions() {
|
|
49
|
+
setOpenedOptions(function (isOpen) {
|
|
50
|
+
return !isOpen;
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
var closeOptions = function closeOptions() {
|
|
55
|
+
setOpenedOptions(false);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
var unselectedOptions = Array.from(options.keys()).filter(function (key) {
|
|
59
|
+
return !selectedOptions.includes(key);
|
|
60
|
+
});
|
|
61
|
+
var valuesPillData = selectedOptions.map(function (item) {
|
|
62
|
+
var value = options.get(item);
|
|
63
|
+
return {
|
|
64
|
+
id: item,
|
|
65
|
+
value: value ? valueRenderer(value) : missingValuePlaceholder || ''
|
|
66
|
+
};
|
|
67
|
+
}).filter(function (data) {
|
|
68
|
+
return data.value;
|
|
69
|
+
});
|
|
70
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
71
|
+
className: "multi-select ".concat(className)
|
|
72
|
+
}, label && /*#__PURE__*/_react.default.createElement("label", {
|
|
73
|
+
htmlFor: id,
|
|
74
|
+
className: "multi-select__label"
|
|
75
|
+
}, label, " ", tooltipTitle && /*#__PURE__*/_react.default.createElement(_IconTooltip.default, {
|
|
76
|
+
title: tooltipTitle
|
|
77
|
+
})), /*#__PURE__*/_react.default.createElement("div", {
|
|
78
|
+
className: "multi-select__container ".concat(fullWidth ? 'multi-select__container--fullWidth' : ''),
|
|
79
|
+
onBlur: closeOptions,
|
|
80
|
+
tabIndex: 0
|
|
81
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
82
|
+
id: id,
|
|
83
|
+
className: "multi-select__values",
|
|
84
|
+
onClick: toggleOptions
|
|
85
|
+
}, selectedOptions.length > 0 ? /*#__PURE__*/_react.default.createElement(_PillList.default, {
|
|
86
|
+
data: valuesPillData,
|
|
87
|
+
onRemove: onRemove,
|
|
88
|
+
onClick: onPillClick,
|
|
89
|
+
className: pillListClassName
|
|
90
|
+
}) : /*#__PURE__*/_react.default.createElement("p", {
|
|
91
|
+
className: "multi-select__placeholder-text"
|
|
92
|
+
}, placeHolder), /*#__PURE__*/_react.default.createElement("div", {
|
|
93
|
+
className: 'multi-select__values__icon-button',
|
|
94
|
+
"aria-label": "show-options"
|
|
95
|
+
}, /*#__PURE__*/_react.default.createElement(_Icon.default, {
|
|
96
|
+
name: openedOptions ? 'chevronUp' : 'chevronDown',
|
|
97
|
+
className: "multi-select__values__icon-right"
|
|
98
|
+
}))), options && unselectedOptions.length > 0 && openedOptions && /*#__PURE__*/_react.default.createElement("div", {
|
|
99
|
+
className: "multi-select__options-container"
|
|
100
|
+
}, /*#__PURE__*/_react.default.createElement("ul", {
|
|
101
|
+
className: 'multi-select__options'
|
|
102
|
+
}, unselectedOptions.map(function (optionKey, index) {
|
|
103
|
+
var optionValue = options.get(optionKey);
|
|
104
|
+
return /*#__PURE__*/_react.default.createElement("li", {
|
|
105
|
+
key: index,
|
|
106
|
+
className: "select-value",
|
|
107
|
+
onClick: function onClick() {
|
|
108
|
+
return onAdd(optionKey);
|
|
109
|
+
}
|
|
110
|
+
}, optionValue ? valueRenderer(optionValue) : missingValuePlaceholder || '');
|
|
111
|
+
})))), helperText && /*#__PURE__*/_react.default.createElement("label", {
|
|
112
|
+
htmlFor: id,
|
|
113
|
+
className: "multi-select__help-text"
|
|
114
|
+
}, helperText));
|
|
115
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
@import '../../style-dictionary-dist/terraware.scss';
|
|
2
|
+
|
|
3
|
+
@font-face {
|
|
4
|
+
font-family: 'Inter';
|
|
5
|
+
src: local('Inter'), url(../../fonts/Inter.ttf) format('truetype');
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.multi-select {
|
|
9
|
+
display: flex;
|
|
10
|
+
flex-direction: column;
|
|
11
|
+
|
|
12
|
+
.multi-select__container {
|
|
13
|
+
position: relative;
|
|
14
|
+
width: 228px;
|
|
15
|
+
cursor: pointer;
|
|
16
|
+
|
|
17
|
+
&--fullWidth {
|
|
18
|
+
position: relative;
|
|
19
|
+
width: 100%;
|
|
20
|
+
cursor: pointer;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.multi-select__label {
|
|
25
|
+
font-family: $tw-fnt-frm-fld-label-font-family;
|
|
26
|
+
font-size: $tw-fnt-frm-fld-label-font-size;
|
|
27
|
+
font-weight: $tw-fnt-frm-fld-label-font-weight;
|
|
28
|
+
line-height: $tw-fnt-frm-fld-label-line-height;
|
|
29
|
+
color: $tw-clr-txt-secondary;
|
|
30
|
+
margin-bottom: $tw-spc-base-xx-small;
|
|
31
|
+
display: block;
|
|
32
|
+
width: 100%;
|
|
33
|
+
max-width: 100%;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.multi-select__help-text {
|
|
37
|
+
font-family: $tw-fnt-frm-fld-help-text-font-family;
|
|
38
|
+
font-size: $tw-fnt-frm-fld-help-text-font-size;
|
|
39
|
+
font-weight: $tw-fnt-frm-fld-help-text-font-weight;
|
|
40
|
+
line-height: $tw-fnt-frm-fld-help-text-line-height;
|
|
41
|
+
color: $tw-clr-txt-secondary;
|
|
42
|
+
display: block;
|
|
43
|
+
width: 100%;
|
|
44
|
+
max-width: 100%;
|
|
45
|
+
margin-top: $tw-spc-base-xx-small;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.multi-select__placeholder-text {
|
|
49
|
+
font-family: $tw-fnt-frm-fld-text-value-font-family;
|
|
50
|
+
font-size: $tw-fnt-frm-fld-text-value-font-size;
|
|
51
|
+
font-weight: $tw-fnt-frm-fld-text-value-font-weight;
|
|
52
|
+
line-height: $tw-fnt-frm-fld-text-value-line-height;
|
|
53
|
+
color: $tw-clr-txt;
|
|
54
|
+
margin: 0;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.multi-select__values {
|
|
58
|
+
background-color: $tw-clr-bg;
|
|
59
|
+
border: $tw-sz-frm-fld-text-input-stroke solid $tw-clr-brdr-secondary;
|
|
60
|
+
padding: #{$tw-spc-base-x-small - $tw-sz-frm-fld-text-input-stroke};
|
|
61
|
+
border-radius: $tw-sz-base-x-small;
|
|
62
|
+
border-width: $tw-sz-frm-fld-text-input-stroke;
|
|
63
|
+
display: flex;
|
|
64
|
+
align-items: flex-start;
|
|
65
|
+
justify-content: space-between;
|
|
66
|
+
|
|
67
|
+
&__icon-button {
|
|
68
|
+
width: $tw-fnt-frm-fld-text-value-line-height;
|
|
69
|
+
height: $tw-fnt-frm-fld-text-value-line-height;
|
|
70
|
+
padding: 0;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
&__icon-right {
|
|
74
|
+
width: $tw-fnt-frm-fld-text-value-line-height;
|
|
75
|
+
height: $tw-fnt-frm-fld-text-value-line-height;
|
|
76
|
+
fill: $tw-clr-icn;
|
|
77
|
+
flex-shrink: 0;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.multi-select__options-container {
|
|
82
|
+
position: relative;
|
|
83
|
+
height: 0;
|
|
84
|
+
width: 100%;
|
|
85
|
+
|
|
86
|
+
.multi-select__options {
|
|
87
|
+
z-index: 3;
|
|
88
|
+
width: calc(100% - 2px);
|
|
89
|
+
position: absolute;
|
|
90
|
+
top: 0px;
|
|
91
|
+
list-style-type: none;
|
|
92
|
+
padding: $tw-spc-base-x-small 0;
|
|
93
|
+
background: $tw-clr-bg;
|
|
94
|
+
border: 1px solid $tw-clr-brdr-secondary;
|
|
95
|
+
margin: $tw-spc-base-xx-small 0 0;
|
|
96
|
+
border-radius: $tw-sz-base-x-small;
|
|
97
|
+
max-height: 140px;
|
|
98
|
+
overflow-y: auto;
|
|
99
|
+
|
|
100
|
+
.select-value {
|
|
101
|
+
font-family: $tw-fnt-frm-fld-select-value-font-family;
|
|
102
|
+
font-size: $tw-fnt-frm-fld-select-value-font-size;
|
|
103
|
+
font-weight: $tw-fnt-frm-fld-select-value-font-weight;
|
|
104
|
+
line-height: $tw-fnt-frm-fld-select-value-line-height;
|
|
105
|
+
padding: $tw-spc-base-x-small $tw-spc-base-small;
|
|
106
|
+
cursor: pointer;
|
|
107
|
+
|
|
108
|
+
&:hover {
|
|
109
|
+
background-color: $tw-clr-bg-selected-ghost-hover;
|
|
110
|
+
color: $tw-clr-txt;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
&:active {
|
|
114
|
+
background-color: $tw-clr-bg-selected-ghost-active;
|
|
115
|
+
color: $tw-clr-txt;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
&--disabled {
|
|
119
|
+
opacity: $tw-opcty-semantic-off;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import './styles.scss';
|
|
2
2
|
type PillProps<IdType> = {
|
|
3
3
|
id: IdType;
|
|
4
|
-
label
|
|
4
|
+
label?: string;
|
|
5
5
|
value: string;
|
|
6
|
+
onClick?: (id: IdType) => void;
|
|
6
7
|
onRemove?: (id: IdType) => void;
|
|
7
8
|
className?: string;
|
|
8
9
|
};
|
|
9
|
-
export default function Pill<IdType>(
|
|
10
|
+
export default function Pill<IdType>(props: PillProps<IdType>): JSX.Element;
|
|
10
11
|
export {};
|
|
11
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Pill/index.tsx"],"names":[],"mappings":"AAGA,OAAO,eAAe,CAAC;AAEvB,KAAK,SAAS,CAAC,MAAM,IAAI;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Pill/index.tsx"],"names":[],"mappings":"AAGA,OAAO,eAAe,CAAC;AAEvB,KAAK,SAAS,CAAC,MAAM,IAAI;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAwB1E"}
|
package/components/Pill/index.js
CHANGED
|
@@ -15,23 +15,33 @@ var _Icon = _interopRequireDefault(require("../Icon/Icon"));
|
|
|
15
15
|
|
|
16
16
|
require("./styles.scss");
|
|
17
17
|
|
|
18
|
-
function Pill(
|
|
19
|
-
var id =
|
|
20
|
-
label =
|
|
21
|
-
value =
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
function Pill(props) {
|
|
19
|
+
var id = props.id,
|
|
20
|
+
label = props.label,
|
|
21
|
+
value = props.value,
|
|
22
|
+
_onClick = props.onClick,
|
|
23
|
+
onRemove = props.onRemove,
|
|
24
|
+
className = props.className;
|
|
24
25
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
25
|
-
className: "pill ".concat(className !== null && className !== void 0 ? className : '')
|
|
26
|
-
|
|
26
|
+
className: "pill ".concat(className !== null && className !== void 0 ? className : ''),
|
|
27
|
+
onClick: function onClick(ev) {
|
|
28
|
+
ev.stopPropagation();
|
|
29
|
+
|
|
30
|
+
if (_onClick) {
|
|
31
|
+
_onClick(id);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}, label && /*#__PURE__*/_react.default.createElement("p", {
|
|
27
35
|
className: "label"
|
|
28
36
|
}, label, ":"), /*#__PURE__*/_react.default.createElement("p", {
|
|
29
|
-
className: "value"
|
|
37
|
+
className: "value".concat(label ? '' : ' value--no-label')
|
|
30
38
|
}, value), onRemove ? /*#__PURE__*/_react.default.createElement(_material.IconButton, {
|
|
31
|
-
onClick: function onClick() {
|
|
32
|
-
|
|
39
|
+
onClick: function onClick(ev) {
|
|
40
|
+
ev.stopPropagation();
|
|
41
|
+
onRemove(id);
|
|
33
42
|
},
|
|
34
|
-
className: "iconContainer"
|
|
43
|
+
className: "iconContainer",
|
|
44
|
+
"aria-label": "remove"
|
|
35
45
|
}, /*#__PURE__*/_react.default.createElement(_Icon.default, {
|
|
36
46
|
name: "close",
|
|
37
47
|
className: "icon"
|
|
@@ -12,8 +12,6 @@
|
|
|
12
12
|
display: flex;
|
|
13
13
|
border-radius: 13px;
|
|
14
14
|
align-items: center;
|
|
15
|
-
margin-right: $tw-spc-base-x-small;
|
|
16
|
-
margin-bottom: $tw-spc-base-x-small;
|
|
17
15
|
|
|
18
16
|
.label {
|
|
19
17
|
font-size: 12px;
|
|
@@ -28,6 +26,10 @@
|
|
|
28
26
|
color: $tw-clr-txt;
|
|
29
27
|
font-weight: 600;
|
|
30
28
|
margin: 0;
|
|
29
|
+
|
|
30
|
+
&--no-label {
|
|
31
|
+
padding-left: 0;
|
|
32
|
+
}
|
|
31
33
|
}
|
|
32
34
|
|
|
33
35
|
.icon {
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
+
import './styles.scss';
|
|
1
2
|
export type PillListItem<IdType> = {
|
|
2
3
|
id: IdType;
|
|
3
|
-
label
|
|
4
|
+
label?: string;
|
|
4
5
|
value: string;
|
|
6
|
+
onClick?: (id: IdType) => void;
|
|
5
7
|
onRemove?: (id: IdType) => void;
|
|
6
8
|
className?: string;
|
|
7
9
|
};
|
|
8
10
|
export type PillListProps<IdType> = {
|
|
9
11
|
data: PillListItem<IdType>[];
|
|
12
|
+
onClick?: (id: IdType) => void;
|
|
10
13
|
onRemove?: (id: IdType) => void;
|
|
11
14
|
className?: string;
|
|
12
15
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/PillList/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/PillList/index.tsx"],"names":[],"mappings":"AAEA,OAAO,eAAe,CAAC;AAEvB,MAAM,MAAM,YAAY,CAAC,MAAM,IAAI;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,MAAM,IAAI;IAClC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAkBlF"}
|
|
@@ -11,21 +11,22 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
11
11
|
|
|
12
12
|
var _Pill = _interopRequireDefault(require("../Pill"));
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
require("./styles.scss");
|
|
15
15
|
|
|
16
16
|
function PillList(props) {
|
|
17
17
|
var data = props.data,
|
|
18
|
+
onClick = props.onClick,
|
|
18
19
|
onRemove = props.onRemove,
|
|
19
20
|
className = props.className;
|
|
20
|
-
return /*#__PURE__*/_react.default.createElement(
|
|
21
|
-
|
|
22
|
-
flexWrap: "wrap"
|
|
21
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
22
|
+
className: "pill-list"
|
|
23
23
|
}, data.map(function (item, index) {
|
|
24
24
|
return /*#__PURE__*/_react.default.createElement(_Pill.default, {
|
|
25
25
|
key: index,
|
|
26
26
|
id: item.id,
|
|
27
27
|
label: item.label,
|
|
28
28
|
value: item.value,
|
|
29
|
+
onClick: item.onClick || onClick,
|
|
29
30
|
onRemove: item.onRemove || onRemove,
|
|
30
31
|
className: item.className || className
|
|
31
32
|
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
@import '../../style-dictionary-dist/terraware.scss';
|
|
2
|
+
|
|
3
|
+
@font-face {
|
|
4
|
+
font-family: 'Inter';
|
|
5
|
+
src: local('Inter'), url(../../fonts/Inter.ttf) format('truetype');
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.pill-list {
|
|
9
|
+
display: flex;
|
|
10
|
+
flex-wrap: wrap;
|
|
11
|
+
gap: $tw-spc-base-x-small;
|
|
12
|
+
}
|
package/index.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ import ErrorBox from './components/ErrorBox/ErrorBox';
|
|
|
9
9
|
import Icon from './components/Icon/Icon';
|
|
10
10
|
import IconTooltip from './components/IconTooltip';
|
|
11
11
|
import icons from './components/Icon/icons';
|
|
12
|
+
import MultiSelect from './components/MultiSelect';
|
|
12
13
|
import Navbar from './components/Navbar/Navbar';
|
|
13
14
|
import NavFooter from './components/Navbar/NavFooter';
|
|
14
15
|
import NavItem from './components/Navbar/NavItem';
|
|
@@ -35,5 +36,5 @@ export type { IconName } from './components/Icon/icons/';
|
|
|
35
36
|
export type { Size } from './components/Size';
|
|
36
37
|
export type { DropdownItem } from './components/types';
|
|
37
38
|
export type { EnhancedTableDetailsRow, RendererProps, TableColumnType, TableRowType, SortOrder };
|
|
38
|
-
export { Autocomplete, Button, CellRenderer, CellDateRenderer, Checkbox, DatePicker, descendingComparator, DialogBox, Divisor, Dropdown, DropdownV1, ErrorBox, getComparator, icons, Icon, IconTooltip, Message, NavFooter, NavItem, NavSection, Navbar, Note, Pill, PillList, ProgressCircle, RadioButton, Select, SelectT, stableSort, SummaryBox, Svg, Textfield, TextTruncated, Table, theme, };
|
|
39
|
+
export { Autocomplete, Button, CellRenderer, CellDateRenderer, Checkbox, DatePicker, descendingComparator, DialogBox, Divisor, Dropdown, DropdownV1, ErrorBox, getComparator, icons, Icon, IconTooltip, Message, MultiSelect, NavFooter, NavItem, NavSection, Navbar, Note, Pill, PillList, ProgressCircle, RadioButton, Select, SelectT, stableSort, SummaryBox, Svg, Textfield, TextTruncated, Table, theme, };
|
|
39
40
|
//# sourceMappingURL=index.d.ts.map
|
package/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,YAAY,MAAM,wCAAwC,CAAC;AAClE,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAChD,OAAO,QAAQ,MAAM,uBAAuB,CAAC;AAC7C,OAAO,UAAU,MAAM,oCAAoC,CAAC;AAC5D,OAAO,SAAS,MAAM,kCAAkC,CAAC;AACzD,OAAO,OAAO,MAAM,sBAAsB,CAAC;AAC3C,OAAO,QAAQ,EAAE,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,QAAQ,MAAM,gCAAgC,CAAC;AACtD,OAAO,IAAI,MAAM,wBAAwB,CAAC;AAC1C,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,MAAM,yBAAyB,CAAC;AAC5C,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAChD,OAAO,SAAS,MAAM,+BAA+B,CAAC;AACtD,OAAO,OAAO,MAAM,6BAA6B,CAAC;AAClD,OAAO,UAAU,MAAM,gCAAgC,CAAC;AACxD,OAAO,IAAI,MAAM,mBAAmB,CAAC;AACrC,OAAO,IAAI,MAAM,mBAAmB,CAAC;AACrC,OAAO,QAAQ,MAAM,uBAAuB,CAAC;AAC7C,OAAO,cAAc,MAAM,4CAA4C,CAAC;AACxE,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAChD,OAAO,OAAO,MAAM,6BAA6B,CAAC;AAClD,OAAO,UAAU,MAAM,yBAAyB,CAAC;AACjD,OAAO,SAAS,MAAM,kCAAkC,CAAC;AACzD,OAAO,aAAa,MAAM,4BAA4B,CAAC;AACvD,OAAO,KAAK,MAAM,oBAAoB,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrG,OAAO,YAAY,EAAE,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpG,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACnG,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AACxC,OAAO,OAAO,MAAM,8BAA8B,CAAC;AACnD,OAAO,KAAK,MAAM,SAAS,CAAC;AAE5B,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,YAAY,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,YAAY,EAAE,uBAAuB,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;AAEjG,OAAO,EACL,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,UAAU,EACV,oBAAoB,EACpB,SAAS,EACT,OAAO,EACP,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,aAAa,EACb,KAAK,EACL,IAAI,EACJ,WAAW,EACX,OAAO,EACP,SAAS,EACT,OAAO,EACP,UAAU,EACV,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,cAAc,EACd,WAAW,EACX,MAAM,EACN,OAAO,EACP,UAAU,EACV,UAAU,EACV,GAAG,EACH,SAAS,EACT,aAAa,EACb,KAAK,EACL,KAAK,GACN,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,YAAY,MAAM,wCAAwC,CAAC;AAClE,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAChD,OAAO,QAAQ,MAAM,uBAAuB,CAAC;AAC7C,OAAO,UAAU,MAAM,oCAAoC,CAAC;AAC5D,OAAO,SAAS,MAAM,kCAAkC,CAAC;AACzD,OAAO,OAAO,MAAM,sBAAsB,CAAC;AAC3C,OAAO,QAAQ,EAAE,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,QAAQ,MAAM,gCAAgC,CAAC;AACtD,OAAO,IAAI,MAAM,wBAAwB,CAAC;AAC1C,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,MAAM,yBAAyB,CAAC;AAC5C,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAChD,OAAO,SAAS,MAAM,+BAA+B,CAAC;AACtD,OAAO,OAAO,MAAM,6BAA6B,CAAC;AAClD,OAAO,UAAU,MAAM,gCAAgC,CAAC;AACxD,OAAO,IAAI,MAAM,mBAAmB,CAAC;AACrC,OAAO,IAAI,MAAM,mBAAmB,CAAC;AACrC,OAAO,QAAQ,MAAM,uBAAuB,CAAC;AAC7C,OAAO,cAAc,MAAM,4CAA4C,CAAC;AACxE,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAChD,OAAO,OAAO,MAAM,6BAA6B,CAAC;AAClD,OAAO,UAAU,MAAM,yBAAyB,CAAC;AACjD,OAAO,SAAS,MAAM,kCAAkC,CAAC;AACzD,OAAO,aAAa,MAAM,4BAA4B,CAAC;AACvD,OAAO,KAAK,MAAM,oBAAoB,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrG,OAAO,YAAY,EAAE,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpG,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACnG,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AACxC,OAAO,OAAO,MAAM,8BAA8B,CAAC;AACnD,OAAO,KAAK,MAAM,SAAS,CAAC;AAE5B,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,YAAY,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,YAAY,EAAE,uBAAuB,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;AAEjG,OAAO,EACL,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,UAAU,EACV,oBAAoB,EACpB,SAAS,EACT,OAAO,EACP,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,aAAa,EACb,KAAK,EACL,IAAI,EACJ,WAAW,EACX,OAAO,EACP,WAAW,EACX,SAAS,EACT,OAAO,EACP,UAAU,EACV,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,cAAc,EACd,WAAW,EACX,MAAM,EACN,OAAO,EACP,UAAU,EACV,UAAU,EACV,GAAG,EACH,SAAS,EACT,aAAa,EACb,KAAK,EACL,KAAK,GACN,CAAC"}
|
package/index.js
CHANGED
|
@@ -77,6 +77,12 @@ Object.defineProperty(exports, "icons", {
|
|
|
77
77
|
return _icons.default;
|
|
78
78
|
}
|
|
79
79
|
});
|
|
80
|
+
Object.defineProperty(exports, "MultiSelect", {
|
|
81
|
+
enumerable: true,
|
|
82
|
+
get: function get() {
|
|
83
|
+
return _MultiSelect.default;
|
|
84
|
+
}
|
|
85
|
+
});
|
|
80
86
|
Object.defineProperty(exports, "Navbar", {
|
|
81
87
|
enumerable: true,
|
|
82
88
|
get: function get() {
|
|
@@ -233,6 +239,8 @@ var _IconTooltip = _interopRequireDefault(require("./components/IconTooltip"));
|
|
|
233
239
|
|
|
234
240
|
var _icons = _interopRequireDefault(require("./components/Icon/icons"));
|
|
235
241
|
|
|
242
|
+
var _MultiSelect = _interopRequireDefault(require("./components/MultiSelect"));
|
|
243
|
+
|
|
236
244
|
var _Navbar = _interopRequireDefault(require("./components/Navbar/Navbar"));
|
|
237
245
|
|
|
238
246
|
var _NavFooter = _interopRequireDefault(require("./components/Navbar/NavFooter"));
|
package/package.json
CHANGED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Story } from '@storybook/react';
|
|
2
|
+
import MultiSelect, { MultiSelectProps } from '../components/MultiSelect';
|
|
3
|
+
declare const _default: {
|
|
4
|
+
title: string;
|
|
5
|
+
component: typeof MultiSelect;
|
|
6
|
+
};
|
|
7
|
+
export default _default;
|
|
8
|
+
export declare const Default: Story<MultiSelectProps<number, string>>;
|
|
9
|
+
//# sourceMappingURL=MultiSelect.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiSelect.stories.d.ts","sourceRoot":"","sources":["../../src/stories/MultiSelect.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,WAAW,EAAE,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;;;;;AAE1E,wBAGE;AAoCF,eAAO,MAAM,OAAO,yCAAoB,CAAC"}
|