@pie-element/passage 5.1.0 → 5.2.0-mui-update.0

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 CHANGED
@@ -3,6 +3,72 @@
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
+ ## [5.3.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/passage@5.3.2...@pie-element/passage@5.3.3) (2025-11-27)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * bump libs PD-5274, PD-5211, PD-5248 ([7610b25](https://github.com/pie-framework/pie-elements/commit/7610b25423956b6492f33322513b3430051fca77))
12
+
13
+
14
+
15
+
16
+
17
+ ## [5.3.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/passage@5.3.1...@pie-element/passage@5.3.2) (2025-10-22)
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * bump libs PD-5265 ([184a978](https://github.com/pie-framework/pie-elements/commit/184a978f57a2a84dc6ba87c1eba0b92d5cdd9eae))
23
+
24
+
25
+
26
+
27
+
28
+ ## [5.3.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/passage@5.2.1...@pie-element/passage@5.3.1) (2025-10-16)
29
+
30
+
31
+ ### Bug Fixes
32
+
33
+ * bump pie-lib versions and pslb module versions ([393d39f](https://github.com/pie-framework/pie-elements/commit/393d39fb850ad055568f4d20464213e9043f208f))
34
+
35
+
36
+
37
+
38
+
39
+ # [5.3.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/passage@5.2.0...@pie-element/passage@5.3.0) (2025-10-15)
40
+
41
+
42
+ ### Bug Fixes
43
+
44
+ * bump libs ([2616ab2](https://github.com/pie-framework/pie-elements/commit/2616ab24f776f4df02302f5855c381ee52527665))
45
+
46
+
47
+
48
+
49
+
50
+ ## [5.2.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/passage@5.2.0...@pie-element/passage@5.2.1) (2025-10-14)
51
+
52
+
53
+ ### Bug Fixes
54
+
55
+ * bump libs ([2616ab2](https://github.com/pie-framework/pie-elements/commit/2616ab24f776f4df02302f5855c381ee52527665))
56
+
57
+
58
+
59
+
60
+
61
+ # [5.2.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/passage@5.0.0...@pie-element/passage@5.2.0) (2025-10-10)
62
+
63
+
64
+ ### Features
65
+
66
+ * update libs PD-5208, PD-5211, PD-5199, PD-5218, PD-5217 ([da327fa](https://github.com/pie-framework/pie-elements/commit/da327fa501f6e9eff1c0b30b5ef092426a91f78b))
67
+
68
+
69
+
70
+
71
+
6
72
  # [5.1.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/passage@4.0.0...@pie-element/passage@5.1.0) (2025-10-07)
7
73
 
8
74
  **Note:** Version bump only for package @pie-element/passage
@@ -3,6 +3,72 @@
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
+ ## [3.3.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/passage-configure@3.3.2...@pie-element/passage-configure@3.3.3) (2025-11-27)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * bump libs PD-5274, PD-5211, PD-5248 ([7610b25](https://github.com/pie-framework/pie-elements/commit/7610b25423956b6492f33322513b3430051fca77))
12
+
13
+
14
+
15
+
16
+
17
+ ## [3.3.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/passage-configure@3.3.1...@pie-element/passage-configure@3.3.2) (2025-10-22)
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * bump libs PD-5265 ([184a978](https://github.com/pie-framework/pie-elements/commit/184a978f57a2a84dc6ba87c1eba0b92d5cdd9eae))
23
+
24
+
25
+
26
+
27
+
28
+ ## [3.3.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/passage-configure@3.2.1...@pie-element/passage-configure@3.3.1) (2025-10-16)
29
+
30
+
31
+ ### Bug Fixes
32
+
33
+ * bump pie-lib versions and pslb module versions ([393d39f](https://github.com/pie-framework/pie-elements/commit/393d39fb850ad055568f4d20464213e9043f208f))
34
+
35
+
36
+
37
+
38
+
39
+ # [3.3.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/passage-configure@3.2.0...@pie-element/passage-configure@3.3.0) (2025-10-15)
40
+
41
+
42
+ ### Bug Fixes
43
+
44
+ * bump libs ([2616ab2](https://github.com/pie-framework/pie-elements/commit/2616ab24f776f4df02302f5855c381ee52527665))
45
+
46
+
47
+
48
+
49
+
50
+ ## [3.2.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/passage-configure@3.2.0...@pie-element/passage-configure@3.2.1) (2025-10-14)
51
+
52
+
53
+ ### Bug Fixes
54
+
55
+ * bump libs ([2616ab2](https://github.com/pie-framework/pie-elements/commit/2616ab24f776f4df02302f5855c381ee52527665))
56
+
57
+
58
+
59
+
60
+
61
+ # [3.2.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/passage-configure@3.0.1...@pie-element/passage-configure@3.2.0) (2025-10-10)
62
+
63
+
64
+ ### Features
65
+
66
+ * update libs PD-5208, PD-5211, PD-5199, PD-5218, PD-5217 ([da327fa](https://github.com/pie-framework/pie-elements/commit/da327fa501f6e9eff1c0b30b5ef092426a91f78b))
67
+
68
+
69
+
70
+
71
+
6
72
  # [3.1.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/passage-configure@3.0.0...@pie-element/passage-configure@3.1.0) (2025-10-07)
7
73
 
8
74
  **Note:** Version bump only for package @pie-element/passage-configure
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
5
+ var _react = _interopRequireDefault(require("react"));
6
+ var _enzyme = require("enzyme");
7
+ var _design = require("../design");
8
+ jest.mock('@pie-lib/config-ui', () => ({
9
+ layout: {
10
+ ConfigLayout: props => /*#__PURE__*/_react.default.createElement("div", {
11
+ className: "mockConfigLayout"
12
+ }, props.children)
13
+ },
14
+ settings: {
15
+ Panel: props => /*#__PURE__*/_react.default.createElement("div", {
16
+ className: "mockPanel",
17
+ onClick: props.onChange
18
+ }),
19
+ toggle: (label, defaultVal = false) => true,
20
+ dropdown: jest.fn()
21
+ }
22
+ }));
23
+ jest.mock('../common', () => ({
24
+ ConfimationDialog: props => /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
25
+ className: "mockDialog"
26
+ }, props)),
27
+ PassageButton: props => /*#__PURE__*/_react.default.createElement("button", {
28
+ className: "mockPassageButton",
29
+ onClick: props.onClick
30
+ }, props.label)
31
+ }));
32
+ jest.mock('../passage', () => props => /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
33
+ className: "mockPassage"
34
+ }, props)));
35
+ describe('Main Component - Unit Method Tests', () => {
36
+ let wrapper, instance, onModelChanged;
37
+ const basePassage = {
38
+ teacherInstructions: '',
39
+ title: '',
40
+ subtitle: '',
41
+ author: '',
42
+ text: ''
43
+ };
44
+ const baseModel = {
45
+ passages: [basePassage],
46
+ language: 'en'
47
+ };
48
+ const configuration = {
49
+ additionalPassage: {
50
+ label: 'Additional Passage',
51
+ settings: true,
52
+ enabled: true
53
+ },
54
+ teacherInstructions: {
55
+ label: 'Teacher Instructions',
56
+ settings: true
57
+ },
58
+ title: {
59
+ label: 'Title',
60
+ settings: true
61
+ },
62
+ subtitle: {
63
+ label: 'Subtitle',
64
+ settings: true
65
+ },
66
+ author: {
67
+ label: 'Author',
68
+ settings: true
69
+ },
70
+ text: {
71
+ label: 'Text',
72
+ settings: true
73
+ }
74
+ };
75
+ const props = {
76
+ model: baseModel,
77
+ configuration,
78
+ imageSupport: {},
79
+ uploadSoundSupport: {},
80
+ classes: {
81
+ additionalPassageHeading: 'heading'
82
+ },
83
+ onModelChanged: jest.fn(),
84
+ onConfigurationChanged: jest.fn()
85
+ };
86
+ beforeEach(() => {
87
+ onModelChanged = jest.fn();
88
+ wrapper = (0, _enzyme.shallow)(/*#__PURE__*/_react.default.createElement(_design.Main, (0, _extends2.default)({}, props, {
89
+ onModelChanged: onModelChanged
90
+ })));
91
+ instance = wrapper.instance();
92
+ });
93
+ it('getInnerText removes HTML tags', () => {
94
+ expect(instance.getInnerText('<p>Test <strong>123</strong></p>')).toBe('Test 123');
95
+ expect(instance.getInnerText('')).toBe('');
96
+ expect(instance.getInnerText(null)).toBe('');
97
+ expect(instance.getInnerText('<img src="x" />')).toBe('');
98
+ });
99
+ it('addAdditionalPassage adds an empty passage and calls onModelChanged', () => {
100
+ instance.addAdditionalPassage();
101
+ expect(onModelChanged).toHaveBeenCalledWith({
102
+ ...baseModel,
103
+ passages: [...baseModel.passages, {
104
+ teacherInstructions: '',
105
+ title: '',
106
+ subtitle: '',
107
+ author: '',
108
+ text: ''
109
+ }]
110
+ });
111
+ });
112
+ it('removeAdditionalPassage calls onDelete directly for empty passage', () => {
113
+ const modelWithTwo = {
114
+ ...baseModel,
115
+ passages: [basePassage, basePassage]
116
+ };
117
+ wrapper.setProps({
118
+ model: modelWithTwo
119
+ });
120
+ instance = wrapper.instance();
121
+ const onDeleteSpy = jest.spyOn(instance, 'onDelete');
122
+ instance.removeAdditionalPassage(1);
123
+ expect(onDeleteSpy).toHaveBeenCalledWith(modelWithTwo, 1, onModelChanged);
124
+ });
125
+ it('removeAdditionalPassage sets dialog state if passage has content', () => {
126
+ const modelWithContent = {
127
+ ...baseModel,
128
+ passages: [basePassage, {
129
+ ...basePassage,
130
+ teacherInstructions: '<p>Filled</p>'
131
+ }]
132
+ };
133
+ wrapper.setProps({
134
+ model: modelWithContent
135
+ });
136
+ instance.removeAdditionalPassage(1);
137
+ expect(wrapper.state()).toEqual({
138
+ showConfirmationDialog: true,
139
+ indexToRemove: 1
140
+ });
141
+ });
142
+ it('onDelete removes passage at index and resets confirmation state', () => {
143
+ const modelWithTwo = {
144
+ ...baseModel,
145
+ passages: [{
146
+ teacherInstructions: 'Keep'
147
+ }, {
148
+ teacherInstructions: 'Remove'
149
+ }]
150
+ };
151
+ wrapper.setProps({
152
+ model: modelWithTwo
153
+ });
154
+ instance.onDelete(modelWithTwo, 1, onModelChanged);
155
+ expect(onModelChanged).toHaveBeenCalledWith({
156
+ ...modelWithTwo,
157
+ passages: [{
158
+ teacherInstructions: 'Keep'
159
+ }]
160
+ });
161
+ expect(wrapper.state()).toEqual({
162
+ showConfirmationDialog: false,
163
+ indexToRemove: -1
164
+ });
165
+ });
166
+ });
167
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9lbnp5bWUiLCJfZGVzaWduIiwiamVzdCIsIm1vY2siLCJsYXlvdXQiLCJDb25maWdMYXlvdXQiLCJwcm9wcyIsImRlZmF1bHQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiY2hpbGRyZW4iLCJzZXR0aW5ncyIsIlBhbmVsIiwib25DbGljayIsIm9uQ2hhbmdlIiwidG9nZ2xlIiwibGFiZWwiLCJkZWZhdWx0VmFsIiwiZHJvcGRvd24iLCJmbiIsIkNvbmZpbWF0aW9uRGlhbG9nIiwiX2V4dGVuZHMyIiwiUGFzc2FnZUJ1dHRvbiIsImRlc2NyaWJlIiwid3JhcHBlciIsImluc3RhbmNlIiwib25Nb2RlbENoYW5nZWQiLCJiYXNlUGFzc2FnZSIsInRlYWNoZXJJbnN0cnVjdGlvbnMiLCJ0aXRsZSIsInN1YnRpdGxlIiwiYXV0aG9yIiwidGV4dCIsImJhc2VNb2RlbCIsInBhc3NhZ2VzIiwibGFuZ3VhZ2UiLCJjb25maWd1cmF0aW9uIiwiYWRkaXRpb25hbFBhc3NhZ2UiLCJlbmFibGVkIiwibW9kZWwiLCJpbWFnZVN1cHBvcnQiLCJ1cGxvYWRTb3VuZFN1cHBvcnQiLCJjbGFzc2VzIiwiYWRkaXRpb25hbFBhc3NhZ2VIZWFkaW5nIiwib25Db25maWd1cmF0aW9uQ2hhbmdlZCIsImJlZm9yZUVhY2giLCJzaGFsbG93IiwiTWFpbiIsIml0IiwiZXhwZWN0IiwiZ2V0SW5uZXJUZXh0IiwidG9CZSIsImFkZEFkZGl0aW9uYWxQYXNzYWdlIiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJtb2RlbFdpdGhUd28iLCJzZXRQcm9wcyIsIm9uRGVsZXRlU3B5Iiwic3B5T24iLCJyZW1vdmVBZGRpdGlvbmFsUGFzc2FnZSIsIm1vZGVsV2l0aENvbnRlbnQiLCJzdGF0ZSIsInRvRXF1YWwiLCJzaG93Q29uZmlybWF0aW9uRGlhbG9nIiwiaW5kZXhUb1JlbW92ZSIsIm9uRGVsZXRlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9tYWluLnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHNoYWxsb3cgfSBmcm9tICdlbnp5bWUnO1xuaW1wb3J0IHsgTWFpbiB9IGZyb20gJy4uL2Rlc2lnbic7XG5cbmplc3QubW9jaygnQHBpZS1saWIvY29uZmlnLXVpJywgKCkgPT4gKHtcbiAgbGF5b3V0OiB7XG4gICAgQ29uZmlnTGF5b3V0OiAocHJvcHMpID0+IDxkaXYgY2xhc3NOYW1lPVwibW9ja0NvbmZpZ0xheW91dFwiPntwcm9wcy5jaGlsZHJlbn08L2Rpdj4sXG4gIH0sXG4gIHNldHRpbmdzOiB7XG4gICAgUGFuZWw6IChwcm9wcykgPT4gPGRpdiBjbGFzc05hbWU9XCJtb2NrUGFuZWxcIiBvbkNsaWNrPXtwcm9wcy5vbkNoYW5nZX0gLz4sXG4gICAgdG9nZ2xlOiAobGFiZWwsIGRlZmF1bHRWYWwgPSBmYWxzZSkgPT4gdHJ1ZSxcbiAgICBkcm9wZG93bjogamVzdC5mbigpLFxuICB9LFxufSkpO1xuXG5qZXN0Lm1vY2soJy4uL2NvbW1vbicsICgpID0+ICh7XG4gIENvbmZpbWF0aW9uRGlhbG9nOiAocHJvcHMpID0+IDxkaXYgY2xhc3NOYW1lPVwibW9ja0RpYWxvZ1wiIHsuLi5wcm9wc30gLz4sXG4gIFBhc3NhZ2VCdXR0b246IChwcm9wcykgPT4gKFxuICAgIDxidXR0b24gY2xhc3NOYW1lPVwibW9ja1Bhc3NhZ2VCdXR0b25cIiBvbkNsaWNrPXtwcm9wcy5vbkNsaWNrfT5cbiAgICAgIHtwcm9wcy5sYWJlbH1cbiAgICA8L2J1dHRvbj5cbiAgKSxcbn0pKTtcblxuamVzdC5tb2NrKCcuLi9wYXNzYWdlJywgKCkgPT4gKHByb3BzKSA9PiA8ZGl2IGNsYXNzTmFtZT1cIm1vY2tQYXNzYWdlXCIgey4uLnByb3BzfSAvPik7XG5cbmRlc2NyaWJlKCdNYWluIENvbXBvbmVudCAtIFVuaXQgTWV0aG9kIFRlc3RzJywgKCkgPT4ge1xuICBsZXQgd3JhcHBlciwgaW5zdGFuY2UsIG9uTW9kZWxDaGFuZ2VkO1xuXG4gIGNvbnN0IGJhc2VQYXNzYWdlID0ge1xuICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6ICcnLFxuICAgIHRpdGxlOiAnJyxcbiAgICBzdWJ0aXRsZTogJycsXG4gICAgYXV0aG9yOiAnJyxcbiAgICB0ZXh0OiAnJyxcbiAgfTtcblxuICBjb25zdCBiYXNlTW9kZWwgPSB7XG4gICAgcGFzc2FnZXM6IFtiYXNlUGFzc2FnZV0sXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gIH07XG5cbiAgY29uc3QgY29uZmlndXJhdGlvbiA9IHtcbiAgICBhZGRpdGlvbmFsUGFzc2FnZTogeyBsYWJlbDogJ0FkZGl0aW9uYWwgUGFzc2FnZScsIHNldHRpbmdzOiB0cnVlLCBlbmFibGVkOiB0cnVlIH0sXG4gICAgdGVhY2hlckluc3RydWN0aW9uczogeyBsYWJlbDogJ1RlYWNoZXIgSW5zdHJ1Y3Rpb25zJywgc2V0dGluZ3M6IHRydWUgfSxcbiAgICB0aXRsZTogeyBsYWJlbDogJ1RpdGxlJywgc2V0dGluZ3M6IHRydWUgfSxcbiAgICBzdWJ0aXRsZTogeyBsYWJlbDogJ1N1YnRpdGxlJywgc2V0dGluZ3M6IHRydWUgfSxcbiAgICBhdXRob3I6IHsgbGFiZWw6ICdBdXRob3InLCBzZXR0aW5nczogdHJ1ZSB9LFxuICAgIHRleHQ6IHsgbGFiZWw6ICdUZXh0Jywgc2V0dGluZ3M6IHRydWUgfSxcbiAgfTtcblxuICBjb25zdCBwcm9wcyA9IHtcbiAgICBtb2RlbDogYmFzZU1vZGVsLFxuICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgaW1hZ2VTdXBwb3J0OiB7fSxcbiAgICB1cGxvYWRTb3VuZFN1cHBvcnQ6IHt9LFxuICAgIGNsYXNzZXM6IHsgYWRkaXRpb25hbFBhc3NhZ2VIZWFkaW5nOiAnaGVhZGluZycgfSxcbiAgICBvbk1vZGVsQ2hhbmdlZDogamVzdC5mbigpLFxuICAgIG9uQ29uZmlndXJhdGlvbkNoYW5nZWQ6IGplc3QuZm4oKSxcbiAgfTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvbk1vZGVsQ2hhbmdlZCA9IGplc3QuZm4oKTtcbiAgICB3cmFwcGVyID0gc2hhbGxvdyg8TWFpbiB7Li4ucHJvcHN9IG9uTW9kZWxDaGFuZ2VkPXtvbk1vZGVsQ2hhbmdlZH0gLz4pO1xuICAgIGluc3RhbmNlID0gd3JhcHBlci5pbnN0YW5jZSgpO1xuICB9KTtcblxuICBpdCgnZ2V0SW5uZXJUZXh0IHJlbW92ZXMgSFRNTCB0YWdzJywgKCkgPT4ge1xuICAgIGV4cGVjdChpbnN0YW5jZS5nZXRJbm5lclRleHQoJzxwPlRlc3QgPHN0cm9uZz4xMjM8L3N0cm9uZz48L3A+JykpLnRvQmUoJ1Rlc3QgMTIzJyk7XG4gICAgZXhwZWN0KGluc3RhbmNlLmdldElubmVyVGV4dCgnJykpLnRvQmUoJycpO1xuICAgIGV4cGVjdChpbnN0YW5jZS5nZXRJbm5lclRleHQobnVsbCkpLnRvQmUoJycpO1xuICAgIGV4cGVjdChpbnN0YW5jZS5nZXRJbm5lclRleHQoJzxpbWcgc3JjPVwieFwiIC8+JykpLnRvQmUoJycpO1xuICB9KTtcblxuICBpdCgnYWRkQWRkaXRpb25hbFBhc3NhZ2UgYWRkcyBhbiBlbXB0eSBwYXNzYWdlIGFuZCBjYWxscyBvbk1vZGVsQ2hhbmdlZCcsICgpID0+IHtcbiAgICBpbnN0YW5jZS5hZGRBZGRpdGlvbmFsUGFzc2FnZSgpO1xuXG4gICAgZXhwZWN0KG9uTW9kZWxDaGFuZ2VkKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAuLi5iYXNlTW9kZWwsXG4gICAgICBwYXNzYWdlczogWy4uLmJhc2VNb2RlbC5wYXNzYWdlcywgeyB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnJywgdGl0bGU6ICcnLCBzdWJ0aXRsZTogJycsIGF1dGhvcjogJycsIHRleHQ6ICcnIH1dLFxuICAgIH0pO1xuICB9KTtcblxuICBpdCgncmVtb3ZlQWRkaXRpb25hbFBhc3NhZ2UgY2FsbHMgb25EZWxldGUgZGlyZWN0bHkgZm9yIGVtcHR5IHBhc3NhZ2UnLCAoKSA9PiB7XG4gICAgY29uc3QgbW9kZWxXaXRoVHdvID0ge1xuICAgICAgLi4uYmFzZU1vZGVsLFxuICAgICAgcGFzc2FnZXM6IFtiYXNlUGFzc2FnZSwgYmFzZVBhc3NhZ2VdLFxuICAgIH07XG5cbiAgICB3cmFwcGVyLnNldFByb3BzKHsgbW9kZWw6IG1vZGVsV2l0aFR3byB9KTtcbiAgICBpbnN0YW5jZSA9IHdyYXBwZXIuaW5zdGFuY2UoKTtcblxuICAgIGNvbnN0IG9uRGVsZXRlU3B5ID0gamVzdC5zcHlPbihpbnN0YW5jZSwgJ29uRGVsZXRlJyk7XG4gICAgaW5zdGFuY2UucmVtb3ZlQWRkaXRpb25hbFBhc3NhZ2UoMSk7XG5cbiAgICBleHBlY3Qob25EZWxldGVTcHkpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKG1vZGVsV2l0aFR3bywgMSwgb25Nb2RlbENoYW5nZWQpO1xuICB9KTtcblxuICBpdCgncmVtb3ZlQWRkaXRpb25hbFBhc3NhZ2Ugc2V0cyBkaWFsb2cgc3RhdGUgaWYgcGFzc2FnZSBoYXMgY29udGVudCcsICgpID0+IHtcbiAgICBjb25zdCBtb2RlbFdpdGhDb250ZW50ID0ge1xuICAgICAgLi4uYmFzZU1vZGVsLFxuICAgICAgcGFzc2FnZXM6IFtiYXNlUGFzc2FnZSwgeyAuLi5iYXNlUGFzc2FnZSwgdGVhY2hlckluc3RydWN0aW9uczogJzxwPkZpbGxlZDwvcD4nIH1dLFxuICAgIH07XG5cbiAgICB3cmFwcGVyLnNldFByb3BzKHsgbW9kZWw6IG1vZGVsV2l0aENvbnRlbnQgfSk7XG4gICAgaW5zdGFuY2UucmVtb3ZlQWRkaXRpb25hbFBhc3NhZ2UoMSk7XG5cbiAgICBleHBlY3Qod3JhcHBlci5zdGF0ZSgpKS50b0VxdWFsKHtcbiAgICAgIHNob3dDb25maXJtYXRpb25EaWFsb2c6IHRydWUsXG4gICAgICBpbmRleFRvUmVtb3ZlOiAxLFxuICAgIH0pO1xuICB9KTtcblxuICBpdCgnb25EZWxldGUgcmVtb3ZlcyBwYXNzYWdlIGF0IGluZGV4IGFuZCByZXNldHMgY29uZmlybWF0aW9uIHN0YXRlJywgKCkgPT4ge1xuICAgIGNvbnN0IG1vZGVsV2l0aFR3byA9IHtcbiAgICAgIC4uLmJhc2VNb2RlbCxcbiAgICAgIHBhc3NhZ2VzOiBbeyB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnS2VlcCcgfSwgeyB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnUmVtb3ZlJyB9XSxcbiAgICB9O1xuXG4gICAgd3JhcHBlci5zZXRQcm9wcyh7IG1vZGVsOiBtb2RlbFdpdGhUd28gfSk7XG4gICAgaW5zdGFuY2Uub25EZWxldGUobW9kZWxXaXRoVHdvLCAxLCBvbk1vZGVsQ2hhbmdlZCk7XG5cbiAgICBleHBlY3Qob25Nb2RlbENoYW5nZWQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgIC4uLm1vZGVsV2l0aFR3byxcbiAgICAgIHBhc3NhZ2VzOiBbeyB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnS2VlcCcgfV0sXG4gICAgfSk7XG5cbiAgICBleHBlY3Qod3JhcHBlci5zdGF0ZSgpKS50b0VxdWFsKHtcbiAgICAgIHNob3dDb25maXJtYXRpb25EaWFsb2c6IGZhbHNlLFxuICAgICAgaW5kZXhUb1JlbW92ZTogLTEsXG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFFQUcsSUFBSSxDQUFDQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsT0FBTztFQUNyQ0MsTUFBTSxFQUFFO0lBQ05DLFlBQVksRUFBR0MsS0FBSyxpQkFBS1QsTUFBQSxDQUFBVSxPQUFBLENBQUFDLGFBQUE7TUFBS0MsU0FBUyxFQUFDO0lBQWtCLEdBQUVILEtBQUssQ0FBQ0ksUUFBYztFQUNsRixDQUFDO0VBQ0RDLFFBQVEsRUFBRTtJQUNSQyxLQUFLLEVBQUdOLEtBQUssaUJBQUtULE1BQUEsQ0FBQVUsT0FBQSxDQUFBQyxhQUFB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
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _react = _interopRequireDefault(require("react"));
5
+ var _enzyme = require("enzyme");
6
+ var _passage = require("../passage");
7
+ var _configUi = require("@pie-lib/config-ui");
8
+ var _defaults = _interopRequireDefault(require("../defaults"));
9
+ jest.mock('@pie-lib/config-ui', () => ({
10
+ InputContainer: props => /*#__PURE__*/_react.default.createElement("div", props, props.children)
11
+ }));
12
+ describe('PassageComponent', () => {
13
+ let wrapper, onModelChanged;
14
+ const basePassage = {
15
+ teacherInstructions: '',
16
+ title: '',
17
+ subtitle: '',
18
+ author: '',
19
+ text: ''
20
+ };
21
+ let model = _defaults.default.model;
22
+ let configuration = _defaults.default.configuration;
23
+ const classes = {
24
+ inputContainer: 'mockInputContainer',
25
+ errorText: 'mockErrorText'
26
+ };
27
+ beforeEach(() => {
28
+ onModelChanged = jest.fn();
29
+ wrapper = (0, _enzyme.shallow)(/*#__PURE__*/_react.default.createElement(_passage.PassageComponent, {
30
+ model: model,
31
+ configuration: configuration,
32
+ onModelChanged: onModelChanged,
33
+ classes: classes,
34
+ imageSupport: {},
35
+ uploadSoundSupport: {},
36
+ passageIndex: 0
37
+ }));
38
+ });
39
+ it('renders all input containers when enabled', () => {
40
+ expect(wrapper.find(_configUi.InputContainer).length).toBe(5); // All 5 enabled
41
+ });
42
+ it('calls onModelChanged when teacherInstructions changes', () => {
43
+ const instance = wrapper.instance();
44
+ instance.handleChange('teacherInstructions', 'New Instructions');
45
+ expect(onModelChanged).toHaveBeenCalledWith({
46
+ ...model,
47
+ passages: [{
48
+ ...basePassage,
49
+ teacherInstructions: 'New Instructions'
50
+ }]
51
+ });
52
+ });
53
+ it('calls onModelChanged when title changes', () => {
54
+ wrapper.instance().handleChange('title', 'New Title');
55
+ expect(onModelChanged).toHaveBeenCalledWith({
56
+ ...model,
57
+ passages: [{
58
+ ...basePassage,
59
+ title: 'New Title'
60
+ }]
61
+ });
62
+ });
63
+ describe('Error Handling', () => {
64
+ it('displays teacher instructions error when provided', () => {
65
+ wrapper.setProps({
66
+ model: {
67
+ ...model,
68
+ errors: {
69
+ passages: {
70
+ 0: {
71
+ teacherInstructions: 'Teacher Instructions is required'
72
+ }
73
+ }
74
+ },
75
+ teacherInstructionsEnabled: true
76
+ },
77
+ configuration: {
78
+ ...configuration,
79
+ teacherInstructions: {
80
+ label: 'Teacher Instructions'
81
+ }
82
+ }
83
+ });
84
+ expect(wrapper.find('.mockErrorText').text()).toEqual('Teacher Instructions is required');
85
+ });
86
+ it('displays title error when provided', () => {
87
+ wrapper.setProps({
88
+ model: {
89
+ ...model,
90
+ errors: {
91
+ passages: {
92
+ 0: {
93
+ title: 'Title is required'
94
+ }
95
+ }
96
+ },
97
+ titleEnabled: true
98
+ },
99
+ configuration: {
100
+ ...configuration,
101
+ title: {
102
+ label: 'Title'
103
+ }
104
+ }
105
+ });
106
+ expect(wrapper.find('.mockErrorText').text()).toEqual('Title is required');
107
+ });
108
+ it('displays subtitle error when provided', () => {
109
+ wrapper.setProps({
110
+ model: {
111
+ ...model,
112
+ errors: {
113
+ passages: {
114
+ 0: {
115
+ subtitle: 'Subtitle is required'
116
+ }
117
+ }
118
+ },
119
+ subtitleEnabled: true
120
+ },
121
+ configuration: {
122
+ ...configuration,
123
+ subtitle: {
124
+ label: 'Subtitle'
125
+ }
126
+ }
127
+ });
128
+ expect(wrapper.find('.mockErrorText').text()).toEqual('Subtitle is required');
129
+ });
130
+ it('displays author error when provided', () => {
131
+ wrapper.setProps({
132
+ model: {
133
+ ...model,
134
+ errors: {
135
+ passages: {
136
+ 0: {
137
+ author: 'Author is required'
138
+ }
139
+ }
140
+ },
141
+ authorEnabled: true
142
+ },
143
+ configuration: {
144
+ ...configuration,
145
+ author: {
146
+ label: 'Author'
147
+ }
148
+ }
149
+ });
150
+ expect(wrapper.find('.mockErrorText').text()).toEqual('Author is required');
151
+ });
152
+ it('displays text error when provided', () => {
153
+ wrapper.setProps({
154
+ model: {
155
+ ...model,
156
+ errors: {
157
+ passages: {
158
+ 0: {
159
+ text: 'Text is required'
160
+ }
161
+ }
162
+ },
163
+ textEnabled: true
164
+ },
165
+ configuration: {
166
+ ...configuration,
167
+ text: {
168
+ label: 'Text'
169
+ }
170
+ }
171
+ });
172
+ expect(wrapper.find('.mockErrorText').at(0).text()).toEqual('Text is required');
173
+ });
174
+ });
175
+ });
176
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9lbnp5bWUiLCJfcGFzc2FnZSIsIl9jb25maWdVaSIsIl9kZWZhdWx0cyIsImplc3QiLCJtb2NrIiwiSW5wdXRDb250YWluZXIiLCJwcm9wcyIsImRlZmF1bHQiLCJjcmVhdGVFbGVtZW50IiwiY2hpbGRyZW4iLCJkZXNjcmliZSIsIndyYXBwZXIiLCJvbk1vZGVsQ2hhbmdlZCIsImJhc2VQYXNzYWdlIiwidGVhY2hlckluc3RydWN0aW9ucyIsInRpdGxlIiwic3VidGl0bGUiLCJhdXRob3IiLCJ0ZXh0IiwibW9kZWwiLCJkZWZhdWx0cyIsImNvbmZpZ3VyYXRpb24iLCJjbGFzc2VzIiwiaW5wdXRDb250YWluZXIiLCJlcnJvclRleHQiLCJiZWZvcmVFYWNoIiwiZm4iLCJzaGFsbG93IiwiUGFzc2FnZUNvbXBvbmVudCIsImltYWdlU3VwcG9ydCIsInVwbG9hZFNvdW5kU3VwcG9ydCIsInBhc3NhZ2VJbmRleCIsIml0IiwiZXhwZWN0IiwiZmluZCIsImxlbmd0aCIsInRvQmUiLCJpbnN0YW5jZSIsImhhbmRsZUNoYW5nZSIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwicGFzc2FnZXMiLCJzZXRQcm9wcyIsImVycm9ycyIsInRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkIiwibGFiZWwiLCJ0b0VxdWFsIiwidGl0bGVFbmFibGVkIiwic3VidGl0bGVFbmFibGVkIiwiYXV0aG9yRW5hYmxlZCIsInRleHRFbmFibGVkIiwiYXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL3Bhc3NhZ2UudGVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc2hhbGxvdyB9IGZyb20gJ2VuenltZSc7XG5pbXBvcnQgeyBQYXNzYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vcGFzc2FnZSc7XG5pbXBvcnQgeyBJbnB1dENvbnRhaW5lciB9IGZyb20gJ0BwaWUtbGliL2NvbmZpZy11aSc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMnO1xuXG5qZXN0Lm1vY2soJ0BwaWUtbGliL2NvbmZpZy11aScsICgpID0+ICh7XG4gIElucHV0Q29udGFpbmVyOiAocHJvcHMpID0+IDxkaXYgey4uLnByb3BzfT57cHJvcHMuY2hpbGRyZW59PC9kaXY+LFxufSkpO1xuXG5kZXNjcmliZSgnUGFzc2FnZUNvbXBvbmVudCcsICgpID0+IHtcbiAgbGV0IHdyYXBwZXIsIG9uTW9kZWxDaGFuZ2VkO1xuICBjb25zdCBiYXNlUGFzc2FnZSA9IHtcbiAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnJyxcbiAgICB0aXRsZTogJycsXG4gICAgc3VidGl0bGU6ICcnLFxuICAgIGF1dGhvcjogJycsXG4gICAgdGV4dDogJycsXG4gIH07XG5cbiAgbGV0IG1vZGVsID0gZGVmYXVsdHMubW9kZWw7XG4gIGxldCBjb25maWd1cmF0aW9uID0gZGVmYXVsdHMuY29uZmlndXJhdGlvbjtcblxuICBjb25zdCBjbGFzc2VzID0ge1xuICAgIGlucHV0Q29udGFpbmVyOiAnbW9ja0lucHV0Q29udGFpbmVyJyxcbiAgICBlcnJvclRleHQ6ICdtb2NrRXJyb3JUZXh0JyxcbiAgfTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvbk1vZGVsQ2hhbmdlZCA9IGplc3QuZm4oKTtcbiAgICB3cmFwcGVyID0gc2hhbGxvdyhcbiAgICAgIDxQYXNzYWdlQ29tcG9uZW50XG4gICAgICAgIG1vZGVsPXttb2RlbH1cbiAgICAgICAgY29uZmlndXJhdGlvbj17Y29uZmlndXJhdGlvbn1cbiAgICAgICAgb25Nb2RlbENoYW5nZWQ9e29uTW9kZWxDaGFuZ2VkfVxuICAgICAgICBjbGFzc2VzPXtjbGFzc2VzfVxuICAgICAgICBpbWFnZVN1cHBvcnQ9e3t9fVxuICAgICAgICB1cGxvYWRTb3VuZFN1cHBvcnQ9e3t9fVxuICAgICAgICBwYXNzYWdlSW5kZXg9ezB9XG4gICAgICAvPixcbiAgICApO1xuICB9KTtcblxuICBpdCgncmVuZGVycyBhbGwgaW5wdXQgY29udGFpbmVycyB3aGVuIGVuYWJsZWQnLCAoKSA9PiB7XG4gICAgZXhwZWN0KHdyYXBwZXIuZmluZChJbnB1dENvbnRhaW5lcikubGVuZ3RoKS50b0JlKDUpOyAvLyBBbGwgNSBlbmFibGVkXG4gIH0pO1xuXG4gIGl0KCdjYWxscyBvbk1vZGVsQ2hhbmdlZCB3aGVuIHRlYWNoZXJJbnN0cnVjdGlvbnMgY2hhbmdlcycsICgpID0+IHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IHdyYXBwZXIuaW5zdGFuY2UoKTtcbiAgICBpbnN0YW5jZS5oYW5kbGVDaGFuZ2UoJ3RlYWNoZXJJbnN0cnVjdGlvbnMnLCAnTmV3IEluc3RydWN0aW9ucycpO1xuXG4gICAgZXhwZWN0KG9uTW9kZWxDaGFuZ2VkKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAuLi5tb2RlbCxcbiAgICAgIHBhc3NhZ2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5iYXNlUGFzc2FnZSxcbiAgICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnTmV3IEluc3RydWN0aW9ucycsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9KTtcblxuICBpdCgnY2FsbHMgb25Nb2RlbENoYW5nZWQgd2hlbiB0aXRsZSBjaGFuZ2VzJywgKCkgPT4ge1xuICAgIHdyYXBwZXIuaW5zdGFuY2UoKS5oYW5kbGVDaGFuZ2UoJ3RpdGxlJywgJ05ldyBUaXRsZScpO1xuXG4gICAgZXhwZWN0KG9uTW9kZWxDaGFuZ2VkKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAuLi5tb2RlbCxcbiAgICAgIHBhc3NhZ2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5iYXNlUGFzc2FnZSxcbiAgICAgICAgICB0aXRsZTogJ05ldyBUaXRsZScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRXJyb3IgSGFuZGxpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ2Rpc3BsYXlzIHRlYWNoZXIgaW5zdHJ1Y3Rpb25zIGVycm9yIHdoZW4gcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgICB3cmFwcGVyLnNldFByb3BzKHtcbiAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAuLi5tb2RlbCxcbiAgICAgICAgICBlcnJvcnM6IHtcbiAgICAgICAgICAgIHBhc3NhZ2VzOiB7XG4gICAgICAgICAgICAgIDA6IHsgdGVhY2hlckluc3RydWN0aW9uczogJ1RlYWNoZXIgSW5zdHJ1Y3Rpb25zIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgLi4uY29uZmlndXJhdGlvbixcbiAgICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiB7IGxhYmVsOiAnVGVhY2hlciBJbnN0cnVjdGlvbnMnIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoJy5tb2NrRXJyb3JUZXh0JykudGV4dCgpKS50b0VxdWFsKCdUZWFjaGVyIEluc3RydWN0aW9ucyBpcyByZXF1aXJlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Rpc3BsYXlzIHRpdGxlIGVycm9yIHdoZW4gcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgICB3cmFwcGVyLnNldFByb3BzKHtcbiAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAuLi5tb2RlbCxcbiAgICAgICAgICBlcnJvcnM6IHtcbiAgICAgICAgICAgIHBhc3NhZ2VzOiB7XG4gICAgICAgICAgICAgIDA6IHsgdGl0bGU6ICdUaXRsZSBpcyByZXF1aXJlZCcgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aXRsZUVuYWJsZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHsgLi4uY29uZmlndXJhdGlvbiwgdGl0bGU6IHsgbGFiZWw6ICdUaXRsZScgfSB9LFxuICAgICAgfSk7XG4gICAgICBleHBlY3Qod3JhcHBlci5maW5kKCcubW9ja0Vycm9yVGV4dCcpLnRleHQoKSkudG9FcXVhbCgnVGl0bGUgaXMgcmVxdWlyZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdkaXNwbGF5cyBzdWJ0aXRsZSBlcnJvciB3aGVuIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgd3JhcHBlci5zZXRQcm9wcyh7XG4gICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgLi4ubW9kZWwsXG4gICAgICAgICAgZXJyb3JzOiB7XG4gICAgICAgICAgICBwYXNzYWdlczoge1xuICAgICAgICAgICAgICAwOiB7IHN1YnRpdGxlOiAnU3VidGl0bGUgaXMgcmVxdWlyZWQnIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3VidGl0bGVFbmFibGVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBjb25maWd1cmF0aW9uOiB7IC4uLmNvbmZpZ3VyYXRpb24sIHN1YnRpdGxlOiB7IGxhYmVsOiAnU3VidGl0bGUnIH0gfSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHdyYXBwZXIuZmluZCgnLm1vY2tFcnJvclRleHQnKS50ZXh0KCkpLnRvRXF1YWwoJ1N1YnRpdGxlIGlzIHJlcXVpcmVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZGlzcGxheXMgYXV0aG9yIGVycm9yIHdoZW4gcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgICB3cmFwcGVyLnNldFByb3BzKHtcbiAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAuLi5tb2RlbCxcbiAgICAgICAgICBlcnJvcnM6IHtcbiAgICAgICAgICAgIHBhc3NhZ2VzOiB7XG4gICAgICAgICAgICAgIDA6IHsgYXV0aG9yOiAnQXV0aG9yIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGF1dGhvckVuYWJsZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHsgLi4uY29uZmlndXJhdGlvbiwgYXV0aG9yOiB7IGxhYmVsOiAnQXV0aG9yJyB9IH0sXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoJy5tb2NrRXJyb3JUZXh0JykudGV4dCgpKS50b0VxdWFsKCdBdXRob3IgaXMgcmVxdWlyZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdkaXNwbGF5cyB0ZXh0IGVycm9yIHdoZW4gcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgICB3cmFwcGVyLnNldFByb3BzKHtcbiAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAuLi5tb2RlbCxcbiAgICAgICAgICBlcnJvcnM6IHtcbiAgICAgICAgICAgIHBhc3NhZ2VzOiB7XG4gICAgICAgICAgICAgIDA6IHsgdGV4dDogJ1RleHQgaXMgcmVxdWlyZWQnIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGV4dEVuYWJsZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHsgLi4uY29uZmlndXJhdGlvbiwgdGV4dDogeyBsYWJlbDogJ1RleHQnIH0gfSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHdyYXBwZXIuZmluZCgnLm1vY2tFcnJvclRleHQnKS5hdCgwKS50ZXh0KCkpLnRvRXF1YWwoJ1RleHQgaXMgcmVxdWlyZWQnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsU0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksU0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxP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QUFhLEVBQUU7VUFBRSxHQUFHQSxhQUFhO1VBQUVMLFFBQVEsRUFBRTtZQUFFNEIsS0FBSyxFQUFFO1VBQVc7UUFBRTtNQUNyRSxDQUFDLENBQUM7TUFDRlgsTUFBTSxDQUFDdEIsT0FBTyxDQUFDdUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUNoQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMyQixPQUFPLENBQUMsc0JBQXNCLENBQUM7SUFDL0UsQ0FBQyxDQUFDO0lBRUZiLEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxNQUFNO01BQzlDckIsT0FBTyxDQUFDOEIsUUFBUSxDQUFDO1FBQ2Z0QixLQUFLLEVBQUU7VUFDTCxHQUFHQSxLQUFLO1VBQ1J1QixNQUFNLEVBQUU7WUFDTkYsUUFBUSxFQUFFO2NBQ1IsQ0FBQyxFQUFFO2dCQUFFdkIsTUFBTSxFQUFFO2NBQXFCO1lBQ3BDO1VBQ0YsQ0FBQztVQUNEK0IsYUFBYSxFQUFFO1FBQ2pCLENBQUM7UUFDRDNCLGFBQWEsRUFBRTtVQUFFLEdBQUdBLGFBQWE7VUFBRUosTUFBTSxFQUFFO1lBQUUyQixLQUFLLEVBQUU7VUFBUztRQUFFO01BQ2pFLENBQUMsQ0FBQztNQUNGWCxNQUFNLENBQUN0QixPQUFPLENBQUN1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQ2hCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzJCLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztJQUM3RSxDQUFDLENBQUM7SUFFRmIsRUFBRSxDQUFDLG1DQUFtQyxFQUFFLE1BQU07TUFDNUNyQixPQUFPLENBQUM4QixRQUFRLENBQUM7UUFDZnRCLEtBQUssRUFBRTtVQUNMLEdBQUdBLEtBQUs7VUFDUnVCLE1BQU0sRUFBRTtZQUNORixRQUFRLEVBQUU7Y0FDUixDQUFDLEVBQUU7Z0JBQUV0QixJQUFJLEVBQUU7Y0FBbUI7WUFDaEM7VUFDRixDQUFDO1VBQ0QrQixXQUFXLEVBQUU7UUFDZixDQUFDO1FBQ0Q1QixhQUFhLEVBQUU7VUFBRSxHQUFHQSxhQUFhO1VBQUVILElBQUksRUFBRTtZQUFFMEIsS0FBSyxFQUFFO1VBQU87UUFBRTtNQUM3RCxDQUFDLENBQUM7TUFDRlgsTUFBTSxDQUFDdEIsT0FBTyxDQUFDdUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUNnQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUNoQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMyQixPQUFPLENBQUMsa0JBQWtCLENBQUM7SUFDakYsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119