@pie-lib/mask-markup 1.33.3-next.2 → 1.33.4-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.
Files changed (72) hide show
  1. package/CHANGELOG.md +6 -76
  2. package/lib/__tests__/drag-in-the-blank.test.js +129 -0
  3. package/lib/__tests__/index.test.js +42 -0
  4. package/lib/__tests__/mask.test.js +163 -0
  5. package/lib/__tests__/serialization.test.js +44 -0
  6. package/lib/__tests__/utils.js +14 -0
  7. package/lib/__tests__/with-mask.test.js +110 -0
  8. package/lib/choices/__tests__/index.test.js +101 -0
  9. package/lib/choices/choice.js +99 -204
  10. package/lib/choices/choice.js.map +1 -1
  11. package/lib/choices/index.js +22 -54
  12. package/lib/choices/index.js.map +1 -1
  13. package/lib/componentize.js +2 -6
  14. package/lib/componentize.js.map +1 -1
  15. package/lib/components/__tests__/blank.test.js +189 -0
  16. package/lib/components/__tests__/correct-input.test.js +132 -0
  17. package/lib/components/__tests__/dropdown.test.js +134 -0
  18. package/lib/components/__tests__/input.test.js +129 -0
  19. package/lib/components/blank.js +304 -362
  20. package/lib/components/blank.js.map +1 -1
  21. package/lib/components/correct-input.js +42 -66
  22. package/lib/components/correct-input.js.map +1 -1
  23. package/lib/components/dropdown.js +219 -258
  24. package/lib/components/dropdown.js.map +1 -1
  25. package/lib/components/input.js +11 -18
  26. package/lib/components/input.js.map +1 -1
  27. package/lib/constructed-response.js +39 -53
  28. package/lib/constructed-response.js.map +1 -1
  29. package/lib/customizable.js +6 -10
  30. package/lib/customizable.js.map +1 -1
  31. package/lib/drag-in-the-blank.js +141 -106
  32. package/lib/drag-in-the-blank.js.map +1 -1
  33. package/lib/index.js +1 -8
  34. package/lib/index.js.map +1 -1
  35. package/lib/inline-dropdown.js +5 -13
  36. package/lib/inline-dropdown.js.map +1 -1
  37. package/lib/mask.js +61 -119
  38. package/lib/mask.js.map +1 -1
  39. package/lib/serialization.js +9 -49
  40. package/lib/serialization.js.map +1 -1
  41. package/lib/with-mask.js +31 -59
  42. package/lib/with-mask.js.map +1 -1
  43. package/package.json +12 -20
  44. package/src/__tests__/drag-in-the-blank.test.js +66 -26
  45. package/src/__tests__/mask.test.js +147 -112
  46. package/src/__tests__/with-mask.test.js +44 -19
  47. package/src/choices/__tests__/index.test.js +38 -25
  48. package/src/choices/choice.jsx +86 -153
  49. package/src/choices/index.jsx +9 -3
  50. package/src/components/__tests__/blank.test.js +92 -156
  51. package/src/components/__tests__/correct-input.test.js +60 -19
  52. package/src/components/__tests__/dropdown.test.js +61 -19
  53. package/src/components/__tests__/input.test.js +72 -20
  54. package/src/components/blank.jsx +273 -272
  55. package/src/components/correct-input.jsx +33 -39
  56. package/src/components/dropdown.jsx +173 -161
  57. package/src/constructed-response.jsx +22 -18
  58. package/src/drag-in-the-blank.jsx +131 -42
  59. package/src/mask.jsx +38 -29
  60. package/src/with-mask.jsx +7 -4
  61. package/esm/index.css +0 -847
  62. package/esm/index.js +0 -195939
  63. package/esm/index.js.map +0 -1
  64. package/esm/package.json +0 -3
  65. package/src/__tests__/__snapshots__/drag-in-the-blank.test.js.snap +0 -316
  66. package/src/__tests__/__snapshots__/mask.test.js.snap +0 -55
  67. package/src/__tests__/__snapshots__/with-mask.test.js.snap +0 -62
  68. package/src/choices/__tests__/__snapshots__/index.test.js.snap +0 -209
  69. package/src/components/__tests__/__snapshots__/blank.test.js.snap +0 -111
  70. package/src/components/__tests__/__snapshots__/correct-input.test.js.snap +0 -64
  71. package/src/components/__tests__/__snapshots__/dropdown.test.js.snap +0 -136
  72. package/src/components/__tests__/__snapshots__/input.test.js.snap +0 -34
@@ -1,117 +1,221 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports["default"] = void 0;
9
-
10
8
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
-
12
9
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
-
14
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
15
-
16
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
-
18
10
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
19
-
20
11
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
21
-
12
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
22
13
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
23
-
24
14
  var _react = _interopRequireDefault(require("react"));
25
-
26
15
  var _propTypes = _interopRequireDefault(require("prop-types"));
27
-
28
- var _Button = _interopRequireDefault(require("@material-ui/core/Button"));
29
-
30
- var _InputLabel = _interopRequireDefault(require("@material-ui/core/InputLabel"));
31
-
32
- var _Menu = _interopRequireDefault(require("@material-ui/core/Menu"));
33
-
34
- var _MenuItem = _interopRequireDefault(require("@material-ui/core/MenuItem"));
35
-
36
- var _ArrowDropDown = _interopRequireDefault(require("@material-ui/icons/ArrowDropDown"));
37
-
38
- var _ArrowDropUp = _interopRequireDefault(require("@material-ui/icons/ArrowDropUp"));
39
-
40
- var _Close = _interopRequireDefault(require("@material-ui/icons/Close"));
41
-
42
- var _Check = _interopRequireDefault(require("@material-ui/icons/Check"));
43
-
44
- var _styles = require("@material-ui/core/styles");
45
-
46
- var _classnames = _interopRequireDefault(require("classnames"));
47
-
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");
48
25
  var _renderUi = require("@pie-lib/render-ui");
49
-
50
26
  var _mathRendering = require("@pie-lib/math-rendering");
51
-
52
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
53
-
54
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
55
-
56
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
57
-
58
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
59
-
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
+ });
60
175
  var Dropdown = /*#__PURE__*/function (_React$Component) {
61
- (0, _inherits2["default"])(Dropdown, _React$Component);
62
-
63
- var _super = _createSuper(Dropdown);
64
-
65
176
  function Dropdown(props) {
66
177
  var _this;
67
-
68
178
  (0, _classCallCheck2["default"])(this, Dropdown);
69
- _this = _super.call(this, props);
70
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleClick", function (event) {
179
+ _this = _callSuper(this, Dropdown, [props]);
180
+ (0, _defineProperty2["default"])(_this, "handleClick", function (event) {
71
181
  return _this.setState({
72
182
  anchorEl: event.currentTarget
73
183
  });
74
184
  });
75
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleClose", function () {
185
+ (0, _defineProperty2["default"])(_this, "handleClose", function () {
76
186
  var value = _this.props.value;
77
-
78
187
  _this.setState({
79
188
  anchorEl: null,
80
189
  previewValue: null,
81
190
  highlightedOptionId: null
82
- }); // clear displayed preview if no selection
83
-
84
-
191
+ });
192
+ // clear displayed preview if no selection
85
193
  if (!value && _this.previewRef.current) {
86
194
  _this.previewRef.current.innerHTML = '';
87
195
  }
88
196
  });
89
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleHighlight", function (index) {
90
- var highlightedOptionId = "dropdown-option-".concat(_this.props.id, "-").concat(index); // preview on hover if nothing selected
197
+ (0, _defineProperty2["default"])(_this, "handleHighlight", function (index) {
198
+ var highlightedOptionId = "dropdown-option-".concat(_this.props.id, "-").concat(index);
91
199
 
200
+ // preview on hover if nothing selected
92
201
  var stateUpdate = {
93
202
  highlightedOptionId: highlightedOptionId
94
203
  };
95
-
96
204
  if (!_this.props.value) {
97
205
  stateUpdate.previewValue = _this.props.choices[index].value;
98
206
  }
99
-
100
207
  _this.setState(stateUpdate);
101
208
  });
102
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleSelect", function (value, index) {
209
+ (0, _defineProperty2["default"])(_this, "handleSelect", function (value, index) {
103
210
  _this.props.onChange(_this.props.id, value);
104
-
105
211
  _this.handleHighlight(index);
106
-
107
212
  _this.handleClose();
108
213
  });
109
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleHover", function (index) {
214
+ (0, _defineProperty2["default"])(_this, "handleHover", function (index) {
110
215
  var selectedValue = _this.props.value;
111
216
  if (selectedValue) return;
112
217
  var highlightedOptionId = "dropdown-option-".concat(_this.props.id, "-").concat(index);
113
218
  var previewValue = _this.state.previewValue;
114
-
115
219
  _this.setState({
116
220
  highlightedOptionId: highlightedOptionId,
117
221
  previewValue: previewValue
@@ -119,7 +223,6 @@ var Dropdown = /*#__PURE__*/function (_React$Component) {
119
223
  // On hover, preview the math-rendered content inside the button if no value is selected.
120
224
  var ref = _this.elementRefs[index];
121
225
  var preview = _this.previewRef.current;
122
-
123
226
  if (ref && preview) {
124
227
  preview.innerHTML = ref.innerHTML;
125
228
  }
@@ -137,8 +240,8 @@ var Dropdown = /*#__PURE__*/function (_React$Component) {
137
240
  _this.elementRefs = [];
138
241
  return _this;
139
242
  }
140
-
141
- (0, _createClass2["default"])(Dropdown, [{
243
+ (0, _inherits2["default"])(Dropdown, _React$Component);
244
+ return (0, _createClass2["default"])(Dropdown, [{
142
245
  key: "componentDidMount",
143
246
  value: function componentDidMount() {
144
247
  // measure hidden menu width once
@@ -153,23 +256,19 @@ var Dropdown = /*#__PURE__*/function (_React$Component) {
153
256
  value: function componentDidUpdate(prevProps, prevState) {
154
257
  var hiddenEl = this.hiddenRef.current;
155
258
  var dropdownJustOpened = !prevState.anchorEl && this.state.anchorEl;
156
-
157
259
  if (dropdownJustOpened) {
158
260
  this.elementRefs.forEach(function (ref) {
159
261
  if (!ref) return;
160
262
  var containsLatex = ref.querySelector('[data-latex], [data-raw]');
161
263
  var hasMathJax = ref.querySelector('mjx-container');
162
264
  var mathHandled = ref.querySelector('[data-math-handled="true"]');
163
-
164
265
  if (containsLatex && (!mathHandled || !hasMathJax)) {
165
266
  (0, _mathRendering.renderMath)(ref);
166
267
  }
167
268
  });
168
269
  }
169
-
170
270
  if (hiddenEl) {
171
271
  var newWidth = hiddenEl.clientWidth;
172
-
173
272
  if (newWidth !== this.state.menuWidth) {
174
273
  this.elementRefs.forEach(function (ref) {
175
274
  if (ref) (0, _mathRendering.renderMath)(ref);
@@ -193,46 +292,43 @@ var Dropdown = /*#__PURE__*/function (_React$Component) {
193
292
  key: "render",
194
293
  value: function render() {
195
294
  var _this2 = this;
196
-
197
295
  var _this$props = this.props,
198
- classes = _this$props.classes,
199
- id = _this$props.id,
200
- correct = _this$props.correct,
201
- disabled = _this$props.disabled,
202
- value = _this$props.value,
203
- choices = _this$props.choices,
204
- showCorrectAnswer = _this$props.showCorrectAnswer,
205
- singleQuery = _this$props.singleQuery,
206
- correctValue = _this$props.correctValue;
296
+ id = _this$props.id,
297
+ correct = _this$props.correct,
298
+ disabled = _this$props.disabled,
299
+ value = _this$props.value,
300
+ choices = _this$props.choices,
301
+ showCorrectAnswer = _this$props.showCorrectAnswer,
302
+ singleQuery = _this$props.singleQuery,
303
+ correctValue = _this$props.correctValue;
207
304
  var anchorEl = this.state.anchorEl;
208
305
  var open = Boolean(anchorEl);
209
306
  var buttonId = "dropdown-button-".concat(id);
210
307
  var menuId = "dropdown-menu-".concat(id);
211
- var valueDisplayId = "dropdown-value-".concat(id); // Determine the class for disabled state, view mode and evaluate mode
212
-
213
- var disabledClass; // Reset elementRefs before each render to avoid stale references
308
+ var valueDisplayId = "dropdown-value-".concat(id);
214
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
215
313
  this.elementRefs = [];
216
-
217
314
  if (disabled && correct !== undefined) {
218
- disabledClass = correct || showCorrectAnswer ? classes.disabledCorrect : classes.disabledIncorrect;
219
- } // Create distinct, visually hidden labels for each dropdown
220
-
315
+ disabledClass = correct || showCorrectAnswer ? 'disabledCorrect' : 'disabledIncorrect';
316
+ }
221
317
 
318
+ // Create distinct, visually hidden labels for each dropdown
222
319
  var incrementedId = parseInt(id, 10) + 1;
223
320
  var labelId = singleQuery ? 'Query-label' : "Query-label-".concat(incrementedId);
224
- var labelText = singleQuery ? 'Query' : "Query ".concat(incrementedId); // 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.
321
+ var labelText = singleQuery ? 'Query' : "Query ".concat(incrementedId);
225
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.
226
324
  var correctnessIcon = null;
227
-
228
325
  if (disabled && correct !== undefined) {
229
- correctnessIcon = correct || showCorrectAnswer ? /*#__PURE__*/_react["default"].createElement(_Check["default"], {
230
- className: (0, _classnames["default"])(classes.correctnessIndicatorIcon, classes.correctIcon)
231
- }) : /*#__PURE__*/_react["default"].createElement(_Close["default"], {
232
- className: (0, _classnames["default"])(classes.correctnessIndicatorIcon, classes.incorrectIcon)
326
+ correctnessIcon = correct || showCorrectAnswer ? /*#__PURE__*/_react["default"].createElement(StyledCorrectnessIcon, {
327
+ className: "correct"
328
+ }) : /*#__PURE__*/_react["default"].createElement(StyledIncorrectnessIcon, {
329
+ className: "incorrect"
233
330
  });
234
331
  }
235
-
236
332
  return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
237
333
  ref: this.hiddenRef,
238
334
  style: {
@@ -244,26 +340,20 @@ var Dropdown = /*#__PURE__*/function (_React$Component) {
244
340
  tabIndex: -1,
245
341
  "aria-hidden": "true"
246
342
  }, (choices || []).map(function (c, index) {
247
- return /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], {
343
+ return /*#__PURE__*/_react["default"].createElement(StyledMenuItem, {
248
344
  key: index,
249
- classes: {
250
- root: classes.menuRoot,
251
- selected: classes.selected
252
- },
253
345
  tabIndex: -1,
254
346
  "aria-hidden": "true"
255
- }, /*#__PURE__*/_react["default"].createElement("span", {
256
- className: classes.label,
347
+ }, /*#__PURE__*/_react["default"].createElement(StyledLabel, {
257
348
  dangerouslySetInnerHTML: {
258
349
  __html: c.label
259
350
  }
260
351
  }));
261
- })), /*#__PURE__*/_react["default"].createElement(_InputLabel["default"], {
262
- className: classes.srOnly,
352
+ })), /*#__PURE__*/_react["default"].createElement(StyledInputLabel, {
263
353
  id: labelId,
264
354
  tabIndex: -1,
265
355
  "aria-hidden": "true"
266
- }, labelText), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
356
+ }, labelText), /*#__PURE__*/_react["default"].createElement(StyledButton, {
267
357
  ref: this.buttonRef,
268
358
  style: _objectSpread(_objectSpread({}, this.state.menuWidth && {
269
359
  minWidth: "calc(".concat(this.state.menuWidth, "px + 8px)")
@@ -276,26 +366,21 @@ var Dropdown = /*#__PURE__*/function (_React$Component) {
276
366
  "aria-expanded": open ? 'true' : undefined,
277
367
  "aria-activedescendant": this.state.highlightedOptionId,
278
368
  onClick: this.handleClick,
279
- classes: {
280
- root: classes.root,
281
- disabled: disabledClass
282
- },
369
+ className: disabledClass,
283
370
  disabled: disabled,
284
371
  id: buttonId,
285
372
  role: "combobox",
286
373
  "aria-label": "Select an option for ".concat(labelText),
287
374
  "aria-labelledby": valueDisplayId
288
- }, correctnessIcon, /*#__PURE__*/_react["default"].createElement("span", {
375
+ }, correctnessIcon, /*#__PURE__*/_react["default"].createElement(StyledLabel, {
289
376
  id: valueDisplayId,
290
377
  ref: this.previewRef,
291
- className: classes.label,
292
378
  dangerouslySetInnerHTML: {
293
379
  __html: correctValue ? correctValue : open && this.state.previewValue ? this.getLabel(choices, this.state.previewValue) : this.getLabel(choices, value) || ''
294
380
  }
295
- }), open ? /*#__PURE__*/_react["default"].createElement(_ArrowDropUp["default"], null) : /*#__PURE__*/_react["default"].createElement(_ArrowDropDown["default"], null)), /*#__PURE__*/_react["default"].createElement(_Menu["default"], {
381
+ }), open ? /*#__PURE__*/_react["default"].createElement(_ArrowDropUp["default"], null) : /*#__PURE__*/_react["default"].createElement(_ArrowDropDown["default"], null)), /*#__PURE__*/_react["default"].createElement(StyledMenu, {
296
382
  id: menuId,
297
383
  anchorEl: anchorEl,
298
- className: classes.selectMenu,
299
384
  keepMounted: true,
300
385
  open: open,
301
386
  onClose: this.handleClose,
@@ -308,25 +393,28 @@ var Dropdown = /*#__PURE__*/function (_React$Component) {
308
393
  vertical: 'top',
309
394
  horizontal: 'left'
310
395
  },
311
- PaperProps: this.state.menuWidth ? {
312
- style: {
313
- minWidth: this.state.menuWidth,
314
- padding: '4px'
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
315
411
  }
316
- } : undefined,
317
- MenuListProps: {
318
- 'aria-labelledby': buttonId,
319
- role: 'listbox',
320
- disablePadding: true
321
412
  }
322
413
  }, (choices || []).map(function (c, index) {
323
414
  var optionId = "dropdown-option-".concat(id, "-").concat(index);
324
- return /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], {
415
+ return /*#__PURE__*/_react["default"].createElement(StyledMenuItem, {
325
416
  id: optionId,
326
- classes: {
327
- root: classes.menuRoot,
328
- selected: classes.selected
329
- },
417
+ className: c.value === value ? 'selected' : '',
330
418
  key: "".concat(c.label, "-").concat(index),
331
419
  value: c.value,
332
420
  onClick: function onClick() {
@@ -337,16 +425,14 @@ var Dropdown = /*#__PURE__*/function (_React$Component) {
337
425
  onMouseOver: function onMouseOver() {
338
426
  return _this2.handleHover(index);
339
427
  }
340
- }, /*#__PURE__*/_react["default"].createElement("span", {
428
+ }, /*#__PURE__*/_react["default"].createElement(StyledLabel, {
341
429
  ref: function ref(_ref) {
342
430
  return _this2.elementRefs[index] = _ref;
343
431
  },
344
- className: classes.label,
345
432
  dangerouslySetInnerHTML: {
346
433
  __html: c.label
347
434
  }
348
- }), /*#__PURE__*/_react["default"].createElement("span", {
349
- className: classes.selectedIndicator,
435
+ }), /*#__PURE__*/_react["default"].createElement(StyledSelectedIndicator, {
350
436
  dangerouslySetInnerHTML: {
351
437
  __html: c.value === value ? ' &check;' : ''
352
438
  }
@@ -354,15 +440,12 @@ var Dropdown = /*#__PURE__*/function (_React$Component) {
354
440
  })));
355
441
  }
356
442
  }]);
357
- return Dropdown;
358
443
  }(_react["default"].Component);
359
-
360
444
  (0, _defineProperty2["default"])(Dropdown, "propTypes", {
361
445
  id: _propTypes["default"].string,
362
446
  value: _propTypes["default"].string,
363
447
  disabled: _propTypes["default"].bool,
364
448
  onChange: _propTypes["default"].func,
365
- classes: _propTypes["default"].object,
366
449
  correct: _propTypes["default"].bool,
367
450
  choices: _propTypes["default"].arrayOf(_propTypes["default"].shape({
368
451
  value: _propTypes["default"].string,
@@ -372,127 +455,5 @@ var Dropdown = /*#__PURE__*/function (_React$Component) {
372
455
  singleQuery: _propTypes["default"].bool,
373
456
  correctValue: _propTypes["default"].string
374
457
  });
375
-
376
- var styles = function styles() {
377
- return {
378
- root: {
379
- color: _renderUi.color.text(),
380
- border: "1px solid ".concat(_renderUi.color.borderGray()),
381
- borderRadius: '4px',
382
- justifyContent: 'space-between',
383
- backgroundColor: _renderUi.color.background(),
384
- position: 'relative',
385
- height: '45px',
386
- width: 'fit-content',
387
- margin: '2px',
388
- textTransform: 'none',
389
- '& span': {
390
- paddingRight: '5px'
391
- },
392
- '& svg': {
393
- position: 'absolute',
394
- right: 0,
395
- top: 'calc(50% - 12px)',
396
- pointerEvents: 'none',
397
- color: _renderUi.color.text(),
398
- marginLeft: '5px'
399
- },
400
- '&:focus, &:focus-visible': {
401
- outline: "3px solid ".concat(_renderUi.color.tertiary()),
402
- outlineOffset: '2px',
403
- borderWidth: '3px'
404
- }
405
- },
406
- disabledCorrect: {
407
- borderWidth: '2px',
408
- borderColor: _renderUi.color.correct(),
409
- color: "".concat(_renderUi.color.text(), " !important")
410
- },
411
- disabledIncorrect: {
412
- borderWidth: '2px',
413
- borderColor: _renderUi.color.incorrectWithIcon(),
414
- color: "".concat(_renderUi.color.text(), " !important")
415
- },
416
- selectMenu: {
417
- backgroundColor: _renderUi.color.background(),
418
- border: "1px solid ".concat(_renderUi.color.correct(), " !important"),
419
- '&:hover': {
420
- border: "1px solid ".concat(_renderUi.color.text(), " "),
421
- borderColor: 'initial'
422
- },
423
- '&:focus': {
424
- border: "1px solid ".concat(_renderUi.color.text()),
425
- borderColor: 'initial'
426
- },
427
- // remove default padding on the inner list
428
- '& .MuiList-root': {
429
- padding: 0
430
- }
431
- },
432
- selected: {
433
- color: "".concat(_renderUi.color.text(), " !important"),
434
- backgroundColor: "".concat(_renderUi.color.background(), " !important"),
435
- '&:hover': {
436
- color: _renderUi.color.text(),
437
- backgroundColor: "".concat(_renderUi.color.dropdownBackground(), " !important")
438
- }
439
- },
440
- menuRoot: {
441
- color: _renderUi.color.text(),
442
- backgroundColor: _renderUi.color.background(),
443
- '&:focus, &:focus-visible': {
444
- outline: "3px solid ".concat(_renderUi.color.tertiary()),
445
- outlineOffset: '-1px' // keeps it inside the item
446
-
447
- },
448
- '&:focus': {
449
- color: _renderUi.color.text(),
450
- backgroundColor: _renderUi.color.background()
451
- },
452
- '&:hover': {
453
- color: _renderUi.color.text(),
454
- backgroundColor: _renderUi.color.dropdownBackground()
455
- },
456
- boxSizing: 'border-box',
457
- padding: '25px',
458
- borderRadius: '4px'
459
- },
460
- label: {
461
- fontSize: 'max(1rem, 14px)'
462
- },
463
- selectedIndicator: {
464
- fontSize: 'max(1rem, 14px)',
465
- position: 'absolute',
466
- right: '10px'
467
- },
468
- srOnly: {
469
- position: 'absolute',
470
- left: '-10000px',
471
- top: 'auto',
472
- width: '1px',
473
- height: '1px',
474
- overflow: 'hidden'
475
- },
476
- correctnessIndicatorIcon: {
477
- color: "".concat(_renderUi.color.white(), " !important"),
478
- position: 'absolute',
479
- top: '-8px !important',
480
- left: '-8px',
481
- marginLeft: '0 !important',
482
- borderRadius: '50%',
483
- fontSize: '16px',
484
- padding: '2px'
485
- },
486
- correctIcon: {
487
- backgroundColor: _renderUi.color.correct()
488
- },
489
- incorrectIcon: {
490
- backgroundColor: _renderUi.color.incorrectWithIcon()
491
- }
492
- };
493
- };
494
-
495
- var _default = (0, _styles.withStyles)(styles)(Dropdown);
496
-
497
- exports["default"] = _default;
498
- //# 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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