@sapui5/sap.fe.macros 1.138.0 → 1.139.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +269 -0
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
  5. package/src/sap/fe/macros/Chart.js +1 -1
  6. package/src/sap/fe/macros/Chart.tsx +1 -1
  7. package/src/sap/fe/macros/CommonHelper.js +2 -2
  8. package/src/sap/fe/macros/CommonHelper.ts +1 -1
  9. package/src/sap/fe/macros/Field.js +21 -4
  10. package/src/sap/fe/macros/Field.ts +21 -3
  11. package/src/sap/fe/macros/FooterContent.js +40 -10
  12. package/src/sap/fe/macros/FooterContent.tsx +44 -8
  13. package/src/sap/fe/macros/FormElement.js +2 -2
  14. package/src/sap/fe/macros/FormElement.ts +1 -2
  15. package/src/sap/fe/macros/MultiValueField.js +17 -4
  16. package/src/sap/fe/macros/MultiValueField.tsx +7 -2
  17. package/src/sap/fe/macros/RichTextEditor.js +30 -6
  18. package/src/sap/fe/macros/RichTextEditor.tsx +34 -7
  19. package/src/sap/fe/macros/Share.js +73 -40
  20. package/src/sap/fe/macros/Share.tsx +29 -1
  21. package/src/sap/fe/macros/ValueHelp.js +4 -29
  22. package/src/sap/fe/macros/ValueHelp.tsx +2 -43
  23. package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
  24. package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
  25. package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
  26. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
  27. package/src/sap/fe/macros/ai/EasyFilterBar.js +30 -30
  28. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +40 -43
  29. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
  30. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
  31. package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
  32. package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
  33. package/src/sap/fe/macros/chart/MdcChartTemplate.js +20 -6
  34. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +16 -8
  35. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
  36. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
  37. package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
  38. package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
  39. package/src/sap/fe/macros/controls/FilterBar.js +86 -3
  40. package/src/sap/fe/macros/controls/FilterBar.ts +97 -2
  41. package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
  42. package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
  43. package/src/sap/fe/macros/controls/Section.js +3 -2
  44. package/src/sap/fe/macros/controls/Section.ts +2 -1
  45. package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
  46. package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
  47. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
  48. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
  49. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
  50. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
  51. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  52. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  53. package/src/sap/fe/macros/designtime/Designtime.helper.js +12 -2
  54. package/src/sap/fe/macros/designtime/Designtime.helper.ts +12 -0
  55. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +16 -5
  56. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +6 -1
  57. package/src/sap/fe/macros/field/FieldBaseDelegate.js +20 -8
  58. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +34 -9
  59. package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
  60. package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
  61. package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
  62. package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
  63. package/src/sap/fe/macros/filter/FilterUtils.js +7 -1
  64. package/src/sap/fe/macros/filter/FilterUtils.ts +7 -0
  65. package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
  66. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
  67. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
  68. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
  69. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
  70. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
  71. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
  72. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
  73. package/src/sap/fe/macros/form/Form.block.js +6 -2
  74. package/src/sap/fe/macros/form/Form.block.ts +4 -1
  75. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
  76. package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
  77. package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
  78. package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
  79. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  80. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  81. package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
  82. package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
  83. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
  84. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
  85. package/src/sap/fe/macros/internal/DataPoint.js +2 -1
  86. package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
  87. package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
  88. package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
  89. package/src/sap/fe/macros/internal/FilterField.block.js +4 -2
  90. package/src/sap/fe/macros/internal/FilterField.block.ts +3 -1
  91. package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
  92. package/src/sap/fe/macros/internal/field/DisplayStyle.js +52 -12
  93. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +54 -5
  94. package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
  95. package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
  96. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
  97. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +10 -0
  98. package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
  99. package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
  100. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  101. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +3 -3
  102. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -0
  103. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +11 -3
  104. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +12 -7
  105. package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
  106. package/src/sap/fe/macros/library.js +1 -1
  107. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +11 -6
  108. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +12 -7
  109. package/src/sap/fe/macros/messagebundle.properties +37 -29
  110. package/src/sap/fe/macros/messagebundle_ar.properties +5 -3
  111. package/src/sap/fe/macros/messagebundle_bg.properties +6 -4
  112. package/src/sap/fe/macros/messagebundle_ca.properties +8 -6
  113. package/src/sap/fe/macros/messagebundle_cnr.properties +5 -3
  114. package/src/sap/fe/macros/messagebundle_cs.properties +4 -2
  115. package/src/sap/fe/macros/messagebundle_cy.properties +7 -5
  116. package/src/sap/fe/macros/messagebundle_da.properties +6 -4
  117. package/src/sap/fe/macros/messagebundle_de.properties +11 -9
  118. package/src/sap/fe/macros/messagebundle_el.properties +7 -5
  119. package/src/sap/fe/macros/messagebundle_en.properties +8 -6
  120. package/src/sap/fe/macros/messagebundle_en_GB.properties +8 -6
  121. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +8 -6
  122. package/src/sap/fe/macros/messagebundle_es.properties +6 -4
  123. package/src/sap/fe/macros/messagebundle_es_MX.properties +6 -4
  124. package/src/sap/fe/macros/messagebundle_et.properties +5 -3
  125. package/src/sap/fe/macros/messagebundle_fi.properties +8 -6
  126. package/src/sap/fe/macros/messagebundle_fr.properties +6 -4
  127. package/src/sap/fe/macros/messagebundle_fr_CA.properties +8 -6
  128. package/src/sap/fe/macros/messagebundle_hi.properties +6 -4
  129. package/src/sap/fe/macros/messagebundle_hr.properties +6 -4
  130. package/src/sap/fe/macros/messagebundle_hu.properties +4 -2
  131. package/src/sap/fe/macros/messagebundle_id.properties +8 -6
  132. package/src/sap/fe/macros/messagebundle_it.properties +4 -2
  133. package/src/sap/fe/macros/messagebundle_iw.properties +5 -3
  134. package/src/sap/fe/macros/messagebundle_ja.properties +5 -3
  135. package/src/sap/fe/macros/messagebundle_kk.properties +5 -3
  136. package/src/sap/fe/macros/messagebundle_ko.properties +4 -2
  137. package/src/sap/fe/macros/messagebundle_lt.properties +6 -4
  138. package/src/sap/fe/macros/messagebundle_lv.properties +5 -3
  139. package/src/sap/fe/macros/messagebundle_mk.properties +5 -3
  140. package/src/sap/fe/macros/messagebundle_ms.properties +8 -6
  141. package/src/sap/fe/macros/messagebundle_nl.properties +7 -5
  142. package/src/sap/fe/macros/messagebundle_no.properties +6 -4
  143. package/src/sap/fe/macros/messagebundle_pl.properties +6 -4
  144. package/src/sap/fe/macros/messagebundle_pt.properties +7 -5
  145. package/src/sap/fe/macros/messagebundle_pt_PT.properties +6 -4
  146. package/src/sap/fe/macros/messagebundle_ro.properties +7 -5
  147. package/src/sap/fe/macros/messagebundle_ru.properties +4 -2
  148. package/src/sap/fe/macros/messagebundle_sh.properties +5 -3
  149. package/src/sap/fe/macros/messagebundle_sk.properties +5 -3
  150. package/src/sap/fe/macros/messagebundle_sl.properties +6 -4
  151. package/src/sap/fe/macros/messagebundle_sr.properties +5 -3
  152. package/src/sap/fe/macros/messagebundle_sv.properties +5 -3
  153. package/src/sap/fe/macros/messagebundle_th.properties +4 -2
  154. package/src/sap/fe/macros/messagebundle_tr.properties +4 -2
  155. package/src/sap/fe/macros/messagebundle_uk.properties +10 -8
  156. package/src/sap/fe/macros/messagebundle_vi.properties +6 -4
  157. package/src/sap/fe/macros/messagebundle_zh_CN.properties +5 -3
  158. package/src/sap/fe/macros/messagebundle_zh_TW.properties +5 -3
  159. package/src/sap/fe/macros/messages/MessageButton.js +17 -19
  160. package/src/sap/fe/macros/messages/MessageButton.ts +24 -22
  161. package/src/sap/fe/macros/table/Action.js +24 -2
  162. package/src/sap/fe/macros/table/Action.ts +13 -0
  163. package/src/sap/fe/macros/table/ActionGroup.js +24 -2
  164. package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
  165. package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
  166. package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
  167. package/src/sap/fe/macros/table/ActionOverride.js +24 -2
  168. package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
  169. package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
  170. package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
  171. package/src/sap/fe/macros/table/Column.js +3 -3
  172. package/src/sap/fe/macros/table/Column.ts +2 -2
  173. package/src/sap/fe/macros/table/MdcTableTemplate.js +20 -8
  174. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +32 -6
  175. package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
  176. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
  177. package/src/sap/fe/macros/table/Table.block.js +137 -108
  178. package/src/sap/fe/macros/table/Table.block.tsx +29 -2
  179. package/src/sap/fe/macros/table/Table.js +7 -1
  180. package/src/sap/fe/macros/table/Table.tsx +7 -1
  181. package/src/sap/fe/macros/table/TableAPI.js +150 -133
  182. package/src/sap/fe/macros/table/TableAPI.ts +20 -3
  183. package/src/sap/fe/macros/table/TableDefinition.js +4 -2
  184. package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
  185. package/src/sap/fe/macros/table/TableRuntime.js +3 -3
  186. package/src/sap/fe/macros/table/TableRuntime.ts +2 -2
  187. package/src/sap/fe/macros/table/TableSizeHelper.js +3 -3
  188. package/src/sap/fe/macros/table/TableSizeHelper.ts +5 -2
  189. package/src/sap/fe/macros/table/TreeTable.js +7 -1
  190. package/src/sap/fe/macros/table/TreeTable.tsx +7 -1
  191. package/src/sap/fe/macros/table/delegates/TableDelegate.js +27 -20
  192. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +35 -26
  193. package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
  194. package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
  195. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
  196. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
  197. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +8 -8
  198. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +7 -6
  199. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
  200. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
  201. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
  202. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
  203. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +4 -1
  204. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +3 -0
  205. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +37 -8
  206. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +47 -16
  207. package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -6
  208. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -2
  209. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +15 -3
  210. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +17 -2
@@ -49,6 +49,10 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
49
49
  }), _dec9 = property({
50
50
  type: "boolean"
51
51
  }), _dec(_class = (_class2 = /*#__PURE__*/function (_BuildingBlock) {
52
+ /**
53
+ * Timer to ensure that if the button groups are not added we restart the process.
54
+ */
55
+
52
56
  function RichTextEditorBlock(properties, others) {
53
57
  var _this;
54
58
  properties._isInEditMode = compileExpression(UI.IsEditable);
@@ -134,17 +138,13 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
134
138
  return [];
135
139
  };
136
140
  _this.getEditContent = () => {
137
- if (_this._editContent) {
138
- // It's better to destroy the rich text editor as in some case with slow machine switching between edit and display may break it
139
- _this._editContent.destroy();
140
- }
141
+ _this._cleanupPreviousRTE();
141
142
  _this._editContent = _jsx(RichTextEditor, {
142
143
  id: _this.createId("_rte"),
143
144
  value: _this.value,
144
145
  visible: true,
145
146
  customToolbar: true,
146
147
  editable: true,
147
- editorType: "TinyMCE6",
148
148
  showGroupFontStyle: true,
149
149
  showGroupTextAlign: true,
150
150
  showGroupStructure: true,
@@ -161,6 +161,11 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
161
161
  buttonGroups: _this.buttonGroups.length > 0 ? [] : undefined
162
162
  });
163
163
  _this._editContent.attachReady(_this.addButtonGroups, _this);
164
+ // Attach a timer to ensure that the button groups are added after the editor is ready
165
+ clearTimeout(_this._buttonGroupsTimer);
166
+ _this._buttonGroupsTimer = setTimeout(() => {
167
+ _this.createContentDebounced();
168
+ }, 2000);
164
169
  return _this._editContent;
165
170
  };
166
171
  return _this;
@@ -196,17 +201,36 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
196
201
  * Buttons groups need to be added when the RTE is ready, otherwise some of them are not available.
197
202
  */
198
203
  _proto.addButtonGroups = function addButtonGroups() {
204
+ clearTimeout(this._buttonGroupsTimer);
199
205
  const lateButtonGroups = this.getButtonGroups().reverse();
200
206
  // They also somehow need to be added in reverse because they also get added in the first place :D
201
207
  for (const lateButtonGroup of lateButtonGroups) {
202
208
  this._editContent?.addButtonGroup(lateButtonGroup);
203
209
  }
204
210
  this._editContent?.detachReady(this.addButtonGroups, this);
211
+ }
212
+
213
+ /**
214
+ * Method that cleans up the previous rich text editor instance.
215
+ * This is needed because the RichTextEditor control does not always destroy the TinyMCE instance,
216
+ * which can lead to issues when switching between edit and display modes.
217
+ */;
218
+ _proto._cleanupPreviousRTE = function _cleanupPreviousRTE() {
219
+ if (this._editContent) {
220
+ // It's better to destroy the rich text editor as in some case with slow machine switching between edit and display may break it
221
+ this._editContent.destroy();
222
+ // Destroy the TinyMCE instance as well
223
+ // This is needed because the RichTextEditor control does not always destroy the TinyMCE instance
224
+ }
225
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
226
+ // @ts-ignore
227
+ window.tinymce?.get(this.createId("_rte") + "-textarea")?.destroy();
205
228
  };
206
229
  _proto.getDisplayContent = function getDisplayContent() {
207
230
  if (this._displayContent) {
208
231
  this._displayContent.destroy();
209
232
  }
233
+ this._cleanupPreviousRTE();
210
234
  this._displayContent = _jsx(FormattedText, {
211
235
  htmlText: this.value
212
236
  });
@@ -274,4 +298,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
274
298
  _exports = RichTextEditorBlock;
275
299
  return _exports;
276
300
  }, false);
277
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSaWNoVGV4dEVkaXRvckJsb2NrIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwcm9wZXJ0eSIsInR5cGUiLCJyZXF1aXJlZCIsIl9kZWMzIiwiaXNCaW5kaW5nSW5mbyIsIl9kZWM0IiwiX2RlYzUiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiZGVmYXVsdENsYXNzIiwiQnV0dG9uR3JvdXAiLCJfZGVjNiIsIlBsdWdpbkRlZmluaXRpb24iLCJfZGVjNyIsIl9kZWM4IiwiYmluZGFibGUiLCJfZGVjOSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsInByb3BlcnRpZXMiLCJvdGhlcnMiLCJfdGhpcyIsIl9pc0luRWRpdE1vZGUiLCJjb21waWxlRXhwcmVzc2lvbiIsIlVJIiwiSXNFZGl0YWJsZSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiZ2V0UGx1Z2lucyIsInBsdWdpbnNBcnJheSIsImV4Y2x1ZGVEZWZhdWx0UGx1Z2lucyIsIm1hcCIsIm5hbWUiLCJwbHVnaW5zIiwibGVuZ3RoIiwicGx1Z2luIiwicHVzaCIsImdldEJ1dHRvbkdyb3VwcyIsImJ1dHRvbkdyb3VwcyIsImJ1dHRvbkdyb3VwIiwidmlzaWJsZSIsInByaW9yaXR5Iiwicm93IiwiY3VzdG9tVG9vbGJhclByaW9yaXR5IiwiYnV0dG9ucyIsInNwbGl0IiwiZ2V0RWRpdENvbnRlbnQiLCJfZWRpdENvbnRlbnQiLCJkZXN0cm95IiwiX2pzeCIsIlJpY2hUZXh0RWRpdG9yIiwiaWQiLCJjcmVhdGVJZCIsInZhbHVlIiwiY3VzdG9tVG9vbGJhciIsImVkaXRhYmxlIiwiZWRpdG9yVHlwZSIsInNob3dHcm91cEZvbnRTdHlsZSIsInNob3dHcm91cFRleHRBbGlnbiIsInNob3dHcm91cFN0cnVjdHVyZSIsInNob3dHcm91cEZvbnQiLCJzaG93R3JvdXBDbGlwYm9hcmQiLCJzaG93R3JvdXBJbnNlcnQiLCJzaG93R3JvdXBMaW5rIiwic2hvd0dyb3VwVW5kbyIsInNhbml0aXplVmFsdWUiLCJ3cmFwcGluZyIsIndpZHRoIiwidW5kZWZpbmVkIiwiYXR0YWNoUmVhZHkiLCJhZGRCdXR0b25Hcm91cHMiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25NZXRhZGF0YUF2YWlsYWJsZSIsIl9vd25lckNvbXBvbmVudCIsImNvbnRlbnQiLCJjcmVhdGVDb250ZW50IiwiY3JlYXRlQ29udGVudERlYm91bmNlZCIsIl9jb250ZW50VGltZXIiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiZXhpdCIsIl9kaXNwbGF5Q29udGVudCIsInNldF9pc0luRWRpdE1vZGUiLCJpbkVkaXRNb2RlIiwic2V0UHJvcGVydHkiLCJzZXRSZWFkT25seSIsInJlYWRPbmx5IiwibGF0ZUJ1dHRvbkdyb3VwcyIsInJldmVyc2UiLCJsYXRlQnV0dG9uR3JvdXAiLCJhZGRCdXR0b25Hcm91cCIsImRldGFjaFJlYWR5IiwiZ2V0RGlzcGxheUNvbnRlbnQiLCJGb3JtYXR0ZWRUZXh0IiwiaHRtbFRleHQiLCJCdWlsZGluZ0Jsb2NrIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJSaWNoVGV4dEVkaXRvci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGRlZmluZVVJNUNsYXNzLCBwcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCBCdXR0b25Hcm91cCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9yaWNodGV4dGVkaXRvci9CdXR0b25Hcm91cFwiO1xuaW1wb3J0IFBsdWdpbkRlZmluaXRpb24gZnJvbSBcInNhcC9mZS9tYWNyb3MvcmljaHRleHRlZGl0b3IvUGx1Z2luXCI7XG5pbXBvcnQgRm9ybWF0dGVkVGV4dCBmcm9tIFwic2FwL20vRm9ybWF0dGVkVGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgUmljaFRleHRFZGl0b3IgZnJvbSBcInNhcC91aS9yaWNodGV4dGVkaXRvci9SaWNoVGV4dEVkaXRvclwiO1xuXG50eXBlIFBsdWdpbkRlZmluaXRpb25EYXRhID0ge1xuXHRuYW1lOiBzdHJpbmc7XG59O1xudHlwZSBCdXR0b25Hcm91cERhdGEgPSB7XG5cdG5hbWU6IHN0cmluZztcblx0dmlzaWJsZTogYm9vbGVhbjtcblx0cHJpb3JpdHk/OiBudW1iZXI7XG5cdHJvdz86IG51bWJlcjtcblx0Y3VzdG9tVG9vbGJhclByaW9yaXR5PzogbnVtYmVyO1xuXHRidXR0b25zOiBzdHJpbmdbXTtcbn07XG5cbi8qKlxuICogQnVpbGRpbmcgYmxvY2sgdGhhdCBleHBvc2VzIHRoZSBSaWNoVGV4dEVkaXRvciBVSTUgY29udHJvbC5cbiAqXG4gKiBJdCdzIHVzZWQgdG8gZW50ZXIgZm9ybWF0dGVkIHRleHQsIGFuZCB1c2VzIHRoZSB0aGlyZC1wYXJ0eSBjb21wb25lbnQgY2FsbGVkIFRpbnlNQ0UuXG4gKiBAcHVibGljXG4gKiBAc2luY2UgMS4xMTcuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLlJpY2hUZXh0RWRpdG9yXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSaWNoVGV4dEVkaXRvckJsb2NrIGV4dGVuZHMgQnVpbGRpbmdCbG9jazxDb250cm9sPiB7XG5cdC8qKlxuXHQgKiBJRCBvZiB0aGUgZWRpdG9yXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiLCByZXF1aXJlZDogdHJ1ZSB9KVxuXHRpZCE6IHN0cmluZztcblxuXHQvKipcblx0ICogVGhlIHZhbHVlIGNvbnRhaW5lZCBpbiB0aGUgZWRpdG9yLiBZb3UgY2FuIHVzZSB0aGlzIGF0dHJpYnV0ZSB0byBzZXQgYSBkZWZhdWx0IHZhbHVlLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImFueVwiLCBpc0JpbmRpbmdJbmZvOiB0cnVlIH0pXG5cdHZhbHVlPzogUHJvcGVydHlCaW5kaW5nSW5mbztcblxuXHQvKipcblx0ICogVXNlIHRoZSByZWFkT25seSBhdHRyaWJ1dGUgdG8gb3ZlcnJpZGUgdGhlIGVkaXQgZmxvdyBvZiB0aGUgcGFnZS5cblx0ICogQnkgc2V0dGluZyAncmVhZE9ubHknIHRvIHRydWUsIGEgRm9ybWF0dGVkVGV4dCB3aWxsIGJlIGRpc3BsYXllZCBpbnN0ZWFkIG9mIHRoZSBlZGl0b3IuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdHJlYWRPbmx5OiBQcm9wZXJ0eUJpbmRpbmdJbmZvID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFdpdGggdGhlICdidXR0b25Hcm91cHMnIGF0dHJpYnV0ZSB5b3UgY2FuIGN1c3RvbWl6ZSB0aGUgYnV0dG9ucyB0aGF0IGFyZSBkaXNwbGF5ZWQgb24gdGhlIHRvb2xiYXIgb2YgdGhlIGVkaXRvci5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAuZmUubWFjcm9zLnJpY2h0ZXh0ZWRpdG9yLkJ1dHRvbkdyb3VwXCIsIG11bHRpcGxlOiB0cnVlLCBkZWZhdWx0Q2xhc3M6IEJ1dHRvbkdyb3VwIH0pXG5cdGJ1dHRvbkdyb3VwczogQnV0dG9uR3JvdXBbXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBXaXRoIHRoZSAncGx1Z2lucycgYXR0cmlidXRlIHlvdSBjYW4gY3VzdG9taXplIHRoZSBwbHVnaW5zIHRoYXQgd2lsbCBiZSBsb2FkZWQgYnkgdGhlIGVkaXRvci5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAuZmUubWFjcm9zLnJpY2h0ZXh0ZWRpdG9yLlBsdWdpblwiLCBtdWx0aXBsZTogdHJ1ZSwgZGVmYXVsdENsYXNzOiBQbHVnaW5EZWZpbml0aW9uIH0pXG5cdHBsdWdpbnM/OiBQbHVnaW5EZWZpbml0aW9uW107XG5cblx0LyoqXG5cdCAqIFdpdGggdGhlICdleGNsdWRlRGVmYXVsdFBsdWdpbnMnIHlvdSBjYW4gYXNrIHRvIHJlbW92ZSB0aGUgcGx1Z2lucyB0aGF0IHdpbGwgYmUgYWRkZWQgYnkgZGVmYXVsdFxuXHQgKiBUaGUgZGVmYXVsdCBwbHVnaW5zIGFyZSBcImVtb3RpY29uc1wiIFwiZGlyZWN0aW9uYWxpdHlcIiBcImltYWdlXCIgXCJ0YWJsZVwiIFwibGlua1wiIFwicG93ZXJwYXN0ZVwiLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRleGNsdWRlRGVmYXVsdFBsdWdpbnMgPSBmYWxzZTtcblxuXHQvKipcblx0ICogVXNlIHRoZSAncmVxdWlyZWQnIGF0dHJpYnV0ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZWRpdG9yIGlzIGZpbGxlZCB3aXRoIHNvbWUgdGV4dC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJhbnlcIiwgYmluZGFibGU6IGZhbHNlIH0pXG5cdHJlcXVpcmVkOiBQcm9wZXJ0eUJpbmRpbmdJbmZvID0gZmFsc2U7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0X2lzSW5FZGl0TW9kZTogUHJvcGVydHlCaW5kaW5nSW5mbyA9IGZhbHNlO1xuXG5cdHByaXZhdGUgX2Rpc3BsYXlDb250ZW50PzogRm9ybWF0dGVkVGV4dDtcblxuXHRwcml2YXRlIF9lZGl0Q29udGVudD86IFJpY2hUZXh0RWRpdG9yO1xuXG5cdHByaXZhdGUgX2NvbnRlbnRUaW1lcj86IG51bWJlcjtcblxuXHRjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiAkQ29udHJvbFNldHRpbmdzICYgUHJvcGVydGllc09mPFJpY2hUZXh0RWRpdG9yQmxvY2s+LCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0cHJvcGVydGllcy5faXNJbkVkaXRNb2RlID0gY29tcGlsZUV4cHJlc3Npb24oVUkuSXNFZGl0YWJsZSk7XG5cdFx0c3VwZXIocHJvcGVydGllcywgb3RoZXJzKTtcblx0fVxuXG5cdG9uTWV0YWRhdGFBdmFpbGFibGUoX293bmVyQ29tcG9uZW50OiBUZW1wbGF0ZUNvbXBvbmVudCk6IHZvaWQge1xuXHRcdHN1cGVyLm9uTWV0YWRhdGFBdmFpbGFibGUoX293bmVyQ29tcG9uZW50KTtcblx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0fVxuXG5cdGNyZWF0ZUNvbnRlbnREZWJvdW5jZWQoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuX2NvbnRlbnRUaW1lcikge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX2NvbnRlbnRUaW1lcik7XG5cdFx0fVxuXHRcdHRoaXMuX2NvbnRlbnRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy5jb250ZW50ID0gdGhpcy5jcmVhdGVDb250ZW50KCk7XG5cdFx0fSwgMjAwKSBhcyB1bmtub3duIGFzIG51bWJlcjtcblx0fVxuXG5cdGV4aXQoKTogdm9pZCB7XG5cdFx0dGhpcy5fZGlzcGxheUNvbnRlbnQ/LmRlc3Ryb3koKTtcblx0XHR0aGlzLl9lZGl0Q29udGVudD8uZGVzdHJveSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0aGF0IHJldHVybnMgdGhlIGJ1dHRvbiBjdXN0b21pemF0aW9ucyBmb3IgdGhlIGVkaXRvciB0b29sYmFyLlxuXHQgKiBCZWNhdXNlIGFsbCB2YWx1ZXMgY29tZSBhcyBzdHJpbmdzIGZyb20gWE1MLCBzb21lIHBhcnNpbmcgbmVlZHMgdG8gYmUgZG9uZSB0byBnZXQgYXR0cmlidXRlcyB3aXRoIHRoZSBjb3JyZWN0IHR5cGUuXG5cdCAqIEByZXR1cm5zIFRoZSBidXR0b24gZ3JvdXBzLlxuXHQgKi9cblx0Z2V0UGx1Z2lucyA9ICgpOiB7IHBsdWdpbnM/OiBQbHVnaW5EZWZpbml0aW9uRGF0YVtdIH0gPT4ge1xuXHRcdGxldCBwbHVnaW5zQXJyYXk6IFBsdWdpbkRlZmluaXRpb25EYXRhW10gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKHRoaXMuZXhjbHVkZURlZmF1bHRQbHVnaW5zKSB7XG5cdFx0XHRwbHVnaW5zQXJyYXkgPSBbXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cGx1Z2luc0FycmF5ID0gW1wiZW1vdGljb25zXCIsIFwiZGlyZWN0aW9uYWxpdHlcIiwgXCJpbWFnZVwiLCBcInRhYmxlXCIsIFwibGlua1wiLCBcInBvd2VycGFzdGVcIl0ubWFwKChuYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0cmV0dXJuIHsgbmFtZTogbmFtZSB9O1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLnBsdWdpbnM/Lmxlbmd0aCkge1xuXHRcdFx0Zm9yIChjb25zdCBwbHVnaW4gb2YgdGhpcy5wbHVnaW5zKSB7XG5cdFx0XHRcdHBsdWdpbnNBcnJheS5wdXNoKHBsdWdpbik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7IHBsdWdpbnM6IHBsdWdpbnNBcnJheSB9O1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBNZXRob2QgdGhhdCByZXR1cm5zIHRoZSBidXR0b24gY3VzdG9taXphdGlvbnMgZm9yIHRoZSBlZGl0b3IgdG9vbGJhci5cblx0ICogQmVjYXVzZSBhbGwgdmFsdWVzIGNvbWUgYXMgc3RyaW5ncyBmcm9tIFhNTCwgc29tZSBwYXJzaW5nIG5lZWRzIHRvIGJlIGRvbmUgdG8gZ2V0IGF0dHJpYnV0ZXMgd2l0aCB0aGUgY29ycmVjdCB0eXBlLlxuXHQgKiBAcmV0dXJucyBUaGUgYnV0dG9uIGdyb3Vwcy5cblx0ICovXG5cdGdldEJ1dHRvbkdyb3VwcyA9ICgpOiBCdXR0b25Hcm91cERhdGFbXSA9PiB7XG5cdFx0aWYgKHRoaXMuYnV0dG9uR3JvdXBzICYmIHRoaXMuYnV0dG9uR3JvdXBzLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiB0aGlzLmJ1dHRvbkdyb3Vwcy5tYXAoKGJ1dHRvbkdyb3VwOiBCdXR0b25Hcm91cCkgPT4gKHtcblx0XHRcdFx0bmFtZTogYnV0dG9uR3JvdXAubmFtZSA/PyBcIlwiLFxuXHRcdFx0XHR2aXNpYmxlOiBidXR0b25Hcm91cC52aXNpYmxlID09PSBcInRydWVcIixcblx0XHRcdFx0cHJpb3JpdHk6IGJ1dHRvbkdyb3VwLnByaW9yaXR5LFxuXHRcdFx0XHRyb3c6IGJ1dHRvbkdyb3VwLnJvdyxcblx0XHRcdFx0Y3VzdG9tVG9vbGJhclByaW9yaXR5OiBidXR0b25Hcm91cC5jdXN0b21Ub29sYmFyUHJpb3JpdHksXG5cdFx0XHRcdGJ1dHRvbnM6IGJ1dHRvbkdyb3VwLmJ1dHRvbnM/LnNwbGl0KFwiLFwiKSB8fCBbXVxuXHRcdFx0fSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gW107XG5cdH07XG5cblx0c2V0X2lzSW5FZGl0TW9kZShpbkVkaXRNb2RlOiBib29sZWFuKTogdm9pZCB7XG5cdFx0c3VwZXIuc2V0UHJvcGVydHkoXCJfaXNJbkVkaXRNb2RlXCIsIGluRWRpdE1vZGUpO1xuXHRcdHRoaXMuY3JlYXRlQ29udGVudERlYm91bmNlZCgpO1xuXHR9XG5cblx0c2V0UmVhZE9ubHkocmVhZE9ubHk6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRzdXBlci5zZXRQcm9wZXJ0eShcInJlYWRPbmx5XCIsIHJlYWRPbmx5KTtcblx0XHR0aGlzLmNyZWF0ZUNvbnRlbnREZWJvdW5jZWQoKTtcblx0fVxuXG5cdGdldEVkaXRDb250ZW50ID0gKCk6IFJpY2hUZXh0RWRpdG9yID0+IHtcblx0XHRpZiAodGhpcy5fZWRpdENvbnRlbnQpIHtcblx0XHRcdC8vIEl0J3MgYmV0dGVyIHRvIGRlc3Ryb3kgdGhlIHJpY2ggdGV4dCBlZGl0b3IgYXMgaW4gc29tZSBjYXNlIHdpdGggc2xvdyBtYWNoaW5lIHN3aXRjaGluZyBiZXR3ZWVuIGVkaXQgYW5kIGRpc3BsYXkgbWF5IGJyZWFrIGl0XG5cdFx0XHR0aGlzLl9lZGl0Q29udGVudC5kZXN0cm95KCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fZWRpdENvbnRlbnQgPSAoXG5cdFx0XHQ8UmljaFRleHRFZGl0b3Jcblx0XHRcdFx0aWQ9e3RoaXMuY3JlYXRlSWQoXCJfcnRlXCIpfVxuXHRcdFx0XHR2YWx1ZT17dGhpcy52YWx1ZX1cblx0XHRcdFx0dmlzaWJsZT17dHJ1ZX1cblx0XHRcdFx0Y3VzdG9tVG9vbGJhcj17dHJ1ZX1cblx0XHRcdFx0ZWRpdGFibGU9e3RydWV9XG5cdFx0XHRcdGVkaXRvclR5cGU9XCJUaW55TUNFNlwiXG5cdFx0XHRcdHNob3dHcm91cEZvbnRTdHlsZT17dHJ1ZX1cblx0XHRcdFx0c2hvd0dyb3VwVGV4dEFsaWduPXt0cnVlfVxuXHRcdFx0XHRzaG93R3JvdXBTdHJ1Y3R1cmU9e3RydWV9XG5cdFx0XHRcdHNob3dHcm91cEZvbnQ9e2ZhbHNlfVxuXHRcdFx0XHRzaG93R3JvdXBDbGlwYm9hcmQ9e3RydWV9XG5cdFx0XHRcdHNob3dHcm91cEluc2VydD17ZmFsc2V9XG5cdFx0XHRcdHNob3dHcm91cExpbms9e2ZhbHNlfVxuXHRcdFx0XHRzaG93R3JvdXBVbmRvPXtmYWxzZX1cblx0XHRcdFx0c2FuaXRpemVWYWx1ZT17dHJ1ZX1cblx0XHRcdFx0d3JhcHBpbmc9e3RydWV9XG5cdFx0XHRcdHdpZHRoPXtcIjEwMCVcIn1cblx0XHRcdFx0cmVxdWlyZWQ9e3RoaXMucmVxdWlyZWR9XG5cdFx0XHRcdHsuLi50aGlzLmdldFBsdWdpbnMoKX1cblx0XHRcdFx0YnV0dG9uR3JvdXBzPXt0aGlzLmJ1dHRvbkdyb3Vwcy5sZW5ndGggPiAwID8gW10gOiB1bmRlZmluZWR9XG5cdFx0XHQvPlxuXHRcdCkgYXMgUmljaFRleHRFZGl0b3I7XG5cblx0XHR0aGlzLl9lZGl0Q29udGVudC5hdHRhY2hSZWFkeSh0aGlzLmFkZEJ1dHRvbkdyb3VwcywgdGhpcyk7XG5cdFx0cmV0dXJuIHRoaXMuX2VkaXRDb250ZW50O1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBCdXR0b25zIGdyb3VwcyBuZWVkIHRvIGJlIGFkZGVkIHdoZW4gdGhlIFJURSBpcyByZWFkeSwgb3RoZXJ3aXNlIHNvbWUgb2YgdGhlbSBhcmUgbm90IGF2YWlsYWJsZS5cblx0ICovXG5cdGFkZEJ1dHRvbkdyb3VwcygpOiB2b2lkIHtcblx0XHRjb25zdCBsYXRlQnV0dG9uR3JvdXBzID0gdGhpcy5nZXRCdXR0b25Hcm91cHMoKS5yZXZlcnNlKCk7XG5cdFx0Ly8gVGhleSBhbHNvIHNvbWVob3cgbmVlZCB0byBiZSBhZGRlZCBpbiByZXZlcnNlIGJlY2F1c2UgdGhleSBhbHNvIGdldCBhZGRlZCBpbiB0aGUgZmlyc3QgcGxhY2UgOkRcblx0XHRmb3IgKGNvbnN0IGxhdGVCdXR0b25Hcm91cCBvZiBsYXRlQnV0dG9uR3JvdXBzKSB7XG5cdFx0XHR0aGlzLl9lZGl0Q29udGVudD8uYWRkQnV0dG9uR3JvdXAobGF0ZUJ1dHRvbkdyb3VwKTtcblx0XHR9XG5cdFx0dGhpcy5fZWRpdENvbnRlbnQ/LmRldGFjaFJlYWR5KHRoaXMuYWRkQnV0dG9uR3JvdXBzLCB0aGlzKTtcblx0fVxuXG5cdGdldERpc3BsYXlDb250ZW50KCk6IEZvcm1hdHRlZFRleHQge1xuXHRcdGlmICh0aGlzLl9kaXNwbGF5Q29udGVudCkge1xuXHRcdFx0dGhpcy5fZGlzcGxheUNvbnRlbnQuZGVzdHJveSgpO1xuXHRcdH1cblx0XHR0aGlzLl9kaXNwbGF5Q29udGVudCA9ICg8Rm9ybWF0dGVkVGV4dCBodG1sVGV4dD17dGhpcy52YWx1ZX0gLz4pIGFzIEZvcm1hdHRlZFRleHQ7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc3BsYXlDb250ZW50O1xuXHR9XG5cblx0Y3JlYXRlQ29udGVudCgpOiBSaWNoVGV4dEVkaXRvciB8IEZvcm1hdHRlZFRleHQge1xuXHRcdGlmICh0aGlzLl9pc0luRWRpdE1vZGUgJiYgIXRoaXMucmVhZE9ubHkpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldEVkaXRDb250ZW50KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLmdldERpc3BsYXlDb250ZW50KCk7XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFXQTtFQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU5BLElBUXFCQSxtQkFBbUIsSUFBQUMsSUFBQSxHQUR2Q0MsY0FBYyxDQUFDLDhCQUE4QixDQUFDLEVBQUFDLEtBQUEsR0FLN0NDLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUUsUUFBUTtJQUFFQyxRQUFRLEVB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
301
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSaWNoVGV4dEVkaXRvckJsb2NrIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwcm9wZXJ0eSIsInR5cGUiLCJyZXF1aXJlZCIsIl9kZWMzIiwiaXNCaW5kaW5nSW5mbyIsIl9kZWM0IiwiX2RlYzUiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiZGVmYXVsdENsYXNzIiwiQnV0dG9uR3JvdXAiLCJfZGVjNiIsIlBsdWdpbkRlZmluaXRpb24iLCJfZGVjNyIsIl9kZWM4IiwiYmluZGFibGUiLCJfZGVjOSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsInByb3BlcnRpZXMiLCJvdGhlcnMiLCJfdGhpcyIsIl9pc0luRWRpdE1vZGUiLCJjb21waWxlRXhwcmVzc2lvbiIsIlVJIiwiSXNFZGl0YWJsZSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiZ2V0UGx1Z2lucyIsInBsdWdpbnNBcnJheSIsImV4Y2x1ZGVEZWZhdWx0UGx1Z2lucyIsIm1hcCIsIm5hbWUiLCJwbHVnaW5zIiwibGVuZ3RoIiwicGx1Z2luIiwicHVzaCIsImdldEJ1dHRvbkdyb3VwcyIsImJ1dHRvbkdyb3VwcyIsImJ1dHRvbkdyb3VwIiwidmlzaWJsZSIsInByaW9yaXR5Iiwicm93IiwiY3VzdG9tVG9vbGJhclByaW9yaXR5IiwiYnV0dG9ucyIsInNwbGl0IiwiZ2V0RWRpdENvbnRlbnQiLCJfY2xlYW51cFByZXZpb3VzUlRFIiwiX2VkaXRDb250ZW50IiwiX2pzeCIsIlJpY2hUZXh0RWRpdG9yIiwiaWQiLCJjcmVhdGVJZCIsInZhbHVlIiwiY3VzdG9tVG9vbGJhciIsImVkaXRhYmxlIiwic2hvd0dyb3VwRm9udFN0eWxlIiwic2hvd0dyb3VwVGV4dEFsaWduIiwic2hvd0dyb3VwU3RydWN0dXJlIiwic2hvd0dyb3VwRm9udCIsInNob3dHcm91cENsaXBib2FyZCIsInNob3dHcm91cEluc2VydCIsInNob3dHcm91cExpbmsiLCJzaG93R3JvdXBVbmRvIiwic2FuaXRpemVWYWx1ZSIsIndyYXBwaW5nIiwid2lkdGgiLCJ1bmRlZmluZWQiLCJhdHRhY2hSZWFkeSIsImFkZEJ1dHRvbkdyb3VwcyIsImNsZWFyVGltZW91dCIsIl9idXR0b25Hcm91cHNUaW1lciIsInNldFRpbWVvdXQiLCJjcmVhdGVDb250ZW50RGVib3VuY2VkIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJfb3duZXJDb21wb25lbnQiLCJjb250ZW50IiwiY3JlYXRlQ29udGVudCIsIl9jb250ZW50VGltZXIiLCJleGl0IiwiX2Rpc3BsYXlDb250ZW50IiwiZGVzdHJveSIsInNldF9pc0luRWRpdE1vZGUiLCJpbkVkaXRNb2RlIiwic2V0UHJvcGVydHkiLCJzZXRSZWFkT25seSIsInJlYWRPbmx5IiwibGF0ZUJ1dHRvbkdyb3VwcyIsInJldmVyc2UiLCJsYXRlQnV0dG9uR3JvdXAiLCJhZGRCdXR0b25Hcm91cCIsImRldGFjaFJlYWR5Iiwid2luZG93IiwidGlueW1jZSIsImdldCIsImdldERpc3BsYXlDb250ZW50IiwiRm9ybWF0dGVkVGV4dCIsImh0bWxUZXh0IiwiQnVpbGRpbmdCbG9jayIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiUmljaFRleHRFZGl0b3IudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVVSTVDbGFzcywgcHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCBCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCBCdXR0b25Hcm91cCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9yaWNodGV4dGVkaXRvci9CdXR0b25Hcm91cFwiO1xuaW1wb3J0IFBsdWdpbkRlZmluaXRpb24gZnJvbSBcInNhcC9mZS9tYWNyb3MvcmljaHRleHRlZGl0b3IvUGx1Z2luXCI7XG5pbXBvcnQgRm9ybWF0dGVkVGV4dCBmcm9tIFwic2FwL20vRm9ybWF0dGVkVGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0IFJpY2hUZXh0RWRpdG9yIGZyb20gXCJzYXAvdWkvcmljaHRleHRlZGl0b3IvUmljaFRleHRFZGl0b3JcIjtcblxudHlwZSBQbHVnaW5EZWZpbml0aW9uRGF0YSA9IHtcblx0bmFtZTogc3RyaW5nO1xufTtcbnR5cGUgQnV0dG9uR3JvdXBEYXRhID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdHZpc2libGU6IGJvb2xlYW47XG5cdHByaW9yaXR5PzogbnVtYmVyO1xuXHRyb3c/OiBudW1iZXI7XG5cdGN1c3RvbVRvb2xiYXJQcmlvcml0eT86IG51bWJlcjtcblx0YnV0dG9uczogc3RyaW5nW107XG59O1xuXG4vKipcbiAqIEJ1aWxkaW5nIGJsb2NrIHRoYXQgZXhwb3NlcyB0aGUgUmljaFRleHRFZGl0b3IgVUk1IGNvbnRyb2wuXG4gKlxuICogSXQncyB1c2VkIHRvIGVudGVyIGZvcm1hdHRlZCB0ZXh0LCBhbmQgdXNlcyB0aGUgdGhpcmQtcGFydHkgY29tcG9uZW50IGNhbGxlZCBUaW55TUNFLlxuICogQHB1YmxpY1xuICogQHNpbmNlIDEuMTE3LjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy5SaWNoVGV4dEVkaXRvclwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmljaFRleHRFZGl0b3JCbG9jayBleHRlbmRzIEJ1aWxkaW5nQmxvY2s8Q29udHJvbD4ge1xuXHQvKipcblx0ICogSUQgb2YgdGhlIGVkaXRvclxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiwgcmVxdWlyZWQ6IHRydWUgfSlcblx0aWQhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRoZSB2YWx1ZSBjb250YWluZWQgaW4gdGhlIGVkaXRvci4gWW91IGNhbiB1c2UgdGhpcyBhdHRyaWJ1dGUgdG8gc2V0IGEgZGVmYXVsdCB2YWx1ZS5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJhbnlcIiwgaXNCaW5kaW5nSW5mbzogdHJ1ZSB9KVxuXHR2YWx1ZT86IFByb3BlcnR5QmluZGluZ0luZm87XG5cblx0LyoqXG5cdCAqIFVzZSB0aGUgcmVhZE9ubHkgYXR0cmlidXRlIHRvIG92ZXJyaWRlIHRoZSBlZGl0IGZsb3cgb2YgdGhlIHBhZ2UuXG5cdCAqIEJ5IHNldHRpbmcgJ3JlYWRPbmx5JyB0byB0cnVlLCBhIEZvcm1hdHRlZFRleHQgd2lsbCBiZSBkaXNwbGF5ZWQgaW5zdGVhZCBvZiB0aGUgZWRpdG9yLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRyZWFkT25seTogUHJvcGVydHlCaW5kaW5nSW5mbyA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBXaXRoIHRoZSAnYnV0dG9uR3JvdXBzJyBhdHRyaWJ1dGUgeW91IGNhbiBjdXN0b21pemUgdGhlIGJ1dHRvbnMgdGhhdCBhcmUgZGlzcGxheWVkIG9uIHRoZSB0b29sYmFyIG9mIHRoZSBlZGl0b3IuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLmZlLm1hY3Jvcy5yaWNodGV4dGVkaXRvci5CdXR0b25Hcm91cFwiLCBtdWx0aXBsZTogdHJ1ZSwgZGVmYXVsdENsYXNzOiBCdXR0b25Hcm91cCB9KVxuXHRidXR0b25Hcm91cHM6IEJ1dHRvbkdyb3VwW10gPSBbXTtcblxuXHQvKipcblx0ICogV2l0aCB0aGUgJ3BsdWdpbnMnIGF0dHJpYnV0ZSB5b3UgY2FuIGN1c3RvbWl6ZSB0aGUgcGx1Z2lucyB0aGF0IHdpbGwgYmUgbG9hZGVkIGJ5IHRoZSBlZGl0b3IuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLmZlLm1hY3Jvcy5yaWNodGV4dGVkaXRvci5QbHVnaW5cIiwgbXVsdGlwbGU6IHRydWUsIGRlZmF1bHRDbGFzczogUGx1Z2luRGVmaW5pdGlvbiB9KVxuXHRwbHVnaW5zPzogUGx1Z2luRGVmaW5pdGlvbltdO1xuXG5cdC8qKlxuXHQgKiBXaXRoIHRoZSAnZXhjbHVkZURlZmF1bHRQbHVnaW5zJyB5b3UgY2FuIGFzayB0byByZW1vdmUgdGhlIHBsdWdpbnMgdGhhdCB3aWxsIGJlIGFkZGVkIGJ5IGRlZmF1bHRcblx0ICogVGhlIGRlZmF1bHQgcGx1Z2lucyBhcmUgXCJlbW90aWNvbnNcIiBcImRpcmVjdGlvbmFsaXR5XCIgXCJpbWFnZVwiIFwidGFibGVcIiBcImxpbmtcIiBcInBvd2VycGFzdGVcIi5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0ZXhjbHVkZURlZmF1bHRQbHVnaW5zID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFVzZSB0aGUgJ3JlcXVpcmVkJyBhdHRyaWJ1dGUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGVkaXRvciBpcyBmaWxsZWQgd2l0aCBzb21lIHRleHQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYW55XCIsIGJpbmRhYmxlOiBmYWxzZSB9KVxuXHRyZXF1aXJlZDogUHJvcGVydHlCaW5kaW5nSW5mbyA9IGZhbHNlO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdF9pc0luRWRpdE1vZGU6IFByb3BlcnR5QmluZGluZ0luZm8gPSBmYWxzZTtcblxuXHRwcml2YXRlIF9kaXNwbGF5Q29udGVudD86IEZvcm1hdHRlZFRleHQ7XG5cblx0cHJpdmF0ZSBfZWRpdENvbnRlbnQ/OiBSaWNoVGV4dEVkaXRvcjtcblxuXHRwcml2YXRlIF9jb250ZW50VGltZXI/OiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIFRpbWVyIHRvIGVuc3VyZSB0aGF0IGlmIHRoZSBidXR0b24gZ3JvdXBzIGFyZSBub3QgYWRkZWQgd2UgcmVzdGFydCB0aGUgcHJvY2Vzcy5cblx0ICovXG5cdHByaXZhdGUgX2J1dHRvbkdyb3Vwc1RpbWVyPzogbnVtYmVyO1xuXG5cdGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6ICRDb250cm9sU2V0dGluZ3MgJiBQcm9wZXJ0aWVzT2Y8UmljaFRleHRFZGl0b3JCbG9jaz4sIG90aGVycz86ICRDb250cm9sU2V0dGluZ3MpIHtcblx0XHRwcm9wZXJ0aWVzLl9pc0luRWRpdE1vZGUgPSBjb21waWxlRXhwcmVzc2lvbihVSS5Jc0VkaXRhYmxlKTtcblx0XHRzdXBlcihwcm9wZXJ0aWVzLCBvdGhlcnMpO1xuXHR9XG5cblx0b25NZXRhZGF0YUF2YWlsYWJsZShfb3duZXJDb21wb25lbnQ6IFRlbXBsYXRlQ29tcG9uZW50KTogdm9pZCB7XG5cdFx0c3VwZXIub25NZXRhZGF0YUF2YWlsYWJsZShfb3duZXJDb21wb25lbnQpO1xuXHRcdHRoaXMuY29udGVudCA9IHRoaXMuY3JlYXRlQ29udGVudCgpO1xuXHR9XG5cblx0Y3JlYXRlQ29udGVudERlYm91bmNlZCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5fY29udGVudFRpbWVyKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy5fY29udGVudFRpbWVyKTtcblx0XHR9XG5cdFx0dGhpcy5fY29udGVudFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0XHR9LCAyMDApIGFzIHVua25vd24gYXMgbnVtYmVyO1xuXHR9XG5cblx0ZXhpdCgpOiB2b2lkIHtcblx0XHR0aGlzLl9kaXNwbGF5Q29udGVudD8uZGVzdHJveSgpO1xuXHRcdHRoaXMuX2VkaXRDb250ZW50Py5kZXN0cm95KCk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRoYXQgcmV0dXJucyB0aGUgYnV0dG9uIGN1c3RvbWl6YXRpb25zIGZvciB0aGUgZWRpdG9yIHRvb2xiYXIuXG5cdCAqIEJlY2F1c2UgYWxsIHZhbHVlcyBjb21lIGFzIHN0cmluZ3MgZnJvbSBYTUwsIHNvbWUgcGFyc2luZyBuZWVkcyB0byBiZSBkb25lIHRvIGdldCBhdHRyaWJ1dGVzIHdpdGggdGhlIGNvcnJlY3QgdHlwZS5cblx0ICogQHJldHVybnMgVGhlIGJ1dHRvbiBncm91cHMuXG5cdCAqL1xuXHRnZXRQbHVnaW5zID0gKCk6IHsgcGx1Z2lucz86IFBsdWdpbkRlZmluaXRpb25EYXRhW10gfSA9PiB7XG5cdFx0bGV0IHBsdWdpbnNBcnJheTogUGx1Z2luRGVmaW5pdGlvbkRhdGFbXSB8IHVuZGVmaW5lZDtcblx0XHRpZiAodGhpcy5leGNsdWRlRGVmYXVsdFBsdWdpbnMpIHtcblx0XHRcdHBsdWdpbnNBcnJheSA9IFtdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwbHVnaW5zQXJyYXkgPSBbXCJlbW90aWNvbnNcIiwgXCJkaXJlY3Rpb25hbGl0eVwiLCBcImltYWdlXCIsIFwidGFibGVcIiwgXCJsaW5rXCIsIFwicG93ZXJwYXN0ZVwiXS5tYXAoKG5hbWU6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRyZXR1cm4geyBuYW1lOiBuYW1lIH07XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKHRoaXMucGx1Z2lucz8ubGVuZ3RoKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHBsdWdpbiBvZiB0aGlzLnBsdWdpbnMpIHtcblx0XHRcdFx0cGx1Z2luc0FycmF5LnB1c2gocGx1Z2luKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHsgcGx1Z2luczogcGx1Z2luc0FycmF5IH07XG5cdH07XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0aGF0IHJldHVybnMgdGhlIGJ1dHRvbiBjdXN0b21pemF0aW9ucyBmb3IgdGhlIGVkaXRvciB0b29sYmFyLlxuXHQgKiBCZWNhdXNlIGFsbCB2YWx1ZXMgY29tZSBhcyBzdHJpbmdzIGZyb20gWE1MLCBzb21lIHBhcnNpbmcgbmVlZHMgdG8gYmUgZG9uZSB0byBnZXQgYXR0cmlidXRlcyB3aXRoIHRoZSBjb3JyZWN0IHR5cGUuXG5cdCAqIEByZXR1cm5zIFRoZSBidXR0b24gZ3JvdXBzLlxuXHQgKi9cblx0Z2V0QnV0dG9uR3JvdXBzID0gKCk6IEJ1dHRvbkdyb3VwRGF0YVtdID0+IHtcblx0XHRpZiAodGhpcy5idXR0b25Hcm91cHMgJiYgdGhpcy5idXR0b25Hcm91cHMubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuYnV0dG9uR3JvdXBzLm1hcCgoYnV0dG9uR3JvdXA6IEJ1dHRvbkdyb3VwKSA9PiAoe1xuXHRcdFx0XHRuYW1lOiBidXR0b25Hcm91cC5uYW1lID8/IFwiXCIsXG5cdFx0XHRcdHZpc2libGU6IGJ1dHRvbkdyb3VwLnZpc2libGUgPT09IFwidHJ1ZVwiLFxuXHRcdFx0XHRwcmlvcml0eTogYnV0dG9uR3JvdXAucHJpb3JpdHksXG5cdFx0XHRcdHJvdzogYnV0dG9uR3JvdXAucm93LFxuXHRcdFx0XHRjdXN0b21Ub29sYmFyUHJpb3JpdHk6IGJ1dHRvbkdyb3VwLmN1c3RvbVRvb2xiYXJQcmlvcml0eSxcblx0XHRcdFx0YnV0dG9uczogYnV0dG9uR3JvdXAuYnV0dG9ucz8uc3BsaXQoXCIsXCIpIHx8IFtdXG5cdFx0XHR9KSk7XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fTtcblxuXHRzZXRfaXNJbkVkaXRNb2RlKGluRWRpdE1vZGU6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRzdXBlci5zZXRQcm9wZXJ0eShcIl9pc0luRWRpdE1vZGVcIiwgaW5FZGl0TW9kZSk7XG5cdFx0dGhpcy5jcmVhdGVDb250ZW50RGVib3VuY2VkKCk7XG5cdH1cblxuXHRzZXRSZWFkT25seShyZWFkT25seTogYm9vbGVhbik6IHZvaWQge1xuXHRcdHN1cGVyLnNldFByb3BlcnR5KFwicmVhZE9ubHlcIiwgcmVhZE9ubHkpO1xuXHRcdHRoaXMuY3JlYXRlQ29udGVudERlYm91bmNlZCgpO1xuXHR9XG5cblx0Z2V0RWRpdENvbnRlbnQgPSAoKTogUmljaFRleHRFZGl0b3IgPT4ge1xuXHRcdHRoaXMuX2NsZWFudXBQcmV2aW91c1JURSgpO1xuXG5cdFx0dGhpcy5fZWRpdENvbnRlbnQgPSAoXG5cdFx0XHQ8UmljaFRleHRFZGl0b3Jcblx0XHRcdFx0aWQ9e3RoaXMuY3JlYXRlSWQoXCJfcnRlXCIpfVxuXHRcdFx0XHR2YWx1ZT17dGhpcy52YWx1ZX1cblx0XHRcdFx0dmlzaWJsZT17dHJ1ZX1cblx0XHRcdFx0Y3VzdG9tVG9vbGJhcj17dHJ1ZX1cblx0XHRcdFx0ZWRpdGFibGU9e3RydWV9XG5cdFx0XHRcdHNob3dHcm91cEZvbnRTdHlsZT17dHJ1ZX1cblx0XHRcdFx0c2hvd0dyb3VwVGV4dEFsaWduPXt0cnVlfVxuXHRcdFx0XHRzaG93R3JvdXBTdHJ1Y3R1cmU9e3RydWV9XG5cdFx0XHRcdHNob3dHcm91cEZvbnQ9e2ZhbHNlfVxuXHRcdFx0XHRzaG93R3JvdXBDbGlwYm9hcmQ9e3RydWV9XG5cdFx0XHRcdHNob3dHcm91cEluc2VydD17ZmFsc2V9XG5cdFx0XHRcdHNob3dHcm91cExpbms9e2ZhbHNlfVxuXHRcdFx0XHRzaG93R3JvdXBVbmRvPXtmYWxzZX1cblx0XHRcdFx0c2FuaXRpemVWYWx1ZT17dHJ1ZX1cblx0XHRcdFx0d3JhcHBpbmc9e3RydWV9XG5cdFx0XHRcdHdpZHRoPXtcIjEwMCVcIn1cblx0XHRcdFx0cmVxdWlyZWQ9e3RoaXMucmVxdWlyZWR9XG5cdFx0XHRcdHsuLi50aGlzLmdldFBsdWdpbnMoKX1cblx0XHRcdFx0YnV0dG9uR3JvdXBzPXt0aGlzLmJ1dHRvbkdyb3Vwcy5sZW5ndGggPiAwID8gW10gOiB1bmRlZmluZWR9XG5cdFx0XHQvPlxuXHRcdCkgYXMgUmljaFRleHRFZGl0b3I7XG5cblx0XHR0aGlzLl9lZGl0Q29udGVudC5hdHRhY2hSZWFkeSh0aGlzLmFkZEJ1dHRvbkdyb3VwcywgdGhpcyk7XG5cdFx0Ly8gQXR0YWNoIGEgdGltZXIgdG8gZW5zdXJlIHRoYXQgdGhlIGJ1dHRvbiBncm91cHMgYXJlIGFkZGVkIGFmdGVyIHRoZSBlZGl0b3IgaXMgcmVhZHlcblx0XHRjbGVhclRpbWVvdXQodGhpcy5fYnV0dG9uR3JvdXBzVGltZXIpO1xuXHRcdHRoaXMuX2J1dHRvbkdyb3Vwc1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLmNyZWF0ZUNvbnRlbnREZWJvdW5jZWQoKTtcblx0XHR9LCAyMDAwKSBhcyB1bmtub3duIGFzIG51bWJlcjtcblx0XHRyZXR1cm4gdGhpcy5fZWRpdENvbnRlbnQ7XG5cdH07XG5cblx0LyoqXG5cdCAqIEJ1dHRvbnMgZ3JvdXBzIG5lZWQgdG8gYmUgYWRkZWQgd2hlbiB0aGUgUlRFIGlzIHJlYWR5LCBvdGhlcndpc2Ugc29tZSBvZiB0aGVtIGFyZSBub3QgYXZhaWxhYmxlLlxuXHQgKi9cblx0YWRkQnV0dG9uR3JvdXBzKCk6IHZvaWQge1xuXHRcdGNsZWFyVGltZW91dCh0aGlzLl9idXR0b25Hcm91cHNUaW1lcik7XG5cdFx0Y29uc3QgbGF0ZUJ1dHRvbkdyb3VwcyA9IHRoaXMuZ2V0QnV0dG9uR3JvdXBzKCkucmV2ZXJzZSgpO1xuXHRcdC8vIFRoZXkgYWxzbyBzb21laG93IG5lZWQgdG8gYmUgYWRkZWQgaW4gcmV2ZXJzZSBiZWNhdXNlIHRoZXkgYWxzbyBnZXQgYWRkZWQgaW4gdGhlIGZpcnN0IHBsYWNlIDpEXG5cdFx0Zm9yIChjb25zdCBsYXRlQnV0dG9uR3JvdXAgb2YgbGF0ZUJ1dHRvbkdyb3Vwcykge1xuXHRcdFx0dGhpcy5fZWRpdENvbnRlbnQ/LmFkZEJ1dHRvbkdyb3VwKGxhdGVCdXR0b25Hcm91cCk7XG5cdFx0fVxuXHRcdHRoaXMuX2VkaXRDb250ZW50Py5kZXRhY2hSZWFkeSh0aGlzLmFkZEJ1dHRvbkdyb3VwcywgdGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRoYXQgY2xlYW5zIHVwIHRoZSBwcmV2aW91cyByaWNoIHRleHQgZWRpdG9yIGluc3RhbmNlLlxuXHQgKiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBSaWNoVGV4dEVkaXRvciBjb250cm9sIGRvZXMgbm90IGFsd2F5cyBkZXN0cm95IHRoZSBUaW55TUNFIGluc3RhbmNlLFxuXHQgKiB3aGljaCBjYW4gbGVhZCB0byBpc3N1ZXMgd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBlZGl0IGFuZCBkaXNwbGF5IG1vZGVzLlxuXHQgKi9cblx0X2NsZWFudXBQcmV2aW91c1JURSgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5fZWRpdENvbnRlbnQpIHtcblx0XHRcdC8vIEl0J3MgYmV0dGVyIHRvIGRlc3Ryb3kgdGhlIHJpY2ggdGV4dCBlZGl0b3IgYXMgaW4gc29tZSBjYXNlIHdpdGggc2xvdyBtYWNoaW5lIHN3aXRjaGluZyBiZXR3ZWVuIGVkaXQgYW5kIGRpc3BsYXkgbWF5IGJyZWFrIGl0XG5cdFx0XHR0aGlzLl9lZGl0Q29udGVudC5kZXN0cm95KCk7XG5cdFx0XHQvLyBEZXN0cm95IHRoZSBUaW55TUNFIGluc3RhbmNlIGFzIHdlbGxcblx0XHRcdC8vIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIFJpY2hUZXh0RWRpdG9yIGNvbnRyb2wgZG9lcyBub3QgYWx3YXlzIGRlc3Ryb3kgdGhlIFRpbnlNQ0UgaW5zdGFuY2Vcblx0XHR9XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHR3aW5kb3cudGlueW1jZT8uZ2V0KHRoaXMuY3JlYXRlSWQoXCJfcnRlXCIpICsgXCItdGV4dGFyZWFcIik/LmRlc3Ryb3koKTtcblx0fVxuXG5cdGdldERpc3BsYXlDb250ZW50KCk6IEZvcm1hdHRlZFRleHQge1xuXHRcdGlmICh0aGlzLl9kaXNwbGF5Q29udGVudCkge1xuXHRcdFx0dGhpcy5fZGlzcGxheUNvbnRlbnQuZGVzdHJveSgpO1xuXHRcdH1cblxuXHRcdHRoaXMuX2NsZWFudXBQcmV2aW91c1JURSgpO1xuXG5cdFx0dGhpcy5fZGlzcGxheUNvbnRlbnQgPSAoPEZvcm1hdHRlZFRleHQgaHRtbFRleHQ9e3RoaXMudmFsdWV9IC8+KSBhcyBGb3JtYXR0ZWRUZXh0O1xuXHRcdHJldHVybiB0aGlzLl9kaXNwbGF5Q29udGVudDtcblx0fVxuXG5cdGNyZWF0ZUNvbnRlbnQoKTogUmljaFRleHRFZGl0b3IgfCBGb3JtYXR0ZWRUZXh0IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAodGhpcy5faXNJbkVkaXRNb2RlICYmICF0aGlzLnJlYWRPbmx5KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRFZGl0Q29udGVudCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXREaXNwbGF5Q29udGVudCgpO1xuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBWUE7RUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU5BLElBUXFCQSxtQkFBbUIsSUFBQUMsSUFBQSxHQUR2Q0MsY0FBYyxDQUFDLDhCQUE4QixDQUFDLEVBQUFDLEtBQUEsR0FLN0NDLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUUsUUFBUTtJQUFFQyxRQUFRLEVBQUU7RUFBSyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQU81Q0gsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxLQUFLO0lBQUVHLGFBQWEsRUFBRTtFQUFLLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBUTlDTCxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVUsQ0FBQyxDQUFDLEVBQUFLLEtBQUEsR0FPN0JDLFdBQVcsQ0FBQztJQUFFTixJQUFJLEVBQUUsMENBQTBDO0lBQUVPLFFBQVEsRUFBRSxJQUFJO0lBQUVDLFlBQVksRUFBRUM7RUFBWSxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQU81R0osV0FBVyxDQUFDO0lBQUVOLElBQUksRUFBRSxxQ0FBcUM7SUFBRU8sUUFBUSxFQUFFLElBQUk7SUFBRUMsWUFBWSxFQUFFRztFQUFpQixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQVE1R2IsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFVLENBQUMsQ0FBQyxFQUFBYSxLQUFBLEdBTzdCZCxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLEtBQUs7SUFBRWMsUUFBUSxFQUFFO0VBQU0sQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHMUNoQixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVUsQ0FBQyxDQUFDLEVBQUFKLElBQUEsQ0FBQW9CLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMsY0FBQTtJQVM5QjtBQUNEO0FBQ0E7O0lBR0Ms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
@@ -1,6 +1,7 @@
1
1
  import { compileExpression } from "sap/fe/base/BindingToolkit";
2
2
  import type { PropertiesOf } from "sap/fe/base/ClassSupport";
3
3
  import { aggregation, defineUI5Class, property } from "sap/fe/base/ClassSupport";
4
+ import type TemplateComponent from "sap/fe/core/TemplateComponent";
4
5
  import BuildingBlock from "sap/fe/core/buildingBlocks/BuildingBlock";
5
6
  import { UI } from "sap/fe/core/helpers/BindingHelper";
6
7
  import ButtonGroup from "sap/fe/macros/richtexteditor/ButtonGroup";
@@ -10,7 +11,6 @@ import type { PropertyBindingInfo } from "sap/ui/base/ManagedObject";
10
11
  import type Control from "sap/ui/core/Control";
11
12
  import type { $ControlSettings } from "sap/ui/core/Control";
12
13
  // eslint-disable-next-line @typescript-eslint/no-restricted-imports
13
- import type TemplateComponent from "sap/fe/core/TemplateComponent";
14
14
  import RichTextEditor from "sap/ui/richtexteditor/RichTextEditor";
15
15
 
16
16
  type PluginDefinitionData = {
@@ -93,6 +93,11 @@ export default class RichTextEditorBlock extends BuildingBlock<Control> {
93
93
 
94
94
  private _contentTimer?: number;
95
95
 
96
+ /**
97
+ * Timer to ensure that if the button groups are not added we restart the process.
98
+ */
99
+ private _buttonGroupsTimer?: number;
100
+
96
101
  constructor(properties: $ControlSettings & PropertiesOf<RichTextEditorBlock>, others?: $ControlSettings) {
97
102
  properties._isInEditMode = compileExpression(UI.IsEditable);
98
103
  super(properties, others);
@@ -169,10 +174,7 @@ export default class RichTextEditorBlock extends BuildingBlock<Control> {
169
174
  }
170
175
 
171
176
  getEditContent = (): RichTextEditor => {
172
- if (this._editContent) {
173
- // It's better to destroy the rich text editor as in some case with slow machine switching between edit and display may break it
174
- this._editContent.destroy();
175
- }
177
+ this._cleanupPreviousRTE();
176
178
 
177
179
  this._editContent = (
178
180
  <RichTextEditor
@@ -181,7 +183,6 @@ export default class RichTextEditorBlock extends BuildingBlock<Control> {
181
183
  visible={true}
182
184
  customToolbar={true}
183
185
  editable={true}
184
- editorType="TinyMCE6"
185
186
  showGroupFontStyle={true}
186
187
  showGroupTextAlign={true}
187
188
  showGroupStructure={true}
@@ -200,6 +201,11 @@ export default class RichTextEditorBlock extends BuildingBlock<Control> {
200
201
  ) as RichTextEditor;
201
202
 
202
203
  this._editContent.attachReady(this.addButtonGroups, this);
204
+ // Attach a timer to ensure that the button groups are added after the editor is ready
205
+ clearTimeout(this._buttonGroupsTimer);
206
+ this._buttonGroupsTimer = setTimeout(() => {
207
+ this.createContentDebounced();
208
+ }, 2000) as unknown as number;
203
209
  return this._editContent;
204
210
  };
205
211
 
@@ -207,6 +213,7 @@ export default class RichTextEditorBlock extends BuildingBlock<Control> {
207
213
  * Buttons groups need to be added when the RTE is ready, otherwise some of them are not available.
208
214
  */
209
215
  addButtonGroups(): void {
216
+ clearTimeout(this._buttonGroupsTimer);
210
217
  const lateButtonGroups = this.getButtonGroups().reverse();
211
218
  // They also somehow need to be added in reverse because they also get added in the first place :D
212
219
  for (const lateButtonGroup of lateButtonGroups) {
@@ -215,15 +222,35 @@ export default class RichTextEditorBlock extends BuildingBlock<Control> {
215
222
  this._editContent?.detachReady(this.addButtonGroups, this);
216
223
  }
217
224
 
225
+ /**
226
+ * Method that cleans up the previous rich text editor instance.
227
+ * This is needed because the RichTextEditor control does not always destroy the TinyMCE instance,
228
+ * which can lead to issues when switching between edit and display modes.
229
+ */
230
+ _cleanupPreviousRTE(): void {
231
+ if (this._editContent) {
232
+ // It's better to destroy the rich text editor as in some case with slow machine switching between edit and display may break it
233
+ this._editContent.destroy();
234
+ // Destroy the TinyMCE instance as well
235
+ // This is needed because the RichTextEditor control does not always destroy the TinyMCE instance
236
+ }
237
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
238
+ // @ts-ignore
239
+ window.tinymce?.get(this.createId("_rte") + "-textarea")?.destroy();
240
+ }
241
+
218
242
  getDisplayContent(): FormattedText {
219
243
  if (this._displayContent) {
220
244
  this._displayContent.destroy();
221
245
  }
246
+
247
+ this._cleanupPreviousRTE();
248
+
222
249
  this._displayContent = (<FormattedText htmlText={this.value} />) as FormattedText;
223
250
  return this._displayContent;
224
251
  }
225
252
 
226
- createContent(): RichTextEditor | FormattedText {
253
+ createContent(): RichTextEditor | FormattedText | undefined {
227
254
  if (this._isInEditMode && !this.readOnly) {
228
255
  return this.getEditContent();
229
256
  } else {