@pie-lib/mask-markup 2.0.0-beta.2 → 2.1.0-next.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.json +1 -871
- package/CHANGELOG.md +296 -2
- package/LICENSE.md +5 -0
- package/NEXT.CHANGELOG.json +1 -0
- package/lib/__tests__/drag-in-the-blank.test.js +129 -0
- package/lib/__tests__/index.test.js +42 -0
- package/lib/__tests__/mask.test.js +163 -0
- package/lib/__tests__/serialization.test.js +44 -0
- package/lib/__tests__/utils.js +14 -0
- package/lib/__tests__/with-mask.test.js +110 -0
- package/lib/choices/__tests__/index.test.js +101 -0
- package/lib/choices/choice.js +100 -119
- package/lib/choices/choice.js.map +1 -1
- package/lib/choices/index.js +24 -20
- package/lib/choices/index.js.map +1 -1
- package/lib/componentize.js +2 -3
- package/lib/componentize.js.map +1 -1
- package/lib/components/__tests__/blank.test.js +189 -0
- package/lib/components/__tests__/correct-input.test.js +132 -0
- package/lib/components/__tests__/dropdown.test.js +134 -0
- package/lib/components/__tests__/input.test.js +129 -0
- package/lib/components/blank.js +316 -222
- package/lib/components/blank.js.map +1 -1
- package/lib/components/correct-input.js +40 -43
- package/lib/components/correct-input.js.map +1 -1
- package/lib/components/dropdown.js +394 -125
- package/lib/components/dropdown.js.map +1 -1
- package/lib/components/input.js +2 -3
- package/lib/components/input.js.map +1 -1
- package/lib/constructed-response.js +83 -27
- package/lib/constructed-response.js.map +1 -1
- package/lib/customizable.js +44 -0
- package/lib/customizable.js.map +1 -0
- package/lib/drag-in-the-blank.js +155 -62
- package/lib/drag-in-the-blank.js.map +1 -1
- package/lib/index.js +8 -1
- package/lib/index.js.map +1 -1
- package/lib/inline-dropdown.js +5 -4
- package/lib/inline-dropdown.js.map +1 -1
- package/lib/mask.js +90 -57
- package/lib/mask.js.map +1 -1
- package/lib/serialization.js +31 -43
- package/lib/serialization.js.map +1 -1
- package/lib/with-mask.js +49 -21
- package/lib/with-mask.js.map +1 -1
- package/package.json +18 -15
- package/src/__tests__/drag-in-the-blank.test.js +111 -0
- package/src/__tests__/index.test.js +39 -0
- package/src/__tests__/mask.test.js +187 -0
- package/src/__tests__/serialization.test.js +54 -0
- package/src/__tests__/utils.js +1 -0
- package/src/__tests__/with-mask.test.js +76 -0
- package/src/choices/__tests__/index.test.js +75 -0
- package/src/choices/choice.jsx +83 -96
- package/src/choices/index.jsx +11 -5
- package/src/components/__tests__/blank.test.js +138 -0
- package/src/components/__tests__/correct-input.test.js +90 -0
- package/src/components/__tests__/dropdown.test.js +93 -0
- package/src/components/__tests__/input.test.js +102 -0
- package/src/components/blank.jsx +316 -204
- package/src/components/correct-input.jsx +37 -38
- package/src/components/dropdown.jsx +371 -125
- package/src/constructed-response.jsx +71 -18
- package/src/customizable.jsx +35 -0
- package/src/drag-in-the-blank.jsx +152 -40
- package/src/index.js +10 -1
- package/src/inline-dropdown.jsx +2 -0
- package/src/mask.jsx +71 -25
- package/src/serialization.js +22 -34
- package/src/with-mask.jsx +43 -3
- package/README.md +0 -14
- package/lib/new-serialization.js +0 -267
- package/lib/new-serialization.js.map +0 -1
- package/lib/parse-html.js +0 -17
- package/lib/parse-html.js.map +0 -1
- package/lib/test-serializer.js +0 -164
- package/lib/test-serializer.js.map +0 -1
- package/src/new-serialization.jsx +0 -291
- package/src/parse-html.js +0 -8
- package/src/test-serializer.js +0 -163
|
@@ -7,184 +7,453 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports["default"] = void 0;
|
|
8
8
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
9
9
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
10
|
-
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
11
|
-
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
12
10
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
13
11
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
12
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
14
13
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
14
|
var _react = _interopRequireDefault(require("react"));
|
|
16
15
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
17
|
-
var
|
|
18
|
-
var
|
|
19
|
-
var
|
|
20
|
-
var
|
|
16
|
+
var _Button = _interopRequireDefault(require("@mui/material/Button"));
|
|
17
|
+
var _InputLabel = _interopRequireDefault(require("@mui/material/InputLabel"));
|
|
18
|
+
var _Menu = _interopRequireDefault(require("@mui/material/Menu"));
|
|
19
|
+
var _MenuItem = _interopRequireDefault(require("@mui/material/MenuItem"));
|
|
20
|
+
var _ArrowDropDown = _interopRequireDefault(require("@mui/icons-material/ArrowDropDown"));
|
|
21
|
+
var _ArrowDropUp = _interopRequireDefault(require("@mui/icons-material/ArrowDropUp"));
|
|
22
|
+
var _Close = _interopRequireDefault(require("@mui/icons-material/Close"));
|
|
23
|
+
var _Check = _interopRequireDefault(require("@mui/icons-material/Check"));
|
|
24
|
+
var _styles = require("@mui/material/styles");
|
|
21
25
|
var _renderUi = require("@pie-lib/render-ui");
|
|
22
|
-
|
|
23
|
-
function
|
|
26
|
+
var _mathRendering = require("@pie-lib/math-rendering");
|
|
27
|
+
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; }
|
|
28
|
+
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; }
|
|
29
|
+
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
|
|
30
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
31
|
+
var StyledButton = (0, _styles.styled)(_Button["default"])(function () {
|
|
32
|
+
return {
|
|
33
|
+
color: _renderUi.color.text(),
|
|
34
|
+
border: "1px solid ".concat(_renderUi.color.borderGray()),
|
|
35
|
+
borderRadius: '4px',
|
|
36
|
+
justifyContent: 'space-between',
|
|
37
|
+
backgroundColor: _renderUi.color.background(),
|
|
38
|
+
position: 'relative',
|
|
39
|
+
height: '45px',
|
|
40
|
+
width: 'fit-content',
|
|
41
|
+
margin: '2px',
|
|
42
|
+
textTransform: 'none',
|
|
43
|
+
'& span': {
|
|
44
|
+
paddingRight: '5px'
|
|
45
|
+
},
|
|
46
|
+
'& svg': {
|
|
47
|
+
position: 'absolute',
|
|
48
|
+
right: 0,
|
|
49
|
+
top: 'calc(50% - 12px)',
|
|
50
|
+
pointerEvents: 'none',
|
|
51
|
+
color: _renderUi.color.text(),
|
|
52
|
+
marginLeft: '5px'
|
|
53
|
+
},
|
|
54
|
+
'&.Mui-focused': {
|
|
55
|
+
outline: "3px solid ".concat(_renderUi.color.tertiary()),
|
|
56
|
+
outlineOffset: '2px',
|
|
57
|
+
borderWidth: '3px'
|
|
58
|
+
},
|
|
59
|
+
'&.disabledCorrect': {
|
|
60
|
+
borderWidth: '2px',
|
|
61
|
+
borderColor: _renderUi.color.correct(),
|
|
62
|
+
color: "".concat(_renderUi.color.text(), " !important")
|
|
63
|
+
},
|
|
64
|
+
'&.disabledIncorrect': {
|
|
65
|
+
borderWidth: '2px',
|
|
66
|
+
borderColor: _renderUi.color.incorrectWithIcon(),
|
|
67
|
+
color: "".concat(_renderUi.color.text(), " !important")
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
var StyledMenu = (0, _styles.styled)(_Menu["default"])(function () {
|
|
72
|
+
return {
|
|
73
|
+
backgroundColor: _renderUi.color.background(),
|
|
74
|
+
border: "1px solid ".concat(_renderUi.color.correct(), " !important"),
|
|
75
|
+
'&:hover': {
|
|
76
|
+
border: "1px solid ".concat(_renderUi.color.text(), " "),
|
|
77
|
+
borderColor: 'initial'
|
|
78
|
+
},
|
|
79
|
+
'&:focus': {
|
|
80
|
+
border: "1px solid ".concat(_renderUi.color.text()),
|
|
81
|
+
borderColor: 'initial'
|
|
82
|
+
},
|
|
83
|
+
// remove default padding on the inner list
|
|
84
|
+
'& .MuiList-root': {
|
|
85
|
+
padding: 0
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
var StyledMenuItem = (0, _styles.styled)(_MenuItem["default"])(function () {
|
|
90
|
+
return {
|
|
91
|
+
color: _renderUi.color.text(),
|
|
92
|
+
backgroundColor: _renderUi.color.background(),
|
|
93
|
+
'&.Mui-focused': {
|
|
94
|
+
outline: "3px solid ".concat(_renderUi.color.tertiary()),
|
|
95
|
+
outlineOffset: '-1px',
|
|
96
|
+
// keeps it inside the item
|
|
97
|
+
color: _renderUi.color.text(),
|
|
98
|
+
backgroundColor: _renderUi.color.background()
|
|
99
|
+
},
|
|
100
|
+
'&:hover': {
|
|
101
|
+
color: _renderUi.color.text(),
|
|
102
|
+
backgroundColor: _renderUi.color.dropdownBackground()
|
|
103
|
+
},
|
|
104
|
+
boxSizing: 'border-box',
|
|
105
|
+
padding: '25px',
|
|
106
|
+
borderRadius: '4px',
|
|
107
|
+
'&.selected': {
|
|
108
|
+
color: "".concat(_renderUi.color.text(), " !important"),
|
|
109
|
+
backgroundColor: "".concat(_renderUi.color.background(), " !important"),
|
|
110
|
+
'&:hover': {
|
|
111
|
+
color: _renderUi.color.text(),
|
|
112
|
+
backgroundColor: "".concat(_renderUi.color.dropdownBackground(), " !important")
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
});
|
|
117
|
+
var StyledLabel = (0, _styles.styled)('span')(function () {
|
|
118
|
+
return {
|
|
119
|
+
fontSize: 'max(1rem, 14px)'
|
|
120
|
+
};
|
|
121
|
+
});
|
|
122
|
+
var StyledSelectedIndicator = (0, _styles.styled)('span')(function () {
|
|
123
|
+
return {
|
|
124
|
+
fontSize: 'max(1rem, 14px)',
|
|
125
|
+
position: 'absolute',
|
|
126
|
+
right: '10px'
|
|
127
|
+
};
|
|
128
|
+
});
|
|
129
|
+
var StyledInputLabel = (0, _styles.styled)(_InputLabel["default"])(function () {
|
|
130
|
+
return {
|
|
131
|
+
position: 'absolute',
|
|
132
|
+
left: '-10000px',
|
|
133
|
+
top: 'auto',
|
|
134
|
+
width: '1px',
|
|
135
|
+
height: '1px',
|
|
136
|
+
overflow: 'hidden'
|
|
137
|
+
};
|
|
138
|
+
});
|
|
139
|
+
var StyledCorrectnessIcon = (0, _styles.styled)(_Check["default"])(function () {
|
|
140
|
+
return {
|
|
141
|
+
color: "".concat(_renderUi.color.white(), " !important"),
|
|
142
|
+
position: 'absolute',
|
|
143
|
+
top: '-8px !important',
|
|
144
|
+
left: '-8px',
|
|
145
|
+
marginLeft: '0 !important',
|
|
146
|
+
borderRadius: '50%',
|
|
147
|
+
fontSize: '16px',
|
|
148
|
+
padding: '2px',
|
|
149
|
+
'&.correct': {
|
|
150
|
+
backgroundColor: _renderUi.color.correct()
|
|
151
|
+
},
|
|
152
|
+
'&.incorrect': {
|
|
153
|
+
backgroundColor: _renderUi.color.incorrectWithIcon()
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
});
|
|
157
|
+
var StyledIncorrectnessIcon = (0, _styles.styled)(_Close["default"])(function () {
|
|
158
|
+
return {
|
|
159
|
+
color: "".concat(_renderUi.color.white(), " !important"),
|
|
160
|
+
position: 'absolute',
|
|
161
|
+
top: '-8px !important',
|
|
162
|
+
left: '-8px',
|
|
163
|
+
marginLeft: '0 !important',
|
|
164
|
+
borderRadius: '50%',
|
|
165
|
+
fontSize: '16px',
|
|
166
|
+
padding: '2px',
|
|
167
|
+
'&.correct': {
|
|
168
|
+
backgroundColor: _renderUi.color.correct()
|
|
169
|
+
},
|
|
170
|
+
'&.incorrect': {
|
|
171
|
+
backgroundColor: _renderUi.color.incorrectWithIcon()
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
});
|
|
24
175
|
var Dropdown = /*#__PURE__*/function (_React$Component) {
|
|
25
|
-
(0, _inherits2["default"])(Dropdown, _React$Component);
|
|
26
|
-
var _super = _createSuper(Dropdown);
|
|
27
176
|
function Dropdown(props) {
|
|
28
177
|
var _this;
|
|
29
178
|
(0, _classCallCheck2["default"])(this, Dropdown);
|
|
30
|
-
_this =
|
|
31
|
-
(0, _defineProperty2["default"])(
|
|
179
|
+
_this = _callSuper(this, Dropdown, [props]);
|
|
180
|
+
(0, _defineProperty2["default"])(_this, "handleClick", function (event) {
|
|
181
|
+
return _this.setState({
|
|
182
|
+
anchorEl: event.currentTarget
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
(0, _defineProperty2["default"])(_this, "handleClose", function () {
|
|
186
|
+
var value = _this.props.value;
|
|
32
187
|
_this.setState({
|
|
33
|
-
|
|
34
|
-
|
|
188
|
+
anchorEl: null,
|
|
189
|
+
previewValue: null,
|
|
190
|
+
highlightedOptionId: null
|
|
35
191
|
});
|
|
192
|
+
// clear displayed preview if no selection
|
|
193
|
+
if (!value && _this.previewRef.current) {
|
|
194
|
+
_this.previewRef.current.innerHTML = '';
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
(0, _defineProperty2["default"])(_this, "handleHighlight", function (index) {
|
|
198
|
+
var highlightedOptionId = "dropdown-option-".concat(_this.props.id, "-").concat(index);
|
|
199
|
+
|
|
200
|
+
// preview on hover if nothing selected
|
|
201
|
+
var stateUpdate = {
|
|
202
|
+
highlightedOptionId: highlightedOptionId
|
|
203
|
+
};
|
|
204
|
+
if (!_this.props.value) {
|
|
205
|
+
stateUpdate.previewValue = _this.props.choices[index].value;
|
|
206
|
+
}
|
|
207
|
+
_this.setState(stateUpdate);
|
|
208
|
+
});
|
|
209
|
+
(0, _defineProperty2["default"])(_this, "handleSelect", function (value, index) {
|
|
210
|
+
_this.props.onChange(_this.props.id, value);
|
|
211
|
+
_this.handleHighlight(index);
|
|
212
|
+
_this.handleClose();
|
|
36
213
|
});
|
|
37
|
-
(0, _defineProperty2["default"])(
|
|
214
|
+
(0, _defineProperty2["default"])(_this, "handleHover", function (index) {
|
|
215
|
+
var selectedValue = _this.props.value;
|
|
216
|
+
if (selectedValue) return;
|
|
217
|
+
var highlightedOptionId = "dropdown-option-".concat(_this.props.id, "-").concat(index);
|
|
218
|
+
var previewValue = _this.state.previewValue;
|
|
38
219
|
_this.setState({
|
|
39
|
-
|
|
40
|
-
|
|
220
|
+
highlightedOptionId: highlightedOptionId,
|
|
221
|
+
previewValue: previewValue
|
|
222
|
+
}, function () {
|
|
223
|
+
// On hover, preview the math-rendered content inside the button if no value is selected.
|
|
224
|
+
var ref = _this.elementRefs[index];
|
|
225
|
+
var preview = _this.previewRef.current;
|
|
226
|
+
if (ref && preview) {
|
|
227
|
+
preview.innerHTML = ref.innerHTML;
|
|
228
|
+
}
|
|
41
229
|
});
|
|
42
230
|
});
|
|
43
231
|
_this.state = {
|
|
44
|
-
|
|
45
|
-
|
|
232
|
+
anchorEl: null,
|
|
233
|
+
highlightedOptionId: null,
|
|
234
|
+
menuWidth: null,
|
|
235
|
+
previewValue: null
|
|
46
236
|
};
|
|
237
|
+
_this.hiddenRef = /*#__PURE__*/_react["default"].createRef();
|
|
238
|
+
_this.buttonRef = /*#__PURE__*/_react["default"].createRef();
|
|
239
|
+
_this.previewRef = /*#__PURE__*/_react["default"].createRef();
|
|
240
|
+
_this.elementRefs = [];
|
|
47
241
|
return _this;
|
|
48
242
|
}
|
|
49
|
-
(0,
|
|
243
|
+
(0, _inherits2["default"])(Dropdown, _React$Component);
|
|
244
|
+
return (0, _createClass2["default"])(Dropdown, [{
|
|
245
|
+
key: "componentDidMount",
|
|
246
|
+
value: function componentDidMount() {
|
|
247
|
+
// measure hidden menu width once
|
|
248
|
+
if (this.hiddenRef.current && this.state.menuWidth === null) {
|
|
249
|
+
this.setState({
|
|
250
|
+
menuWidth: this.hiddenRef.current.clientWidth
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}, {
|
|
255
|
+
key: "componentDidUpdate",
|
|
256
|
+
value: function componentDidUpdate(prevProps, prevState) {
|
|
257
|
+
var hiddenEl = this.hiddenRef.current;
|
|
258
|
+
var dropdownJustOpened = !prevState.anchorEl && this.state.anchorEl;
|
|
259
|
+
if (dropdownJustOpened) {
|
|
260
|
+
this.elementRefs.forEach(function (ref) {
|
|
261
|
+
if (!ref) return;
|
|
262
|
+
var containsLatex = ref.querySelector('[data-latex], [data-raw]');
|
|
263
|
+
var hasMathJax = ref.querySelector('mjx-container');
|
|
264
|
+
var mathHandled = ref.querySelector('[data-math-handled="true"]');
|
|
265
|
+
if (containsLatex && (!mathHandled || !hasMathJax)) {
|
|
266
|
+
(0, _mathRendering.renderMath)(ref);
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
if (hiddenEl) {
|
|
271
|
+
var newWidth = hiddenEl.clientWidth;
|
|
272
|
+
if (newWidth !== this.state.menuWidth) {
|
|
273
|
+
this.elementRefs.forEach(function (ref) {
|
|
274
|
+
if (ref) (0, _mathRendering.renderMath)(ref);
|
|
275
|
+
});
|
|
276
|
+
(0, _mathRendering.renderMath)(hiddenEl);
|
|
277
|
+
this.setState({
|
|
278
|
+
menuWidth: newWidth
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}, {
|
|
284
|
+
key: "getLabel",
|
|
285
|
+
value: function getLabel(choices, value) {
|
|
286
|
+
var found = (choices || []).find(function (choice) {
|
|
287
|
+
return choice.value === value;
|
|
288
|
+
});
|
|
289
|
+
return found ? found.label.trim() : undefined;
|
|
290
|
+
}
|
|
291
|
+
}, {
|
|
50
292
|
key: "render",
|
|
51
293
|
value: function render() {
|
|
294
|
+
var _this2 = this;
|
|
52
295
|
var _this$props = this.props,
|
|
53
|
-
classes = _this$props.classes,
|
|
54
296
|
id = _this$props.id,
|
|
55
297
|
correct = _this$props.correct,
|
|
56
298
|
disabled = _this$props.disabled,
|
|
57
299
|
value = _this$props.value,
|
|
58
|
-
_onChange = _this$props.onChange,
|
|
59
300
|
choices = _this$props.choices,
|
|
60
|
-
showCorrectAnswer = _this$props.showCorrectAnswer
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
301
|
+
showCorrectAnswer = _this$props.showCorrectAnswer,
|
|
302
|
+
singleQuery = _this$props.singleQuery,
|
|
303
|
+
correctValue = _this$props.correctValue;
|
|
304
|
+
var anchorEl = this.state.anchorEl;
|
|
305
|
+
var open = Boolean(anchorEl);
|
|
306
|
+
var buttonId = "dropdown-button-".concat(id);
|
|
307
|
+
var menuId = "dropdown-menu-".concat(id);
|
|
308
|
+
var valueDisplayId = "dropdown-value-".concat(id);
|
|
309
|
+
|
|
310
|
+
// Determine the class for disabled state, view mode and evaluate mode
|
|
311
|
+
var disabledClass;
|
|
312
|
+
// Reset elementRefs before each render to avoid stale references
|
|
313
|
+
this.elementRefs = [];
|
|
314
|
+
if (disabled && correct !== undefined) {
|
|
315
|
+
disabledClass = correct || showCorrectAnswer ? 'disabledCorrect' : 'disabledIncorrect';
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// Create distinct, visually hidden labels for each dropdown
|
|
319
|
+
var incrementedId = parseInt(id, 10) + 1;
|
|
320
|
+
var labelId = singleQuery ? 'Query-label' : "Query-label-".concat(incrementedId);
|
|
321
|
+
var labelText = singleQuery ? 'Query' : "Query ".concat(incrementedId);
|
|
322
|
+
|
|
323
|
+
// Changed from Select to Button for dropdown to enhance accessibility. This modification offers explicit control over aria attributes and focuses management, ensuring the dropdown is compliant with accessibility standards. The use of Button and Menu components allows for better handling of keyboard interactions and provides accessible labels and menus, aligning with WCAG guidelines and improving usability for assistive technology users.
|
|
324
|
+
var correctnessIcon = null;
|
|
325
|
+
if (disabled && correct !== undefined) {
|
|
326
|
+
correctnessIcon = correct || showCorrectAnswer ? /*#__PURE__*/_react["default"].createElement(StyledCorrectnessIcon, {
|
|
327
|
+
className: "correct"
|
|
328
|
+
}) : /*#__PURE__*/_react["default"].createElement(StyledIncorrectnessIcon, {
|
|
329
|
+
className: "incorrect"
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
|
|
333
|
+
ref: this.hiddenRef,
|
|
334
|
+
style: {
|
|
335
|
+
position: 'absolute',
|
|
336
|
+
visibility: 'hidden',
|
|
337
|
+
top: 0,
|
|
338
|
+
left: 0
|
|
70
339
|
},
|
|
340
|
+
tabIndex: -1,
|
|
341
|
+
"aria-hidden": "true"
|
|
342
|
+
}, (choices || []).map(function (c, index) {
|
|
343
|
+
return /*#__PURE__*/_react["default"].createElement(StyledMenuItem, {
|
|
344
|
+
key: index,
|
|
345
|
+
tabIndex: -1,
|
|
346
|
+
"aria-hidden": "true"
|
|
347
|
+
}, /*#__PURE__*/_react["default"].createElement(StyledLabel, {
|
|
348
|
+
dangerouslySetInnerHTML: {
|
|
349
|
+
__html: c.label
|
|
350
|
+
}
|
|
351
|
+
}));
|
|
352
|
+
})), /*#__PURE__*/_react["default"].createElement(StyledInputLabel, {
|
|
353
|
+
id: labelId,
|
|
354
|
+
tabIndex: -1,
|
|
355
|
+
"aria-hidden": "true"
|
|
356
|
+
}, labelText), /*#__PURE__*/_react["default"].createElement(StyledButton, {
|
|
357
|
+
ref: this.buttonRef,
|
|
358
|
+
style: _objectSpread(_objectSpread({}, this.state.menuWidth && {
|
|
359
|
+
minWidth: "calc(".concat(this.state.menuWidth, "px + 8px)")
|
|
360
|
+
}), {}, {
|
|
361
|
+
borderWidth: open ? '2px' : '1px',
|
|
362
|
+
transition: 'border-width 0.2s ease-in-out'
|
|
363
|
+
}),
|
|
364
|
+
"aria-controls": open ? menuId : undefined,
|
|
365
|
+
"aria-haspopup": "listbox",
|
|
366
|
+
"aria-expanded": open ? 'true' : undefined,
|
|
367
|
+
"aria-activedescendant": this.state.highlightedOptionId,
|
|
368
|
+
onClick: this.handleClick,
|
|
369
|
+
className: disabledClass,
|
|
71
370
|
disabled: disabled,
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
371
|
+
id: buttonId,
|
|
372
|
+
role: "combobox",
|
|
373
|
+
"aria-label": "Select an option for ".concat(labelText),
|
|
374
|
+
"aria-labelledby": valueDisplayId
|
|
375
|
+
}, correctnessIcon, /*#__PURE__*/_react["default"].createElement(StyledLabel, {
|
|
376
|
+
id: valueDisplayId,
|
|
377
|
+
ref: this.previewRef,
|
|
378
|
+
dangerouslySetInnerHTML: {
|
|
379
|
+
__html: correctValue ? correctValue : open && this.state.previewValue ? this.getLabel(choices, this.state.previewValue) : this.getLabel(choices, value) || ''
|
|
380
|
+
}
|
|
381
|
+
}), open ? /*#__PURE__*/_react["default"].createElement(_ArrowDropUp["default"], null) : /*#__PURE__*/_react["default"].createElement(_ArrowDropDown["default"], null)), /*#__PURE__*/_react["default"].createElement(StyledMenu, {
|
|
382
|
+
id: menuId,
|
|
383
|
+
anchorEl: anchorEl,
|
|
384
|
+
keepMounted: true,
|
|
75
385
|
open: open,
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
386
|
+
onClose: this.handleClose,
|
|
387
|
+
getContentAnchorEl: null,
|
|
388
|
+
anchorOrigin: {
|
|
389
|
+
vertical: 'bottom',
|
|
390
|
+
horizontal: 'left'
|
|
391
|
+
},
|
|
392
|
+
transformOrigin: {
|
|
393
|
+
vertical: 'top',
|
|
394
|
+
horizontal: 'left'
|
|
82
395
|
},
|
|
83
|
-
|
|
84
|
-
|
|
396
|
+
transitionDuration: {
|
|
397
|
+
enter: 225,
|
|
398
|
+
exit: 195
|
|
399
|
+
},
|
|
400
|
+
slotProps: {
|
|
401
|
+
paper: this.state.menuWidth ? {
|
|
402
|
+
style: {
|
|
403
|
+
minWidth: this.state.menuWidth,
|
|
404
|
+
padding: '4px'
|
|
405
|
+
}
|
|
406
|
+
} : undefined,
|
|
407
|
+
list: {
|
|
408
|
+
'aria-labelledby': buttonId,
|
|
409
|
+
role: 'listbox',
|
|
410
|
+
disablePadding: true
|
|
411
|
+
}
|
|
85
412
|
}
|
|
86
413
|
}, (choices || []).map(function (c, index) {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
},
|
|
414
|
+
var optionId = "dropdown-option-".concat(id, "-").concat(index);
|
|
415
|
+
return /*#__PURE__*/_react["default"].createElement(StyledMenuItem, {
|
|
416
|
+
id: optionId,
|
|
417
|
+
className: c.value === value ? 'selected' : '',
|
|
92
418
|
key: "".concat(c.label, "-").concat(index),
|
|
93
|
-
value: c.value
|
|
94
|
-
|
|
95
|
-
|
|
419
|
+
value: c.value,
|
|
420
|
+
onClick: function onClick() {
|
|
421
|
+
return _this2.handleSelect(c.value, index);
|
|
422
|
+
},
|
|
423
|
+
role: "option",
|
|
424
|
+
"aria-selected": _this2.state.highlightedOptionId === optionId ? 'true' : undefined,
|
|
425
|
+
onMouseOver: function onMouseOver() {
|
|
426
|
+
return _this2.handleHover(index);
|
|
427
|
+
}
|
|
428
|
+
}, /*#__PURE__*/_react["default"].createElement(StyledLabel, {
|
|
429
|
+
ref: function ref(_ref) {
|
|
430
|
+
return _this2.elementRefs[index] = _ref;
|
|
431
|
+
},
|
|
96
432
|
dangerouslySetInnerHTML: {
|
|
97
433
|
__html: c.label
|
|
98
434
|
}
|
|
99
|
-
}),
|
|
100
|
-
className: classes.label,
|
|
435
|
+
}), /*#__PURE__*/_react["default"].createElement(StyledSelectedIndicator, {
|
|
101
436
|
dangerouslySetInnerHTML: {
|
|
102
437
|
__html: c.value === value ? ' ✓' : ''
|
|
103
438
|
}
|
|
104
439
|
}));
|
|
105
|
-
}));
|
|
440
|
+
})));
|
|
106
441
|
}
|
|
107
442
|
}]);
|
|
108
|
-
return Dropdown;
|
|
109
443
|
}(_react["default"].Component);
|
|
110
444
|
(0, _defineProperty2["default"])(Dropdown, "propTypes", {
|
|
111
445
|
id: _propTypes["default"].string,
|
|
112
446
|
value: _propTypes["default"].string,
|
|
113
447
|
disabled: _propTypes["default"].bool,
|
|
114
448
|
onChange: _propTypes["default"].func,
|
|
115
|
-
classes: _propTypes["default"].object,
|
|
116
449
|
correct: _propTypes["default"].bool,
|
|
117
450
|
choices: _propTypes["default"].arrayOf(_propTypes["default"].shape({
|
|
118
451
|
value: _propTypes["default"].string,
|
|
119
452
|
label: _propTypes["default"].string
|
|
120
453
|
})),
|
|
121
|
-
showCorrectAnswer: _propTypes["default"].bool
|
|
454
|
+
showCorrectAnswer: _propTypes["default"].bool,
|
|
455
|
+
singleQuery: _propTypes["default"].bool,
|
|
456
|
+
correctValue: _propTypes["default"].string
|
|
122
457
|
});
|
|
123
|
-
var
|
|
124
|
-
return {
|
|
125
|
-
root: {
|
|
126
|
-
color: _renderUi.color.text(),
|
|
127
|
-
backgroundColor: _renderUi.color.background(),
|
|
128
|
-
borderColor: _renderUi.color.secondaryLight(),
|
|
129
|
-
'& ul': {
|
|
130
|
-
paddingTop: 0,
|
|
131
|
-
paddingBottom: 0,
|
|
132
|
-
border: "1px solid ".concat(_renderUi.color.text()),
|
|
133
|
-
borderRadius: '5px',
|
|
134
|
-
color: _renderUi.color.text(),
|
|
135
|
-
backgroundColor: _renderUi.color.background()
|
|
136
|
-
}
|
|
137
|
-
},
|
|
138
|
-
select: {
|
|
139
|
-
'&:focus': {
|
|
140
|
-
borderRadius: '4px'
|
|
141
|
-
}
|
|
142
|
-
},
|
|
143
|
-
selectMenu: {
|
|
144
|
-
backgroundColor: _renderUi.color.background(),
|
|
145
|
-
'&:hover': {
|
|
146
|
-
borderColor: 'initial'
|
|
147
|
-
},
|
|
148
|
-
'&:focus': {
|
|
149
|
-
borderColor: 'initial'
|
|
150
|
-
}
|
|
151
|
-
},
|
|
152
|
-
icon: {
|
|
153
|
-
color: _renderUi.color.text()
|
|
154
|
-
},
|
|
155
|
-
selected: {
|
|
156
|
-
color: "".concat(_renderUi.color.text(), " !important"),
|
|
157
|
-
backgroundColor: "".concat(_renderUi.color.background(), " !important"),
|
|
158
|
-
'&:hover': {
|
|
159
|
-
color: _renderUi.color.text(),
|
|
160
|
-
backgroundColor: "".concat(_renderUi.color.secondaryLight(), " !important")
|
|
161
|
-
}
|
|
162
|
-
},
|
|
163
|
-
menuRoot: {
|
|
164
|
-
color: _renderUi.color.text(),
|
|
165
|
-
backgroundColor: _renderUi.color.background(),
|
|
166
|
-
'&:focus': {
|
|
167
|
-
color: _renderUi.color.text(),
|
|
168
|
-
backgroundColor: _renderUi.color.background()
|
|
169
|
-
},
|
|
170
|
-
'&:hover': {
|
|
171
|
-
color: _renderUi.color.text(),
|
|
172
|
-
backgroundColor: _renderUi.color.secondaryLight()
|
|
173
|
-
},
|
|
174
|
-
boxSizing: 'border-box',
|
|
175
|
-
padding: '25px',
|
|
176
|
-
'&:first-of-type': {
|
|
177
|
-
borderRadius: '3px 3px 0 0'
|
|
178
|
-
},
|
|
179
|
-
'&:last-of-type': {
|
|
180
|
-
borderRadius: '0 0 3px 3px'
|
|
181
|
-
}
|
|
182
|
-
},
|
|
183
|
-
label: {
|
|
184
|
-
fontSize: 'max(1rem, 14px)'
|
|
185
|
-
}
|
|
186
|
-
};
|
|
187
|
-
};
|
|
188
|
-
var _default = (0, _styles.withStyles)(styles)(Dropdown);
|
|
189
|
-
exports["default"] = _default;
|
|
190
|
-
//# sourceMappingURL=dropdown.js.map
|
|
458
|
+
var _default = exports["default"] = Dropdown;
|
|
459
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wcm9wVHlwZXMiLCJfQnV0dG9uIiwiX0lucHV0TGFiZWwiLCJfTWVudSIsIl9NZW51SXRlbSIsIl9BcnJvd0Ryb3BEb3duIiwiX0Fycm93RHJvcFVwIiwiX0Nsb3NlIiwiX0NoZWNrIiwiX3N0eWxlcyIsIl9yZW5kZXJVaSIsIl9tYXRoUmVuZGVyaW5nIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsImNhbGwiLCJTdHlsZWRCdXR0b24iLCJzdHlsZWQiLCJCdXR0b24iLCJjb2xvciIsInRleHQiLCJib3JkZXIiLCJjb25jYXQiLCJib3JkZXJHcmF5IiwiYm9yZGVyUmFkaXVzIiwianVzdGlmeUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJiYWNrZ3JvdW5kIiwicG9zaXRpb24iLCJoZWlnaHQiLCJ3aWR0aCIsIm1hcmdpbiIsInRleHRUcmFuc2Zvcm0iLCJwYWRkaW5nUmlnaHQiLCJyaWdodCIsInRvcCIsInBvaW50ZXJFdmVudHMiLCJtYXJnaW5MZWZ0Iiwib3V0bGluZSIsInRlcnRpYXJ5Iiwib3V0bGluZU9mZnNldCIsImJvcmRlcldpZHRoIiwiYm9yZGVyQ29sb3IiLCJjb3JyZWN0IiwiaW5jb3JyZWN0V2l0aEljb24iLCJTdHlsZWRNZW51IiwiTWVudSIsInBhZGRpbmciLCJTdHlsZWRNZW51SXRlbSIsIk1lbnVJdGVtIiwiZHJvcGRvd25CYWNrZ3JvdW5kIiwiYm94U2l6aW5nIiwiU3R5bGVkTGFiZWwiLCJmb250U2l6ZSIsIlN0eWxlZFNlbGVjdGVkSW5kaWNhdG9yIiwiU3R5bGVkSW5wdXRMYWJlbCIsIklucHV0TGFiZWwiLCJsZWZ0Iiwib3ZlcmZsb3ciLCJTdHlsZWRDb3JyZWN0bmVzc0ljb24iLCJDaGVjayIsIndoaXRlIiwiU3R5bGVkSW5jb3JyZWN0bmVzc0ljb24iLCJDbG9zZSIsIkRyb3Bkb3duIiwiX1JlYWN0JENvbXBvbmVudCIsInByb3BzIiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiZXZlbnQiLCJzZXRTdGF0ZSIsImFuY2hvckVsIiwiY3VycmVudFRhcmdldCIsInZhbHVlIiwicHJldmlld1ZhbHVlIiwiaGlnaGxpZ2h0ZWRPcHRpb25JZCIsInByZXZpZXdSZWYiLCJjdXJyZW50IiwiaW5uZXJIVE1MIiwiaW5kZXgiLCJpZCIsInN0YXRlVXBkYXRlIiwiY2hvaWNlcyIsIm9uQ2hhbmdlIiwiaGFuZGxlSGlnaGxpZ2h0IiwiaGFuZGxlQ2xvc2UiLCJzZWxlY3RlZFZhbHVlIiwic3RhdGUiLCJyZWYiLCJlbGVtZW50UmVmcyIsInByZXZpZXciLCJtZW51V2lkdGgiLCJoaWRkZW5SZWYiLCJSZWFjdCIsImNyZWF0ZVJlZiIsImJ1dHRvblJlZiIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwiY29tcG9uZW50RGlkTW91bnQiLCJjbGllbnRXaWR0aCIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsInByZXZTdGF0ZSIsImhpZGRlbkVsIiwiZHJvcGRvd25KdXN0T3BlbmVkIiwiY29udGFpbnNMYXRleCIsInF1ZXJ5U2VsZWN0b3IiLCJoYXNNYXRoSmF4IiwibWF0aEhhbmRsZWQiLCJyZW5kZXJNYXRoIiwibmV3V2lkdGgiLCJnZXRMYWJlbCIsImZvdW5kIiwiZmluZCIsImNob2ljZSIsImxhYmVsIiwidHJpbSIsInVuZGVmaW5lZCIsInJlbmRlciIsIl90aGlzMiIsIl90aGlzJHByb3BzIiwiZGlzYWJsZWQiLCJzaG93Q29ycmVjdEFuc3dlciIsInNpbmdsZVF1ZXJ5IiwiY29ycmVjdFZhbHVlIiwib3BlbiIsImJ1dHRvbklkIiwibWVudUlkIiwidmFsdWVEaXNwbGF5SWQiLCJkaXNhYmxlZENsYXNzIiwiaW5jcmVtZW50ZWRJZCIsInBhcnNlSW50IiwibGFiZWxJZCIsImxhYmVsVGV4dCIsImNvcnJlY3RuZXNzSWNvbiIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJGcmFnbWVudCIsInN0eWxlIiwidmlzaWJpbGl0eSIsInRhYkluZGV4IiwibWFwIiwiYyIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiX19odG1sIiwibWluV2lkdGgiLCJ0cmFuc2l0aW9uIiwib25DbGljayIsImhhbmRsZUNsaWNrIiwicm9sZSIsImtlZXBNb3VudGVkIiwib25DbG9zZSIsImdldENvbnRlbnRBbmNob3JFbCIsImFuY2hvck9yaWdpbiIsInZlcnRpY2FsIiwiaG9yaXpvbnRhbCIsInRyYW5zZm9ybU9yaWdpbiIsInRyYW5zaXRpb25EdXJhdGlvbiIsImVudGVyIiwiZXhpdCIsInNsb3RQcm9wcyIsInBhcGVyIiwibGlzdCIsImRpc2FibGVQYWRkaW5nIiwib3B0aW9uSWQiLCJoYW5kbGVTZWxlY3QiLCJvbk1vdXNlT3ZlciIsImhhbmRsZUhvdmVyIiwiQ29tcG9uZW50IiwiUHJvcFR5cGVzIiwic3RyaW5nIiwiYm9vbCIsImZ1bmMiLCJhcnJheU9mIiwic2hhcGUiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9kcm9wZG93bi5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ0BtdWkvbWF0ZXJpYWwvQnV0dG9uJztcbmltcG9ydCBJbnB1dExhYmVsIGZyb20gJ0BtdWkvbWF0ZXJpYWwvSW5wdXRMYWJlbCc7XG5pbXBvcnQgTWVudSBmcm9tICdAbXVpL21hdGVyaWFsL01lbnUnO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gJ0BtdWkvbWF0ZXJpYWwvTWVudUl0ZW0nO1xuaW1wb3J0IEFycm93RHJvcERvd25JY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvQXJyb3dEcm9wRG93bic7XG5pbXBvcnQgQXJyb3dEcm9wVXBJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvQXJyb3dEcm9wVXAnO1xuaW1wb3J0IENsb3NlIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvQ2xvc2UnO1xuaW1wb3J0IENoZWNrIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvQ2hlY2snO1xuaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnO1xuXG5pbXBvcnQgeyBjb2xvciB9IGZyb20gJ0BwaWUtbGliL3JlbmRlci11aSc7XG5pbXBvcnQgeyByZW5kZXJNYXRoIH0gZnJvbSAnQHBpZS1saWIvbWF0aC1yZW5kZXJpbmcnO1xuXG5jb25zdCBTdHlsZWRCdXR0b24gPSBzdHlsZWQoQnV0dG9uKSgoKSA9PiAoe1xuICBjb2xvcjogY29sb3IudGV4dCgpLFxuICBib3JkZXI6IGAxcHggc29saWQgJHtjb2xvci5ib3JkZXJHcmF5KCl9YCxcbiAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgYmFja2dyb3VuZENvbG9yOiBjb2xvci5iYWNrZ3JvdW5kKCksXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBoZWlnaHQ6ICc0NXB4JyxcbiAgd2lkdGg6ICdmaXQtY29udGVudCcsXG4gIG1hcmdpbjogJzJweCcsXG4gIHRleHRUcmFuc2Zvcm06ICdub25lJyxcbiAgJyYgc3Bhbic6IHtcbiAgICBwYWRkaW5nUmlnaHQ6ICc1cHgnLFxuICB9LFxuICAnJiBzdmcnOiB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgcmlnaHQ6IDAsXG4gICAgdG9wOiAnY2FsYyg1MCUgLSAxMnB4KScsXG4gICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgIGNvbG9yOiBjb2xvci50ZXh0KCksXG4gICAgbWFyZ2luTGVmdDogJzVweCcsXG4gIH0sXG4gICcmLk11aS1mb2N1c2VkJzoge1xuICAgIG91dGxpbmU6IGAzcHggc29saWQgJHtjb2xvci50ZXJ0aWFyeSgpfWAsXG4gICAgb3V0bGluZU9mZnNldDogJzJweCcsXG4gICAgYm9yZGVyV2lkdGg6ICczcHgnLFxuICB9LFxuICAnJi5kaXNhYmxlZENvcnJlY3QnOiB7XG4gICAgYm9yZGVyV2lkdGg6ICcycHgnLFxuICAgIGJvcmRlckNvbG9yOiBjb2xvci5jb3JyZWN0KCksXG4gICAgY29sb3I6IGAke2NvbG9yLnRleHQoKX0gIWltcG9ydGFudGAsXG4gIH0sXG4gICcmLmRpc2FibGVkSW5jb3JyZWN0Jzoge1xuICAgIGJvcmRlcldpZHRoOiAnMnB4JyxcbiAgICBib3JkZXJDb2xvcjogY29sb3IuaW5jb3JyZWN0V2l0aEljb24oKSxcbiAgICBjb2xvcjogYCR7Y29sb3IudGV4dCgpfSAhaW1wb3J0YW50YCxcbiAgfSxcbn0pKTtcblxuY29uc3QgU3R5bGVkTWVudSA9IHN0eWxlZChNZW51KSgoKSA9PiAoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmJhY2tncm91bmQoKSxcbiAgYm9yZGVyOiBgMXB4IHNvbGlkICR7Y29sb3IuY29ycmVjdCgpfSAhaW1wb3J0YW50YCxcbiAgJyY6aG92ZXInOiB7XG4gICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7Y29sb3IudGV4dCgpfSBgLFxuICAgIGJvcmRlckNvbG9yOiAnaW5pdGlhbCcsXG4gIH0sXG4gICcmOmZvY3VzJzoge1xuICAgIGJvcmRlcjogYDFweCBzb2xpZCAke2NvbG9yLnRleHQoKX1gLFxuICAgIGJvcmRlckNvbG9yOiAnaW5pdGlhbCcsXG4gIH0sXG4gIC8vIHJlbW92ZSBkZWZhdWx0IHBhZGRpbmcgb24gdGhlIGlubmVyIGxpc3RcbiAgJyYgLk11aUxpc3Qtcm9vdCc6IHtcbiAgICBwYWRkaW5nOiAwLFxuICB9LFxufSkpO1xuXG5jb25zdCBTdHlsZWRNZW51SXRlbSA9IHN0eWxlZChNZW51SXRlbSkoKCkgPT4gKHtcbiAgY29sb3I6IGNvbG9yLnRleHQoKSxcbiAgYmFja2dyb3VuZENvbG9yOiBjb2xvci5iYWNrZ3JvdW5kKCksXG4gICcmLk11aS1mb2N1c2VkJzoge1xuICAgIG91dGxpbmU6IGAzcHggc29saWQgJHtjb2xvci50ZXJ0aWFyeSgpfWAsXG4gICAgb3V0bGluZU9mZnNldDogJy0xcHgnLCAvLyBrZWVwcyBpdCBpbnNpZGUgdGhlIGl0ZW1cbiAgICBjb2xvcjogY29sb3IudGV4dCgpLFxuICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IuYmFja2dyb3VuZCgpLFxuICB9LFxuICAnJjpob3Zlcic6IHtcbiAgICBjb2xvcjogY29sb3IudGV4dCgpLFxuICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IuZHJvcGRvd25CYWNrZ3JvdW5kKCksXG4gIH0sXG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICBwYWRkaW5nOiAnMjVweCcsXG4gIGJvcmRlclJhZGl1czogJzRweCcsXG4gICcmLnNlbGVjdGVkJzoge1xuICAgIGNvbG9yOiBgJHtjb2xvci50ZXh0KCl9ICFpbXBvcnRhbnRgLFxuICAgIGJhY2tncm91bmRDb2xvcjogYCR7Y29sb3IuYmFja2dyb3VuZCgpfSAhaW1wb3J0YW50YCxcbiAgICAnJjpob3Zlcic6IHtcbiAgICAgIGNvbG9yOiBjb2xvci50ZXh0KCksXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGAke2NvbG9yLmRyb3Bkb3duQmFja2dyb3VuZCgpfSAhaW1wb3J0YW50YCxcbiAgICB9LFxuICB9LFxufSkpO1xuXG5jb25zdCBTdHlsZWRMYWJlbCA9IHN0eWxlZCgnc3BhbicpKCgpID0+ICh7XG4gIGZvbnRTaXplOiAnbWF4KDFyZW0sIDE0cHgpJyxcbn0pKTtcblxuY29uc3QgU3R5bGVkU2VsZWN0ZWRJbmRpY2F0b3IgPSBzdHlsZWQoJ3NwYW4nKSgoKSA9PiAoe1xuICBmb250U2l6ZTogJ21heCgxcmVtLCAxNHB4KScsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICByaWdodDogJzEwcHgnLFxufSkpO1xuXG5jb25zdCBTdHlsZWRJbnB1dExhYmVsID0gc3R5bGVkKElucHV0TGFiZWwpKCgpID0+ICh7XG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICBsZWZ0OiAnLTEwMDAwcHgnLFxuICB0b3A6ICdhdXRvJyxcbiAgd2lkdGg6ICcxcHgnLFxuICBoZWlnaHQ6ICcxcHgnLFxuICBvdmVyZmxvdzogJ2hpZGRlbicsXG59KSk7XG5cbmNvbnN0IFN0eWxlZENvcnJlY3RuZXNzSWNvbiA9IHN0eWxlZChDaGVjaykoKCkgPT4gKHtcbiAgY29sb3I6IGAke2NvbG9yLndoaXRlKCl9ICFpbXBvcnRhbnRgLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgdG9wOiAnLThweCAhaW1wb3J0YW50JyxcbiAgbGVmdDogJy04cHgnLFxuICBtYXJnaW5MZWZ0OiAnMCAhaW1wb3J0YW50JyxcbiAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgZm9udFNpemU6ICcxNnB4JyxcbiAgcGFkZGluZzogJzJweCcsXG4gICcmLmNvcnJlY3QnOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBjb2xvci5jb3JyZWN0KCksXG4gIH0sXG4gICcmLmluY29ycmVjdCc6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmluY29ycmVjdFdpdGhJY29uKCksXG4gIH0sXG59KSk7XG5cbmNvbnN0IFN0eWxlZEluY29ycmVjdG5lc3NJY29uID0gc3R5bGVkKENsb3NlKSgoKSA9PiAoe1xuICBjb2xvcjogYCR7Y29sb3Iud2hpdGUoKX0gIWltcG9ydGFudGAsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB0b3A6ICctOHB4ICFpbXBvcnRhbnQnLFxuICBsZWZ0OiAnLThweCcsXG4gIG1hcmdpbkxlZnQ6ICcwICFpbXBvcnRhbnQnLFxuICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICBmb250U2l6ZTogJzE2cHgnLFxuICBwYWRkaW5nOiAnMnB4JyxcbiAgJyYuY29ycmVjdCc6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmNvcnJlY3QoKSxcbiAgfSxcbiAgJyYuaW5jb3JyZWN0Jzoge1xuICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IuaW5jb3JyZWN0V2l0aEljb24oKSxcbiAgfSxcbn0pKTtcblxuY2xhc3MgRHJvcGRvd24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgY29ycmVjdDogUHJvcFR5cGVzLmJvb2wsXG4gICAgY2hvaWNlczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHsgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nIH0pKSxcbiAgICBzaG93Q29ycmVjdEFuc3dlcjogUHJvcFR5cGVzLmJvb2wsXG4gICAgc2luZ2xlUXVlcnk6IFByb3BUeXBlcy5ib29sLFxuICAgIGNvcnJlY3RWYWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBhbmNob3JFbDogbnVsbCxcbiAgICAgIGhpZ2hsaWdodGVkT3B0aW9uSWQ6IG51bGwsXG4gICAgICBtZW51V2lkdGg6IG51bGwsXG4gICAgICBwcmV2aWV3VmFsdWU6IG51bGwsXG4gICAgfTtcbiAgICB0aGlzLmhpZGRlblJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgIHRoaXMuYnV0dG9uUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gICAgdGhpcy5wcmV2aWV3UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gICAgdGhpcy5lbGVtZW50UmVmcyA9IFtdO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgLy8gbWVhc3VyZSBoaWRkZW4gbWVudSB3aWR0aCBvbmNlXG4gICAgaWYgKHRoaXMuaGlkZGVuUmVmLmN1cnJlbnQgJiYgdGhpcy5zdGF0ZS5tZW51V2lkdGggPT09IG51bGwpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBtZW51V2lkdGg6IHRoaXMuaGlkZGVuUmVmLmN1cnJlbnQuY2xpZW50V2lkdGggfSk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgY29uc3QgaGlkZGVuRWwgPSB0aGlzLmhpZGRlblJlZi5jdXJyZW50O1xuXG4gICAgY29uc3QgZHJvcGRvd25KdXN0T3BlbmVkID0gIXByZXZTdGF0ZS5hbmNob3JFbCAmJiB0aGlzLnN0YXRlLmFuY2hvckVsO1xuICAgIGlmIChkcm9wZG93bkp1c3RPcGVuZWQpIHtcbiAgICAgIHRoaXMuZWxlbWVudFJlZnMuZm9yRWFjaCgocmVmKSA9PiB7XG4gICAgICAgIGlmICghcmVmKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY29udGFpbnNMYXRleCA9IHJlZi5xdWVyeVNlbGVjdG9yKCdbZGF0YS1sYXRleF0sIFtkYXRhLXJhd10nKTtcbiAgICAgICAgY29uc3QgaGFzTWF0aEpheCA9IHJlZi5xdWVyeVNlbGVjdG9yKCdtangtY29udGFpbmVyJyk7XG4gICAgICAgIGNvbnN0IG1hdGhIYW5kbGVkID0gcmVmLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW1hdGgtaGFuZGxlZD1cInRydWVcIl0nKTtcblxuICAgICAgICBpZiAoY29udGFpbnNMYXRleCAmJiAoIW1hdGhIYW5kbGVkIHx8ICFoYXNNYXRoSmF4KSkge1xuICAgICAgICAgIHJlbmRlck1hdGgocmVmKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGhpZGRlbkVsKSB7XG4gICAgICBjb25zdCBuZXdXaWR0aCA9IGhpZGRlbkVsLmNsaWVudFdpZHRoO1xuICAgICAgaWYgKG5ld1dpZHRoICE9PSB0aGlzLnN0YXRlLm1lbnVXaWR0aCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWZzLmZvckVhY2goKHJlZikgPT4ge1xuICAgICAgICAgIGlmIChyZWYpIHJlbmRlck1hdGgocmVmKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVuZGVyTWF0aChoaWRkZW5FbCk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBtZW51V2lkdGg6IG5ld1dpZHRoIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUNsaWNrID0gKGV2ZW50KSA9PiB0aGlzLnNldFN0YXRlKHsgYW5jaG9yRWw6IGV2ZW50LmN1cnJlbnRUYXJnZXQgfSk7XG5cbiAgaGFuZGxlQ2xvc2UgPSAoKSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5wcm9wcztcbiAgICB0aGlzLnNldFN0YXRlKHsgYW5jaG9yRWw6IG51bGwsIHByZXZpZXdWYWx1ZTogbnVsbCwgaGlnaGxpZ2h0ZWRPcHRpb25JZDogbnVsbCB9KTtcbiAgICAvLyBjbGVhciBkaXNwbGF5ZWQgcHJldmlldyBpZiBubyBzZWxlY3Rpb25cbiAgICBpZiAoIXZhbHVlICYmIHRoaXMucHJldmlld1JlZi5jdXJyZW50KSB7XG4gICAgICB0aGlzLnByZXZpZXdSZWYuY3VycmVudC5pbm5lckhUTUwgPSAnJztcbiAgICB9XG4gIH07XG5cbiAgaGFuZGxlSGlnaGxpZ2h0ID0gKGluZGV4KSA9PiB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ZWRPcHRpb25JZCA9IGBkcm9wZG93bi1vcHRpb24tJHt0aGlzLnByb3BzLmlkfS0ke2luZGV4fWA7XG5cbiAgICAvLyBwcmV2aWV3IG9uIGhvdmVyIGlmIG5vdGhpbmcgc2VsZWN0ZWRcbiAgICBjb25zdCBzdGF0ZVVwZGF0ZSA9IHsgaGlnaGxpZ2h0ZWRPcHRpb25JZCB9O1xuICAgIGlmICghdGhpcy5wcm9wcy52YWx1ZSkge1xuICAgICAgc3RhdGVVcGRhdGUucHJldmlld1ZhbHVlID0gdGhpcy5wcm9wcy5jaG9pY2VzW2luZGV4XS52YWx1ZTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZShzdGF0ZVVwZGF0ZSk7XG4gIH07XG5cbiAgaGFuZGxlU2VsZWN0ID0gKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5wcm9wcy5pZCwgdmFsdWUpO1xuICAgIHRoaXMuaGFuZGxlSGlnaGxpZ2h0KGluZGV4KTtcbiAgICB0aGlzLmhhbmRsZUNsb3NlKCk7XG4gIH07XG5cbiAgaGFuZGxlSG92ZXIgPSAoaW5kZXgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gdGhpcy5wcm9wcy52YWx1ZTtcblxuICAgIGlmIChzZWxlY3RlZFZhbHVlKSByZXR1cm47XG5cbiAgICBjb25zdCBoaWdobGlnaHRlZE9wdGlvbklkID0gYGRyb3Bkb3duLW9wdGlvbi0ke3RoaXMucHJvcHMuaWR9LSR7aW5kZXh9YDtcbiAgICBjb25zdCBwcmV2aWV3VmFsdWUgPSB0aGlzLnN0YXRlLnByZXZpZXdWYWx1ZTtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyBoaWdobGlnaHRlZE9wdGlvbklkLCBwcmV2aWV3VmFsdWUgfSwgKCkgPT4ge1xuICAgICAgLy8gT24gaG92ZXIsIHByZXZpZXcgdGhlIG1hdGgtcmVuZGVyZWQgY29udGVudCBpbnNpZGUgdGhlIGJ1dHRvbiBpZiBubyB2YWx1ZSBpcyBzZWxlY3RlZC5cbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMuZWxlbWVudFJlZnNbaW5kZXhdO1xuICAgICAgY29uc3QgcHJldmlldyA9IHRoaXMucHJldmlld1JlZi5jdXJyZW50O1xuXG4gICAgICBpZiAocmVmICYmIHByZXZpZXcpIHtcbiAgICAgICAgcHJldmlldy5pbm5lckhUTUwgPSByZWYuaW5uZXJIVE1MO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGdldExhYmVsKGNob2ljZXMsIHZhbHVlKSB7XG4gICAgY29uc3QgZm91bmQgPSAoY2hvaWNlcyB8fCBbXSkuZmluZCgoY2hvaWNlKSA9PiBjaG9pY2UudmFsdWUgPT09IHZhbHVlKTtcblxuICAgIHJldHVybiBmb3VuZCA/IGZvdW5kLmxhYmVsLnRyaW0oKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGlkLCBjb3JyZWN0LCBkaXNhYmxlZCwgdmFsdWUsIGNob2ljZXMsIHNob3dDb3JyZWN0QW5zd2VyLCBzaW5nbGVRdWVyeSwgY29ycmVjdFZhbHVlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgYW5jaG9yRWwgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qgb3BlbiA9IEJvb2xlYW4oYW5jaG9yRWwpO1xuICAgIGNvbnN0IGJ1dHRvbklkID0gYGRyb3Bkb3duLWJ1dHRvbi0ke2lkfWA7XG4gICAgY29uc3QgbWVudUlkID0gYGRyb3Bkb3duLW1lbnUtJHtpZH1gO1xuICAgIGNvbnN0IHZhbHVlRGlzcGxheUlkID0gYGRyb3Bkb3duLXZhbHVlLSR7aWR9YDtcblxuICAgIC8vIERldGVybWluZSB0aGUgY2xhc3MgZm9yIGRpc2FibGVkIHN0YXRlLCB2aWV3IG1vZGUgYW5kIGV2YWx1YXRlIG1vZGVcbiAgICBsZXQgZGlzYWJsZWRDbGFzcztcbiAgICAvLyBSZXNldCBlbGVtZW50UmVmcyBiZWZvcmUgZWFjaCByZW5kZXIgdG8gYXZvaWQgc3RhbGUgcmVmZXJlbmNlc1xuICAgIHRoaXMuZWxlbWVudFJlZnMgPSBbXTtcblxuICAgIGlmIChkaXNhYmxlZCAmJiBjb3JyZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRpc2FibGVkQ2xhc3MgPSBjb3JyZWN0IHx8IHNob3dDb3JyZWN0QW5zd2VyID8gJ2Rpc2FibGVkQ29ycmVjdCcgOiAnZGlzYWJsZWRJbmNvcnJlY3QnO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBkaXN0aW5jdCwgdmlzdWFsbHkgaGlkZGVuIGxhYmVscyBmb3IgZWFjaCBkcm9wZG93blxuICAgIGNvbnN0IGluY3JlbWVudGVkSWQgPSBwYXJzZUludChpZCwgMTApICsgMTtcbiAgICBjb25zdCBsYWJlbElkID0gc2luZ2xlUXVlcnkgPyAnUXVlcnktbGFiZWwnIDogYFF1ZXJ5LWxhYmVsLSR7aW5jcmVtZW50ZWRJZH1gO1xuICAgIGNvbnN0IGxhYmVsVGV4dCA9IHNpbmdsZVF1ZXJ5ID8gJ1F1ZXJ5JyA6IGBRdWVyeSAke2luY3JlbWVudGVkSWR9YDtcblxuICAgIC8vIENoYW5nZWQgZnJvbSBTZWxlY3QgdG8gQnV0dG9uIGZvciBkcm9wZG93biB0byBlbmhhbmNlIGFjY2Vzc2liaWxpdHkuIFRoaXMgbW9kaWZpY2F0aW9uIG9mZmVycyBleHBsaWNpdCBjb250cm9sIG92ZXIgYXJpYSBhdHRyaWJ1dGVzIGFuZCBmb2N1c2VzIG1hbmFnZW1lbnQsIGVuc3VyaW5nIHRoZSBkcm9wZG93biBpcyBjb21wbGlhbnQgd2l0aCBhY2Nlc3NpYmlsaXR5IHN0YW5kYXJkcy4gVGhlIHVzZSBvZiBCdXR0b24gYW5kIE1lbnUgY29tcG9uZW50cyBhbGxvd3MgZm9yIGJldHRlciBoYW5kbGluZyBvZiBrZXlib2FyZCBpbnRlcmFjdGlvbnMgYW5kIHByb3ZpZGVzIGFjY2Vzc2libGUgbGFiZWxzIGFuZCBtZW51cywgYWxpZ25pbmcgd2l0aCBXQ0FHIGd1aWRlbGluZXMgYW5kIGltcHJvdmluZyB1c2FiaWxpdHkgZm9yIGFzc2lzdGl2ZSB0ZWNobm9sb2d5IHVzZXJzLlxuICAgIGxldCBjb3JyZWN0bmVzc0ljb24gPSBudWxsO1xuICAgIGlmIChkaXNhYmxlZCAmJiBjb3JyZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvcnJlY3RuZXNzSWNvbiA9XG4gICAgICAgIGNvcnJlY3QgfHwgc2hvd0NvcnJlY3RBbnN3ZXIgPyAoXG4gICAgICAgICAgPFN0eWxlZENvcnJlY3RuZXNzSWNvbiBjbGFzc05hbWU9XCJjb3JyZWN0XCIgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8U3R5bGVkSW5jb3JyZWN0bmVzc0ljb24gY2xhc3NOYW1lPVwiaW5jb3JyZWN0XCIgLz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHJlZj17dGhpcy5oaWRkZW5SZWZ9XG4gICAgICAgICAgc3R5bGU9e3sgcG9zaXRpb246ICdhYnNvbHV0ZScsIHZpc2liaWxpdHk6ICdoaWRkZW4nLCB0b3A6IDAsIGxlZnQ6IDAgfX1cbiAgICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgPlxuICAgICAgICAgIHsoY2hvaWNlcyB8fCBbXSkubWFwKChjLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPFN0eWxlZE1lbnVJdGVtXG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFN0eWxlZExhYmVsIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogYy5sYWJlbCB9fSAvPlxuICAgICAgICAgICAgPC9TdHlsZWRNZW51SXRlbT5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxTdHlsZWRJbnB1dExhYmVsIGlkPXtsYWJlbElkfSB0YWJJbmRleD17LTF9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgIHtsYWJlbFRleHR9XG4gICAgICAgIDwvU3R5bGVkSW5wdXRMYWJlbD5cbiAgICAgICAgPFN0eWxlZEJ1dHRvblxuICAgICAgICAgIHJlZj17dGhpcy5idXR0b25SZWZ9XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIC4uLih0aGlzLnN0YXRlLm1lbnVXaWR0aCAmJiB7IG1pbldpZHRoOiBgY2FsYygke3RoaXMuc3RhdGUubWVudVdpZHRofXB4ICsgOHB4KWAgfSksXG4gICAgICAgICAgICBib3JkZXJXaWR0aDogb3BlbiA/ICcycHgnIDogJzFweCcsXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiAnYm9yZGVyLXdpZHRoIDAuMnMgZWFzZS1pbi1vdXQnLFxuICAgICAgICAgIH19XG4gICAgICAgICAgYXJpYS1jb250cm9scz17b3BlbiA/IG1lbnVJZCA6IHVuZGVmaW5lZH1cbiAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gICAgICAgICAgYXJpYS1leHBhbmRlZD17b3BlbiA/ICd0cnVlJyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICBhcmlhLWFjdGl2ZWRlc2NlbmRhbnQ9e3RoaXMuc3RhdGUuaGlnaGxpZ2h0ZWRPcHRpb25JZH1cbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfVxuICAgICAgICAgIGNsYXNzTmFtZT17ZGlzYWJsZWRDbGFzc31cbiAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgaWQ9e2J1dHRvbklkfVxuICAgICAgICAgIHJvbGU9XCJjb21ib2JveFwiXG4gICAgICAgICAgYXJpYS1sYWJlbD17YFNlbGVjdCBhbiBvcHRpb24gZm9yICR7bGFiZWxUZXh0fWB9XG4gICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXt2YWx1ZURpc3BsYXlJZH1cbiAgICAgICAgPlxuICAgICAgICAgIHtjb3JyZWN0bmVzc0ljb259XG4gICAgICAgICAgPFN0eWxlZExhYmVsXG4gICAgICAgICAgICBpZD17dmFsdWVEaXNwbGF5SWR9XG4gICAgICAgICAgICByZWY9e3RoaXMucHJldmlld1JlZn1cbiAgICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7XG4gICAgICAgICAgICAgIF9faHRtbDogY29ycmVjdFZhbHVlXG4gICAgICAgICAgICAgICAgPyBjb3JyZWN0VmFsdWVcbiAgICAgICAgICAgICAgICA6IG9wZW4gJiYgdGhpcy5zdGF0ZS5wcmV2aWV3VmFsdWVcbiAgICAgICAgICAgICAgICA/IHRoaXMuZ2V0TGFiZWwoY2hvaWNlcywgdGhpcy5zdGF0ZS5wcmV2aWV3VmFsdWUpXG4gICAgICAgICAgICAgICAgOiB0aGlzLmdldExhYmVsKGNob2ljZXMsIHZhbHVlKSB8fCAnJyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7b3BlbiA/IDxBcnJvd0Ryb3BVcEljb24gLz4gOiA8QXJyb3dEcm9wRG93bkljb24gLz59XG4gICAgICAgIDwvU3R5bGVkQnV0dG9uPlxuICAgICAgICA8U3R5bGVkTWVudVxuICAgICAgICAgIGlkPXttZW51SWR9XG4gICAgICAgICAgYW5jaG9yRWw9e2FuY2hvckVsfVxuICAgICAgICAgIGtlZXBNb3VudGVkXG4gICAgICAgICAgb3Blbj17b3Blbn1cbiAgICAgICAgICBvbkNsb3NlPXt0aGlzLmhhbmRsZUNsb3NlfVxuICAgICAgICAgIGdldENvbnRlbnRBbmNob3JFbD17bnVsbH1cbiAgICAgICAgICBhbmNob3JPcmlnaW49e3sgdmVydGljYWw6ICdib3R0b20nLCBob3Jpem9udGFsOiAnbGVmdCcgfX1cbiAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW49e3sgdmVydGljYWw6ICd0b3AnLCBob3Jpem9udGFsOiAnbGVmdCcgfX1cbiAgICAgICAgICB0cmFuc2l0aW9uRHVyYXRpb249e3sgZW50ZXI6IDIyNSwgZXhpdDogMTk1IH19XG4gICAgICAgICAgc2xvdFByb3BzPXt7XG4gICAgICAgICAgICBwYXBlcjogdGhpcy5zdGF0ZS5tZW51V2lkdGggPyB7IHN0eWxlOiB7IG1pbldpZHRoOiB0aGlzLnN0YXRlLm1lbnVXaWR0aCwgcGFkZGluZzogJzRweCcgfSB9IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbGlzdDoge1xuICAgICAgICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogYnV0dG9uSWQsXG4gICAgICAgICAgICAgIHJvbGU6ICdsaXN0Ym94JyxcbiAgICAgICAgICAgICAgZGlzYWJsZVBhZGRpbmc6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICB7KGNob2ljZXMgfHwgW10pLm1hcCgoYywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbklkID0gYGRyb3Bkb3duLW9wdGlvbi0ke2lkfS0ke2luZGV4fWA7XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxTdHlsZWRNZW51SXRlbVxuICAgICAgICAgICAgICAgIGlkPXtvcHRpb25JZH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2MudmFsdWUgPT09IHZhbHVlID8gJ3NlbGVjdGVkJyA6ICcnfVxuICAgICAgICAgICAgICAgIGtleT17YCR7Yy5sYWJlbH0tJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgIHZhbHVlPXtjLnZhbHVlfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlU2VsZWN0KGMudmFsdWUsIGluZGV4KX1cbiAgICAgICAgICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICBhcmlhLXNlbGVjdGVkPXt0aGlzLnN0YXRlLmhpZ2hsaWdodGVkT3B0aW9uSWQgPT09IG9wdGlvbklkID8gJ3RydWUnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgIG9uTW91c2VPdmVyPXsoKSA9PiB0aGlzLmhhbmRsZUhvdmVyKGluZGV4KX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxTdHlsZWRMYWJlbFxuICAgICAgICAgICAgICAgICAgcmVmPXsocmVmKSA9PiAodGhpcy5lbGVtZW50UmVmc1tpbmRleF0gPSByZWYpfVxuICAgICAgICAgICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiBjLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8U3R5bGVkU2VsZWN0ZWRJbmRpY2F0b3JcbiAgICAgICAgICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogYy52YWx1ZSA9PT0gdmFsdWUgPyAnICZjaGVjazsnIDogJycgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L1N0eWxlZE1lbnVJdGVtPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9TdHlsZWRNZW51PlxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEcm9wZG93bjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLFdBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLEtBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLFNBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLGNBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLFlBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLE1BQUEsR0FBQVQsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFTLE1BQUEsR0FBQVYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFVLE9BQUEsR0FBQVYsT0FB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
|