@ntbjs/react-components 1.1.2 → 1.2.0-rc.10

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 (74) hide show
  1. package/{ActionButton-c3f5ed94.js → ActionButton-06df3d6c.js} +15 -5
  2. package/Alert-13b75102.js +117 -0
  3. package/AssetGallery-f63e2732.js +1848 -0
  4. package/{AssetPreviewTopBar-449e6019.js → AssetPreviewTopBar-c28715f7.js} +15 -15
  5. package/Badge-aec841c8.js +221 -0
  6. package/{Button-432f87c6.js → Button-353f5bbc.js} +3 -3
  7. package/{Checkbox-d80544d6.js → Checkbox-68dc38a8.js} +13 -8
  8. package/{CompactAutocompleteSelect-94cee1b4.js → CompactAutocompleteSelect-43e79e21.js} +10 -10
  9. package/{CompactStarRating-ec4dea7f.js → CompactStarRating-9c81ca6e.js} +9 -9
  10. package/{CompactTextInput-49dc27db.js → CompactTextInput-8d1aae0f.js} +31 -25
  11. package/{ContextMenu-d088833b.js → ContextMenu-4ec3d9f3.js} +1 -1
  12. package/ContextMenuItem-1fe17ed5.js +110 -0
  13. package/{InputGroup-09ce9572.js → InputGroup-49fbc423.js} +1 -1
  14. package/{Instructions-116f443c.js → Instructions-a78f15fc.js} +5 -5
  15. package/MultiLevelCheckboxSelect-418de626.js +728 -0
  16. package/{MultiSelect-abf02057.js → MultiSelect-4b8d3d0d.js} +2 -2
  17. package/{Popover-d3a4b72e.js → Popover-6afb3779.js} +2 -2
  18. package/{Radio-70259f02.js → Radio-32d0513a.js} +1 -1
  19. package/{SectionSeparator-225719cd.js → SectionSeparator-259a22ed.js} +1 -1
  20. package/{Switch-a7cbb0c0.js → Switch-4a41585f.js} +1 -1
  21. package/{Tab-9936ddea.js → Tab-f499ecbc.js} +1 -1
  22. package/{Tabs-93f6362c.js → Tabs-c2261e7e.js} +2 -2
  23. package/{TextArea-a99b3096.js → TextArea-fc4de398.js} +30 -18
  24. package/{TextInput-c0ef017d.js → TextInput-0d109708.js} +1 -1
  25. package/{Tooltip-1b7b0052.js → Tooltip-6b6f0b0a.js} +2 -2
  26. package/VerificationStatusIcon-b574fd21.js +106 -0
  27. package/data/Alert/index.js +3 -2
  28. package/data/Badge/index.js +2 -2
  29. package/data/Popover/index.js +3 -3
  30. package/data/Tab/index.js +2 -2
  31. package/data/Tabs/index.js +3 -3
  32. package/data/Tooltip/index.js +3 -3
  33. package/data/index.js +10 -8
  34. package/{defaultTheme-50f2b88f.js → defaultTheme-ea44e34a.js} +59 -1
  35. package/icons/add.svg +3 -0
  36. package/icons/album.svg +3 -0
  37. package/icons/check-rectangle-filled.svg +3 -0
  38. package/icons/corporate.svg +3 -0
  39. package/icons/download.svg +3 -3
  40. package/icons/index.js +77 -0
  41. package/icons/layers.svg +3 -0
  42. package/icons/play.svg +3 -3
  43. package/icons/shopping_cart_add.svg +3 -0
  44. package/icons/verification.svg +3 -0
  45. package/inputs/ActionButton/index.js +3 -2
  46. package/inputs/Button/index.js +5 -5
  47. package/inputs/Checkbox/index.js +2 -2
  48. package/inputs/CompactAutocompleteSelect/index.js +3 -4
  49. package/inputs/CompactStarRating/index.js +2 -3
  50. package/inputs/CompactTextInput/index.js +10 -10
  51. package/inputs/MultiSelect/index.js +3 -3
  52. package/inputs/Radio/index.js +2 -2
  53. package/inputs/Switch/index.js +2 -2
  54. package/inputs/TextArea/index.js +2 -3
  55. package/inputs/TextInput/index.js +2 -2
  56. package/inputs/index.js +28 -23
  57. package/layout/InputGroup/index.js +2 -2
  58. package/layout/SectionSeparator/index.js +2 -2
  59. package/layout/index.js +3 -3
  60. package/package.json +1 -1
  61. package/{react-select-creatable.esm-c4ae6839.js → react-select-creatable.esm-2f23d6c6.js} +8 -15
  62. package/{shift-away-subtle-cfdf1dbe.js → shift-away-subtle-0bed9a3c.js} +1 -1
  63. package/styles/config.scss +3 -1
  64. package/widgets/AssetGallery/index.js +33 -29
  65. package/widgets/AssetPreview/AssetPreviewTopBar/index.js +2 -2
  66. package/widgets/ContextMenu/ContextMenuItem/index.js +5 -105
  67. package/widgets/ContextMenu/ContextMenuItemsGroup/index.js +1 -1
  68. package/widgets/ContextMenu/index.js +2 -2
  69. package/widgets/Instructions/index.js +5 -6
  70. package/widgets/index.js +36 -31
  71. package/Alert-3e4f8be1.js +0 -62
  72. package/AssetGallery-797a8561.js +0 -1397
  73. package/Badge-9461fc7f.js +0 -154
  74. package/check-555d831b.js +0 -213
@@ -0,0 +1,728 @@
1
+ 'use strict';
2
+
3
+ var defaultTheme = require('./defaultTheme-ea44e34a.js');
4
+ var React = require('react');
5
+ var styled = require('styled-components');
6
+ require('./Alert-13b75102.js');
7
+ require('./Badge-aec841c8.js');
8
+ var Popover = require('./Popover-6afb3779.js');
9
+ require('./Tab-f499ecbc.js');
10
+ require('./Tabs-c2261e7e.js');
11
+ require('./Tooltip-6b6f0b0a.js');
12
+ require('./VerificationStatusIcon-b574fd21.js');
13
+ var Checkbox = require('./Checkbox-68dc38a8.js');
14
+ var lodash = require('lodash');
15
+ var TextInput = require('./TextInput-0d109708.js');
16
+ require('./InputGroup-49fbc423.js');
17
+ var SectionSeparator = require('./SectionSeparator-259a22ed.js');
18
+ var close = require('./close-ebf2f3cf.js');
19
+
20
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
21
+
22
+ function _interopNamespace(e) {
23
+ if (e && e.__esModule) return e;
24
+ var n = Object.create(null);
25
+ if (e) {
26
+ Object.keys(e).forEach(function (k) {
27
+ if (k !== 'default') {
28
+ var d = Object.getOwnPropertyDescriptor(e, k);
29
+ Object.defineProperty(n, k, d.get ? d : {
30
+ enumerable: true,
31
+ get: function () {
32
+ return e[k];
33
+ }
34
+ });
35
+ }
36
+ });
37
+ }
38
+ n['default'] = e;
39
+ return Object.freeze(n);
40
+ }
41
+
42
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
43
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
44
+ var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
45
+
46
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
47
+
48
+ var _ref = /*#__PURE__*/React__namespace.createElement("path", {
49
+ fill: "currentColor",
50
+ d: "M17.153 15.094h-1.084l-.385-.37a8.933 8.933 0 10-.96.96l.37.385v1.084L21.955 24 24 21.955zm-8.234 0a6.175 6.175 0 116.175-6.175 6.167 6.167 0 01-6.175 6.175z"
51
+ });
52
+
53
+ function SvgSearch(props) {
54
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends({
55
+ xmlns: "http://www.w3.org/2000/svg",
56
+ viewBox: "0 0 24 24"
57
+ }, props), _ref);
58
+ }
59
+
60
+ var _templateObject$1, _templateObject2$1, _templateObject3$1, _templateObject4$1, _templateObject5$1, _templateObject6$1, _templateObject7$1, _templateObject8$1, _templateObject9$1;
61
+ var MultiLevelCheckbox$1 = styled__default['default'].fieldset.attrs(defaultTheme.applyDefaultTheme)(_templateObject$1 || (_templateObject$1 = defaultTheme._taggedTemplateLiteral(["\n padding: 0;\n border: 0;\n margin: 0;\n"])));
62
+ var MultiLevelCheckboxLegend = styled__default['default'].legend.attrs(defaultTheme.applyDefaultTheme)(_templateObject2$1 || (_templateObject2$1 = defaultTheme._taggedTemplateLiteral(["\n line-height: 1.2;\n font-size: 0.75rem;\n padding: 0 0 4px;\n letter-spacing: 0.03em;\n ", "\n"])), function (props) {
63
+ return props.theme.themeProp('color', props.theme.getColor('gray-300'), props.theme.getColor('gray-600'));
64
+ });
65
+ var MultiLevelCheckboxNoResults = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject3$1 || (_templateObject3$1 = defaultTheme._taggedTemplateLiteral(["\n text-align: center;\n opacity: 0.7;\n font-size: 0.875rem;\n"])));
66
+ var CheckboxTreeChildren = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject4$1 || (_templateObject4$1 = defaultTheme._taggedTemplateLiteral(["\n display: grid;\n grid-template-rows: 0fr;\n padding-left: 28px;\n transition: grid-template-rows 250ms;\n\n & > div {\n overflow: hidden;\n }\n\n ", "\n}\n"])), function (props) {
67
+ return props.$expanded && styled.css(_templateObject5$1 || (_templateObject5$1 = defaultTheme._taggedTemplateLiteral(["\n grid-template-rows: 1fr;\n "])));
68
+ });
69
+ var CheckboxTree$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject6$1 || (_templateObject6$1 = defaultTheme._taggedTemplateLiteral(["\n width: fit-content;\n"])));
70
+ var CheckboxTreeCheckboxContainer = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject7$1 || (_templateObject7$1 = defaultTheme._taggedTemplateLiteral(["\n position: relative;\n margin-top: 4px;\n"])));
71
+ var ExpandTreeButton = styled__default['default'].button.attrs(defaultTheme.applyDefaultTheme)(_templateObject8$1 || (_templateObject8$1 = defaultTheme._taggedTemplateLiteral(["\n -webkit-appearance: none;\n background: none;\n border: none;\n position: absolute;\n height: 100%;\n cursor: pointer;\n color: currentColor;\n\n & > svg {\n display: block;\n width: 10px;\n transform: rotate(-90deg);\n transition: transform 250ms;\n\n ", "\n }\n}\n"])), function (props) {
72
+ return props.$expanded && styled.css(_templateObject9$1 || (_templateObject9$1 = defaultTheme._taggedTemplateLiteral(["\n transform: rotate(0deg);\n "])));
73
+ });
74
+
75
+ function findChildValues(node) {
76
+ var result = [];
77
+
78
+ function traverse(node) {
79
+ if (lodash.isArray(node.children) && node.children.length > 0) {
80
+ node.children.forEach(function (child) {
81
+ result.push(child.value);
82
+ traverse(child);
83
+ });
84
+ }
85
+ }
86
+
87
+ traverse(node);
88
+ return result;
89
+ }
90
+
91
+ function hasChildrenSelected(node, targetValue, checkedValues) {
92
+ if (!lodash.isArray(node.children) || node.children.length === 0) {
93
+ return false;
94
+ }
95
+
96
+ if (node.children.some(function (childNode) {
97
+ return checkedValues.includes(childNode.value);
98
+ })) {
99
+ return true;
100
+ }
101
+
102
+ return node.children.some(function (childNode) {
103
+ return hasChildrenSelected(childNode, childNode.value, checkedValues);
104
+ });
105
+ }
106
+
107
+ function hasAllChildrenSelected(node, targetValue, checkedValues) {
108
+ if (!node.children || node.children.length === 0) {
109
+ return checkedValues.includes(node.value);
110
+ }
111
+
112
+ if (node.children.some(function (childNode) {
113
+ return !checkedValues.includes(childNode.value);
114
+ })) {
115
+ return false;
116
+ }
117
+
118
+ return node.children.every(function (childNode) {
119
+ return hasAllChildrenSelected(childNode, childNode.value, checkedValues);
120
+ });
121
+ }
122
+
123
+ function getLabelByValue(targetValue, nodes) {
124
+ var _iterator = defaultTheme._createForOfIteratorHelper(nodes),
125
+ _step;
126
+
127
+ try {
128
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
129
+ var node = _step.value;
130
+
131
+ if (node.value === targetValue) {
132
+ return node.label;
133
+ }
134
+
135
+ if (node.children) {
136
+ var result = getLabelByValue(targetValue, node.children);
137
+
138
+ if (result) {
139
+ return result;
140
+ }
141
+ }
142
+ }
143
+ } catch (err) {
144
+ _iterator.e(err);
145
+ } finally {
146
+ _iterator.f();
147
+ }
148
+
149
+ return null;
150
+ }
151
+
152
+ var MultiLevelCheckbox = React__default['default'].forwardRef(function MultiLevelCheckbox(_ref, forwardedRef) {
153
+ var options = _ref.options,
154
+ checked = _ref.checked,
155
+ search = _ref.search,
156
+ label = _ref.label,
157
+ noResultsText = _ref.noResultsText,
158
+ onChange = _ref.onChange,
159
+ props = defaultTheme._objectWithoutProperties(_ref, ["options", "checked", "search", "label", "noResultsText", "onChange"]);
160
+
161
+ var _useState = React.useState(includeAllChildren(checked, options)),
162
+ _useState2 = defaultTheme._slicedToArray(_useState, 2),
163
+ internalChecked = _useState2[0],
164
+ setInternalChecked = _useState2[1];
165
+
166
+ var anySearchResults = React.useMemo(function () {
167
+ if (lodash.isEmpty(search)) {
168
+ return true;
169
+ }
170
+
171
+ return options.some(function (node) {
172
+ var childValues = findChildValues(node);
173
+ return [node.value].concat(defaultTheme._toConsumableArray(childValues)).map(function (v) {
174
+ return getLabelByValue(v, options);
175
+ }).some(function (v) {
176
+ return v.match(new RegExp(search, 'i'));
177
+ });
178
+ });
179
+ }, [options, search]);
180
+
181
+ function includeAllChildren(checked, nodes) {
182
+ var honorParent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
183
+ var newChecked = [];
184
+
185
+ function fillSiblings(nodes) {
186
+ nodes.forEach(function (node) {
187
+ if (hasAllChildrenSelected(node, node.value, checked)) {
188
+ newChecked.push(node.value);
189
+ }
190
+
191
+ if (honorParent && checked.includes(node.value)) {
192
+ var childValues = findChildValues(node);
193
+ return newChecked = newChecked.concat([node.value].concat(defaultTheme._toConsumableArray(childValues)));
194
+ }
195
+
196
+ if (node.children) {
197
+ fillSiblings(node.children);
198
+ }
199
+ });
200
+ }
201
+
202
+ fillSiblings(nodes);
203
+ return newChecked;
204
+ }
205
+
206
+ var onAdd = React.useCallback(function (values) {
207
+ setInternalChecked(function (prevChecked) {
208
+ return lodash.uniq(includeAllChildren([].concat(defaultTheme._toConsumableArray(prevChecked), defaultTheme._toConsumableArray(values)), options));
209
+ });
210
+ }, [options]);
211
+ var onRemove = React.useCallback(function (values) {
212
+ setInternalChecked(function (prevChecked) {
213
+ return includeAllChildren(prevChecked.filter(function (v) {
214
+ return !values.includes(v);
215
+ }), options, false);
216
+ });
217
+ }, [options]);
218
+ React.useEffect(function () {
219
+ onChange(internalChecked.sort());
220
+ }, [internalChecked, onChange]);
221
+ React.useEffect(function () {
222
+ if (!lodash.isEqual(checked.sort(), internalChecked.sort())) {
223
+ setInternalChecked(includeAllChildren(checked, options));
224
+ }
225
+ }, [checked, options]);
226
+ return React__default['default'].createElement(MultiLevelCheckbox$1, defaultTheme._extends({}, props, {
227
+ ref: forwardedRef
228
+ }), label && React__default['default'].createElement(MultiLevelCheckboxLegend, null, label), options.map(function (node) {
229
+ return React__default['default'].createElement(CheckboxTree, {
230
+ key: node.value,
231
+ nodes: options,
232
+ node: node,
233
+ checked: checked.filter(function (c) {
234
+ return [node.value].concat(defaultTheme._toConsumableArray(findChildValues(node))).includes(c);
235
+ }),
236
+ onAdd: onAdd,
237
+ onRemove: onRemove,
238
+ search: search
239
+ });
240
+ }), !anySearchResults && React__default['default'].createElement(MultiLevelCheckboxNoResults, null, noResultsText));
241
+ });
242
+ var NodeType = defaultTheme.PropTypes.shape({
243
+ label: defaultTheme.PropTypes.string.isRequired,
244
+ value: defaultTheme.PropTypes.any.isRequired,
245
+ children: NodeType
246
+ });
247
+ MultiLevelCheckbox.propTypes = process.env.NODE_ENV !== "production" ? {
248
+ options: defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.shape({
249
+ label: defaultTheme.PropTypes.string.isRequired,
250
+ value: defaultTheme.PropTypes.any.isRequired,
251
+ children: defaultTheme.PropTypes.array
252
+ })),
253
+ checked: defaultTheme.PropTypes.array.isRequired,
254
+ label: defaultTheme.PropTypes.string,
255
+ search: defaultTheme.PropTypes.string,
256
+ noResultsText: defaultTheme.PropTypes.string,
257
+ onChange: defaultTheme.PropTypes.func.isRequired
258
+ } : {};
259
+ MultiLevelCheckbox.defaultProps = {
260
+ options: [],
261
+ noResultsText: 'No results.'
262
+ };
263
+ var CheckboxTree = React__default['default'].memo(function CheckboxTree(_ref2) {
264
+ var node = _ref2.node,
265
+ nodes = _ref2.nodes,
266
+ checked = _ref2.checked,
267
+ onAdd = _ref2.onAdd,
268
+ onRemove = _ref2.onRemove,
269
+ _ref2$search = _ref2.search,
270
+ search = _ref2$search === void 0 ? '' : _ref2$search;
271
+
272
+ var _useState3 = React.useState(false),
273
+ _useState4 = defaultTheme._slicedToArray(_useState3, 2),
274
+ expanded = _useState4[0],
275
+ setExpanded = _useState4[1];
276
+
277
+ var _useState5 = React.useState(false),
278
+ _useState6 = defaultTheme._slicedToArray(_useState5, 2),
279
+ expandedBySearch = _useState6[0],
280
+ setExpandedBySearch = _useState6[1];
281
+
282
+ var onChange = React.useCallback(function (event) {
283
+ if (event.target.checked) {
284
+ onAdd([event.target.value].concat(defaultTheme._toConsumableArray(findChildValues(node))));
285
+ } else {
286
+ onRemove([event.target.value].concat(defaultTheme._toConsumableArray(findChildValues(node))));
287
+ }
288
+ }, [onAdd, onRemove]);
289
+ var onChildrenAdd = React.useCallback(function (newValues) {
290
+ if (hasAllChildrenSelected(node, '', [].concat(defaultTheme._toConsumableArray(newValues), defaultTheme._toConsumableArray(checked)))) {
291
+ return onAdd([node.value].concat(defaultTheme._toConsumableArray(newValues)));
292
+ }
293
+
294
+ onAdd(newValues);
295
+ }, [node, checked, onAdd]);
296
+ var hideOption = React.useMemo(function () {
297
+ if (lodash.isEmpty(search)) {
298
+ return;
299
+ }
300
+
301
+ var childValues = findChildValues(node);
302
+ return ![node.value].concat(defaultTheme._toConsumableArray(childValues)).map(function (v) {
303
+ return getLabelByValue(v, nodes);
304
+ }).some(function (v) {
305
+ return v.match(new RegExp(search, 'i'));
306
+ });
307
+ }, [node, nodes, search]);
308
+ React.useEffect(function () {
309
+ var childValues = findChildValues(node);
310
+ var expandBySearch = !lodash.isEmpty(search) && [node.value].concat(defaultTheme._toConsumableArray(childValues)).map(function (v) {
311
+ return getLabelByValue(v, nodes);
312
+ }).some(function (v) {
313
+ return v.match(new RegExp(search, 'i'));
314
+ });
315
+ setExpandedBySearch(expandBySearch);
316
+ }, [search, nodes, node.value]);
317
+
318
+ if (hideOption) {
319
+ return null;
320
+ }
321
+
322
+ return React__default['default'].createElement(CheckboxTree$1, null, React__default['default'].createElement(CheckboxTreeCheckboxContainer, null, lodash.isArray(node.children) && node.children.length > 0 && React__default['default'].createElement(ExpandTreeButton, {
323
+ $expanded: expanded || expandedBySearch,
324
+ onClick: function onClick() {
325
+ setExpandedBySearch(function (current) {
326
+ if (current) {
327
+ setExpanded(false);
328
+ } else {
329
+ setExpanded(function (v) {
330
+ return !v;
331
+ });
332
+ }
333
+
334
+ return false;
335
+ });
336
+ }
337
+ }, React__default['default'].createElement("svg", {
338
+ xmlns: "http://www.w3.org/2000/svg",
339
+ viewBox: "0 0 12 7.4"
340
+ }, React__default['default'].createElement("path", {
341
+ fill: "currentColor",
342
+ d: "m6,7.4L0,1.4,1.4,0l4.6,4.6L10.6,0l1.4,1.4-6,6Z",
343
+ strokeWidth: "0"
344
+ }))), React__default['default'].createElement(Checkbox.Checkbox, {
345
+ style: {
346
+ paddingLeft: 24
347
+ },
348
+ muted: !checked.includes(node.value),
349
+ label: node.label,
350
+ indeterminate: checked.includes(node.value) && !hasAllChildrenSelected(node, node.value, checked) || hasChildrenSelected(node, node.value, checked) && !hasAllChildrenSelected(node, node.value, checked),
351
+ checked: hasChildrenSelected(node, node.value, checked) || checked.includes(node.value),
352
+ value: node.value,
353
+ onChange: onChange
354
+ })), node.children && React__default['default'].createElement(CheckboxTreeChildren, {
355
+ $expanded: expanded || expandedBySearch
356
+ }, React__default['default'].createElement("div", null, node.children.map(function (childNode) {
357
+ return React__default['default'].createElement(CheckboxTree, {
358
+ key: childNode.value,
359
+ checked: checked.filter(function (c) {
360
+ return [childNode.value].concat(defaultTheme._toConsumableArray(findChildValues(childNode))).includes(c);
361
+ }),
362
+ onAdd: onChildrenAdd,
363
+ onRemove: onRemove,
364
+ node: childNode,
365
+ nodes: nodes,
366
+ search: search
367
+ });
368
+ }))));
369
+ }, lodash.isEqual);
370
+ CheckboxTree.propTypes = process.env.NODE_ENV !== "production" ? {
371
+ node: defaultTheme.PropTypes.shape({
372
+ label: defaultTheme.PropTypes.string.isRequired,
373
+ value: defaultTheme.PropTypes.any.isRequired,
374
+ children: defaultTheme.PropTypes.shape({
375
+ label: defaultTheme.PropTypes.string.isRequired,
376
+ value: defaultTheme.PropTypes.any.isRequired,
377
+ children: defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.any)
378
+ })
379
+ }),
380
+ nodes: defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.shape({
381
+ label: defaultTheme.PropTypes.string.isRequired,
382
+ value: defaultTheme.PropTypes.any.isRequired,
383
+ children: defaultTheme.PropTypes.shape({
384
+ label: defaultTheme.PropTypes.string.isRequired,
385
+ value: defaultTheme.PropTypes.any.isRequired,
386
+ children: defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.any)
387
+ })
388
+ })),
389
+ checked: defaultTheme.PropTypes.array.isRequired,
390
+ search: defaultTheme.PropTypes.string,
391
+ onAdd: defaultTheme.PropTypes.func.isRequired,
392
+ onRemove: defaultTheme.PropTypes.func.isRequired
393
+ } : {};
394
+
395
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9;
396
+ var MultiLevelCheckboxSelect$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject || (_templateObject = defaultTheme._taggedTemplateLiteral(["\n font-family: ", ";\n"])), function (props) {
397
+ return props.theme.primaryFontFamily;
398
+ });
399
+ var MultiLevelCheckboxSelectInput = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject2 || (_templateObject2 = defaultTheme._taggedTemplateLiteral(["\n position: relative;\n border: 1px solid;\n ", "\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n min-height: 44px;\n box-sizing: border-box;\n padding: 8px 6px;\n border-radius: 3px;\n transition: border-color 350ms;\n\n &:focus-within {\n ", "\n }\n"])), function (props) {
400
+ return props.theme.themeProp('border-color', props.theme.getColor('gray-500'), props.theme.getColor('gray-400'));
401
+ }, function (props) {
402
+ return props.theme.themeProp('border-color', props.theme.getColor('gray-500'), props.theme.getColor('gray-600'), 1);
403
+ });
404
+ var Item = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject3 || (_templateObject3 = defaultTheme._taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n background: #272727;\n color: #f7f8f9;\n font-size: 12px;\n height: 26px;\n border-radius: 3px;\n"])));
405
+ var ItemLabel = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject4 || (_templateObject4 = defaultTheme._taggedTemplateLiteral(["\n padding: 0 5px 0 8px;\n"])));
406
+ var ItemRemoveButton = styled__default['default'].button.attrs(defaultTheme.applyDefaultTheme)(_templateObject5 || (_templateObject5 = defaultTheme._taggedTemplateLiteral(["\n color: inherit;\n border: none;\n background: none;\n -webkit-appearance: none;\n height: 100%;\n border-top-right-radius: 3px;\n border-bottom-right-radius: 3px;\n padding: 0 7px;\n cursor: pointer;\n\n &:hover {\n background: ", ";\n }\n\n & > svg {\n width: 8px;\n display: block;\n }\n"])), function (props) {
407
+ return props.theme.getColor('red-500');
408
+ });
409
+ var Label = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject6 || (_templateObject6 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n top: -8px;\n left: 7px;\n line-height: 1.2;\n font-size: 0.75rem;\n font-weight: 400;\n padding: 0 3px;\n //padding: 0 0 4px;\n letter-spacing: 0.03em;\n ", "\n ", "\n"])), function (props) {
410
+ return props.theme.themeProp('color', props.theme.getColor('gray-300'), props.theme.getColor('gray-600'));
411
+ }, function (props) {
412
+ return props.theme.themeProp('background', "linear-gradient(0deg, ".concat(props.theme.getColor('gray-900'), " calc(50% + 1px), transparent 50%)"), "linear-gradient(0deg, ".concat(props.theme.getColor('white'), " calc(50% + 1px), transparent 50%)"));
413
+ });
414
+ var Placeholder = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject7 || (_templateObject7 = defaultTheme._taggedTemplateLiteral(["\n font-size: 0.875rem;\n line-height: 26px;\n padding-left: 4px;\n opacity: 0.4;\n"])));
415
+ var SearchContainer = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject8 || (_templateObject8 = defaultTheme._taggedTemplateLiteral(["\n padding: 12px 8px;\n"])));
416
+ var OptionsContainer = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject9 || (_templateObject9 = defaultTheme._taggedTemplateLiteral(["\n padding: 12px 8px;\n overflow: auto;\n max-height: 400px;\n"])));
417
+
418
+ var useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;
419
+
420
+ function useEventListener(eventName, handler, element, options) {
421
+ var savedHandler = React.useRef(handler);
422
+ useIsomorphicLayoutEffect(function () {
423
+ savedHandler.current = handler;
424
+ }, [handler]);
425
+ React.useEffect(function () {
426
+ var _element$current;
427
+
428
+ var targetElement = (_element$current = element === null || element === void 0 ? void 0 : element.current) !== null && _element$current !== void 0 ? _element$current : window;
429
+ if (!(targetElement && targetElement.addEventListener)) return;
430
+
431
+ var listener = function listener(event) {
432
+ return savedHandler.current(event);
433
+ };
434
+
435
+ targetElement.addEventListener(eventName, listener, options);
436
+ return function () {
437
+ targetElement.removeEventListener(eventName, listener, options);
438
+ };
439
+ }, [eventName, element, options]);
440
+ }
441
+
442
+ function useElementSize(ref) {
443
+ var delayWindowResizeUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
444
+
445
+ var _useState = React.useState({
446
+ width: 0,
447
+ height: 0
448
+ }),
449
+ _useState2 = defaultTheme._slicedToArray(_useState, 2),
450
+ size = _useState2[0],
451
+ setSize = _useState2[1];
452
+
453
+ var handleSize = function handleSize() {
454
+ var _ref$current, _ref$current2;
455
+
456
+ var newWidth = (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.offsetWidth;
457
+ var newHeight = (_ref$current2 = ref.current) === null || _ref$current2 === void 0 ? void 0 : _ref$current2.offsetHeight;
458
+ if (size.width !== newWidth || size.height !== newHeight) setSize({
459
+ width: newWidth !== null && newWidth !== void 0 ? newWidth : 0,
460
+ height: newHeight !== null && newHeight !== void 0 ? newHeight : 0
461
+ });
462
+ };
463
+
464
+ useEventListener('resize', debounce(handleSize, delayWindowResizeUpdate));
465
+ React.useEffect(function () {
466
+ handleSize();
467
+ });
468
+ return size;
469
+ }
470
+
471
+ function debounce(fn, delay) {
472
+ var timer = null;
473
+ return function () {
474
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
475
+ args[_key] = arguments[_key];
476
+ }
477
+
478
+ if (timer) clearTimeout(timer);
479
+ timer = setTimeout(function () {
480
+ fn.apply(void 0, args);
481
+ }, delay);
482
+ };
483
+ }
484
+
485
+ function useOnClickOutside(ref, handler) {
486
+ var mouseEvent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'mousedown';
487
+ useEventListener(mouseEvent, function (event) {
488
+ var el = ref === null || ref === void 0 ? void 0 : ref.current;
489
+
490
+ if (!el || el.contains(event.target)) {
491
+ return;
492
+ }
493
+
494
+ handler(event);
495
+ });
496
+ }
497
+
498
+ /**
499
+ * Runs an effect only when the dependencies have changed, skipping the
500
+ * initial "on mount" run. Caution, if the dependency list never changes,
501
+ * the effect is **never run**
502
+ *
503
+ * ```ts
504
+ * const ref = useRef<HTMLInput>(null);
505
+ *
506
+ * // focuses an element only if the focus changes, and not on mount
507
+ * useUpdateEffect(() => {
508
+ * const element = ref.current?.children[focusedIdx] as HTMLElement
509
+ *
510
+ * element?.focus()
511
+ *
512
+ * }, [focusedIndex])
513
+ * ```
514
+ * @param effect An effect to run on mount
515
+ *
516
+ * @category effects
517
+ */
518
+
519
+ function useUpdateEffect(fn, deps) {
520
+ var isFirst = React.useRef(true);
521
+ React.useEffect(function () {
522
+ if (isFirst.current) {
523
+ isFirst.current = false;
524
+ return;
525
+ }
526
+
527
+ return fn();
528
+ }, deps);
529
+ }
530
+
531
+ var MultiLevelCheckboxSelect = React__default['default'].forwardRef(function MultiLevelCheckboxSelect(_ref, forwardedRef) {
532
+ var label = _ref.label,
533
+ options = _ref.options,
534
+ checkedProp = _ref.checked,
535
+ placeholder = _ref.placeholder,
536
+ noResultsText = _ref.noResultsText,
537
+ onChange = _ref.onChange,
538
+ onParentChange = _ref.onParentChange,
539
+ props = defaultTheme._objectWithoutProperties(_ref, ["label", "options", "checked", "placeholder", "noResultsText", "onChange", "onParentChange"]);
540
+
541
+ var inputRef = React.useRef(null);
542
+ var popoverContentRef = React.useRef(null);
543
+ var searchInputRef = React.useRef(null);
544
+
545
+ var _useState = React.useState(''),
546
+ _useState2 = defaultTheme._slicedToArray(_useState, 2),
547
+ searchString = _useState2[0],
548
+ setSearchString = _useState2[1];
549
+
550
+ var _useState3 = React.useState(false),
551
+ _useState4 = defaultTheme._slicedToArray(_useState3, 2),
552
+ open = _useState4[0],
553
+ setOpen = _useState4[1];
554
+
555
+ var _useElementSize = useElementSize(inputRef),
556
+ width = _useElementSize.width;
557
+
558
+ var handleClickInside = React.useCallback(function () {
559
+ var _searchInputRef$curre;
560
+
561
+ setOpen(true);
562
+ (_searchInputRef$curre = searchInputRef.current) === null || _searchInputRef$curre === void 0 ? void 0 : _searchInputRef$curre.focus();
563
+ }, []);
564
+ var handleKeyDown = React.useCallback(function (event) {
565
+ if (!open) return;
566
+
567
+ if (event.key === 'Escape') {
568
+ setOpen(false);
569
+ }
570
+ }, [open]);
571
+ useEventListener('focus', handleClickInside, inputRef);
572
+ useEventListener('mousedown', handleClickInside, inputRef);
573
+ useEventListener('keydown', handleKeyDown);
574
+
575
+ var handleClickOutside = function handleClickOutside(event) {
576
+ var _popoverContentRef$cu;
577
+
578
+ if ((popoverContentRef === null || popoverContentRef === void 0 ? void 0 : popoverContentRef.current) === event.target || popoverContentRef !== null && popoverContentRef !== void 0 && (_popoverContentRef$cu = popoverContentRef.current) !== null && _popoverContentRef$cu !== void 0 && _popoverContentRef$cu.contains(event.target)) {
579
+ return;
580
+ }
581
+
582
+ setOpen(false);
583
+ };
584
+
585
+ useOnClickOutside(inputRef, handleClickOutside);
586
+ var checked = React.useMemo(function () {
587
+ var checkedParents = [];
588
+
589
+ function iterate(nodes) {
590
+ nodes.forEach(function (node) {
591
+ if (checkedProp.includes(node.value)) {
592
+ return checkedParents.push(node.value);
593
+ }
594
+
595
+ if (node.children) {
596
+ iterate(node.children);
597
+ }
598
+ });
599
+ }
600
+
601
+ iterate(options);
602
+ return checkedParents.sort();
603
+ }, [options, checkedProp]);
604
+ var getLabelByValue = React.useCallback(function (targetValue) {
605
+ var nodes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : options;
606
+
607
+ var _iterator = defaultTheme._createForOfIteratorHelper(nodes),
608
+ _step;
609
+
610
+ try {
611
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
612
+ var node = _step.value;
613
+
614
+ if (node.value === targetValue) {
615
+ return node.label;
616
+ }
617
+
618
+ if (node.children) {
619
+ var result = getLabelByValue(targetValue, node.children);
620
+
621
+ if (result) {
622
+ return result;
623
+ }
624
+ }
625
+ }
626
+ } catch (err) {
627
+ _iterator.e(err);
628
+ } finally {
629
+ _iterator.f();
630
+ }
631
+
632
+ return null;
633
+ }, [options]);
634
+ var removeItem = React.useCallback(function (value) {
635
+ var node = null;
636
+
637
+ function findNodeByValue(options, value) {
638
+ for (var i = 0; i < options.length; i++) {
639
+ if (options[i].value === value) {
640
+ node = options[i];
641
+ break;
642
+ }
643
+
644
+ if (options[i].children) {
645
+ findNodeByValue(options[i].children, value);
646
+ }
647
+ }
648
+ }
649
+
650
+ findNodeByValue(options, value);
651
+
652
+ if (node) {
653
+ var childValues = findChildValues(node);
654
+ var valuesToRemove = [value].concat(defaultTheme._toConsumableArray(childValues));
655
+ onChange(checkedProp.filter(function (value) {
656
+ return !valuesToRemove.includes(value);
657
+ }));
658
+ }
659
+ }, [options, checkedProp]);
660
+ useUpdateEffect(function () {
661
+ if (lodash.isFunction(onParentChange)) {
662
+ onParentChange(checked);
663
+ }
664
+ }, [checked]);
665
+ return React__default['default'].createElement(MultiLevelCheckboxSelect$1, defaultTheme._extends({
666
+ ref: forwardedRef
667
+ }, props), React__default['default'].createElement(Popover.Popover, {
668
+ visible: open,
669
+ arrow: false,
670
+ placement: 'bottom',
671
+ offset: [0, 6],
672
+ content: React__default['default'].createElement("div", {
673
+ ref: popoverContentRef,
674
+ style: {
675
+ minWidth: width - 2
676
+ }
677
+ }, React__default['default'].createElement(SearchContainer, null, React__default['default'].createElement(TextInput.TextInput, {
678
+ ref: searchInputRef,
679
+ onBlur: function onBlur(e) {
680
+ if (open) {
681
+ e.target.focus();
682
+ }
683
+ },
684
+ icon: React__default['default'].createElement(SvgSearch, null),
685
+ value: searchString,
686
+ onChange: function onChange(e) {
687
+ return setSearchString(e.target.value);
688
+ }
689
+ })), React__default['default'].createElement(SectionSeparator.SectionSeparator, null), React__default['default'].createElement(OptionsContainer, null, React__default['default'].createElement(MultiLevelCheckbox, {
690
+ options: options,
691
+ checked: checkedProp,
692
+ search: searchString,
693
+ noResultsText: noResultsText,
694
+ onChange: onChange
695
+ })))
696
+ }, React__default['default'].createElement(MultiLevelCheckboxSelectInput, {
697
+ tabIndex: "0",
698
+ ref: inputRef
699
+ }, label && React__default['default'].createElement(Label, null, label), checked.length === 0 && React__default['default'].createElement(Placeholder, null, placeholder), checked.map(function (option) {
700
+ return React__default['default'].createElement(Item, {
701
+ key: option
702
+ }, React__default['default'].createElement(ItemLabel, null, getLabelByValue(option)), React__default['default'].createElement(ItemRemoveButton, {
703
+ onClick: function onClick() {
704
+ removeItem(option);
705
+ }
706
+ }, React__default['default'].createElement(close.SvgClose, null)));
707
+ }))));
708
+ });
709
+ MultiLevelCheckboxSelect.propTypes = process.env.NODE_ENV !== "production" ? {
710
+ label: defaultTheme.PropTypes.string,
711
+ placeholder: defaultTheme.PropTypes.string,
712
+ options: defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.shape({
713
+ label: defaultTheme.PropTypes.string.isRequired,
714
+ value: defaultTheme.PropTypes.any.isRequired,
715
+ children: defaultTheme.PropTypes.arrayOf(NodeType)
716
+ })).isRequired,
717
+ checked: defaultTheme.PropTypes.array.isRequired,
718
+ noResultsText: defaultTheme.PropTypes.string,
719
+ onChange: defaultTheme.PropTypes.func.isRequired,
720
+ onParentChange: defaultTheme.PropTypes.func
721
+ } : {};
722
+ MultiLevelCheckboxSelect.defaultProps = {
723
+ checked: []
724
+ };
725
+
726
+ exports.MultiLevelCheckbox = MultiLevelCheckbox;
727
+ exports.MultiLevelCheckboxSelect = MultiLevelCheckboxSelect;
728
+ exports.useIsomorphicLayoutEffect = useIsomorphicLayoutEffect;