@sapui5/sap.fe.templates 1.102.2 → 1.104.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 (123) hide show
  1. package/package.json +3 -4
  2. package/src/sap/fe/templates/.library +1 -1
  3. package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.js +2 -2
  4. package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.ts +1 -1
  5. package/src/sap/fe/templates/Feedback.js +18 -18
  6. package/src/sap/fe/templates/Feedback.ts +12 -12
  7. package/src/sap/fe/templates/ListReport/ExtensionAPI.js +9 -12
  8. package/src/sap/fe/templates/ListReport/ExtensionAPI.ts +9 -12
  9. package/src/sap/fe/templates/ListReport/ListReport.view.xml +4 -3
  10. package/src/sap/fe/templates/ListReport/ListReportController.controller.js +102 -313
  11. package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +109 -297
  12. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +367 -0
  13. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.ts +259 -0
  14. package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +16 -9
  15. package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.ts +17 -11
  16. package/src/sap/fe/templates/ListReport/overrides/Share.js +3 -4
  17. package/src/sap/fe/templates/ListReport/overrides/Share.ts +6 -7
  18. package/src/sap/fe/templates/ListReport/overrides/ViewState.js +22 -31
  19. package/src/sap/fe/templates/ListReport/overrides/ViewState.ts +33 -37
  20. package/src/sap/fe/templates/ListReport/view/fragments/CollectionVisualization.fragment.xml +1 -1
  21. package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.js +19 -3
  22. package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.ts +75 -47
  23. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +12 -16
  24. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +17 -20
  25. package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +5 -4
  26. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +270 -244
  27. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +175 -235
  28. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +62 -73
  29. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +75 -90
  30. package/src/sap/fe/templates/ObjectPage/components/DraftHandlerButton.tsx +132 -0
  31. package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +2 -3
  32. package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.ts +4 -4
  33. package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.js +1 -1
  34. package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.ts +1 -1
  35. package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.js +1 -1
  36. package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.ts +1 -1
  37. package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js +1 -1
  38. package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.ts +6 -6
  39. package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.js +1 -1
  40. package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.ts +2 -2
  41. package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js +1 -1
  42. package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.ts +2 -2
  43. package/src/sap/fe/templates/ObjectPage/overrides/Paginator.js +1 -1
  44. package/src/sap/fe/templates/ObjectPage/overrides/Paginator.ts +1 -1
  45. package/src/sap/fe/templates/ObjectPage/overrides/Share.js +67 -41
  46. package/src/sap/fe/templates/ObjectPage/overrides/Share.ts +44 -56
  47. package/src/sap/fe/templates/ObjectPage/overrides/ViewState.js +2 -2
  48. package/src/sap/fe/templates/ObjectPage/overrides/ViewState.ts +4 -4
  49. package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +3 -10
  50. package/src/sap/fe/templates/ObjectPage/view/fragments/EditableHeaderFacet.fragment.xml +15 -5
  51. package/src/sap/fe/templates/ObjectPage/view/fragments/FooterContent.fragment.xml +1 -1
  52. package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacet.fragment.xml +1 -14
  53. package/src/sap/fe/templates/ObjectPage/view/fragments/HeadingTitle.fragment.xml +1 -0
  54. package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderAddress.fragment.xml +7 -2
  55. package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderContact.fragment.xml +26 -0
  56. package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +1 -1
  57. package/src/sap/fe/templates/ObjectPage/view/fragments/Section.fragment.xml +4 -1
  58. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionContent.fragment.xml +6 -2
  59. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionFormContent.fragment.xml +1 -0
  60. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionMoreFormContent.fragment.xml +1 -0
  61. package/src/sap/fe/templates/RootContainer/controller/Fcl.controller.js +25 -28
  62. package/src/sap/fe/templates/RootContainer/controller/Fcl.controller.ts +30 -33
  63. package/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.js +3 -4
  64. package/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.ts +4 -5
  65. package/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController.js +140 -52
  66. package/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController.ts +108 -54
  67. package/src/sap/fe/templates/RootContainer/overrides/EditFlow.js +1 -1
  68. package/src/sap/fe/templates/RootContainer/overrides/EditFlow.ts +3 -3
  69. package/src/sap/fe/templates/TableScroller.js +3 -3
  70. package/src/sap/fe/templates/TableScroller.ts +2 -2
  71. package/src/sap/fe/templates/controls/Table.fragment.xml +1 -0
  72. package/src/sap/fe/templates/library.js +7 -3
  73. package/src/sap/fe/templates/library.ts +5 -0
  74. package/src/sap/fe/templates/messagebundle.properties +7 -22
  75. package/src/sap/fe/templates/messagebundle_ar.properties +3 -12
  76. package/src/sap/fe/templates/messagebundle_bg.properties +0 -9
  77. package/src/sap/fe/templates/messagebundle_ca.properties +2 -11
  78. package/src/sap/fe/templates/messagebundle_cs.properties +3 -12
  79. package/src/sap/fe/templates/messagebundle_cy.properties +0 -9
  80. package/src/sap/fe/templates/messagebundle_da.properties +3 -12
  81. package/src/sap/fe/templates/messagebundle_de.properties +2 -11
  82. package/src/sap/fe/templates/messagebundle_el.properties +2 -11
  83. package/src/sap/fe/templates/messagebundle_en.properties +2 -11
  84. package/src/sap/fe/templates/messagebundle_en_GB.properties +2 -11
  85. package/src/sap/fe/templates/messagebundle_en_US_sappsd.properties +2 -11
  86. package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +2 -11
  87. package/src/sap/fe/templates/messagebundle_en_US_saptrc.properties +1 -5
  88. package/src/sap/fe/templates/messagebundle_es.properties +0 -9
  89. package/src/sap/fe/templates/messagebundle_es_MX.properties +2 -11
  90. package/src/sap/fe/templates/messagebundle_et.properties +0 -9
  91. package/src/sap/fe/templates/messagebundle_fi.properties +2 -11
  92. package/src/sap/fe/templates/messagebundle_fr.properties +3 -12
  93. package/src/sap/fe/templates/messagebundle_fr_CA.properties +2 -11
  94. package/src/sap/fe/templates/messagebundle_hi.properties +2 -11
  95. package/src/sap/fe/templates/messagebundle_hr.properties +2 -11
  96. package/src/sap/fe/templates/messagebundle_hu.properties +2 -11
  97. package/src/sap/fe/templates/messagebundle_id.properties +2 -11
  98. package/src/sap/fe/templates/messagebundle_it.properties +2 -11
  99. package/src/sap/fe/templates/messagebundle_iw.properties +2 -11
  100. package/src/sap/fe/templates/messagebundle_ja.properties +2 -11
  101. package/src/sap/fe/templates/messagebundle_kk.properties +2 -11
  102. package/src/sap/fe/templates/messagebundle_ko.properties +2 -11
  103. package/src/sap/fe/templates/messagebundle_lt.properties +2 -11
  104. package/src/sap/fe/templates/messagebundle_lv.properties +0 -9
  105. package/src/sap/fe/templates/messagebundle_ms.properties +2 -11
  106. package/src/sap/fe/templates/messagebundle_nl.properties +2 -11
  107. package/src/sap/fe/templates/messagebundle_no.properties +0 -9
  108. package/src/sap/fe/templates/messagebundle_pl.properties +0 -9
  109. package/src/sap/fe/templates/messagebundle_pt.properties +3 -12
  110. package/src/sap/fe/templates/messagebundle_pt_PT.properties +2 -11
  111. package/src/sap/fe/templates/messagebundle_ro.properties +0 -9
  112. package/src/sap/fe/templates/messagebundle_ru.properties +2 -11
  113. package/src/sap/fe/templates/messagebundle_sh.properties +2 -11
  114. package/src/sap/fe/templates/messagebundle_sk.properties +2 -11
  115. package/src/sap/fe/templates/messagebundle_sl.properties +2 -11
  116. package/src/sap/fe/templates/messagebundle_sv.properties +2 -11
  117. package/src/sap/fe/templates/messagebundle_th.properties +1 -10
  118. package/src/sap/fe/templates/messagebundle_tr.properties +2 -11
  119. package/src/sap/fe/templates/messagebundle_uk.properties +2 -11
  120. package/src/sap/fe/templates/messagebundle_vi.properties +0 -9
  121. package/src/sap/fe/templates/messagebundle_zh_CN.properties +0 -9
  122. package/src/sap/fe/templates/messagebundle_zh_TW.properties +2 -11
  123. package/src/sap/fe/templates/ObjectPage/view/fragments/SwitchDraftAndActiveObjectPopOver.fragment.xml +0 -27
@@ -1,13 +1,13 @@
1
1
  import Log from "sap/base/Log";
2
- import Share from "sap/fe/core/controllerextensions/Share";
2
+ import type Share from "sap/fe/core/controllerextensions/Share";
3
3
  import ModelHelper from "sap/fe/core/helpers/ModelHelper";
4
4
  import SemanticKeyHelper from "sap/fe/core/helpers/SemanticKeyHelper";
5
- import ObjectPageController from "sap/fe/templates/ObjectPage/ObjectPageController.controller";
5
+ import type ObjectPageController from "sap/fe/templates/ObjectPage/ObjectPageController.controller";
6
6
  import HashChanger from "sap/ui/core/routing/HashChanger";
7
7
  import Filter from "sap/ui/model/Filter";
8
8
  import FilterOperator from "sap/ui/model/FilterOperator";
9
9
 
10
- let bIsStickySupported: boolean;
10
+ let bGlobalIsStickySupported: boolean;
11
11
 
12
12
  function createFilterToFetchActiveContext(mKeyValues: any, bIsActiveEntityDefined: any) {
13
13
  const aKeys = Object.keys(mKeyValues);
@@ -28,15 +28,14 @@ function createFilterToFetchActiveContext(mKeyValues: any, bIsActiveEntityDefine
28
28
  aFilters.push(oActiveFilter);
29
29
  }
30
30
 
31
- const oCombinedFilter = new Filter(aFilters as any, true);
32
- return oCombinedFilter;
31
+ return new Filter(aFilters as any, true);
33
32
  }
34
33
  function getActiveContextPath(oController: any, sPageEntityName: any, oFilter: any) {
35
34
  const oListBinding = oController
36
35
  .getView()
37
36
  .getBindingContext()
38
37
  .getModel()
39
- .bindList("/" + sPageEntityName, undefined, undefined, oFilter, { "$$groupId": "$auto.Heroes" });
38
+ .bindList(`/${sPageEntityName}`, undefined, undefined, oFilter, { "$$groupId": "$auto.Heroes" });
40
39
  return oListBinding.requestContexts(0, 2).then(function (oContexts: any) {
41
40
  if (oContexts && oContexts.length) {
42
41
  return oContexts[0].getPath();
@@ -77,7 +76,7 @@ function getActiveContextInstances(oContext: any, oController: any, oEntitySet:
77
76
  // Hence in such cases we get technical key and use them to fetch active context
78
77
  if (sKeyAssignment.indexOf("=") === -1) {
79
78
  const oMetaModel = oContext.getModel().getMetaModel();
80
- const aTechnicalKeys = oMetaModel.getObject("/" + aPageHashArray.join("/") + "/$Type/$Key");
79
+ const aTechnicalKeys = oMetaModel.getObject(`/${aPageHashArray.join("/")}/$Type/$Key`);
81
80
  sKeyValue = aParts[0];
82
81
  sKey = aTechnicalKeys[0];
83
82
  oPageMap[sPageHash.split("(")[0]]["bIsActiveEntityDefined"] = false;
@@ -100,11 +99,7 @@ function getActiveContextInstances(oContext: any, oController: any, oEntitySet:
100
99
  const sPageEntitySetName = oPageEntitySet.$NavigationPropertyBinding && oPageEntitySet.$NavigationPropertyBinding[sNavigationPath];
101
100
  if (sPageEntitySetName) {
102
101
  oPageInfo.pageEntityName = oPageEntitySet.$NavigationPropertyBinding[sNavigationPath];
103
- oPageEntitySet =
104
- oContext
105
- .getModel()
106
- .getMetaModel()
107
- .getObject("/" + sPageEntitySetName) || oEntitySet;
102
+ oPageEntitySet = oContext.getModel().getMetaModel().getObject(`/${sPageEntitySetName}`) || oEntitySet;
108
103
  } else {
109
104
  oPageInfo.pageEntityName = sNavigationPath;
110
105
  }
@@ -123,9 +118,10 @@ function getActiveContextInstances(oContext: any, oController: any, oEntitySet:
123
118
 
124
119
  /**
125
120
  * Method to fetch active context path's.
126
- * @param {sap.ui.model.odata.v4.Context} oContext The Page Context
121
+ *
122
+ * @param oContext The Page Context
127
123
  * @param oController
128
- * @returns {Promise} Promise which is resolved once the active context's are fetched
124
+ * @returns Promise which is resolved once the active context's are fetched
129
125
  */
130
126
  function getActiveContextPaths(oContext: any, oController: any) {
131
127
  const sCurrentHashNoParams = HashChanger.getInstance().getHash().split("?")[0];
@@ -133,10 +129,7 @@ function getActiveContextPaths(oContext: any, oController: any) {
133
129
  if (sRootEntityName.indexOf("/") === 0) {
134
130
  sRootEntityName = sRootEntityName.substring(1);
135
131
  }
136
- const oEntitySet = oContext
137
- .getModel()
138
- .getMetaModel()
139
- .getObject("/" + sRootEntityName);
132
+ const oEntitySet = oContext.getModel().getMetaModel().getObject(`/${sRootEntityName}`);
140
133
  const oPageContext = oContext;
141
134
  const aActiveContextpromises = getActiveContextInstances(oContext, oController, oEntitySet);
142
135
  if (aActiveContextpromises.length > 0) {
@@ -167,11 +160,7 @@ function getActiveContextPaths(oContext: any, oController: any) {
167
160
  ];
168
161
  if (sNavigatioProperty) {
169
162
  aActiveContextPaths.push(sActiveContextPath.replace(sEntitySetName, sNavigatioProperty));
170
- oPageEntitySet =
171
- oPageContext
172
- .getModel()
173
- .getMetaModel()
174
- .getObject("/" + sEntitySetName) || oEntitySet;
163
+ oPageEntitySet = oPageContext.getModel().getMetaModel().getObject(`/${sEntitySetName}`) || oEntitySet;
175
164
  } else {
176
165
  aActiveContextPaths.push(sActiveContextPath);
177
166
  }
@@ -191,7 +180,7 @@ function fetchActiveContextPaths(oContext: any, oController: any) {
191
180
  if (oContext) {
192
181
  const oModel = oContext.getModel();
193
182
  const oMetaModel = oModel.getMetaModel();
194
- bIsStickySupported = ModelHelper.isStickySessionSupported(oMetaModel);
183
+ bGlobalIsStickySupported = ModelHelper.isStickySessionSupported(oMetaModel);
195
184
  let sRootEntityName = sCurrentHashNoParams && sCurrentHashNoParams.substr(0, sCurrentHashNoParams.indexOf("("));
196
185
  if (sRootEntityName.indexOf("/") === 0) {
197
186
  sRootEntityName = sRootEntityName.substring(1);
@@ -202,7 +191,7 @@ function fetchActiveContextPaths(oContext: any, oController: any) {
202
191
  // 1. In case of draft enabled Object page where semantic key based URL is not possible(like semantic keys are not modeled in the entity set)
203
192
  // 2. In case of draft enabled Sub Object Pages (where semantic bookmarking is not supported)
204
193
  const oViewData = oController.getView().getViewData();
205
- if (oContext && !bIsStickySupported && ((oViewData.viewLevel === 1 && !aSemanticKeys) || oViewData.viewLevel >= 2)) {
194
+ if (oContext && !bGlobalIsStickySupported && ((oViewData.viewLevel === 1 && !aSemanticKeys) || oViewData.viewLevel >= 2)) {
206
195
  oPromise = getActiveContextPaths(oContext, oController);
207
196
  return oPromise;
208
197
  } else {
@@ -276,40 +265,39 @@ function getJamUrl(bIsEditMode: boolean, bIsStickySupported: any, aActiveContext
276
265
  }
277
266
 
278
267
  const ShareExtensionOverride = {
279
- adaptShareMetadata: function (this: Share, oShareMetadata: any) {
280
- const oContext = this.base.getView().getBindingContext(),
281
- oUIModel = this.base.getView().getModel("ui"),
282
- bIsEditable = oUIModel.getProperty("/isEditable");
283
- return fetchActiveContextPaths(oContext, this.base.getView().getController()).then((aActiveContextPaths) => {
284
- const oPageTitleInfo = (this.base.getView().getController() as ObjectPageController)._getPageTitleInformation();
268
+ adaptShareMetadata: async function (this: Share, oShareMetadata: any) {
269
+ const oContext = this.base.getView().getBindingContext();
270
+ const oUIModel = this.base.getView().getModel("ui");
271
+ const bIsEditable = oUIModel.getProperty("/isEditable");
285
272
 
286
- return Promise.all([
287
- getJamUrl(bIsEditable, bIsStickySupported, aActiveContextPaths),
288
- getShareUrl(bIsEditable, bIsStickySupported, aActiveContextPaths),
273
+ try {
274
+ const aActiveContextPaths = await fetchActiveContextPaths(oContext, this.base.getView().getController());
275
+ const oPageTitleInfo = (this.base.getView().getController() as ObjectPageController)._getPageTitleInformation();
276
+ const oData = await Promise.all([
277
+ getJamUrl(bIsEditable, bGlobalIsStickySupported, aActiveContextPaths),
278
+ getShareUrl(bIsEditable, bGlobalIsStickySupported, aActiveContextPaths),
289
279
  getShareEmailUrl()
290
- ])
291
- .then(function (oData) {
292
- let sTitle = oPageTitleInfo.title;
293
- const sObjectSubtitle = oPageTitleInfo.subtitle ? oPageTitleInfo.subtitle.toString() : "";
294
- if (sObjectSubtitle) {
295
- sTitle = sTitle + " - " + sObjectSubtitle;
296
- }
297
- oShareMetadata.tile = {
298
- title: oPageTitleInfo.title,
299
- subtitle: sObjectSubtitle
300
- };
301
- oShareMetadata.email.title = sTitle;
302
- oShareMetadata.title = sTitle;
303
- oShareMetadata.jam.url = oData[0];
304
- oShareMetadata.url = oData[1];
305
- oShareMetadata.email.url = oData[2];
280
+ ]);
306
281
 
307
- return oShareMetadata;
308
- })
309
- .catch(function (error: any) {
310
- Log.error(error);
311
- });
312
- });
282
+ let sTitle = oPageTitleInfo.title;
283
+ const sObjectSubtitle = oPageTitleInfo.subtitle ? oPageTitleInfo.subtitle.toString() : "";
284
+ if (sObjectSubtitle) {
285
+ sTitle = `${sTitle} - ${sObjectSubtitle}`;
286
+ }
287
+ oShareMetadata.tile = {
288
+ title: oPageTitleInfo.title,
289
+ subtitle: sObjectSubtitle
290
+ };
291
+ oShareMetadata.email.title = sTitle;
292
+ oShareMetadata.title = sTitle;
293
+ oShareMetadata.jam.url = oData[0];
294
+ oShareMetadata.url = oData[1];
295
+ oShareMetadata.email.url = oData[2];
296
+ } catch (error: any) {
297
+ Log.error(error);
298
+ }
299
+
300
+ return oShareMetadata;
313
301
  }
314
302
  };
315
303
 
@@ -26,7 +26,7 @@ sap.ui.define(["sap/fe/core/helpers/KeepAliveHelper", "sap/fe/core/library"], fu
26
26
  break;
27
27
 
28
28
  default:
29
- throw new Error("unhandled variant setting: " + oViewData.getVariantManagement());
29
+ throw new Error("unhandled variant setting: ".concat(oViewData.getVariantManagement()));
30
30
  }
31
31
 
32
32
  oController._findTables().forEach(function (oTable) {
@@ -72,4 +72,4 @@ sap.ui.define(["sap/fe/core/helpers/KeepAliveHelper", "sap/fe/core/library"], fu
72
72
  };
73
73
  return ViewStateExtensionOverride;
74
74
  }, false);
75
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlZpZXdTdGF0ZS50cyJdLCJuYW1lcyI6WyJWYXJpYW50TWFuYWdlbWVudCIsIkNvcmVMaWJyYXJ5IiwiVmlld1N0YXRlRXh0ZW5zaW9uT3ZlcnJpZGUiLCJhcHBseUluaXRpYWxTdGF0ZU9ubHkiLCJhZGFwdFN0YXRlQ29udHJvbHMiLCJhU3RhdGVDb250cm9scyIsIm9WaWV3IiwiZ2V0VmlldyIsIm9Db250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsIm9WaWV3RGF0YSIsImdldFZpZXdEYXRhIiwiYkNvbnRyb2xWTSIsInZhcmlhbnRNYW5hZ2VtZW50IiwiQ29udHJvbCIsIlBhZ2UiLCJOb25lIiwiRXJyb3IiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsIl9maW5kVGFibGVzIiwiZm9yRWFjaCIsIm9UYWJsZSIsIm9RdWlja0ZpbHRlciIsImdldFF1aWNrRmlsdGVyIiwicHVzaCIsImdldFZhcmlhbnQiLCJieUlkIiwiYWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzIiwiYUNvbnRyb2xzIiwic1JlZnJlc2hTdHJhdGVneSIsIktlZXBBbGl2ZUhlbHBlciIsImdldFZpZXdSZWZyZXNoSW5mbyIsImFDb250cm9sc1RvUmVmcmVzaCIsIm9PYmplY3RQYWdlQ29udHJvbCIsIl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCIsImFWaWV3Q29udHJvbHMiLCJjb25jYXQiLCJnZXRDb250cm9sc0ZvclJlZnJlc2giLCJyZWR1Y2UiLCJhUHJldkNvbnRyb2xzIiwib0NvbnRyb2wiLCJpbmRleE9mIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7O0FBSUEsTUFBTUEsaUJBQWlCLEdBQUdDLFdBQVcsQ0FBQ0QsaUJBQXRDO0FBRUEsTUFBTUUsMEJBQTBCLEdBQUc7QUFDbENDLElBQUFBLHFCQUFxQixFQUFFLFlBQVk7QUFDbEMsYUFBTyxLQUFQO0FBQ0EsS0FIaUM7QUFJbENDLElBQUFBLGtCQUFrQixFQUFFLFVBQTJCQyxjQUEzQixFQUFnRDtBQUNuRSxVQUFNQyxLQUFLLEdBQUcsS0FBS0MsT0FBTCxFQUFkO0FBQUEsVUFDQ0MsV0FBVyxHQUFHRixLQUFLLENBQUNHLGFBQU4sRUFEZjtBQUFBLFVBRUNDLFNBQVMsR0FBR0osS0FBSyxDQUFDSyxXQUFOLEVBRmI7QUFHQSxVQUFJQyxVQUFVLEdBQUcsS0FBakI7O0FBRUEsY0FBUUYsU0FBUyxDQUFDRyxpQkFBbEI7QUFDQyxhQUFLYixpQkFBaUIsQ0FBQ2MsT0FBdkI7QUFDQ0YsVUFBQUEsVUFBVSxHQUFHLElBQWI7QUFDQTs7QUFDRCxhQUFLWixpQkFBaUIsQ0FBQ2UsSUFBdkI7QUFDQSxhQUFLZixpQkFBaUIsQ0FBQ2dCLElBQXZCO0FBQ0M7O0FBQ0Q7QUFDQyxnQkFBTSxJQUFJQyxLQUFKLENBQVUsZ0NBQWdDUCxTQUFTLENBQUNRLG9CQUFWLEVBQTFDLENBQU47QUFSRjs7QUFXQ1YsTUFBQUEsV0FBRCxDQUFzQ1csV0FBdEMsR0FBb0RDLE9BQXBELENBQTRELFVBQVVDLE1BQVYsRUFBdUI7QUFDbEYsWUFBTUMsWUFBWSxHQUFHRCxNQUFNLENBQUNFLGNBQVAsRUFBckI7O0FBQ0EsWUFBSUQsWUFBSixFQUFrQjtBQUNqQmpCLFVBQUFBLGNBQWMsQ0FBQ21CLElBQWYsQ0FBb0JGLFlBQXBCO0FBQ0E7O0FBQ0QsWUFBSVYsVUFBSixFQUFnQjtBQUNmUCxVQUFBQSxjQUFjLENBQUNtQixJQUFmLENBQW9CSCxNQUFNLENBQUNJLFVBQVAsRUFBcEI7QUFDQTtBQUNELE9BUkQ7O0FBVUFwQixNQUFBQSxjQUFjLENBQUNtQixJQUFmLENBQW9CbEIsS0FBSyxDQUFDb0IsSUFBTixDQUFXLGdCQUFYLENBQXBCO0FBQ0EsS0FoQ2lDO0FBaUNsQ0MsSUFBQUEsMkJBQTJCLEVBQUUsVUFBMkJDLFNBQTNCLEVBQTJDO0FBQ3ZFLFVBQU10QixLQUFLLEdBQUcsS0FBS0MsT0FBTCxFQUFkO0FBQUEsVUFDQ3NCLGdCQUFnQixHQUFHQyxlQUFlLENBQUNDLGtCQUFoQixDQUFtQ3pCLEtBQW5DLENBRHBCO0FBQUEsVUFFQ0UsV0FBVyxHQUFHRixLQUFLLENBQUNHLGFBQU4sRUFGZjtBQUdBLFVBQUl1QixrQkFBNkIsR0FBRyxFQUFwQzs7QUFFQSxVQUFJSCxnQkFBSixFQUFzQjtBQUNyQixZQUFNSSxrQkFBa0IsR0FBSXpCLFdBQUQsQ0FBc0MwQiwyQkFBdEMsRUFBM0I7O0FBQ0FGLFFBQUFBLGtCQUFrQixDQUFDUixJQUFuQixDQUF3QlMsa0JBQXhCO0FBQ0E7O0FBQ0QsVUFBSUosZ0JBQWdCLEtBQUsscUJBQXpCLEVBQWdEO0FBQy9DLFlBQU1NLGFBQWEsR0FBSTNCLFdBQUQsQ0FBc0NXLFdBQXRDLEVBQXRCOztBQUNBYSxRQUFBQSxrQkFBa0IsR0FBR0Esa0JBQWtCLENBQUNJLE1BQW5CLENBQTBCTixlQUFlLENBQUNPLHFCQUFoQixDQUFzQy9CLEtBQXRDLEVBQTZDNkIsYUFBN0MsS0FBK0QsRUFBekYsQ0FBckI7QUFDQTs7QUFDRCxhQUFPSCxrQkFBa0IsQ0FBQ00sTUFBbkIsQ0FBMEIsVUFBVUMsYUFBVixFQUE4QkMsUUFBOUIsRUFBNkM7QUFDN0UsWUFBSUQsYUFBYSxDQUFDRSxPQUFkLENBQXNCRCxRQUF0QixNQUFvQyxDQUFDLENBQXpDLEVBQTRDO0FBQzNDRCxVQUFBQSxhQUFhLENBQUNmLElBQWQsQ0FBbUJnQixRQUFuQjtBQUNBOztBQUNELGVBQU9ELGFBQVA7QUFDQSxPQUxNLEVBS0pYLFNBTEksQ0FBUDtBQU1BO0FBckRpQyxHQUFuQztTQXdEZTFCLDBCIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCBLZWVwQWxpdmVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvS2VlcEFsaXZlSGVscGVyXCI7XG5pbXBvcnQgQ29yZUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBPYmplY3RQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL09iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5cbmNvbnN0IFZhcmlhbnRNYW5hZ2VtZW50ID0gQ29yZUxpYnJhcnkuVmFyaWFudE1hbmFnZW1lbnQ7XG5cbmNvbnN0IFZpZXdTdGF0ZUV4dGVuc2lvbk92ZXJyaWRlID0ge1xuXHRhcHBseUluaXRpYWxTdGF0ZU9ubHk6IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cdGFkYXB0U3RhdGVDb250cm9sczogZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSwgYVN0YXRlQ29udHJvbHM6IGFueSkge1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCksXG5cdFx0XHRvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKSxcblx0XHRcdG9WaWV3RGF0YSA9IG9WaWV3LmdldFZpZXdEYXRhKCkgYXMgYW55O1xuXHRcdGxldCBiQ29udHJvbFZNID0gZmFsc2U7XG5cblx0XHRzd2l0Y2ggKG9WaWV3RGF0YS52YXJpYW50TWFuYWdlbWVudCkge1xuXHRcdFx0Y2FzZSBWYXJpYW50TWFuYWdlbWVudC5Db250cm9sOlxuXHRcdFx0XHRiQ29udHJvbFZNID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFZhcmlhbnRNYW5hZ2VtZW50LlBhZ2U6XG5cdFx0XHRjYXNlIFZhcmlhbnRNYW5hZ2VtZW50Lk5vbmU6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidW5oYW5kbGVkIHZhcmlhbnQgc2V0dGluZzogXCIgKyBvVmlld0RhdGEuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKSk7XG5cdFx0fVxuXG5cdFx0KG9Db250cm9sbGVyIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKS5fZmluZFRhYmxlcygpLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0XHRjb25zdCBvUXVpY2tGaWx0ZXIgPSBvVGFibGUuZ2V0UXVpY2tGaWx0ZXIoKTtcblx0XHRcdGlmIChvUXVpY2tGaWx0ZXIpIHtcblx0XHRcdFx0YVN0YXRlQ29udHJvbHMucHVzaChvUXVpY2tGaWx0ZXIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGJDb250cm9sVk0pIHtcblx0XHRcdFx0YVN0YXRlQ29udHJvbHMucHVzaChvVGFibGUuZ2V0VmFyaWFudCgpKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGFTdGF0ZUNvbnRyb2xzLnB1c2gob1ZpZXcuYnlJZChcImZlOjpPYmplY3RQYWdlXCIpKTtcblx0fSxcblx0YWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzOiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlLCBhQ29udHJvbHM6IGFueSkge1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCksXG5cdFx0XHRzUmVmcmVzaFN0cmF0ZWd5ID0gS2VlcEFsaXZlSGVscGVyLmdldFZpZXdSZWZyZXNoSW5mbyhvVmlldyksXG5cdFx0XHRvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRsZXQgYUNvbnRyb2xzVG9SZWZyZXNoOiBDb250cm9sW10gPSBbXTtcblxuXHRcdGlmIChzUmVmcmVzaFN0cmF0ZWd5KSB7XG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZUNvbnRyb2wgPSAob0NvbnRyb2xsZXIgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0YUNvbnRyb2xzVG9SZWZyZXNoLnB1c2gob09iamVjdFBhZ2VDb250cm9sKTtcblx0XHR9XG5cdFx0aWYgKHNSZWZyZXNoU3RyYXRlZ3kgIT09IFwiaW5jbHVkaW5nRGVwZW5kZW50c1wiKSB7XG5cdFx0XHRjb25zdCBhVmlld0NvbnRyb2xzID0gKG9Db250cm9sbGVyIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKS5fZmluZFRhYmxlcygpO1xuXHRcdFx0YUNvbnRyb2xzVG9SZWZyZXNoID0gYUNvbnRyb2xzVG9SZWZyZXNoLmNvbmNhdChLZWVwQWxpdmVIZWxwZXIuZ2V0Q29udHJvbHNGb3JSZWZyZXNoKG9WaWV3LCBhVmlld0NvbnRyb2xzKSB8fCBbXSk7XG5cdFx0fVxuXHRcdHJldHVybiBhQ29udHJvbHNUb1JlZnJlc2gucmVkdWNlKGZ1bmN0aW9uIChhUHJldkNvbnRyb2xzOiBhbnksIG9Db250cm9sOiBhbnkpIHtcblx0XHRcdGlmIChhUHJldkNvbnRyb2xzLmluZGV4T2Yob0NvbnRyb2wpID09PSAtMSkge1xuXHRcdFx0XHRhUHJldkNvbnRyb2xzLnB1c2gob0NvbnRyb2wpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFQcmV2Q29udHJvbHM7XG5cdFx0fSwgYUNvbnRyb2xzKTtcblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgVmlld1N0YXRlRXh0ZW5zaW9uT3ZlcnJpZGU7XG4iXX0=
75
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlZpZXdTdGF0ZS50cyJdLCJuYW1lcyI6WyJWYXJpYW50TWFuYWdlbWVudCIsIkNvcmVMaWJyYXJ5IiwiVmlld1N0YXRlRXh0ZW5zaW9uT3ZlcnJpZGUiLCJhcHBseUluaXRpYWxTdGF0ZU9ubHkiLCJhZGFwdFN0YXRlQ29udHJvbHMiLCJhU3RhdGVDb250cm9scyIsIm9WaWV3IiwiZ2V0VmlldyIsIm9Db250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsIm9WaWV3RGF0YSIsImdldFZpZXdEYXRhIiwiYkNvbnRyb2xWTSIsInZhcmlhbnRNYW5hZ2VtZW50IiwiQ29udHJvbCIsIlBhZ2UiLCJOb25lIiwiRXJyb3IiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsIl9maW5kVGFibGVzIiwiZm9yRWFjaCIsIm9UYWJsZSIsIm9RdWlja0ZpbHRlciIsImdldFF1aWNrRmlsdGVyIiwicHVzaCIsImdldFZhcmlhbnQiLCJieUlkIiwiYWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzIiwiYUNvbnRyb2xzIiwic1JlZnJlc2hTdHJhdGVneSIsIktlZXBBbGl2ZUhlbHBlciIsImdldFZpZXdSZWZyZXNoSW5mbyIsImFDb250cm9sc1RvUmVmcmVzaCIsIm9PYmplY3RQYWdlQ29udHJvbCIsIl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCIsImFWaWV3Q29udHJvbHMiLCJjb25jYXQiLCJnZXRDb250cm9sc0ZvclJlZnJlc2giLCJyZWR1Y2UiLCJhUHJldkNvbnRyb2xzIiwib0NvbnRyb2wiLCJpbmRleE9mIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7O0FBSUEsTUFBTUEsaUJBQWlCLEdBQUdDLFdBQVcsQ0FBQ0QsaUJBQXRDO0FBRUEsTUFBTUUsMEJBQTBCLEdBQUc7QUFDbENDLElBQUFBLHFCQUFxQixFQUFFLFlBQVk7QUFDbEMsYUFBTyxLQUFQO0FBQ0EsS0FIaUM7QUFJbENDLElBQUFBLGtCQUFrQixFQUFFLFVBQTJCQyxjQUEzQixFQUFnRDtBQUNuRSxVQUFNQyxLQUFLLEdBQUcsS0FBS0MsT0FBTCxFQUFkO0FBQUEsVUFDQ0MsV0FBVyxHQUFHRixLQUFLLENBQUNHLGFBQU4sRUFEZjtBQUFBLFVBRUNDLFNBQVMsR0FBR0osS0FBSyxDQUFDSyxXQUFOLEVBRmI7QUFHQSxVQUFJQyxVQUFVLEdBQUcsS0FBakI7O0FBRUEsY0FBUUYsU0FBUyxDQUFDRyxpQkFBbEI7QUFDQyxhQUFLYixpQkFBaUIsQ0FBQ2MsT0FBdkI7QUFDQ0YsVUFBQUEsVUFBVSxHQUFHLElBQWI7QUFDQTs7QUFDRCxhQUFLWixpQkFBaUIsQ0FBQ2UsSUFBdkI7QUFDQSxhQUFLZixpQkFBaUIsQ0FBQ2dCLElBQXZCO0FBQ0M7O0FBQ0Q7QUFDQyxnQkFBTSxJQUFJQyxLQUFKLHNDQUF3Q1AsU0FBUyxDQUFDUSxvQkFBVixFQUF4QyxFQUFOO0FBUkY7O0FBV0NWLE1BQUFBLFdBQUQsQ0FBc0NXLFdBQXRDLEdBQW9EQyxPQUFwRCxDQUE0RCxVQUFVQyxNQUFWLEVBQXVCO0FBQ2xGLFlBQU1DLFlBQVksR0FBR0QsTUFBTSxDQUFDRSxjQUFQLEVBQXJCOztBQUNBLFlBQUlELFlBQUosRUFBa0I7QUFDakJqQixVQUFBQSxjQUFjLENBQUNtQixJQUFmLENBQW9CRixZQUFwQjtBQUNBOztBQUNELFlBQUlWLFVBQUosRUFBZ0I7QUFDZlAsVUFBQUEsY0FBYyxDQUFDbUIsSUFBZixDQUFvQkgsTUFBTSxDQUFDSSxVQUFQLEVBQXBCO0FBQ0E7QUFDRCxPQVJEOztBQVVBcEIsTUFBQUEsY0FBYyxDQUFDbUIsSUFBZixDQUFvQmxCLEtBQUssQ0FBQ29CLElBQU4sQ0FBVyxnQkFBWCxDQUFwQjtBQUNBLEtBaENpQztBQWlDbENDLElBQUFBLDJCQUEyQixFQUFFLFVBQTJCQyxTQUEzQixFQUEyQztBQUN2RSxVQUFNdEIsS0FBSyxHQUFHLEtBQUtDLE9BQUwsRUFBZDtBQUFBLFVBQ0NzQixnQkFBZ0IsR0FBR0MsZUFBZSxDQUFDQyxrQkFBaEIsQ0FBbUN6QixLQUFuQyxDQURwQjtBQUFBLFVBRUNFLFdBQVcsR0FBR0YsS0FBSyxDQUFDRyxhQUFOLEVBRmY7QUFHQSxVQUFJdUIsa0JBQTZCLEdBQUcsRUFBcEM7O0FBRUEsVUFBSUgsZ0JBQUosRUFBc0I7QUFDckIsWUFBTUksa0JBQWtCLEdBQUl6QixXQUFELENBQXNDMEIsMkJBQXRDLEVBQTNCOztBQUNBRixRQUFBQSxrQkFBa0IsQ0FBQ1IsSUFBbkIsQ0FBd0JTLGtCQUF4QjtBQUNBOztBQUNELFVBQUlKLGdCQUFnQixLQUFLLHFCQUF6QixFQUFnRDtBQUMvQyxZQUFNTSxhQUFhLEdBQUkzQixXQUFELENBQXNDVyxXQUF0QyxFQUF0Qjs7QUFDQWEsUUFBQUEsa0JBQWtCLEdBQUdBLGtCQUFrQixDQUFDSSxNQUFuQixDQUEwQk4sZUFBZSxDQUFDTyxxQkFBaEIsQ0FBc0MvQixLQUF0QyxFQUE2QzZCLGFBQTdDLEtBQStELEVBQXpGLENBQXJCO0FBQ0E7O0FBQ0QsYUFBT0gsa0JBQWtCLENBQUNNLE1BQW5CLENBQTBCLFVBQVVDLGFBQVYsRUFBOEJDLFFBQTlCLEVBQTZDO0FBQzdFLFlBQUlELGFBQWEsQ0FBQ0UsT0FBZCxDQUFzQkQsUUFBdEIsTUFBb0MsQ0FBQyxDQUF6QyxFQUE0QztBQUMzQ0QsVUFBQUEsYUFBYSxDQUFDZixJQUFkLENBQW1CZ0IsUUFBbkI7QUFDQTs7QUFDRCxlQUFPRCxhQUFQO0FBQ0EsT0FMTSxFQUtKWCxTQUxJLENBQVA7QUFNQTtBQXJEaUMsR0FBbkM7U0F3RGUxQiwwQiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCBLZWVwQWxpdmVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvS2VlcEFsaXZlSGVscGVyXCI7XG5pbXBvcnQgQ29yZUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvT2JqZWN0UGFnZUNvbnRyb2xsZXIuY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuXG5jb25zdCBWYXJpYW50TWFuYWdlbWVudCA9IENvcmVMaWJyYXJ5LlZhcmlhbnRNYW5hZ2VtZW50O1xuXG5jb25zdCBWaWV3U3RhdGVFeHRlbnNpb25PdmVycmlkZSA9IHtcblx0YXBwbHlJbml0aWFsU3RhdGVPbmx5OiBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXHRhZGFwdFN0YXRlQ29udHJvbHM6IGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUsIGFTdGF0ZUNvbnRyb2xzOiBhbnkpIHtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpLFxuXHRcdFx0b0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCksXG5cdFx0XHRvVmlld0RhdGEgPSBvVmlldy5nZXRWaWV3RGF0YSgpIGFzIGFueTtcblx0XHRsZXQgYkNvbnRyb2xWTSA9IGZhbHNlO1xuXG5cdFx0c3dpdGNoIChvVmlld0RhdGEudmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdGNhc2UgVmFyaWFudE1hbmFnZW1lbnQuQ29udHJvbDpcblx0XHRcdFx0YkNvbnRyb2xWTSA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBWYXJpYW50TWFuYWdlbWVudC5QYWdlOlxuXHRcdFx0Y2FzZSBWYXJpYW50TWFuYWdlbWVudC5Ob25lOlxuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5oYW5kbGVkIHZhcmlhbnQgc2V0dGluZzogJHtvVmlld0RhdGEuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKX1gKTtcblx0XHR9XG5cblx0XHQob0NvbnRyb2xsZXIgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLl9maW5kVGFibGVzKCkuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9RdWlja0ZpbHRlciA9IG9UYWJsZS5nZXRRdWlja0ZpbHRlcigpO1xuXHRcdFx0aWYgKG9RdWlja0ZpbHRlcikge1xuXHRcdFx0XHRhU3RhdGVDb250cm9scy5wdXNoKG9RdWlja0ZpbHRlcik7XG5cdFx0XHR9XG5cdFx0XHRpZiAoYkNvbnRyb2xWTSkge1xuXHRcdFx0XHRhU3RhdGVDb250cm9scy5wdXNoKG9UYWJsZS5nZXRWYXJpYW50KCkpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0YVN0YXRlQ29udHJvbHMucHVzaChvVmlldy5ieUlkKFwiZmU6Ok9iamVjdFBhZ2VcIikpO1xuXHR9LFxuXHRhZGFwdEJpbmRpbmdSZWZyZXNoQ29udHJvbHM6IGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUsIGFDb250cm9sczogYW55KSB7XG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKSxcblx0XHRcdHNSZWZyZXNoU3RyYXRlZ3kgPSBLZWVwQWxpdmVIZWxwZXIuZ2V0Vmlld1JlZnJlc2hJbmZvKG9WaWV3KSxcblx0XHRcdG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdGxldCBhQ29udHJvbHNUb1JlZnJlc2g6IENvbnRyb2xbXSA9IFtdO1xuXG5cdFx0aWYgKHNSZWZyZXNoU3RyYXRlZ3kpIHtcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlQ29udHJvbCA9IChvQ29udHJvbGxlciBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0XHRhQ29udHJvbHNUb1JlZnJlc2gucHVzaChvT2JqZWN0UGFnZUNvbnRyb2wpO1xuXHRcdH1cblx0XHRpZiAoc1JlZnJlc2hTdHJhdGVneSAhPT0gXCJpbmNsdWRpbmdEZXBlbmRlbnRzXCIpIHtcblx0XHRcdGNvbnN0IGFWaWV3Q29udHJvbHMgPSAob0NvbnRyb2xsZXIgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLl9maW5kVGFibGVzKCk7XG5cdFx0XHRhQ29udHJvbHNUb1JlZnJlc2ggPSBhQ29udHJvbHNUb1JlZnJlc2guY29uY2F0KEtlZXBBbGl2ZUhlbHBlci5nZXRDb250cm9sc0ZvclJlZnJlc2gob1ZpZXcsIGFWaWV3Q29udHJvbHMpIHx8IFtdKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFDb250cm9sc1RvUmVmcmVzaC5yZWR1Y2UoZnVuY3Rpb24gKGFQcmV2Q29udHJvbHM6IGFueSwgb0NvbnRyb2w6IGFueSkge1xuXHRcdFx0aWYgKGFQcmV2Q29udHJvbHMuaW5kZXhPZihvQ29udHJvbCkgPT09IC0xKSB7XG5cdFx0XHRcdGFQcmV2Q29udHJvbHMucHVzaChvQ29udHJvbCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYVByZXZDb250cm9scztcblx0XHR9LCBhQ29udHJvbHMpO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBWaWV3U3RhdGVFeHRlbnNpb25PdmVycmlkZTtcbiJdfQ==
@@ -1,8 +1,8 @@
1
- import ViewState from "sap/fe/core/controllerextensions/ViewState";
1
+ import type ViewState from "sap/fe/core/controllerextensions/ViewState";
2
2
  import KeepAliveHelper from "sap/fe/core/helpers/KeepAliveHelper";
3
3
  import CoreLibrary from "sap/fe/core/library";
4
- import ObjectPageController from "sap/fe/templates/ObjectPage/ObjectPageController.controller";
5
- import Control from "sap/ui/core/Control";
4
+ import type ObjectPageController from "sap/fe/templates/ObjectPage/ObjectPageController.controller";
5
+ import type Control from "sap/ui/core/Control";
6
6
 
7
7
  const VariantManagement = CoreLibrary.VariantManagement;
8
8
 
@@ -24,7 +24,7 @@ const ViewStateExtensionOverride = {
24
24
  case VariantManagement.None:
25
25
  break;
26
26
  default:
27
- throw new Error("unhandled variant setting: " + oViewData.getVariantManagement());
27
+ throw new Error(`unhandled variant setting: ${oViewData.getVariantManagement()}`);
28
28
  }
29
29
 
30
30
  (oController as ObjectPageController)._findTables().forEach(function (oTable: any) {
@@ -5,6 +5,7 @@
5
5
  xmlns="sap.m"
6
6
  xmlns:core="sap.ui.core"
7
7
  xmlns:macro="sap.fe.macros.internal"
8
+ xmlns:components="sap.fe.templates.ObjectPage.components"
8
9
  template:require="{
9
10
  ID: 'sap/fe/core/helpers/StableIdHelper',
10
11
  OP: 'sap/fe/templates/ObjectPage/ObjectPageTemplating',
@@ -19,15 +20,7 @@
19
20
  <template:repeat list="{converterContext>header/actions}" var="headerAction">
20
21
  <template:if test="{= ${headerAction>type} === 'DraftActions' &amp;&amp; OP.checkDraftState(${entitySet>@}) }">
21
22
  <template:then>
22
- <Button
23
- id="fe::StandardAction::SwitchDraftAndActiveObject"
24
- text="{= ( !(${ui>/editMode} === 'Editable') &amp;&amp; !${ui>createMode} &amp;&amp; ${HasDraftEntity} ) ? ${sap.fe.i18n>C_COMMON_OBJECT_PAGE_SAVED_VERSION_BUT} : ${sap.fe.i18n>C_COMMON_OBJECT_PAGE_DRAFT_BUT} }"
25
- visible="{= OP.getSwitchDraftAndActiveVisibility(${entitySet>@}) }"
26
- icon="sap-icon://navigation-down-arrow"
27
- iconFirst="false"
28
- type="Transparent"
29
- press="._showSwitchDraftAndActivePopover($event)"
30
- />
23
+ <components:DraftHandlerButton contextPath="{entitySet>}" id="fe::StandardAction::SwitchDraftAndActiveObject" />
31
24
  <core:Fragment fragmentName="sap.fe.templates.ObjectPage.view.fragments.CollaborationDraft" type="XML" />
32
25
  <ToolbarSpacer />
33
26
  </template:then>
@@ -122,7 +115,7 @@
122
115
  unittest:id="DeleteActionTest"
123
116
  id="fe::StandardAction::Delete"
124
117
  type="Default"
125
- text="{sap.fe.i18n>C_COMMON_OBJECT_PAGE_DELETE}"
118
+ text="{sap.fe.i18n>C_COMMON_DELETE}"
126
119
  visible="{headerAction>visible}"
127
120
  enabled="{headerAction>enabled}"
128
121
  press="cmd:DeleteObject"
@@ -27,7 +27,7 @@
27
27
  id="fe::EditableHeaderForm"
28
28
  editable="true"
29
29
  class="sapUxAPObjectPageSubSectionAlignContent"
30
- formdata:navigationPath="{= FORM.getNavigationPath(${entitySet>}) }"
30
+ formdata:navigationPath="{= COMMON.getNavigationPath(${entitySet>}) }"
31
31
  formdata:entitySet="{entitySet>@sapui.name}"
32
32
  >
33
33
  <f:layout>
@@ -37,9 +37,11 @@
37
37
  <f:FormContainer
38
38
  unittest:id="HeaderInfoFormContainerTest"
39
39
  id="fe::EditableHeaderForm::EditableHeaderInfo"
40
- title="{sap.fe.i18n>T_COMMON_OBJECT_PAGE_OBJECT_INFO}"
41
40
  visible="{= OP.getVisiblityOfHeaderFacet(${entityType>@com.sap.vocabularies.UI.v1.HeaderInfo/Title/Value/$Path@},${entityType>@com.sap.vocabularies.UI.v1.HeaderInfo/Description/Value/$Path@},${entityType>@com.sap.vocabularies.UI.v1.HeaderInfo/Title/Value/$Path@@FIELD.fieldControl},${entityType>@com.sap.vocabularies.UI.v1.HeaderInfo/Description/Value/$Path@@FIELD.fieldControl}) }"
42
41
  >
42
+ <f:title>
43
+ <core:Title level="H4" text="{sap.fe.i18n>T_COMMON_OBJECT_PAGE_OBJECT_INFO}" />
44
+ </f:title>
43
45
  <f:dependents>
44
46
  <macro:ValueHelp
45
47
  idPrefix="fe::EditableHeaderForm::EditableHeaderTitle::FieldValueHelp"
@@ -111,8 +113,10 @@
111
113
  id="{= ${formContainer>id} ? ID.generate(['fe', 'HeaderFacet', 'FormContainer', ${formContainer>id} ]) : undefined }"
112
114
  designtimeSettings="{= ${subSection>flexSettings/designtime} === 'Default' ? 'sap/fe/macros/FormContainer.designtime' : ${subSection>flexSettings/designtime}}"
113
115
  title="{facet>@@MODEL.label}"
116
+ titleLevel="H4"
114
117
  displayMode="Edit"
115
- entitySet="{targetEntitySet>}"
118
+ contextPath="{targetEntitySet>}"
119
+ metaPath="{formContainer>annotationPath}"
116
120
  navigationPath="{= MODEL.getNavigationPath(${facet>Target/$AnnotationPath}) ? MODEL.getNavigationPath(${facet>Target/$AnnotationPath}) : ''}"
117
121
  dataFieldCollection="{formContainer>formElements}"
118
122
  visible="{subSection>visible}"
@@ -124,8 +128,10 @@
124
128
  id="{= ${formContainer>id} ? ID.generate(['fe', 'HeaderFacet', 'FormContainer', ${formContainer>id} ]) : undefined }"
125
129
  designtimeSettings="{= ${subSection>flexSettings/designtime} === 'Default' ? 'sap/fe/macros/FormContainer.designtime' : ${subSection>flexSettings/designtime}}"
126
130
  title="{facet>@@MODEL.label}"
131
+ titleLevel="H4"
127
132
  displayMode="Edit"
128
- entitySet="{entitySet>}"
133
+ contextPath="{entitySet>}"
134
+ metaPath="{formContainer>annotationPath}"
129
135
  dataFieldCollection="{formContainer>formElements}"
130
136
  visible="{subSection>visible}"
131
137
  />
@@ -137,10 +143,14 @@
137
143
  <template:else>
138
144
  <f:FormContainer
139
145
  id="{= ${subSection>id} ? ID.generate([${subSection>id}, 'CustomFormContainer', ${subSection>}]) : undefined }"
140
- title="{subSection>title}"
141
146
  visible="{subSection>visible}"
142
147
  dt:designtime="{= ${subSection>flexSettings/designtime} === 'Default' ? 'sap/ui/layout/designtime/form/FormContainer.designtime' : ${subSection>flexSettings/designtime}}"
143
148
  >
149
+ <template:if test="{subSection>title}">
150
+ <f:title>
151
+ <core:Title level="H4" text="{subSection>title}" />
152
+ </f:title>
153
+ </template:if>
144
154
  <f:formElements>
145
155
  <fpm:CustomFragment
146
156
  id="{= ${subSection>id} ? ID.generate([${subSection>id}, 'CustomFragment', ${subSection>}]) : undefined }"
@@ -35,7 +35,7 @@
35
35
  test="{= ${entitySet>@com.sap.vocabularies.Common.v1.DraftRoot} || ${entitySet>@com.sap.vocabularies.Common.v1.DraftNode}
36
36
  || COMMON.isDraftParentEntityForContainment(${entitySet>$ContainsTarget}, undefined, ${converterContext>}) }"
37
37
  >
38
- <DraftIndicator state="{ui>/draftStatus}" />
38
+ <DraftIndicator state="{ui>/draftStatus}" visible="{ui>/isEditable}" />
39
39
  </template:if>
40
40
  <template:if test="{converterContext>footerActions}">
41
41
  <template:repeat list="{converterContext>footerActions}" var="footerAction">
@@ -56,20 +56,7 @@
56
56
  </template:with>
57
57
  </template:elseif>
58
58
  <template:elseif test="{= ${converterHeaderFacet>targetAnnotationType} === 'Contact'}">
59
- <template:with path="headerFacet>Target/$AnnotationPath" var="collection" helper="MODEL.resolve$Path">
60
- <template:with path="collection>" var="collection" helper="COMMON.getNavigationContext">
61
- <VBox id="{= ID.generate(['fe', 'HeaderFacet', 'Contact', { Facet: ${headerFacet>} }]) }" displayInline="true">
62
- <template:if test="{headerFacet>@@MODEL.label}">
63
- <Title text="{headerFacet>@@MODEL.label}" class="sapUiSmallMarginBottom" />
64
- </template:if>
65
- <template:with path="headerFacet>Target/$AnnotationPath" var="contact">
66
- <template:with path="headerFacet>Target/$AnnotationPath@@COMMON.getMetaPath" var="contactPath">
67
- <macro:Contact contact="{contact>}" visible="true" />
68
- </template:with>
69
- </template:with>
70
- </VBox>
71
- </template:with>
72
- </template:with>
59
+ <core:Fragment fragmentName="sap.fe.templates.ObjectPage.view.fragments.ObjectPageHeaderContact" type="XML" />
73
60
  </template:elseif>
74
61
  <template:elseif test="{= ${converterHeaderFacet>targetAnnotationType} === 'Address'}">
75
62
  <core:Fragment fragmentName="sap.fe.templates.ObjectPage.view.fragments.ObjectPageHeaderAddress" type="XML" />
@@ -13,6 +13,7 @@
13
13
  <Title
14
14
  text="{= OP.getExpressionForTitle(${headerInfo>@@UI.getConverterContext}, ${viewData>}, ${fullContextPath>@@UI.getDataModelObjectPath}, ${entitySet>@com.sap.vocabularies.Common.v1.DraftRoot})}"
15
15
  wrapping="true"
16
+ level="H2"
16
17
  />
17
18
  </template:with>
18
19
  </core:FragmentDefinition>
@@ -13,8 +13,13 @@
13
13
  >
14
14
  <template:with path="headerFacet>Target/$AnnotationPath/" var="addressPath">
15
15
  <VBox id="{= ${converterHeaderFacet>headerFormData/id} }" displayInline="true">
16
- <Title text="{headerFacet>Label}" />
17
- <Text unittest:id="ObjectPageHeaderAddressTest" renderWhitespace="true" class="sapMLabel" text="{addressPath>label@@MODEL.format}" />
16
+ <Title level="H3" text="{headerFacet>Label}" />
17
+ <Text
18
+ unittest:id="ObjectPageHeaderAddressTest"
19
+ renderWhitespace="true"
20
+ class="sapMLabel"
21
+ text="{addressPath>label@@MODEL.format}"
22
+ />
18
23
  </VBox>
19
24
  </template:with>
20
25
  </core:FragmentDefinition>
@@ -0,0 +1,26 @@
1
+ <core:FragmentDefinition
2
+ xmlns="sap.m"
3
+ xmlns:core="sap.ui.core"
4
+ xmlns:macro="sap.fe.macros"
5
+ xmlns:template="http://schemas.sap.com/sapui5/extension/sap.ui.core.template/1"
6
+ template:require="{
7
+ MODEL: 'sap/ui/model/odata/v4/AnnotationHelper',
8
+ COMMON: 'sap/fe/macros/CommonHelper',
9
+ ID: 'sap/fe/core/helpers/StableIdHelper'
10
+ }"
11
+ >
12
+ <template:with path="headerFacet>Target/$AnnotationPath" var="collection" helper="MODEL.resolve$Path">
13
+ <template:with path="collection>" var="collection" helper="COMMON.getNavigationContext">
14
+ <VBox id="{= ID.generate(['fe', 'HeaderFacet', 'Contact', { Facet: ${headerFacet>} }]) }" displayInline="true">
15
+ <template:if test="{headerFacet>@@MODEL.label}">
16
+ <Title level="H3" text="{headerFacet>@@MODEL.label}" class="sapUiSmallMarginBottom" />
17
+ </template:if>
18
+ <template:with path="headerFacet>Target/$AnnotationPath" var="contact">
19
+ <template:with path="headerFacet>Target/$AnnotationPath@@COMMON.getMetaPath" var="contactPath">
20
+ <macro:Contact contact="{contact>}" visible="true" />
21
+ </template:with>
22
+ </template:with>
23
+ </VBox>
24
+ </template:with>
25
+ </template:with>
26
+ </core:FragmentDefinition>
@@ -13,7 +13,7 @@
13
13
  >
14
14
  <VBox id="{= ${converterHeaderFacet>headerFormData/id} }" displayInline="true">
15
15
  <template:if test="{converterHeaderFacet>headerFormData/label}">
16
- <Title text="{converterHeaderFacet>headerFormData/label}" class="sapUiSmallMarginBottom" />
16
+ <Title level="H3" text="{converterHeaderFacet>headerFormData/label}" class="sapUiSmallMarginBottom" />
17
17
  </template:if>
18
18
  <template:if test="{= OP.doesFieldGroupContainOnlyOneMultiLineDataField(${converterHeaderFacet>headerFormData/formElements})}">
19
19
  <template:then>
@@ -26,11 +26,12 @@
26
26
  dt:designtime="not-adaptable-visibility"
27
27
  id="{headerSection>id}"
28
28
  title="{headerSection>title}"
29
+ titleLevel="H3"
29
30
  visible="{headerSection>visible}"
30
31
  titleUppercase="false"
31
32
  >
32
33
  <uxap:subSections>
33
- <uxap:ObjectPageSubSection id="fe::EditableHeaderSubSection" title="{headerSection>title}">
34
+ <uxap:ObjectPageSubSection id="fe::EditableHeaderSubSection" title="{headerSection>title}" titleLevel="H4">
34
35
  <core:Fragment fragmentName="sap.fe.templates.ObjectPage.view.fragments.EditableHeaderFacet" type="XML" />
35
36
  </uxap:ObjectPageSubSection>
36
37
  </uxap:subSections>
@@ -43,6 +44,7 @@
43
44
  dt:designtime="not-adaptable-visibility"
44
45
  id="{section>id}"
45
46
  title="{section>title}"
47
+ titleLevel="H3"
46
48
  showTitle="{section>showTitle}"
47
49
  titleUppercase="false"
48
50
  visible="{section>visible}"
@@ -53,6 +55,7 @@
53
55
  dt:designtime="not-adaptable-visibility"
54
56
  id="{subSection>id}"
55
57
  title="{subSection>title}"
58
+ titleLevel="H4"
56
59
  showTitle="{subSection>showTitle}"
57
60
  visible="{subSection>visible}"
58
61
  >
@@ -103,7 +103,7 @@
103
103
  <!-- Button "Show More / Less" is displayed for a collection facets that contains at least one reference facets with annotation "PartOfPreview === TRUE" -->
104
104
  <uxap:moreBlocks>
105
105
  <template:if test="{= ${subSection>level} === 2}">
106
- <Title text="{subSection>title}" />
106
+ <Title level="{= ${section>subSections}.length > 1 ? 'H5' : 'H4'}" text="{subSection>title}" />
107
107
  </template:if>
108
108
  <opcontrol:SubSectionBlock>
109
109
  <opcontrol:content>
@@ -144,7 +144,11 @@
144
144
  <template:elseif test="{= ${subSection>type} === 'DataVisualization'}">
145
145
  <uxap:blocks>
146
146
  <template:if test="{= ${subSection>level} === 2}">
147
- <Title text="{subSection>title}" visible="{subSection>titleVisible}" />
147
+ <Title
148
+ level="{= ${section>subSections}.length > 1 ? 'H5' : 'H4'}"
149
+ text="{subSection>title}"
150
+ visible="{subSection>titleVisible}"
151
+ />
148
152
  </template:if>
149
153
  <opcontrol:SubSectionBlock visible="{subSection>visible}">
150
154
  <opcontrol:content>
@@ -15,5 +15,6 @@
15
15
  partOfPreview="true"
16
16
  formContainers="{subSection>formDefinition/formContainers}"
17
17
  isVisible="{subSection>formDefinition/isVisible}"
18
+ titleLevel="{= ${section>subSections}.length > 1 ? 'H5' : 'H4'}"
18
19
  />
19
20
  </core:FragmentDefinition>
@@ -15,5 +15,6 @@
15
15
  partOfPreview="false"
16
16
  formContainers="{subSection>formDefinition/formContainers}"
17
17
  isVisible="{subSection>formDefinition/isVisible}"
18
+ titleLevel="{= ${section>subSections}.length > 1 ? (${subSection>level} === 2 ? 'H6': 'H5') : (${subSection>level} === 2 ? 'H5': 'H4')}"
18
19
  />
19
20
  </core:FragmentDefinition>