@dspworkplace/ui 2.1.4 → 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/dist/index.es.js CHANGED
@@ -4860,7 +4860,7 @@ function _templateObject11() {
4860
4860
  }
4861
4861
 
4862
4862
  function _templateObject10() {
4863
- var data = taggedTemplateLiteral(["\n height: 24px;\n width: 24px;\n box-sizing: border-box;\n margin-right: 5px;\n border-radius: 100%;\n border: 2px solid white;\n background: ", "\n z-index: ", ";\n margin-left: ", "\n margin-top: 8px;\n margin-bottom: 8px;\n display: inline-block;\n"]);
4863
+ var data = taggedTemplateLiteral(["\n height: 16px;\n width: 16px;\n box-sizing: border-box;\n border-radius: 100%;\n border: 2px solid white;\n background: ", ";\n z-index: ", ";\n margin-left: ", "\n margin-right: 8px;\n margin-top: 8px;\n margin-bottom: 8px;\n display: inline-block;\n"]);
4864
4864
 
4865
4865
  _templateObject10 = function _templateObject10() {
4866
4866
  return data;
@@ -5046,6 +5046,12 @@ var isOption = function isOption(item) {
5046
5046
  return item.value !== undefined && item.value !== null;
5047
5047
  };
5048
5048
 
5049
+ var scrollIntoView = function scrollIntoView(element) {
5050
+ return element && element.scrollIntoView({
5051
+ block: 'nearest'
5052
+ });
5053
+ };
5054
+
5049
5055
  var flattenOptions = function flattenOptions(options) {
5050
5056
  var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
5051
5057
  return (options || []).reduce(function (rows, item) {
@@ -5062,6 +5068,23 @@ var optionText = function optionText(node) {
5062
5068
  if (typeof node === 'string' || typeof node === 'number') return node.toString();
5063
5069
  if (Array.isArray(node)) return node.map(optionText).join('');
5064
5070
  return node.props ? optionText(node.props.children) : '';
5071
+ };
5072
+
5073
+ var matchOptions = function matchOptions(items, text) {
5074
+ if (!text) return items;
5075
+ var query = text.toLowerCase();
5076
+ return items.map(function (item) {
5077
+ return {
5078
+ item: item,
5079
+ at: optionText(item.name).toLowerCase().indexOf(query)
5080
+ };
5081
+ }).filter(function (match) {
5082
+ return match.at >= 0;
5083
+ }).sort(function (a, b) {
5084
+ return (a.at > 0) - (b.at > 0);
5085
+ }).map(function (match) {
5086
+ return match.item;
5087
+ });
5065
5088
  }; // rendered in document.body so overflow on any ancestor cannot clip it; popper flips and shifts it to stay in the viewport
5066
5089
  // eslint-disable-next-line react/prop-types
5067
5090
 
@@ -5146,20 +5169,12 @@ var AutocompleteSelect = function AutocompleteSelect(_ref5) {
5146
5169
  }).map(function (row) {
5147
5170
  return row.item;
5148
5171
  });
5149
-
5150
- var filterItems = function filterItems(text) {
5151
- return text ? selectable.filter(function (item) {
5152
- return optionText(item.name).toLowerCase().startsWith(text.toLowerCase());
5153
- }) : selectable;
5154
- };
5155
-
5156
- var items = filterItems(search);
5172
+ var items = matchOptions(selectable, search);
5157
5173
  var hasSelection = selectedOpt.value.length > 0;
5158
5174
  var selectedText = optionText(selectedOpt.desc);
5159
5175
  var selectedItem = selectable.find(function (item) {
5160
5176
  return item.value.toString() === selectedOpt.value;
5161
5177
  });
5162
- var selectedColors = !search && selectedItem && selectedItem.color ? [selectedItem.color] : [];
5163
5178
 
5164
5179
  var _useCombobox = useCombobox({
5165
5180
  items: items,
@@ -5185,10 +5200,14 @@ var AutocompleteSelect = function AutocompleteSelect(_ref5) {
5185
5200
  feature: supercomplete({
5186
5201
  onRequestItem: function onRequestItem(_ref6, res) {
5187
5202
  var value = _ref6.value;
5188
- var matches = filterItems(value);
5189
- if (matches.length > 0) res({
5203
+
5204
+ var _matchOptions = matchOptions(selectable, value),
5205
+ _matchOptions2 = slicedToArray(_matchOptions, 1),
5206
+ first = _matchOptions2[0];
5207
+
5208
+ if (first && optionText(first.name).toLowerCase().startsWith(value.toLowerCase())) res({
5190
5209
  index: 0,
5191
- item: matches[0]
5210
+ item: first
5192
5211
  });
5193
5212
  },
5194
5213
  select: true,
@@ -5206,17 +5225,23 @@ var AutocompleteSelect = function AutocompleteSelect(_ref5) {
5206
5225
  useEffect(function () {
5207
5226
  if (startOpen) setOpen(true);
5208
5227
  }, []);
5228
+ var inputProps = getInputProps();
5229
+ var shownText = inputProps.value.toLowerCase();
5230
+ var shownItem = shownText ? [items[focusIndex]].concat(toConsumableArray(selectable)).find(function (item) {
5231
+ return item && optionText(item.name).toLowerCase() === shownText;
5232
+ }) : selectedItem;
5233
+ var swatchColors = shownItem && shownItem.color ? [shownItem.color] : [];
5209
5234
  var index = -1;
5210
5235
  return /*#__PURE__*/React.createElement(SelectUi$1, _extends_1({
5211
5236
  ref: setAnchor,
5212
5237
  className: [open && 'open', error && 'error', valid && 'valid'].filter(Boolean).join(' ')
5213
5238
  }, props, {
5214
5239
  title: selectedText
5215
- }), renderSwatches(selectedColors), /*#__PURE__*/React.createElement(SearchInput, _extends_1({
5240
+ }), renderSwatches(swatchColors), /*#__PURE__*/React.createElement(SearchInput, _extends_1({
5216
5241
  placeholder: hasSelection ? selectedText : placeholder,
5217
5242
  hasSelection: hasSelection,
5218
- hasSwatch: selectedColors.length > 0
5219
- }, getInputProps())), /*#__PURE__*/React.createElement(ToggleButton, getToggleProps(), open ? /*#__PURE__*/React.createElement(Icons.ArrowUp, {
5243
+ hasSwatch: swatchColors.length > 0
5244
+ }, inputProps)), /*#__PURE__*/React.createElement(ToggleButton, getToggleProps(), open ? /*#__PURE__*/React.createElement(Icons.ArrowUp, {
5220
5245
  size: "15px",
5221
5246
  color: theme.colors.info.border
5222
5247
  }) : /*#__PURE__*/React.createElement(Icons.ArrowDown, {
@@ -5254,7 +5279,8 @@ var AutocompleteSelect = function AutocompleteSelect(_ref5) {
5254
5279
  className: item.divider ? 'alone' : '',
5255
5280
  style: {
5256
5281
  paddingLeft: 8 + depth * 16,
5257
- background: focusIndex === index ? theme.colors.info.bg : undefined
5282
+ // overrides li:hover, so a resting mouse does not keep a second row lit
5283
+ background: focusIndex === index ? theme.colors.info.bg : 'transparent'
5258
5284
  }
5259
5285
  }, getItemProps({
5260
5286
  item: item,
@@ -5300,22 +5326,30 @@ var MultiAutocompleteSelect = function MultiAutocompleteSelect(_ref8) {
5300
5326
  open = _useState10[0],
5301
5327
  setOpen = _useState10[1];
5302
5328
 
5303
- var _useState11 = useState(null),
5329
+ var _useState11 = useState(-1),
5304
5330
  _useState12 = slicedToArray(_useState11, 2),
5305
- anchor = _useState12[0],
5306
- setAnchor = _useState12[1];
5331
+ focusIndex = _useState12[0],
5332
+ setFocusIndex = _useState12[1];
5333
+
5334
+ var _useState13 = useState(null),
5335
+ _useState14 = slicedToArray(_useState13, 2),
5336
+ anchor = _useState14[0],
5337
+ setAnchor = _useState14[1];
5307
5338
 
5308
5339
  var nodeRef = useRef();
5309
5340
  var listRef = useRef();
5310
5341
  var setNode = useCallback(mergeRefs([nodeRef, setAnchor]), []);
5342
+
5343
+ var close = function close() {
5344
+ setOpen(false);
5345
+ setSearch('');
5346
+ setFocusIndex(-1);
5347
+ };
5348
+
5311
5349
  useEffect(function () {
5312
5350
  var closeOnOutsideClick = function closeOnOutsideClick(e) {
5313
5351
  var inList = listRef.current && listRef.current.contains(e.target);
5314
-
5315
- if (nodeRef.current && !nodeRef.current.contains(e.target) && !inList) {
5316
- setOpen(false);
5317
- setSearch('');
5318
- }
5352
+ if (nodeRef.current && !nodeRef.current.contains(e.target) && !inList) close();
5319
5353
  };
5320
5354
 
5321
5355
  document.addEventListener('mousedown', closeOnOutsideClick);
@@ -5329,9 +5363,7 @@ var MultiAutocompleteSelect = function MultiAutocompleteSelect(_ref8) {
5329
5363
  }).map(function (row) {
5330
5364
  return row.item;
5331
5365
  });
5332
- var items = search ? selectable.filter(function (item) {
5333
- return optionText(item.name).toLowerCase().startsWith(search.toLowerCase());
5334
- }) : selectable;
5366
+ var items = matchOptions(selectable, search);
5335
5367
  var selectedItems = selectable.filter(function (item) {
5336
5368
  return selectedValues.includes(item.value.toString());
5337
5369
  });
@@ -5343,6 +5375,7 @@ var MultiAutocompleteSelect = function MultiAutocompleteSelect(_ref8) {
5343
5375
  }).map(function (item) {
5344
5376
  return item.color;
5345
5377
  });
5378
+ var index = -1;
5346
5379
  return /*#__PURE__*/React.createElement(SelectUi$1, _extends_1({
5347
5380
  ref: setNode,
5348
5381
  className: [open && 'open', error && 'error', valid && 'valid'].filter(Boolean).join(' ')
@@ -5360,11 +5393,29 @@ var MultiAutocompleteSelect = function MultiAutocompleteSelect(_ref8) {
5360
5393
  onChange: function onChange(e) {
5361
5394
  setSearch(e.target.value);
5362
5395
  setOpen(true);
5396
+ setFocusIndex(-1);
5363
5397
  },
5364
5398
  onKeyDown: function onKeyDown(e) {
5365
- if (e.key === 'Escape') {
5366
- setOpen(false);
5367
- setSearch('');
5399
+ switch (e.key) {
5400
+ case 'ArrowDown':
5401
+ case 'ArrowUp':
5402
+ {
5403
+ e.preventDefault();
5404
+ var last = items.length - 1;
5405
+ if (!open) setOpen(true);else if (e.key === 'ArrowDown') setFocusIndex(focusIndex >= last ? 0 : focusIndex + 1);else setFocusIndex(focusIndex <= 0 ? last : focusIndex - 1);
5406
+ break;
5407
+ }
5408
+
5409
+ case 'Enter':
5410
+ if (open && items[focusIndex]) {
5411
+ e.preventDefault();
5412
+ onToggle(items[focusIndex]);
5413
+ }
5414
+
5415
+ break;
5416
+
5417
+ case 'Escape':
5418
+ close();
5368
5419
  }
5369
5420
  }
5370
5421
  }), /*#__PURE__*/React.createElement(ToggleButton, {
@@ -5372,7 +5423,9 @@ var MultiAutocompleteSelect = function MultiAutocompleteSelect(_ref8) {
5372
5423
  tabIndex: -1,
5373
5424
  onClick: function onClick(e) {
5374
5425
  e.stopPropagation();
5375
- if (!props.disabled) setOpen(!open);
5426
+ if (props.disabled) return;
5427
+ setOpen(!open);
5428
+ setFocusIndex(-1);
5376
5429
  }
5377
5430
  }, open ? /*#__PURE__*/React.createElement(Icons.ArrowUp, {
5378
5431
  size: "15px",
@@ -5407,11 +5460,18 @@ var MultiAutocompleteSelect = function MultiAutocompleteSelect(_ref8) {
5407
5460
  }, item.name);
5408
5461
  }
5409
5462
 
5463
+ var itemIndex = ++index;
5410
5464
  return /*#__PURE__*/React.createElement("li", {
5411
5465
  key: key,
5466
+ ref: itemIndex === focusIndex ? scrollIntoView : undefined,
5412
5467
  style: {
5413
5468
  paddingLeft: 8 + depth * 16,
5414
- justifyContent: 'flex-start'
5469
+ justifyContent: 'flex-start',
5470
+ // overrides li:hover, so a resting mouse does not keep a second row lit
5471
+ background: itemIndex === focusIndex ? theme.colors.info.bg : 'transparent'
5472
+ },
5473
+ onPointerMove: function onPointerMove() {
5474
+ return setFocusIndex(itemIndex);
5415
5475
  },
5416
5476
  onMouseDown: function onMouseDown(e) {
5417
5477
  return e.preventDefault();
@@ -5450,10 +5510,10 @@ var MultiDropdown = /*#__PURE__*/forwardRef(function (_ref10, ref) {
5450
5510
  resetCallback = _ref10.resetCallback,
5451
5511
  props = objectWithoutProperties(_ref10, ["name", "label", "help", "error", "valid", "options", "placeholder", "onChange", "defaultValue", "visibleOptionsQty", "openTo", "startOpen", "resetCallback"]);
5452
5512
 
5453
- var _useState13 = useState([]),
5454
- _useState14 = slicedToArray(_useState13, 2),
5455
- selectedValues = _useState14[0],
5456
- setSelectedValues = _useState14[1];
5513
+ var _useState15 = useState([]),
5514
+ _useState16 = slicedToArray(_useState15, 2),
5515
+ selectedValues = _useState16[0],
5516
+ setSelectedValues = _useState16[1];
5457
5517
 
5458
5518
  var valueRef = useRef();
5459
5519
  var selectable = flattenOptions(options).filter(function (row) {
@@ -5561,10 +5621,10 @@ var SingleDropdown = /*#__PURE__*/forwardRef(function (_ref11, ref) {
5561
5621
  desc: ''
5562
5622
  };
5563
5623
 
5564
- var _useState15 = useState(defaultSelected),
5565
- _useState16 = slicedToArray(_useState15, 2),
5566
- selectedOpt = _useState16[0],
5567
- setSelected = _useState16[1];
5624
+ var _useState17 = useState(defaultSelected),
5625
+ _useState18 = slicedToArray(_useState17, 2),
5626
+ selectedOpt = _useState18[0],
5627
+ setSelected = _useState18[1];
5568
5628
 
5569
5629
  var valueRef = useRef();
5570
5630
 
@@ -5756,15 +5816,15 @@ var CustomDropdown = /*#__PURE__*/forwardRef(function (_ref14, ref) {
5756
5816
  openTo = _ref14.openTo,
5757
5817
  props = objectWithoutProperties(_ref14, ["name", "label", "help", "error", "valid", "options", "placeholder", "defaultValue", "multiple", "type", "tooltip", "onChange", "visibleOptionsQty", "openTo"]);
5758
5818
 
5759
- var _useState17 = useState(false),
5760
- _useState18 = slicedToArray(_useState17, 2),
5761
- open = _useState18[0],
5762
- setOpen = _useState18[1];
5763
-
5764
- var _useState19 = useState([]),
5819
+ var _useState19 = useState(false),
5765
5820
  _useState20 = slicedToArray(_useState19, 2),
5766
- selectedOpt = _useState20[0],
5767
- setSelected = _useState20[1];
5821
+ open = _useState20[0],
5822
+ setOpen = _useState20[1];
5823
+
5824
+ var _useState21 = useState([]),
5825
+ _useState22 = slicedToArray(_useState21, 2),
5826
+ selectedOpt = _useState22[0],
5827
+ setSelected = _useState22[1];
5768
5828
 
5769
5829
  var nodeSelect = useRef();
5770
5830
  var valueRef = useRef();