@sapui5/sap.fe.core 1.97.0 → 1.100.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (306) hide show
  1. package/package.json +7 -4
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +309 -405
  4. package/src/sap/fe/core/AnnotationHelper.ts +315 -0
  5. package/src/sap/fe/core/AppComponent.js +389 -397
  6. package/src/sap/fe/core/AppComponent.ts +403 -0
  7. package/src/sap/fe/core/AppStateHandler.js +198 -181
  8. package/src/sap/fe/core/AppStateHandler.ts +171 -0
  9. package/src/sap/fe/core/BaseController.js +83 -58
  10. package/src/sap/fe/core/BaseController.ts +68 -0
  11. package/src/sap/fe/core/BusyLocker.js +105 -121
  12. package/src/sap/fe/core/BusyLocker.ts +98 -0
  13. package/src/sap/fe/core/CommonUtils.js +2164 -2379
  14. package/src/sap/fe/core/CommonUtils.ts +2177 -0
  15. package/src/sap/fe/core/ExtensionAPI.js +279 -266
  16. package/src/sap/fe/core/ExtensionAPI.ts +250 -0
  17. package/src/sap/fe/core/PageController.js +218 -125
  18. package/src/sap/fe/core/PageController.ts +129 -0
  19. package/src/sap/fe/core/RouterProxy.js +924 -807
  20. package/src/sap/fe/core/RouterProxy.ts +840 -0
  21. package/src/sap/fe/core/Synchronization.js +41 -35
  22. package/src/sap/fe/core/Synchronization.ts +29 -0
  23. package/src/sap/fe/core/TemplateComponent.js +173 -155
  24. package/src/sap/fe/core/TemplateComponent.ts +173 -0
  25. package/src/sap/fe/core/TemplateModel.js +79 -54
  26. package/src/sap/fe/core/TemplateModel.ts +63 -0
  27. package/src/sap/fe/core/TransactionHelper.js +1560 -1579
  28. package/src/sap/fe/core/TransactionHelper.ts +1717 -0
  29. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +392 -0
  30. package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
  31. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +136 -0
  32. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
  33. package/src/sap/fe/core/actions/collaboration/Manage.js +262 -0
  34. package/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
  35. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
  36. package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  37. package/src/sap/fe/core/actions/draft.js +521 -581
  38. package/src/sap/fe/core/actions/draft.ts +566 -0
  39. package/src/sap/fe/core/actions/messageHandling.js +564 -511
  40. package/src/sap/fe/core/actions/messageHandling.ts +552 -0
  41. package/src/sap/fe/core/actions/nonDraft.js +17 -19
  42. package/src/sap/fe/core/actions/nonDraft.ts +12 -0
  43. package/src/sap/fe/core/actions/operations.js +1093 -1211
  44. package/src/sap/fe/core/actions/operations.ts +1192 -0
  45. package/src/sap/fe/core/actions/sticky.js +114 -104
  46. package/src/sap/fe/core/actions/sticky.ts +119 -0
  47. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +70 -66
  48. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
  49. package/src/sap/fe/core/controllerextensions/EditFlow.js +1594 -1701
  50. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
  51. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +80 -54
  52. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
  53. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +719 -505
  54. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
  55. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +797 -813
  56. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
  57. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1005 -973
  58. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
  59. package/src/sap/fe/core/controllerextensions/KPIManagement.js +530 -476
  60. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +137 -46
  61. package/src/sap/fe/core/controllerextensions/MassEdit.js +144 -0
  62. package/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
  63. package/src/sap/fe/core/controllerextensions/MessageHandler.js +234 -232
  64. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
  65. package/src/sap/fe/core/controllerextensions/PageReady.js +302 -337
  66. package/src/sap/fe/core/controllerextensions/PageReady.ts +23 -17
  67. package/src/sap/fe/core/controllerextensions/Paginator.js +189 -148
  68. package/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
  69. package/src/sap/fe/core/controllerextensions/Placeholder.js +158 -146
  70. package/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
  71. package/src/sap/fe/core/controllerextensions/Routing.js +145 -106
  72. package/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
  73. package/src/sap/fe/core/controllerextensions/RoutingListener.js +8 -6
  74. package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  75. package/src/sap/fe/core/controllerextensions/Share.js +220 -244
  76. package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  77. package/src/sap/fe/core/controllerextensions/SideEffects.js +593 -634
  78. package/src/sap/fe/core/controllerextensions/SideEffects.ts +29 -27
  79. package/src/sap/fe/core/controllerextensions/ViewState.js +789 -806
  80. package/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
  81. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +4 -3
  82. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  83. package/src/sap/fe/core/controls/CommandExecution.js +68 -66
  84. package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  85. package/src/sap/fe/core/controls/ConditionalWrapper.js +91 -75
  86. package/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
  87. package/src/sap/fe/core/controls/CustomQuickViewPage.js +131 -125
  88. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
  89. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +105 -110
  90. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
  91. package/src/sap/fe/core/controls/FieldWrapper.js +122 -140
  92. package/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
  93. package/src/sap/fe/core/controls/FilterBar.js +163 -159
  94. package/src/sap/fe/core/controls/FilterBar.ts +143 -0
  95. package/src/sap/fe/core/controls/FormElementWrapper.js +46 -44
  96. package/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
  97. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +38 -42
  98. package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  99. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +2 -1
  100. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +127 -116
  101. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
  102. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -255
  103. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
  104. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +151 -141
  105. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  106. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +336 -322
  107. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  108. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
  109. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +79 -0
  110. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
  111. package/src/sap/fe/core/converters/ConverterContext.js +348 -367
  112. package/src/sap/fe/core/converters/ConverterContext.ts +33 -19
  113. package/src/sap/fe/core/converters/ManifestSettings.js +12 -1
  114. package/src/sap/fe/core/converters/ManifestSettings.ts +16 -1
  115. package/src/sap/fe/core/converters/ManifestWrapper.js +354 -354
  116. package/src/sap/fe/core/converters/ManifestWrapper.ts +34 -6
  117. package/src/sap/fe/core/converters/MetaModelConverter.js +72 -9
  118. package/src/sap/fe/core/converters/MetaModelConverter.ts +75 -16
  119. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  120. package/src/sap/fe/core/converters/TemplateConverter.ts +4 -3
  121. package/src/sap/fe/core/converters/annotations/DataField.js +28 -14
  122. package/src/sap/fe/core/converters/annotations/DataField.ts +38 -14
  123. package/src/sap/fe/core/converters/common/AnnotationConverter.js +33 -21
  124. package/src/sap/fe/core/converters/controls/Common/Action.js +11 -2
  125. package/src/sap/fe/core/converters/controls/Common/Action.ts +8 -2
  126. package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
  127. package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
  128. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
  129. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
  130. package/src/sap/fe/core/converters/controls/Common/Form.js +21 -11
  131. package/src/sap/fe/core/converters/controls/Common/Form.ts +28 -6
  132. package/src/sap/fe/core/converters/controls/Common/KPI.js +69 -4
  133. package/src/sap/fe/core/converters/controls/Common/KPI.ts +75 -2
  134. package/src/sap/fe/core/converters/controls/Common/Table.js +507 -408
  135. package/src/sap/fe/core/converters/controls/Common/Table.ts +618 -500
  136. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +592 -0
  137. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +718 -0
  138. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +465 -59
  139. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +462 -72
  140. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
  141. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
  142. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -9
  143. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +24 -9
  144. package/src/sap/fe/core/converters/helpers/Aggregation.js +118 -121
  145. package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -5
  146. package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
  147. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  148. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
  149. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  150. package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -1
  151. package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -0
  152. package/src/sap/fe/core/converters/helpers/Key.js +42 -57
  153. package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  154. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +28 -7
  155. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +23 -6
  156. package/src/sap/fe/core/converters/templates/ListReportConverter.js +20 -7
  157. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +36 -14
  158. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +7 -5
  159. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
  160. package/src/sap/fe/core/designtime/AppComponent.designtime.js +93 -90
  161. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  162. package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
  163. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  164. package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
  165. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
  166. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  167. package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
  168. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
  169. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
  170. package/src/sap/fe/core/formatters/TableFormatter.js +91 -29
  171. package/src/sap/fe/core/formatters/TableFormatter.ts +94 -28
  172. package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
  173. package/src/sap/fe/core/formatters/ValueFormatter.ts +30 -7
  174. package/src/sap/fe/core/fpm/Component.js +51 -54
  175. package/src/sap/fe/core/fpm/Component.ts +48 -0
  176. package/src/sap/fe/core/helpers/AppStartupHelper.js +373 -0
  177. package/src/sap/fe/core/helpers/AppStartupHelper.ts +417 -0
  178. package/src/sap/fe/core/helpers/BindingExpression.js +489 -442
  179. package/src/sap/fe/core/helpers/BindingExpression.ts +486 -469
  180. package/src/sap/fe/core/helpers/ClassSupport.js +212 -76
  181. package/src/sap/fe/core/helpers/ClassSupport.ts +198 -71
  182. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +64 -59
  183. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +52 -0
  184. package/src/sap/fe/core/helpers/EditState.js +81 -84
  185. package/src/sap/fe/core/helpers/EditState.ts +81 -0
  186. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
  187. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
  188. package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
  189. package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
  190. package/src/sap/fe/core/helpers/KeepAliveHelper.js +4 -5
  191. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +10 -10
  192. package/src/sap/fe/core/helpers/MassEditHelper.js +604 -0
  193. package/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
  194. package/src/sap/fe/core/helpers/ModelHelper.js +253 -225
  195. package/src/sap/fe/core/helpers/ModelHelper.ts +250 -0
  196. package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
  197. package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
  198. package/src/sap/fe/core/helpers/SemanticDateOperators.js +336 -313
  199. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +334 -0
  200. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
  201. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
  202. package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
  203. package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
  204. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  205. package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
  206. package/src/sap/fe/core/library.js +427 -425
  207. package/src/sap/fe/core/library.support.js +23 -27
  208. package/src/sap/fe/core/library.support.ts +23 -0
  209. package/src/sap/fe/core/library.ts +420 -0
  210. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +64 -0
  211. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +69 -0
  212. package/src/sap/fe/core/messagebundle.properties +78 -13
  213. package/src/sap/fe/core/messagebundle_ar.properties +58 -7
  214. package/src/sap/fe/core/messagebundle_bg.properties +58 -7
  215. package/src/sap/fe/core/messagebundle_ca.properties +58 -7
  216. package/src/sap/fe/core/messagebundle_cs.properties +59 -8
  217. package/src/sap/fe/core/messagebundle_cy.properties +58 -7
  218. package/src/sap/fe/core/messagebundle_da.properties +58 -7
  219. package/src/sap/fe/core/messagebundle_de.properties +58 -7
  220. package/src/sap/fe/core/messagebundle_el.properties +58 -7
  221. package/src/sap/fe/core/messagebundle_en.properties +57 -6
  222. package/src/sap/fe/core/messagebundle_en_GB.properties +57 -6
  223. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +61 -6
  224. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +58 -7
  225. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +58 -7
  226. package/src/sap/fe/core/messagebundle_es.properties +58 -7
  227. package/src/sap/fe/core/messagebundle_es_MX.properties +58 -7
  228. package/src/sap/fe/core/messagebundle_et.properties +58 -7
  229. package/src/sap/fe/core/messagebundle_fi.properties +60 -9
  230. package/src/sap/fe/core/messagebundle_fr.properties +64 -13
  231. package/src/sap/fe/core/messagebundle_fr_CA.properties +59 -8
  232. package/src/sap/fe/core/messagebundle_hi.properties +58 -7
  233. package/src/sap/fe/core/messagebundle_hr.properties +58 -7
  234. package/src/sap/fe/core/messagebundle_hu.properties +59 -8
  235. package/src/sap/fe/core/messagebundle_id.properties +61 -10
  236. package/src/sap/fe/core/messagebundle_it.properties +58 -7
  237. package/src/sap/fe/core/messagebundle_iw.properties +58 -7
  238. package/src/sap/fe/core/messagebundle_ja.properties +58 -7
  239. package/src/sap/fe/core/messagebundle_kk.properties +58 -7
  240. package/src/sap/fe/core/messagebundle_ko.properties +58 -7
  241. package/src/sap/fe/core/messagebundle_lt.properties +58 -7
  242. package/src/sap/fe/core/messagebundle_lv.properties +59 -8
  243. package/src/sap/fe/core/messagebundle_ms.properties +58 -7
  244. package/src/sap/fe/core/messagebundle_nl.properties +58 -7
  245. package/src/sap/fe/core/messagebundle_no.properties +58 -7
  246. package/src/sap/fe/core/messagebundle_pl.properties +58 -7
  247. package/src/sap/fe/core/messagebundle_pt.properties +59 -8
  248. package/src/sap/fe/core/messagebundle_pt_PT.properties +58 -7
  249. package/src/sap/fe/core/messagebundle_ro.properties +58 -7
  250. package/src/sap/fe/core/messagebundle_ru.properties +58 -7
  251. package/src/sap/fe/core/messagebundle_sh.properties +58 -7
  252. package/src/sap/fe/core/messagebundle_sk.properties +58 -7
  253. package/src/sap/fe/core/messagebundle_sl.properties +58 -7
  254. package/src/sap/fe/core/messagebundle_sv.properties +59 -8
  255. package/src/sap/fe/core/messagebundle_th.properties +58 -7
  256. package/src/sap/fe/core/messagebundle_tr.properties +60 -9
  257. package/src/sap/fe/core/messagebundle_uk.properties +58 -7
  258. package/src/sap/fe/core/messagebundle_vi.properties +58 -7
  259. package/src/sap/fe/core/messagebundle_zh_CN.properties +58 -7
  260. package/src/sap/fe/core/messagebundle_zh_TW.properties +58 -7
  261. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +45 -71
  262. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
  263. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +231 -202
  264. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
  265. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +67 -92
  266. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +10 -6
  267. package/src/sap/fe/core/services/NavigationServiceFactory.js +351 -300
  268. package/src/sap/fe/core/services/NavigationServiceFactory.ts +313 -0
  269. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +114 -81
  270. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +83 -0
  271. package/src/sap/fe/core/services/RoutingServiceFactory.js +927 -1152
  272. package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
  273. package/src/sap/fe/core/services/ShellServicesFactory.js +649 -707
  274. package/src/sap/fe/core/services/ShellServicesFactory.ts +52 -15
  275. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +569 -637
  276. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +78 -102
  277. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +429 -478
  278. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +460 -0
  279. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
  280. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
  281. package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
  282. package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
  283. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
  284. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
  285. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  286. package/src/sap/fe/core/support/CommonHelper.ts +1 -1
  287. package/src/sap/fe/core/support/Diagnostics.js +36 -48
  288. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
  289. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
  290. package/src/sap/fe/core/templating/DataModelPathHelper.js +97 -127
  291. package/src/sap/fe/core/templating/DataModelPathHelper.ts +112 -135
  292. package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
  293. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
  294. package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
  295. package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
  296. package/src/sap/fe/core/templating/FilterHelper.js +140 -78
  297. package/src/sap/fe/core/templating/FilterHelper.ts +149 -78
  298. package/src/sap/fe/core/templating/PropertyHelper.js +3 -3
  299. package/src/sap/fe/core/templating/PropertyHelper.ts +2 -2
  300. package/src/sap/fe/core/templating/UIFormatters.js +76 -135
  301. package/src/sap/fe/core/templating/UIFormatters.ts +76 -99
  302. package/src/sap/fe/core/type/Email.js +1 -1
  303. package/src/sap/fe/core/type/Email.ts +4 -6
  304. package/ui5.yaml +0 -3
  305. package/src/sap/fe/core/controls/filterbar.d.js +0 -8
  306. package/src/sap/fe/core/controls/filterbar.d.ts +0 -0
@@ -7,12 +7,6 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
7
7
 
8
8
  var VariantManagementType = ManifestSettings.VariantManagementType;
9
9
 
10
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
11
-
12
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
13
-
14
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
15
-
16
10
  /**
17
11
  *
18
12
  */
@@ -25,8 +19,6 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
25
19
  * @returns {ManifestWrapper} The manifest wrapper object
26
20
  */
27
21
  function ManifestWrapper(oManifestSettings, mergeFn) {
28
- _classCallCheck(this, ManifestWrapper);
29
-
30
22
  this.oManifestSettings = oManifestSettings;
31
23
  this.mergeFn = mergeFn;
32
24
  }
@@ -37,368 +29,376 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
37
29
  */
38
30
 
39
31
 
40
- _createClass(ManifestWrapper, [{
41
- key: "getTemplateType",
42
- value: function getTemplateType() {
43
- return this.oManifestSettings.converterType;
44
- }
45
- /**
46
- * Checks whether the current environment is a desktop or not.
47
- *
48
- * @returns {boolean} `true` if we are on a desktop
49
- */
50
-
51
- }, {
52
- key: "isDesktop",
53
- value: function isDesktop() {
54
- return !!this.oManifestSettings.isDesktop;
55
- }
56
- /**
57
- * Retrieves the form containers (field groups/identification) defined in the manifest.
58
- *
59
- * @param {string} facetTarget The target annotation path for this form
60
- * @returns {FormManifestConfiguration} A set of manifest header facets indexed by an iterable key
61
- */
62
-
63
- }, {
64
- key: "getFormContainer",
65
- value: function getFormContainer(facetTarget) {
66
- var _this$oManifestSettin;
67
-
68
- return (_this$oManifestSettin = this.oManifestSettings.controlConfiguration) === null || _this$oManifestSettin === void 0 ? void 0 : _this$oManifestSettin[facetTarget];
69
- }
70
- /**
71
- * Retrieves the headerFacets defined in the manifest.
72
- *
73
- * @returns {ConfigurableRecord<ManifestHeaderFacet>} A set of manifest header facets indexed by an iterable key
74
- */
75
-
76
- }, {
77
- key: "getHeaderFacets",
78
- value: function getHeaderFacets() {
79
- var _this$oManifestSettin2, _this$oManifestSettin3, _content, _content$header;
80
-
81
- return this.mergeFn({}, (_this$oManifestSettin2 = this.oManifestSettings.controlConfiguration) === null || _this$oManifestSettin2 === void 0 ? void 0 : (_this$oManifestSettin3 = _this$oManifestSettin2["@com.sap.vocabularies.UI.v1.HeaderFacets"]) === null || _this$oManifestSettin3 === void 0 ? void 0 : _this$oManifestSettin3.facets, (_content = this.oManifestSettings.content) === null || _content === void 0 ? void 0 : (_content$header = _content.header) === null || _content$header === void 0 ? void 0 : _content$header.facets);
82
- }
83
- /**
84
- * Retrieves the header actions defined in the manifest.
85
- *
86
- * @returns {ConfigurableRecord<ManifestAction>} A set of manifest actions indexed by an iterable key
87
- */
88
-
89
- }, {
90
- key: "getHeaderActions",
91
- value: function getHeaderActions() {
92
- var _this$oManifestSettin4, _this$oManifestSettin5;
93
-
94
- return ((_this$oManifestSettin4 = this.oManifestSettings.content) === null || _this$oManifestSettin4 === void 0 ? void 0 : (_this$oManifestSettin5 = _this$oManifestSettin4.header) === null || _this$oManifestSettin5 === void 0 ? void 0 : _this$oManifestSettin5.actions) || {};
95
- }
96
- /**
97
- * Retrieves the footer actions defined in the manifest.
98
- *
99
- * @returns {ConfigurableRecord<ManifestAction>} A set of manifest actions indexed by an iterable key
100
- */
101
-
102
- }, {
103
- key: "getFooterActions",
104
- value: function getFooterActions() {
105
- var _this$oManifestSettin6, _this$oManifestSettin7;
106
-
107
- return ((_this$oManifestSettin6 = this.oManifestSettings.content) === null || _this$oManifestSettin6 === void 0 ? void 0 : (_this$oManifestSettin7 = _this$oManifestSettin6.footer) === null || _this$oManifestSettin7 === void 0 ? void 0 : _this$oManifestSettin7.actions) || {};
108
- }
109
- /**
110
- * Retrieves the variant management as defined in the manifest.
111
- *
112
- * @returns {VariantManagementType} A type of variant management
113
- */
114
-
115
- }, {
116
- key: "getVariantManagement",
117
- value: function getVariantManagement() {
118
- return this.oManifestSettings.variantManagement || VariantManagementType.None;
119
- }
120
- /**
121
- * Retrieves the annotation Path for the SPV in the manifest.
122
- *
123
- * @returns {string|undefined} The annotation path for the default SPV or undefined.
124
- */
125
-
126
- }, {
127
- key: "getDefaultTemplateAnnotationPath",
128
- value: function getDefaultTemplateAnnotationPath() {
129
- return this.oManifestSettings.defaultTemplateAnnotationPath;
130
- }
131
- /**
132
- * Retrieves the control configuration as defined in the manifest for a specific annotation path.
133
- *
134
- * @param {string} sAnnotationPath The relative annotation path
135
- * @private
136
- * @returns {object} The control configuration
137
- */
138
-
139
- }, {
140
- key: "getControlConfiguration",
141
- value: function getControlConfiguration(sAnnotationPath) {
142
- var _this$oManifestSettin8, _this$oManifestSettin9;
143
-
144
- return ((_this$oManifestSettin8 = this.oManifestSettings) === null || _this$oManifestSettin8 === void 0 ? void 0 : (_this$oManifestSettin9 = _this$oManifestSettin8.controlConfiguration) === null || _this$oManifestSettin9 === void 0 ? void 0 : _this$oManifestSettin9[sAnnotationPath]) || {};
145
- }
146
- /**
147
- * Retrieves the configured settings for a given navigation target.
148
- *
149
- * @param {string} navigationOrCollectionName The name of the navigation to check
150
- * @returns {NavigationSettingsConfiguration} The navigation settings configuration
151
- */
152
-
153
- }, {
154
- key: "getNavigationConfiguration",
155
- value: function getNavigationConfiguration(navigationOrCollectionName) {
156
- var _this$oManifestSettin10, _this$oManifestSettin11;
157
-
158
- return ((_this$oManifestSettin10 = this.oManifestSettings) === null || _this$oManifestSettin10 === void 0 ? void 0 : (_this$oManifestSettin11 = _this$oManifestSettin10.navigation) === null || _this$oManifestSettin11 === void 0 ? void 0 : _this$oManifestSettin11[navigationOrCollectionName]) || {};
159
- }
160
- /**
161
- * Retrieves the view level.
162
- *
163
- * @returns {number} The current view level
164
- */
165
-
166
- }, {
167
- key: "getViewLevel",
168
- value: function getViewLevel() {
169
- var _this$oManifestSettin12;
170
-
171
- return ((_this$oManifestSettin12 = this.oManifestSettings) === null || _this$oManifestSettin12 === void 0 ? void 0 : _this$oManifestSettin12.viewLevel) || -1;
172
- }
173
- /**
174
- * Retrieves the contentDensities setting of the application.
175
- *
176
- * @returns {ContentDensitiesType} The current content density
177
- */
178
-
179
- }, {
180
- key: "getContentDensities",
181
- value: function getContentDensities() {
182
- var _this$oManifestSettin13;
183
-
184
- return ((_this$oManifestSettin13 = this.oManifestSettings) === null || _this$oManifestSettin13 === void 0 ? void 0 : _this$oManifestSettin13.contentDensities) || {
185
- cozy: false,
186
- compact: false
187
- };
188
- }
189
- /**
190
- * Checks whether we are in FCL mode or not.
191
- *
192
- * @returns {boolean} `true` if we are in FCL
193
- */
194
-
195
- }, {
196
- key: "isFclEnabled",
197
- value: function isFclEnabled() {
198
- var _this$oManifestSettin14;
199
-
200
- return !!((_this$oManifestSettin14 = this.oManifestSettings) !== null && _this$oManifestSettin14 !== void 0 && _this$oManifestSettin14.fclEnabled);
201
- }
202
- /**
203
- * Checks whether the current settings (application / shell) allows us to use condensed layout.
204
- *
205
- * @returns {boolean} `true` if we can use the condensed layout, false otherwise
206
- */
207
-
208
- }, {
209
- key: "isCondensedLayoutCompliant",
210
- value: function isCondensedLayoutCompliant() {
211
- var _this$oManifestSettin15, _this$oManifestSettin16;
212
-
213
- var manifestContentDensity = ((_this$oManifestSettin15 = this.oManifestSettings) === null || _this$oManifestSettin15 === void 0 ? void 0 : _this$oManifestSettin15.contentDensities) || {
214
- cozy: false,
215
- compact: false
216
- };
217
- var shellContentDensity = ((_this$oManifestSettin16 = this.oManifestSettings) === null || _this$oManifestSettin16 === void 0 ? void 0 : _this$oManifestSettin16.shellContentDensity) || "compact";
218
- var isCondensedLayoutCompliant = true;
32
+ var _proto = ManifestWrapper.prototype;
219
33
 
220
- if ((manifestContentDensity === null || manifestContentDensity === void 0 ? void 0 : manifestContentDensity.cozy) === true && (manifestContentDensity === null || manifestContentDensity === void 0 ? void 0 : manifestContentDensity.compact) !== true || shellContentDensity === "cozy") {
221
- isCondensedLayoutCompliant = false;
222
- }
34
+ _proto.getTemplateType = function getTemplateType() {
35
+ return this.oManifestSettings.converterType;
36
+ }
37
+ /**
38
+ * Checks whether the current template should display the filter bar.
39
+ *
40
+ * @returns {boolean} `true` if the filter bar should be hidden
41
+ */
42
+ ;
223
43
 
224
- return isCondensedLayoutCompliant;
225
- } //region OP Specific
44
+ _proto.isFilterBarHidden = function isFilterBarHidden() {
45
+ var _this$oManifestSettin;
226
46
 
227
- /**
228
- * Retrieves the sections defined in the manifest.
229
- *
230
- * @returns {ConfigurableRecord<ManifestSection>} A set of manifest sections indexed by an iterable key
231
- */
47
+ return !!((_this$oManifestSettin = this.oManifestSettings) !== null && _this$oManifestSettin !== void 0 && _this$oManifestSettin.hideFilterBar);
48
+ }
49
+ /**
50
+ * Checks whether the current environment is a desktop or not.
51
+ *
52
+ * @returns {boolean} `true` if we are on a desktop
53
+ */
54
+ ;
232
55
 
233
- }, {
234
- key: "getSections",
235
- value: function getSections() {
236
- var _this$oManifestSettin17, _this$oManifestSettin18, _content2, _content2$body;
56
+ _proto.isDesktop = function isDesktop() {
57
+ return !!this.oManifestSettings.isDesktop;
58
+ }
59
+ /**
60
+ * Checks whether the current environment is a mobile phone or not.
61
+ *
62
+ * @returns {boolean} `true` if we are on a mobile phone
63
+ */
64
+ ;
237
65
 
238
- return this.mergeFn({}, (_this$oManifestSettin17 = this.oManifestSettings.controlConfiguration) === null || _this$oManifestSettin17 === void 0 ? void 0 : (_this$oManifestSettin18 = _this$oManifestSettin17["@com.sap.vocabularies.UI.v1.Facets"]) === null || _this$oManifestSettin18 === void 0 ? void 0 : _this$oManifestSettin18.sections, (_content2 = this.oManifestSettings.content) === null || _content2 === void 0 ? void 0 : (_content2$body = _content2.body) === null || _content2$body === void 0 ? void 0 : _content2$body.sections);
239
- }
240
- /**
241
- * Returns true of the header of the application is editable and should appear in the facets.
242
- *
243
- * @returns {boolean} `true` if the header if editable
244
- */
245
-
246
- }, {
247
- key: "isHeaderEditable",
248
- value: function isHeaderEditable() {
249
- return this.getShowObjectPageHeader() && this.oManifestSettings.editableHeaderContent;
250
- }
251
- /**
252
- * Returns true if we should show the object page header.
253
- *
254
- * @returns {boolean} `true` if the header should be displayed
255
- */
256
-
257
- }, {
258
- key: "getShowAnchorBar",
259
- value: function getShowAnchorBar() {
260
- var _content3, _content3$header, _content4, _content4$header;
261
-
262
- return ((_content3 = this.oManifestSettings.content) === null || _content3 === void 0 ? void 0 : (_content3$header = _content3.header) === null || _content3$header === void 0 ? void 0 : _content3$header.anchorBarVisible) !== undefined ? !!((_content4 = this.oManifestSettings.content) !== null && _content4 !== void 0 && (_content4$header = _content4.header) !== null && _content4$header !== void 0 && _content4$header.anchorBarVisible) : true;
263
- }
264
- /**
265
- * Defines whether or not the section will be displayed in different tabs.
266
- *
267
- * @returns {boolean} `true` if the icon tab bar should be used instead of scrolling
268
- */
269
-
270
- }, {
271
- key: "useIconTabBar",
272
- value: function useIconTabBar() {
273
- return this.getShowAnchorBar() && this.oManifestSettings.sectionLayout === "Tabs";
274
- }
275
- /**
276
- * Returns true if the object page header is to be shown.
277
- *
278
- * @returns {boolean} `true` if the object page header is to be displayed
279
- */
280
-
281
- }, {
282
- key: "getShowObjectPageHeader",
283
- value: function getShowObjectPageHeader() {
284
- var _content5, _content5$header, _content6, _content6$header;
285
-
286
- return ((_content5 = this.oManifestSettings.content) === null || _content5 === void 0 ? void 0 : (_content5$header = _content5.header) === null || _content5$header === void 0 ? void 0 : _content5$header.visible) !== undefined ? !!((_content6 = this.oManifestSettings.content) !== null && _content6 !== void 0 && (_content6$header = _content6.header) !== null && _content6$header !== void 0 && _content6$header.visible) : true;
287
- } //endregion OP Specific
288
- //region LR Specific
289
-
290
- /**
291
- * Retrieves the multiple view configuration from the manifest.
292
- *
293
- * @returns {MultipleViewsConfiguration} The views that represent the manifest object
294
- */
295
-
296
- }, {
297
- key: "getViewConfiguration",
298
- value: function getViewConfiguration() {
299
- return this.oManifestSettings.views;
300
- }
301
- /**
302
- * Retrieves the KPI configuration from the manifest.
303
- *
304
- * @returns {object} Returns a map between KPI names and their respective configuration
305
- */
306
-
307
- }, {
308
- key: "getKPIConfiguration",
309
- value: function getKPIConfiguration() {
310
- return this.oManifestSettings.keyPerformanceIndicators || {};
311
- }
312
- /**
313
- * Retrieves the filter configuration from the manifest.
314
- *
315
- * @returns {FilterManifestConfiguration} The filter configuration from the manifest
316
- */
317
-
318
- }, {
319
- key: "getFilterConfiguration",
320
- value: function getFilterConfiguration() {
321
- return this.getControlConfiguration("@com.sap.vocabularies.UI.v1.SelectionFields");
66
+ _proto.isPhone = function isPhone() {
67
+ return !!this.oManifestSettings.isPhone;
68
+ }
69
+ /**
70
+ * Retrieves the form containers (field groups or identification) defined in the manifest.
71
+ *
72
+ * @param {string} facetTarget The target annotation path for this form
73
+ * @returns {FormManifestConfiguration} A set of form containers defined in the manifest indexed by an iterable key
74
+ */
75
+ ;
76
+
77
+ _proto.getFormContainer = function getFormContainer(facetTarget) {
78
+ var _this$oManifestSettin2;
79
+
80
+ return (_this$oManifestSettin2 = this.oManifestSettings.controlConfiguration) === null || _this$oManifestSettin2 === void 0 ? void 0 : _this$oManifestSettin2[facetTarget];
81
+ }
82
+ /**
83
+ * Retrieves the header facets defined in the manifest.
84
+ *
85
+ * @returns {ConfigurableRecord<ManifestHeaderFacet>} A set of header facets defined in the manifest indexed by an iterable key
86
+ */
87
+ ;
88
+
89
+ _proto.getHeaderFacets = function getHeaderFacets() {
90
+ var _this$oManifestSettin3, _this$oManifestSettin4, _content, _content$header;
91
+
92
+ return this.mergeFn({}, (_this$oManifestSettin3 = this.oManifestSettings.controlConfiguration) === null || _this$oManifestSettin3 === void 0 ? void 0 : (_this$oManifestSettin4 = _this$oManifestSettin3["@com.sap.vocabularies.UI.v1.HeaderFacets"]) === null || _this$oManifestSettin4 === void 0 ? void 0 : _this$oManifestSettin4.facets, (_content = this.oManifestSettings.content) === null || _content === void 0 ? void 0 : (_content$header = _content.header) === null || _content$header === void 0 ? void 0 : _content$header.facets);
93
+ }
94
+ /**
95
+ * Retrieves the header actions defined in the manifest.
96
+ *
97
+ * @returns {ConfigurableRecord<ManifestAction>} A set of actions defined in the manifest indexed by an iterable key
98
+ */
99
+ ;
100
+
101
+ _proto.getHeaderActions = function getHeaderActions() {
102
+ var _this$oManifestSettin5, _this$oManifestSettin6;
103
+
104
+ return ((_this$oManifestSettin5 = this.oManifestSettings.content) === null || _this$oManifestSettin5 === void 0 ? void 0 : (_this$oManifestSettin6 = _this$oManifestSettin5.header) === null || _this$oManifestSettin6 === void 0 ? void 0 : _this$oManifestSettin6.actions) || {};
105
+ }
106
+ /**
107
+ * Retrieves the footer actions defined in the manifest.
108
+ *
109
+ * @returns {ConfigurableRecord<ManifestAction>} A set of actions defined in the manifest indexed by an iterable key
110
+ */
111
+ ;
112
+
113
+ _proto.getFooterActions = function getFooterActions() {
114
+ var _this$oManifestSettin7, _this$oManifestSettin8;
115
+
116
+ return ((_this$oManifestSettin7 = this.oManifestSettings.content) === null || _this$oManifestSettin7 === void 0 ? void 0 : (_this$oManifestSettin8 = _this$oManifestSettin7.footer) === null || _this$oManifestSettin8 === void 0 ? void 0 : _this$oManifestSettin8.actions) || {};
117
+ }
118
+ /**
119
+ * Retrieves the variant management as defined in the manifest.
120
+ *
121
+ * @returns {VariantManagementType} A type of variant management
122
+ */
123
+ ;
124
+
125
+ _proto.getVariantManagement = function getVariantManagement() {
126
+ return this.oManifestSettings.variantManagement || VariantManagementType.None;
127
+ }
128
+ /**
129
+ * Retrieves the annotation Path for the SPV in the manifest.
130
+ *
131
+ * @returns {string|undefined} The annotation path for the default SPV or undefined.
132
+ */
133
+ ;
134
+
135
+ _proto.getDefaultTemplateAnnotationPath = function getDefaultTemplateAnnotationPath() {
136
+ return this.oManifestSettings.defaultTemplateAnnotationPath;
137
+ }
138
+ /**
139
+ * Retrieves the control configuration as defined in the manifest for a specific annotation path.
140
+ *
141
+ * @param {string} sAnnotationPath The relative annotation path
142
+ * @private
143
+ * @returns {object} The control configuration
144
+ */
145
+ ;
146
+
147
+ _proto.getControlConfiguration = function getControlConfiguration(sAnnotationPath) {
148
+ var _this$oManifestSettin9, _this$oManifestSettin10;
149
+
150
+ return ((_this$oManifestSettin9 = this.oManifestSettings) === null || _this$oManifestSettin9 === void 0 ? void 0 : (_this$oManifestSettin10 = _this$oManifestSettin9.controlConfiguration) === null || _this$oManifestSettin10 === void 0 ? void 0 : _this$oManifestSettin10[sAnnotationPath]) || {};
151
+ }
152
+ /**
153
+ * Retrieves the configured settings for a given navigation target.
154
+ *
155
+ * @param {string} navigationOrCollectionName The name of the navigation to check
156
+ * @returns {NavigationSettingsConfiguration} The navigation settings configuration
157
+ */
158
+ ;
159
+
160
+ _proto.getNavigationConfiguration = function getNavigationConfiguration(navigationOrCollectionName) {
161
+ var _this$oManifestSettin11, _this$oManifestSettin12;
162
+
163
+ return ((_this$oManifestSettin11 = this.oManifestSettings) === null || _this$oManifestSettin11 === void 0 ? void 0 : (_this$oManifestSettin12 = _this$oManifestSettin11.navigation) === null || _this$oManifestSettin12 === void 0 ? void 0 : _this$oManifestSettin12[navigationOrCollectionName]) || {};
164
+ }
165
+ /**
166
+ * Retrieves the view level.
167
+ *
168
+ * @returns {number} The current view level
169
+ */
170
+ ;
171
+
172
+ _proto.getViewLevel = function getViewLevel() {
173
+ var _this$oManifestSettin13;
174
+
175
+ return ((_this$oManifestSettin13 = this.oManifestSettings) === null || _this$oManifestSettin13 === void 0 ? void 0 : _this$oManifestSettin13.viewLevel) || -1;
176
+ }
177
+ /**
178
+ * Retrieves the contentDensities setting of the application.
179
+ *
180
+ * @returns {ContentDensitiesType} The current content density
181
+ */
182
+ ;
183
+
184
+ _proto.getContentDensities = function getContentDensities() {
185
+ var _this$oManifestSettin14;
186
+
187
+ return ((_this$oManifestSettin14 = this.oManifestSettings) === null || _this$oManifestSettin14 === void 0 ? void 0 : _this$oManifestSettin14.contentDensities) || {
188
+ cozy: false,
189
+ compact: false
190
+ };
191
+ }
192
+ /**
193
+ * Checks whether we are in FCL mode or not.
194
+ *
195
+ * @returns {boolean} `true` if we are in FCL
196
+ */
197
+ ;
198
+
199
+ _proto.isFclEnabled = function isFclEnabled() {
200
+ var _this$oManifestSettin15;
201
+
202
+ return !!((_this$oManifestSettin15 = this.oManifestSettings) !== null && _this$oManifestSettin15 !== void 0 && _this$oManifestSettin15.fclEnabled);
203
+ }
204
+ /**
205
+ * Checks whether the current settings (application / shell) allows us to use condensed layout.
206
+ *
207
+ * @returns {boolean} `true` if we can use the condensed layout, false otherwise
208
+ */
209
+ ;
210
+
211
+ _proto.isCondensedLayoutCompliant = function isCondensedLayoutCompliant() {
212
+ var _this$oManifestSettin16, _this$oManifestSettin17;
213
+
214
+ var manifestContentDensity = ((_this$oManifestSettin16 = this.oManifestSettings) === null || _this$oManifestSettin16 === void 0 ? void 0 : _this$oManifestSettin16.contentDensities) || {
215
+ cozy: false,
216
+ compact: false
217
+ };
218
+ var shellContentDensity = ((_this$oManifestSettin17 = this.oManifestSettings) === null || _this$oManifestSettin17 === void 0 ? void 0 : _this$oManifestSettin17.shellContentDensity) || "compact";
219
+ var isCondensedLayoutCompliant = true;
220
+
221
+ if ((manifestContentDensity === null || manifestContentDensity === void 0 ? void 0 : manifestContentDensity.cozy) === true && (manifestContentDensity === null || manifestContentDensity === void 0 ? void 0 : manifestContentDensity.compact) !== true || shellContentDensity === "cozy") {
222
+ isCondensedLayoutCompliant = false;
322
223
  }
323
- /**
324
- * Returns true if there are multiple entity sets to be displayed.
325
- *
326
- * @returns {boolean} `true` if there are multiple entity sets
327
- */
328
224
 
329
- }, {
330
- key: "hasMultipleEntitySets",
331
- value: function hasMultipleEntitySets() {
332
- var _this = this;
225
+ return isCondensedLayoutCompliant;
226
+ } //region OP Specific
333
227
 
334
- var viewConfig = this.getViewConfiguration() || {
335
- paths: []
336
- };
337
- var manifestEntitySet = this.oManifestSettings.entitySet;
338
- return viewConfig.paths.find(function (path) {
339
- var _path;
340
-
341
- if ((_path = path) !== null && _path !== void 0 && _path.template) {
342
- return undefined;
343
- } else if (_this.hasMultipleVisualizations(path)) {
344
- var _ref = path,
345
- primary = _ref.primary,
346
- secondary = _ref.secondary;
347
- return primary.some(function (path) {
348
- return path.entitySet && path.entitySet !== manifestEntitySet;
349
- }) || secondary.some(function (path) {
350
- return path.entitySet && path.entitySet !== manifestEntitySet;
351
- });
352
- } else {
353
- path = path;
228
+ /**
229
+ * Retrieves the sections defined in the manifest.
230
+ *
231
+ * @returns {ConfigurableRecord<ManifestSection>} A set of manifest sections indexed by an iterable key
232
+ */
233
+ ;
234
+
235
+ _proto.getSections = function getSections() {
236
+ var _this$oManifestSettin18, _this$oManifestSettin19, _content2, _content2$body;
237
+
238
+ return this.mergeFn({}, (_this$oManifestSettin18 = this.oManifestSettings.controlConfiguration) === null || _this$oManifestSettin18 === void 0 ? void 0 : (_this$oManifestSettin19 = _this$oManifestSettin18["@com.sap.vocabularies.UI.v1.Facets"]) === null || _this$oManifestSettin19 === void 0 ? void 0 : _this$oManifestSettin19.sections, (_content2 = this.oManifestSettings.content) === null || _content2 === void 0 ? void 0 : (_content2$body = _content2.body) === null || _content2$body === void 0 ? void 0 : _content2$body.sections);
239
+ }
240
+ /**
241
+ * Returns true of the header of the application is editable and should appear in the facets.
242
+ *
243
+ * @returns {boolean} `true` if the header if editable
244
+ */
245
+ ;
246
+
247
+ _proto.isHeaderEditable = function isHeaderEditable() {
248
+ return this.getShowObjectPageHeader() && this.oManifestSettings.editableHeaderContent;
249
+ }
250
+ /**
251
+ * Returns true if we should show the object page header.
252
+ *
253
+ * @returns {boolean} `true` if the header should be displayed
254
+ */
255
+ ;
256
+
257
+ _proto.getShowAnchorBar = function getShowAnchorBar() {
258
+ var _content3, _content3$header, _content4, _content4$header;
259
+
260
+ return ((_content3 = this.oManifestSettings.content) === null || _content3 === void 0 ? void 0 : (_content3$header = _content3.header) === null || _content3$header === void 0 ? void 0 : _content3$header.anchorBarVisible) !== undefined ? !!((_content4 = this.oManifestSettings.content) !== null && _content4 !== void 0 && (_content4$header = _content4.header) !== null && _content4$header !== void 0 && _content4$header.anchorBarVisible) : true;
261
+ }
262
+ /**
263
+ * Defines whether or not the section will be displayed in different tabs.
264
+ *
265
+ * @returns {boolean} `true` if the icon tab bar should be used instead of scrolling
266
+ */
267
+ ;
268
+
269
+ _proto.useIconTabBar = function useIconTabBar() {
270
+ return this.getShowAnchorBar() && this.oManifestSettings.sectionLayout === "Tabs";
271
+ }
272
+ /**
273
+ * Returns true if the object page header is to be shown.
274
+ *
275
+ * @returns {boolean} `true` if the object page header is to be displayed
276
+ */
277
+ ;
278
+
279
+ _proto.getShowObjectPageHeader = function getShowObjectPageHeader() {
280
+ var _content5, _content5$header, _content6, _content6$header;
281
+
282
+ return ((_content5 = this.oManifestSettings.content) === null || _content5 === void 0 ? void 0 : (_content5$header = _content5.header) === null || _content5$header === void 0 ? void 0 : _content5$header.visible) !== undefined ? !!((_content6 = this.oManifestSettings.content) !== null && _content6 !== void 0 && (_content6$header = _content6.header) !== null && _content6$header !== void 0 && _content6$header.visible) : true;
283
+ } //endregion OP Specific
284
+ //region LR Specific
285
+
286
+ /**
287
+ * Retrieves the multiple view configuration from the manifest.
288
+ *
289
+ * @returns {MultipleViewsConfiguration} The views that represent the manifest object
290
+ */
291
+ ;
292
+
293
+ _proto.getViewConfiguration = function getViewConfiguration() {
294
+ return this.oManifestSettings.views;
295
+ }
296
+ /**
297
+ * Retrieves the stickyMultiTabHeader configuration from the manifest.
298
+ *
299
+ * @returns {boolean} Returns True if stickyMultiTabHeader is enabled or undefined
300
+ */
301
+ ;
302
+
303
+ _proto.getStickyMultiTabHeaderConfiguration = function getStickyMultiTabHeaderConfiguration() {
304
+ var bStickyMultiTabHeader = this.oManifestSettings.stickyMultiTabHeader;
305
+ return bStickyMultiTabHeader !== undefined ? bStickyMultiTabHeader : true;
306
+ }
307
+ /**
308
+ * Retrieves the KPI configuration from the manifest.
309
+ *
310
+ * @returns {object} Returns a map between KPI names and their respective configuration
311
+ */
312
+ ;
313
+
314
+ _proto.getKPIConfiguration = function getKPIConfiguration() {
315
+ return this.oManifestSettings.keyPerformanceIndicators || {};
316
+ }
317
+ /**
318
+ * Retrieves the filter configuration from the manifest.
319
+ *
320
+ * @returns {FilterManifestConfiguration} The filter configuration from the manifest
321
+ */
322
+ ;
323
+
324
+ _proto.getFilterConfiguration = function getFilterConfiguration() {
325
+ return this.getControlConfiguration("@com.sap.vocabularies.UI.v1.SelectionFields");
326
+ }
327
+ /**
328
+ * Returns true if there are multiple entity sets to be displayed.
329
+ *
330
+ * @returns {boolean} `true` if there are multiple entity sets
331
+ */
332
+ ;
333
+
334
+ _proto.hasMultipleEntitySets = function hasMultipleEntitySets() {
335
+ var _this = this;
336
+
337
+ var viewConfig = this.getViewConfiguration() || {
338
+ paths: []
339
+ };
340
+ var manifestEntitySet = this.oManifestSettings.entitySet;
341
+ return viewConfig.paths.find(function (path) {
342
+ var _path;
343
+
344
+ if ((_path = path) !== null && _path !== void 0 && _path.template) {
345
+ return undefined;
346
+ } else if (_this.hasMultipleVisualizations(path)) {
347
+ var _ref = path,
348
+ primary = _ref.primary,
349
+ secondary = _ref.secondary;
350
+ return primary.some(function (path) {
351
+ return path.entitySet && path.entitySet !== manifestEntitySet;
352
+ }) || secondary.some(function (path) {
354
353
  return path.entitySet && path.entitySet !== manifestEntitySet;
355
- }
356
- }) !== undefined;
357
- }
358
- /**
359
- * Returns the context path for the template if it is specified in the manifest.
360
- *
361
- * @returns {string} The context path for the template
362
- */
363
-
364
- }, {
365
- key: "getContextPath",
366
- value: function getContextPath() {
367
- var _this$oManifestSettin19;
368
-
369
- return (_this$oManifestSettin19 = this.oManifestSettings) === null || _this$oManifestSettin19 === void 0 ? void 0 : _this$oManifestSettin19.contextPath;
370
- }
371
- /**
372
- * Returns true if there are multiple visualizations.
373
- *
374
- * @param {ViewPathConfiguration} path The path from the view
375
- * @returns {boolean} `true` if there are multiple visualizations
376
- */
377
-
378
- }, {
379
- key: "hasMultipleVisualizations",
380
- value: function hasMultipleVisualizations(path) {
381
- var _primary2, _secondary2;
382
-
383
- if (!path) {
384
- var viewConfig = this.getViewConfiguration() || {
385
- paths: []
386
- };
387
- return viewConfig.paths.some(function (path) {
388
- var _primary, _secondary;
389
-
390
- return ((_primary = path.primary) === null || _primary === void 0 ? void 0 : _primary.length) > 0 && ((_secondary = path.secondary) === null || _secondary === void 0 ? void 0 : _secondary.length) > 0;
391
354
  });
355
+ } else {
356
+ path = path;
357
+ return path.entitySet && path.entitySet !== manifestEntitySet;
392
358
  }
359
+ }) !== undefined;
360
+ }
361
+ /**
362
+ * Returns the context path for the template if it is specified in the manifest.
363
+ *
364
+ * @returns {string} The context path for the template
365
+ */
366
+ ;
367
+
368
+ _proto.getContextPath = function getContextPath() {
369
+ var _this$oManifestSettin20;
393
370
 
394
- return ((_primary2 = path.primary) === null || _primary2 === void 0 ? void 0 : _primary2.length) > 0 && ((_secondary2 = path.secondary) === null || _secondary2 === void 0 ? void 0 : _secondary2.length) > 0;
395
- } //end region LR Specific
371
+ return (_this$oManifestSettin20 = this.oManifestSettings) === null || _this$oManifestSettin20 === void 0 ? void 0 : _this$oManifestSettin20.contextPath;
372
+ }
373
+ /**
374
+ * Returns true if there are multiple visualizations.
375
+ *
376
+ * @param {ViewPathConfiguration} path The path from the view
377
+ * @returns {boolean} `true` if there are multiple visualizations
378
+ */
379
+ ;
380
+
381
+ _proto.hasMultipleVisualizations = function hasMultipleVisualizations(path) {
382
+ var _primary2, _secondary2;
383
+
384
+ if (!path) {
385
+ var viewConfig = this.getViewConfiguration() || {
386
+ paths: []
387
+ };
388
+ return viewConfig.paths.some(function (path) {
389
+ var _primary, _secondary;
390
+
391
+ return ((_primary = path.primary) === null || _primary === void 0 ? void 0 : _primary.length) > 0 && ((_secondary = path.secondary) === null || _secondary === void 0 ? void 0 : _secondary.length) > 0;
392
+ });
393
+ }
396
394
 
397
- }]);
395
+ return ((_primary2 = path.primary) === null || _primary2 === void 0 ? void 0 : _primary2.length) > 0 && ((_secondary2 = path.secondary) === null || _secondary2 === void 0 ? void 0 : _secondary2.length) > 0;
396
+ } //end region LR Specific
397
+ ;
398
398
 
399
399
  return ManifestWrapper;
400
400
  }();
401
401
 
402
402
  return ManifestWrapper;
403
403
  }, false);
404
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1hbmlmZXN0V3JhcHBlci50cyJdLCJuYW1lcyI6WyJNYW5pZmVzdFdyYXBwZXIiLCJvTWFuaWZlc3RTZXR0aW5ncyIsIm1lcmdlRm4iLCJjb252ZXJ0ZXJUeXBlIiwiaXNEZXNrdG9wIiwiZmFjZXRUYXJnZXQiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsImZhY2V0cyIsImNvbnRlbnQiLCJoZWFkZXIiLCJhY3Rpb25zIiwiZm9vdGVyIiwidmFyaWFudE1hbmFnZW1lbnQiLCJWYXJpYW50TWFuYWdlbWVudFR5cGUiLCJOb25lIiwiZGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGgiLCJzQW5ub3RhdGlvblBhdGgiLCJuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZSIsIm5hdmlnYXRpb24iLCJ2aWV3TGV2ZWwiLCJjb250ZW50RGVuc2l0aWVzIiwiY296eSIsImNvbXBhY3QiLCJmY2xFbmFibGVkIiwibWFuaWZlc3RDb250ZW50RGVuc2l0eSIsInNoZWxsQ29udGVudERlbnNpdHkiLCJpc0NvbmRlbnNlZExheW91dENvbXBsaWFudCIsInNlY3Rpb25zIiwiYm9keSIsImdldFNob3dPYmplY3RQYWdlSGVhZGVyIiwiZWRpdGFibGVIZWFkZXJDb250ZW50IiwiYW5jaG9yQmFyVmlzaWJsZSIsInVuZGVmaW5lZCIsImdldFNob3dBbmNob3JCYXIiLCJzZWN0aW9uTGF5b3V0IiwidmlzaWJsZSIsInZpZXdzIiwia2V5UGVyZm9ybWFuY2VJbmRpY2F0b3JzIiwiZ2V0Q29udHJvbENvbmZpZ3VyYXRpb24iLCJ2aWV3Q29uZmlnIiwiZ2V0Vmlld0NvbmZpZ3VyYXRpb24iLCJwYXRocyIsIm1hbmlmZXN0RW50aXR5U2V0IiwiZW50aXR5U2V0IiwiZmluZCIsInBhdGgiLCJ0ZW1wbGF0ZSIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJwcmltYXJ5Iiwic2Vjb25kYXJ5Iiwic29tZSIsImNvbnRleHRQYXRoIiwibGVuZ3RoIl0sIm1hcHBpbmdzIjoiO0FBQUE7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QTtBQUNBOzs7O2FBQ0MsbUNBQTBCTixJQUExQixFQUFpRTtBQUFBOztBQUNoRSxZQUFJLENBQUNBLElBQUwsRUFBVztBQUNWLGNBQU1OLFVBQVUsR0FBRyxLQUFLQyxvQkFBTCxNQUErQjtBQUFFQyxZQUFBQSxLQUFLLEVBQUU7QUFBVCxXQUFsRDtBQUNBLGlCQUFPRixVQUFVLENBQUNFLEtBQVgsQ0FBaUJTLElBQWpCLENBQXNCLFVBQUFMLElBQUksRUFBSTtBQUFBOztBQUNwQyxtQkFDQyxhQUFDQSxJQUFELENBQXdDRyxPQUF4QyxzREFBaURJLE1BQWpELElBQTBELENBQTFELElBQ0EsZUFBQ1AsSUFBRCxDQUF3Q0ksU0FBeEMsMERBQW1ERyxNQUFuRCxJQUE0RCxDQUY3RDtBQUlBLFdBTE0sQ0FBUDtBQU1BOztBQUNELGVBQU8sY0FBQ1AsSUFBRCxDQUF3Q0csT0FBeEMsd0RBQWlESSxNQUFqRCxJQUEwRCxDQUExRCxJQUErRCxnQkFBQ1AsSUFBRCxDQUF3Q0ksU0FBeEMsNERBQW1ERyxNQUFuRCxJQUE0RCxDQUFsSTtBQUNBLE8sQ0FFRDs7Ozs7OztTQUdjcEQsZSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlndXJhYmxlUmVjb3JkIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7XG5cdEJhc2VNYW5pZmVzdFNldHRpbmdzLFxuXHRDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0Q29udGVudERlbnNpdGllc1R5cGUsXG5cdEZpbHRlck1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0Rm9ybU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0TGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MsXG5cdE1hbmlmZXN0QWN0aW9uLFxuXHRNYW5pZmVzdEhlYWRlckZhY2V0LFxuXHRNYW5pZmVzdFNlY3Rpb24sXG5cdE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uLFxuXHROYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncyxcblx0U2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uLFxuXHRWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdFRlbXBsYXRlVHlwZSxcblx0VmFyaWFudE1hbmFnZW1lbnRUeXBlLFxuXHRDdXN0b21WaWV3VGVtcGxhdGVDb25maWd1cmF0aW9uLFxuXHRWaWV3Q29uZmlndXJhdGlvbixcblx0S1BJQ29uZmlndXJhdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5cbi8qKlxuICpcbiAqL1xuY2xhc3MgTWFuaWZlc3RXcmFwcGVyIHtcblx0LyoqXG5cdCAqIENyZWF0ZXMgYSB3cmFwcGVyIG9iamVjdCB0byBlbnN1cmUgdGhlIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgbWFuaWZlc3QgaXMgY29uc2lzdGVudCBhbmQgZXZlcnl0aGluZyBpcyBtZXJnZWQgY29ycmVjdGx5LlxuXHQgKlxuXHQgKiBAcGFyYW0ge0Jhc2VNYW5pZmVzdFNldHRpbmdzfSBvTWFuaWZlc3RTZXR0aW5ncyBUaGUgbWFuaWZlc3Qgc2V0dGluZ3MgZm9yIHRoZSBjdXJyZW50IHBhZ2Vcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gbWVyZ2VGbiBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHBlcmZvcm0gdGhlIG1lcmdlXG5cdCAqIEByZXR1cm5zIHtNYW5pZmVzdFdyYXBwZXJ9IFRoZSBtYW5pZmVzdCB3cmFwcGVyIG9iamVjdFxuXHQgKi9cblx0Y29uc3RydWN0b3IocHJpdmF0ZSBvTWFuaWZlc3RTZXR0aW5nczogQmFzZU1hbmlmZXN0U2V0dGluZ3MsIHByaXZhdGUgbWVyZ2VGbjogRnVuY3Rpb24pIHt9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGN1cnJlbnQgdGVtcGxhdGUgdHlwZS5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgdGVtcGxhdGVcblx0ICovXG5cdGdldFRlbXBsYXRlVHlwZSgpOiBUZW1wbGF0ZVR5cGUge1xuXHRcdHJldHVybiB0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmNvbnZlcnRlclR5cGU7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgYSBkZXNrdG9wIG9yIG5vdC5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB3ZSBhcmUgb24gYSBkZXNrdG9wXG5cdCAqL1xuXHRpc0Rlc2t0b3AoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5pc0Rlc2t0b3A7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBmb3JtIGNvbnRhaW5lcnMgKGZpZWxkIGdyb3Vwcy9pZGVudGlmaWNhdGlvbikgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBmYWNldFRhcmdldCBUaGUgdGFyZ2V0IGFubm90YXRpb24gcGF0aCBmb3IgdGhpcyBmb3JtXG5cdCAqIEByZXR1cm5zIHtGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9ufSBBIHNldCBvZiBtYW5pZmVzdCBoZWFkZXIgZmFjZXRzIGluZGV4ZWQgYnkgYW4gaXRlcmFibGUga2V5XG5cdCAqL1xuXHRnZXRGb3JtQ29udGFpbmVyKGZhY2V0VGFyZ2V0OiBzdHJpbmcpOiBGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb250cm9sQ29uZmlndXJhdGlvbj8uW2ZhY2V0VGFyZ2V0XSBhcyBGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uO1xuXHR9XG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGhlYWRlckZhY2V0cyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHJldHVybnMge0NvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEhlYWRlckZhY2V0Pn0gQSBzZXQgb2YgbWFuaWZlc3QgaGVhZGVyIGZhY2V0cyBpbmRleGVkIGJ5IGFuIGl0ZXJhYmxlIGtleVxuXHQgKi9cblx0Z2V0SGVhZGVyRmFjZXRzKCk6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEhlYWRlckZhY2V0PiB7XG5cdFx0cmV0dXJuIHRoaXMubWVyZ2VGbihcblx0XHRcdHt9LFxuXHRcdFx0dGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb250cm9sQ29uZmlndXJhdGlvbj8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckZhY2V0c1wiXT8uZmFjZXRzLFxuXHRcdFx0KHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLmNvbnRlbnQ/LmhlYWRlcj8uZmFjZXRzXG5cdFx0KTtcblx0fVxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBoZWFkZXIgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHJldHVybnMge0NvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEFjdGlvbj59IEEgc2V0IG9mIG1hbmlmZXN0IGFjdGlvbnMgaW5kZXhlZCBieSBhbiBpdGVyYWJsZSBrZXlcblx0ICovXG5cdGdldEhlYWRlckFjdGlvbnMoKTogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPiB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MuY29udGVudD8uaGVhZGVyPy5hY3Rpb25zIHx8IHt9O1xuXHR9XG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGZvb3RlciBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Q29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPn0gQSBzZXQgb2YgbWFuaWZlc3QgYWN0aW9ucyBpbmRleGVkIGJ5IGFuIGl0ZXJhYmxlIGtleVxuXHQgKi9cblx0Z2V0Rm9vdGVyQWN0aW9ucygpOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RBY3Rpb24+IHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb250ZW50Py5mb290ZXI/LmFjdGlvbnMgfHwge307XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB2YXJpYW50IG1hbmFnZW1lbnQgYXMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtWYXJpYW50TWFuYWdlbWVudFR5cGV9IEEgdHlwZSBvZiB2YXJpYW50IG1hbmFnZW1lbnRcblx0ICovXG5cdGdldFZhcmlhbnRNYW5hZ2VtZW50KCk6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MudmFyaWFudE1hbmFnZW1lbnQgfHwgVmFyaWFudE1hbmFnZW1lbnRUeXBlLk5vbmU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBhbm5vdGF0aW9uIFBhdGggZm9yIHRoZSBTUFYgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gVGhlIGFubm90YXRpb24gcGF0aCBmb3IgdGhlIGRlZmF1bHQgU1BWIG9yIHVuZGVmaW5lZC5cblx0ICovXG5cdGdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MuZGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBjb250cm9sIGNvbmZpZ3VyYXRpb24gYXMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgZm9yIGEgc3BlY2lmaWMgYW5ub3RhdGlvbiBwYXRoLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0Fubm90YXRpb25QYXRoIFRoZSByZWxhdGl2ZSBhbm5vdGF0aW9uIHBhdGhcblx0ICogQHByaXZhdGVcblx0ICogQHJldHVybnMge29iamVjdH0gVGhlIGNvbnRyb2wgY29uZmlndXJhdGlvblxuXHQgKi9cblx0Z2V0Q29udHJvbENvbmZpZ3VyYXRpb24oc0Fubm90YXRpb25QYXRoOiBzdHJpbmcpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5jb250cm9sQ29uZmlndXJhdGlvbj8uW3NBbm5vdGF0aW9uUGF0aF0gfHwge307XG5cdH1cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY29uZmlndXJlZCBzZXR0aW5ncyBmb3IgYSBnaXZlbiBuYXZpZ2F0aW9uIHRhcmdldC5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hdmlnYXRpb25PckNvbGxlY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBuYXZpZ2F0aW9uIHRvIGNoZWNrXG5cdCAqIEByZXR1cm5zIHtOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9ufSBUaGUgbmF2aWdhdGlvbiBzZXR0aW5ncyBjb25maWd1cmF0aW9uXG5cdCAqL1xuXHRnZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZTogc3RyaW5nKTogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbiB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3M/Lm5hdmlnYXRpb24/LltuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZV0gfHwge307XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB2aWV3IGxldmVsLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgY3VycmVudCB2aWV3IGxldmVsXG5cdCAqL1xuXHRnZXRWaWV3TGV2ZWwoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8udmlld0xldmVsIHx8IC0xO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY29udGVudERlbnNpdGllcyBzZXR0aW5nIG9mIHRoZSBhcHBsaWNhdGlvbi5cblx0ICpcblx0ICogQHJldHVybnMge0NvbnRlbnREZW5zaXRpZXNUeXBlfSBUaGUgY3VycmVudCBjb250ZW50IGRlbnNpdHlcblx0ICovXG5cdGdldENvbnRlbnREZW5zaXRpZXMoKTogQ29udGVudERlbnNpdGllc1R5cGUge1xuXHRcdHJldHVybiAoXG5cdFx0XHR0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5jb250ZW50RGVuc2l0aWVzIHx8IHtcblx0XHRcdFx0Y296eTogZmFsc2UsXG5cdFx0XHRcdGNvbXBhY3Q6IGZhbHNlXG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciB3ZSBhcmUgaW4gRkNMIG1vZGUgb3Igbm90LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHdlIGFyZSBpbiBGQ0xcblx0ICovXG5cdGlzRmNsRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISF0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5mY2xFbmFibGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IHNldHRpbmdzIChhcHBsaWNhdGlvbiAvIHNoZWxsKSBhbGxvd3MgdXMgdG8gdXNlIGNvbmRlbnNlZCBsYXlvdXQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgd2UgY2FuIHVzZSB0aGUgY29uZGVuc2VkIGxheW91dCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRpc0NvbmRlbnNlZExheW91dENvbXBsaWFudCgpOiBib29sZWFuIHtcblx0XHRjb25zdCBtYW5pZmVzdENvbnRlbnREZW5zaXR5ID0gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8uY29udGVudERlbnNpdGllcyB8fCB7XG5cdFx0XHRjb3p5OiBmYWxzZSxcblx0XHRcdGNvbXBhY3Q6IGZhbHNlXG5cdFx0fTtcblx0XHRjb25zdCBzaGVsbENvbnRlbnREZW5zaXR5ID0gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8uc2hlbGxDb250ZW50RGVuc2l0eSB8fCBcImNvbXBhY3RcIjtcblx0XHRsZXQgaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQgPSB0cnVlO1xuXHRcdGlmICgobWFuaWZlc3RDb250ZW50RGVuc2l0eT8uY296eSA9PT0gdHJ1ZSAmJiBtYW5pZmVzdENvbnRlbnREZW5zaXR5Py5jb21wYWN0ICE9PSB0cnVlKSB8fCBzaGVsbENvbnRlbnREZW5zaXR5ID09PSBcImNvenlcIikge1xuXHRcdFx0aXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQgPSBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIGlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50O1xuXHR9XG5cblx0Ly9yZWdpb24gT1AgU3BlY2lmaWNcblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBzZWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHJldHVybnMge0NvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdFNlY3Rpb24+fSBBIHNldCBvZiBtYW5pZmVzdCBzZWN0aW9ucyBpbmRleGVkIGJ5IGFuIGl0ZXJhYmxlIGtleVxuXHQgKi9cblx0Z2V0U2VjdGlvbnMoKTogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0U2VjdGlvbj4ge1xuXHRcdHJldHVybiB0aGlzLm1lcmdlRm4oXG5cdFx0XHR7fSxcblx0XHRcdHRoaXMub01hbmlmZXN0U2V0dGluZ3MuY29udHJvbENvbmZpZ3VyYXRpb24/LltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GYWNldHNcIl0/LnNlY3Rpb25zLFxuXHRcdFx0KHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLmNvbnRlbnQ/LmJvZHk/LnNlY3Rpb25zXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgb2YgdGhlIGhlYWRlciBvZiB0aGUgYXBwbGljYXRpb24gaXMgZWRpdGFibGUgYW5kIHNob3VsZCBhcHBlYXIgaW4gdGhlIGZhY2V0cy5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaGVhZGVyIGlmIGVkaXRhYmxlXG5cdCAqL1xuXHRpc0hlYWRlckVkaXRhYmxlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldFNob3dPYmplY3RQYWdlSGVhZGVyKCkgJiYgKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLmVkaXRhYmxlSGVhZGVyQ29udGVudDtcblx0fVxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHdlIHNob3VsZCBzaG93IHRoZSBvYmplY3QgcGFnZSBoZWFkZXIuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGhlYWRlciBzaG91bGQgYmUgZGlzcGxheWVkXG5cdCAqL1xuXHRnZXRTaG93QW5jaG9yQmFyKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy5hbmNob3JCYXJWaXNpYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdD8gISEodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy5hbmNob3JCYXJWaXNpYmxlXG5cdFx0XHQ6IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogRGVmaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGUgc2VjdGlvbiB3aWxsIGJlIGRpc3BsYXllZCBpbiBkaWZmZXJlbnQgdGFicy5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaWNvbiB0YWIgYmFyIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2Ygc2Nyb2xsaW5nXG5cdCAqL1xuXHR1c2VJY29uVGFiQmFyKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldFNob3dBbmNob3JCYXIoKSAmJiAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCI7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgcGFnZSBoZWFkZXIgaXMgdG8gYmUgc2hvd24uXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIG9iamVjdCBwYWdlIGhlYWRlciBpcyB0byBiZSBkaXNwbGF5ZWRcblx0ICovXG5cdGdldFNob3dPYmplY3RQYWdlSGVhZGVyKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy52aXNpYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdD8gISEodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy52aXNpYmxlXG5cdFx0XHQ6IHRydWU7XG5cdH1cblxuXHQvL2VuZHJlZ2lvbiBPUCBTcGVjaWZpY1xuXG5cdC8vcmVnaW9uIExSIFNwZWNpZmljXG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgbXVsdGlwbGUgdmlldyBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7TXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb259IFRoZSB2aWV3cyB0aGF0IHJlcHJlc2VudCB0aGUgbWFuaWZlc3Qgb2JqZWN0XG5cdCAqL1xuXHRnZXRWaWV3Q29uZmlndXJhdGlvbigpOiBNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzKS52aWV3cztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIEtQSSBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIGEgbWFwIGJldHdlZW4gS1BJIG5hbWVzIGFuZCB0aGVpciByZXNwZWN0aXZlIGNvbmZpZ3VyYXRpb25cblx0ICovXG5cdGdldEtQSUNvbmZpZ3VyYXRpb24oKTogeyBba3BpTmFtZTogc3RyaW5nXTogS1BJQ29uZmlndXJhdGlvbiB9IHtcblx0XHRyZXR1cm4gKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MpLmtleVBlcmZvcm1hbmNlSW5kaWNhdG9ycyB8fCB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGZpbHRlciBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7RmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9ufSBUaGUgZmlsdGVyIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbWFuaWZlc3Rcblx0ICovXG5cdGdldEZpbHRlckNvbmZpZ3VyYXRpb24oKTogRmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDb250cm9sQ29uZmlndXJhdGlvbihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIik7XG5cdH1cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZW50aXR5IHNldHMgdG8gYmUgZGlzcGxheWVkLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBlbnRpdHkgc2V0c1xuXHQgKi9cblx0aGFzTXVsdGlwbGVFbnRpdHlTZXRzKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHZpZXdDb25maWcgPSB0aGlzLmdldFZpZXdDb25maWd1cmF0aW9uKCkgfHwgeyBwYXRoczogW10gfTtcblx0XHRjb25zdCBtYW5pZmVzdEVudGl0eVNldCA9IHRoaXMub01hbmlmZXN0U2V0dGluZ3MuZW50aXR5U2V0O1xuXHRcdHJldHVybiAoXG5cdFx0XHR2aWV3Q29uZmlnLnBhdGhzLmZpbmQoKHBhdGg6IFZpZXdDb25maWd1cmF0aW9uKSA9PiB7XG5cdFx0XHRcdGlmICgocGF0aCBhcyBDdXN0b21WaWV3VGVtcGxhdGVDb25maWd1cmF0aW9uKT8udGVtcGxhdGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyhwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uKSkge1xuXHRcdFx0XHRcdGNvbnN0IHsgcHJpbWFyeSwgc2Vjb25kYXJ5IH0gPSBwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRwcmltYXJ5LnNvbWUocGF0aCA9PiBwYXRoLmVudGl0eVNldCAmJiBwYXRoLmVudGl0eVNldCAhPT0gbWFuaWZlc3RFbnRpdHlTZXQpIHx8XG5cdFx0XHRcdFx0XHRzZWNvbmRhcnkuc29tZShwYXRoID0+IHBhdGguZW50aXR5U2V0ICYmIHBhdGguZW50aXR5U2V0ICE9PSBtYW5pZmVzdEVudGl0eVNldClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhdGggPSBwYXRoIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0XHRyZXR1cm4gcGF0aC5lbnRpdHlTZXQgJiYgcGF0aC5lbnRpdHlTZXQgIT09IG1hbmlmZXN0RW50aXR5U2V0O1xuXHRcdFx0XHR9XG5cdFx0XHR9KSAhPT0gdW5kZWZpbmVkXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjb250ZXh0IHBhdGggZm9yIHRoZSB0ZW1wbGF0ZSBpZiBpdCBpcyBzcGVjaWZpZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29udGV4dCBwYXRoIGZvciB0aGUgdGVtcGxhdGVcblx0ICovXG5cdGdldENvbnRleHRQYXRoKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3M/LmNvbnRleHRQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmlzdWFsaXphdGlvbnMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Vmlld1BhdGhDb25maWd1cmF0aW9ufSBwYXRoIFRoZSBwYXRoIGZyb20gdGhlIHZpZXdcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmlzdWFsaXphdGlvbnNcblx0ICovXG5cdGhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMocGF0aD86IFZpZXdQYXRoQ29uZmlndXJhdGlvbik6IGJvb2xlYW4ge1xuXHRcdGlmICghcGF0aCkge1xuXHRcdFx0Y29uc3Qgdmlld0NvbmZpZyA9IHRoaXMuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKSB8fCB7IHBhdGhzOiBbXSB9O1xuXHRcdFx0cmV0dXJuIHZpZXdDb25maWcucGF0aHMuc29tZShwYXRoID0+IHtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQocGF0aCBhcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbikucHJpbWFyeT8ubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdChwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uKS5zZWNvbmRhcnk/Lmxlbmd0aCA+IDBcblx0XHRcdFx0KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gKHBhdGggYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24pLnByaW1hcnk/Lmxlbmd0aCA+IDAgJiYgKHBhdGggYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24pLnNlY29uZGFyeT8ubGVuZ3RoID4gMDtcblx0fVxuXG5cdC8vZW5kIHJlZ2lvbiBMUiBTcGVjaWZpY1xufVxuXG5leHBvcnQgZGVmYXVsdCBNYW5pZmVzdFdyYXBwZXI7XG4iXX0=
404
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1hbmlmZXN0V3JhcHBlci50cyJdLCJuYW1lcyI6WyJNYW5pZmVzdFdyYXBwZXIiLCJvTWFuaWZlc3RTZXR0aW5ncyIsIm1lcmdlRm4iLCJnZXRUZW1wbGF0ZVR5cGUiLCJjb252ZXJ0ZXJUeXBlIiwiaXNGaWx0ZXJCYXJIaWRkZW4iLCJoaWRlRmlsdGVyQmFyIiwiaXNEZXNrdG9wIiwiaXNQaG9uZSIsImdldEZvcm1Db250YWluZXIiLCJmYWNldFRhcmdldCIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiZ2V0SGVhZGVyRmFjZXRzIiwiZmFjZXRzIiwiY29udGVudCIsImhlYWRlciIsImdldEhlYWRlckFjdGlvbnMiLCJhY3Rpb25zIiwiZ2V0Rm9vdGVyQWN0aW9ucyIsImZvb3RlciIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwidmFyaWFudE1hbmFnZW1lbnQiLCJWYXJpYW50TWFuYWdlbWVudFR5cGUiLCJOb25lIiwiZ2V0RGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGgiLCJkZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCIsImdldENvbnRyb2xDb25maWd1cmF0aW9uIiwic0Fubm90YXRpb25QYXRoIiwiZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24iLCJuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZSIsIm5hdmlnYXRpb24iLCJnZXRWaWV3TGV2ZWwiLCJ2aWV3TGV2ZWwiLCJnZXRDb250ZW50RGVuc2l0aWVzIiwiY29udGVudERlbnNpdGllcyIsImNvenkiLCJjb21wYWN0IiwiaXNGY2xFbmFibGVkIiwiZmNsRW5hYmxlZCIsImlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50IiwibWFuaWZlc3RDb250ZW50RGVuc2l0eSIsInNoZWxsQ29udGVudERlbnNpdHkiLCJnZXRTZWN0aW9ucyIsInNlY3Rpb25zIiwiYm9keSIsImlzSGVhZGVyRWRpdGFibGUiLCJnZXRTaG93T2JqZWN0UGFnZUhlYWRlciIsImVkaXRhYmxlSGVhZGVyQ29udGVudCIsImdldFNob3dBbmNob3JCYXIiLCJhbmNob3JCYXJWaXNpYmxlIiwidW5kZWZpbmVkIiwidXNlSWNvblRhYkJhciIsInNlY3Rpb25MYXlvdXQiLCJ2aXNpYmxlIiwiZ2V0Vmlld0NvbmZpZ3VyYXRpb24iLCJ2aWV3cyIsImdldFN0aWNreU11bHRpVGFiSGVhZGVyQ29uZmlndXJhdGlvbiIsImJTdGlja3lNdWx0aVRhYkhlYWRlciIsInN0aWNreU11bHRpVGFiSGVhZGVyIiwiZ2V0S1BJQ29uZmlndXJhdGlvbiIsImtleVBlcmZvcm1hbmNlSW5kaWNhdG9ycyIsImdldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJoYXNNdWx0aXBsZUVudGl0eVNldHMiLCJ2aWV3Q29uZmlnIiwicGF0aHMiLCJtYW5pZmVzdEVudGl0eVNldCIsImVudGl0eVNldCIsImZpbmQiLCJwYXRoIiwidGVtcGxhdGUiLCJoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIiwicHJpbWFyeSIsInNlY29uZGFyeSIsInNvbWUiLCJnZXRDb250ZXh0UGF0aCIsImNvbnRleHRQYXRoIiwibGVuZ3RoIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7QUFxQkE7QUFDQTtBQUNBO01BQ01BLGU7QUFDTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNDLDZCQUFvQkMsaUJBQXBCLEVBQXFFQyxPQUFyRSxFQUF3RjtBQUFBLFdBQXBFRCxpQkFBb0UsR0FBcEVBLGlCQUFvRTtBQUFBLFdBQW5CQyxPQUFtQixHQUFuQkEsT0FBbUI7QUFBRTtBQUUxRjtBQUNEO0FBQ0E7QUFDQTtBQUNBOzs7OztXQUNDQyxlLEdBQUEsMkJBQWdDO0FBQy9CLGFBQU8sS0FBS0YsaUJBQUwsQ0FBdUJHLGFBQTlCO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBOzs7V0FDQ0MsaUIsR0FBQSw2QkFBNkI7QUFBQTs7QUFDNUIsYUFBTyxDQUFDLDJCQUFFLEtBQUtKLGlCQUFQLGtEQUFDLHNCQUF3REssYUFBekQsQ0FBUjtBQUNBO0FBRUQ7QUFD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O0FBQ0E7QUFDRCxPQWJELE1BYU9mLFNBZFI7QUFnQkE7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBOzs7V0FDQ3dCLGMsR0FBQSwwQkFBcUM7QUFBQTs7QUFDcEMsd0NBQU8sS0FBS3pFLGlCQUFaLDREQUFPLHdCQUF3QjBFLFdBQS9CO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztXQUNDTCx5QixHQUFBLG1DQUEwQkYsSUFBMUIsRUFBaUU7QUFBQTs7QUFDaEUsVUFBSSxDQUFDQSxJQUFMLEVBQVc7QUFDVixZQUFNTCxVQUFVLEdBQUcsS0FBS1Qsb0JBQUwsTUFBK0I7QUFBRVUsVUFBQUEsS0FBSyxFQUFFO0FBQVQsU0FBbEQ7QUFDQSxlQUFPRCxVQUFVLENBQUNDLEtBQVgsQ0FBaUJTLElBQWpCLENBQXNCLFVBQUFMLElBQUksRUFBSTtBQUFBOztBQUNwQyxpQkFDQyxhQUFDQSxJQUFELENBQXdDRyxPQUF4QyxzREFBaURLLE1BQWpELElBQTBELENBQTFELElBQ0EsZUFBQ1IsSUFBRCxDQUF3Q0ksU0FBeEMsMERBQW1ESSxNQUFuRCxJQUE0RCxDQUY3RDtBQUlBLFNBTE0sQ0FBUDtBQU1BOztBQUNELGFBQU8sY0FBQ1IsSUFBRCxDQUF3Q0csT0FBeEMsd0RBQWlESyxNQUFqRCxJQUEwRCxDQUExRCxJQUErRCxnQkFBQ1IsSUFBRCxDQUF3Q0ksU0FBeEMsNERBQW1ESSxNQUFuRCxJQUE0RCxDQUFsSTtBQUNBLEssQ0FFRDs7Ozs7O1NBR2M1RSxlIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25maWd1cmFibGVSZWNvcmQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHtcblx0QmFzZU1hbmlmZXN0U2V0dGluZ3MsXG5cdENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uLFxuXHRDb250ZW50RGVuc2l0aWVzVHlwZSxcblx0RmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyxcblx0TWFuaWZlc3RBY3Rpb24sXG5cdE1hbmlmZXN0SGVhZGVyRmFjZXQsXG5cdE1hbmlmZXN0U2VjdGlvbixcblx0TXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24sXG5cdE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzLFxuXHRTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdFZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0VGVtcGxhdGVUeXBlLFxuXHRWYXJpYW50TWFuYWdlbWVudFR5cGUsXG5cdEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24sXG5cdFZpZXdDb25maWd1cmF0aW9uLFxuXHRLUElDb25maWd1cmF0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcblxuLyoqXG4gKlxuICovXG5jbGFzcyBNYW5pZmVzdFdyYXBwZXIge1xuXHQvKipcblx0ICogQ3JlYXRlcyBhIHdyYXBwZXIgb2JqZWN0IHRvIGVuc3VyZSB0aGUgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBtYW5pZmVzdCBpcyBjb25zaXN0ZW50IGFuZCBldmVyeXRoaW5nIGlzIG1lcmdlZCBjb3JyZWN0bHkuXG5cdCAqXG5cdCAqIEBwYXJhbSB7QmFzZU1hbmlmZXN0U2V0dGluZ3N9IG9NYW5pZmVzdFNldHRpbmdzIFRoZSBtYW5pZmVzdCBzZXR0aW5ncyBmb3IgdGhlIGN1cnJlbnQgcGFnZVxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXJnZUZuIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gcGVyZm9ybSB0aGUgbWVyZ2Vcblx0ICogQHJldHVybnMge01hbmlmZXN0V3JhcHBlcn0gVGhlIG1hbmlmZXN0IHdyYXBwZXIgb2JqZWN0XG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIG9NYW5pZmVzdFNldHRpbmdzOiBCYXNlTWFuaWZlc3RTZXR0aW5ncywgcHJpdmF0ZSBtZXJnZUZuOiBGdW5jdGlvbikge31cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY3VycmVudCB0ZW1wbGF0ZSB0eXBlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgdHlwZSBvZiB0aGUgY3VycmVudCB0ZW1wbGF0ZVxuXHQgKi9cblx0Z2V0VGVtcGxhdGVUeXBlKCk6IFRlbXBsYXRlVHlwZSB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MuY29udmVydGVyVHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCB0ZW1wbGF0ZSBzaG91bGQgZGlzcGxheSB0aGUgZmlsdGVyIGJhci5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZmlsdGVyIGJhciBzaG91bGQgYmUgaGlkZGVuXG5cdCAqL1xuXHRpc0ZpbHRlckJhckhpZGRlbigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISEodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyk/LmhpZGVGaWx0ZXJCYXI7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgYSBkZXNrdG9wIG9yIG5vdC5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB3ZSBhcmUgb24gYSBkZXNrdG9wXG5cdCAqL1xuXHRpc0Rlc2t0b3AoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5pc0Rlc2t0b3A7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgYSBtb2JpbGUgcGhvbmUgb3Igbm90LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHdlIGFyZSBvbiBhIG1vYmlsZSBwaG9uZVxuXHQgKi9cblx0aXNQaG9uZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISF0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmlzUGhvbmU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBmb3JtIGNvbnRhaW5lcnMgKGZpZWxkIGdyb3VwcyBvciBpZGVudGlmaWNhdGlvbikgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBmYWNldFRhcmdldCBUaGUgdGFyZ2V0IGFubm90YXRpb24gcGF0aCBmb3IgdGhpcyBmb3JtXG5cdCAqIEByZXR1cm5zIHtGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9ufSBBIHNldCBvZiBmb3JtIGNvbnRhaW5lcnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgaW5kZXhlZCBieSBhbiBpdGVyYWJsZSBrZXlcblx0ICovXG5cdGdldEZvcm1Db250YWluZXIoZmFjZXRUYXJnZXQ6IHN0cmluZyk6IEZvcm1NYW5pZmVzdENvbmZpZ3VyYXRpb24ge1xuXHRcdHJldHVybiB0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmNvbnRyb2xDb25maWd1cmF0aW9uPy5bZmFjZXRUYXJnZXRdIGFzIEZvcm1NYW5pZmVzdENvbmZpZ3VyYXRpb247XG5cdH1cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgaGVhZGVyIGZhY2V0cyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHJldHVybnMge0NvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEhlYWRlckZhY2V0Pn0gQSBzZXQgb2YgaGVhZGVyIGZhY2V0cyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBpbmRleGVkIGJ5IGFuIGl0ZXJhYmxlIGtleVxuXHQgKi9cblx0Z2V0SGVhZGVyRmFjZXRzKCk6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEhlYWRlckZhY2V0PiB7XG5cdFx0cmV0dXJuIHRoaXMubWVyZ2VGbihcblx0XHRcdHt9LFxuXHRcdFx0dGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb250cm9sQ29uZmlndXJhdGlvbj8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckZhY2V0c1wiXT8uZmFjZXRzLFxuXHRcdFx0KHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLmNvbnRlbnQ/LmhlYWRlcj8uZmFjZXRzXG5cdFx0KTtcblx0fVxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBoZWFkZXIgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHJldHVybnMge0NvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEFjdGlvbj59IEEgc2V0IG9mIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgaW5kZXhlZCBieSBhbiBpdGVyYWJsZSBrZXlcblx0ICovXG5cdGdldEhlYWRlckFjdGlvbnMoKTogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPiB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MuY29udGVudD8uaGVhZGVyPy5hY3Rpb25zIHx8IHt9O1xuXHR9XG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGZvb3RlciBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Q29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPn0gQSBzZXQgb2YgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBpbmRleGVkIGJ5IGFuIGl0ZXJhYmxlIGtleVxuXHQgKi9cblx0Z2V0Rm9vdGVyQWN0aW9ucygpOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RBY3Rpb24+IHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb250ZW50Py5mb290ZXI/LmFjdGlvbnMgfHwge307XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB2YXJpYW50IG1hbmFnZW1lbnQgYXMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtWYXJpYW50TWFuYWdlbWVudFR5cGV9IEEgdHlwZSBvZiB2YXJpYW50IG1hbmFnZW1lbnRcblx0ICovXG5cdGdldFZhcmlhbnRNYW5hZ2VtZW50KCk6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MudmFyaWFudE1hbmFnZW1lbnQgfHwgVmFyaWFudE1hbmFnZW1lbnRUeXBlLk5vbmU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBhbm5vdGF0aW9uIFBhdGggZm9yIHRoZSBTUFYgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gVGhlIGFubm90YXRpb24gcGF0aCBmb3IgdGhlIGRlZmF1bHQgU1BWIG9yIHVuZGVmaW5lZC5cblx0ICovXG5cdGdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MuZGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBjb250cm9sIGNvbmZpZ3VyYXRpb24gYXMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgZm9yIGEgc3BlY2lmaWMgYW5ub3RhdGlvbiBwYXRoLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0Fubm90YXRpb25QYXRoIFRoZSByZWxhdGl2ZSBhbm5vdGF0aW9uIHBhdGhcblx0ICogQHByaXZhdGVcblx0ICogQHJldHVybnMge29iamVjdH0gVGhlIGNvbnRyb2wgY29uZmlndXJhdGlvblxuXHQgKi9cblx0Z2V0Q29udHJvbENvbmZpZ3VyYXRpb24oc0Fubm90YXRpb25QYXRoOiBzdHJpbmcpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5jb250cm9sQ29uZmlndXJhdGlvbj8uW3NBbm5vdGF0aW9uUGF0aF0gfHwge307XG5cdH1cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY29uZmlndXJlZCBzZXR0aW5ncyBmb3IgYSBnaXZlbiBuYXZpZ2F0aW9uIHRhcmdldC5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hdmlnYXRpb25PckNvbGxlY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBuYXZpZ2F0aW9uIHRvIGNoZWNrXG5cdCAqIEByZXR1cm5zIHtOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9ufSBUaGUgbmF2aWdhdGlvbiBzZXR0aW5ncyBjb25maWd1cmF0aW9uXG5cdCAqL1xuXHRnZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZTogc3RyaW5nKTogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbiB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3M/Lm5hdmlnYXRpb24/LltuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZV0gfHwge307XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB2aWV3IGxldmVsLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgY3VycmVudCB2aWV3IGxldmVsXG5cdCAqL1xuXHRnZXRWaWV3TGV2ZWwoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8udmlld0xldmVsIHx8IC0xO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY29udGVudERlbnNpdGllcyBzZXR0aW5nIG9mIHRoZSBhcHBsaWNhdGlvbi5cblx0ICpcblx0ICogQHJldHVybnMge0NvbnRlbnREZW5zaXRpZXNUeXBlfSBUaGUgY3VycmVudCBjb250ZW50IGRlbnNpdHlcblx0ICovXG5cdGdldENvbnRlbnREZW5zaXRpZXMoKTogQ29udGVudERlbnNpdGllc1R5cGUge1xuXHRcdHJldHVybiAoXG5cdFx0XHR0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5jb250ZW50RGVuc2l0aWVzIHx8IHtcblx0XHRcdFx0Y296eTogZmFsc2UsXG5cdFx0XHRcdGNvbXBhY3Q6IGZhbHNlXG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciB3ZSBhcmUgaW4gRkNMIG1vZGUgb3Igbm90LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHdlIGFyZSBpbiBGQ0xcblx0ICovXG5cdGlzRmNsRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISF0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5mY2xFbmFibGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IHNldHRpbmdzIChhcHBsaWNhdGlvbiAvIHNoZWxsKSBhbGxvd3MgdXMgdG8gdXNlIGNvbmRlbnNlZCBsYXlvdXQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgd2UgY2FuIHVzZSB0aGUgY29uZGVuc2VkIGxheW91dCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRpc0NvbmRlbnNlZExheW91dENvbXBsaWFudCgpOiBib29sZWFuIHtcblx0XHRjb25zdCBtYW5pZmVzdENvbnRlbnREZW5zaXR5ID0gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8uY29udGVudERlbnNpdGllcyB8fCB7XG5cdFx0XHRjb3p5OiBmYWxzZSxcblx0XHRcdGNvbXBhY3Q6IGZhbHNlXG5cdFx0fTtcblx0XHRjb25zdCBzaGVsbENvbnRlbnREZW5zaXR5ID0gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8uc2hlbGxDb250ZW50RGVuc2l0eSB8fCBcImNvbXBhY3RcIjtcblx0XHRsZXQgaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQgPSB0cnVlO1xuXHRcdGlmICgobWFuaWZlc3RDb250ZW50RGVuc2l0eT8uY296eSA9PT0gdHJ1ZSAmJiBtYW5pZmVzdENvbnRlbnREZW5zaXR5Py5jb21wYWN0ICE9PSB0cnVlKSB8fCBzaGVsbENvbnRlbnREZW5zaXR5ID09PSBcImNvenlcIikge1xuXHRcdFx0aXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQgPSBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIGlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50O1xuXHR9XG5cblx0Ly9yZWdpb24gT1AgU3BlY2lmaWNcblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBzZWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHJldHVybnMge0NvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdFNlY3Rpb24+fSBBIHNldCBvZiBtYW5pZmVzdCBzZWN0aW9ucyBpbmRleGVkIGJ5IGFuIGl0ZXJhYmxlIGtleVxuXHQgKi9cblx0Z2V0U2VjdGlvbnMoKTogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0U2VjdGlvbj4ge1xuXHRcdHJldHVybiB0aGlzLm1lcmdlRm4oXG5cdFx0XHR7fSxcblx0XHRcdHRoaXMub01hbmlmZXN0U2V0dGluZ3MuY29udHJvbENvbmZpZ3VyYXRpb24/LltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GYWNldHNcIl0/LnNlY3Rpb25zLFxuXHRcdFx0KHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLmNvbnRlbnQ/LmJvZHk/LnNlY3Rpb25zXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgb2YgdGhlIGhlYWRlciBvZiB0aGUgYXBwbGljYXRpb24gaXMgZWRpdGFibGUgYW5kIHNob3VsZCBhcHBlYXIgaW4gdGhlIGZhY2V0cy5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaGVhZGVyIGlmIGVkaXRhYmxlXG5cdCAqL1xuXHRpc0hlYWRlckVkaXRhYmxlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldFNob3dPYmplY3RQYWdlSGVhZGVyKCkgJiYgKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLmVkaXRhYmxlSGVhZGVyQ29udGVudDtcblx0fVxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHdlIHNob3VsZCBzaG93IHRoZSBvYmplY3QgcGFnZSBoZWFkZXIuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGhlYWRlciBzaG91bGQgYmUgZGlzcGxheWVkXG5cdCAqL1xuXHRnZXRTaG93QW5jaG9yQmFyKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy5hbmNob3JCYXJWaXNpYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdD8gISEodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy5hbmNob3JCYXJWaXNpYmxlXG5cdFx0XHQ6IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogRGVmaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGUgc2VjdGlvbiB3aWxsIGJlIGRpc3BsYXllZCBpbiBkaWZmZXJlbnQgdGFicy5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaWNvbiB0YWIgYmFyIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2Ygc2Nyb2xsaW5nXG5cdCAqL1xuXHR1c2VJY29uVGFiQmFyKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldFNob3dBbmNob3JCYXIoKSAmJiAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCI7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgcGFnZSBoZWFkZXIgaXMgdG8gYmUgc2hvd24uXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIG9iamVjdCBwYWdlIGhlYWRlciBpcyB0byBiZSBkaXNwbGF5ZWRcblx0ICovXG5cdGdldFNob3dPYmplY3RQYWdlSGVhZGVyKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy52aXNpYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdD8gISEodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy52aXNpYmxlXG5cdFx0XHQ6IHRydWU7XG5cdH1cblxuXHQvL2VuZHJlZ2lvbiBPUCBTcGVjaWZpY1xuXG5cdC8vcmVnaW9uIExSIFNwZWNpZmljXG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgbXVsdGlwbGUgdmlldyBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7TXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb259IFRoZSB2aWV3cyB0aGF0IHJlcHJlc2VudCB0aGUgbWFuaWZlc3Qgb2JqZWN0XG5cdCAqL1xuXHRnZXRWaWV3Q29uZmlndXJhdGlvbigpOiBNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzKS52aWV3cztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHN0aWNreU11bHRpVGFiSGVhZGVyIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIFRydWUgaWYgc3RpY2t5TXVsdGlUYWJIZWFkZXIgaXMgZW5hYmxlZCBvciB1bmRlZmluZWRcblx0ICovXG5cdGdldFN0aWNreU11bHRpVGFiSGVhZGVyQ29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcblx0XHRjb25zdCBiU3RpY2t5TXVsdGlUYWJIZWFkZXIgPSAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncykuc3RpY2t5TXVsdGlUYWJIZWFkZXI7XG5cdFx0cmV0dXJuIGJTdGlja3lNdWx0aVRhYkhlYWRlciAhPT0gdW5kZWZpbmVkID8gYlN0aWNreU11bHRpVGFiSGVhZGVyIDogdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIEtQSSBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIGEgbWFwIGJldHdlZW4gS1BJIG5hbWVzIGFuZCB0aGVpciByZXNwZWN0aXZlIGNvbmZpZ3VyYXRpb25cblx0ICovXG5cdGdldEtQSUNvbmZpZ3VyYXRpb24oKTogeyBba3BpTmFtZTogc3RyaW5nXTogS1BJQ29uZmlndXJhdGlvbiB9IHtcblx0XHRyZXR1cm4gKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MpLmtleVBlcmZvcm1hbmNlSW5kaWNhdG9ycyB8fCB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGZpbHRlciBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7RmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9ufSBUaGUgZmlsdGVyIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbWFuaWZlc3Rcblx0ICovXG5cdGdldEZpbHRlckNvbmZpZ3VyYXRpb24oKTogRmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDb250cm9sQ29uZmlndXJhdGlvbihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIik7XG5cdH1cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZW50aXR5IHNldHMgdG8gYmUgZGlzcGxheWVkLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBlbnRpdHkgc2V0c1xuXHQgKi9cblx0aGFzTXVsdGlwbGVFbnRpdHlTZXRzKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHZpZXdDb25maWcgPSB0aGlzLmdldFZpZXdDb25maWd1cmF0aW9uKCkgfHwgeyBwYXRoczogW10gfTtcblx0XHRjb25zdCBtYW5pZmVzdEVudGl0eVNldCA9IHRoaXMub01hbmlmZXN0U2V0dGluZ3MuZW50aXR5U2V0O1xuXHRcdHJldHVybiAoXG5cdFx0XHR2aWV3Q29uZmlnLnBhdGhzLmZpbmQoKHBhdGg6IFZpZXdDb25maWd1cmF0aW9uKSA9PiB7XG5cdFx0XHRcdGlmICgocGF0aCBhcyBDdXN0b21WaWV3VGVtcGxhdGVDb25maWd1cmF0aW9uKT8udGVtcGxhdGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyhwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uKSkge1xuXHRcdFx0XHRcdGNvbnN0IHsgcHJpbWFyeSwgc2Vjb25kYXJ5IH0gPSBwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRwcmltYXJ5LnNvbWUocGF0aCA9PiBwYXRoLmVudGl0eVNldCAmJiBwYXRoLmVudGl0eVNldCAhPT0gbWFuaWZlc3RFbnRpdHlTZXQpIHx8XG5cdFx0XHRcdFx0XHRzZWNvbmRhcnkuc29tZShwYXRoID0+IHBhdGguZW50aXR5U2V0ICYmIHBhdGguZW50aXR5U2V0ICE9PSBtYW5pZmVzdEVudGl0eVNldClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhdGggPSBwYXRoIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0XHRyZXR1cm4gcGF0aC5lbnRpdHlTZXQgJiYgcGF0aC5lbnRpdHlTZXQgIT09IG1hbmlmZXN0RW50aXR5U2V0O1xuXHRcdFx0XHR9XG5cdFx0XHR9KSAhPT0gdW5kZWZpbmVkXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjb250ZXh0IHBhdGggZm9yIHRoZSB0ZW1wbGF0ZSBpZiBpdCBpcyBzcGVjaWZpZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29udGV4dCBwYXRoIGZvciB0aGUgdGVtcGxhdGVcblx0ICovXG5cdGdldENvbnRleHRQYXRoKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3M/LmNvbnRleHRQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmlzdWFsaXphdGlvbnMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Vmlld1BhdGhDb25maWd1cmF0aW9ufSBwYXRoIFRoZSBwYXRoIGZyb20gdGhlIHZpZXdcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmlzdWFsaXphdGlvbnNcblx0ICovXG5cdGhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMocGF0aD86IFZpZXdQYXRoQ29uZmlndXJhdGlvbik6IGJvb2xlYW4ge1xuXHRcdGlmICghcGF0aCkge1xuXHRcdFx0Y29uc3Qgdmlld0NvbmZpZyA9IHRoaXMuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKSB8fCB7IHBhdGhzOiBbXSB9O1xuXHRcdFx0cmV0dXJuIHZpZXdDb25maWcucGF0aHMuc29tZShwYXRoID0+IHtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQocGF0aCBhcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbikucHJpbWFyeT8ubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdChwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uKS5zZWNvbmRhcnk/Lmxlbmd0aCA+IDBcblx0XHRcdFx0KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gKHBhdGggYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24pLnByaW1hcnk/Lmxlbmd0aCA+IDAgJiYgKHBhdGggYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24pLnNlY29uZGFyeT8ubGVuZ3RoID4gMDtcblx0fVxuXG5cdC8vZW5kIHJlZ2lvbiBMUiBTcGVjaWZpY1xufVxuXG5leHBvcnQgZGVmYXVsdCBNYW5pZmVzdFdyYXBwZXI7XG4iXX0=