@pie-lib/test-utils 1.1.0-next.0 → 1.1.0-next.3
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/CHANGELOG.md +25 -0
- package/package.json +2 -2
- package/lib/__tests__/index.test.js +0 -107
- package/lib/__tests__/keyboard.test.js +0 -146
- package/lib/index.js +0 -272
- package/lib/index.js.map +0 -1
- package/lib/keyboard.js +0 -173
- package/lib/keyboard.js.map +0 -1
- package/lib/web-components.js +0 -248
- package/lib/web-components.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,31 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [1.1.0-next.3](https://github.com/pie-framework/pie-lib/compare/@pie-lib/test-utils@1.1.0-next.1...@pie-lib/test-utils@1.1.0-next.3) (2026-01-27)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @pie-lib/test-utils
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# [1.1.0-next.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/test-utils@0.22.1...@pie-lib/test-utils@1.1.0-next.1) (2026-01-26)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Bug Fixes
|
|
18
|
+
|
|
19
|
+
* remove exports and publish ([#2068](https://github.com/pie-framework/pie-lib/issues/2068)) ([60a96cd](https://github.com/pie-framework/pie-lib/commit/60a96cde0ec65f6b1cac0ae329aa33a0abc50d05))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
### Features
|
|
23
|
+
|
|
24
|
+
* bump react and react-dom ([01dc19e](https://github.com/pie-framework/pie-lib/commit/01dc19e88bbc8d372c561d1511df1a82937d45af))
|
|
25
|
+
* sync latest changes from dev ([c936e9c](https://github.com/pie-framework/pie-lib/commit/c936e9c7f9e095e7d9b9805ac2bf72bd271e05f1))
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
6
31
|
# [1.0.0-next.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/test-utils@0.22.2-next.0...@pie-lib/test-utils@1.0.0-next.0) (2026-01-19)
|
|
7
32
|
|
|
8
33
|
**Note:** Version bump only for package @pie-lib/test-utils
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-lib/test-utils",
|
|
3
|
-
"version": "1.1.0-next.
|
|
3
|
+
"version": "1.1.0-next.3",
|
|
4
4
|
"description": "Testing utilities for pie-lib packages with React Testing Library and MUI support",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "src/index.js",
|
|
@@ -21,6 +21,6 @@
|
|
|
21
21
|
"@testing-library/jest-dom": "^5.16.5",
|
|
22
22
|
"@testing-library/user-event": "^14.5.2"
|
|
23
23
|
},
|
|
24
|
-
"gitHead": "
|
|
24
|
+
"gitHead": "8ea41592c5553487014f2694f91b657c4f62d131",
|
|
25
25
|
"scripts": {}
|
|
26
26
|
}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
6
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
7
|
-
var React = _interopRequireWildcard(require("react"));
|
|
8
|
-
var _index = require("../index");
|
|
9
|
-
var _material = require("@mui/material");
|
|
10
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
11
|
-
describe('@pie-lib/test-utils', function () {
|
|
12
|
-
describe('renderWithTheme', function () {
|
|
13
|
-
it('renders a component with default MUI theme', function () {
|
|
14
|
-
(0, _index.renderWithTheme)(/*#__PURE__*/React.createElement(_material.Button, null, "Click me"));
|
|
15
|
-
expect(_index.screen.getByRole('button')).toBeInTheDocument();
|
|
16
|
-
expect(_index.screen.getByText('Click me')).toBeInTheDocument();
|
|
17
|
-
});
|
|
18
|
-
it('renders a component with custom theme', function () {
|
|
19
|
-
var customTheme = (0, _index.createTestTheme)({
|
|
20
|
-
palette: {
|
|
21
|
-
primary: {
|
|
22
|
-
main: '#ff0000'
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
(0, _index.renderWithTheme)(/*#__PURE__*/React.createElement(_material.Button, {
|
|
27
|
-
color: "primary"
|
|
28
|
-
}, "Themed Button"), {
|
|
29
|
-
theme: customTheme
|
|
30
|
-
});
|
|
31
|
-
expect(_index.screen.getByRole('button')).toBeInTheDocument();
|
|
32
|
-
});
|
|
33
|
-
it('accepts additional render options', function () {
|
|
34
|
-
var _renderWithTheme = (0, _index.renderWithTheme)(/*#__PURE__*/React.createElement(_material.Button, null, "Test"), {
|
|
35
|
-
container: document.body
|
|
36
|
-
}),
|
|
37
|
-
container = _renderWithTheme.container;
|
|
38
|
-
expect(container).toBe(document.body);
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
describe('renderWithProviders', function () {
|
|
42
|
-
it('renders with theme provider by default', function () {
|
|
43
|
-
(0, _index.renderWithProviders)(/*#__PURE__*/React.createElement(_material.Button, null, "Provided Button"));
|
|
44
|
-
expect(_index.screen.getByRole('button')).toBeInTheDocument();
|
|
45
|
-
});
|
|
46
|
-
it('renders with additional providers', function () {
|
|
47
|
-
var TestProvider = function TestProvider(_ref) {
|
|
48
|
-
var children = _ref.children;
|
|
49
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
50
|
-
"data-testid": "test-provider"
|
|
51
|
-
}, children);
|
|
52
|
-
};
|
|
53
|
-
(0, _index.renderWithProviders)(/*#__PURE__*/React.createElement(_material.Button, null, "Multi Provider"), {
|
|
54
|
-
providers: [TestProvider]
|
|
55
|
-
});
|
|
56
|
-
expect(_index.screen.getByTestId('test-provider')).toBeInTheDocument();
|
|
57
|
-
expect(_index.screen.getByRole('button')).toBeInTheDocument();
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
describe('createTestTheme', function () {
|
|
61
|
-
it('creates a theme with custom options', function () {
|
|
62
|
-
var theme = (0, _index.createTestTheme)({
|
|
63
|
-
palette: {
|
|
64
|
-
mode: 'dark',
|
|
65
|
-
primary: {
|
|
66
|
-
main: '#90caf9'
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
expect(theme.palette.mode).toBe('dark');
|
|
71
|
-
expect(theme.palette.primary.main).toBe('#90caf9');
|
|
72
|
-
});
|
|
73
|
-
it('creates a theme with default options when none provided', function () {
|
|
74
|
-
var theme = (0, _index.createTestTheme)();
|
|
75
|
-
expect(theme.palette).toBeDefined();
|
|
76
|
-
expect(theme.spacing).toBeDefined();
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
describe('RTL re-exports', function () {
|
|
80
|
-
it('exports screen utility', function () {
|
|
81
|
-
(0, _index.renderWithTheme)(/*#__PURE__*/React.createElement("div", null, "Test Content"));
|
|
82
|
-
expect(_index.screen.getByText('Test Content')).toBeInTheDocument();
|
|
83
|
-
});
|
|
84
|
-
it('exports render function', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
85
|
-
var _yield$import, render, screenImport;
|
|
86
|
-
return _regenerator["default"].wrap(function (_context) {
|
|
87
|
-
while (1) switch (_context.prev = _context.next) {
|
|
88
|
-
case 0:
|
|
89
|
-
_context.next = 1;
|
|
90
|
-
return Promise.resolve().then(function () {
|
|
91
|
-
return _interopRequireWildcard(require('../index'));
|
|
92
|
-
});
|
|
93
|
-
case 1:
|
|
94
|
-
_yield$import = _context.sent;
|
|
95
|
-
render = _yield$import.render;
|
|
96
|
-
screenImport = _yield$import.screen;
|
|
97
|
-
render(/*#__PURE__*/React.createElement("div", null, "Direct Render"));
|
|
98
|
-
expect(screenImport.getByText('Direct Render')).toBeInTheDocument();
|
|
99
|
-
case 2:
|
|
100
|
-
case "end":
|
|
101
|
-
return _context.stop();
|
|
102
|
-
}
|
|
103
|
-
}, _callee);
|
|
104
|
-
})));
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9pbmRleCIsIl9tYXRlcmlhbCIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZGVzY3JpYmUiLCJpdCIsInJlbmRlcldpdGhUaGVtZSIsImNyZWF0ZUVsZW1lbnQiLCJCdXR0b24iLCJleHBlY3QiLCJzY3JlZW4iLCJnZXRCeVJvbGUiLCJ0b0JlSW5UaGVEb2N1bWVudCIsImdldEJ5VGV4dCIsImN1c3RvbVRoZW1lIiwiY3JlYXRlVGVzdFRoZW1lIiwicGFsZXR0ZSIsInByaW1hcnkiLCJtYWluIiwiY29sb3IiLCJ0aGVtZSIsIl9yZW5kZXJXaXRoVGhlbWUiLCJjb250YWluZXIiLCJkb2N1bWVudCIsImJvZHkiLCJ0b0JlIiwicmVuZGVyV2l0aFByb3ZpZGVycyIsIlRlc3RQcm92aWRlciIsIl9yZWYiLCJjaGlsZHJlbiIsInByb3ZpZGVycyIsImdldEJ5VGVzdElkIiwibW9kZSIsInRvQmVEZWZpbmVkIiwic3BhY2luZyIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwiX3lpZWxkJGltcG9ydCIsInJlbmRlciIsInNjcmVlbkltcG9ydCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwic2VudCIsInN0b3AiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2luZGV4LnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcmVuZGVyV2l0aFRoZW1lLCByZW5kZXJXaXRoUHJvdmlkZXJzLCBzY3JlZW4sIGNyZWF0ZVRlc3RUaGVtZSB9IGZyb20gJy4uL2luZGV4JztcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnO1xuXG5kZXNjcmliZSgnQHBpZS1saWIvdGVzdC11dGlscycsICgpID0+IHtcbiAgZGVzY3JpYmUoJ3JlbmRlcldpdGhUaGVtZScsICgpID0+IHtcbiAgICBpdCgncmVuZGVycyBhIGNvbXBvbmVudCB3aXRoIGRlZmF1bHQgTVVJIHRoZW1lJywgKCkgPT4ge1xuICAgICAgcmVuZGVyV2l0aFRoZW1lKDxCdXR0b24+Q2xpY2sgbWU8L0J1dHRvbj4pO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVJvbGUoJ2J1dHRvbicpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0NsaWNrIG1lJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyBhIGNvbXBvbmVudCB3aXRoIGN1c3RvbSB0aGVtZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbVRoZW1lID0gY3JlYXRlVGVzdFRoZW1lKHtcbiAgICAgICAgcGFsZXR0ZToge1xuICAgICAgICAgIHByaW1hcnk6IHtcbiAgICAgICAgICAgIG1haW46ICcjZmYwMDAwJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHJlbmRlcldpdGhUaGVtZSg8QnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiPlRoZW1lZCBCdXR0b248L0J1dHRvbj4sIHtcbiAgICAgICAgdGhlbWU6IGN1c3RvbVRoZW1lLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlSb2xlKCdidXR0b24nKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdhY2NlcHRzIGFkZGl0aW9uYWwgcmVuZGVyIG9wdGlvbnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyV2l0aFRoZW1lKDxCdXR0b24+VGVzdDwvQnV0dG9uPiwge1xuICAgICAgICBjb250YWluZXI6IGRvY3VtZW50LmJvZHksXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGNvbnRhaW5lcikudG9CZShkb2N1bWVudC5ib2R5KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbmRlcldpdGhQcm92aWRlcnMnLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMgd2l0aCB0aGVtZSBwcm92aWRlciBieSBkZWZhdWx0JywgKCkgPT4ge1xuICAgICAgcmVuZGVyV2l0aFByb3ZpZGVycyg8QnV0dG9uPlByb3ZpZGVkIEJ1dHRvbjwvQnV0dG9uPik7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5Um9sZSgnYnV0dG9uJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIGFkZGl0aW9uYWwgcHJvdmlkZXJzJywgKCkgPT4ge1xuICAgICAgY29uc3QgVGVzdFByb3ZpZGVyID0gKHsgY2hpbGRyZW4gfSkgPT4gKFxuICAgICAgICA8ZGl2IGRhdGEtdGVzdGlkPVwidGVzdC1wcm92aWRlclwiPntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICk7XG5cbiAgICAgIHJlbmRlcldpdGhQcm92aWRlcnMoPEJ1dHRvbj5NdWx0aSBQcm92aWRlcjwvQnV0dG9uPiwge1xuICAgICAgICBwcm92aWRlcnM6IFtUZXN0UHJvdmlkZXJdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXN0SWQoJ3Rlc3QtcHJvdmlkZXInKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlSb2xlKCdidXR0b24nKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NyZWF0ZVRlc3RUaGVtZScsICgpID0+IHtcbiAgICBpdCgnY3JlYXRlcyBhIHRoZW1lIHdpdGggY3VzdG9tIG9wdGlvbnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0aGVtZSA9IGNyZWF0ZVRlc3RUaGVtZSh7XG4gICAgICAgIHBhbGV0dGU6IHtcbiAgICAgICAgICBtb2RlOiAnZGFyaycsXG4gICAgICAgICAgcHJpbWFyeToge1xuICAgICAgICAgICAgbWFpbjogJyM5MGNhZjknLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHRoZW1lLnBhbGV0dGUubW9kZSkudG9CZSgnZGFyaycpO1xuICAgICAgZXhwZWN0KHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluKS50b0JlKCcjOTBjYWY5Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnY3JlYXRlcyBhIHRoZW1lIHdpdGggZGVmYXVsdCBvcHRpb25zIHdoZW4gbm9uZSBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHRoZW1lID0gY3JlYXRlVGVzdFRoZW1lKCk7XG4gICAgICBleHBlY3QodGhlbWUucGFsZXR0ZSkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdCh0aGVtZS5zcGFjaW5nKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUlRMIHJlLWV4cG9ydHMnLCAoKSA9PiB7XG4gICAgaXQoJ2V4cG9ydHMgc2NyZWVuIHV0aWxpdHknLCAoKSA9PiB7XG4gICAgICByZW5kZXJXaXRoVGhlbWUoPGRpdj5UZXN0IENvbnRlbnQ8L2Rpdj4pO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ1Rlc3QgQ29udGVudCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2V4cG9ydHMgcmVuZGVyIGZ1bmN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgeyByZW5kZXIsIHNjcmVlbjogc2NyZWVuSW1wb3J0IH0gPSBhd2FpdCBpbXBvcnQoJy4uL2luZGV4Jyk7XG4gICAgICByZW5kZXIoPGRpdj5EaXJlY3QgUmVuZGVyPC9kaXY+KTtcbiAgICAgIGV4cGVjdChzY3JlZW5JbXBvcnQuZ2V0QnlUZXh0KCdEaXJlY3QgUmVuZGVyJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLEtBQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFNBQUEsR0FBQUYsT0FBQTtBQUF1QyxTQUFBRCx3QkFBQUksQ0FBQSxFQUFBQyxDQUFBLDZCQUFBQyxPQUFBLE1BQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQU4sdUJBQUEsWUFBQUEsd0JBQUFJLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxtQkFBQVQsQ0FBQSxpQkFBQUEsQ0FBQSxnQkFBQVUsT0FBQSxDQUFBVixDQUFBLDBCQUFBQSxDQUFBLFNBQUFRLENBQUEsTUFBQUYsQ0FBQSxHQUFBTCxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxRQUFBRyxDQUFBLENBQUFLLEdBQUEsQ0FBQVgsQ0FBQSxVQUFBTSxDQUFBLENBQUFNLEdBQUEsQ0FBQVosQ0FBQSxHQUFBTSxDQUFBLENBQUFPLEdBQUEsQ0FBQWIsQ0FBQSxFQUFBUSxDQUFBLGNBQUFNLEVBQUEsSUFBQWQsQ0FBQSxnQkFBQWMsRUFBQSxPQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWhCLENBQUEsRUFBQWMsRUFBQSxPQUFBUCxDQUFBLElBQUFELENBQUEsR0FBQVcsTUFBQSxDQUFBQyxjQUFBLEtBQUFELE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQW5CLENBQUEsRUFBQWMsRUFBQSxPQUFBUCxDQUFBLENB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
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
5
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
6
|
-
var _react = _interopRequireDefault(require("react"));
|
|
7
|
-
var _react2 = require("@testing-library/react");
|
|
8
|
-
var _keyboard = require("../keyboard");
|
|
9
|
-
describe('Keyboard helpers', function () {
|
|
10
|
-
describe('Keys constant', function () {
|
|
11
|
-
it('exports common key codes', function () {
|
|
12
|
-
expect(_keyboard.Keys.ENTER).toBe(13);
|
|
13
|
-
expect(_keyboard.Keys.ESCAPE).toBe(27);
|
|
14
|
-
expect(_keyboard.Keys.SPACE).toBe(32);
|
|
15
|
-
expect(_keyboard.Keys.TAB).toBe(9);
|
|
16
|
-
expect(_keyboard.Keys.ARROW_DOWN).toBe(40);
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
describe('pressKey', function () {
|
|
20
|
-
it('dispatches keyboard event with keyCode', function () {
|
|
21
|
-
var onKeyDown = jest.fn();
|
|
22
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement("input", {
|
|
23
|
-
onKeyDown: onKeyDown
|
|
24
|
-
}));
|
|
25
|
-
var input = _react2.screen.getByRole('textbox');
|
|
26
|
-
(0, _keyboard.pressKey)(input, _keyboard.Keys.ENTER);
|
|
27
|
-
expect(onKeyDown).toHaveBeenCalled();
|
|
28
|
-
var event = onKeyDown.mock.calls[0][0];
|
|
29
|
-
expect(event.keyCode).toBe(13);
|
|
30
|
-
});
|
|
31
|
-
it('dispatches different event types', function () {
|
|
32
|
-
var onKeyUp = jest.fn();
|
|
33
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement("input", {
|
|
34
|
-
onKeyUp: onKeyUp
|
|
35
|
-
}));
|
|
36
|
-
var input = _react2.screen.getByRole('textbox');
|
|
37
|
-
(0, _keyboard.pressKey)(input, _keyboard.Keys.ESCAPE, 'keyup');
|
|
38
|
-
expect(onKeyUp).toHaveBeenCalled();
|
|
39
|
-
var event = onKeyUp.mock.calls[0][0];
|
|
40
|
-
expect(event.keyCode).toBe(27);
|
|
41
|
-
});
|
|
42
|
-
it('passes additional options', function () {
|
|
43
|
-
var onKeyDown = jest.fn();
|
|
44
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement("input", {
|
|
45
|
-
onKeyDown: onKeyDown
|
|
46
|
-
}));
|
|
47
|
-
var input = _react2.screen.getByRole('textbox');
|
|
48
|
-
(0, _keyboard.pressKey)(input, _keyboard.Keys.ENTER, 'keydown', {
|
|
49
|
-
ctrlKey: true
|
|
50
|
-
});
|
|
51
|
-
var event = onKeyDown.mock.calls[0][0];
|
|
52
|
-
expect(event.ctrlKey).toBe(true);
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
describe('typeAndSubmit', function () {
|
|
56
|
-
it('types text and presses Enter', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
57
|
-
var onKeyDown, input, lastEvent;
|
|
58
|
-
return _regenerator["default"].wrap(function (_context) {
|
|
59
|
-
while (1) switch (_context.prev = _context.next) {
|
|
60
|
-
case 0:
|
|
61
|
-
onKeyDown = jest.fn();
|
|
62
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement("input", {
|
|
63
|
-
onKeyDown: onKeyDown
|
|
64
|
-
}));
|
|
65
|
-
input = _react2.screen.getByRole('textbox');
|
|
66
|
-
_context.next = 1;
|
|
67
|
-
return (0, _keyboard.typeAndSubmit)(input, 'hello');
|
|
68
|
-
case 1:
|
|
69
|
-
expect(input).toHaveValue('hello');
|
|
70
|
-
expect(onKeyDown).toHaveBeenCalled();
|
|
71
|
-
// Check that the last keyDown event was Enter
|
|
72
|
-
lastEvent = onKeyDown.mock.calls[onKeyDown.mock.calls.length - 1][0];
|
|
73
|
-
expect(lastEvent.keyCode).toBe(_keyboard.Keys.ENTER);
|
|
74
|
-
case 2:
|
|
75
|
-
case "end":
|
|
76
|
-
return _context.stop();
|
|
77
|
-
}
|
|
78
|
-
}, _callee);
|
|
79
|
-
})));
|
|
80
|
-
});
|
|
81
|
-
describe('clearAndType', function () {
|
|
82
|
-
it('clears existing value and types new text', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
83
|
-
var input;
|
|
84
|
-
return _regenerator["default"].wrap(function (_context2) {
|
|
85
|
-
while (1) switch (_context2.prev = _context2.next) {
|
|
86
|
-
case 0:
|
|
87
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement("input", {
|
|
88
|
-
defaultValue: "old value"
|
|
89
|
-
}));
|
|
90
|
-
input = _react2.screen.getByRole('textbox');
|
|
91
|
-
_context2.next = 1;
|
|
92
|
-
return (0, _keyboard.clearAndType)(input, 'new value');
|
|
93
|
-
case 1:
|
|
94
|
-
expect(input).toHaveValue('new value');
|
|
95
|
-
case 2:
|
|
96
|
-
case "end":
|
|
97
|
-
return _context2.stop();
|
|
98
|
-
}
|
|
99
|
-
}, _callee2);
|
|
100
|
-
})));
|
|
101
|
-
});
|
|
102
|
-
describe('navigateWithKeys', function () {
|
|
103
|
-
it('navigates down with arrow keys', function () {
|
|
104
|
-
var onKeyDown = jest.fn();
|
|
105
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement("div", {
|
|
106
|
-
role: "listbox",
|
|
107
|
-
onKeyDown: onKeyDown
|
|
108
|
-
}));
|
|
109
|
-
var listbox = _react2.screen.getByRole('listbox');
|
|
110
|
-
(0, _keyboard.navigateWithKeys)(listbox, 3, 'vertical');
|
|
111
|
-
expect(onKeyDown).toHaveBeenCalledTimes(3);
|
|
112
|
-
var events = onKeyDown.mock.calls.map(function (call) {
|
|
113
|
-
return call[0].keyCode;
|
|
114
|
-
});
|
|
115
|
-
expect(events).toEqual([_keyboard.Keys.ARROW_DOWN, _keyboard.Keys.ARROW_DOWN, _keyboard.Keys.ARROW_DOWN]);
|
|
116
|
-
});
|
|
117
|
-
it('navigates up with negative steps', function () {
|
|
118
|
-
var onKeyDown = jest.fn();
|
|
119
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement("div", {
|
|
120
|
-
role: "listbox",
|
|
121
|
-
onKeyDown: onKeyDown
|
|
122
|
-
}));
|
|
123
|
-
var listbox = _react2.screen.getByRole('listbox');
|
|
124
|
-
(0, _keyboard.navigateWithKeys)(listbox, -2, 'vertical');
|
|
125
|
-
expect(onKeyDown).toHaveBeenCalledTimes(2);
|
|
126
|
-
var events = onKeyDown.mock.calls.map(function (call) {
|
|
127
|
-
return call[0].keyCode;
|
|
128
|
-
});
|
|
129
|
-
expect(events).toEqual([_keyboard.Keys.ARROW_UP, _keyboard.Keys.ARROW_UP]);
|
|
130
|
-
});
|
|
131
|
-
it('navigates horizontally', function () {
|
|
132
|
-
var onKeyDown = jest.fn();
|
|
133
|
-
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement("div", {
|
|
134
|
-
role: "tablist",
|
|
135
|
-
onKeyDown: onKeyDown
|
|
136
|
-
}));
|
|
137
|
-
var tablist = _react2.screen.getByRole('tablist');
|
|
138
|
-
(0, _keyboard.navigateWithKeys)(tablist, 2, 'horizontal');
|
|
139
|
-
var events = onKeyDown.mock.calls.map(function (call) {
|
|
140
|
-
return call[0].keyCode;
|
|
141
|
-
});
|
|
142
|
-
expect(events).toEqual([_keyboard.Keys.ARROW_RIGHT, _keyboard.Keys.ARROW_RIGHT]);
|
|
143
|
-
});
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfa2V5Ym9hcmQiLCJkZXNjcmliZSIsIml0IiwiZXhwZWN0IiwiS2V5cyIsIkVOVEVSIiwidG9CZSIsIkVTQ0FQRSIsIlNQQUNFIiwiVEFCIiwiQVJST1dfRE9XTiIsIm9uS2V5RG93biIsImplc3QiLCJmbiIsInJlbmRlciIsImNyZWF0ZUVsZW1lbnQiLCJpbnB1dCIsInNjcmVlbiIsImdldEJ5Um9sZSIsInByZXNzS2V5IiwidG9IYXZlQmVlbkNhbGxlZCIsImV2ZW50IiwibW9jayIsImNhbGxzIiwia2V5Q29kZSIsIm9uS2V5VXAiLCJjdHJsS2V5IiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJsYXN0RXZlbnQiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInR5cGVBbmRTdWJtaXQiLCJ0b0hhdmVWYWx1ZSIsImxlbmd0aCIsInN0b3AiLCJfY2FsbGVlMiIsIl9jb250ZXh0MiIsImRlZmF1bHRWYWx1ZSIsImNsZWFyQW5kVHlwZSIsInJvbGUiLCJsaXN0Ym94IiwibmF2aWdhdGVXaXRoS2V5cyIsInRvSGF2ZUJlZW5DYWxsZWRUaW1lcyIsImV2ZW50cyIsIm1hcCIsImNhbGwiLCJ0b0VxdWFsIiwiQVJST1dfVVAiLCJ0YWJsaXN0IiwiQVJST1dfUklHSFQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2tleWJvYXJkLnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlbmRlciwgc2NyZWVuIH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQgeyBLZXlzLCBwcmVzc0tleSwgdHlwZUFuZFN1Ym1pdCwgY2xlYXJBbmRUeXBlLCBuYXZpZ2F0ZVdpdGhLZXlzIH0gZnJvbSAnLi4va2V5Ym9hcmQnO1xuXG5kZXNjcmliZSgnS2V5Ym9hcmQgaGVscGVycycsICgpID0+IHtcbiAgZGVzY3JpYmUoJ0tleXMgY29uc3RhbnQnLCAoKSA9PiB7XG4gICAgaXQoJ2V4cG9ydHMgY29tbW9uIGtleSBjb2RlcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChLZXlzLkVOVEVSKS50b0JlKDEzKTtcbiAgICAgIGV4cGVjdChLZXlzLkVTQ0FQRSkudG9CZSgyNyk7XG4gICAgICBleHBlY3QoS2V5cy5TUEFDRSkudG9CZSgzMik7XG4gICAgICBleHBlY3QoS2V5cy5UQUIpLnRvQmUoOSk7XG4gICAgICBleHBlY3QoS2V5cy5BUlJPV19ET1dOKS50b0JlKDQwKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ByZXNzS2V5JywgKCkgPT4ge1xuICAgIGl0KCdkaXNwYXRjaGVzIGtleWJvYXJkIGV2ZW50IHdpdGgga2V5Q29kZScsICgpID0+IHtcbiAgICAgIGNvbnN0IG9uS2V5RG93biA9IGplc3QuZm4oKTtcbiAgICAgIHJlbmRlcig8aW5wdXQgb25LZXlEb3duPXtvbktleURvd259IC8+KTtcbiAgICAgIGNvbnN0IGlucHV0ID0gc2NyZWVuLmdldEJ5Um9sZSgndGV4dGJveCcpO1xuXG4gICAgICBwcmVzc0tleShpbnB1dCwgS2V5cy5FTlRFUik7XG5cbiAgICAgIGV4cGVjdChvbktleURvd24pLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgIGNvbnN0IGV2ZW50ID0gb25LZXlEb3duLm1vY2suY2FsbHNbMF1bMF07XG4gICAgICBleHBlY3QoZXZlbnQua2V5Q29kZSkudG9CZSgxMyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZGlzcGF0Y2hlcyBkaWZmZXJlbnQgZXZlbnQgdHlwZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvbktleVVwID0gamVzdC5mbigpO1xuICAgICAgcmVuZGVyKDxpbnB1dCBvbktleVVwPXtvbktleVVwfSAvPik7XG4gICAgICBjb25zdCBpbnB1dCA9IHNjcmVlbi5nZXRCeVJvbGUoJ3RleHRib3gnKTtcblxuICAgICAgcHJlc3NLZXkoaW5wdXQsIEtleXMuRVNDQVBFLCAna2V5dXAnKTtcblxuICAgICAgZXhwZWN0KG9uS2V5VXApLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgIGNvbnN0IGV2ZW50ID0gb25LZXlVcC5tb2NrLmNhbGxzWzBdWzBdO1xuICAgICAgZXhwZWN0KGV2ZW50LmtleUNvZGUpLnRvQmUoMjcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Bhc3NlcyBhZGRpdGlvbmFsIG9wdGlvbnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvbktleURvd24gPSBqZXN0LmZuKCk7XG4gICAgICByZW5kZXIoPGlucHV0IG9uS2V5RG93bj17b25LZXlEb3dufSAvPik7XG4gICAgICBjb25zdCBpbnB1dCA9IHNjcmVlbi5nZXRCeVJvbGUoJ3RleHRib3gnKTtcblxuICAgICAgcHJlc3NLZXkoaW5wdXQsIEtleXMuRU5URVIsICdrZXlkb3duJywgeyBjdHJsS2V5OiB0cnVlIH0pO1xuXG4gICAgICBjb25zdCBldmVudCA9IG9uS2V5RG93bi5tb2NrLmNhbGxzWzBdWzBdO1xuICAgICAgZXhwZWN0KGV2ZW50LmN0cmxLZXkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd0eXBlQW5kU3VibWl0JywgKCkgPT4ge1xuICAgIGl0KCd0eXBlcyB0ZXh0IGFuZCBwcmVzc2VzIEVudGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgb25LZXlEb3duID0gamVzdC5mbigpO1xuICAgICAgcmVuZGVyKDxpbnB1dCBvbktleURvd249e29uS2V5RG93bn0gLz4pO1xuICAgICAgY29uc3QgaW5wdXQgPSBzY3JlZW4uZ2V0QnlSb2xlKCd0ZXh0Ym94Jyk7XG5cbiAgICAgIGF3YWl0IHR5cGVBbmRTdWJtaXQoaW5wdXQsICdoZWxsbycpO1xuXG4gICAgICBleHBlY3QoaW5wdXQpLnRvSGF2ZVZhbHVlKCdoZWxsbycpO1xuICAgICAgZXhwZWN0KG9uS2V5RG93bikudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbGFzdCBrZXlEb3duIGV2ZW50IHdhcyBFbnRlclxuICAgICAgY29uc3QgbGFzdEV2ZW50ID0gb25LZXlEb3duLm1vY2suY2FsbHNbb25LZXlEb3duLm1vY2suY2FsbHMubGVuZ3RoIC0gMV1bMF07XG4gICAgICBleHBlY3QobGFzdEV2ZW50LmtleUNvZGUpLnRvQmUoS2V5cy5FTlRFUik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjbGVhckFuZFR5cGUnLCAoKSA9PiB7XG4gICAgaXQoJ2NsZWFycyBleGlzdGluZyB2YWx1ZSBhbmQgdHlwZXMgbmV3IHRleHQnLCBhc3luYyAoKSA9PiB7XG4gICAgICByZW5kZXIoPGlucHV0IGRlZmF1bHRWYWx1ZT1cIm9sZCB2YWx1ZVwiIC8+KTtcbiAgICAgIGNvbnN0IGlucHV0ID0gc2NyZWVuLmdldEJ5Um9sZSgndGV4dGJveCcpO1xuXG4gICAgICBhd2FpdCBjbGVhckFuZFR5cGUoaW5wdXQsICduZXcgdmFsdWUnKTtcblxuICAgICAgZXhwZWN0KGlucHV0KS50b0hhdmVWYWx1ZSgnbmV3IHZhbHVlJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCduYXZpZ2F0ZVdpdGhLZXlzJywgKCkgPT4ge1xuICAgIGl0KCduYXZpZ2F0ZXMgZG93biB3aXRoIGFycm93IGtleXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvbktleURvd24gPSBqZXN0LmZuKCk7XG4gICAgICByZW5kZXIoPGRpdiByb2xlPVwibGlzdGJveFwiIG9uS2V5RG93bj17b25LZXlEb3dufSAvPik7XG4gICAgICBjb25zdCBsaXN0Ym94ID0gc2NyZWVuLmdldEJ5Um9sZSgnbGlzdGJveCcpO1xuXG4gICAgICBuYXZpZ2F0ZVdpdGhLZXlzKGxpc3Rib3gsIDMsICd2ZXJ0aWNhbCcpO1xuXG4gICAgICBleHBlY3Qob25LZXlEb3duKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMyk7XG4gICAgICBjb25zdCBldmVudHMgPSBvbktleURvd24ubW9jay5jYWxscy5tYXAoKGNhbGwpID0+IGNhbGxbMF0ua2V5Q29kZSk7XG4gICAgICBleHBlY3QoZXZlbnRzKS50b0VxdWFsKFtLZXlzLkFSUk9XX0RPV04sIEtleXMuQVJST1dfRE9XTiwgS2V5cy5BUlJPV19ET1dOXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnbmF2aWdhdGVzIHVwIHdpdGggbmVnYXRpdmUgc3RlcHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvbktleURvd24gPSBqZXN0LmZuKCk7XG4gICAgICByZW5kZXIoPGRpdiByb2xlPVwibGlzdGJveFwiIG9uS2V5RG93bj17b25LZXlEb3dufSAvPik7XG4gICAgICBjb25zdCBsaXN0Ym94ID0gc2NyZWVuLmdldEJ5Um9sZSgnbGlzdGJveCcpO1xuXG4gICAgICBuYXZpZ2F0ZVdpdGhLZXlzKGxpc3Rib3gsIC0yLCAndmVydGljYWwnKTtcblxuICAgICAgZXhwZWN0KG9uS2V5RG93bikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICAgICAgY29uc3QgZXZlbnRzID0gb25LZXlEb3duLm1vY2suY2FsbHMubWFwKChjYWxsKSA9PiBjYWxsWzBdLmtleUNvZGUpO1xuICAgICAgZXhwZWN0KGV2ZW50cykudG9FcXVhbChbS2V5cy5BUlJPV19VUCwgS2V5cy5BUlJPV19VUF0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ25hdmlnYXRlcyBob3Jpem9udGFsbHknLCAoKSA9PiB7XG4gICAgICBjb25zdCBvbktleURvd24gPSBqZXN0LmZuKCk7XG4gICAgICByZW5kZXIoPGRpdiByb2xlPVwidGFibGlzdFwiIG9uS2V5RG93bj17b25LZXlEb3dufSAvPik7XG4gICAgICBjb25zdCB0YWJsaXN0ID0gc2NyZWVuLmdldEJ5Um9sZSgndGFibGlzdCcpO1xuXG4gICAgICBuYXZpZ2F0ZVdpdGhLZXlzKHRhYmxpc3QsIDIsICdob3Jpem9udGFsJyk7XG5cbiAgICAgIGNvbnN0IGV2ZW50cyA9IG9uS2V5RG93bi5tb2NrLmNhbGxzLm1hcCgoY2FsbCkgPT4gY2FsbFswXS5rZXlDb2RlKTtcbiAgICAgIGV4cGVjdChldmVudHMpLnRvRXF1YWwoW0tleXMuQVJST1dfUklHSFQsIEtleXMuQVJST1dfUklHSFRdKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxTQUFBLEdBQUFGLE9BQUE7QUFFQUcsUUFBUSxDQUFDLGtCQUFrQixFQUFFLFlBQU07RUFDakNBLFFBQVEsQ0FBQyxlQUFlLEVBQUUsWUFBTTtJQUM5QkMsRUFBRSxDQUFDLDBCQUEwQixFQUFFLFlBQU07TUFDbkNDLE1BQU0sQ0FBQ0MsY0FBSSxDQUFDQyxLQUFLLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLEVBQUUsQ0FBQztNQUMzQkgsTUFBTSxDQUFDQyxjQUFJLENBQUNHLE1BQU0sQ0FBQyxDQUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDO01BQzVCSCxNQUFNLENBQUNDLGNBQUksQ0FBQ0ksS0FBSyxDQUFDLENBQUNGLElBQUksQ0FBQyxFQUFFLENBQUM7TUFDM0JILE1BQU0sQ0FBQ0MsY0FBSSxDQUFDSyxHQUFHLENBQUMsQ0FBQ0gsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUN4QkgsTUFBTSxDQUFDQyxjQUFJLENBQUNNLFVBQVUsQ0FBQyxDQUFDSixJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ2xDLENBQUMsQ0FBQztFQUNKLENBQUMsQ0FBQztFQUVGTCxRQUFRLENBQUMsVUFBVSxFQUFFLFlBQU07SUFDekJDLEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRSxZQUFNO01BQ2pELElBQU1TLFNBQVMsR0FBR0MsSUFBSSxDQUFDQyxFQUFFLENBQUMsQ0FBQztNQUMzQixJQUFBQyxjQUFNLGVBQUNsQixNQUFBLFlBQUFtQixhQUFBO1FBQU9KLFNBQVMsRUFBRUE7TUFBVSxDQUFFLENBQUMsQ0FBQztNQUN2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
|
package/lib/index.js
DELETED
|
@@ -1,272 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
var _exportNames = {
|
|
9
|
-
renderWithTheme: true,
|
|
10
|
-
renderWithProviders: true,
|
|
11
|
-
createTestTheme: true,
|
|
12
|
-
waitForRemoval: true,
|
|
13
|
-
userEvent: true,
|
|
14
|
-
Keys: true,
|
|
15
|
-
pressKey: true,
|
|
16
|
-
typeAndSubmit: true,
|
|
17
|
-
clearAndType: true,
|
|
18
|
-
navigateWithKeys: true,
|
|
19
|
-
waitForCustomElement: true,
|
|
20
|
-
renderWebComponent: true,
|
|
21
|
-
dispatchCustomEvent: true,
|
|
22
|
-
waitForEvent: true,
|
|
23
|
-
isCustomElementDefined: true,
|
|
24
|
-
createCustomElement: true
|
|
25
|
-
};
|
|
26
|
-
Object.defineProperty(exports, "Keys", {
|
|
27
|
-
enumerable: true,
|
|
28
|
-
get: function get() {
|
|
29
|
-
return _keyboard.Keys;
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
Object.defineProperty(exports, "clearAndType", {
|
|
33
|
-
enumerable: true,
|
|
34
|
-
get: function get() {
|
|
35
|
-
return _keyboard.clearAndType;
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
Object.defineProperty(exports, "createCustomElement", {
|
|
39
|
-
enumerable: true,
|
|
40
|
-
get: function get() {
|
|
41
|
-
return _webComponents.createCustomElement;
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
exports.createTestTheme = createTestTheme;
|
|
45
|
-
Object.defineProperty(exports, "dispatchCustomEvent", {
|
|
46
|
-
enumerable: true,
|
|
47
|
-
get: function get() {
|
|
48
|
-
return _webComponents.dispatchCustomEvent;
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
Object.defineProperty(exports, "isCustomElementDefined", {
|
|
52
|
-
enumerable: true,
|
|
53
|
-
get: function get() {
|
|
54
|
-
return _webComponents.isCustomElementDefined;
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
Object.defineProperty(exports, "navigateWithKeys", {
|
|
58
|
-
enumerable: true,
|
|
59
|
-
get: function get() {
|
|
60
|
-
return _keyboard.navigateWithKeys;
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
Object.defineProperty(exports, "pressKey", {
|
|
64
|
-
enumerable: true,
|
|
65
|
-
get: function get() {
|
|
66
|
-
return _keyboard.pressKey;
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
Object.defineProperty(exports, "renderWebComponent", {
|
|
70
|
-
enumerable: true,
|
|
71
|
-
get: function get() {
|
|
72
|
-
return _webComponents.renderWebComponent;
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
exports.renderWithProviders = renderWithProviders;
|
|
76
|
-
exports.renderWithTheme = renderWithTheme;
|
|
77
|
-
Object.defineProperty(exports, "typeAndSubmit", {
|
|
78
|
-
enumerable: true,
|
|
79
|
-
get: function get() {
|
|
80
|
-
return _keyboard.typeAndSubmit;
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
Object.defineProperty(exports, "userEvent", {
|
|
84
|
-
enumerable: true,
|
|
85
|
-
get: function get() {
|
|
86
|
-
return _userEvent["default"];
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
Object.defineProperty(exports, "waitForCustomElement", {
|
|
90
|
-
enumerable: true,
|
|
91
|
-
get: function get() {
|
|
92
|
-
return _webComponents.waitForCustomElement;
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
Object.defineProperty(exports, "waitForEvent", {
|
|
96
|
-
enumerable: true,
|
|
97
|
-
get: function get() {
|
|
98
|
-
return _webComponents.waitForEvent;
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
Object.defineProperty(exports, "waitForRemoval", {
|
|
102
|
-
enumerable: true,
|
|
103
|
-
get: function get() {
|
|
104
|
-
return _react2.waitForElementToBeRemoved;
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
108
|
-
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
109
|
-
var React = _interopRequireWildcard(require("react"));
|
|
110
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
111
|
-
var _react2 = require("@testing-library/react");
|
|
112
|
-
Object.keys(_react2).forEach(function (key) {
|
|
113
|
-
if (key === "default" || key === "__esModule") return;
|
|
114
|
-
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
115
|
-
if (key in exports && exports[key] === _react2[key]) return;
|
|
116
|
-
Object.defineProperty(exports, key, {
|
|
117
|
-
enumerable: true,
|
|
118
|
-
get: function get() {
|
|
119
|
-
return _react2[key];
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
});
|
|
123
|
-
var _styles = require("@mui/material/styles");
|
|
124
|
-
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
125
|
-
var _jestDom = require("@testing-library/jest-dom");
|
|
126
|
-
Object.keys(_jestDom).forEach(function (key) {
|
|
127
|
-
if (key === "default" || key === "__esModule") return;
|
|
128
|
-
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
129
|
-
if (key in exports && exports[key] === _jestDom[key]) return;
|
|
130
|
-
Object.defineProperty(exports, key, {
|
|
131
|
-
enumerable: true,
|
|
132
|
-
get: function get() {
|
|
133
|
-
return _jestDom[key];
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
});
|
|
137
|
-
var _keyboard = require("./keyboard");
|
|
138
|
-
var _webComponents = require("./web-components");
|
|
139
|
-
var _excluded = ["theme"],
|
|
140
|
-
_excluded2 = ["theme", "providers"];
|
|
141
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
142
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
143
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
144
|
-
/**
|
|
145
|
-
* Default MUI theme for testing
|
|
146
|
-
*/
|
|
147
|
-
var defaultTheme = (0, _styles.createTheme)();
|
|
148
|
-
|
|
149
|
-
/**
|
|
150
|
-
* Render a component with MUI ThemeProvider
|
|
151
|
-
*
|
|
152
|
-
* @param {React.ReactElement} ui - The component to render
|
|
153
|
-
* @param {Object} options - Render options
|
|
154
|
-
* @param {Object} options.theme - Custom MUI theme (optional)
|
|
155
|
-
* @param {Object} options.renderOptions - Additional options passed to RTL render
|
|
156
|
-
* @returns {Object} RTL render result
|
|
157
|
-
*
|
|
158
|
-
* @example
|
|
159
|
-
* const { getByRole } = renderWithTheme(<Button>Click me</Button>);
|
|
160
|
-
* expect(getByRole('button')).toBeInTheDocument();
|
|
161
|
-
*/
|
|
162
|
-
function renderWithTheme(ui) {
|
|
163
|
-
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
164
|
-
var _options$theme = options.theme,
|
|
165
|
-
theme = _options$theme === void 0 ? defaultTheme : _options$theme,
|
|
166
|
-
renderOptions = (0, _objectWithoutProperties2["default"])(options, _excluded);
|
|
167
|
-
function Wrapper(_ref) {
|
|
168
|
-
var children = _ref.children;
|
|
169
|
-
return /*#__PURE__*/React.createElement(_styles.ThemeProvider, {
|
|
170
|
-
theme: theme
|
|
171
|
-
}, children);
|
|
172
|
-
}
|
|
173
|
-
Wrapper.propTypes = {
|
|
174
|
-
children: _propTypes["default"].node
|
|
175
|
-
};
|
|
176
|
-
return (0, _react2.render)(ui, _objectSpread({
|
|
177
|
-
wrapper: Wrapper
|
|
178
|
-
}, renderOptions));
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
* Render a component with multiple providers (Theme, etc.)
|
|
183
|
-
* Useful when you need to wrap components with various context providers
|
|
184
|
-
*
|
|
185
|
-
* @param {React.ReactElement} ui - The component to render
|
|
186
|
-
* @param {Object} options - Render options
|
|
187
|
-
* @param {Object} options.theme - Custom MUI theme (optional)
|
|
188
|
-
* @param {Array<React.ComponentType>} options.providers - Additional providers to wrap
|
|
189
|
-
* @param {Object} options.renderOptions - Additional options passed to RTL render
|
|
190
|
-
* @returns {Object} RTL render result
|
|
191
|
-
*
|
|
192
|
-
* @example
|
|
193
|
-
* const { getByText } = renderWithProviders(
|
|
194
|
-
* <MyComponent />,
|
|
195
|
-
* { providers: [ReduxProvider, RouterProvider] }
|
|
196
|
-
* );
|
|
197
|
-
*/
|
|
198
|
-
function renderWithProviders(ui) {
|
|
199
|
-
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
200
|
-
var _options$theme2 = options.theme,
|
|
201
|
-
theme = _options$theme2 === void 0 ? defaultTheme : _options$theme2,
|
|
202
|
-
_options$providers = options.providers,
|
|
203
|
-
providers = _options$providers === void 0 ? [] : _options$providers,
|
|
204
|
-
renderOptions = (0, _objectWithoutProperties2["default"])(options, _excluded2);
|
|
205
|
-
function Wrapper(_ref2) {
|
|
206
|
-
var children = _ref2.children;
|
|
207
|
-
var wrapped = /*#__PURE__*/React.createElement(_styles.ThemeProvider, {
|
|
208
|
-
theme: theme
|
|
209
|
-
}, children);
|
|
210
|
-
|
|
211
|
-
// Wrap with additional providers (from innermost to outermost)
|
|
212
|
-
providers.forEach(function (Provider) {
|
|
213
|
-
wrapped = /*#__PURE__*/React.createElement(Provider, null, wrapped);
|
|
214
|
-
});
|
|
215
|
-
return wrapped;
|
|
216
|
-
}
|
|
217
|
-
Wrapper.propTypes = {
|
|
218
|
-
children: _propTypes["default"].node
|
|
219
|
-
};
|
|
220
|
-
return (0, _react2.render)(ui, _objectSpread({
|
|
221
|
-
wrapper: Wrapper
|
|
222
|
-
}, renderOptions));
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
/**
|
|
226
|
-
* Create a custom theme for testing
|
|
227
|
-
* Useful for testing components with specific theme configurations
|
|
228
|
-
*
|
|
229
|
-
* @param {Object} themeOptions - MUI theme options
|
|
230
|
-
* @returns {Object} MUI theme
|
|
231
|
-
*
|
|
232
|
-
* @example
|
|
233
|
-
* const darkTheme = createTestTheme({ palette: { mode: 'dark' } });
|
|
234
|
-
* renderWithTheme(<Component />, { theme: darkTheme });
|
|
235
|
-
*/
|
|
236
|
-
function createTestTheme() {
|
|
237
|
-
var themeOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
238
|
-
return (0, _styles.createTheme)(themeOptions);
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
/**
|
|
242
|
-
* Wait for an element to be removed from the DOM
|
|
243
|
-
* Wrapper around waitForElementToBeRemoved for convenience
|
|
244
|
-
*
|
|
245
|
-
* @example
|
|
246
|
-
* await waitForRemoval(() => screen.queryByText('Loading...'));
|
|
247
|
-
*/
|
|
248
|
-
|
|
249
|
-
/**
|
|
250
|
-
* Re-export all of @testing-library/react for convenience
|
|
251
|
-
* This allows consumers to import everything from one place
|
|
252
|
-
*/
|
|
253
|
-
|
|
254
|
-
/**
|
|
255
|
-
* Re-export userEvent as a named export for convenience
|
|
256
|
-
*/
|
|
257
|
-
|
|
258
|
-
/**
|
|
259
|
-
* Re-export jest-dom matchers (they're automatically added in jest.setup.js,
|
|
260
|
-
* but we export them here for TypeScript support)
|
|
261
|
-
*/
|
|
262
|
-
|
|
263
|
-
/**
|
|
264
|
-
* Keyboard helpers for testing keyboard interactions
|
|
265
|
-
* Especially useful for components checking event.keyCode
|
|
266
|
-
*/
|
|
267
|
-
|
|
268
|
-
/**
|
|
269
|
-
* Web component testing utilities
|
|
270
|
-
* For testing light DOM custom elements (no Shadow DOM)
|
|
271
|
-
*/
|
|
272
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9wcm9wVHlwZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3JlYWN0MiIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiX2V4cG9ydE5hbWVzIiwiZXhwb3J0cyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsIl9zdHlsZXMiLCJfdXNlckV2ZW50IiwiX2plc3REb20iLCJfa2V5Ym9hcmQiLCJfd2ViQ29tcG9uZW50cyIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mIiwiaGFzIiwic2V0IiwiX3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJvd25LZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmF1bHRUaGVtZSIsImNyZWF0ZVRoZW1lIiwicmVuZGVyV2l0aFRoZW1lIiwidWkiLCJvcHRpb25zIiwidW5kZWZpbmVkIiwiX29wdGlvbnMkdGhlbWUiLCJ0aGVtZSIsInJlbmRlck9wdGlvbnMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwiV3JhcHBlciIsIl9yZWYiLCJjaGlsZHJlbiIsImNyZWF0ZUVsZW1lbnQiLCJUaGVtZVByb3ZpZGVyIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwibm9kZSIsInJlbmRlciIsIndyYXBwZXIiLCJyZW5kZXJXaXRoUHJvdmlkZXJzIiwiX29wdGlvbnMkdGhlbWUyIiwiX29wdGlvbnMkcHJvdmlkZXJzIiwicHJvdmlkZXJzIiwiX3JlZjIiLCJ3cmFwcGVkIiwiUHJvdmlkZXIiLCJjcmVhdGVUZXN0VGhlbWUiLCJ0aGVtZU9wdGlvbnMiXSwic291cmNlcyI6WyIuLi9zcmMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QnO1xuaW1wb3J0IHsgVGhlbWVQcm92aWRlciwgY3JlYXRlVGhlbWUgfSBmcm9tICdAbXVpL21hdGVyaWFsL3N0eWxlcyc7XG5cbi8qKlxuICogRGVmYXVsdCBNVUkgdGhlbWUgZm9yIHRlc3RpbmdcbiAqL1xuY29uc3QgZGVmYXVsdFRoZW1lID0gY3JlYXRlVGhlbWUoKTtcblxuLyoqXG4gKiBSZW5kZXIgYSBjb21wb25lbnQgd2l0aCBNVUkgVGhlbWVQcm92aWRlclxuICpcbiAqIEBwYXJhbSB7UmVhY3QuUmVhY3RFbGVtZW50fSB1aSAtIFRoZSBjb21wb25lbnQgdG8gcmVuZGVyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFJlbmRlciBvcHRpb25zXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucy50aGVtZSAtIEN1c3RvbSBNVUkgdGhlbWUgKG9wdGlvbmFsKVxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMucmVuZGVyT3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucyBwYXNzZWQgdG8gUlRMIHJlbmRlclxuICogQHJldHVybnMge09iamVjdH0gUlRMIHJlbmRlciByZXN1bHRcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgeyBnZXRCeVJvbGUgfSA9IHJlbmRlcldpdGhUaGVtZSg8QnV0dG9uPkNsaWNrIG1lPC9CdXR0b24+KTtcbiAqIGV4cGVjdChnZXRCeVJvbGUoJ2J1dHRvbicpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyV2l0aFRoZW1lKHVpLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyB0aGVtZSA9IGRlZmF1bHRUaGVtZSwgLi4ucmVuZGVyT3B0aW9ucyB9ID0gb3B0aW9ucztcblxuICBmdW5jdGlvbiBXcmFwcGVyKHsgY2hpbGRyZW4gfSkge1xuICAgIHJldHVybiA8VGhlbWVQcm92aWRlciB0aGVtZT17dGhlbWV9PntjaGlsZHJlbn08L1RoZW1lUHJvdmlkZXI+O1xuICB9XG4gIFdyYXBwZXIucHJvcFR5cGVzID0ge1xuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgfTtcblxuICByZXR1cm4gcmVuZGVyKHVpLCB7IHdyYXBwZXI6IFdyYXBwZXIsIC4uLnJlbmRlck9wdGlvbnMgfSk7XG59XG5cbi8qKlxuICogUmVuZGVyIGEgY29tcG9uZW50IHdpdGggbXVsdGlwbGUgcHJvdmlkZXJzIChUaGVtZSwgZXRjLilcbiAqIFVzZWZ1bCB3aGVuIHlvdSBuZWVkIHRvIHdyYXAgY29tcG9uZW50cyB3aXRoIHZhcmlvdXMgY29udGV4dCBwcm92aWRlcnNcbiAqXG4gKiBAcGFyYW0ge1JlYWN0LlJlYWN0RWxlbWVudH0gdWkgLSBUaGUgY29tcG9uZW50IHRvIHJlbmRlclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBSZW5kZXIgb3B0aW9uc1xuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMudGhlbWUgLSBDdXN0b20gTVVJIHRoZW1lIChvcHRpb25hbClcbiAqIEBwYXJhbSB7QXJyYXk8UmVhY3QuQ29tcG9uZW50VHlwZT59IG9wdGlvbnMucHJvdmlkZXJzIC0gQWRkaXRpb25hbCBwcm92aWRlcnMgdG8gd3JhcFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMucmVuZGVyT3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucyBwYXNzZWQgdG8gUlRMIHJlbmRlclxuICogQHJldHVybnMge09iamVjdH0gUlRMIHJlbmRlciByZXN1bHRcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgeyBnZXRCeVRleHQgfSA9IHJlbmRlcldpdGhQcm92aWRlcnMoXG4gKiAgIDxNeUNvbXBvbmVudCAvPixcbiAqICAgeyBwcm92aWRlcnM6IFtSZWR1eFByb3ZpZGVyLCBSb3V0ZXJQcm92aWRlcl0gfVxuICogKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlcldpdGhQcm92aWRlcnModWksIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IHRoZW1lID0gZGVmYXVsdFRoZW1lLCBwcm92aWRlcnMgPSBbXSwgLi4ucmVuZGVyT3B0aW9ucyB9ID0gb3B0aW9ucztcblxuICBmdW5jdGlvbiBXcmFwcGVyKHsgY2hpbGRyZW4gfSkge1xuICAgIGxldCB3cmFwcGVkID0gPFRoZW1lUHJvdmlkZXIgdGhlbWU9e3RoZW1lfT57Y2hpbGRyZW59PC9UaGVtZVByb3ZpZGVyPjtcblxuICAgIC8vIFdyYXAgd2l0aCBhZGRpdGlvbmFsIHByb3ZpZGVycyAoZnJvbSBpbm5lcm1vc3QgdG8gb3V0ZXJtb3N0KVxuICAgIHByb3ZpZGVycy5mb3JFYWNoKChQcm92aWRlcikgPT4ge1xuICAgICAgd3JhcHBlZCA9IDxQcm92aWRlcj57d3JhcHBlZH08L1Byb3ZpZGVyPjtcbiAgICB9KTtcblxuICAgIHJldHVybiB3cmFwcGVkO1xuICB9XG4gIFdyYXBwZXIucHJvcFR5cGVzID0ge1xuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgfTtcblxuICByZXR1cm4gcmVuZGVyKHVpLCB7IHdyYXBwZXI6IFdyYXBwZXIsIC4uLnJlbmRlck9wdGlvbnMgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgY3VzdG9tIHRoZW1lIGZvciB0ZXN0aW5nXG4gKiBVc2VmdWwgZm9yIHRlc3RpbmcgY29tcG9uZW50cyB3aXRoIHNwZWNpZmljIHRoZW1lIGNvbmZpZ3VyYXRpb25zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHRoZW1lT3B0aW9ucyAtIE1VSSB0aGVtZSBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBNVUkgdGhlbWVcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZGFya1RoZW1lID0gY3JlYXRlVGVzdFRoZW1lKHsgcGFsZXR0ZTogeyBtb2RlOiAnZGFyaycgfSB9KTtcbiAqIHJlbmRlcldpdGhUaGVtZSg8Q29tcG9uZW50IC8+LCB7IHRoZW1lOiBkYXJrVGhlbWUgfSk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUZXN0VGhlbWUodGhlbWVPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIGNyZWF0ZVRoZW1lKHRoZW1lT3B0aW9ucyk7XG59XG5cbi8qKlxuICogV2FpdCBmb3IgYW4gZWxlbWVudCB0byBiZSByZW1vdmVkIGZyb20gdGhlIERPTVxuICogV3JhcHBlciBhcm91bmQgd2FpdEZvckVsZW1lbnRUb0JlUmVtb3ZlZCBmb3IgY29udmVuaWVuY2VcbiAqXG4gKiBAZXhhbXBsZVxuICogYXdhaXQgd2FpdEZvclJlbW92YWwoKCkgPT4gc2NyZWVuLnF1ZXJ5QnlUZXh0KCdMb2FkaW5nLi4uJykpO1xuICovXG5leHBvcnQgeyB3YWl0Rm9yRWxlbWVudFRvQmVSZW1vdmVkIGFzIHdhaXRGb3JSZW1vdmFsIH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5cbi8qKlxuICogUmUtZXhwb3J0IGFsbCBvZiBAdGVzdGluZy1saWJyYXJ5L3JlYWN0IGZvciBjb252ZW5pZW5jZVxuICogVGhpcyBhbGxvd3MgY29uc3VtZXJzIHRvIGltcG9ydCBldmVyeXRoaW5nIGZyb20gb25lIHBsYWNlXG4gKi9cbmV4cG9ydCAqIGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QnO1xuXG4vKipcbiAqIFJlLWV4cG9ydCB1c2VyRXZlbnQgYXMgYSBuYW1lZCBleHBvcnQgZm9yIGNvbnZlbmllbmNlXG4gKi9cbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXNlckV2ZW50IH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS91c2VyLWV2ZW50JztcblxuLyoqXG4gKiBSZS1leHBvcnQgamVzdC1kb20gbWF0Y2hlcnMgKHRoZXkncmUgYXV0b21hdGljYWxseSBhZGRlZCBpbiBqZXN0LnNldHVwLmpzLFxuICogYnV0IHdlIGV4cG9ydCB0aGVtIGhlcmUgZm9yIFR5cGVTY3JpcHQgc3VwcG9ydClcbiAqL1xuZXhwb3J0ICogZnJvbSAnQHRlc3RpbmctbGlicmFyeS9qZXN0LWRvbSc7XG5cbi8qKlxuICogS2V5Ym9hcmQgaGVscGVycyBmb3IgdGVzdGluZyBrZXlib2FyZCBpbnRlcmFjdGlvbnNcbiAqIEVzcGVjaWFsbHkgdXNlZnVsIGZvciBjb21wb25lbnRzIGNoZWNraW5nIGV2ZW50LmtleUNvZGVcbiAqL1xuZXhwb3J0IHtcbiAgS2V5cyxcbiAgcHJlc3NLZXksXG4gIHR5cGVBbmRTdWJtaXQsXG4gIGNsZWFyQW5kVHlwZSxcbiAgbmF2aWdhdGVXaXRoS2V5cyxcbn0gZnJvbSAnLi9rZXlib2FyZCc7XG5cbi8qKlxuICogV2ViIGNvbXBvbmVudCB0ZXN0aW5nIHV0aWxpdGllc1xuICogRm9yIHRlc3RpbmcgbGlnaHQgRE9NIGN1c3RvbSBlbGVtZW50cyAobm8gU2hhZG93IERPTSlcbiAqL1xuZXhwb3J0IHtcbiAgd2FpdEZvckN1c3RvbUVsZW1lbnQsXG4gIHJlbmRlcldlYkNvbXBvbmVudCxcbiAgZGlzcGF0Y2hDdXN0b21FdmVudCxcbiAgd2FpdEZvckV2ZW50LFxuICBpc0N1c3RvbUVsZW1lbnREZWZpbmVkLFxuICBjcmVhdGVDdXN0b21FbGVtZW50LFxufSBmcm9tICcuL3dlYi1jb21wb25lbnRzJztcblxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxLQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJ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
|
package/lib/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_react2","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_styles","_userEvent","_jestDom","_keyboard","_webComponents","_excluded","_excluded2","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","set","_t","getOwnPropertyDescriptor","ownKeys","getOwnPropertySymbols","filter","push","apply","_objectSpread","arguments","length","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defaultTheme","createTheme","renderWithTheme","ui","options","undefined","_options$theme","theme","renderOptions","_objectWithoutProperties2","Wrapper","_ref","children","createElement","ThemeProvider","propTypes","PropTypes","node","render","wrapper","renderWithProviders","_options$theme2","_options$providers","providers","_ref2","wrapped","Provider","createTestTheme","themeOptions"],"sources":["../src/index.js"],"sourcesContent":["import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { render } from '@testing-library/react';\nimport { ThemeProvider, createTheme } from '@mui/material/styles';\n\n/**\n * Default MUI theme for testing\n */\nconst defaultTheme = createTheme();\n\n/**\n * Render a component with MUI ThemeProvider\n *\n * @param {React.ReactElement} ui - The component to render\n * @param {Object} options - Render options\n * @param {Object} options.theme - Custom MUI theme (optional)\n * @param {Object} options.renderOptions - Additional options passed to RTL render\n * @returns {Object} RTL render result\n *\n * @example\n * const { getByRole } = renderWithTheme(<Button>Click me</Button>);\n * expect(getByRole('button')).toBeInTheDocument();\n */\nexport function renderWithTheme(ui, options = {}) {\n const { theme = defaultTheme, ...renderOptions } = options;\n\n function Wrapper({ children }) {\n return <ThemeProvider theme={theme}>{children}</ThemeProvider>;\n }\n Wrapper.propTypes = {\n children: PropTypes.node,\n };\n\n return render(ui, { wrapper: Wrapper, ...renderOptions });\n}\n\n/**\n * Render a component with multiple providers (Theme, etc.)\n * Useful when you need to wrap components with various context providers\n *\n * @param {React.ReactElement} ui - The component to render\n * @param {Object} options - Render options\n * @param {Object} options.theme - Custom MUI theme (optional)\n * @param {Array<React.ComponentType>} options.providers - Additional providers to wrap\n * @param {Object} options.renderOptions - Additional options passed to RTL render\n * @returns {Object} RTL render result\n *\n * @example\n * const { getByText } = renderWithProviders(\n * <MyComponent />,\n * { providers: [ReduxProvider, RouterProvider] }\n * );\n */\nexport function renderWithProviders(ui, options = {}) {\n const { theme = defaultTheme, providers = [], ...renderOptions } = options;\n\n function Wrapper({ children }) {\n let wrapped = <ThemeProvider theme={theme}>{children}</ThemeProvider>;\n\n // Wrap with additional providers (from innermost to outermost)\n providers.forEach((Provider) => {\n wrapped = <Provider>{wrapped}</Provider>;\n });\n\n return wrapped;\n }\n Wrapper.propTypes = {\n children: PropTypes.node,\n };\n\n return render(ui, { wrapper: Wrapper, ...renderOptions });\n}\n\n/**\n * Create a custom theme for testing\n * Useful for testing components with specific theme configurations\n *\n * @param {Object} themeOptions - MUI theme options\n * @returns {Object} MUI theme\n *\n * @example\n * const darkTheme = createTestTheme({ palette: { mode: 'dark' } });\n * renderWithTheme(<Component />, { theme: darkTheme });\n */\nexport function createTestTheme(themeOptions = {}) {\n return createTheme(themeOptions);\n}\n\n/**\n * Wait for an element to be removed from the DOM\n * Wrapper around waitForElementToBeRemoved for convenience\n *\n * @example\n * await waitForRemoval(() => screen.queryByText('Loading...'));\n */\nexport { waitForElementToBeRemoved as waitForRemoval } from '@testing-library/react';\n\n/**\n * Re-export all of @testing-library/react for convenience\n * This allows consumers to import everything from one place\n */\nexport * from '@testing-library/react';\n\n/**\n * Re-export userEvent as a named export for convenience\n */\nexport { default as userEvent } from '@testing-library/user-event';\n\n/**\n * Re-export jest-dom matchers (they're automatically added in jest.setup.js,\n * but we export them here for TypeScript support)\n */\nexport * from '@testing-library/jest-dom';\n\n/**\n * Keyboard helpers for testing keyboard interactions\n * Especially useful for components checking event.keyCode\n */\nexport {\n Keys,\n pressKey,\n typeAndSubmit,\n clearAndType,\n navigateWithKeys,\n} from './keyboard';\n\n/**\n * Web component testing utilities\n * For testing light DOM custom elements (no Shadow DOM)\n */\nexport {\n waitForCustomElement,\n renderWebComponent,\n dispatchCustomEvent,\n waitForEvent,\n isCustomElementDefined,\n createCustomElement,\n} from './web-components';\n\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,KAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AAmGAI,MAAA,CAAAC,IAAA,CAAAF,OAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,OAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAZ,OAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AAlGA,IAAAS,OAAA,GAAAhB,OAAA;AAuGA,IAAAiB,UAAA,GAAAf,sBAAA,CAAAF,OAAA;AAMA,IAAAkB,QAAA,GAAAlB,OAAA;AAAAI,MAAA,CAAAC,IAAA,CAAAa,QAAA,EAAAZ,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAW,QAAA,CAAAX,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAG,QAAA,CAAAX,GAAA;IAAA;EAAA;AAAA;AAMA,IAAAY,SAAA,GAAAnB,OAAA;AAYA,IAAAoB,cAAA,GAAApB,OAAA;AAO0B,IAAAqB,SAAA;EAAAC,UAAA;AAAA,SAAAvB,wBAAAwB,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAA1B,uBAAA,YAAAA,wBAAAwB,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,mBAAAT,CAAA,iBAAAA,CAAA,gBAAAU,OAAA,CAAAV,CAAA,0BAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAd,GAAA,CAAAQ,CAAA,GAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,EAAAQ,CAAA,cAAAK,EAAA,IAAAb,CAAA,gBAAAa,EAAA,OAAA3B,cAAA,CAAAC,IAAA,CAAAa,CAAA,EAAAa,EAAA,OAAAN,CAAA,IAAAD,CAAA,GAAAzB,MAAA,CAAAS,cAAA,KAAAT,MAAA,CAAAiC,wBAAA,CAAAd,CAAA,EAAAa,EAAA,OAAAN,CAAA,CAAAf,GAAA,IAAAe,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAK,EAAA,EAAAN,CAAA,IAAAC,CAAA,CAAAK,EAAA,IAAAb,CAAA,CAAAa,EAAA,WAAAL,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAAA,SAAAc,QAAAf,CAAA,EAAAG,CAAA,QAAAF,CAAA,GAAApB,MAAA,CAAAC,IAAA,CAAAkB,CAAA,OAAAnB,MAAA,CAAAmC,qBAAA,QAAAV,CAAA,GAAAzB,MAAA,CAAAmC,qBAAA,CAAAhB,CAAA,GAAAG,CAAA,KAAAG,CAAA,GAAAA,CAAA,CAAAW,MAAA,WAAAd,CAAA,WAAAtB,MAAA,CAAAiC,wBAAA,CAAAd,CAAA,EAAAG,CAAA,EAAAZ,UAAA,OAAAU,CAAA,CAAAiB,IAAA,CAAAC,KAAA,CAAAlB,CAAA,EAAAK,CAAA,YAAAL,CAAA;AAAA,SAAAmB,cAAApB,CAAA,aAAAG,CAAA,MAAAA,CAAA,GAAAkB,SAAA,CAAAC,MAAA,EAAAnB,CAAA,UAAAF,CAAA,WAAAoB,SAAA,CAAAlB,CAAA,IAAAkB,SAAA,CAAAlB,CAAA,QAAAA,CAAA,OAAAY,OAAA,CAAAlC,MAAA,CAAAoB,CAAA,OAAAlB,OAAA,WAAAoB,CAAA,QAAAoB,gBAAA,aAAAvB,CAAA,EAAAG,CAAA,EAAAF,CAAA,CAAAE,CAAA,SAAAtB,MAAA,CAAA2C,yBAAA,GAAA3C,MAAA,CAAA4C,gBAAA,CAAAzB,CAAA,EAAAnB,MAAA,CAAA2C,yBAAA,CAAAvB,CAAA,KAAAc,OAAA,CAAAlC,MAAA,CAAAoB,CAAA,GAAAlB,OAAA,WAAAoB,CAAA,IAAAtB,MAAA,CAAAS,cAAA,CAAAU,CAAA,EAAAG,CAAA,EAAAtB,MAAA,CAAAiC,wBAAA,CAAAb,CAAA,EAAAE,CAAA,iBAAAH,CAAA;AApI1B;AACA;AACA;AACA,IAAM0B,YAAY,GAAG,IAAAC,mBAAW,EAAC,CAAC;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,eAAeA,CAACC,EAAE,EAAgB;EAAA,IAAdC,OAAO,GAAAT,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAU,SAAA,GAAAV,SAAA,MAAG,CAAC,CAAC;EAC9C,IAAAW,cAAA,GAAmDF,OAAO,CAAlDG,KAAK;IAALA,KAAK,GAAAD,cAAA,cAAGN,YAAY,GAAAM,cAAA;IAAKE,aAAa,OAAAC,yBAAA,aAAKL,OAAO,EAAAhC,SAAA;EAE1D,SAASsC,OAAOA,CAAAC,IAAA,EAAe;IAAA,IAAZC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IACzB,oBAAO/D,KAAA,CAAAgE,aAAA,CAAC9C,OAAA,CAAA+C,aAAa;MAACP,KAAK,EAAEA;IAAM,GAAEK,QAAwB,CAAC;EAChE;EACAF,OAAO,CAACK,SAAS,GAAG;IAClBH,QAAQ,EAAEI,qBAAS,CAACC;EACtB,CAAC;EAED,OAAO,IAAAC,cAAM,EAACf,EAAE,EAAAT,aAAA;IAAIyB,OAAO,EAAET;EAAO,GAAKF,aAAa,CAAE,CAAC;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASY,mBAAmBA,CAACjB,EAAE,EAAgB;EAAA,IAAdC,OAAO,GAAAT,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAU,SAAA,GAAAV,SAAA,MAAG,CAAC,CAAC;EAClD,IAAA0B,eAAA,GAAmEjB,OAAO,CAAlEG,KAAK;IAALA,KAAK,GAAAc,eAAA,cAAGrB,YAAY,GAAAqB,eAAA;IAAAC,kBAAA,GAAuClB,OAAO,CAA5CmB,SAAS;IAATA,SAAS,GAAAD,kBAAA,cAAG,EAAE,GAAAA,kBAAA;IAAKd,aAAa,OAAAC,yBAAA,aAAKL,OAAO,EAAA/B,UAAA;EAE1E,SAASqC,OAAOA,CAAAc,KAAA,EAAe;IAAA,IAAZZ,QAAQ,GAAAY,KAAA,CAARZ,QAAQ;IACzB,IAAIa,OAAO,gBAAG5E,KAAA,CAAAgE,aAAA,CAAC9C,OAAA,CAAA+C,aAAa;MAACP,KAAK,EAAEA;IAAM,GAAEK,QAAwB,CAAC;;IAErE;IACAW,SAAS,CAAClE,OAAO,CAAC,UAACqE,QAAQ,EAAK;MAC9BD,OAAO,gBAAG5E,KAAA,CAAAgE,aAAA,CAACa,QAAQ,QAAED,OAAkB,CAAC;IAC1C,CAAC,CAAC;IAEF,OAAOA,OAAO;EAChB;EACAf,OAAO,CAACK,SAAS,GAAG;IAClBH,QAAQ,EAAEI,qBAAS,CAACC;EACtB,CAAC;EAED,OAAO,IAAAC,cAAM,EAACf,EAAE,EAAAT,aAAA;IAAIyB,OAAO,EAAET;EAAO,GAAKF,aAAa,CAAE,CAAC;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASmB,eAAeA,CAAA,EAAoB;EAAA,IAAnBC,YAAY,GAAAjC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAU,SAAA,GAAAV,SAAA,MAAG,CAAC,CAAC;EAC/C,OAAO,IAAAM,mBAAW,EAAC2B,YAAY,CAAC;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;;AASA;AACA;AACA;AACA","ignoreList":[]}
|
package/lib/keyboard.js
DELETED
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.Keys = void 0;
|
|
8
|
-
exports.clearAndType = clearAndType;
|
|
9
|
-
exports.navigateWithKeys = navigateWithKeys;
|
|
10
|
-
exports.pressKey = pressKey;
|
|
11
|
-
exports.typeAndSubmit = typeAndSubmit;
|
|
12
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
13
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
14
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
-
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
16
|
-
var _react = require("@testing-library/react");
|
|
17
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
18
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
19
|
-
/**
|
|
20
|
-
* Common keyboard key codes
|
|
21
|
-
* Useful for legacy components that check event.keyCode
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* pressKey(input, Keys.ENTER);
|
|
25
|
-
* pressKey(input, Keys.ESCAPE);
|
|
26
|
-
*/
|
|
27
|
-
var Keys = exports.Keys = {
|
|
28
|
-
ENTER: 13,
|
|
29
|
-
ESCAPE: 27,
|
|
30
|
-
SPACE: 32,
|
|
31
|
-
ARROW_LEFT: 37,
|
|
32
|
-
ARROW_UP: 38,
|
|
33
|
-
ARROW_RIGHT: 39,
|
|
34
|
-
ARROW_DOWN: 40,
|
|
35
|
-
TAB: 9,
|
|
36
|
-
BACKSPACE: 8,
|
|
37
|
-
DELETE: 46,
|
|
38
|
-
HOME: 36,
|
|
39
|
-
END: 35,
|
|
40
|
-
PAGE_UP: 33,
|
|
41
|
-
PAGE_DOWN: 34
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Simulate keyboard event with keyCode
|
|
46
|
-
* Useful for legacy components checking event.keyCode
|
|
47
|
-
*
|
|
48
|
-
* userEvent.type() with special keys like {Enter} doesn't work well with
|
|
49
|
-
* components that check event.keyCode. Use this helper instead.
|
|
50
|
-
*
|
|
51
|
-
* @param {HTMLElement} element - Target element
|
|
52
|
-
* @param {number} keyCode - Key code (use Keys.ENTER, Keys.ESCAPE, etc.)
|
|
53
|
-
* @param {string} type - Event type (keydown, keyup, keypress)
|
|
54
|
-
* @param {Object} options - Additional event properties
|
|
55
|
-
*
|
|
56
|
-
* @example
|
|
57
|
-
* // Press Enter on an input
|
|
58
|
-
* const input = screen.getByRole('textbox');
|
|
59
|
-
* pressKey(input, Keys.ENTER);
|
|
60
|
-
*
|
|
61
|
-
* @example
|
|
62
|
-
* // Press Escape with keyup event
|
|
63
|
-
* pressKey(dialog, Keys.ESCAPE, 'keyup');
|
|
64
|
-
*
|
|
65
|
-
* @example
|
|
66
|
-
* // Press with additional properties
|
|
67
|
-
* pressKey(input, Keys.ENTER, 'keydown', { ctrlKey: true });
|
|
68
|
-
*/
|
|
69
|
-
function pressKey(element, keyCode) {
|
|
70
|
-
var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'keydown';
|
|
71
|
-
var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
72
|
-
var event = new KeyboardEvent(type, _objectSpread({
|
|
73
|
-
keyCode: keyCode,
|
|
74
|
-
which: keyCode,
|
|
75
|
-
bubbles: true,
|
|
76
|
-
cancelable: true
|
|
77
|
-
}, options));
|
|
78
|
-
(0, _react.fireEvent)(element, event);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Type text and then press Enter
|
|
83
|
-
* Common pattern for form submissions
|
|
84
|
-
*
|
|
85
|
-
* @param {HTMLElement} element - Input element
|
|
86
|
-
* @param {string} text - Text to type
|
|
87
|
-
*
|
|
88
|
-
* @example
|
|
89
|
-
* const input = screen.getByRole('textbox');
|
|
90
|
-
* await typeAndSubmit(input, 'hello world');
|
|
91
|
-
* expect(onSubmit).toHaveBeenCalledWith('hello world');
|
|
92
|
-
*/
|
|
93
|
-
function typeAndSubmit(_x, _x2) {
|
|
94
|
-
return _typeAndSubmit.apply(this, arguments);
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Clear input and type new text
|
|
98
|
-
* Common pattern for updating form fields
|
|
99
|
-
*
|
|
100
|
-
* @param {HTMLElement} element - Input element
|
|
101
|
-
* @param {string} text - New text to type
|
|
102
|
-
*
|
|
103
|
-
* @example
|
|
104
|
-
* const input = screen.getByRole('textbox');
|
|
105
|
-
* await clearAndType(input, 'new value');
|
|
106
|
-
*/
|
|
107
|
-
function _typeAndSubmit() {
|
|
108
|
-
_typeAndSubmit = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(element, text) {
|
|
109
|
-
var user;
|
|
110
|
-
return _regenerator["default"].wrap(function (_context) {
|
|
111
|
-
while (1) switch (_context.prev = _context.next) {
|
|
112
|
-
case 0:
|
|
113
|
-
user = _userEvent["default"].setup();
|
|
114
|
-
_context.next = 1;
|
|
115
|
-
return user.type(element, text);
|
|
116
|
-
case 1:
|
|
117
|
-
pressKey(element, Keys.ENTER);
|
|
118
|
-
case 2:
|
|
119
|
-
case "end":
|
|
120
|
-
return _context.stop();
|
|
121
|
-
}
|
|
122
|
-
}, _callee);
|
|
123
|
-
}));
|
|
124
|
-
return _typeAndSubmit.apply(this, arguments);
|
|
125
|
-
}
|
|
126
|
-
function clearAndType(_x3, _x4) {
|
|
127
|
-
return _clearAndType.apply(this, arguments);
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Simulate keyboard navigation
|
|
131
|
-
* Press arrow keys to navigate through a list
|
|
132
|
-
*
|
|
133
|
-
* @param {HTMLElement} element - List or container element
|
|
134
|
-
* @param {number} steps - Number of steps to navigate (positive = down/right, negative = up/left)
|
|
135
|
-
* @param {string} direction - 'vertical' or 'horizontal'
|
|
136
|
-
*
|
|
137
|
-
* @example
|
|
138
|
-
* // Navigate down 3 items in a list
|
|
139
|
-
* navigateWithKeys(listbox, 3, 'vertical');
|
|
140
|
-
*
|
|
141
|
-
* @example
|
|
142
|
-
* // Navigate left 2 items
|
|
143
|
-
* navigateWithKeys(tabs, -2, 'horizontal');
|
|
144
|
-
*/
|
|
145
|
-
function _clearAndType() {
|
|
146
|
-
_clearAndType = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2(element, text) {
|
|
147
|
-
var user;
|
|
148
|
-
return _regenerator["default"].wrap(function (_context2) {
|
|
149
|
-
while (1) switch (_context2.prev = _context2.next) {
|
|
150
|
-
case 0:
|
|
151
|
-
user = _userEvent["default"].setup();
|
|
152
|
-
_context2.next = 1;
|
|
153
|
-
return user.clear(element);
|
|
154
|
-
case 1:
|
|
155
|
-
_context2.next = 2;
|
|
156
|
-
return user.type(element, text);
|
|
157
|
-
case 2:
|
|
158
|
-
case "end":
|
|
159
|
-
return _context2.stop();
|
|
160
|
-
}
|
|
161
|
-
}, _callee2);
|
|
162
|
-
}));
|
|
163
|
-
return _clearAndType.apply(this, arguments);
|
|
164
|
-
}
|
|
165
|
-
function navigateWithKeys(element, steps) {
|
|
166
|
-
var direction = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'vertical';
|
|
167
|
-
var key = direction === 'vertical' ? steps > 0 ? Keys.ARROW_DOWN : Keys.ARROW_UP : steps > 0 ? Keys.ARROW_RIGHT : Keys.ARROW_LEFT;
|
|
168
|
-
var count = Math.abs(steps);
|
|
169
|
-
for (var i = 0; i < count; i++) {
|
|
170
|
-
pressKey(element, key);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXNlckV2ZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfcmVhY3QiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIktleXMiLCJleHBvcnRzIiwiRU5URVIiLCJFU0NBUEUiLCJTUEFDRSIsIkFSUk9XX0xFRlQiLCJBUlJPV19VUCIsIkFSUk9XX1JJR0hUIiwiQVJST1dfRE9XTiIsIlRBQiIsIkJBQ0tTUEFDRSIsIkRFTEVURSIsIkhPTUUiLCJFTkQiLCJQQUdFX1VQIiwiUEFHRV9ET1dOIiwicHJlc3NLZXkiLCJlbGVtZW50Iiwia2V5Q29kZSIsInR5cGUiLCJ1bmRlZmluZWQiLCJvcHRpb25zIiwiZXZlbnQiLCJLZXlib2FyZEV2ZW50Iiwid2hpY2giLCJidWJibGVzIiwiY2FuY2VsYWJsZSIsImZpcmVFdmVudCIsInR5cGVBbmRTdWJtaXQiLCJfeCIsIl94MiIsIl90eXBlQW5kU3VibWl0IiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJ0ZXh0IiwidXNlciIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwidXNlckV2ZW50Iiwic2V0dXAiLCJzdG9wIiwiY2xlYXJBbmRUeXBlIiwiX3gzIiwiX3g0IiwiX2NsZWFyQW5kVHlwZSIsIl9jYWxsZWUyIiwiX2NvbnRleHQyIiwiY2xlYXIiLCJuYXZpZ2F0ZVdpdGhLZXlzIiwic3RlcHMiLCJkaXJlY3Rpb24iLCJrZXkiLCJjb3VudCIsIk1hdGgiLCJhYnMiLCJpIl0sInNvdXJjZXMiOlsiLi4vc3JjL2tleWJvYXJkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB1c2VyRXZlbnQgZnJvbSAnQHRlc3RpbmctbGlicmFyeS91c2VyLWV2ZW50JztcbmltcG9ydCB7IGZpcmVFdmVudCB9IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QnO1xuXG4vKipcbiAqIENvbW1vbiBrZXlib2FyZCBrZXkgY29kZXNcbiAqIFVzZWZ1bCBmb3IgbGVnYWN5IGNvbXBvbmVudHMgdGhhdCBjaGVjayBldmVudC5rZXlDb2RlXG4gKlxuICogQGV4YW1wbGVcbiAqIHByZXNzS2V5KGlucHV0LCBLZXlzLkVOVEVSKTtcbiAqIHByZXNzS2V5KGlucHV0LCBLZXlzLkVTQ0FQRSk7XG4gKi9cbmV4cG9ydCBjb25zdCBLZXlzID0ge1xuICBFTlRFUjogMTMsXG4gIEVTQ0FQRTogMjcsXG4gIFNQQUNFOiAzMixcbiAgQVJST1dfTEVGVDogMzcsXG4gIEFSUk9XX1VQOiAzOCxcbiAgQVJST1dfUklHSFQ6IDM5LFxuICBBUlJPV19ET1dOOiA0MCxcbiAgVEFCOiA5LFxuICBCQUNLU1BBQ0U6IDgsXG4gIERFTEVURTogNDYsXG4gIEhPTUU6IDM2LFxuICBFTkQ6IDM1LFxuICBQQUdFX1VQOiAzMyxcbiAgUEFHRV9ET1dOOiAzNCxcbn07XG5cbi8qKlxuICogU2ltdWxhdGUga2V5Ym9hcmQgZXZlbnQgd2l0aCBrZXlDb2RlXG4gKiBVc2VmdWwgZm9yIGxlZ2FjeSBjb21wb25lbnRzIGNoZWNraW5nIGV2ZW50LmtleUNvZGVcbiAqXG4gKiB1c2VyRXZlbnQudHlwZSgpIHdpdGggc3BlY2lhbCBrZXlzIGxpa2Uge0VudGVyfSBkb2Vzbid0IHdvcmsgd2VsbCB3aXRoXG4gKiBjb21wb25lbnRzIHRoYXQgY2hlY2sgZXZlbnQua2V5Q29kZS4gVXNlIHRoaXMgaGVscGVyIGluc3RlYWQuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIFRhcmdldCBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0ga2V5Q29kZSAtIEtleSBjb2RlICh1c2UgS2V5cy5FTlRFUiwgS2V5cy5FU0NBUEUsIGV0Yy4pXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIEV2ZW50IHR5cGUgKGtleWRvd24sIGtleXVwLCBrZXlwcmVzcylcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gQWRkaXRpb25hbCBldmVudCBwcm9wZXJ0aWVzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFByZXNzIEVudGVyIG9uIGFuIGlucHV0XG4gKiBjb25zdCBpbnB1dCA9IHNjcmVlbi5nZXRCeVJvbGUoJ3RleHRib3gnKTtcbiAqIHByZXNzS2V5KGlucHV0LCBLZXlzLkVOVEVSKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUHJlc3MgRXNjYXBlIHdpdGgga2V5dXAgZXZlbnRcbiAqIHByZXNzS2V5KGRpYWxvZywgS2V5cy5FU0NBUEUsICdrZXl1cCcpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBQcmVzcyB3aXRoIGFkZGl0aW9uYWwgcHJvcGVydGllc1xuICogcHJlc3NLZXkoaW5wdXQsIEtleXMuRU5URVIsICdrZXlkb3duJywgeyBjdHJsS2V5OiB0cnVlIH0pO1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlc3NLZXkoZWxlbWVudCwga2V5Q29kZSwgdHlwZSA9ICdrZXlkb3duJywgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGV2ZW50ID0gbmV3IEtleWJvYXJkRXZlbnQodHlwZSwge1xuICAgIGtleUNvZGUsXG4gICAgd2hpY2g6IGtleUNvZGUsXG4gICAgYnViYmxlczogdHJ1ZSxcbiAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xuXG4gIGZpcmVFdmVudChlbGVtZW50LCBldmVudCk7XG59XG5cbi8qKlxuICogVHlwZSB0ZXh0IGFuZCB0aGVuIHByZXNzIEVudGVyXG4gKiBDb21tb24gcGF0dGVybiBmb3IgZm9ybSBzdWJtaXNzaW9uc1xuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBJbnB1dCBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRleHQgdG8gdHlwZVxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBpbnB1dCA9IHNjcmVlbi5nZXRCeVJvbGUoJ3RleHRib3gnKTtcbiAqIGF3YWl0IHR5cGVBbmRTdWJtaXQoaW5wdXQsICdoZWxsbyB3b3JsZCcpO1xuICogZXhwZWN0KG9uU3VibWl0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnaGVsbG8gd29ybGQnKTtcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHR5cGVBbmRTdWJtaXQoZWxlbWVudCwgdGV4dCkge1xuICBjb25zdCB1c2VyID0gdXNlckV2ZW50LnNldHVwKCk7XG4gIGF3YWl0IHVzZXIudHlwZShlbGVtZW50LCB0ZXh0KTtcbiAgcHJlc3NLZXkoZWxlbWVudCwgS2V5cy5FTlRFUik7XG59XG5cbi8qKlxuICogQ2xlYXIgaW5wdXQgYW5kIHR5cGUgbmV3IHRleHRcbiAqIENvbW1vbiBwYXR0ZXJuIGZvciB1cGRhdGluZyBmb3JtIGZpZWxkc1xuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBJbnB1dCBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIE5ldyB0ZXh0IHRvIHR5cGVcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgaW5wdXQgPSBzY3JlZW4uZ2V0QnlSb2xlKCd0ZXh0Ym94Jyk7XG4gKiBhd2FpdCBjbGVhckFuZFR5cGUoaW5wdXQsICduZXcgdmFsdWUnKTtcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsZWFyQW5kVHlwZShlbGVtZW50LCB0ZXh0KSB7XG4gIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgYXdhaXQgdXNlci5jbGVhcihlbGVtZW50KTtcbiAgYXdhaXQgdXNlci50eXBlKGVsZW1lbnQsIHRleHQpO1xufVxuXG4vKipcbiAqIFNpbXVsYXRlIGtleWJvYXJkIG5hdmlnYXRpb25cbiAqIFByZXNzIGFycm93IGtleXMgdG8gbmF2aWdhdGUgdGhyb3VnaCBhIGxpc3RcbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gTGlzdCBvciBjb250YWluZXIgZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IHN0ZXBzIC0gTnVtYmVyIG9mIHN0ZXBzIHRvIG5hdmlnYXRlIChwb3NpdGl2ZSA9IGRvd24vcmlnaHQsIG5lZ2F0aXZlID0gdXAvbGVmdClcbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXJlY3Rpb24gLSAndmVydGljYWwnIG9yICdob3Jpem9udGFsJ1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBOYXZpZ2F0ZSBkb3duIDMgaXRlbXMgaW4gYSBsaXN0XG4gKiBuYXZpZ2F0ZVdpdGhLZXlzKGxpc3Rib3gsIDMsICd2ZXJ0aWNhbCcpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBOYXZpZ2F0ZSBsZWZ0IDIgaXRlbXNcbiAqIG5hdmlnYXRlV2l0aEtleXModGFicywgLTIsICdob3Jpem9udGFsJyk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYXZpZ2F0ZVdpdGhLZXlzKGVsZW1lbnQsIHN0ZXBzLCBkaXJlY3Rpb24gPSAndmVydGljYWwnKSB7XG4gIGNvbnN0IGtleSA9IGRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJ1xuICAgID8gKHN0ZXBzID4gMCA/IEtleXMuQVJST1dfRE9XTiA6IEtleXMuQVJST1dfVVApXG4gICAgOiAoc3RlcHMgPiAwID8gS2V5cy5BUlJPV19SSUdIVCA6IEtleXMuQVJST1dfTEVGVCk7XG5cbiAgY29uc3QgY291bnQgPSBNYXRoLmFicyhzdGVwcyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgIHByZXNzS2V5KGVsZW1lbnQsIGtleSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxVQUFBLEdBQUFDLHNCQUFB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
|
package/lib/keyboard.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"keyboard.js","names":["_userEvent","_interopRequireDefault","require","_react","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","Keys","exports","ENTER","ESCAPE","SPACE","ARROW_LEFT","ARROW_UP","ARROW_RIGHT","ARROW_DOWN","TAB","BACKSPACE","DELETE","HOME","END","PAGE_UP","PAGE_DOWN","pressKey","element","keyCode","type","undefined","options","event","KeyboardEvent","which","bubbles","cancelable","fireEvent","typeAndSubmit","_x","_x2","_typeAndSubmit","_asyncToGenerator2","_regenerator","mark","_callee","text","user","wrap","_context","prev","next","userEvent","setup","stop","clearAndType","_x3","_x4","_clearAndType","_callee2","_context2","clear","navigateWithKeys","steps","direction","key","count","Math","abs","i"],"sources":["../src/keyboard.js"],"sourcesContent":["import userEvent from '@testing-library/user-event';\nimport { fireEvent } from '@testing-library/react';\n\n/**\n * Common keyboard key codes\n * Useful for legacy components that check event.keyCode\n *\n * @example\n * pressKey(input, Keys.ENTER);\n * pressKey(input, Keys.ESCAPE);\n */\nexport const Keys = {\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32,\n ARROW_LEFT: 37,\n ARROW_UP: 38,\n ARROW_RIGHT: 39,\n ARROW_DOWN: 40,\n TAB: 9,\n BACKSPACE: 8,\n DELETE: 46,\n HOME: 36,\n END: 35,\n PAGE_UP: 33,\n PAGE_DOWN: 34,\n};\n\n/**\n * Simulate keyboard event with keyCode\n * Useful for legacy components checking event.keyCode\n *\n * userEvent.type() with special keys like {Enter} doesn't work well with\n * components that check event.keyCode. Use this helper instead.\n *\n * @param {HTMLElement} element - Target element\n * @param {number} keyCode - Key code (use Keys.ENTER, Keys.ESCAPE, etc.)\n * @param {string} type - Event type (keydown, keyup, keypress)\n * @param {Object} options - Additional event properties\n *\n * @example\n * // Press Enter on an input\n * const input = screen.getByRole('textbox');\n * pressKey(input, Keys.ENTER);\n *\n * @example\n * // Press Escape with keyup event\n * pressKey(dialog, Keys.ESCAPE, 'keyup');\n *\n * @example\n * // Press with additional properties\n * pressKey(input, Keys.ENTER, 'keydown', { ctrlKey: true });\n */\nexport function pressKey(element, keyCode, type = 'keydown', options = {}) {\n const event = new KeyboardEvent(type, {\n keyCode,\n which: keyCode,\n bubbles: true,\n cancelable: true,\n ...options,\n });\n\n fireEvent(element, event);\n}\n\n/**\n * Type text and then press Enter\n * Common pattern for form submissions\n *\n * @param {HTMLElement} element - Input element\n * @param {string} text - Text to type\n *\n * @example\n * const input = screen.getByRole('textbox');\n * await typeAndSubmit(input, 'hello world');\n * expect(onSubmit).toHaveBeenCalledWith('hello world');\n */\nexport async function typeAndSubmit(element, text) {\n const user = userEvent.setup();\n await user.type(element, text);\n pressKey(element, Keys.ENTER);\n}\n\n/**\n * Clear input and type new text\n * Common pattern for updating form fields\n *\n * @param {HTMLElement} element - Input element\n * @param {string} text - New text to type\n *\n * @example\n * const input = screen.getByRole('textbox');\n * await clearAndType(input, 'new value');\n */\nexport async function clearAndType(element, text) {\n const user = userEvent.setup();\n await user.clear(element);\n await user.type(element, text);\n}\n\n/**\n * Simulate keyboard navigation\n * Press arrow keys to navigate through a list\n *\n * @param {HTMLElement} element - List or container element\n * @param {number} steps - Number of steps to navigate (positive = down/right, negative = up/left)\n * @param {string} direction - 'vertical' or 'horizontal'\n *\n * @example\n * // Navigate down 3 items in a list\n * navigateWithKeys(listbox, 3, 'vertical');\n *\n * @example\n * // Navigate left 2 items\n * navigateWithKeys(tabs, -2, 'horizontal');\n */\nexport function navigateWithKeys(element, steps, direction = 'vertical') {\n const key = direction === 'vertical'\n ? (steps > 0 ? Keys.ARROW_DOWN : Keys.ARROW_UP)\n : (steps > 0 ? Keys.ARROW_RIGHT : Keys.ARROW_LEFT);\n\n const count = Math.abs(steps);\n for (let i = 0; i < count; i++) {\n pressKey(element, key);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/lib/web-components.js
DELETED
|
@@ -1,248 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.createCustomElement = createCustomElement;
|
|
8
|
-
exports.dispatchCustomEvent = dispatchCustomEvent;
|
|
9
|
-
exports.isCustomElementDefined = isCustomElementDefined;
|
|
10
|
-
exports.renderWebComponent = renderWebComponent;
|
|
11
|
-
exports.waitForCustomElement = waitForCustomElement;
|
|
12
|
-
exports.waitForEvent = waitForEvent;
|
|
13
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
14
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
15
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
16
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
17
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
18
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
19
|
-
// Note: These helpers are for light DOM web components (no Shadow DOM)
|
|
20
|
-
// Standard React Testing Library queries work directly on these components
|
|
21
|
-
/**
|
|
22
|
-
* Wait for a custom element to be defined
|
|
23
|
-
* Custom elements are registered asynchronously
|
|
24
|
-
*
|
|
25
|
-
* @param {string} tagName - Custom element tag name (e.g., 'my-component')
|
|
26
|
-
* @param {number} timeout - Timeout in milliseconds
|
|
27
|
-
* @returns {Promise<void>}
|
|
28
|
-
*
|
|
29
|
-
* @example
|
|
30
|
-
* await waitForCustomElement('pie-chart');
|
|
31
|
-
* const chart = document.createElement('pie-chart');
|
|
32
|
-
*
|
|
33
|
-
* @example
|
|
34
|
-
* await waitForCustomElement('my-component', 5000);
|
|
35
|
-
*/
|
|
36
|
-
function waitForCustomElement(_x) {
|
|
37
|
-
return _waitForCustomElement.apply(this, arguments);
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Render a web component and wait for it to be ready
|
|
41
|
-
* Handles the full lifecycle: wait for definition, create, append, wait for render
|
|
42
|
-
*
|
|
43
|
-
* @param {string} tagName - Custom element tag name
|
|
44
|
-
* @param {Object} attributes - Attributes to set on the element
|
|
45
|
-
* @param {Object} properties - Properties to set on the element
|
|
46
|
-
* @param {HTMLElement} container - Container to append to (defaults to document.body)
|
|
47
|
-
* @returns {Promise<HTMLElement>} The custom element
|
|
48
|
-
*
|
|
49
|
-
* @example
|
|
50
|
-
* const chart = await renderWebComponent('pie-chart', {
|
|
51
|
-
* type: 'bar',
|
|
52
|
-
* 'data-testid': 'my-chart'
|
|
53
|
-
* });
|
|
54
|
-
*
|
|
55
|
-
* @example
|
|
56
|
-
* const button = await renderWebComponent('custom-button',
|
|
57
|
-
* { 'aria-label': 'Submit' },
|
|
58
|
-
* { onClick: jest.fn() }
|
|
59
|
-
* );
|
|
60
|
-
*/
|
|
61
|
-
function _waitForCustomElement() {
|
|
62
|
-
_waitForCustomElement = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(tagName) {
|
|
63
|
-
var timeout,
|
|
64
|
-
_args = arguments;
|
|
65
|
-
return _regenerator["default"].wrap(function (_context) {
|
|
66
|
-
while (1) switch (_context.prev = _context.next) {
|
|
67
|
-
case 0:
|
|
68
|
-
timeout = _args.length > 1 && _args[1] !== undefined ? _args[1] : 3000;
|
|
69
|
-
if (!customElements.get(tagName)) {
|
|
70
|
-
_context.next = 1;
|
|
71
|
-
break;
|
|
72
|
-
}
|
|
73
|
-
return _context.abrupt("return");
|
|
74
|
-
case 1:
|
|
75
|
-
return _context.abrupt("return", new Promise(function (resolve, reject) {
|
|
76
|
-
var timer = setTimeout(function () {
|
|
77
|
-
reject(new Error("Custom element '".concat(tagName, "' not defined within ").concat(timeout, "ms. ") + 'Make sure the element is registered with customElements.define().'));
|
|
78
|
-
}, timeout);
|
|
79
|
-
customElements.whenDefined(tagName).then(function () {
|
|
80
|
-
clearTimeout(timer);
|
|
81
|
-
resolve();
|
|
82
|
-
});
|
|
83
|
-
}));
|
|
84
|
-
case 2:
|
|
85
|
-
case "end":
|
|
86
|
-
return _context.stop();
|
|
87
|
-
}
|
|
88
|
-
}, _callee);
|
|
89
|
-
}));
|
|
90
|
-
return _waitForCustomElement.apply(this, arguments);
|
|
91
|
-
}
|
|
92
|
-
function renderWebComponent(_x2) {
|
|
93
|
-
return _renderWebComponent.apply(this, arguments);
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Dispatch a custom event on an element
|
|
97
|
-
* Web components often use custom events for communication
|
|
98
|
-
*
|
|
99
|
-
* @param {HTMLElement} element - Element to dispatch event from
|
|
100
|
-
* @param {string} eventName - Event name (e.g., 'change', 'custom-event')
|
|
101
|
-
* @param {*} detail - Event detail data
|
|
102
|
-
* @param {Object} options - Event options (bubbles, composed, etc.)
|
|
103
|
-
*
|
|
104
|
-
* @example
|
|
105
|
-
* dispatchCustomEvent(chart, 'data-changed', { value: [1, 2, 3] });
|
|
106
|
-
*
|
|
107
|
-
* @example
|
|
108
|
-
* dispatchCustomEvent(button, 'custom-click', null, { bubbles: false });
|
|
109
|
-
*/
|
|
110
|
-
function _renderWebComponent() {
|
|
111
|
-
_renderWebComponent = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2(tagName) {
|
|
112
|
-
var attributes,
|
|
113
|
-
properties,
|
|
114
|
-
container,
|
|
115
|
-
element,
|
|
116
|
-
_args2 = arguments;
|
|
117
|
-
return _regenerator["default"].wrap(function (_context2) {
|
|
118
|
-
while (1) switch (_context2.prev = _context2.next) {
|
|
119
|
-
case 0:
|
|
120
|
-
attributes = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : {};
|
|
121
|
-
properties = _args2.length > 2 && _args2[2] !== undefined ? _args2[2] : {};
|
|
122
|
-
container = _args2.length > 3 && _args2[3] !== undefined ? _args2[3] : document.body;
|
|
123
|
-
_context2.next = 1;
|
|
124
|
-
return waitForCustomElement(tagName);
|
|
125
|
-
case 1:
|
|
126
|
-
element = document.createElement(tagName); // Set attributes (strings)
|
|
127
|
-
Object.entries(attributes).forEach(function (_ref3) {
|
|
128
|
-
var _ref4 = (0, _slicedToArray2["default"])(_ref3, 2),
|
|
129
|
-
key = _ref4[0],
|
|
130
|
-
value = _ref4[1];
|
|
131
|
-
element.setAttribute(key, value);
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
// Set properties (objects, functions, etc.)
|
|
135
|
-
Object.entries(properties).forEach(function (_ref5) {
|
|
136
|
-
var _ref6 = (0, _slicedToArray2["default"])(_ref5, 2),
|
|
137
|
-
key = _ref6[0],
|
|
138
|
-
value = _ref6[1];
|
|
139
|
-
element[key] = value;
|
|
140
|
-
});
|
|
141
|
-
container.appendChild(element);
|
|
142
|
-
|
|
143
|
-
// Wait for component to render (custom elements may be async)
|
|
144
|
-
_context2.next = 2;
|
|
145
|
-
return new Promise(function (resolve) {
|
|
146
|
-
return setTimeout(resolve, 0);
|
|
147
|
-
});
|
|
148
|
-
case 2:
|
|
149
|
-
return _context2.abrupt("return", element);
|
|
150
|
-
case 3:
|
|
151
|
-
case "end":
|
|
152
|
-
return _context2.stop();
|
|
153
|
-
}
|
|
154
|
-
}, _callee2);
|
|
155
|
-
}));
|
|
156
|
-
return _renderWebComponent.apply(this, arguments);
|
|
157
|
-
}
|
|
158
|
-
function dispatchCustomEvent(element, eventName) {
|
|
159
|
-
var detail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
|
160
|
-
var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
161
|
-
var event = new CustomEvent(eventName, _objectSpread({
|
|
162
|
-
detail: detail,
|
|
163
|
-
bubbles: true,
|
|
164
|
-
composed: true
|
|
165
|
-
}, options));
|
|
166
|
-
element.dispatchEvent(event);
|
|
167
|
-
return event;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Listen for a custom event and return a promise that resolves when fired
|
|
172
|
-
* Useful for testing event emissions
|
|
173
|
-
*
|
|
174
|
-
* @param {HTMLElement} element - Element to listen to
|
|
175
|
-
* @param {string} eventName - Event name to wait for
|
|
176
|
-
* @param {number} timeout - Timeout in milliseconds
|
|
177
|
-
* @returns {Promise<CustomEvent>} Promise that resolves with the event
|
|
178
|
-
*
|
|
179
|
-
* @example
|
|
180
|
-
* const promise = waitForEvent(chart, 'data-loaded');
|
|
181
|
-
* chart.loadData();
|
|
182
|
-
* const event = await promise;
|
|
183
|
-
* expect(event.detail).toEqual({ loaded: true });
|
|
184
|
-
*
|
|
185
|
-
* @example
|
|
186
|
-
* await waitForEvent(component, 'ready', 5000);
|
|
187
|
-
*/
|
|
188
|
-
function waitForEvent(element, eventName) {
|
|
189
|
-
var timeout = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 3000;
|
|
190
|
-
return new Promise(function (resolve, reject) {
|
|
191
|
-
var timer = setTimeout(function () {
|
|
192
|
-
element.removeEventListener(eventName, _handler);
|
|
193
|
-
reject(new Error("Event '".concat(eventName, "' not fired within ").concat(timeout, "ms")));
|
|
194
|
-
}, timeout);
|
|
195
|
-
var _handler = function handler(event) {
|
|
196
|
-
clearTimeout(timer);
|
|
197
|
-
element.removeEventListener(eventName, _handler);
|
|
198
|
-
resolve(event);
|
|
199
|
-
};
|
|
200
|
-
element.addEventListener(eventName, _handler);
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
/**
|
|
205
|
-
* Check if a custom element is defined
|
|
206
|
-
* Useful for verifying element registration
|
|
207
|
-
*
|
|
208
|
-
* @param {string} tagName - Custom element tag name
|
|
209
|
-
* @returns {boolean} True if element is defined
|
|
210
|
-
*
|
|
211
|
-
* @example
|
|
212
|
-
* if (isCustomElementDefined('pie-chart')) {
|
|
213
|
-
* // Element is ready to use
|
|
214
|
-
* }
|
|
215
|
-
*/
|
|
216
|
-
function isCustomElementDefined(tagName) {
|
|
217
|
-
return typeof customElements !== 'undefined' && customElements.get(tagName) !== undefined;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
/**
|
|
221
|
-
* Helper to create and configure a custom element
|
|
222
|
-
* For light DOM web components that render React
|
|
223
|
-
*
|
|
224
|
-
* @param {string} tagName - Custom element tag name
|
|
225
|
-
* @param {Object} props - Props to pass to the element
|
|
226
|
-
* @returns {HTMLElement} The custom element
|
|
227
|
-
*
|
|
228
|
-
* @example
|
|
229
|
-
* const chart = createCustomElement('pie-chart', {
|
|
230
|
-
* data: [1, 2, 3],
|
|
231
|
-
* type: 'bar'
|
|
232
|
-
* });
|
|
233
|
-
* document.body.appendChild(chart);
|
|
234
|
-
*/
|
|
235
|
-
function createCustomElement(tagName) {
|
|
236
|
-
var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
237
|
-
var element = document.createElement(tagName);
|
|
238
|
-
|
|
239
|
-
// Set properties directly on the element
|
|
240
|
-
Object.entries(props).forEach(function (_ref) {
|
|
241
|
-
var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
|
|
242
|
-
key = _ref2[0],
|
|
243
|
-
value = _ref2[1];
|
|
244
|
-
element[key] = value;
|
|
245
|
-
});
|
|
246
|
-
return element;
|
|
247
|
-
}
|
|
248
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3YWl0Rm9yQ3VzdG9tRWxlbWVudCIsIl94IiwiX3dhaXRGb3JDdXN0b21FbGVtZW50IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsInRhZ05hbWUiLCJ0aW1lb3V0IiwiX2FyZ3MiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImxlbmd0aCIsInVuZGVmaW5lZCIsImN1c3RvbUVsZW1lbnRzIiwiZ2V0IiwiYWJydXB0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ0aW1lciIsInNldFRpbWVvdXQiLCJFcnJvciIsImNvbmNhdCIsIndoZW5EZWZpbmVkIiwidGhlbiIsImNsZWFyVGltZW91dCIsInN0b3AiLCJyZW5kZXJXZWJDb21wb25lbnQiLCJfeDIiLCJfcmVuZGVyV2ViQ29tcG9uZW50IiwiX2NhbGxlZTIiLCJhdHRyaWJ1dGVzIiwicHJvcGVydGllcyIsImNvbnRhaW5lciIsImVsZW1lbnQiLCJfYXJnczIiLCJfY29udGV4dDIiLCJkb2N1bWVudCIsImJvZHkiLCJjcmVhdGVFbGVtZW50IiwiT2JqZWN0IiwiZW50cmllcyIsImZvckVhY2giLCJfcmVmMyIsIl9yZWY0IiwiX3NsaWNlZFRvQXJyYXkyIiwia2V5IiwidmFsdWUiLCJzZXRBdHRyaWJ1dGUiLCJfcmVmNSIsIl9yZWY2IiwiYXBwZW5kQ2hpbGQiLCJkaXNwYXRjaEN1c3RvbUV2ZW50IiwiZXZlbnROYW1lIiwiZGV0YWlsIiwib3B0aW9ucyIsImV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJfb2JqZWN0U3ByZWFkIiwiYnViYmxlcyIsImNvbXBvc2VkIiwiZGlzcGF0Y2hFdmVudCIsIndhaXRGb3JFdmVudCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsImlzQ3VzdG9tRWxlbWVudERlZmluZWQiLCJjcmVhdGVDdXN0b21FbGVtZW50IiwicHJvcHMiLCJfcmVmIiwiX3JlZjIiXSwic291cmNlcyI6WyIuLi9zcmMvd2ViLWNvbXBvbmVudHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gTm90ZTogVGhlc2UgaGVscGVycyBhcmUgZm9yIGxpZ2h0IERPTSB3ZWIgY29tcG9uZW50cyAobm8gU2hhZG93IERPTSlcbi8vIFN0YW5kYXJkIFJlYWN0IFRlc3RpbmcgTGlicmFyeSBxdWVyaWVzIHdvcmsgZGlyZWN0bHkgb24gdGhlc2UgY29tcG9uZW50c1xuXG4vKipcbiAqIFdhaXQgZm9yIGEgY3VzdG9tIGVsZW1lbnQgdG8gYmUgZGVmaW5lZFxuICogQ3VzdG9tIGVsZW1lbnRzIGFyZSByZWdpc3RlcmVkIGFzeW5jaHJvbm91c2x5XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgLSBDdXN0b20gZWxlbWVudCB0YWcgbmFtZSAoZS5nLiwgJ215LWNvbXBvbmVudCcpXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZW91dCAtIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAqXG4gKiBAZXhhbXBsZVxuICogYXdhaXQgd2FpdEZvckN1c3RvbUVsZW1lbnQoJ3BpZS1jaGFydCcpO1xuICogY29uc3QgY2hhcnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwaWUtY2hhcnQnKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogYXdhaXQgd2FpdEZvckN1c3RvbUVsZW1lbnQoJ215LWNvbXBvbmVudCcsIDUwMDApO1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvckN1c3RvbUVsZW1lbnQodGFnTmFtZSwgdGltZW91dCA9IDMwMDApIHtcbiAgaWYgKGN1c3RvbUVsZW1lbnRzLmdldCh0YWdOYW1lKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHJlamVjdChcbiAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgIGBDdXN0b20gZWxlbWVudCAnJHt0YWdOYW1lfScgbm90IGRlZmluZWQgd2l0aGluICR7dGltZW91dH1tcy4gYCArXG4gICAgICAgICAgJ01ha2Ugc3VyZSB0aGUgZWxlbWVudCBpcyByZWdpc3RlcmVkIHdpdGggY3VzdG9tRWxlbWVudHMuZGVmaW5lKCkuJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH0sIHRpbWVvdXQpO1xuXG4gICAgY3VzdG9tRWxlbWVudHMud2hlbkRlZmluZWQodGFnTmFtZSkudGhlbigoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZW5kZXIgYSB3ZWIgY29tcG9uZW50IGFuZCB3YWl0IGZvciBpdCB0byBiZSByZWFkeVxuICogSGFuZGxlcyB0aGUgZnVsbCBsaWZlY3ljbGU6IHdhaXQgZm9yIGRlZmluaXRpb24sIGNyZWF0ZSwgYXBwZW5kLCB3YWl0IGZvciByZW5kZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSAtIEN1c3RvbSBlbGVtZW50IHRhZyBuYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlcyAtIEF0dHJpYnV0ZXMgdG8gc2V0IG9uIHRoZSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcGVydGllcyAtIFByb3BlcnRpZXMgdG8gc2V0IG9uIHRoZSBlbGVtZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXIgLSBDb250YWluZXIgdG8gYXBwZW5kIHRvIChkZWZhdWx0cyB0byBkb2N1bWVudC5ib2R5KVxuICogQHJldHVybnMge1Byb21pc2U8SFRNTEVsZW1lbnQ+fSBUaGUgY3VzdG9tIGVsZW1lbnRcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgY2hhcnQgPSBhd2FpdCByZW5kZXJXZWJDb21wb25lbnQoJ3BpZS1jaGFydCcsIHtcbiAqICAgdHlwZTogJ2JhcicsXG4gKiAgICdkYXRhLXRlc3RpZCc6ICdteS1jaGFydCdcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBidXR0b24gPSBhd2FpdCByZW5kZXJXZWJDb21wb25lbnQoJ2N1c3RvbS1idXR0b24nLFxuICogICB7ICdhcmlhLWxhYmVsJzogJ1N1Ym1pdCcgfSxcbiAqICAgeyBvbkNsaWNrOiBqZXN0LmZuKCkgfVxuICogKTtcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcldlYkNvbXBvbmVudChcbiAgdGFnTmFtZSxcbiAgYXR0cmlidXRlcyA9IHt9LFxuICBwcm9wZXJ0aWVzID0ge30sXG4gIGNvbnRhaW5lciA9IGRvY3VtZW50LmJvZHlcbikge1xuICBhd2FpdCB3YWl0Rm9yQ3VzdG9tRWxlbWVudCh0YWdOYW1lKTtcblxuICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcblxuICAvLyBTZXQgYXR0cmlidXRlcyAoc3RyaW5ncylcbiAgT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gIH0pO1xuXG4gIC8vIFNldCBwcm9wZXJ0aWVzIChvYmplY3RzLCBmdW5jdGlvbnMsIGV0Yy4pXG4gIE9iamVjdC5lbnRyaWVzKHByb3BlcnRpZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGVsZW1lbnRba2V5XSA9IHZhbHVlO1xuICB9KTtcblxuICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG5cbiAgLy8gV2FpdCBmb3IgY29tcG9uZW50IHRvIHJlbmRlciAoY3VzdG9tIGVsZW1lbnRzIG1heSBiZSBhc3luYylcbiAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMCkpO1xuXG4gIHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgY3VzdG9tIGV2ZW50IG9uIGFuIGVsZW1lbnRcbiAqIFdlYiBjb21wb25lbnRzIG9mdGVuIHVzZSBjdXN0b20gZXZlbnRzIGZvciBjb21tdW5pY2F0aW9uXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZGlzcGF0Y2ggZXZlbnQgZnJvbVxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSAtIEV2ZW50IG5hbWUgKGUuZy4sICdjaGFuZ2UnLCAnY3VzdG9tLWV2ZW50JylcbiAqIEBwYXJhbSB7Kn0gZGV0YWlsIC0gRXZlbnQgZGV0YWlsIGRhdGFcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gRXZlbnQgb3B0aW9ucyAoYnViYmxlcywgY29tcG9zZWQsIGV0Yy4pXG4gKlxuICogQGV4YW1wbGVcbiAqIGRpc3BhdGNoQ3VzdG9tRXZlbnQoY2hhcnQsICdkYXRhLWNoYW5nZWQnLCB7IHZhbHVlOiBbMSwgMiwgM10gfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIGRpc3BhdGNoQ3VzdG9tRXZlbnQoYnV0dG9uLCAnY3VzdG9tLWNsaWNrJywgbnVsbCwgeyBidWJibGVzOiBmYWxzZSB9KTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc3BhdGNoQ3VzdG9tRXZlbnQoXG4gIGVsZW1lbnQsXG4gIGV2ZW50TmFtZSxcbiAgZGV0YWlsID0gbnVsbCxcbiAgb3B0aW9ucyA9IHt9XG4pIHtcbiAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoZXZlbnROYW1lLCB7XG4gICAgZGV0YWlsLFxuICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgY29tcG9zZWQ6IHRydWUsIC8vIEFsbG93IGV2ZW50IHRvIGNyb3NzIHNoYWRvdyBET00gYm91bmRhcnlcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcblxuICBlbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICByZXR1cm4gZXZlbnQ7XG59XG5cbi8qKlxuICogTGlzdGVuIGZvciBhIGN1c3RvbSBldmVudCBhbmQgcmV0dXJuIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gZmlyZWRcbiAqIFVzZWZ1bCBmb3IgdGVzdGluZyBldmVudCBlbWlzc2lvbnNcbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgLSBFdmVudCBuYW1lIHRvIHdhaXQgZm9yXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZW91dCAtIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxDdXN0b21FdmVudD59IFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBldmVudFxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBwcm9taXNlID0gd2FpdEZvckV2ZW50KGNoYXJ0LCAnZGF0YS1sb2FkZWQnKTtcbiAqIGNoYXJ0LmxvYWREYXRhKCk7XG4gKiBjb25zdCBldmVudCA9IGF3YWl0IHByb21pc2U7XG4gKiBleHBlY3QoZXZlbnQuZGV0YWlsKS50b0VxdWFsKHsgbG9hZGVkOiB0cnVlIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiBhd2FpdCB3YWl0Rm9yRXZlbnQoY29tcG9uZW50LCAncmVhZHknLCA1MDAwKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhaXRGb3JFdmVudChlbGVtZW50LCBldmVudE5hbWUsIHRpbWVvdXQgPSAzMDAwKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGhhbmRsZXIpO1xuICAgICAgcmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoYEV2ZW50ICcke2V2ZW50TmFtZX0nIG5vdCBmaXJlZCB3aXRoaW4gJHt0aW1lb3V0fW1zYClcbiAgICAgICk7XG4gICAgfSwgdGltZW91dCk7XG5cbiAgICBjb25zdCBoYW5kbGVyID0gKGV2ZW50KSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgaGFuZGxlcik7XG4gICAgICByZXNvbHZlKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgaGFuZGxlcik7XG4gIH0pO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgY3VzdG9tIGVsZW1lbnQgaXMgZGVmaW5lZFxuICogVXNlZnVsIGZvciB2ZXJpZnlpbmcgZWxlbWVudCByZWdpc3RyYXRpb25cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSAtIEN1c3RvbSBlbGVtZW50IHRhZyBuYW1lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBlbGVtZW50IGlzIGRlZmluZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogaWYgKGlzQ3VzdG9tRWxlbWVudERlZmluZWQoJ3BpZS1jaGFydCcpKSB7XG4gKiAgIC8vIEVsZW1lbnQgaXMgcmVhZHkgdG8gdXNlXG4gKiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0N1c3RvbUVsZW1lbnREZWZpbmVkKHRhZ05hbWUpIHtcbiAgcmV0dXJuIHR5cGVvZiBjdXN0b21FbGVtZW50cyAhPT0gJ3VuZGVmaW5lZCcgJiYgY3VzdG9tRWxlbWVudHMuZ2V0KHRhZ05hbWUpICE9PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogSGVscGVyIHRvIGNyZWF0ZSBhbmQgY29uZmlndXJlIGEgY3VzdG9tIGVsZW1lbnRcbiAqIEZvciBsaWdodCBET00gd2ViIGNvbXBvbmVudHMgdGhhdCByZW5kZXIgUmVhY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSAtIEN1c3RvbSBlbGVtZW50IHRhZyBuYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBQcm9wcyB0byBwYXNzIHRvIHRoZSBlbGVtZW50XG4gKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9IFRoZSBjdXN0b20gZWxlbWVudFxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBjaGFydCA9IGNyZWF0ZUN1c3RvbUVsZW1lbnQoJ3BpZS1jaGFydCcsIHtcbiAqICAgZGF0YTogWzEsIDIsIDNdLFxuICogICB0eXBlOiAnYmFyJ1xuICogfSk7XG4gKiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNoYXJ0KTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUN1c3RvbUVsZW1lbnQodGFnTmFtZSwgcHJvcHMgPSB7fSkge1xuICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcblxuICAvLyBTZXQgcHJvcGVydGllcyBkaXJlY3RseSBvbiB0aGUgZWxlbWVudFxuICBPYmplY3QuZW50cmllcyhwcm9wcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgZWxlbWVudFtrZXldID0gdmFsdWU7XG4gIH0pO1xuXG4gIHJldHVybiBlbGVtZW50O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZEEsU0Flc0JBLG9CQUFvQkEsQ0FBQUMsRUFBQTtFQUFBLE9BQUFDLHFCQUFBLENBQUFDLEtBQUEsT0FBQUMsU0FBQTtBQUFBO0FBc0IxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXJCQSxTQUFBRixzQkFBQTtFQUFBQSxxQkFBQSxPQUFBRyxrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBdEJPLFNBQUFDLFFBQW9DQyxPQUFPO0lBQUEsSUFB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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"web-components.js","names":["waitForCustomElement","_x","_waitForCustomElement","apply","arguments","_asyncToGenerator2","_regenerator","mark","_callee","tagName","timeout","_args","wrap","_context","prev","next","length","undefined","customElements","get","abrupt","Promise","resolve","reject","timer","setTimeout","Error","concat","whenDefined","then","clearTimeout","stop","renderWebComponent","_x2","_renderWebComponent","_callee2","attributes","properties","container","element","_args2","_context2","document","body","createElement","Object","entries","forEach","_ref3","_ref4","_slicedToArray2","key","value","setAttribute","_ref5","_ref6","appendChild","dispatchCustomEvent","eventName","detail","options","event","CustomEvent","_objectSpread","bubbles","composed","dispatchEvent","waitForEvent","removeEventListener","handler","addEventListener","isCustomElementDefined","createCustomElement","props","_ref","_ref2"],"sources":["../src/web-components.js"],"sourcesContent":["// Note: These helpers are for light DOM web components (no Shadow DOM)\n// Standard React Testing Library queries work directly on these components\n\n/**\n * Wait for a custom element to be defined\n * Custom elements are registered asynchronously\n *\n * @param {string} tagName - Custom element tag name (e.g., 'my-component')\n * @param {number} timeout - Timeout in milliseconds\n * @returns {Promise<void>}\n *\n * @example\n * await waitForCustomElement('pie-chart');\n * const chart = document.createElement('pie-chart');\n *\n * @example\n * await waitForCustomElement('my-component', 5000);\n */\nexport async function waitForCustomElement(tagName, timeout = 3000) {\n if (customElements.get(tagName)) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n reject(\n new Error(\n `Custom element '${tagName}' not defined within ${timeout}ms. ` +\n 'Make sure the element is registered with customElements.define().'\n )\n );\n }, timeout);\n\n customElements.whenDefined(tagName).then(() => {\n clearTimeout(timer);\n resolve();\n });\n });\n}\n\n/**\n * Render a web component and wait for it to be ready\n * Handles the full lifecycle: wait for definition, create, append, wait for render\n *\n * @param {string} tagName - Custom element tag name\n * @param {Object} attributes - Attributes to set on the element\n * @param {Object} properties - Properties to set on the element\n * @param {HTMLElement} container - Container to append to (defaults to document.body)\n * @returns {Promise<HTMLElement>} The custom element\n *\n * @example\n * const chart = await renderWebComponent('pie-chart', {\n * type: 'bar',\n * 'data-testid': 'my-chart'\n * });\n *\n * @example\n * const button = await renderWebComponent('custom-button',\n * { 'aria-label': 'Submit' },\n * { onClick: jest.fn() }\n * );\n */\nexport async function renderWebComponent(\n tagName,\n attributes = {},\n properties = {},\n container = document.body\n) {\n await waitForCustomElement(tagName);\n\n const element = document.createElement(tagName);\n\n // Set attributes (strings)\n Object.entries(attributes).forEach(([key, value]) => {\n element.setAttribute(key, value);\n });\n\n // Set properties (objects, functions, etc.)\n Object.entries(properties).forEach(([key, value]) => {\n element[key] = value;\n });\n\n container.appendChild(element);\n\n // Wait for component to render (custom elements may be async)\n await new Promise((resolve) => setTimeout(resolve, 0));\n\n return element;\n}\n\n/**\n * Dispatch a custom event on an element\n * Web components often use custom events for communication\n *\n * @param {HTMLElement} element - Element to dispatch event from\n * @param {string} eventName - Event name (e.g., 'change', 'custom-event')\n * @param {*} detail - Event detail data\n * @param {Object} options - Event options (bubbles, composed, etc.)\n *\n * @example\n * dispatchCustomEvent(chart, 'data-changed', { value: [1, 2, 3] });\n *\n * @example\n * dispatchCustomEvent(button, 'custom-click', null, { bubbles: false });\n */\nexport function dispatchCustomEvent(\n element,\n eventName,\n detail = null,\n options = {}\n) {\n const event = new CustomEvent(eventName, {\n detail,\n bubbles: true,\n composed: true, // Allow event to cross shadow DOM boundary\n ...options,\n });\n\n element.dispatchEvent(event);\n return event;\n}\n\n/**\n * Listen for a custom event and return a promise that resolves when fired\n * Useful for testing event emissions\n *\n * @param {HTMLElement} element - Element to listen to\n * @param {string} eventName - Event name to wait for\n * @param {number} timeout - Timeout in milliseconds\n * @returns {Promise<CustomEvent>} Promise that resolves with the event\n *\n * @example\n * const promise = waitForEvent(chart, 'data-loaded');\n * chart.loadData();\n * const event = await promise;\n * expect(event.detail).toEqual({ loaded: true });\n *\n * @example\n * await waitForEvent(component, 'ready', 5000);\n */\nexport function waitForEvent(element, eventName, timeout = 3000) {\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n element.removeEventListener(eventName, handler);\n reject(\n new Error(`Event '${eventName}' not fired within ${timeout}ms`)\n );\n }, timeout);\n\n const handler = (event) => {\n clearTimeout(timer);\n element.removeEventListener(eventName, handler);\n resolve(event);\n };\n\n element.addEventListener(eventName, handler);\n });\n}\n\n/**\n * Check if a custom element is defined\n * Useful for verifying element registration\n *\n * @param {string} tagName - Custom element tag name\n * @returns {boolean} True if element is defined\n *\n * @example\n * if (isCustomElementDefined('pie-chart')) {\n * // Element is ready to use\n * }\n */\nexport function isCustomElementDefined(tagName) {\n return typeof customElements !== 'undefined' && customElements.get(tagName) !== undefined;\n}\n\n/**\n * Helper to create and configure a custom element\n * For light DOM web components that render React\n *\n * @param {string} tagName - Custom element tag name\n * @param {Object} props - Props to pass to the element\n * @returns {HTMLElement} The custom element\n *\n * @example\n * const chart = createCustomElement('pie-chart', {\n * data: [1, 2, 3],\n * type: 'bar'\n * });\n * document.body.appendChild(chart);\n */\nexport function createCustomElement(tagName, props = {}) {\n const element = document.createElement(tagName);\n\n // Set properties directly on the element\n Object.entries(props).forEach(([key, value]) => {\n element[key] = value;\n });\n\n return element;\n}\n"],"mappings":"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","ignoreList":[]}
|