@planningcenter/tapestry-react 2.0.0-rc.0 → 2.0.0-rc.1

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.
@@ -2,34 +2,209 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
- var _react = _interopRequireDefault(require("react"));
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
6
+
7
+ var _react = _interopRequireWildcard(require("react"));
6
8
 
7
9
  var _react2 = require("@testing-library/react");
8
10
 
11
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
12
+
13
+ require("@testing-library/jest-dom/extend-expect");
14
+
15
+ var _lodash = require("lodash");
16
+
17
+ var _ = require("..");
18
+
9
19
  var _Dropdown = _interopRequireDefault(require("./Dropdown"));
10
20
 
11
- var _ThemeProvider = _interopRequireDefault(require("../ThemeProvider"));
21
+ describe('Dropdown', function () {
22
+ describe('Text search', function () {
23
+ it("should render title", function () {
24
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Dropdown["default"], {
25
+ title: "A menu"
26
+ }));
12
27
 
13
- it("should render title", function () {
14
- (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Dropdown["default"], {
15
- title: "A menu"
16
- }));
28
+ _react2.screen.getByText('A menu');
29
+ });
30
+ it("calls passed onSearch function when receiving keyboard input", function () {
31
+ var customTextSearch = jest.fn();
32
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_Dropdown["default"], {
33
+ title: "A menu",
34
+ onSearch: customTextSearch
35
+ })));
17
36
 
18
- _react2.screen.getByText('A menu');
19
- });
20
- it("calls passed onSearch function when receiving keyboard input", function () {
21
- var customTextSearch = jest.fn();
22
- (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ThemeProvider["default"], null, /*#__PURE__*/_react["default"].createElement(_Dropdown["default"], {
23
- title: "A menu",
24
- onSearch: customTextSearch
25
- })));
37
+ var dropdown = _react2.screen.getByText('A menu');
26
38
 
27
- var dropdown = _react2.screen.getByText('A menu');
39
+ _react2.fireEvent.keyDown(dropdown, {
40
+ key: 'A',
41
+ code: 'KeyA'
42
+ });
28
43
 
29
- _react2.fireEvent.keyDown(dropdown, {
30
- key: 'A',
31
- code: 'KeyA'
44
+ expect(customTextSearch).toHaveBeenCalled();
45
+ });
32
46
  });
47
+ describe('Keyboard navigation', function () {
48
+ var StatefulDropdown = function StatefulDropdown() {
49
+ var _useState = (0, _react.useState)(0),
50
+ count = _useState[0],
51
+ setCount = _useState[1];
52
+
53
+ return /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Box, null, /*#__PURE__*/_react["default"].createElement(_Dropdown["default"], null, /*#__PURE__*/_react["default"].createElement(_Dropdown["default"].Item, null, /*#__PURE__*/_react["default"].createElement(_.Button, {
54
+ title: "One",
55
+ onClick: function onClick() {
56
+ return (0, _lodash.noop)();
57
+ }
58
+ })), /*#__PURE__*/_react["default"].createElement(_Dropdown["default"].Item, null, /*#__PURE__*/_react["default"].createElement(_.Button, {
59
+ title: "Two",
60
+ onClick: function onClick() {
61
+ return setCount(function (c) {
62
+ return c + 1;
63
+ });
64
+ }
65
+ }), /*#__PURE__*/_react["default"].createElement(_.Text, {
66
+ "data-testid": "count-text"
67
+ }, count)), /*#__PURE__*/_react["default"].createElement(_Dropdown["default"].Item, null, /*#__PURE__*/_react["default"].createElement(_.Button, {
68
+ title: "Three",
69
+ onClick: function onClick() {
70
+ return (0, _lodash.noop)();
71
+ }
72
+ })))));
73
+ };
74
+
75
+ it('should trap focus, tab forward through all elements', function () {
76
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(StatefulDropdown, null));
77
+
78
+ _userEvent["default"].tab();
79
+
80
+ _userEvent["default"].keyboard('{enter}');
81
+
82
+ var _screen$getAllByRole = _react2.screen.getAllByRole('button'),
83
+ openPopover = _screen$getAllByRole[0],
84
+ buttonOne = _screen$getAllByRole[1],
85
+ buttonTwo = _screen$getAllByRole[2],
86
+ buttonThree = _screen$getAllByRole[3];
87
+
88
+ expect(openPopover).toHaveFocus();
89
+
90
+ _userEvent["default"].tab();
91
+
92
+ expect(buttonOne).toHaveFocus();
93
+
94
+ _userEvent["default"].tab();
95
+
96
+ expect(buttonTwo).toHaveFocus();
97
+
98
+ _userEvent["default"].tab();
99
+
100
+ expect(buttonThree).toHaveFocus();
101
+
102
+ _userEvent["default"].tab();
103
+
104
+ expect(buttonOne).toHaveFocus();
105
+ });
106
+ it('should trap focus, tab backwards from first element to last', function () {
107
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(StatefulDropdown, null));
108
+
109
+ _userEvent["default"].tab();
110
+
111
+ _userEvent["default"].keyboard('{enter}');
112
+
113
+ var _screen$getAllByRole2 = _react2.screen.getAllByRole('button'),
114
+ openPopover = _screen$getAllByRole2[0],
115
+ buttonOne = _screen$getAllByRole2[1],
116
+ _buttonTwo = _screen$getAllByRole2[2],
117
+ buttonThree = _screen$getAllByRole2[3];
118
+
119
+ expect(openPopover).toHaveFocus();
120
+
121
+ _userEvent["default"].tab();
122
+
123
+ expect(buttonOne).toHaveFocus();
124
+
125
+ _userEvent["default"].tab({
126
+ shift: true
127
+ });
128
+
129
+ expect(buttonThree).toHaveFocus();
130
+ });
131
+ it('should retain tab order after rerender', function () {
132
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(StatefulDropdown, null));
133
+
134
+ _userEvent["default"].tab();
33
135
 
34
- expect(customTextSearch).toHaveBeenCalled();
136
+ _userEvent["default"].keyboard('{enter}');
137
+
138
+ var _screen$getAllByRole3 = _react2.screen.getAllByRole('button'),
139
+ buttonOne = _screen$getAllByRole3[1],
140
+ buttonTwo = _screen$getAllByRole3[2],
141
+ buttonThree = _screen$getAllByRole3[3];
142
+
143
+ _userEvent["default"].tab();
144
+
145
+ _userEvent["default"].tab();
146
+
147
+ expect(_react2.screen.getByTestId('count-text')).toHaveTextContent('0');
148
+
149
+ _userEvent["default"].keyboard('{enter}');
150
+
151
+ expect(_react2.screen.getByTestId('count-text')).toHaveTextContent('1');
152
+ expect(buttonTwo).toHaveFocus();
153
+
154
+ _userEvent["default"].tab();
155
+
156
+ expect(buttonThree).toHaveFocus();
157
+
158
+ _userEvent["default"].tab({
159
+ shift: true
160
+ });
161
+
162
+ _userEvent["default"].tab({
163
+ shift: true
164
+ });
165
+
166
+ expect(buttonOne).toHaveFocus();
167
+
168
+ _userEvent["default"].tab();
169
+
170
+ _userEvent["default"].tab();
171
+
172
+ _userEvent["default"].tab();
173
+
174
+ expect(buttonOne).toHaveFocus();
175
+
176
+ _userEvent["default"].tab({
177
+ shift: true
178
+ });
179
+
180
+ _userEvent["default"].tab({
181
+ shift: true
182
+ });
183
+
184
+ _userEvent["default"].tab({
185
+ shift: true
186
+ });
187
+
188
+ expect(buttonOne).toHaveFocus();
189
+ });
190
+ it('should focus dropdown toggle when a user presses escape key', function () {
191
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(StatefulDropdown, null));
192
+
193
+ _userEvent["default"].tab();
194
+
195
+ _userEvent["default"].keyboard('{enter}');
196
+
197
+ var _screen$getAllByRole4 = _react2.screen.getAllByRole('button'),
198
+ openPopover = _screen$getAllByRole4[0],
199
+ buttonOne = _screen$getAllByRole4[1];
200
+
201
+ _userEvent["default"].tab();
202
+
203
+ expect(buttonOne).toHaveFocus();
204
+
205
+ _userEvent["default"].keyboard("{esc}");
206
+
207
+ expect(openPopover).toHaveFocus();
208
+ });
209
+ });
35
210
  });
@@ -29,7 +29,8 @@ function Group(_ref) {
29
29
  childProps = _ref.childProps,
30
30
  children = _ref.children,
31
31
  radius = _ref.radius,
32
- restProps = (0, _objectWithoutPropertiesLoose2["default"])(_ref, ["axis", "childProps", "children", "radius"]);
32
+ spacing = _ref.spacing,
33
+ restProps = (0, _objectWithoutPropertiesLoose2["default"])(_ref, ["axis", "childProps", "children", "radius", "spacing"]);
33
34
  var themeRadius = (0, _system.useThemeValue)('group.radius');
34
35
  var radiusValue = radius != null ? radius : themeRadius;
35
36
  var isHorizontalLayout = axis === 'horizontal';
@@ -38,15 +39,16 @@ function Group(_ref) {
38
39
  var marginBottom = isHorizontalLayout ? 0 : '-1px';
39
40
  var marginRight = isHorizontalLayout ? '-1px' : 0;
40
41
  return /*#__PURE__*/_react["default"].createElement(_StackView["default"], (0, _extends2["default"])({
41
- axis: axis
42
+ axis: axis,
43
+ spacing: spacing
42
44
  }, restProps), (0, _utils.cloneChildren)(children, function (child, _ref2) {
43
45
  var _objectSpread2;
44
46
 
45
47
  var firstChild = _ref2.firstChild,
46
48
  lastChild = _ref2.lastChild;
47
- return _objectSpread(_objectSpread(_objectSpread({}, childProps), {}, (_objectSpread2 = {}, _objectSpread2[startRadius] = firstChild ? radiusValue : 0, _objectSpread2[endRadius] = lastChild ? radiusValue : 0, _objectSpread2), !lastChild && {
49
+ return _objectSpread(_objectSpread(_objectSpread({}, childProps), {}, (_objectSpread2 = {}, _objectSpread2[startRadius] = firstChild ? radiusValue : 0, _objectSpread2[endRadius] = lastChild ? radiusValue : 0, _objectSpread2), !spacing && !lastChild && {
48
50
  marginBottom: marginBottom
49
- }), !lastChild && {
51
+ }), !spacing && !lastChild && {
50
52
  marginRight: marginRight
51
53
  });
52
54
  }));
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
6
+
7
+ var _react = _interopRequireWildcard(require("react"));
8
+
9
+ var _react2 = require("@testing-library/react");
10
+
11
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
12
+
13
+ require("@testing-library/jest-dom/extend-expect");
14
+
15
+ var _Dropdown = _interopRequireDefault(require("../Dropdown"));
16
+
17
+ var _Select = _interopRequireDefault(require("../Select"));
18
+
19
+ var _ = require("../");
20
+
21
+ var _lodash = require("lodash");
22
+
23
+ describe('Modal', function () {
24
+ var TestModal = function TestModal() {
25
+ var _useState = (0, _react.useState)(false),
26
+ open = _useState[0],
27
+ setOpen = _useState[1];
28
+
29
+ return /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_.Button, {
30
+ "data-testid": "modal-toggle",
31
+ onClick: function onClick() {
32
+ return setOpen(!open);
33
+ },
34
+ title: "Toggle modal"
35
+ }), /*#__PURE__*/_react["default"].createElement(_.Modal, {
36
+ open: open,
37
+ onRequestClose: function onRequestClose() {
38
+ return setOpen(false);
39
+ }
40
+ }, /*#__PURE__*/_react["default"].createElement(_.Heading, {
41
+ "data-testid": "modal-header"
42
+ }, "Hello"), /*#__PURE__*/_react["default"].createElement(_Dropdown["default"], null, [1, 2, 3].map(function (n) {
43
+ return /*#__PURE__*/_react["default"].createElement(_Dropdown["default"].Item, {
44
+ "data-testid": "dropdown-item-" + n,
45
+ key: n
46
+ }, n);
47
+ })), /*#__PURE__*/_react["default"].createElement(_Select["default"], {
48
+ onChange: _lodash.noop
49
+ }, [1, 2, 3].map(function (n) {
50
+ return /*#__PURE__*/_react["default"].createElement(_Select["default"].Option, {
51
+ "data-testid": "select-option-" + n,
52
+ key: n,
53
+ value: n
54
+ }, n);
55
+ })))));
56
+ };
57
+
58
+ describe('Keyboard navigation', function () {
59
+ it('should close modal on escape keypress (dropdown button has focus)', function () {
60
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(TestModal, null));
61
+ expect(_react2.screen.queryByTestId('modal-header')).toBeNull();
62
+
63
+ _userEvent["default"].click(_react2.screen.getByTestId('modal-toggle'));
64
+
65
+ expect(_react2.screen.getByTestId('modal-header')).toBeInTheDocument();
66
+
67
+ _userEvent["default"].keyboard("{esc}");
68
+
69
+ expect(_react2.screen.queryByTestId('modal-header')).toBeNull();
70
+ });
71
+ it('should not close modal when escape key closes a dropdown within modal', function () {
72
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(TestModal, null));
73
+
74
+ _userEvent["default"].click(_react2.screen.getByTestId('modal-toggle'));
75
+
76
+ var _screen$getAllByRole = _react2.screen.getAllByRole('button'),
77
+ dropdown = _screen$getAllByRole[1];
78
+
79
+ expect(dropdown).toHaveFocus();
80
+
81
+ _userEvent["default"].keyboard('{arrowdown}');
82
+
83
+ _userEvent["default"].keyboard("{esc}");
84
+
85
+ expect(_react2.screen.getByTestId('modal-header')).toBeInTheDocument();
86
+ });
87
+ it('should close dropdown on escape & close modal on subsequent escape', function () {
88
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(TestModal, null));
89
+
90
+ _userEvent["default"].click(_react2.screen.getByTestId('modal-toggle'));
91
+
92
+ _userEvent["default"].keyboard('{arrowdown}');
93
+
94
+ _userEvent["default"].keyboard("{esc}");
95
+
96
+ expect(_react2.screen.getByTestId('modal-header')).toBeInTheDocument();
97
+
98
+ _userEvent["default"].keyboard("{esc}");
99
+
100
+ expect(_react2.screen.queryByTestId('modal-header')).toBeNull();
101
+ });
102
+ it('should hide select popover on escape, but select remains in dom', function () {
103
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(TestModal, null));
104
+
105
+ _userEvent["default"].click(_react2.screen.getByTestId('modal-toggle'));
106
+
107
+ _userEvent["default"].tab();
108
+
109
+ _userEvent["default"].keyboard('{arrowdown}');
110
+
111
+ _userEvent["default"].keyboard("{esc}");
112
+
113
+ expect(_react2.screen.queryByTestId('select-option-1')).toBeInTheDocument();
114
+ });
115
+ it('should hide select popover on escape, close (unmount) select popover on subsequent escape, persist modal', function () {
116
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(TestModal, null));
117
+
118
+ _userEvent["default"].click(_react2.screen.getByTestId('modal-toggle'));
119
+
120
+ _userEvent["default"].tab();
121
+
122
+ _userEvent["default"].keyboard('{arrowdown}');
123
+
124
+ _userEvent["default"].keyboard("{esc}");
125
+
126
+ expect(_react2.screen.queryByTestId('select-option-1')).toBeInTheDocument();
127
+
128
+ _userEvent["default"].keyboard("{esc}");
129
+
130
+ expect(_react2.screen.queryByTestId('select-option-1')).toBeNull();
131
+ expect(_react2.screen.queryByTestId('modal-header')).toBeInTheDocument();
132
+ });
133
+ it('should hide select popover on escape, close (unmount) select popover on subsequent escape, close modal on subsequent escape', function () {
134
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(TestModal, null));
135
+
136
+ _userEvent["default"].click(_react2.screen.getByTestId('modal-toggle'));
137
+
138
+ _userEvent["default"].tab();
139
+
140
+ _userEvent["default"].keyboard('{arrowdown}');
141
+
142
+ _userEvent["default"].keyboard("{esc}");
143
+
144
+ expect(_react2.screen.queryByTestId('select-option-1')).toBeInTheDocument();
145
+
146
+ _userEvent["default"].keyboard("{esc}");
147
+
148
+ expect(_react2.screen.queryByTestId('select-option-1')).toBeNull();
149
+ expect(_react2.screen.queryByTestId('modal-header')).toBeInTheDocument();
150
+
151
+ _userEvent["default"].keyboard("{esc}");
152
+
153
+ expect(_react2.screen.queryByTestId('modal-header')).toBeNull();
154
+ });
155
+ });
156
+ });
@@ -119,6 +119,10 @@ var Popover = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
119
119
 
120
120
  var requestClose = function requestClose(event) {
121
121
  if (event.key === 'Escape' && onRequestClose) {
122
+ if (open) {
123
+ event.nativeEvent.stopImmediatePropagation();
124
+ }
125
+
122
126
  onRequestClose();
123
127
  }
124
128
 
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
6
+
7
+ var _react = _interopRequireWildcard(require("react"));
8
+
9
+ var _react2 = require("@testing-library/react");
10
+
11
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
12
+
13
+ require("@testing-library/jest-dom/extend-expect");
14
+
15
+ var _ = require("..");
16
+
17
+ var PopBasic = function PopBasic(_ref) {
18
+ var children = _ref.children;
19
+
20
+ var _useState = (0, _react.useState)(false),
21
+ open = _useState[0],
22
+ setOpen = _useState[1];
23
+
24
+ return /*#__PURE__*/_react["default"].createElement(_.Box, {
25
+ id: "container"
26
+ }, /*#__PURE__*/_react["default"].createElement(_.Popover, {
27
+ open: open,
28
+ offset: 1,
29
+ renderTo: "#container",
30
+ anchorElement: /*#__PURE__*/_react["default"].createElement(_.Button, {
31
+ title: "Toggle",
32
+ onClick: function onClick() {
33
+ return setOpen(!open);
34
+ },
35
+ id: "anchor-element"
36
+ })
37
+ }, children));
38
+ };
39
+
40
+ describe('Popover', function () {
41
+ it('should not render string in closed Popover', function () {
42
+ var string = 'Test Text';
43
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(PopBasic, null, /*#__PURE__*/_react["default"].createElement(_.Text, null, string)));
44
+ expect(_react2.screen.queryByText(string)).toBeNull();
45
+ });
46
+ it('should render string in open Popover', function () {
47
+ var string = 'Test Text';
48
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(PopBasic, null, /*#__PURE__*/_react["default"].createElement(_.Text, null, string)));
49
+
50
+ var openPopover = _react2.screen.getByRole('button');
51
+
52
+ _userEvent["default"].click(openPopover);
53
+
54
+ expect(_react2.screen.getByText(string)).toBeInTheDocument();
55
+ });
56
+ it('should focus open button on click', function () {
57
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(PopBasic, null, /*#__PURE__*/_react["default"].createElement(_.Box, null)));
58
+
59
+ var openPopover = _react2.screen.getByRole('button');
60
+
61
+ _userEvent["default"].click(openPopover);
62
+
63
+ expect(openPopover).toHaveFocus();
64
+ });
65
+ });
@@ -36,38 +36,29 @@ var RewireTabOrder = /*#__PURE__*/function () {
36
36
  (0, _defineProperty2["default"])(this, "lastFocusableElement", null);
37
37
  (0, _defineProperty2["default"])(this, "originalActiveElement", null);
38
38
  (0, _defineProperty2["default"])(this, "nextActiveElement", null);
39
- (0, _defineProperty2["default"])(this, "focusOriginalActiveElement", function () {
40
- _this.originalActiveElement.focus();
41
- });
42
- (0, _defineProperty2["default"])(this, "focusNextActiveElement", function () {
43
- _this.nextActiveElement.focus();
44
- });
45
39
  (0, _defineProperty2["default"])(this, "moveFocusToTargetFromTriggerElement", function (event) {
46
40
  if (!event.shiftKey && event.keyCode === TAB_KEY) {
47
41
  event.preventDefault();
48
42
 
49
- _this.firstFocusableElement.focus();
43
+ if (_this.tabbables.includes(_this.nextActiveElement)) {
44
+ _this.nextActiveElement.focus();
45
+ } else {
46
+ _this.firstFocusableElement.focus();
47
+ }
50
48
  }
51
49
  });
52
- (0, _defineProperty2["default"])(this, "moveFocusFromTargetToTriggerElement", function (event) {
50
+ (0, _defineProperty2["default"])(this, "moveFocusToTargetFromFirstElement", function (event) {
53
51
  if (event.target === _this.firstFocusableElement && event.shiftKey && event.keyCode === TAB_KEY) {
54
52
  event.preventDefault();
55
53
 
56
- _this.originalActiveElement.focus();
57
- }
58
- });
59
- (0, _defineProperty2["default"])(this, "moveFocusToTargetFromNextElement", function (event) {
60
- if (event.shiftKey && event.keyCode === TAB_KEY) {
61
- event.preventDefault();
62
-
63
54
  _this.lastFocusableElement.focus();
64
55
  }
65
56
  });
66
- (0, _defineProperty2["default"])(this, "moveFocusFromTargetToNextElement", function (event) {
67
- if (!event.shiftKey && event.keyCode === TAB_KEY) {
57
+ (0, _defineProperty2["default"])(this, "moveFocusToTargetFromLastElement", function (event) {
58
+ if (event.target === _this.lastFocusableElement && !event.shiftKey && event.keyCode === TAB_KEY) {
68
59
  event.preventDefault();
69
60
 
70
- _this.nextActiveElement.focus();
61
+ _this.firstFocusableElement.focus();
71
62
  }
72
63
  });
73
64
 
@@ -88,12 +79,8 @@ var RewireTabOrder = /*#__PURE__*/function () {
88
79
  this.originalActiveElement = document.activeElement;
89
80
  this.nextActiveElement = getNextActiveElement(this.originalActiveElement);
90
81
  this.originalActiveElement.addEventListener('keydown', this.moveFocusToTargetFromTriggerElement);
91
- this.firstFocusableElement.addEventListener('keydown', this.moveFocusFromTargetToTriggerElement);
92
-
93
- if (this.nextActiveElement) {
94
- this.nextActiveElement.addEventListener('keydown', this.moveFocusToTargetFromNextElement);
95
- this.lastFocusableElement.addEventListener('keydown', this.moveFocusFromTargetToNextElement);
96
- }
82
+ this.firstFocusableElement.addEventListener('keydown', this.moveFocusToTargetFromFirstElement);
83
+ this.lastFocusableElement.addEventListener('keydown', this.moveFocusToTargetFromLastElement);
97
84
  };
98
85
 
99
86
  _proto.destroy = function destroy() {
@@ -102,12 +89,8 @@ var RewireTabOrder = /*#__PURE__*/function () {
102
89
  }
103
90
 
104
91
  this.originalActiveElement.removeEventListener('keydown', this.moveFocusToTargetFromTriggerElement);
105
- this.firstFocusableElement.removeEventListener('keydown', this.moveFocusFromTargetToTriggerElement);
106
-
107
- if (this.nextActiveElement) {
108
- this.nextActiveElement.removeEventListener('keydown', this.moveFocusToTargetFromNextElement);
109
- this.lastFocusableElement.removeEventListener('keydown', this.moveFocusFromTargetToNextElement);
110
- }
92
+ this.firstFocusableElement.removeEventListener('keydown', this.moveFocusToTargetFromFirstElement);
93
+ this.lastFocusableElement.removeEventListener('keydown', this.moveFocusToTargetFromLastElement);
111
94
  };
112
95
 
113
96
  return RewireTabOrder;
@@ -366,6 +366,15 @@ var Select = /*#__PURE__*/function (_Component) {
366
366
 
367
367
  break;
368
368
 
369
+ case 'Escape':
370
+ if (isPopoverOpen && !isPopoverVisible) {
371
+ event.preventDefault();
372
+
373
+ _this2.closePopover();
374
+ }
375
+
376
+ break;
377
+
369
378
  case ' ':
370
379
  event.preventDefault();
371
380