@pingux/astro 2.6.0-alpha.3 → 2.6.0-alpha.4

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.
@@ -20,6 +20,8 @@ var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-s
20
20
  var _from = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/from"));
21
21
  var _trim = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/trim"));
22
22
  var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
23
+ var _reduce = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/reduce"));
24
+ var _findIndex = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find-index"));
23
25
  var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
24
26
  var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
25
27
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
@@ -46,7 +48,7 @@ var _excluded = ["defaultSelectedKeys", "direction", "disabledKeys", "containerP
46
48
  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); }
47
49
  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; }
48
50
  function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty2(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
49
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context10, _context11; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context10 = ownKeys(Object(source), !0)).call(_context10, function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context11 = ownKeys(Object(source))).call(_context11, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
51
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context11, _context12; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context11 = ownKeys(Object(source), !0)).call(_context11, function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context12 = ownKeys(Object(source))).call(_context12, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
50
52
  /**
51
53
  * Complex control that lets you choose several tags from the dropdown list.
52
54
  * Or to add your own values in non-restrictive mode.
@@ -57,7 +59,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
57
59
  * Stately.
58
60
  */
59
61
  var MultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
60
- var _context7, _listBoxRef$current;
62
+ var _context8, _listBoxRef$current;
61
63
  var defaultSelectedKeys = props.defaultSelectedKeys,
62
64
  direction = props.direction,
63
65
  _props$disabledKeys = props.disabledKeys,
@@ -141,8 +143,13 @@ var MultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
141
143
  var close = function close() {
142
144
  return setIsOpen(false);
143
145
  };
146
+ var closeBadgeRefs = (0, _react.useRef)([]);
147
+ var inputWrapperRef = (0, _react.useRef)();
144
148
  var inputRef = (0, _react.useRef)();
145
149
  /* istanbul ignore next */
150
+ (0, _react.useImperativeHandle)(ref, function () {
151
+ return inputWrapperRef.current;
152
+ });
146
153
  (0, _react.useImperativeHandle)(ref, function () {
147
154
  return inputRef.current;
148
155
  });
@@ -156,7 +163,7 @@ var MultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
156
163
  placement: "".concat(direction, " end"),
157
164
  scrollRef: listBoxRef,
158
165
  shouldFlip: !isNotFlippable,
159
- targetRef: inputRef
166
+ targetRef: inputWrapperRef
160
167
  }),
161
168
  overlayProps = _useOverlayPosition.overlayProps,
162
169
  placement = _useOverlayPosition.placement,
@@ -180,12 +187,12 @@ var MultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
180
187
  setMenuWidth = _useState10[1];
181
188
  var onResize = (0, _react.useCallback)(function () {
182
189
  /* istanbul ignore next */
183
- if (inputRef.current) {
184
- setMenuWidth("".concat(inputRef.current.offsetWidth + 2, "px"));
190
+ if (inputWrapperRef.current) {
191
+ setMenuWidth("".concat(inputWrapperRef.current.offsetWidth + 2, "px"));
185
192
  }
186
- }, [inputRef, isOpen, setMenuWidth]);
193
+ }, [inputWrapperRef, isOpen, setMenuWidth]);
187
194
  (0, _utils.useResizeObserver)({
188
- ref: inputRef,
195
+ ref: inputWrapperRef,
189
196
  onResize: onResize
190
197
  });
191
198
  (0, _utils.useLayoutEffect)(onResize, [onResize]);
@@ -280,8 +287,25 @@ var MultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
280
287
  }
281
288
  if (onKeyDown) onKeyDown(e.nativeEvent);
282
289
  };
283
- var deleteItem = function deleteItem(key) {
290
+ var deleteItem = function deleteItem(key, e) {
291
+ var _context5;
292
+ var activeBadgesKeys = (0, _reduce["default"])(_context5 = closeBadgeRefs.current).call(_context5, function (result, item) {
293
+ if (item) {
294
+ result.push(item.dataset.item);
295
+ }
296
+ return result;
297
+ }, []);
284
298
  selectionManager.toggleSelection(key);
299
+ if (e.pointerType !== 'keyboard') return;
300
+ if (activeBadgesKeys.length > 1) {
301
+ var badgeIndex = (0, _findIndex["default"])(activeBadgesKeys).call(activeBadgesKeys, function (item) {
302
+ return item === key;
303
+ });
304
+ var nextFocusBadgeIndex = badgeIndex === activeBadgesKeys.length - 1 ? badgeIndex - 1 : badgeIndex;
305
+ closeBadgeRefs.current[nextFocusBadgeIndex].focus();
306
+ } else {
307
+ inputRef.current.focus();
308
+ }
285
309
  };
286
310
  var readOnlyTextItem = function readOnlyTextItem(key, name) {
287
311
  return (0, _react2.jsx)(_.Text, {
@@ -300,8 +324,8 @@ var MultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
300
324
  }, name);
301
325
  };
302
326
  var readOnlyInputEntry = isReadOnly && (readOnlyKeys.length ? (0, _map["default"])(readOnlyKeys).call(readOnlyKeys, function (key) {
303
- var _context5, _context6;
304
- var item = (0, _find["default"])(_context5 = (0, _concat["default"])(_context6 = []).call(_context6, initialItems, customItems)).call(_context5, function (el) {
327
+ var _context6, _context7;
328
+ var item = (0, _find["default"])(_context6 = (0, _concat["default"])(_context7 = []).call(_context7, initialItems, customItems)).call(_context6, function (el) {
305
329
  return el.key === key;
306
330
  });
307
331
  if (item) {
@@ -331,7 +355,7 @@ var MultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
331
355
  }
332
356
  return null;
333
357
  });
334
- var multivaluesFieldBadge = function multivaluesFieldBadge(item) {
358
+ var multivaluesFieldBadge = function multivaluesFieldBadge(item, index) {
335
359
  return (0, _react2.jsx)(_.Badge, (0, _extends2["default"])({
336
360
  key: item.key,
337
361
  role: "presentation",
@@ -341,9 +365,14 @@ var MultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
341
365
  slots: item.slots
342
366
  }, item.badgeProps), (0, _react2.jsx)(_.IconButton, (0, _extends2["default"])({
343
367
  "aria-label": "delete ".concat(item.name),
344
- onPress: function onPress() {
345
- return deleteItem(item.key);
368
+ "data-item": item.name,
369
+ onPress: function onPress(e) {
370
+ return deleteItem(item.key, e);
346
371
  },
372
+ ref: function ref(el) {
373
+ return closeBadgeRefs.current[index] = el;
374
+ } // eslint-disable-line
375
+ ,
347
376
  variant: "badge.deleteButton"
348
377
  }, item.buttonProps), (0, _react2.jsx)(_.Icon, {
349
378
  icon: _CloseIcon["default"],
@@ -354,13 +383,13 @@ var MultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
354
383
  }
355
384
  })));
356
385
  };
357
- var selectedItems = (0, _react2.jsx)(_react["default"].Fragment, null, (0, _map["default"])(_context7 = (0, _from["default"])(selectionManager.selectedKeys)).call(_context7, function (key) {
358
- var _context8, _context9;
359
- var item = (0, _find["default"])(_context8 = (0, _concat["default"])(_context9 = []).call(_context9, initialItems, customItems)).call(_context8, function (el) {
386
+ var selectedItems = (0, _react2.jsx)(_react["default"].Fragment, null, (0, _map["default"])(_context8 = (0, _from["default"])(selectionManager.selectedKeys)).call(_context8, function (key, i) {
387
+ var _context9, _context10;
388
+ var item = (0, _find["default"])(_context9 = (0, _concat["default"])(_context10 = []).call(_context10, initialItems, customItems)).call(_context9, function (el) {
360
389
  return el.key === key;
361
390
  });
362
391
  if (item) {
363
- return multivaluesFieldBadge(item);
392
+ return multivaluesFieldBadge(item, i);
364
393
  }
365
394
  return null;
366
395
  }));
@@ -385,7 +414,8 @@ var MultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
385
414
  'aria-activedescendant': activeDescendant,
386
415
  'aria-controls': (_listBoxRef$current = listBoxRef.current) === null || _listBoxRef$current === void 0 ? void 0 : _listBoxRef$current.id,
387
416
  'aria-expanded': isOpen,
388
- role: 'combobox'
417
+ role: 'combobox',
418
+ ref: inputRef
389
419
  },
390
420
  hasAutoFocus: hasAutoFocus,
391
421
  hasNoStatusIndicator: hasNoStatusIndicator,
@@ -395,7 +425,7 @@ var MultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
395
425
  label: label,
396
426
  placeholder: placeholder,
397
427
  wrapperProps: {
398
- ref: inputRef,
428
+ ref: inputWrapperRef,
399
429
  variant: 'forms.input.multivaluesWrapper',
400
430
  sx: isReadOnly && {
401
431
  boxShadow: 'inset 0 0 0 100px #e5e9f8',
@@ -620,4 +620,54 @@ test('in non-restrictive mode the value should be trimmed', function () {
620
620
  expect(badge).not.toBeInTheDocument();
621
621
  expect(trimmedBadge).toBeInTheDocument();
622
622
  expect(input).toHaveValue('');
623
+ });
624
+ test('deleting a single badge via keyboard moves focus to the input', function () {
625
+ getComponent();
626
+ var input = _testWrapper.screen.getByRole('combobox');
627
+ _userEvent["default"].tab();
628
+ var options = _testWrapper.screen.getAllByRole('option');
629
+ var firstOption = options[0];
630
+ firstOption.click();
631
+ var badge = _testWrapper.screen.getByText(items[0].name);
632
+ expect(badge).toBeInTheDocument();
633
+ _userEvent["default"].tab({
634
+ shift: true
635
+ });
636
+ var deleteButton = badge.nextSibling;
637
+ expect(deleteButton).toHaveClass('is-focused');
638
+ _testWrapper.fireEvent.keyDown(deleteButton, {
639
+ key: 'Enter'
640
+ });
641
+ _testWrapper.fireEvent.keyUp(deleteButton, {
642
+ key: 'Enter'
643
+ });
644
+ expect(badge).not.toBeInTheDocument();
645
+ expect(input).toHaveClass('is-focused');
646
+ });
647
+ test('deleting the last badge via keyboard moves focus to the previous badge', function () {
648
+ getComponent();
649
+ _userEvent["default"].tab();
650
+ var options = _testWrapper.screen.getAllByRole('option');
651
+ var firstOption = options[0];
652
+ var secondOption = options[1];
653
+ firstOption.click();
654
+ secondOption.click();
655
+ var badge1 = _testWrapper.screen.getByText(items[0].name);
656
+ var badge2 = _testWrapper.screen.getByText(items[1].name);
657
+ expect(badge1).toBeInTheDocument();
658
+ expect(badge2).toBeInTheDocument();
659
+ _userEvent["default"].tab({
660
+ shift: true
661
+ });
662
+ var deleteButton1 = badge1.nextSibling;
663
+ var deleteButton2 = badge2.nextSibling;
664
+ expect(deleteButton2).toHaveClass('is-focused');
665
+ _testWrapper.fireEvent.keyDown(deleteButton2, {
666
+ key: 'Enter'
667
+ });
668
+ _testWrapper.fireEvent.keyUp(deleteButton2, {
669
+ key: 'Enter'
670
+ });
671
+ expect(badge2).not.toBeInTheDocument();
672
+ expect(deleteButton1).toHaveClass('is-focused');
623
673
  });
@@ -11,12 +11,14 @@ import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
11
11
  import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
12
12
  var _excluded = ["defaultSelectedKeys", "direction", "disabledKeys", "containerProps", "hasAutoFocus", "hasNoStatusIndicator", "helperText", "inputProps", "isDisabled", "isNotFlippable", "isReadOnly", "isRequired", "items", "label", "mode", "onBlur", "onFocus", "onInputChange", "onKeyDown", "onKeyUp", "onOpenChange", "onSelectionChange", "placeholder", "readOnlyKeys", "selectedKeys", "scrollBoxProps", "status"];
13
13
  function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
14
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context10, _context11; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context10 = ownKeys(Object(source), !0)).call(_context10, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context11 = ownKeys(Object(source))).call(_context11, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
14
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context11, _context12; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context11 = ownKeys(Object(source), !0)).call(_context11, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context12 = ownKeys(Object(source))).call(_context12, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
15
15
  import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
16
16
  import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/includes";
17
17
  import _Array$from from "@babel/runtime-corejs3/core-js-stable/array/from";
18
18
  import _trimInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/trim";
19
19
  import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
20
+ import _reduceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/reduce";
21
+ import _findIndexInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/find-index";
20
22
  import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
21
23
  import _findInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/find";
22
24
  import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
@@ -46,7 +48,7 @@ import ListBox from '../ListBox';
46
48
  */
47
49
  import { jsx as ___EmotionJSX } from "@emotion/react";
48
50
  var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
49
- var _context7, _listBoxRef$current;
51
+ var _context8, _listBoxRef$current;
50
52
  var defaultSelectedKeys = props.defaultSelectedKeys,
51
53
  direction = props.direction,
52
54
  _props$disabledKeys = props.disabledKeys,
@@ -130,8 +132,13 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
130
132
  var close = function close() {
131
133
  return setIsOpen(false);
132
134
  };
135
+ var closeBadgeRefs = useRef([]);
136
+ var inputWrapperRef = useRef();
133
137
  var inputRef = useRef();
134
138
  /* istanbul ignore next */
139
+ useImperativeHandle(ref, function () {
140
+ return inputWrapperRef.current;
141
+ });
135
142
  useImperativeHandle(ref, function () {
136
143
  return inputRef.current;
137
144
  });
@@ -145,7 +152,7 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
145
152
  placement: "".concat(direction, " end"),
146
153
  scrollRef: listBoxRef,
147
154
  shouldFlip: !isNotFlippable,
148
- targetRef: inputRef
155
+ targetRef: inputWrapperRef
149
156
  }),
150
157
  overlayProps = _useOverlayPosition.overlayProps,
151
158
  placement = _useOverlayPosition.placement,
@@ -169,12 +176,12 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
169
176
  setMenuWidth = _useState10[1];
170
177
  var onResize = useCallback(function () {
171
178
  /* istanbul ignore next */
172
- if (inputRef.current) {
173
- setMenuWidth("".concat(inputRef.current.offsetWidth + 2, "px"));
179
+ if (inputWrapperRef.current) {
180
+ setMenuWidth("".concat(inputWrapperRef.current.offsetWidth + 2, "px"));
174
181
  }
175
- }, [inputRef, isOpen, setMenuWidth]);
182
+ }, [inputWrapperRef, isOpen, setMenuWidth]);
176
183
  useResizeObserver({
177
- ref: inputRef,
184
+ ref: inputWrapperRef,
178
185
  onResize: onResize
179
186
  });
180
187
  useLayoutEffect(onResize, [onResize]);
@@ -269,8 +276,25 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
269
276
  }
270
277
  if (onKeyDown) onKeyDown(e.nativeEvent);
271
278
  };
272
- var deleteItem = function deleteItem(key) {
279
+ var deleteItem = function deleteItem(key, e) {
280
+ var _context5;
281
+ var activeBadgesKeys = _reduceInstanceProperty(_context5 = closeBadgeRefs.current).call(_context5, function (result, item) {
282
+ if (item) {
283
+ result.push(item.dataset.item);
284
+ }
285
+ return result;
286
+ }, []);
273
287
  selectionManager.toggleSelection(key);
288
+ if (e.pointerType !== 'keyboard') return;
289
+ if (activeBadgesKeys.length > 1) {
290
+ var badgeIndex = _findIndexInstanceProperty(activeBadgesKeys).call(activeBadgesKeys, function (item) {
291
+ return item === key;
292
+ });
293
+ var nextFocusBadgeIndex = badgeIndex === activeBadgesKeys.length - 1 ? badgeIndex - 1 : badgeIndex;
294
+ closeBadgeRefs.current[nextFocusBadgeIndex].focus();
295
+ } else {
296
+ inputRef.current.focus();
297
+ }
274
298
  };
275
299
  var readOnlyTextItem = function readOnlyTextItem(key, name) {
276
300
  return ___EmotionJSX(Text, {
@@ -289,8 +313,8 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
289
313
  }, name);
290
314
  };
291
315
  var readOnlyInputEntry = isReadOnly && (readOnlyKeys.length ? _mapInstanceProperty(readOnlyKeys).call(readOnlyKeys, function (key) {
292
- var _context5, _context6;
293
- var item = _findInstanceProperty(_context5 = _concatInstanceProperty(_context6 = []).call(_context6, initialItems, customItems)).call(_context5, function (el) {
316
+ var _context6, _context7;
317
+ var item = _findInstanceProperty(_context6 = _concatInstanceProperty(_context7 = []).call(_context7, initialItems, customItems)).call(_context6, function (el) {
294
318
  return el.key === key;
295
319
  });
296
320
  if (item) {
@@ -320,7 +344,7 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
320
344
  }
321
345
  return null;
322
346
  });
323
- var multivaluesFieldBadge = function multivaluesFieldBadge(item) {
347
+ var multivaluesFieldBadge = function multivaluesFieldBadge(item, index) {
324
348
  return ___EmotionJSX(Badge, _extends({
325
349
  key: item.key,
326
350
  role: "presentation",
@@ -330,9 +354,14 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
330
354
  slots: item.slots
331
355
  }, item.badgeProps), ___EmotionJSX(IconButton, _extends({
332
356
  "aria-label": "delete ".concat(item.name),
333
- onPress: function onPress() {
334
- return deleteItem(item.key);
357
+ "data-item": item.name,
358
+ onPress: function onPress(e) {
359
+ return deleteItem(item.key, e);
335
360
  },
361
+ ref: function ref(el) {
362
+ return closeBadgeRefs.current[index] = el;
363
+ } // eslint-disable-line
364
+ ,
336
365
  variant: "badge.deleteButton"
337
366
  }, item.buttonProps), ___EmotionJSX(Icon, {
338
367
  icon: Clear,
@@ -343,13 +372,13 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
343
372
  }
344
373
  })));
345
374
  };
346
- var selectedItems = ___EmotionJSX(React.Fragment, null, _mapInstanceProperty(_context7 = _Array$from(selectionManager.selectedKeys)).call(_context7, function (key) {
347
- var _context8, _context9;
348
- var item = _findInstanceProperty(_context8 = _concatInstanceProperty(_context9 = []).call(_context9, initialItems, customItems)).call(_context8, function (el) {
375
+ var selectedItems = ___EmotionJSX(React.Fragment, null, _mapInstanceProperty(_context8 = _Array$from(selectionManager.selectedKeys)).call(_context8, function (key, i) {
376
+ var _context9, _context10;
377
+ var item = _findInstanceProperty(_context9 = _concatInstanceProperty(_context10 = []).call(_context10, initialItems, customItems)).call(_context9, function (el) {
349
378
  return el.key === key;
350
379
  });
351
380
  if (item) {
352
- return multivaluesFieldBadge(item);
381
+ return multivaluesFieldBadge(item, i);
353
382
  }
354
383
  return null;
355
384
  }));
@@ -374,7 +403,8 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
374
403
  'aria-activedescendant': activeDescendant,
375
404
  'aria-controls': (_listBoxRef$current = listBoxRef.current) === null || _listBoxRef$current === void 0 ? void 0 : _listBoxRef$current.id,
376
405
  'aria-expanded': isOpen,
377
- role: 'combobox'
406
+ role: 'combobox',
407
+ ref: inputRef
378
408
  },
379
409
  hasAutoFocus: hasAutoFocus,
380
410
  hasNoStatusIndicator: hasNoStatusIndicator,
@@ -384,7 +414,7 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
384
414
  label: label,
385
415
  placeholder: placeholder,
386
416
  wrapperProps: {
387
- ref: inputRef,
417
+ ref: inputWrapperRef,
388
418
  variant: 'forms.input.multivaluesWrapper',
389
419
  sx: isReadOnly && {
390
420
  boxShadow: 'inset 0 0 0 100px #e5e9f8',
@@ -617,4 +617,54 @@ test('in non-restrictive mode the value should be trimmed', function () {
617
617
  expect(badge).not.toBeInTheDocument();
618
618
  expect(trimmedBadge).toBeInTheDocument();
619
619
  expect(input).toHaveValue('');
620
+ });
621
+ test('deleting a single badge via keyboard moves focus to the input', function () {
622
+ getComponent();
623
+ var input = screen.getByRole('combobox');
624
+ userEvent.tab();
625
+ var options = screen.getAllByRole('option');
626
+ var firstOption = options[0];
627
+ firstOption.click();
628
+ var badge = screen.getByText(items[0].name);
629
+ expect(badge).toBeInTheDocument();
630
+ userEvent.tab({
631
+ shift: true
632
+ });
633
+ var deleteButton = badge.nextSibling;
634
+ expect(deleteButton).toHaveClass('is-focused');
635
+ fireEvent.keyDown(deleteButton, {
636
+ key: 'Enter'
637
+ });
638
+ fireEvent.keyUp(deleteButton, {
639
+ key: 'Enter'
640
+ });
641
+ expect(badge).not.toBeInTheDocument();
642
+ expect(input).toHaveClass('is-focused');
643
+ });
644
+ test('deleting the last badge via keyboard moves focus to the previous badge', function () {
645
+ getComponent();
646
+ userEvent.tab();
647
+ var options = screen.getAllByRole('option');
648
+ var firstOption = options[0];
649
+ var secondOption = options[1];
650
+ firstOption.click();
651
+ secondOption.click();
652
+ var badge1 = screen.getByText(items[0].name);
653
+ var badge2 = screen.getByText(items[1].name);
654
+ expect(badge1).toBeInTheDocument();
655
+ expect(badge2).toBeInTheDocument();
656
+ userEvent.tab({
657
+ shift: true
658
+ });
659
+ var deleteButton1 = badge1.nextSibling;
660
+ var deleteButton2 = badge2.nextSibling;
661
+ expect(deleteButton2).toHaveClass('is-focused');
662
+ fireEvent.keyDown(deleteButton2, {
663
+ key: 'Enter'
664
+ });
665
+ fireEvent.keyUp(deleteButton2, {
666
+ key: 'Enter'
667
+ });
668
+ expect(badge2).not.toBeInTheDocument();
669
+ expect(deleteButton1).toHaveClass('is-focused');
620
670
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pingux/astro",
3
- "version": "2.6.0-alpha.3",
3
+ "version": "2.6.0-alpha.4",
4
4
  "description": "PingUX themeable React component library",
5
5
  "repository": {
6
6
  "type": "git",