@pingux/astro 2.5.2-alpha.0 → 2.5.2-alpha.2

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.
@@ -243,7 +243,9 @@ var DateField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
243
243
  isDisabled: isDisabled,
244
244
  isReadOnly: isReadOnly,
245
245
  isRequired: isRequired,
246
- handlePaste: handlePaste
246
+ segments: locale === 'en-US' ? enUSSegments : segments,
247
+ handlePaste: handlePaste,
248
+ segmentIndex: index
247
249
  }, other));
248
250
  })), (0, _react2.jsx)(_index.IconButton, (0, _extends2["default"])({
249
251
  variant: "datePicker.containedIcon",
@@ -14,7 +14,6 @@ _Object$defineProperty(exports, "__esModule", {
14
14
  });
15
15
  exports["default"] = exports.containedIcon = void 0;
16
16
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
17
- var _Buttons = require("../Button/Buttons.styles");
18
17
  var _Input = require("../Input/Input.styles");
19
18
  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; }
20
19
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -26,7 +25,7 @@ var inputField = _objectSpread(_objectSpread({}, _Input.input), {}, {
26
25
  width: 'auto',
27
26
  pr: 'xl',
28
27
  position: 'relative',
29
- '&:focus-within:not(.is-read-only)': _objectSpread({}, _Buttons.defaultFocus),
28
+ '&:focus-within:not(.is-read-only)': _objectSpread({}, _Input.defaultFocus),
30
29
  ':hover': {
31
30
  cursor: 'text'
32
31
  },
@@ -506,7 +506,7 @@ test('dateField should handle min, max or next available date if the pasted date
506
506
  (0, _testWrapper.fireEvent)(month, unavailablePaste);
507
507
  expect(_testWrapper.screen.queryByTestId('date-field')).toHaveValue('2022-08-04');
508
508
  });
509
- test('dateField should handle autofocus when deleting segments ', function () {
509
+ test('dateField should handle autofocus when deleting segments right to left', function () {
510
510
  getComponent({
511
511
  defaultValue: '2022-08-10'
512
512
  });
@@ -548,6 +548,133 @@ test('dateField should handle autofocus when deleting segments ', function () {
548
548
  }
549
549
  expect(hiddenInput).toHaveValue('');
550
550
  });
551
+ test('dateField should handle autofocus when deleting segments left to right', function () {
552
+ getComponent({
553
+ defaultValue: '2022-08-10'
554
+ });
555
+ var hiddenInput = _testWrapper.screen.queryByTestId('date-field');
556
+ var inputButtons = _testWrapper.screen.queryAllByRole('spinbutton');
557
+ var year = inputButtons[0];
558
+ var month = inputButtons[1];
559
+ var day = inputButtons[2];
560
+ expect(hiddenInput).toHaveValue('2022-08-10');
561
+ (0, _testWrapper.act)(function () {
562
+ year.focus();
563
+ });
564
+ expect(year).toHaveFocus();
565
+ for (var i = 0; i < 4; i += 1) {
566
+ _testWrapper.fireEvent.keyDown(year, {
567
+ key: 'Backspace'
568
+ });
569
+ _testWrapper.fireEvent.keyUp(year, {
570
+ key: 'Backspace'
571
+ });
572
+ }
573
+ expect(month).toHaveFocus();
574
+ for (var _i5 = 0; _i5 < 2; _i5 += 1) {
575
+ _testWrapper.fireEvent.keyDown(month, {
576
+ key: 'Backspace'
577
+ });
578
+ _testWrapper.fireEvent.keyUp(month, {
579
+ key: 'Backspace'
580
+ });
581
+ }
582
+ expect(day).toHaveFocus();
583
+ for (var _i6 = 0; _i6 < 2; _i6 += 1) {
584
+ _testWrapper.fireEvent.keyDown(day, {
585
+ key: 'Backspace'
586
+ });
587
+ _testWrapper.fireEvent.keyUp(day, {
588
+ key: 'Backspace'
589
+ });
590
+ }
591
+ expect(hiddenInput).toHaveValue('');
592
+ });
593
+ test('dateField should handle autofocus when deleting segments from middle', function () {
594
+ getComponent({
595
+ defaultValue: '2022-08-10'
596
+ });
597
+ var hiddenInput = _testWrapper.screen.queryByTestId('date-field');
598
+ var inputButtons = _testWrapper.screen.queryAllByRole('spinbutton');
599
+ var year = inputButtons[0];
600
+ var month = inputButtons[1];
601
+ var day = inputButtons[2];
602
+ expect(hiddenInput).toHaveValue('2022-08-10');
603
+ (0, _testWrapper.act)(function () {
604
+ month.focus();
605
+ });
606
+ expect(month).toHaveFocus();
607
+ for (var i = 0; i < 2; i += 1) {
608
+ _testWrapper.fireEvent.keyDown(month, {
609
+ key: 'Backspace'
610
+ });
611
+ _testWrapper.fireEvent.keyUp(month, {
612
+ key: 'Backspace'
613
+ });
614
+ }
615
+ expect(year).toHaveFocus();
616
+ for (var _i7 = 0; _i7 < 4; _i7 += 1) {
617
+ _testWrapper.fireEvent.keyDown(year, {
618
+ key: 'Backspace'
619
+ });
620
+ _testWrapper.fireEvent.keyUp(year, {
621
+ key: 'Backspace'
622
+ });
623
+ }
624
+ expect(day).toHaveFocus();
625
+ for (var _i8 = 0; _i8 < 2; _i8 += 1) {
626
+ _testWrapper.fireEvent.keyDown(day, {
627
+ key: 'Backspace'
628
+ });
629
+ _testWrapper.fireEvent.keyUp(day, {
630
+ key: 'Backspace'
631
+ });
632
+ }
633
+ _testWrapper.fireEvent.keyDown(year, {
634
+ key: 'Backspace'
635
+ });
636
+ _testWrapper.fireEvent.keyUp(year, {
637
+ key: 'Backspace'
638
+ });
639
+ expect(day).toHaveFocus();
640
+ expect(hiddenInput).toHaveValue('');
641
+ });
642
+ test('segment focus should move to the year if month is already empty', function () {
643
+ getComponent({
644
+ defaultValue: '2022-08-10'
645
+ });
646
+ var hiddenInput = _testWrapper.screen.queryByTestId('date-field');
647
+ var inputButtons = _testWrapper.screen.queryAllByRole('spinbutton');
648
+ var year = inputButtons[0];
649
+ var month = inputButtons[1];
650
+ var day = inputButtons[2];
651
+ expect(hiddenInput).toHaveValue('2022-08-10');
652
+ (0, _testWrapper.act)(function () {
653
+ month.focus();
654
+ });
655
+ expect(month).toHaveFocus();
656
+ for (var i = 0; i < 2; i += 1) {
657
+ _testWrapper.fireEvent.keyDown(month, {
658
+ key: 'Backspace'
659
+ });
660
+ _testWrapper.fireEvent.keyUp(month, {
661
+ key: 'Backspace'
662
+ });
663
+ }
664
+ (0, _testWrapper.act)(function () {
665
+ day.focus();
666
+ });
667
+ expect(day).toHaveFocus();
668
+ for (var _i9 = 0; _i9 < 2; _i9 += 1) {
669
+ _testWrapper.fireEvent.keyDown(day, {
670
+ key: 'Backspace'
671
+ });
672
+ _testWrapper.fireEvent.keyUp(day, {
673
+ key: 'Backspace'
674
+ });
675
+ }
676
+ expect(year).toHaveFocus();
677
+ });
551
678
  test('should add the correct number of padded 0 to year, month and day', function () {
552
679
  getComponent({
553
680
  defaultValue: '0009-08-02'
@@ -25,7 +25,9 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
25
25
  var DateSegment = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
26
26
  var segment = props.segment,
27
27
  state = props.state,
28
- handlePaste = props.handlePaste;
28
+ handlePaste = props.handlePaste,
29
+ segments = props.segments,
30
+ segmentIndex = props.segmentIndex;
29
31
  var segmentRef = (0, _react.useRef)();
30
32
  // istanbul ignore next
31
33
  (0, _react.useImperativeHandle)(ref, function () {
@@ -41,10 +43,29 @@ var DateSegment = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
41
43
  */
42
44
  var focusManager = (0, _reactAria.useFocusManager)();
43
45
  var handleKeyEvents = (0, _react.useCallback)(function (e) {
44
- if (e.key === 'Backspace' && isPlaceholder && (text === 'mm' || text === 'dd')) {
45
- focusManager.focusPrevious();
46
+ var getSegmentValue = function getSegmentValue(index) {
47
+ var isNumber = /^\d+$/.test(segments[index].text);
48
+ return isNumber;
49
+ };
50
+ if (e.key === 'Backspace' && isPlaceholder) {
51
+ switch (segmentIndex) {
52
+ case 0:
53
+ if (getSegmentValue(2)) return focusManager.focusNext();
54
+ if (!getSegmentValue(2) && getSegmentValue(4)) return focusManager.focusLast();
55
+ break;
56
+ case 2:
57
+ if (getSegmentValue(0)) return focusManager.focusPrevious();
58
+ if (getSegmentValue(4)) return focusManager.focusNext();
59
+ break;
60
+ case 4:
61
+ if (getSegmentValue(2)) return focusManager.focusPrevious();
62
+ if (!getSegmentValue(2) && getSegmentValue(0)) return focusManager.focusFirst();
63
+ break;
64
+ default:
65
+ }
46
66
  }
47
- }, [focusManager, segment, text, isPlaceholder]);
67
+ return null;
68
+ }, [focusManager, segment, isPlaceholder]);
48
69
  return (0, _react2.jsx)(_index.Box, (0, _extends2["default"])({}, segmentProps, {
49
70
  ref: segmentRef,
50
71
  variant: "forms.datePicker.segment",
@@ -61,6 +82,12 @@ DateSegment.propTypes = {
61
82
  value: _propTypes["default"].number,
62
83
  type: _propTypes["default"].string
63
84
  }),
85
+ /** index value of each segment */
86
+ segmentIndex: _propTypes["default"].number,
87
+ /** An array of segments */
88
+ segments: _propTypes["default"].arrayOf(_propTypes["default"].shape({
89
+ text: _propTypes["default"].string
90
+ })),
64
91
  /** state returned by useDateField */
65
92
  state: _propTypes["default"].shape({}),
66
93
  /**
@@ -231,7 +231,9 @@ var DateField = /*#__PURE__*/forwardRef(function (props, ref) {
231
231
  isDisabled: isDisabled,
232
232
  isReadOnly: isReadOnly,
233
233
  isRequired: isRequired,
234
- handlePaste: handlePaste
234
+ segments: locale === 'en-US' ? enUSSegments : segments,
235
+ handlePaste: handlePaste,
236
+ segmentIndex: index
235
237
  }, other));
236
238
  })), ___EmotionJSX(IconButton, _extends({
237
239
  variant: "datePicker.containedIcon",
@@ -9,8 +9,7 @@ import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object
9
9
  import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
10
10
  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; }
11
11
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
12
- import { defaultFocus } from '../Button/Buttons.styles';
13
- import { input } from '../Input/Input.styles';
12
+ import { defaultFocus, input } from '../Input/Input.styles';
14
13
  var inSlotContainer = _objectSpread(_objectSpread({}, input.fieldControlWrapper), {}, {
15
14
  position: 'relative',
16
15
  width: 'fit-content'
@@ -499,7 +499,7 @@ test('dateField should handle min, max or next available date if the pasted date
499
499
  fireEvent(month, unavailablePaste);
500
500
  expect(screen.queryByTestId('date-field')).toHaveValue('2022-08-04');
501
501
  });
502
- test('dateField should handle autofocus when deleting segments ', function () {
502
+ test('dateField should handle autofocus when deleting segments right to left', function () {
503
503
  getComponent({
504
504
  defaultValue: '2022-08-10'
505
505
  });
@@ -541,6 +541,133 @@ test('dateField should handle autofocus when deleting segments ', function () {
541
541
  }
542
542
  expect(hiddenInput).toHaveValue('');
543
543
  });
544
+ test('dateField should handle autofocus when deleting segments left to right', function () {
545
+ getComponent({
546
+ defaultValue: '2022-08-10'
547
+ });
548
+ var hiddenInput = screen.queryByTestId('date-field');
549
+ var inputButtons = screen.queryAllByRole('spinbutton');
550
+ var year = inputButtons[0];
551
+ var month = inputButtons[1];
552
+ var day = inputButtons[2];
553
+ expect(hiddenInput).toHaveValue('2022-08-10');
554
+ act(function () {
555
+ year.focus();
556
+ });
557
+ expect(year).toHaveFocus();
558
+ for (var i = 0; i < 4; i += 1) {
559
+ fireEvent.keyDown(year, {
560
+ key: 'Backspace'
561
+ });
562
+ fireEvent.keyUp(year, {
563
+ key: 'Backspace'
564
+ });
565
+ }
566
+ expect(month).toHaveFocus();
567
+ for (var _i5 = 0; _i5 < 2; _i5 += 1) {
568
+ fireEvent.keyDown(month, {
569
+ key: 'Backspace'
570
+ });
571
+ fireEvent.keyUp(month, {
572
+ key: 'Backspace'
573
+ });
574
+ }
575
+ expect(day).toHaveFocus();
576
+ for (var _i6 = 0; _i6 < 2; _i6 += 1) {
577
+ fireEvent.keyDown(day, {
578
+ key: 'Backspace'
579
+ });
580
+ fireEvent.keyUp(day, {
581
+ key: 'Backspace'
582
+ });
583
+ }
584
+ expect(hiddenInput).toHaveValue('');
585
+ });
586
+ test('dateField should handle autofocus when deleting segments from middle', function () {
587
+ getComponent({
588
+ defaultValue: '2022-08-10'
589
+ });
590
+ var hiddenInput = screen.queryByTestId('date-field');
591
+ var inputButtons = screen.queryAllByRole('spinbutton');
592
+ var year = inputButtons[0];
593
+ var month = inputButtons[1];
594
+ var day = inputButtons[2];
595
+ expect(hiddenInput).toHaveValue('2022-08-10');
596
+ act(function () {
597
+ month.focus();
598
+ });
599
+ expect(month).toHaveFocus();
600
+ for (var i = 0; i < 2; i += 1) {
601
+ fireEvent.keyDown(month, {
602
+ key: 'Backspace'
603
+ });
604
+ fireEvent.keyUp(month, {
605
+ key: 'Backspace'
606
+ });
607
+ }
608
+ expect(year).toHaveFocus();
609
+ for (var _i7 = 0; _i7 < 4; _i7 += 1) {
610
+ fireEvent.keyDown(year, {
611
+ key: 'Backspace'
612
+ });
613
+ fireEvent.keyUp(year, {
614
+ key: 'Backspace'
615
+ });
616
+ }
617
+ expect(day).toHaveFocus();
618
+ for (var _i8 = 0; _i8 < 2; _i8 += 1) {
619
+ fireEvent.keyDown(day, {
620
+ key: 'Backspace'
621
+ });
622
+ fireEvent.keyUp(day, {
623
+ key: 'Backspace'
624
+ });
625
+ }
626
+ fireEvent.keyDown(year, {
627
+ key: 'Backspace'
628
+ });
629
+ fireEvent.keyUp(year, {
630
+ key: 'Backspace'
631
+ });
632
+ expect(day).toHaveFocus();
633
+ expect(hiddenInput).toHaveValue('');
634
+ });
635
+ test('segment focus should move to the year if month is already empty', function () {
636
+ getComponent({
637
+ defaultValue: '2022-08-10'
638
+ });
639
+ var hiddenInput = screen.queryByTestId('date-field');
640
+ var inputButtons = screen.queryAllByRole('spinbutton');
641
+ var year = inputButtons[0];
642
+ var month = inputButtons[1];
643
+ var day = inputButtons[2];
644
+ expect(hiddenInput).toHaveValue('2022-08-10');
645
+ act(function () {
646
+ month.focus();
647
+ });
648
+ expect(month).toHaveFocus();
649
+ for (var i = 0; i < 2; i += 1) {
650
+ fireEvent.keyDown(month, {
651
+ key: 'Backspace'
652
+ });
653
+ fireEvent.keyUp(month, {
654
+ key: 'Backspace'
655
+ });
656
+ }
657
+ act(function () {
658
+ day.focus();
659
+ });
660
+ expect(day).toHaveFocus();
661
+ for (var _i9 = 0; _i9 < 2; _i9 += 1) {
662
+ fireEvent.keyDown(day, {
663
+ key: 'Backspace'
664
+ });
665
+ fireEvent.keyUp(day, {
666
+ key: 'Backspace'
667
+ });
668
+ }
669
+ expect(year).toHaveFocus();
670
+ });
544
671
  test('should add the correct number of padded 0 to year, month and day', function () {
545
672
  getComponent({
546
673
  defaultValue: '0009-08-02'
@@ -13,7 +13,9 @@ import { jsx as ___EmotionJSX } from "@emotion/react";
13
13
  var DateSegment = /*#__PURE__*/forwardRef(function (props, ref) {
14
14
  var segment = props.segment,
15
15
  state = props.state,
16
- handlePaste = props.handlePaste;
16
+ handlePaste = props.handlePaste,
17
+ segments = props.segments,
18
+ segmentIndex = props.segmentIndex;
17
19
  var segmentRef = useRef();
18
20
  // istanbul ignore next
19
21
  useImperativeHandle(ref, function () {
@@ -29,10 +31,29 @@ var DateSegment = /*#__PURE__*/forwardRef(function (props, ref) {
29
31
  */
30
32
  var focusManager = useFocusManager();
31
33
  var handleKeyEvents = useCallback(function (e) {
32
- if (e.key === 'Backspace' && isPlaceholder && (text === 'mm' || text === 'dd')) {
33
- focusManager.focusPrevious();
34
+ var getSegmentValue = function getSegmentValue(index) {
35
+ var isNumber = /^\d+$/.test(segments[index].text);
36
+ return isNumber;
37
+ };
38
+ if (e.key === 'Backspace' && isPlaceholder) {
39
+ switch (segmentIndex) {
40
+ case 0:
41
+ if (getSegmentValue(2)) return focusManager.focusNext();
42
+ if (!getSegmentValue(2) && getSegmentValue(4)) return focusManager.focusLast();
43
+ break;
44
+ case 2:
45
+ if (getSegmentValue(0)) return focusManager.focusPrevious();
46
+ if (getSegmentValue(4)) return focusManager.focusNext();
47
+ break;
48
+ case 4:
49
+ if (getSegmentValue(2)) return focusManager.focusPrevious();
50
+ if (!getSegmentValue(2) && getSegmentValue(0)) return focusManager.focusFirst();
51
+ break;
52
+ default:
53
+ }
34
54
  }
35
- }, [focusManager, segment, text, isPlaceholder]);
55
+ return null;
56
+ }, [focusManager, segment, isPlaceholder]);
36
57
  return ___EmotionJSX(Box, _extends({}, segmentProps, {
37
58
  ref: segmentRef,
38
59
  variant: "forms.datePicker.segment",
@@ -49,6 +70,12 @@ DateSegment.propTypes = {
49
70
  value: PropTypes.number,
50
71
  type: PropTypes.string
51
72
  }),
73
+ /** index value of each segment */
74
+ segmentIndex: PropTypes.number,
75
+ /** An array of segments */
76
+ segments: PropTypes.arrayOf(PropTypes.shape({
77
+ text: PropTypes.string
78
+ })),
52
79
  /** state returned by useDateField */
53
80
  state: PropTypes.shape({}),
54
81
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pingux/astro",
3
- "version": "2.5.2-alpha.0",
3
+ "version": "2.5.2-alpha.2",
4
4
  "description": "PingUX themeable React component library",
5
5
  "repository": {
6
6
  "type": "git",