@dynatrace/strato-components-testing 1.18.0 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/jest/index.js +102 -3
- package/esm/jest/index.js.map +2 -2
- package/esm/jest/mocks/create-mock-element.js +81 -0
- package/esm/jest/mocks/create-mock-element.js.map +7 -0
- package/esm/jest/mocks/create-range-mock.js +28 -0
- package/esm/jest/mocks/create-range-mock.js.map +7 -0
- package/esm/jest/mocks/crypto-mock.js +20 -0
- package/esm/jest/mocks/crypto-mock.js.map +7 -0
- package/esm/jest/mocks/dom-rect-mock.js.map +2 -2
- package/esm/jest/mocks/element-from-point-mock.js +12 -0
- package/esm/jest/mocks/element-from-point-mock.js.map +7 -0
- package/esm/jest/mocks/fetch-mock.js +20 -0
- package/esm/jest/mocks/fetch-mock.js.map +7 -0
- package/esm/jest/mocks/framer-motion-mock.js +59 -0
- package/esm/jest/mocks/framer-motion-mock.js.map +7 -0
- package/esm/jest/mocks/intersection-observer-mock.js +40 -0
- package/esm/jest/mocks/intersection-observer-mock.js.map +7 -0
- package/esm/jest/mocks/match-media-mock.js +27 -0
- package/esm/jest/mocks/match-media-mock.js.map +7 -0
- package/esm/jest/mocks/offset-height-mock.js +21 -0
- package/esm/jest/mocks/offset-height-mock.js.map +7 -0
- package/esm/jest/mocks/offset-width-mock.js +21 -0
- package/esm/jest/mocks/offset-width-mock.js.map +7 -0
- package/esm/jest/mocks/pointer-event-mock.js +24 -0
- package/esm/jest/mocks/pointer-event-mock.js.map +7 -0
- package/esm/jest/mocks/screen-size-mock.js +16 -0
- package/esm/jest/mocks/screen-size-mock.js.map +7 -0
- package/esm/jest/mocks/scroll-into-view-mock.js +16 -0
- package/esm/jest/mocks/scroll-into-view-mock.js.map +7 -0
- package/esm/jest/mocks/streamdown.mock.js +8 -0
- package/esm/jest/mocks/streamdown.mock.js.map +7 -0
- package/esm/jest/mocks/table-virtualization-mock.js +87 -0
- package/esm/jest/mocks/table-virtualization-mock.js.map +7 -0
- package/esm/jest/mocks/virtualization-mock.js +155 -0
- package/esm/jest/mocks/virtualization-mock.js.map +7 -0
- package/esm/jest/preset/jest-preset.js +2 -1
- package/esm/jest/preset/jest-preset.js.map +2 -2
- package/esm/jest/setup/index.js +51 -0
- package/esm/jest/setup/index.js.map +2 -2
- package/esm/jest/testing-helpers/filters/filter-field.js +424 -0
- package/esm/jest/testing-helpers/filters/filter-field.js.map +7 -0
- package/esm/jest/testing-helpers/forms/base-input.js +32 -0
- package/esm/jest/testing-helpers/forms/base-input.js.map +7 -0
- package/esm/jest/testing-helpers/forms/password-input.js +29 -0
- package/esm/jest/testing-helpers/forms/password-input.js.map +7 -0
- package/esm/jest/testing-helpers/forms/search-input.js +27 -0
- package/esm/jest/testing-helpers/forms/search-input.js.map +7 -0
- package/esm/jest/testing-helpers/forms/select.js +131 -0
- package/esm/jest/testing-helpers/forms/select.js.map +7 -0
- package/esm/jest/testing-helpers/forms/text-input.js +24 -0
- package/esm/jest/testing-helpers/forms/text-input.js.map +7 -0
- package/esm/jest/testing-helpers/tables/datatable.js +794 -0
- package/esm/jest/testing-helpers/tables/datatable.js.map +7 -0
- package/esm/jest/testing-helpers/utils/isFakeTimersEnabled.js +9 -0
- package/esm/jest/testing-helpers/utils/isFakeTimersEnabled.js.map +7 -0
- package/esm/jest/testing-helpers/utils/setup-user-event.js +15 -0
- package/esm/jest/testing-helpers/utils/setup-user-event.js.map +7 -0
- package/jest/index.d.ts +22 -1
- package/jest/index.js +54 -3
- package/jest/mocks/create-mock-element.d.ts +15 -0
- package/jest/mocks/create-mock-element.js +99 -0
- package/jest/mocks/create-range-mock.d.ts +11 -0
- package/jest/mocks/create-range-mock.js +46 -0
- package/jest/mocks/crypto-mock.d.ts +12 -0
- package/jest/mocks/crypto-mock.js +48 -0
- package/jest/mocks/dom-rect-mock.d.ts +1 -0
- package/jest/mocks/element-from-point-mock.d.ts +11 -0
- package/jest/{setup.js → mocks/element-from-point-mock.js} +10 -16
- package/jest/mocks/fetch-mock.d.ts +10 -0
- package/jest/mocks/fetch-mock.js +38 -0
- package/jest/mocks/framer-motion-mock.d.ts +18 -0
- package/jest/mocks/framer-motion-mock.js +75 -0
- package/jest/mocks/intersection-observer-mock.d.ts +11 -0
- package/jest/mocks/intersection-observer-mock.js +58 -0
- package/jest/mocks/match-media-mock.d.ts +11 -0
- package/jest/mocks/match-media-mock.js +45 -0
- package/jest/mocks/offset-height-mock.d.ts +10 -0
- package/jest/mocks/offset-height-mock.js +39 -0
- package/jest/mocks/offset-width-mock.d.ts +10 -0
- package/jest/mocks/offset-width-mock.js +39 -0
- package/jest/mocks/pointer-event-mock.d.ts +10 -0
- package/jest/mocks/pointer-event-mock.js +42 -0
- package/jest/mocks/screen-size-mock.d.ts +10 -0
- package/jest/mocks/screen-size-mock.js +34 -0
- package/jest/mocks/scroll-into-view-mock.d.ts +10 -0
- package/jest/mocks/scroll-into-view-mock.js +34 -0
- package/jest/mocks/streamdown.mock.d.ts +2 -0
- package/jest/mocks/streamdown.mock.js +26 -0
- package/jest/mocks/table-virtualization-mock.d.ts +15 -0
- package/jest/mocks/table-virtualization-mock.js +102 -0
- package/jest/mocks/virtualization-mock.d.ts +9 -0
- package/jest/mocks/virtualization-mock.js +170 -0
- package/jest/preset/jest-preset.d.ts +2 -3
- package/jest/preset/jest-preset.js +2 -1
- package/jest/setup/index.js +27 -0
- package/jest/testing-helpers/filters/filter-field.d.ts +109 -0
- package/jest/testing-helpers/filters/filter-field.js +436 -0
- package/jest/testing-helpers/forms/base-input.d.ts +17 -0
- package/jest/testing-helpers/forms/base-input.js +50 -0
- package/jest/testing-helpers/forms/password-input.d.ts +16 -0
- package/jest/testing-helpers/forms/password-input.js +47 -0
- package/jest/testing-helpers/forms/search-input.d.ts +20 -0
- package/jest/testing-helpers/forms/search-input.js +45 -0
- package/jest/testing-helpers/forms/select.d.ts +65 -0
- package/jest/testing-helpers/forms/select.js +159 -0
- package/jest/testing-helpers/forms/text-input.d.ts +19 -0
- package/jest/testing-helpers/forms/text-input.js +42 -0
- package/jest/testing-helpers/tables/datatable.d.ts +239 -0
- package/jest/testing-helpers/tables/datatable.js +812 -0
- package/jest/testing-helpers/utils/isFakeTimersEnabled.d.ts +5 -0
- package/jest/testing-helpers/utils/isFakeTimersEnabled.js +27 -0
- package/jest/testing-helpers/utils/setup-user-event.d.ts +6 -0
- package/jest/testing-helpers/utils/setup-user-event.js +43 -0
- package/package.json +11 -3
- package/esm/jest/setup.js +0 -24
- package/esm/jest/setup.js.map +0 -7
- package/jest/setup.d.ts +0 -14
package/esm/jest/index.js
CHANGED
|
@@ -1,12 +1,31 @@
|
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
1
2
|
import {
|
|
2
3
|
customRender
|
|
3
4
|
} from "./custom-render.js";
|
|
4
|
-
import { setup, clear } from "./setup.js";
|
|
5
5
|
import { stratoPreset } from "./preset/index.js";
|
|
6
|
+
import {
|
|
7
|
+
getTextInputHelper
|
|
8
|
+
} from "./testing-helpers/forms/text-input.js";
|
|
9
|
+
import {
|
|
10
|
+
getPasswordInputHelper
|
|
11
|
+
} from "./testing-helpers/forms/password-input.js";
|
|
12
|
+
import {
|
|
13
|
+
getSearchInputHelper
|
|
14
|
+
} from "./testing-helpers/forms/search-input.js";
|
|
15
|
+
import {
|
|
16
|
+
getDataTableHelper
|
|
17
|
+
} from "./testing-helpers/tables/datatable.js";
|
|
18
|
+
import {
|
|
19
|
+
getFilterFieldHelper
|
|
20
|
+
} from "./testing-helpers/filters/filter-field.js";
|
|
21
|
+
import {
|
|
22
|
+
getSelectTestingHelper
|
|
23
|
+
} from "./testing-helpers/forms/select.js";
|
|
6
24
|
import {
|
|
7
25
|
setupGetBoundingClientRectMock,
|
|
8
26
|
clearGetBoundingClientRectMock
|
|
9
27
|
} from "./mocks/bounding-client-rect-mock.js";
|
|
28
|
+
import { createMockElement } from "./mocks/create-mock-element.js";
|
|
10
29
|
import {
|
|
11
30
|
setupCanvasMeasureTextMock,
|
|
12
31
|
clearCanvasMeasureTextMock
|
|
@@ -15,31 +34,111 @@ import {
|
|
|
15
34
|
setupResizeObserverMock,
|
|
16
35
|
clearResizeObserverMock
|
|
17
36
|
} from "./mocks/resize-observer-mock.js";
|
|
37
|
+
import {
|
|
38
|
+
setupOffsetWidthMock,
|
|
39
|
+
clearOffsetWidthMock
|
|
40
|
+
} from "./mocks/offset-width-mock.js";
|
|
41
|
+
import {
|
|
42
|
+
setupOffsetHeightMock,
|
|
43
|
+
clearOffsetHeightMock
|
|
44
|
+
} from "./mocks/offset-height-mock.js";
|
|
18
45
|
import { setupDomRectMock, clearDomRectMock } from "./mocks/dom-rect-mock.js";
|
|
46
|
+
import {
|
|
47
|
+
setupMatchMediaMock,
|
|
48
|
+
clearMatchMediaMock
|
|
49
|
+
} from "./mocks/match-media-mock.js";
|
|
50
|
+
import {
|
|
51
|
+
setupPointerEventMock,
|
|
52
|
+
clearPointerEventMock
|
|
53
|
+
} from "./mocks/pointer-event-mock.js";
|
|
54
|
+
import {
|
|
55
|
+
setupIntersectionObserverMock,
|
|
56
|
+
clearIntersectionObserverMock
|
|
57
|
+
} from "./mocks/intersection-observer-mock.js";
|
|
58
|
+
import {
|
|
59
|
+
setupCreateRangeMock,
|
|
60
|
+
clearCreateRangeMock
|
|
61
|
+
} from "./mocks/create-range-mock.js";
|
|
62
|
+
import {
|
|
63
|
+
setupScreenSizeMock,
|
|
64
|
+
clearScreenSizeMock
|
|
65
|
+
} from "./mocks/screen-size-mock.js";
|
|
66
|
+
import {
|
|
67
|
+
setupScrollIntoViewMock,
|
|
68
|
+
clearScrollIntoViewMock
|
|
69
|
+
} from "./mocks/scroll-into-view-mock.js";
|
|
19
70
|
import {
|
|
20
71
|
setupScrollWidthMock,
|
|
21
72
|
clearScrollWidthMock
|
|
22
73
|
} from "./mocks/scroll-width-mock.js";
|
|
74
|
+
import { setupFetchMock, clearFetchMock } from "./mocks/fetch-mock.js";
|
|
75
|
+
import {
|
|
76
|
+
setupTableVirtualizationMock,
|
|
77
|
+
clearTableVirtualizationMock
|
|
78
|
+
} from "./mocks/table-virtualization-mock.js";
|
|
79
|
+
import {
|
|
80
|
+
setupVirtualizationMock,
|
|
81
|
+
clearVirtualizationMock
|
|
82
|
+
} from "./mocks/virtualization-mock.js";
|
|
23
83
|
import {
|
|
24
84
|
setupTextEllipsisMock,
|
|
25
85
|
clearTextEllipsisMock
|
|
26
86
|
} from "./mocks/text-ellipsis-mock.js";
|
|
87
|
+
import {
|
|
88
|
+
setupFramerMotionMock,
|
|
89
|
+
clearFramerMotionMock
|
|
90
|
+
} from "./mocks/framer-motion-mock.js";
|
|
91
|
+
import {
|
|
92
|
+
setupElementFromPointMock,
|
|
93
|
+
clearElementFromPointMock
|
|
94
|
+
} from "./mocks/element-from-point-mock.js";
|
|
27
95
|
export {
|
|
28
|
-
clear,
|
|
29
96
|
clearCanvasMeasureTextMock,
|
|
97
|
+
clearCreateRangeMock,
|
|
30
98
|
clearDomRectMock,
|
|
99
|
+
clearElementFromPointMock,
|
|
100
|
+
clearFetchMock,
|
|
101
|
+
clearFramerMotionMock,
|
|
31
102
|
clearGetBoundingClientRectMock,
|
|
103
|
+
clearIntersectionObserverMock,
|
|
104
|
+
clearMatchMediaMock,
|
|
105
|
+
clearOffsetHeightMock,
|
|
106
|
+
clearOffsetWidthMock,
|
|
107
|
+
clearPointerEventMock,
|
|
32
108
|
clearResizeObserverMock,
|
|
109
|
+
clearScreenSizeMock,
|
|
110
|
+
clearScrollIntoViewMock,
|
|
33
111
|
clearScrollWidthMock,
|
|
112
|
+
clearTableVirtualizationMock,
|
|
34
113
|
clearTextEllipsisMock,
|
|
114
|
+
clearVirtualizationMock,
|
|
115
|
+
createMockElement,
|
|
116
|
+
getDataTableHelper,
|
|
117
|
+
getFilterFieldHelper,
|
|
118
|
+
getPasswordInputHelper,
|
|
119
|
+
getSearchInputHelper,
|
|
120
|
+
getSelectTestingHelper,
|
|
121
|
+
getTextInputHelper,
|
|
35
122
|
customRender as render,
|
|
36
|
-
setup,
|
|
37
123
|
setupCanvasMeasureTextMock,
|
|
124
|
+
setupCreateRangeMock,
|
|
38
125
|
setupDomRectMock,
|
|
126
|
+
setupElementFromPointMock,
|
|
127
|
+
setupFetchMock,
|
|
128
|
+
setupFramerMotionMock,
|
|
39
129
|
setupGetBoundingClientRectMock,
|
|
130
|
+
setupIntersectionObserverMock,
|
|
131
|
+
setupMatchMediaMock,
|
|
132
|
+
setupOffsetHeightMock,
|
|
133
|
+
setupOffsetWidthMock,
|
|
134
|
+
setupPointerEventMock,
|
|
40
135
|
setupResizeObserverMock,
|
|
136
|
+
setupScreenSizeMock,
|
|
137
|
+
setupScrollIntoViewMock,
|
|
41
138
|
setupScrollWidthMock,
|
|
139
|
+
setupTableVirtualizationMock,
|
|
42
140
|
setupTextEllipsisMock,
|
|
141
|
+
setupVirtualizationMock,
|
|
43
142
|
stratoPreset
|
|
44
143
|
};
|
|
45
144
|
//# sourceMappingURL=index.js.map
|
package/esm/jest/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/jest/index.ts"],
|
|
4
|
-
"sourcesContent": ["// we no longer re-export @testing-library/user-event or @testing-library/react\n// export * from '@testing-library/react';\n// import userEvent from '@testing-library/user-event';\n// export { userEvent };\n\nexport {\n customRender as render,\n type RenderWithIntlOptions,\n} from './custom-render.js';\n\n
|
|
5
|
-
"mappings": "AAKA;AAAA,EACkB;AAAA,OAEX;
|
|
4
|
+
"sourcesContent": ["// we no longer re-export @testing-library/user-event or @testing-library/react\n// export * from '@testing-library/react';\n// import userEvent from '@testing-library/user-event';\n// export { userEvent };\n\nimport '@testing-library/jest-dom';\n\nexport {\n customRender as render,\n type RenderWithIntlOptions,\n} from './custom-render.js';\n\nexport { stratoPreset } from './preset/index.js';\n\n///#region Testing Helpers\nexport {\n getTextInputHelper,\n type TextInputHelper,\n} from './testing-helpers/forms/text-input.js';\nexport {\n getPasswordInputHelper,\n type PasswordInputHelper,\n} from './testing-helpers/forms/password-input.js';\nexport {\n getSearchInputHelper,\n type SearchInputHelper,\n} from './testing-helpers/forms/search-input.js';\n\nexport {\n getDataTableHelper,\n type DataTableHelper,\n type DataTablePaginationHelper,\n type DataTableUserActionHelper,\n type DataTableSortingHelper,\n type DataTableRowSelectionHelper,\n type DataTableSubRowsHelper,\n type DataTableInteractiveRowsHelper,\n type DataTableDownloadHelper,\n type DataTableExpandableRowHelper,\n} from './testing-helpers/tables/datatable.js';\n\nexport type { BaseInputHelper } from './testing-helpers/forms/base-input.js';\n\nexport {\n getFilterFieldHelper,\n type FilterFieldHelper,\n type FilterFieldPinnedAndRecentSuggestionBase,\n type FilterFieldPinnedSuggestion,\n type FilterFieldRecentSuggestion,\n} from './testing-helpers/filters/filter-field.js';\n\nexport {\n getSelectTestingHelper,\n type SelectTestingHelper,\n} from './testing-helpers/forms/select.js';\n///#endregion Testing Helpers\n\n///#region Mocks\nexport {\n setupGetBoundingClientRectMock,\n clearGetBoundingClientRectMock,\n} from './mocks/bounding-client-rect-mock.js';\n\nexport { createMockElement } from './mocks/create-mock-element.js';\n\nexport {\n setupCanvasMeasureTextMock,\n clearCanvasMeasureTextMock,\n} from './mocks/canvas-mock.js';\n\nexport {\n setupResizeObserverMock,\n clearResizeObserverMock,\n} from './mocks/resize-observer-mock.js';\n\nexport {\n setupOffsetWidthMock,\n clearOffsetWidthMock,\n} from './mocks/offset-width-mock.js';\n\nexport {\n setupOffsetHeightMock,\n clearOffsetHeightMock,\n} from './mocks/offset-height-mock.js';\n\nexport { setupDomRectMock, clearDomRectMock } from './mocks/dom-rect-mock.js';\n\nexport {\n setupMatchMediaMock,\n clearMatchMediaMock,\n} from './mocks/match-media-mock.js';\n\nexport {\n setupPointerEventMock,\n clearPointerEventMock,\n} from './mocks/pointer-event-mock.js';\n\nexport {\n setupIntersectionObserverMock,\n clearIntersectionObserverMock,\n} from './mocks/intersection-observer-mock.js';\n\nexport {\n setupCreateRangeMock,\n clearCreateRangeMock,\n} from './mocks/create-range-mock.js';\n\nexport {\n setupScreenSizeMock,\n clearScreenSizeMock,\n} from './mocks/screen-size-mock.js';\n\nexport {\n setupScrollIntoViewMock,\n clearScrollIntoViewMock,\n} from './mocks/scroll-into-view-mock.js';\n\nexport {\n setupScrollWidthMock,\n clearScrollWidthMock,\n} from './mocks/scroll-width-mock.js';\n\nexport { setupFetchMock, clearFetchMock } from './mocks/fetch-mock.js';\n\nexport {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n setupTableVirtualizationMock,\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n clearTableVirtualizationMock,\n} from './mocks/table-virtualization-mock.js';\n\nexport {\n setupVirtualizationMock,\n clearVirtualizationMock,\n} from './mocks/virtualization-mock.js';\n\nexport {\n setupTextEllipsisMock,\n clearTextEllipsisMock,\n} from './mocks/text-ellipsis-mock.js';\n\nexport {\n setupFramerMotionMock,\n clearFramerMotionMock,\n} from './mocks/framer-motion-mock.js';\n\nexport {\n setupElementFromPointMock,\n clearElementFromPointMock,\n} from './mocks/element-from-point-mock.js';\n\n///#endregion Mocks\n"],
|
|
5
|
+
"mappings": "AAKA,OAAO;AAEP;AAAA,EACkB;AAAA,OAEX;AAEP,SAAS,oBAAoB;AAG7B;AAAA,EACE;AAAA,OAEK;AACP;AAAA,EACE;AAAA,OAEK;AACP;AAAA,EACE;AAAA,OAEK;AAEP;AAAA,EACE;AAAA,OAUK;AAIP;AAAA,EACE;AAAA,OAKK;AAEP;AAAA,EACE;AAAA,OAEK;AAIP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP,SAAS,yBAAyB;AAElC;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP,SAAS,kBAAkB,wBAAwB;AAEnD;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP,SAAS,gBAAgB,sBAAsB;AAE/C;AAAA,EAEE;AAAA,EAEA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,OACK;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
function createMockElement(elementOrTag, left, top, width, height) {
|
|
2
|
+
const el = typeof elementOrTag === "string" ? document.createElement(elementOrTag) : elementOrTag;
|
|
3
|
+
Object.assign(el.style, {
|
|
4
|
+
width: `${width}px`,
|
|
5
|
+
height: `${height}px`
|
|
6
|
+
});
|
|
7
|
+
el.getBoundingClientRect = () => ({
|
|
8
|
+
x: left,
|
|
9
|
+
y: top,
|
|
10
|
+
width,
|
|
11
|
+
height,
|
|
12
|
+
top,
|
|
13
|
+
left,
|
|
14
|
+
right: width + left,
|
|
15
|
+
bottom: height + top,
|
|
16
|
+
toJSON: () => null
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperties(el, {
|
|
19
|
+
offsetWidth: {
|
|
20
|
+
get() {
|
|
21
|
+
return parseFloat(this.style.width) || 0;
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
offsetHeight: {
|
|
25
|
+
get() {
|
|
26
|
+
return parseFloat(this.style.height) || 0;
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
offsetTop: {
|
|
30
|
+
get() {
|
|
31
|
+
return parseFloat(this.style.marginTop) || 0;
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
offsetLeft: {
|
|
35
|
+
get() {
|
|
36
|
+
return parseFloat(this.style.marginLeft) || 0;
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
clientWidth: {
|
|
40
|
+
configurable: true,
|
|
41
|
+
get: function() {
|
|
42
|
+
return this._jsdomMockClientWidth || this._clientWidth || 0;
|
|
43
|
+
},
|
|
44
|
+
set(val) {
|
|
45
|
+
this._clientWidth = val;
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
clientHeight: {
|
|
49
|
+
configurable: true,
|
|
50
|
+
get: function() {
|
|
51
|
+
return this._jsdomMockClientHight || this._clientHeight || 0;
|
|
52
|
+
},
|
|
53
|
+
set(val) {
|
|
54
|
+
this._clientHeight = val;
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
scrollWidth: {
|
|
58
|
+
configurable: true,
|
|
59
|
+
get: function() {
|
|
60
|
+
return this._scrollWidth || 0;
|
|
61
|
+
},
|
|
62
|
+
set(val) {
|
|
63
|
+
this._scrollWidth = val;
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
scrollHeight: {
|
|
67
|
+
configurable: true,
|
|
68
|
+
get: function() {
|
|
69
|
+
return this._scrollHeight || 0;
|
|
70
|
+
},
|
|
71
|
+
set(val) {
|
|
72
|
+
this._scrollHeight = val;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
return el;
|
|
77
|
+
}
|
|
78
|
+
export {
|
|
79
|
+
createMockElement
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=create-mock-element.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/jest/mocks/create-mock-element.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Creates a mock element: https://github.com/jsdom/jsdom/issues/653\n * @public\n */\nexport function createMockElement(\n /** Element tag name */\n elementOrTag: HTMLElement | string,\n /** Horizontal offset */\n left: number,\n /** Vertical offset */\n top: number,\n /** Element width */\n width: number,\n /** Element height */\n height: number,\n): HTMLElement {\n const el =\n typeof elementOrTag === 'string'\n ? document.createElement(elementOrTag)\n : elementOrTag;\n Object.assign(el.style, {\n width: `${width}px`,\n height: `${height}px`,\n });\n\n el.getBoundingClientRect = () => ({\n x: left,\n y: top,\n width,\n height,\n top,\n left,\n right: width + left,\n bottom: height + top,\n toJSON: () => null,\n });\n\n Object.defineProperties(el, {\n offsetWidth: {\n get() {\n return parseFloat(this.style.width) || 0;\n },\n },\n offsetHeight: {\n get() {\n return parseFloat(this.style.height) || 0;\n },\n },\n offsetTop: {\n get() {\n return parseFloat(this.style.marginTop) || 0;\n },\n },\n offsetLeft: {\n get() {\n return parseFloat(this.style.marginLeft) || 0;\n },\n },\n clientWidth: {\n configurable: true,\n get: function () {\n return this._jsdomMockClientWidth || this._clientWidth || 0;\n },\n set(val: number) {\n this._clientWidth = val;\n },\n },\n clientHeight: {\n configurable: true,\n get: function () {\n return this._jsdomMockClientHight || this._clientHeight || 0;\n },\n set(val: number) {\n this._clientHeight = val;\n },\n },\n scrollWidth: {\n configurable: true,\n get: function () {\n return this._scrollWidth || 0;\n },\n set(val: number) {\n this._scrollWidth = val;\n },\n },\n scrollHeight: {\n configurable: true,\n get: function () {\n return this._scrollHeight || 0;\n },\n set(val: number) {\n this._scrollHeight = val;\n },\n },\n });\n\n return el;\n}\n"],
|
|
5
|
+
"mappings": "AAIO,SAAS,kBAEd,cAEA,MAEA,KAEA,OAEA,QACa;AACb,QAAM,KACJ,OAAO,iBAAiB,WACpB,SAAS,cAAc,YAAY,IACnC;AACN,SAAO,OAAO,GAAG,OAAO;AAAA,IACtB,OAAO,GAAG,KAAK;AAAA,IACf,QAAQ,GAAG,MAAM;AAAA,EACnB,CAAC;AAED,KAAG,wBAAwB,OAAO;AAAA,IAChC,GAAG;AAAA,IACH,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,QAAQ;AAAA,IACf,QAAQ,SAAS;AAAA,IACjB,QAAQ,MAAM;AAAA,EAChB;AAEA,SAAO,iBAAiB,IAAI;AAAA,IAC1B,aAAa;AAAA,MACX,MAAM;AACJ,eAAO,WAAW,KAAK,MAAM,KAAK,KAAK;AAAA,MACzC;AAAA,IACF;AAAA,IACA,cAAc;AAAA,MACZ,MAAM;AACJ,eAAO,WAAW,KAAK,MAAM,MAAM,KAAK;AAAA,MAC1C;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AACJ,eAAO,WAAW,KAAK,MAAM,SAAS,KAAK;AAAA,MAC7C;AAAA,IACF;AAAA,IACA,YAAY;AAAA,MACV,MAAM;AACJ,eAAO,WAAW,KAAK,MAAM,UAAU,KAAK;AAAA,MAC9C;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,cAAc;AAAA,MACd,KAAK,WAAY;AACf,eAAO,KAAK,yBAAyB,KAAK,gBAAgB;AAAA,MAC5D;AAAA,MACA,IAAI,KAAa;AACf,aAAK,eAAe;AAAA,MACtB;AAAA,IACF;AAAA,IACA,cAAc;AAAA,MACZ,cAAc;AAAA,MACd,KAAK,WAAY;AACf,eAAO,KAAK,yBAAyB,KAAK,iBAAiB;AAAA,MAC7D;AAAA,MACA,IAAI,KAAa;AACf,aAAK,gBAAgB;AAAA,MACvB;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,cAAc;AAAA,MACd,KAAK,WAAY;AACf,eAAO,KAAK,gBAAgB;AAAA,MAC9B;AAAA,MACA,IAAI,KAAa;AACf,aAAK,eAAe;AAAA,MACtB;AAAA,IACF;AAAA,IACA,cAAc;AAAA,MACZ,cAAc;AAAA,MACd,KAAK,WAAY;AACf,eAAO,KAAK,iBAAiB;AAAA,MAC/B;AAAA,MACA,IAAI,KAAa;AACf,aAAK,gBAAgB;AAAA,MACvB;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jest } from "@jest/globals";
|
|
2
|
+
const pristineCreateRange = global.document.createRange;
|
|
3
|
+
function setupCreateRangeMock() {
|
|
4
|
+
Object.defineProperty(global.document, "createRange", {
|
|
5
|
+
writable: true,
|
|
6
|
+
value: () => {
|
|
7
|
+
const range = new Range();
|
|
8
|
+
range.getBoundingClientRect = jest.fn();
|
|
9
|
+
range.getClientRects = () => {
|
|
10
|
+
return {
|
|
11
|
+
item: () => null,
|
|
12
|
+
length: 0,
|
|
13
|
+
[Symbol.iterator]: function* () {
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
return range;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
function clearCreateRangeMock() {
|
|
22
|
+
global.document.createRange = pristineCreateRange;
|
|
23
|
+
}
|
|
24
|
+
export {
|
|
25
|
+
clearCreateRangeMock,
|
|
26
|
+
setupCreateRangeMock
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=create-range-mock.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/jest/mocks/create-range-mock.ts"],
|
|
4
|
+
"sourcesContent": ["// eslint-disable-next-line no-restricted-imports\nimport { jest } from '@jest/globals';\n\nconst pristineCreateRange = global.document.createRange;\n\n/**\n * Mocks the `document.createRange()` function so it returns\n * a valid `Range` object.\n * @public\n */\nexport function setupCreateRangeMock() {\n Object.defineProperty(global.document, 'createRange', {\n writable: true,\n value: () => {\n const range = new Range();\n\n range.getBoundingClientRect = jest.fn<() => DOMRect>();\n range.getClientRects = () => {\n return {\n item: () => null,\n length: 0,\n [Symbol.iterator]: function* () {\n // next: () => ({ done: true }),\n },\n };\n };\n\n return range;\n },\n });\n}\n\n/**\n * Clears mocked `document.createRange()` function.\n * @public\n */\nexport function clearCreateRangeMock() {\n global.document.createRange = pristineCreateRange;\n}\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,YAAY;AAErB,MAAM,sBAAsB,OAAO,SAAS;AAOrC,SAAS,uBAAuB;AACrC,SAAO,eAAe,OAAO,UAAU,eAAe;AAAA,IACpD,UAAU;AAAA,IACV,OAAO,MAAM;AACX,YAAM,QAAQ,IAAI,MAAM;AAExB,YAAM,wBAAwB,KAAK,GAAkB;AACrD,YAAM,iBAAiB,MAAM;AAC3B,eAAO;AAAA,UACL,MAAM,MAAM;AAAA,UACZ,QAAQ;AAAA,UACR,CAAC,OAAO,QAAQ,GAAG,aAAa;AAAA,UAEhC;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACH;AAMO,SAAS,uBAAuB;AACrC,SAAO,SAAS,cAAc;AAChC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
const pristineCrypto = global.crypto;
|
|
3
|
+
function setupCryptoMock() {
|
|
4
|
+
Object.defineProperty(globalThis, "crypto", {
|
|
5
|
+
value: {
|
|
6
|
+
randomUUID: () => crypto.randomUUID(),
|
|
7
|
+
getRandomValues: (typedArray) => crypto.getRandomValues(typedArray)
|
|
8
|
+
}
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
function clearCryptoMock() {
|
|
12
|
+
Object.defineProperty(globalThis, "crypto", {
|
|
13
|
+
value: pristineCrypto
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
clearCryptoMock,
|
|
18
|
+
setupCryptoMock
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=crypto-mock.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/jest/mocks/crypto-mock.ts"],
|
|
4
|
+
"sourcesContent": ["import crypto from 'node:crypto';\n\nconst pristineCrypto = global.crypto;\n\n/**\n * Mocks crypo web api that is generally available, but missing in jsdom version 20.\n *\n * @internal\n */\nexport function setupCryptoMock() {\n Object.defineProperty(globalThis, 'crypto', {\n value: {\n randomUUID: () => crypto.randomUUID(),\n getRandomValues: (typedArray) => crypto.getRandomValues(typedArray),\n },\n });\n}\n\n/**\n * Clears crypo web api mock.\n *\n * @internal\n */\nexport function clearCryptoMock() {\n Object.defineProperty(globalThis, 'crypto', {\n value: pristineCrypto,\n });\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,YAAY;AAEnB,MAAM,iBAAiB,OAAO;AAOvB,SAAS,kBAAkB;AAChC,SAAO,eAAe,YAAY,UAAU;AAAA,IAC1C,OAAO;AAAA,MACL,YAAY,MAAM,OAAO,WAAW;AAAA,MACpC,iBAAiB,CAAC,eAAe,OAAO,gBAAgB,UAAU;AAAA,IACpE;AAAA,EACF,CAAC;AACH;AAOO,SAAS,kBAAkB;AAChC,SAAO,eAAe,YAAY,UAAU;AAAA,IAC1C,OAAO;AAAA,EACT,CAAC;AACH;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/jest/mocks/dom-rect-mock.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Creates a DOMRect instance. Unspecified values default to `0`.\n * @internal\n */\nexport function createDOMRect(\n width: number,\n height?: number,\n x?: number,\n y?: number,\n top?: number,\n right?: number,\n bottom?: number,\n left?: number,\n): DOMRect {\n return {\n width,\n height: height ?? 0,\n x: x ?? 0,\n y: y ?? 0,\n top: top ?? 0,\n right: right ?? 0,\n bottom: bottom ?? 0,\n left: left ?? 0,\n toJSON: function () {\n const { toJSON, ...remainingProps } = this;\n\n return remainingProps;\n },\n };\n}\n\nexport const FALLBACK_DOM_RECT: DOMRect = Object.freeze(createDOMRect(0));\n\nconst prisitineDomRect = window.DOMRect;\n\n/**\n * Mocks the domRect since jsdom doesn't provide it\n * @param mockDomRect - Override values for DOMRect\n * @public\n */\nexport function setupDomRectMock(mockDomRect: DOMRect = FALLBACK_DOM_RECT) {\n Object.defineProperties(window, {\n DOMRect: {\n writable: true,\n value: {\n fromRect: () => mockDomRect,\n },\n },\n });\n}\n\n/**\n * Clears the DomRect\n * @public\n */\nexport function clearDomRectMock() {\n window.DOMRect = prisitineDomRect;\n}\n"],
|
|
5
|
-
"mappings": "AAIO,SAAS,cACd,OACA,QACA,GACA,GACA,KACA,OACA,QACA,MACS;AACT,SAAO;AAAA,IACL;AAAA,IACA,QAAQ,UAAU;AAAA,IAClB,GAAG,KAAK;AAAA,IACR,GAAG,KAAK;AAAA,IACR,KAAK,OAAO;AAAA,IACZ,OAAO,SAAS;AAAA,IAChB,QAAQ,UAAU;AAAA,IAClB,MAAM,QAAQ;AAAA,IACd,QAAQ,WAAY;AAClB,YAAM,EAAE,QAAQ,GAAG,eAAe,IAAI;AAEtC,aAAO;AAAA,IACT;AAAA,EACF;AACF;
|
|
4
|
+
"sourcesContent": ["/**\n * Creates a DOMRect instance. Unspecified values default to `0`.\n * @internal\n */\nexport function createDOMRect(\n width: number,\n height?: number,\n x?: number,\n y?: number,\n top?: number,\n right?: number,\n bottom?: number,\n left?: number,\n): DOMRect {\n return {\n width,\n height: height ?? 0,\n x: x ?? 0,\n y: y ?? 0,\n top: top ?? 0,\n right: right ?? 0,\n bottom: bottom ?? 0,\n left: left ?? 0,\n toJSON: function () {\n const { toJSON, ...remainingProps } = this;\n\n return remainingProps;\n },\n };\n}\n\n/** @internal */\nexport const FALLBACK_DOM_RECT: DOMRect = Object.freeze(createDOMRect(0));\n\nconst prisitineDomRect = window.DOMRect;\n\n/**\n * Mocks the domRect since jsdom doesn't provide it\n * @param mockDomRect - Override values for DOMRect\n * @public\n */\nexport function setupDomRectMock(mockDomRect: DOMRect = FALLBACK_DOM_RECT) {\n Object.defineProperties(window, {\n DOMRect: {\n writable: true,\n value: {\n fromRect: () => mockDomRect,\n },\n },\n });\n}\n\n/**\n * Clears the DomRect\n * @public\n */\nexport function clearDomRectMock() {\n window.DOMRect = prisitineDomRect;\n}\n"],
|
|
5
|
+
"mappings": "AAIO,SAAS,cACd,OACA,QACA,GACA,GACA,KACA,OACA,QACA,MACS;AACT,SAAO;AAAA,IACL;AAAA,IACA,QAAQ,UAAU;AAAA,IAClB,GAAG,KAAK;AAAA,IACR,GAAG,KAAK;AAAA,IACR,KAAK,OAAO;AAAA,IACZ,OAAO,SAAS;AAAA,IAChB,QAAQ,UAAU;AAAA,IAClB,MAAM,QAAQ;AAAA,IACd,QAAQ,WAAY;AAClB,YAAM,EAAE,QAAQ,GAAG,eAAe,IAAI;AAEtC,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAGO,MAAM,oBAA6B,OAAO,OAAO,cAAc,CAAC,CAAC;AAExE,MAAM,mBAAmB,OAAO;AAOzB,SAAS,iBAAiB,cAAuB,mBAAmB;AACzE,SAAO,iBAAiB,QAAQ;AAAA,IAC9B,SAAS;AAAA,MACP,UAAU;AAAA,MACV,OAAO;AAAA,QACL,UAAU,MAAM;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAMO,SAAS,mBAAmB;AACjC,SAAO,UAAU;AACnB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const prisitineElementFromPoint = document.elementFromPoint;
|
|
2
|
+
function setupElementFromPointMock(element = null) {
|
|
3
|
+
document.elementFromPoint = () => element;
|
|
4
|
+
}
|
|
5
|
+
function clearElementFromPointMock() {
|
|
6
|
+
document.elementFromPoint = prisitineElementFromPoint;
|
|
7
|
+
}
|
|
8
|
+
export {
|
|
9
|
+
clearElementFromPointMock,
|
|
10
|
+
setupElementFromPointMock
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=element-from-point-mock.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/jest/mocks/element-from-point-mock.ts"],
|
|
4
|
+
"sourcesContent": ["const prisitineElementFromPoint = document.elementFromPoint;\n\n/**\n * Mocks the elementFromPoint function since jsdom doesn't provide it\n * @param element - Override the element returned from elementFromPoint\n * @public\n */\nexport function setupElementFromPointMock(element: Element | null = null) {\n document.elementFromPoint = () => element;\n}\n\n/**\n * Clears the elementFromPoint mock.\n * @public\n */\nexport function clearElementFromPointMock() {\n document.elementFromPoint = prisitineElementFromPoint;\n}\n"],
|
|
5
|
+
"mappings": "AAAA,MAAM,4BAA4B,SAAS;AAOpC,SAAS,0BAA0B,UAA0B,MAAM;AACxE,WAAS,mBAAmB,MAAM;AACpC;AAMO,SAAS,4BAA4B;AAC1C,WAAS,mBAAmB;AAC9B;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jest } from "@jest/globals";
|
|
2
|
+
const pristineFetch = global.fetch;
|
|
3
|
+
function setupFetchMock(mockedValue = {
|
|
4
|
+
ok: true,
|
|
5
|
+
status: 200,
|
|
6
|
+
json: () => {
|
|
7
|
+
return {};
|
|
8
|
+
}
|
|
9
|
+
}) {
|
|
10
|
+
const mockedFetchPromise = Promise.resolve(mockedValue);
|
|
11
|
+
global.fetch = jest.fn(() => mockedFetchPromise);
|
|
12
|
+
}
|
|
13
|
+
function clearFetchMock() {
|
|
14
|
+
global.fetch = pristineFetch;
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
clearFetchMock,
|
|
18
|
+
setupFetchMock
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=fetch-mock.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/jest/mocks/fetch-mock.ts"],
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\n// eslint-disable-next-line no-restricted-imports\nimport { jest } from '@jest/globals';\n\nconst pristineFetch = global.fetch;\n\n/**\n * Mocks the global `fetch` function since JSDom has no implementation\n * @public\n */\nexport function setupFetchMock(\n mockedValue: any = {\n ok: true,\n status: 200,\n json: () => {\n return {};\n },\n },\n) {\n const mockedFetchPromise = Promise.resolve(mockedValue) as any;\n\n global.fetch = jest.fn(() => mockedFetchPromise as any);\n}\n\n/**\n * Clears mocked `fetch` function.\n * @public\n */\nexport function clearFetchMock() {\n global.fetch = pristineFetch;\n}\n"],
|
|
5
|
+
"mappings": "AAEA,SAAS,YAAY;AAErB,MAAM,gBAAgB,OAAO;AAMtB,SAAS,eACd,cAAmB;AAAA,EACjB,IAAI;AAAA,EACJ,QAAQ;AAAA,EACR,MAAM,MAAM;AACV,WAAO,CAAC;AAAA,EACV;AACF,GACA;AACA,QAAM,qBAAqB,QAAQ,QAAQ,WAAW;AAEtD,SAAO,QAAQ,KAAK,GAAG,MAAM,kBAAyB;AACxD;AAMO,SAAS,iBAAiB;AAC/B,SAAO,QAAQ;AACjB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { jest } from "@jest/globals";
|
|
3
|
+
import {
|
|
4
|
+
forwardRef
|
|
5
|
+
} from "react";
|
|
6
|
+
const actual = jest.requireActual("framer-motion");
|
|
7
|
+
function setupFramerMotionMock() {
|
|
8
|
+
const MockedTransition = jest.fn(({ children: children2 }) => children2);
|
|
9
|
+
const MockedAnimatePresence = jest.fn(({ children: children2 }) => /* @__PURE__ */ jsx(MockedTransition, { children: children2 }));
|
|
10
|
+
function motionMock(Component, _customMotionComponentConfig = {}) {
|
|
11
|
+
const motion = {
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment, @typescript-eslint/prefer-ts-expect-error
|
|
13
|
+
// @ts-ignore geo load has some weird type error here in the tests here.
|
|
14
|
+
div: forwardRef((props, forwardedRef) => (
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
16
|
+
// @ts-expect-error
|
|
17
|
+
/* @__PURE__ */ jsx("div", { ...props, ref: forwardedRef })
|
|
18
|
+
))
|
|
19
|
+
};
|
|
20
|
+
return forwardRef((props, forwardedRef) => {
|
|
21
|
+
const componentProps = Object.fromEntries(
|
|
22
|
+
// do not pass framer props to DOM element
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
24
|
+
Object.entries(props).filter(
|
|
25
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
26
|
+
// @ts-expect-error
|
|
27
|
+
([key]) => !actual.isValidMotionProp(key)
|
|
28
|
+
)
|
|
29
|
+
);
|
|
30
|
+
if (typeof Component === "string") {
|
|
31
|
+
const MotionComponent = motion[Component];
|
|
32
|
+
return /* @__PURE__ */ jsx(MotionComponent, { ...componentProps, ref: forwardedRef });
|
|
33
|
+
}
|
|
34
|
+
return (
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
36
|
+
// @ts-expect-error
|
|
37
|
+
/* @__PURE__ */ jsx(Component, { ref: forwardedRef, ...{ ...componentProps, children } })
|
|
38
|
+
);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
const motionProxy = new Proxy(motionMock, {
|
|
42
|
+
get: (_target, prop) => motionMock(prop)
|
|
43
|
+
});
|
|
44
|
+
return {
|
|
45
|
+
motion: motionProxy,
|
|
46
|
+
AnimatePresence: MockedAnimatePresence,
|
|
47
|
+
useReducedMotion: (value = true) => value,
|
|
48
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
49
|
+
cubicBezier: actual.cubicBezier
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function clearFramerMotionMock() {
|
|
53
|
+
jest.unmock("framer-motion");
|
|
54
|
+
}
|
|
55
|
+
export {
|
|
56
|
+
clearFramerMotionMock,
|
|
57
|
+
setupFramerMotionMock
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=framer-motion-mock.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/jest/mocks/framer-motion-mock.tsx"],
|
|
4
|
+
"sourcesContent": ["// eslint-disable-next-line no-restricted-imports\nimport { jest } from '@jest/globals';\nimport {\n type PropsWithChildren,\n ComponentType,\n type JSXElementConstructor,\n type ReactElement,\n RefAttributes,\n forwardRef,\n} from 'react';\n\nconst actual = jest.requireActual('framer-motion');\n\n// Copy from the framer motion types, as they are not exported any more.\ninterface CustomMotionComponentConfig {\n forwardMotionProps?: boolean;\n}\n\n/**\n * Mocks framer motion so children are rendered without animations for easier testing.\n * Needs to be called inside 'jest.mock' at the root level of the test,\n * since jest hoists 'jest.mock' to before any imports:\n *\n * jest.mock('framer-motion', () =\\> setupFramerMotionMock());\n * @public\n */\nexport function setupFramerMotionMock(): {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n motion: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n AnimatePresence: any;\n useReducedMotion: (value?: boolean) => boolean;\n cubicBezier: (\n mX1: number,\n mY1: number,\n mX2: number,\n mY2: number,\n ) => (t: number) => number;\n} {\n const MockedTransition = jest.fn(({ children }) => children);\n\n const MockedAnimatePresence = jest.fn(({ children }) => (\n <MockedTransition>{children}</MockedTransition>\n ));\n\n // Calling a motion with e.g. 'motion.div', the Component will be a string.\n // Calling a motion with e.g. 'motion(Flex)', the Component is the Flex component.\n // Depending on the type, we return either the corresponding html element or\n // the actual component, exluding all the framer-motion props.\n function motionMock<Props extends Record<string, unknown>>(\n Component: string | ComponentType<PropsWithChildren<Props>>,\n _customMotionComponentConfig: CustomMotionComponentConfig = {},\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): any {\n // Needs to be extended if we need other motion elements.\n const motion: Record<\n string,\n (\n props: RefAttributes<unknown>,\n ) => ReactElement<unknown, string | JSXElementConstructor<unknown>> | null\n > = {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment, @typescript-eslint/prefer-ts-expect-error\n // @ts-ignore geo load has some weird type error here in the tests here.\n div: forwardRef((props, forwardedRef) => (\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n <div {...props} ref={forwardedRef} />\n )),\n };\n\n return forwardRef((props, forwardedRef) => {\n const componentProps = Object.fromEntries(\n // do not pass framer props to DOM element\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(props as any).filter(\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n ([key]) => !actual.isValidMotionProp(key),\n ),\n );\n\n if (typeof Component === 'string') {\n const MotionComponent = motion[Component];\n return <MotionComponent {...componentProps} ref={forwardedRef} />;\n }\n\n return (\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n <Component ref={forwardedRef} {...{ ...componentProps, children }} />\n );\n });\n }\n\n const motionProxy = new Proxy(motionMock, {\n get: (_target, prop: string) => motionMock(prop),\n });\n\n return {\n motion: motionProxy,\n AnimatePresence: MockedAnimatePresence,\n useReducedMotion: (value = true) => value,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n cubicBezier: (actual as any).cubicBezier as (\n mX1: number,\n mY1: number,\n mX2: number,\n mY2: number,\n ) => (t: number) => number,\n };\n}\n\n/**\n * @public\n */\nexport function clearFramerMotionMock() {\n jest.unmock('framer-motion');\n}\n"],
|
|
5
|
+
"mappings": "AA0CI;AAzCJ,SAAS,YAAY;AACrB;AAAA,EAME;AAAA,OACK;AAEP,MAAM,SAAS,KAAK,cAAc,eAAe;AAe1C,SAAS,wBAYd;AACA,QAAM,mBAAmB,KAAK,GAAG,CAAC,EAAE,UAAAA,UAAS,MAAMA,SAAQ;AAE3D,QAAM,wBAAwB,KAAK,GAAG,CAAC,EAAE,UAAAA,UAAS,MAChD,oBAAC,oBAAkB,UAAAA,WAAS,CAC7B;AAMD,WAAS,WACP,WACA,+BAA4D,CAAC,GAExD;AAEL,UAAM,SAKF;AAAA;AAAA;AAAA,MAGF,KAAK,WAAW,CAAC,OAAO;AAAA;AAAA;AAAA,QAGtB,oBAAC,SAAK,GAAG,OAAO,KAAK,cAAc;AAAA,OACpC;AAAA,IACH;AAEA,WAAO,WAAW,CAAC,OAAO,iBAAiB;AACzC,YAAM,iBAAiB,OAAO;AAAA;AAAA;AAAA,QAG5B,OAAO,QAAQ,KAAY,EAAE;AAAA;AAAA;AAAA,UAG3B,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,kBAAkB,GAAG;AAAA,QAC1C;AAAA,MACF;AAEA,UAAI,OAAO,cAAc,UAAU;AACjC,cAAM,kBAAkB,OAAO,SAAS;AACxC,eAAO,oBAAC,mBAAiB,GAAG,gBAAgB,KAAK,cAAc;AAAA,MACjE;AAEA;AAAA;AAAA;AAAA,QAGE,oBAAC,aAAU,KAAK,cAAe,GAAG,EAAE,GAAG,gBAAgB,SAAS,GAAG;AAAA;AAAA,IAEvE,CAAC;AAAA,EACH;AAEA,QAAM,cAAc,IAAI,MAAM,YAAY;AAAA,IACxC,KAAK,CAAC,SAAS,SAAiB,WAAW,IAAI;AAAA,EACjD,CAAC;AAED,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,kBAAkB,CAAC,QAAQ,SAAS;AAAA;AAAA,IAEpC,aAAc,OAAe;AAAA,EAM/B;AACF;AAKO,SAAS,wBAAwB;AACtC,OAAK,OAAO,eAAe;AAC7B;",
|
|
6
|
+
"names": ["children"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jest } from "@jest/globals";
|
|
2
|
+
const pristineIntersectionObserver = window.IntersectionObserver;
|
|
3
|
+
function setupIntersectionObserverMock(entries = [
|
|
4
|
+
{
|
|
5
|
+
isIntersecting: true,
|
|
6
|
+
intersectionRatio: 1
|
|
7
|
+
}
|
|
8
|
+
]) {
|
|
9
|
+
class MockIntersectionObserver {
|
|
10
|
+
root = null;
|
|
11
|
+
rootMargin = "";
|
|
12
|
+
thresholds = [];
|
|
13
|
+
callback;
|
|
14
|
+
/**
|
|
15
|
+
* Mock constructor
|
|
16
|
+
* @param callback - callback function
|
|
17
|
+
* @param options - options
|
|
18
|
+
*/
|
|
19
|
+
constructor(callback, options) {
|
|
20
|
+
this.callback = callback;
|
|
21
|
+
}
|
|
22
|
+
disconnect = jest.fn();
|
|
23
|
+
observe = jest.fn(() => this.callback(entries));
|
|
24
|
+
takeRecords = jest.fn();
|
|
25
|
+
unobserve = jest.fn();
|
|
26
|
+
}
|
|
27
|
+
Object.defineProperty(global, "IntersectionObserver", {
|
|
28
|
+
writable: true,
|
|
29
|
+
configurable: true,
|
|
30
|
+
value: MockIntersectionObserver
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
function clearIntersectionObserverMock() {
|
|
34
|
+
global.IntersectionObserver = pristineIntersectionObserver;
|
|
35
|
+
}
|
|
36
|
+
export {
|
|
37
|
+
clearIntersectionObserverMock,
|
|
38
|
+
setupIntersectionObserverMock
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=intersection-observer-mock.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/jest/mocks/intersection-observer-mock.ts"],
|
|
4
|
+
"sourcesContent": ["// eslint-disable-next-line no-restricted-imports\nimport { jest } from '@jest/globals';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nconst pristineIntersectionObserver = window.IntersectionObserver;\n\n/**\n * Mocks the IntersectionObserver\n * @param entries - entries for the callback function which is called when IntersectionObserver.observe is invoked\n * @public\n */\nexport function setupIntersectionObserverMock(\n entries: any = [\n {\n isIntersecting: true,\n intersectionRatio: 1,\n },\n ],\n) {\n class MockIntersectionObserver implements IntersectionObserver {\n readonly root = null;\n readonly rootMargin: string = '';\n readonly thresholds: ReadonlyArray<number> = [];\n readonly callback;\n\n /**\n * Mock constructor\n * @param callback - callback function\n * @param options - options\n */\n constructor(callback: any, options?: any) {\n this.callback = callback;\n }\n\n disconnect: () => void = jest.fn();\n observe: (target: Element) => void = jest.fn(() => this.callback(entries));\n takeRecords: () => IntersectionObserverEntry[] =\n jest.fn<() => IntersectionObserverEntry[]>();\n unobserve: (target: Element) => void = jest.fn();\n }\n\n Object.defineProperty(global, 'IntersectionObserver', {\n writable: true,\n configurable: true,\n value: MockIntersectionObserver,\n });\n}\n\n/**\n * Clears `IntersectionObserver` mock.\n * @public\n */\nexport function clearIntersectionObserverMock() {\n global.IntersectionObserver = pristineIntersectionObserver;\n}\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,YAAY;AAIrB,MAAM,+BAA+B,OAAO;AAOrC,SAAS,8BACd,UAAe;AAAA,EACb;AAAA,IACE,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,EACrB;AACF,GACA;AAAA,EACA,MAAM,yBAAyD;AAAA,IACpD,OAAO;AAAA,IACP,aAAqB;AAAA,IACrB,aAAoC,CAAC;AAAA,IACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOT,YAAY,UAAe,SAAe;AACxC,WAAK,WAAW;AAAA,IAClB;AAAA,IAEA,aAAyB,KAAK,GAAG;AAAA,IACjC,UAAqC,KAAK,GAAG,MAAM,KAAK,SAAS,OAAO,CAAC;AAAA,IACzE,cACE,KAAK,GAAsC;AAAA,IAC7C,YAAuC,KAAK,GAAG;AAAA,EACjD;AAEA,SAAO,eAAe,QAAQ,wBAAwB;AAAA,IACpD,UAAU;AAAA,IACV,cAAc;AAAA,IACd,OAAO;AAAA,EACT,CAAC;AACH;AAMO,SAAS,gCAAgC;AAC9C,SAAO,uBAAuB;AAChC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jest } from "@jest/globals";
|
|
2
|
+
const prisitineMatchMedia = window.matchMedia;
|
|
3
|
+
function setupMatchMediaMock(isMatching = false) {
|
|
4
|
+
Object.defineProperty(window, "matchMedia", {
|
|
5
|
+
writable: true,
|
|
6
|
+
value: jest.fn().mockImplementation((query) => ({
|
|
7
|
+
matches: isMatching,
|
|
8
|
+
media: query,
|
|
9
|
+
onchange: null,
|
|
10
|
+
addListener: jest.fn(),
|
|
11
|
+
// Deprecated
|
|
12
|
+
removeListener: jest.fn(),
|
|
13
|
+
// Deprecated
|
|
14
|
+
addEventListener: jest.fn(),
|
|
15
|
+
removeEventListener: jest.fn(),
|
|
16
|
+
dispatchEvent: jest.fn()
|
|
17
|
+
}))
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
function clearMatchMediaMock() {
|
|
21
|
+
window.matchMedia = prisitineMatchMedia;
|
|
22
|
+
}
|
|
23
|
+
export {
|
|
24
|
+
clearMatchMediaMock,
|
|
25
|
+
setupMatchMediaMock
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=match-media-mock.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/jest/mocks/match-media-mock.ts"],
|
|
4
|
+
"sourcesContent": ["// eslint-disable-next-line no-restricted-imports\nimport { jest } from '@jest/globals';\n\nconst prisitineMatchMedia = window.matchMedia;\n\n/**\n * Mocks the match media on the window object\n * @param isMatching - whether or not the match query matches\n * @public\n */\nexport function setupMatchMediaMock(isMatching: boolean = false) {\n Object.defineProperty(window, 'matchMedia', {\n writable: true,\n value: jest.fn().mockImplementation((query) => ({\n matches: isMatching,\n media: query,\n onchange: null,\n addListener: jest.fn(), // Deprecated\n removeListener: jest.fn(), // Deprecated\n addEventListener: jest.fn(),\n removeEventListener: jest.fn(),\n dispatchEvent: jest.fn(),\n })),\n });\n}\n\n/**\n * Clears the Match Media mock\n * @public\n */\nexport function clearMatchMediaMock() {\n window.matchMedia = prisitineMatchMedia;\n}\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,YAAY;AAErB,MAAM,sBAAsB,OAAO;AAO5B,SAAS,oBAAoB,aAAsB,OAAO;AAC/D,SAAO,eAAe,QAAQ,cAAc;AAAA,IAC1C,UAAU;AAAA,IACV,OAAO,KAAK,GAAG,EAAE,mBAAmB,CAAC,WAAW;AAAA,MAC9C,SAAS;AAAA,MACT,OAAO;AAAA,MACP,UAAU;AAAA,MACV,aAAa,KAAK,GAAG;AAAA;AAAA,MACrB,gBAAgB,KAAK,GAAG;AAAA;AAAA,MACxB,kBAAkB,KAAK,GAAG;AAAA,MAC1B,qBAAqB,KAAK,GAAG;AAAA,MAC7B,eAAe,KAAK,GAAG;AAAA,IACzB,EAAE;AAAA,EACJ,CAAC;AACH;AAMO,SAAS,sBAAsB;AACpC,SAAO,aAAa;AACtB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const pristineOffsetHeightDescriptor = Object.getOwnPropertyDescriptor(
|
|
2
|
+
HTMLElement.prototype,
|
|
3
|
+
"offsetHeight"
|
|
4
|
+
);
|
|
5
|
+
function setupOffsetHeightMock(containerHeightOrMockFn) {
|
|
6
|
+
Object.defineProperty(HTMLElement.prototype, "offsetHeight", {
|
|
7
|
+
configurable: true,
|
|
8
|
+
get: typeof containerHeightOrMockFn === "number" ? () => containerHeightOrMockFn : containerHeightOrMockFn
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
function clearOffsetHeightMock() {
|
|
12
|
+
Object.defineProperty(HTMLElement.prototype, "offsetHeight", {
|
|
13
|
+
configurable: true,
|
|
14
|
+
get: pristineOffsetHeightDescriptor?.get ?? (() => 0)
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
clearOffsetHeightMock,
|
|
19
|
+
setupOffsetHeightMock
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=offset-height-mock.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/jest/mocks/offset-height-mock.ts"],
|
|
4
|
+
"sourcesContent": ["const pristineOffsetHeightDescriptor = Object.getOwnPropertyDescriptor(\n HTMLElement.prototype,\n 'offsetHeight',\n);\n\n/**\n * Mocks the return value of the offsetHeight property on all HTMLElements.\n * @public\n */\nexport function setupOffsetHeightMock(\n containerHeightOrMockFn: number | (() => number),\n) {\n Object.defineProperty(HTMLElement.prototype, 'offsetHeight', {\n configurable: true,\n get:\n typeof containerHeightOrMockFn === 'number'\n ? () => containerHeightOrMockFn\n : containerHeightOrMockFn,\n });\n}\n\n/**\n * Clears mocked offsetHeight property on HTMLElements.\n * @public\n */\nexport function clearOffsetHeightMock() {\n Object.defineProperty(HTMLElement.prototype, 'offsetHeight', {\n configurable: true,\n get: pristineOffsetHeightDescriptor?.get ?? (() => 0),\n });\n}\n"],
|
|
5
|
+
"mappings": "AAAA,MAAM,iCAAiC,OAAO;AAAA,EAC5C,YAAY;AAAA,EACZ;AACF;AAMO,SAAS,sBACd,yBACA;AACA,SAAO,eAAe,YAAY,WAAW,gBAAgB;AAAA,IAC3D,cAAc;AAAA,IACd,KACE,OAAO,4BAA4B,WAC/B,MAAM,0BACN;AAAA,EACR,CAAC;AACH;AAMO,SAAS,wBAAwB;AACtC,SAAO,eAAe,YAAY,WAAW,gBAAgB;AAAA,IAC3D,cAAc;AAAA,IACd,KAAK,gCAAgC,QAAQ,MAAM;AAAA,EACrD,CAAC;AACH;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const pristineOffsetWidthDescriptor = Object.getOwnPropertyDescriptor(
|
|
2
|
+
HTMLElement.prototype,
|
|
3
|
+
"offsetWidth"
|
|
4
|
+
);
|
|
5
|
+
function setupOffsetWidthMock(containerWidthOrMockFn) {
|
|
6
|
+
Object.defineProperty(HTMLElement.prototype, "offsetWidth", {
|
|
7
|
+
configurable: true,
|
|
8
|
+
get: typeof containerWidthOrMockFn === "number" ? () => containerWidthOrMockFn : containerWidthOrMockFn
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
function clearOffsetWidthMock() {
|
|
12
|
+
Object.defineProperty(HTMLElement.prototype, "offsetWidth", {
|
|
13
|
+
configurable: true,
|
|
14
|
+
get: pristineOffsetWidthDescriptor?.get ?? (() => 0)
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
clearOffsetWidthMock,
|
|
19
|
+
setupOffsetWidthMock
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=offset-width-mock.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/jest/mocks/offset-width-mock.ts"],
|
|
4
|
+
"sourcesContent": ["const pristineOffsetWidthDescriptor = Object.getOwnPropertyDescriptor(\n HTMLElement.prototype,\n 'offsetWidth',\n);\n\n/**\n * Mocks the return value of the offsetWidth property on all HTMLElements.\n * @public\n */\nexport function setupOffsetWidthMock(\n containerWidthOrMockFn: number | (() => number),\n) {\n Object.defineProperty(HTMLElement.prototype, 'offsetWidth', {\n configurable: true,\n get:\n typeof containerWidthOrMockFn === 'number'\n ? () => containerWidthOrMockFn\n : containerWidthOrMockFn,\n });\n}\n\n/**\n * Clears mocked offsetWidth property on HTMLElements.\n * @public\n */\nexport function clearOffsetWidthMock() {\n Object.defineProperty(HTMLElement.prototype, 'offsetWidth', {\n configurable: true,\n get: pristineOffsetWidthDescriptor?.get ?? (() => 0),\n });\n}\n"],
|
|
5
|
+
"mappings": "AAAA,MAAM,gCAAgC,OAAO;AAAA,EAC3C,YAAY;AAAA,EACZ;AACF;AAMO,SAAS,qBACd,wBACA;AACA,SAAO,eAAe,YAAY,WAAW,eAAe;AAAA,IAC1D,cAAc;AAAA,IACd,KACE,OAAO,2BAA2B,WAC9B,MAAM,yBACN;AAAA,EACR,CAAC;AACH;AAMO,SAAS,uBAAuB;AACrC,SAAO,eAAe,YAAY,WAAW,eAAe;AAAA,IAC1D,cAAc;AAAA,IACd,KAAK,+BAA+B,QAAQ,MAAM;AAAA,EACpD,CAAC;AACH;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|