@sap/open.fe 1.99.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 (969) hide show
  1. package/package.json +1 -1
  2. package/packages/sap.fe.common/src/sap/fe/common/.library +1 -1
  3. package/packages/sap.fe.common/src/sap/fe/common/.theming +1 -1
  4. package/packages/sap.fe.common/src/sap/fe/common/MessageButton-dbg.js +1748 -1813
  5. package/packages/sap.fe.common/src/sap/fe/common/MessageButton.js +2 -3
  6. package/packages/sap.fe.common/src/sap/fe/common/MessageButton.ts +1801 -0
  7. package/packages/sap.fe.common/src/sap/fe/common/MessageFilter-dbg.js +77 -32
  8. package/packages/sap.fe.common/src/sap/fe/common/MessageFilter.js +2 -3
  9. package/packages/sap.fe.common/src/sap/fe/common/MessageFilter.ts +26 -0
  10. package/packages/sap.fe.common/src/sap/fe/common/MessagePopover-dbg.js +43 -53
  11. package/packages/sap.fe.common/src/sap/fe/common/MessagePopover.js +2 -3
  12. package/packages/sap.fe.common/src/sap/fe/common/MessagePopover.ts +39 -0
  13. package/packages/sap.fe.common/src/sap/fe/common/library-dbg.js +31 -38
  14. package/packages/sap.fe.common/src/sap/fe/common/library-h2-preload.js +8 -9
  15. package/packages/sap.fe.common/src/sap/fe/common/library-h2-preload.js.map +3 -3
  16. package/packages/sap.fe.common/src/sap/fe/common/library-preload.js +23 -71
  17. package/packages/sap.fe.common/src/sap/fe/common/library-preload.js.map +4 -4
  18. package/packages/sap.fe.common/src/sap/fe/common/library.js +4 -5
  19. package/packages/sap.fe.common/src/sap/fe/common/library.ts +35 -0
  20. package/packages/sap.fe.common/src/sap/fe/common/manifest.json +3 -3
  21. package/packages/sap.fe.common/src/sap/fe/common/resources.json +54 -32
  22. package/packages/sap.fe.common/test/sap/fe/common/designtime/api.json +1 -1
  23. package/packages/sap.fe.common/test/sap/fe/common/designtime/apiref/api.json +1 -1
  24. package/packages/sap.fe.common/test/sap/fe/common/designtime/codeassistance/Library.jsmeta.json +1 -1
  25. package/packages/sap.fe.common/test/sap/fe/common/designtime/codeassistance/Library.xmlmeta.json +1 -1
  26. package/packages/sap.fe.core/src/sap/fe/core/.library +1 -1
  27. package/packages/sap.fe.core/src/sap/fe/core/.theming +1 -1
  28. package/packages/sap.fe.core/src/sap/fe/core/AnnotationHelper-dbg.js +1 -69
  29. package/packages/sap.fe.core/src/sap/fe/core/AnnotationHelper.js +1 -1
  30. package/packages/sap.fe.core/src/sap/fe/core/AnnotationHelper.ts +0 -70
  31. package/packages/sap.fe.core/src/sap/fe/core/AppComponent-dbg.js +388 -399
  32. package/packages/sap.fe.core/src/sap/fe/core/AppComponent.js +2 -3
  33. package/packages/sap.fe.core/src/sap/fe/core/AppComponent.ts +403 -0
  34. package/packages/sap.fe.core/src/sap/fe/core/AppStateHandler-dbg.js +127 -158
  35. package/packages/sap.fe.core/src/sap/fe/core/AppStateHandler.js +1 -1
  36. package/packages/sap.fe.core/src/sap/fe/core/BaseController-dbg.js +82 -58
  37. package/packages/sap.fe.core/src/sap/fe/core/BaseController.js +2 -3
  38. package/packages/sap.fe.core/src/sap/fe/core/BaseController.ts +68 -0
  39. package/packages/sap.fe.core/src/sap/fe/core/CommonUtils-dbg.js +111 -20
  40. package/packages/sap.fe.core/src/sap/fe/core/CommonUtils.js +1 -1
  41. package/packages/sap.fe.core/src/sap/fe/core/CommonUtils.ts +131 -32
  42. package/packages/sap.fe.core/src/sap/fe/core/ExtensionAPI-dbg.js +278 -274
  43. package/packages/sap.fe.core/src/sap/fe/core/ExtensionAPI.js +2 -3
  44. package/packages/sap.fe.core/src/sap/fe/core/ExtensionAPI.ts +250 -0
  45. package/packages/sap.fe.core/src/sap/fe/core/PageController-dbg.js +157 -29
  46. package/packages/sap.fe.core/src/sap/fe/core/PageController.js +1 -1
  47. package/packages/sap.fe.core/src/sap/fe/core/PageController.ts +60 -32
  48. package/packages/sap.fe.core/src/sap/fe/core/RouterProxy-dbg.js +694 -756
  49. package/packages/sap.fe.core/src/sap/fe/core/RouterProxy.js +1 -1
  50. package/packages/sap.fe.core/src/sap/fe/core/RouterProxy.ts +11 -9
  51. package/packages/sap.fe.core/src/sap/fe/core/Synchronization-dbg.js +21 -31
  52. package/packages/sap.fe.core/src/sap/fe/core/Synchronization.js +1 -1
  53. package/packages/sap.fe.core/src/sap/fe/core/TemplateComponent-dbg.js +1 -1
  54. package/packages/sap.fe.core/src/sap/fe/core/TemplateComponent.ts +10 -3
  55. package/packages/sap.fe.core/src/sap/fe/core/TemplateModel-dbg.js +20 -38
  56. package/packages/sap.fe.core/src/sap/fe/core/TemplateModel.js +1 -1
  57. package/packages/sap.fe.core/src/sap/fe/core/TemplateModel.ts +1 -1
  58. package/packages/sap.fe.core/src/sap/fe/core/TransactionHelper-dbg.js +1354 -1370
  59. package/packages/sap.fe.core/src/sap/fe/core/TransactionHelper.js +1 -1
  60. package/packages/sap.fe.core/src/sap/fe/core/TransactionHelper.ts +33 -22
  61. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/ActivitySync-dbg.js +392 -0
  62. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/ActivitySync.js +5 -0
  63. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
  64. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/CollaborationCommon-dbg.js +136 -0
  65. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +5 -0
  66. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
  67. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/Manage-dbg.js +262 -0
  68. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/Manage.js +5 -0
  69. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
  70. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
  71. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  72. package/packages/sap.fe.core/src/sap/fe/core/actions/draft-dbg.js +30 -68
  73. package/packages/sap.fe.core/src/sap/fe/core/actions/draft.js +1 -1
  74. package/packages/sap.fe.core/src/sap/fe/core/actions/draft.ts +44 -71
  75. package/packages/sap.fe.core/src/sap/fe/core/actions/messageHandling-dbg.js +55 -36
  76. package/packages/sap.fe.core/src/sap/fe/core/actions/messageHandling.js +1 -1
  77. package/packages/sap.fe.core/src/sap/fe/core/actions/messageHandling.ts +66 -46
  78. package/packages/sap.fe.core/src/sap/fe/core/actions/operations-dbg.js +34 -15
  79. package/packages/sap.fe.core/src/sap/fe/core/actions/operations.js +1 -1
  80. package/packages/sap.fe.core/src/sap/fe/core/actions/operations.ts +48 -18
  81. package/packages/sap.fe.core/src/sap/fe/core/actions/sticky-dbg.js +17 -4
  82. package/packages/sap.fe.core/src/sap/fe/core/actions/sticky.js +1 -1
  83. package/packages/sap.fe.core/src/sap/fe/core/actions/sticky.ts +21 -4
  84. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata-dbg.js +69 -66
  85. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +2 -3
  86. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
  87. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +1593 -1669
  88. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/EditFlow.js +2 -3
  89. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
  90. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/IntentBasedNavigation-dbg.js +79 -54
  91. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +2 -3
  92. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
  93. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalEditFlow-dbg.js +718 -779
  94. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalEditFlow.js +2 -3
  95. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
  96. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +796 -816
  97. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +2 -3
  98. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
  99. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +1004 -1005
  100. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalRouting.js +2 -3
  101. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
  102. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/KPIManagement-dbg.js +487 -521
  103. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/KPIManagement.js +1 -1
  104. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -2
  105. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MassEdit-dbg.js +141 -169
  106. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MassEdit.js +2 -3
  107. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
  108. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MessageHandler-dbg.js +233 -244
  109. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -3
  110. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
  111. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/PageReady-dbg.js +301 -336
  112. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/PageReady.js +1 -1
  113. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/PageReady.ts +12 -10
  114. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Paginator-dbg.js +188 -175
  115. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Paginator.js +2 -3
  116. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
  117. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Placeholder-dbg.js +157 -149
  118. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Placeholder.js +2 -3
  119. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
  120. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Routing-dbg.js +144 -125
  121. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Routing.js +2 -3
  122. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
  123. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/RoutingListener-dbg.js +7 -6
  124. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/RoutingListener.js +2 -3
  125. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  126. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Share-dbg.js +230 -268
  127. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Share.js +2 -3
  128. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  129. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +592 -633
  130. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  131. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/SideEffects.ts +8 -7
  132. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ViewState-dbg.js +788 -806
  133. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ViewState.js +2 -3
  134. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
  135. package/packages/sap.fe.core/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -2
  136. package/packages/sap.fe.core/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  137. package/packages/sap.fe.core/src/sap/fe/core/controls/CommandExecution-dbg.js +67 -66
  138. package/packages/sap.fe.core/src/sap/fe/core/controls/CommandExecution.js +2 -3
  139. package/packages/sap.fe.core/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  140. package/packages/sap.fe.core/src/sap/fe/core/controls/ConditionalWrapper-dbg.js +90 -75
  141. package/packages/sap.fe.core/src/sap/fe/core/controls/ConditionalWrapper.js +2 -3
  142. package/packages/sap.fe.core/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
  143. package/packages/sap.fe.core/src/sap/fe/core/controls/CustomQuickViewPage-dbg.js +130 -125
  144. package/packages/sap.fe.core/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -3
  145. package/packages/sap.fe.core/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
  146. package/packages/sap.fe.core/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +103 -112
  147. package/packages/sap.fe.core/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +2 -3
  148. package/packages/sap.fe.core/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
  149. package/packages/sap.fe.core/src/sap/fe/core/controls/FieldWrapper-dbg.js +122 -135
  150. package/packages/sap.fe.core/src/sap/fe/core/controls/FieldWrapper.js +2 -3
  151. package/packages/sap.fe.core/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
  152. package/packages/sap.fe.core/src/sap/fe/core/controls/FilterBar-dbg.js +162 -159
  153. package/packages/sap.fe.core/src/sap/fe/core/controls/FilterBar.js +2 -3
  154. package/packages/sap.fe.core/src/sap/fe/core/controls/FilterBar.ts +143 -0
  155. package/packages/sap.fe.core/src/sap/fe/core/controls/FormElementWrapper-dbg.js +45 -39
  156. package/packages/sap.fe.core/src/sap/fe/core/controls/FormElementWrapper.js +2 -3
  157. package/packages/sap.fe.core/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
  158. package/packages/sap.fe.core/src/sap/fe/core/controls/MultiValueParameterDelegate-dbg.js +37 -42
  159. package/packages/sap.fe.core/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -2
  160. package/packages/sap.fe.core/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  161. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/FilterContainer-dbg.js +126 -116
  162. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/FilterContainer.js +2 -3
  163. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
  164. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +241 -255
  165. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilter.js +2 -3
  166. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
  167. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilterContainer-dbg.js +150 -141
  168. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +2 -3
  169. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  170. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +335 -322
  171. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +2 -3
  172. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  173. package/packages/sap.fe.core/src/sap/fe/core/controls/massEdit/MassEditHandlers-dbg.js +74 -74
  174. package/packages/sap.fe.core/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +2 -3
  175. package/packages/sap.fe.core/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
  176. package/packages/sap.fe.core/src/sap/fe/core/converters/ConverterContext-dbg.js +348 -379
  177. package/packages/sap.fe.core/src/sap/fe/core/converters/ConverterContext.js +1 -1
  178. package/packages/sap.fe.core/src/sap/fe/core/converters/ConverterContext.ts +19 -16
  179. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestSettings-dbg.js +12 -1
  180. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  181. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestSettings.ts +12 -1
  182. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestWrapper-dbg.js +354 -378
  183. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestWrapper.js +1 -1
  184. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestWrapper.ts +10 -0
  185. package/packages/sap.fe.core/src/sap/fe/core/converters/MetaModelConverter-dbg.js +6 -4
  186. package/packages/sap.fe.core/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
  187. package/packages/sap.fe.core/src/sap/fe/core/converters/MetaModelConverter.ts +5 -2
  188. package/packages/sap.fe.core/src/sap/fe/core/converters/TemplateConverter-dbg.js +1 -1
  189. package/packages/sap.fe.core/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
  190. package/packages/sap.fe.core/src/sap/fe/core/converters/annotations/DataField-dbg.js +26 -12
  191. package/packages/sap.fe.core/src/sap/fe/core/converters/annotations/DataField.js +1 -1
  192. package/packages/sap.fe.core/src/sap/fe/core/converters/annotations/DataField.ts +37 -13
  193. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Form-dbg.js +2 -2
  194. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Form.js +1 -1
  195. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Form.ts +4 -2
  196. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/KPI-dbg.js +1 -1
  197. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/KPI.ts +3 -2
  198. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Table-dbg.js +130 -23
  199. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Table.js +1 -1
  200. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Table.ts +134 -29
  201. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +118 -53
  202. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
  203. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +156 -93
  204. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +161 -207
  205. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
  206. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +148 -206
  207. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +115 -133
  208. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
  209. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/BindingHelper-dbg.js +20 -6
  210. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/BindingHelper.js +1 -1
  211. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  212. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/ConfigurableObject-dbg.js +12 -1
  213. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  214. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Key-dbg.js +42 -57
  215. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Key.js +1 -1
  216. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  217. package/packages/sap.fe.core/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction-dbg.js +25 -4
  218. package/packages/sap.fe.core/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
  219. package/packages/sap.fe.core/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +20 -3
  220. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +10 -4
  221. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ListReportConverter.js +1 -1
  222. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ListReportConverter.ts +15 -4
  223. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +7 -5
  224. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
  225. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
  226. package/packages/sap.fe.core/src/sap/fe/core/designtime/AppComponent-dbg.designtime.js +92 -98
  227. package/packages/sap.fe.core/src/sap/fe/core/designtime/AppComponent.designtime.js +2 -3
  228. package/packages/sap.fe.core/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  229. package/packages/sap.fe.core/src/sap/fe/core/designtime/library-preload.designtime.js +2 -3
  230. package/packages/sap.fe.core/src/sap/fe/core/designtime/library-preload.designtime.js.map +3 -3
  231. package/packages/sap.fe.core/src/sap/fe/core/formatters/CollaborationFormatter-dbg.js +104 -0
  232. package/packages/sap.fe.core/src/sap/fe/core/formatters/CollaborationFormatter.js +5 -0
  233. package/packages/sap.fe.core/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  234. package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatter-dbg.js +53 -2
  235. package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatter.js +1 -1
  236. package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatter.ts +51 -0
  237. package/packages/sap.fe.core/src/sap/fe/core/fpm/Component-dbg.js +50 -54
  238. package/packages/sap.fe.core/src/sap/fe/core/fpm/Component.js +2 -3
  239. package/packages/sap.fe.core/src/sap/fe/core/fpm/Component.ts +48 -0
  240. package/packages/sap.fe.core/src/sap/fe/core/fpm/manifest.json +2 -2
  241. package/packages/sap.fe.core/src/sap/fe/core/fpm/resources.json +7 -3
  242. package/packages/sap.fe.core/src/sap/fe/core/helpers/AppStartupHelper-dbg.js +323 -309
  243. package/packages/sap.fe.core/src/sap/fe/core/helpers/AppStartupHelper.js +1 -1
  244. package/packages/sap.fe.core/src/sap/fe/core/helpers/AppStartupHelper.ts +363 -337
  245. package/packages/sap.fe.core/src/sap/fe/core/helpers/BindingExpression-dbg.js +7 -7
  246. package/packages/sap.fe.core/src/sap/fe/core/helpers/BindingExpression.js +1 -1
  247. package/packages/sap.fe.core/src/sap/fe/core/helpers/BindingExpression.ts +7 -7
  248. package/packages/sap.fe.core/src/sap/fe/core/helpers/ClassSupport-dbg.js +186 -62
  249. package/packages/sap.fe.core/src/sap/fe/core/helpers/ClassSupport.js +1 -1
  250. package/packages/sap.fe.core/src/sap/fe/core/helpers/ClassSupport.ts +168 -52
  251. package/packages/sap.fe.core/src/sap/fe/core/helpers/DynamicAnnotationPathHelper-dbg.js +5 -4
  252. package/packages/sap.fe.core/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
  253. package/packages/sap.fe.core/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -5
  254. package/packages/sap.fe.core/src/sap/fe/core/helpers/FPMHelper-dbg.js +1 -1
  255. package/packages/sap.fe.core/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
  256. package/packages/sap.fe.core/src/sap/fe/core/helpers/MassEditHelper-dbg.js +601 -684
  257. package/packages/sap.fe.core/src/sap/fe/core/helpers/MassEditHelper.js +2 -3
  258. package/packages/sap.fe.core/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
  259. package/packages/sap.fe.core/src/sap/fe/core/helpers/ModelHelper-dbg.js +25 -1
  260. package/packages/sap.fe.core/src/sap/fe/core/helpers/ModelHelper.js +1 -1
  261. package/packages/sap.fe.core/src/sap/fe/core/helpers/ModelHelper.ts +23 -0
  262. package/packages/sap.fe.core/src/sap/fe/core/helpers/SemanticDateOperators-dbg.js +5 -1
  263. package/packages/sap.fe.core/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  264. package/packages/sap.fe.core/src/sap/fe/core/helpers/SemanticDateOperators.ts +4 -0
  265. package/packages/sap.fe.core/src/sap/fe/core/library-dbg.js +426 -451
  266. package/packages/sap.fe.core/src/sap/fe/core/library-h2-preload.js +36 -32
  267. package/packages/sap.fe.core/src/sap/fe/core/library-h2-preload.js.map +3 -3
  268. package/packages/sap.fe.core/src/sap/fe/core/library-preload.js +644 -738
  269. package/packages/sap.fe.core/src/sap/fe/core/library-preload.js.map +4 -4
  270. package/packages/sap.fe.core/src/sap/fe/core/library-preload.support.js +24 -35
  271. package/packages/sap.fe.core/src/sap/fe/core/library-preload.support.js.map +2 -2
  272. package/packages/sap.fe.core/src/sap/fe/core/library.js +2 -3
  273. package/packages/sap.fe.core/src/sap/fe/core/library.support.js +22 -33
  274. package/packages/sap.fe.core/src/sap/fe/core/library.support.ts +23 -0
  275. package/packages/sap.fe.core/src/sap/fe/core/library.ts +420 -0
  276. package/packages/sap.fe.core/src/sap/fe/core/manifest.json +10 -10
  277. package/packages/sap.fe.core/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +5 -3
  278. package/packages/sap.fe.core/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  279. package/packages/sap.fe.core/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +4 -1
  280. package/packages/sap.fe.core/src/sap/fe/core/messagebundle.properties +22 -5
  281. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ar.properties +27 -7
  282. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_bg.properties +27 -7
  283. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ca.properties +27 -7
  284. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_cs.properties +27 -7
  285. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_cy.properties +27 -7
  286. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_da.properties +27 -7
  287. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_de.properties +27 -7
  288. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_el.properties +27 -7
  289. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en.properties +27 -7
  290. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_GB.properties +27 -7
  291. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_US_sappsd.properties +27 -7
  292. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_US_saprigi.properties +27 -7
  293. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_US_saptrc.properties +27 -7
  294. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_es.properties +27 -7
  295. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_es_MX.properties +27 -7
  296. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_et.properties +27 -7
  297. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_fi.properties +28 -8
  298. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_fr.properties +28 -8
  299. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_fr_CA.properties +29 -9
  300. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_hi.properties +27 -7
  301. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_hr.properties +27 -7
  302. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_hu.properties +27 -7
  303. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_id.properties +27 -7
  304. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_it.properties +27 -7
  305. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_iw.properties +27 -7
  306. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ja.properties +26 -6
  307. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_kk.properties +27 -7
  308. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ko.properties +27 -7
  309. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_lt.properties +27 -7
  310. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_lv.properties +28 -8
  311. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ms.properties +27 -7
  312. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_nl.properties +27 -7
  313. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_no.properties +27 -7
  314. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_pl.properties +27 -7
  315. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_pt.properties +28 -8
  316. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_pt_PT.properties +27 -7
  317. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ro.properties +27 -7
  318. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ru.properties +27 -7
  319. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sh.properties +27 -7
  320. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sk.properties +27 -7
  321. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sl.properties +27 -7
  322. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sv.properties +27 -7
  323. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_th.properties +26 -6
  324. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_tr.properties +30 -10
  325. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_uk.properties +27 -7
  326. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_vi.properties +27 -7
  327. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_zh_CN.properties +27 -7
  328. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_zh_TW.properties +27 -7
  329. package/packages/sap.fe.core/src/sap/fe/core/resources.json +745 -384
  330. package/packages/sap.fe.core/src/sap/fe/core/services/AsyncComponentServiceFactory-dbg.js +45 -71
  331. package/packages/sap.fe.core/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
  332. package/packages/sap.fe.core/src/sap/fe/core/services/CacheHandlerServiceFactory-dbg.js +154 -192
  333. package/packages/sap.fe.core/src/sap/fe/core/services/CacheHandlerServiceFactory.js +1 -1
  334. package/packages/sap.fe.core/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +4 -4
  335. package/packages/sap.fe.core/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +66 -92
  336. package/packages/sap.fe.core/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  337. package/packages/sap.fe.core/src/sap/fe/core/services/EnvironmentServiceFactory.ts +1 -1
  338. package/packages/sap.fe.core/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +284 -339
  339. package/packages/sap.fe.core/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
  340. package/packages/sap.fe.core/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -13
  341. package/packages/sap.fe.core/src/sap/fe/core/services/ResourceModelServiceFactory-dbg.js +67 -102
  342. package/packages/sap.fe.core/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
  343. package/packages/sap.fe.core/src/sap/fe/core/services/ResourceModelServiceFactory.ts +5 -2
  344. package/packages/sap.fe.core/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +754 -814
  345. package/packages/sap.fe.core/src/sap/fe/core/services/RoutingServiceFactory.js +1 -1
  346. package/packages/sap.fe.core/src/sap/fe/core/services/RoutingServiceFactory.ts +13 -13
  347. package/packages/sap.fe.core/src/sap/fe/core/services/ShellServicesFactory-dbg.js +649 -736
  348. package/packages/sap.fe.core/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
  349. package/packages/sap.fe.core/src/sap/fe/core/services/ShellServicesFactory.ts +7 -4
  350. package/packages/sap.fe.core/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +567 -592
  351. package/packages/sap.fe.core/src/sap/fe/core/services/SideEffectsServiceFactory.js +1 -1
  352. package/packages/sap.fe.core/src/sap/fe/core/services/SideEffectsServiceFactory.ts +22 -3
  353. package/packages/sap.fe.core/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +354 -386
  354. package/packages/sap.fe.core/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
  355. package/packages/sap.fe.core/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +21 -14
  356. package/packages/sap.fe.core/src/sap/fe/core/services/view/TemplatingErrorPage-dbg.controller.js +1 -1
  357. package/packages/sap.fe.core/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
  358. package/packages/sap.fe.core/src/sap/fe/core/support/CommonHelper-dbg.js +1 -1
  359. package/packages/sap.fe.core/src/sap/fe/core/support/CommonHelper.ts +1 -1
  360. package/packages/sap.fe.core/src/sap/fe/core/support/Diagnostics-dbg.js +36 -48
  361. package/packages/sap.fe.core/src/sap/fe/core/support/Diagnostics.js +1 -1
  362. package/packages/sap.fe.core/src/sap/fe/core/templating/DataModelPathHelper-dbg.js +93 -85
  363. package/packages/sap.fe.core/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
  364. package/packages/sap.fe.core/src/sap/fe/core/templating/DataModelPathHelper.ts +104 -95
  365. package/packages/sap.fe.core/src/sap/fe/core/templating/FilterHelper-dbg.js +25 -32
  366. package/packages/sap.fe.core/src/sap/fe/core/templating/FilterHelper.js +1 -1
  367. package/packages/sap.fe.core/src/sap/fe/core/templating/FilterHelper.ts +36 -35
  368. package/packages/sap.fe.core/src/sap/fe/core/templating/PropertyHelper-dbg.js +2 -2
  369. package/packages/sap.fe.core/src/sap/fe/core/templating/PropertyHelper.js +1 -1
  370. package/packages/sap.fe.core/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
  371. package/packages/sap.fe.core/src/sap/fe/core/templating/UIFormatters-dbg.js +32 -26
  372. package/packages/sap.fe.core/src/sap/fe/core/templating/UIFormatters.js +1 -1
  373. package/packages/sap.fe.core/src/sap/fe/core/templating/UIFormatters.ts +37 -24
  374. package/packages/sap.fe.core/test/sap/fe/core/designtime/api.json +1664 -1
  375. package/packages/sap.fe.core/test/sap/fe/core/designtime/apiref/api.json +1 -1
  376. package/packages/sap.fe.core/test/sap/fe/core/designtime/codeassistance/Library.jsmeta.json +1 -1
  377. package/packages/sap.fe.core/test/sap/fe/core/designtime/codeassistance/Library.jstemplates.json +1 -1
  378. package/packages/sap.fe.core/test/sap/fe/core/designtime/codeassistance/Library.xmlmeta.json +1 -1
  379. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/model/MacroNavigationModel.js +59 -0
  380. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldDisplay/localService/RootEntity.json +1 -1
  381. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/Component.js +33 -0
  382. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/FieldMessages.controller.js +34 -0
  383. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/FieldMessages.view.xml +18 -0
  384. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/localService/Entities.json +6 -0
  385. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/localService/service.cds +6 -0
  386. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/manifest.json +68 -0
  387. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/fieldMessages.html +37 -0
  388. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/filterBar/filterBarSVandAnnotationDefaults/FilterBarSVandAnnotationDefaults.controller.js +1 -0
  389. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/Page.controller.js +7 -2
  390. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/Page.view.xml +9 -3
  391. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/localService/RootEntity.js +23 -0
  392. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/localService/RootEntity.ts +11 -0
  393. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/localService/service.cds +11 -23
  394. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/Component.js +40 -0
  395. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/TableMessages.controller.js +35 -0
  396. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/TableMessages.view.xml +21 -0
  397. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/localService/RootEntity.json +82 -0
  398. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/localService/service.cds +82 -0
  399. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/manifest.json +78 -0
  400. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/tableMessages.html +37 -0
  401. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/basicExtensibility/localService/ChildEntity.json +5 -4
  402. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customColumn/customColumnContent/manifest.json +3 -0
  403. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/view/App.view.xml +1 -1
  404. package/packages/sap.fe.core/test/sap/fe/core/jest/AnnotationHelper.spec.js +1 -169
  405. package/packages/sap.fe.core/test/sap/fe/core/jest/AnnotationHelper.spec.ts +0 -212
  406. package/packages/sap.fe.core/test/sap/fe/core/jest/CommonUtils.spec.js +2305 -119
  407. package/packages/sap.fe.core/test/sap/fe/core/jest/CommonUtils.spec.ts +2206 -67
  408. package/packages/sap.fe.core/test/sap/fe/core/jest/FilterUtils.spec.js +40 -0
  409. package/packages/sap.fe.core/test/sap/fe/core/jest/FilterUtils.spec.ts +34 -0
  410. package/packages/sap.fe.core/test/sap/fe/core/jest/FlexibleColumnLayout.spec.js +114 -0
  411. package/packages/sap.fe.core/test/sap/fe/core/jest/FlexibleColumnLayout.spec.ts +114 -0
  412. package/packages/sap.fe.core/test/sap/fe/core/jest/Paginators.spec.js +113 -0
  413. package/packages/sap.fe.core/test/sap/fe/core/jest/Paginators.spec.ts +78 -0
  414. package/packages/sap.fe.core/test/sap/fe/core/jest/RouterProxy.spec.js +599 -1
  415. package/packages/sap.fe.core/test/sap/fe/core/jest/RouterProxy.spec.ts +614 -0
  416. package/packages/sap.fe.core/test/sap/fe/core/jest/TemplateConverter.spec.js +23 -5
  417. package/packages/sap.fe.core/test/sap/fe/core/jest/TemplateConverter.spec.ts +26 -14
  418. package/packages/sap.fe.core/test/sap/fe/core/jest/TransactionHelper.spec.js +87 -1
  419. package/packages/sap.fe.core/test/sap/fe/core/jest/TransactionHelper.spec.ts +82 -1
  420. package/packages/sap.fe.core/test/sap/fe/core/jest/VisualFilterUtils.spec.js +124 -0
  421. package/packages/sap.fe.core/test/sap/fe/core/jest/VisualFilterUtils.spec.ts +141 -0
  422. package/packages/sap.fe.core/test/sap/fe/core/jest/__snapshots__/TemplateConverter.spec.ts.snap +34768 -67
  423. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/ActivitySync.spec.js +170 -0
  424. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/ActivitySync.spec.ts +155 -0
  425. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/CollaborationCommon.spec.js +101 -0
  426. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/CollaborationCommon.spec.ts +94 -0
  427. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/Manage.spec.js +82 -0
  428. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/Manage.spec.ts +77 -0
  429. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/draft.spec.js +2 -2
  430. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/draft.spec.ts +1 -1
  431. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/messageHandling.spec.js +7 -2
  432. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/messageHandling.spec.ts +7 -0
  433. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/operations.spec.js +104 -2
  434. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/operations.spec.ts +96 -1
  435. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/sticky.spec.js +83 -0
  436. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/sticky.spec.ts +79 -0
  437. package/packages/sap.fe.core/test/sap/fe/core/jest/appcomponent.spec.js +72 -0
  438. package/packages/sap.fe.core/test/sap/fe/core/jest/appcomponent.spec.ts +64 -0
  439. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/EditFlow.spec.js +619 -3
  440. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/EditFlow.spec.ts +668 -5
  441. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalEditFlow.spec.js +297 -1
  442. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalEditFlow.spec.ts +276 -6
  443. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalIntentBasedNavigation.spec.js +149 -0
  444. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalIntentBasedNavigation.spec.ts +142 -0
  445. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalRouting.spec.js +776 -182
  446. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalRouting.spec.ts +181 -3
  447. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/KPIManagement.spec.js +19 -43
  448. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MassEdit.spec.js +2 -18
  449. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MassEdit.spec.ts +8 -6
  450. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MessageHandler.spec.js +5 -27
  451. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MessageHandler.spec.ts +1 -1
  452. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/Routing.spec.js +1 -1
  453. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/Routing.spec.ts +1 -1
  454. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/Share.spec.js +86 -0
  455. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/Share.spec.ts +80 -0
  456. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/SideEffects.spec.js +1 -1
  457. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/SideEffects.spec.ts +1 -1
  458. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/ViewState.spec.js +2 -18
  459. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/ViewState.spec.ts +1 -1
  460. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/DataLossOrDraftDiscardHandler.spec.js +45 -0
  461. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/DataLossOrDraftDiscardHandler.spec.ts +29 -0
  462. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/FilterBar.spec.js +51 -1
  463. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/FilterBar.spec.ts +47 -1
  464. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/__snapshots__/FilterBar.spec.ts.snap +3 -0
  465. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ConverterContext.spec.js +2 -2
  466. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ConverterContext.spec.ts +1 -1
  467. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Filter.spec.js +25 -36
  468. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Filter.spec.ts +26 -36
  469. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ListReportConverter.spec.js +3 -3
  470. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ListReportConverter.spec.ts +2 -2
  471. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/MetaModelConverter.spec.js +1 -1
  472. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/MetaModelConverter.spec.ts +6 -5
  473. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Table.spec.js +133 -9
  474. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Table.spec.ts +171 -8
  475. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/TableStandardActions.spec.js +174 -210
  476. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/TableStandardActions.spec.ts +294 -230
  477. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/__snapshots__/Filter.spec.ts.snap +3 -1
  478. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/Chart.spec.js +237 -0
  479. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/Chart.spec.ts +246 -0
  480. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/DataVisualization.spec.js +9993 -0
  481. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/DataVisualization.spec.ts +11352 -0
  482. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/Table.spec.js +460 -0
  483. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/Table.spec.ts +543 -0
  484. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/TableAnalytics.spec.js +616 -0
  485. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/TableAnalytics.spec.ts +711 -0
  486. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/manifest.json +887 -0
  487. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/objectPage/HeaderAndFooterAction.spec.js +393 -0
  488. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/objectPage/HeaderAndFooterAction.spec.ts +434 -0
  489. package/packages/sap.fe.core/test/sap/fe/core/jest/data/DataConverter.js +31 -0
  490. package/packages/sap.fe.core/test/sap/fe/core/jest/data/DataConverter.ts +12 -0
  491. package/packages/sap.fe.core/test/sap/fe/core/jest/data/Filter.cds +27 -0
  492. package/packages/sap.fe.core/test/sap/fe/core/jest/data/MassEditHelper.cds +12 -0
  493. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/manifest.json +150 -0
  494. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/metadata.xml +365 -0
  495. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/metadata_groupable_options.xml +96 -0
  496. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/metadata_textArrangement.xml +102 -0
  497. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/metadata_withPV.xml +359 -0
  498. package/packages/sap.fe.core/test/sap/fe/core/jest/data/Table.cds +89 -27
  499. package/packages/sap.fe.core/test/sap/fe/core/jest/data/TemplatingTestData.js +421 -0
  500. package/packages/sap.fe.core/test/sap/fe/core/jest/data/TemplatingTestData.ts +413 -0
  501. package/packages/sap.fe.core/test/sap/fe/core/jest/data/aggregatedSD/metadata.xml +3767 -0
  502. package/packages/sap.fe.core/test/sap/fe/core/jest/data/dsr/manifest.json +185 -0
  503. package/packages/sap.fe.core/test/sap/fe/core/jest/data/dsr/metadata.xml +1534 -0
  504. package/packages/sap.fe.core/test/sap/fe/core/jest/data/manifest.json +887 -0
  505. package/packages/sap.fe.core/test/sap/fe/core/jest/data/salesOrderMetadata_qunit.xml +4995 -0
  506. package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/CollaborationFormatters.spec.js +48 -0
  507. package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/CollaborationFormatters.spec.ts +48 -0
  508. package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/TableFormatters.spec.js +131 -51
  509. package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/TableFormatters.spec.ts +81 -31
  510. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/AppStartupHelper.spec.js +13 -7
  511. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/AppStartupHelper.spec.ts +12 -6
  512. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/MassEditHelper.spec.js +17 -3
  513. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/MassEditHelper.spec.ts +24 -7
  514. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/ModelHelper.spec.js +61 -1
  515. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/ModelHelper.spec.ts +59 -0
  516. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/PasteHelper.spec.js +3 -3
  517. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/PasteHelper.spec.ts +1 -2
  518. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/SemanticDateOperators.spec.js +4 -4
  519. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/SemanticDateOperators.spec.ts +6 -3
  520. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/StableIdHelper.spec.js +1 -1
  521. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/StableIdHelper.spec.ts +1 -1
  522. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/__snapshots__/AppStartupHelper.spec.ts.snap +19 -0
  523. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/__snapshots__/MassEditHelper.spec.ts.snap +0 -73
  524. package/packages/sap.fe.core/test/sap/fe/core/jest/manifestmerger/ChangePageConfiguration.spec.js +11 -1
  525. package/packages/sap.fe.core/test/sap/fe/core/jest/manifestmerger/ChangePageConfiguration.spec.ts +15 -0
  526. package/packages/sap.fe.core/test/sap/fe/core/jest/manifestmerger/__snapshots__/ChangePageConfiguration.spec.ts.snap +30 -0
  527. package/packages/sap.fe.core/test/sap/fe/core/jest/services/SideEffectsService.spec.js +49 -5
  528. package/packages/sap.fe.core/test/sap/fe/core/jest/services/SideEffectsService.spec.ts +60 -5
  529. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/DataModelPathHelper.spec.js +384 -0
  530. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/DataModelPathHelper.spec.ts +427 -0
  531. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/PropertyHelper.spec.js +132 -2
  532. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/PropertyHelper.spec.ts +156 -2
  533. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/UIFormatters.spec.js +273 -0
  534. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/UIFormatters.spec.ts +402 -0
  535. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/ValueHelpTemplating.spec.js +45 -0
  536. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/ValueHelpTemplating.spec.ts +40 -0
  537. package/packages/sap.fe.core/test/sap/fe/core/qunit/TemplatingExpressions.qunit.js +2 -1
  538. package/packages/sap.fe.core/test/sap/fe/core/qunit/apps/generalTests.json +0 -102
  539. package/packages/sap.fe.core/test/sap/fe/core/relnotes/changes-1.100.json +326 -0
  540. package/packages/sap.fe.core/test/sap/fe/core/relnotes/changes-1.99.json +0 -22
  541. package/packages/sap.fe.macros/src/sap/fe/macros/.library +1 -1
  542. package/packages/sap.fe.macros/src/sap/fe/macros/.theming +1 -1
  543. package/packages/sap.fe.macros/src/sap/fe/macros/Chart.metadata-dbg.js +2 -2
  544. package/packages/sap.fe.macros/src/sap/fe/macros/Chart.metadata.js +1 -1
  545. package/packages/sap.fe.macros/src/sap/fe/macros/ChartAPI-dbg.js +22 -43
  546. package/packages/sap.fe.macros/src/sap/fe/macros/ChartAPI.js +1 -1
  547. package/packages/sap.fe.macros/src/sap/fe/macros/ChartAPI.ts +3 -3
  548. package/packages/sap.fe.macros/src/sap/fe/macros/ChartDelegate-dbg.js +14 -24
  549. package/packages/sap.fe.macros/src/sap/fe/macros/ChartDelegate.js +1 -1
  550. package/packages/sap.fe.macros/src/sap/fe/macros/CommonHelper-dbg.js +1 -1
  551. package/packages/sap.fe.macros/src/sap/fe/macros/DraftIndicator.fragment.xml +3 -2
  552. package/packages/sap.fe.macros/src/sap/fe/macros/Field.fragment.xml +16 -18
  553. package/packages/sap.fe.macros/src/sap/fe/macros/FieldAPI-dbg.js +162 -100
  554. package/packages/sap.fe.macros/src/sap/fe/macros/FieldAPI.js +1 -1
  555. package/packages/sap.fe.macros/src/sap/fe/macros/FieldAPI.ts +93 -16
  556. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBar.fragment.xml +2 -1
  557. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBar.metadata-dbg.js +16 -8
  558. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBar.metadata.js +1 -1
  559. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarAPI-dbg.js +58 -83
  560. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarAPI.js +1 -1
  561. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarAPI.ts +16 -2
  562. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarDelegate-dbg.js +112 -192
  563. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarDelegate.js +1 -1
  564. package/packages/sap.fe.macros/src/sap/fe/macros/Form.metadata-dbg.js +1 -1
  565. package/packages/sap.fe.macros/src/sap/fe/macros/Form.metadata.js +1 -1
  566. package/packages/sap.fe.macros/src/sap/fe/macros/FormAPI-dbg.js +4 -20
  567. package/packages/sap.fe.macros/src/sap/fe/macros/FormAPI.js +1 -1
  568. package/packages/sap.fe.macros/src/sap/fe/macros/FormContainer.fragment.xml +1 -1
  569. package/packages/sap.fe.macros/src/sap/fe/macros/FormContainerAPI-dbg.js +10 -31
  570. package/packages/sap.fe.macros/src/sap/fe/macros/FormContainerAPI.js +1 -1
  571. package/packages/sap.fe.macros/src/sap/fe/macros/MacroAPI-dbg.js +147 -162
  572. package/packages/sap.fe.macros/src/sap/fe/macros/MacroAPI.js +1 -1
  573. package/packages/sap.fe.macros/src/sap/fe/macros/MacroAPI.ts +32 -8
  574. package/packages/sap.fe.macros/src/sap/fe/macros/MacroMetadata-dbg.js +5 -0
  575. package/packages/sap.fe.macros/src/sap/fe/macros/MacroMetadata.js +1 -1
  576. package/packages/sap.fe.macros/src/sap/fe/macros/PhantomUtil-dbg.js +56 -74
  577. package/packages/sap.fe.macros/src/sap/fe/macros/PhantomUtil.js +1 -1
  578. package/packages/sap.fe.macros/src/sap/fe/macros/Table.fragment.xml +1 -1
  579. package/packages/sap.fe.macros/src/sap/fe/macros/Table.metadata-dbg.js +90 -39
  580. package/packages/sap.fe.macros/src/sap/fe/macros/Table.metadata.js +1 -1
  581. package/packages/sap.fe.macros/src/sap/fe/macros/TableAPI-dbg.js +284 -251
  582. package/packages/sap.fe.macros/src/sap/fe/macros/TableAPI.js +1 -1
  583. package/packages/sap.fe.macros/src/sap/fe/macros/TableAPI.ts +126 -14
  584. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldHelper-dbg.js +38 -101
  585. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldHelper.js +1 -1
  586. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldRuntime-dbg.js +68 -6
  587. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldRuntime.js +1 -1
  588. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldTemplating-dbg.js +72 -12
  589. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldTemplating.js +1 -1
  590. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldTemplating.ts +67 -10
  591. package/packages/sap.fe.macros/src/sap/fe/macros/field/QuickViewLinkDelegate-dbg.js +5 -12
  592. package/packages/sap.fe.macros/src/sap/fe/macros/field/QuickViewLinkDelegate.js +1 -1
  593. package/packages/sap.fe.macros/src/sap/fe/macros/filter/DraftEditState.fragment.xml +1 -1
  594. package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterFieldHelper-dbg.js +1 -3
  595. package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterFieldHelper.js +1 -1
  596. package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterUtils-dbg.js +62 -39
  597. package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterUtils.js +1 -1
  598. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/MultiValue-dbg.js +104 -50
  599. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/MultiValue.js +2 -3
  600. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/MultiValue.ts +68 -0
  601. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Range-dbg.js +83 -35
  602. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Range.js +2 -3
  603. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Range.ts +66 -0
  604. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Value-dbg.js +327 -216
  605. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Value.js +2 -3
  606. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Value.ts +303 -0
  607. package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollaborationAvatar.fragment.xml +15 -0
  608. package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollectionField.metadata-dbg.js +14 -2
  609. package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollectionField.metadata.js +1 -1
  610. package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollectionField.metadata.ts +18 -2
  611. package/packages/sap.fe.macros/src/sap/fe/macros/internal/DataPoint.fragment.xml +12 -29
  612. package/packages/sap.fe.macros/src/sap/fe/macros/internal/DataPoint.metadata-dbg.js +9 -0
  613. package/packages/sap.fe.macros/src/sap/fe/macros/internal/DataPoint.metadata.js +1 -1
  614. package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.fragment.xml +1 -0
  615. package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.metadata-dbg.js +529 -533
  616. package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.metadata.js +2 -3
  617. package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.metadata.ts +568 -0
  618. package/packages/sap.fe.macros/src/sap/fe/macros/internal/FilterField.fragment.xml +0 -1
  619. package/packages/sap.fe.macros/src/sap/fe/macros/internal/SituationsIndicator-dbg.js +3 -3
  620. package/packages/sap.fe.macros/src/sap/fe/macros/internal/SituationsIndicator.js +1 -1
  621. package/packages/sap.fe.macros/src/sap/fe/macros/internal/SituationsIndicator.ts +3 -2
  622. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/FieldContent.fragment.xml +3 -1
  623. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/FieldStructure.fragment.xml +13 -3
  624. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/DataPoint.fragment.xml +4 -1
  625. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/ExpandableText.fragment.xml +1 -0
  626. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/LabelSemanticKey.fragment.xml +1 -0
  627. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/Link.fragment.xml +38 -4
  628. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/LinkWithQuickViewForm.fragment.xml +2 -2
  629. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/LinkWrapper.fragment.xml +3 -3
  630. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/MdcFieldWithValueHelp.fragment.xml +1 -2
  631. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/ObjectIdentifier.fragment.xml +55 -11
  632. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/SemanticKeyWithDraftIndicator.fragment.xml +1 -1
  633. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/Text.fragment.xml +3 -3
  634. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/DatePicker.fragment.xml +9 -2
  635. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/DateTimePicker.fragment.xml +9 -2
  636. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/Input.fragment.xml +12 -3
  637. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/InputWithUnit.fragment.xml +26 -5
  638. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/InputWithValueHelp.fragment.xml +10 -2
  639. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/RatingIndicator.fragment.xml +9 -2
  640. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/TimePicker.fragment.xml +9 -2
  641. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/fragments/ObjectIdentifierContent.fragment.xml +4 -0
  642. package/packages/sap.fe.macros/src/sap/fe/macros/internal/helpers/DataPointTemplating-dbg.js +31 -2
  643. package/packages/sap.fe.macros/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +1 -1
  644. package/packages/sap.fe.macros/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +20 -0
  645. package/packages/sap.fe.macros/src/sap/fe/macros/internal/situations/Runtime-dbg.js +2 -2
  646. package/packages/sap.fe.macros/src/sap/fe/macros/internal/situations/Runtime.js +1 -1
  647. package/packages/sap.fe.macros/src/sap/fe/macros/internal/situations/Runtime.ts +7 -9
  648. package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueListHelper-dbg.js +90 -118
  649. package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +1 -1
  650. package/packages/sap.fe.macros/src/sap/fe/macros/library-dbg.js +1 -1
  651. package/packages/sap.fe.macros/src/sap/fe/macros/library-h2-preload.js +13 -12
  652. package/packages/sap.fe.macros/src/sap/fe/macros/library-h2-preload.js.map +2 -2
  653. package/packages/sap.fe.macros/src/sap/fe/macros/library-preload.js +185 -214
  654. package/packages/sap.fe.macros/src/sap/fe/macros/library-preload.js.map +4 -4
  655. package/packages/sap.fe.macros/src/sap/fe/macros/library.js +1 -1
  656. package/packages/sap.fe.macros/src/sap/fe/macros/manifest.json +9 -9
  657. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle.properties +4 -1
  658. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ar.properties +3 -1
  659. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_bg.properties +3 -1
  660. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ca.properties +3 -1
  661. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_cs.properties +3 -1
  662. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_cy.properties +3 -1
  663. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_da.properties +3 -1
  664. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_de.properties +4 -2
  665. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_el.properties +3 -1
  666. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en.properties +3 -1
  667. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_GB.properties +3 -1
  668. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_US_sappsd.properties +3 -1
  669. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +3 -1
  670. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_US_saptrc.properties +3 -1
  671. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_es.properties +3 -1
  672. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_es_MX.properties +3 -1
  673. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_et.properties +3 -1
  674. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_fi.properties +3 -1
  675. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_fr.properties +3 -1
  676. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_fr_CA.properties +3 -1
  677. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_hi.properties +3 -1
  678. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_hr.properties +3 -1
  679. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_hu.properties +4 -2
  680. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_id.properties +4 -2
  681. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_it.properties +3 -1
  682. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_iw.properties +3 -1
  683. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ja.properties +3 -1
  684. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_kk.properties +3 -1
  685. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ko.properties +3 -1
  686. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_lt.properties +3 -1
  687. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_lv.properties +3 -1
  688. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ms.properties +3 -1
  689. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_nl.properties +3 -1
  690. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_no.properties +3 -1
  691. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_pl.properties +3 -1
  692. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_pt.properties +3 -1
  693. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_pt_PT.properties +3 -1
  694. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ro.properties +3 -1
  695. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ru.properties +3 -1
  696. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sh.properties +3 -1
  697. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sk.properties +3 -1
  698. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sl.properties +3 -1
  699. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sv.properties +3 -1
  700. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_th.properties +3 -1
  701. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_tr.properties +3 -1
  702. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_uk.properties +3 -1
  703. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_vi.properties +3 -1
  704. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_zh_CN.properties +3 -1
  705. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_zh_TW.properties +3 -1
  706. package/packages/sap.fe.macros/src/sap/fe/macros/resources.json +273 -199
  707. package/packages/sap.fe.macros/src/sap/fe/macros/table/Actions.fragment.xml +1 -1
  708. package/packages/sap.fe.macros/src/sap/fe/macros/table/Column.fragment.xml +1 -1
  709. package/packages/sap.fe.macros/src/sap/fe/macros/table/ColumnContent.fragment.xml +2 -0
  710. package/packages/sap.fe.macros/src/sap/fe/macros/table/CreationRow.fragment.xml +13 -20
  711. package/packages/sap.fe.macros/src/sap/fe/macros/table/CustomColumn.fragment.xml +1 -0
  712. package/packages/sap.fe.macros/src/sap/fe/macros/table/TableHelper-dbg.js +5 -110
  713. package/packages/sap.fe.macros/src/sap/fe/macros/table/TableHelper.js +1 -1
  714. package/packages/sap.fe.macros/src/sap/fe/macros/table/delegates/TableDelegate-dbg.js +98 -78
  715. package/packages/sap.fe.macros/src/sap/fe/macros/table/delegates/TableDelegate.js +1 -1
  716. package/packages/sap.fe.macros/src/sap/fe/macros/valuehelp/ValueHelpFilterBar.metadata-dbg.js +1 -1
  717. package/packages/sap.fe.macros/src/sap/fe/macros/valuehelp/ValueHelpFilterBar.metadata.js +1 -1
  718. package/packages/sap.fe.macros/test/sap/fe/macros/designtime/api.json +211 -10
  719. package/packages/sap.fe.macros/test/sap/fe/macros/designtime/apiref/api.json +1 -1
  720. package/packages/sap.fe.macros/test/sap/fe/macros/designtime/codeassistance/Library.jsmeta.json +1 -1
  721. package/packages/sap.fe.macros/test/sap/fe/macros/designtime/codeassistance/Library.xmlmeta.json +1 -1
  722. package/packages/sap.fe.macros/test/sap/fe/macros/jest/ChartDelegate.spec.js +1 -45
  723. package/packages/sap.fe.macros/test/sap/fe/macros/jest/ChartDelegate.spec.ts +0 -60
  724. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldAPI.spec.js +78 -0
  725. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldAPI.spec.ts +71 -0
  726. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldMacroDataFieldTypes.spec.js +35 -1
  727. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldMacroDataFieldTypes.spec.ts +44 -0
  728. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterBarDelegate.spec.js +0 -76
  729. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterBarMacro.spec.js +27 -1
  730. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterBarMacro.spec.ts +28 -0
  731. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterFieldHelper.spec.js +10 -12
  732. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterFieldHelper.spec.ts +10 -10
  733. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterUtils.spec.js +129 -15
  734. package/packages/sap.fe.macros/test/sap/fe/macros/jest/MacroAPI.spec.js +13 -39
  735. package/packages/sap.fe.macros/test/sap/fe/macros/jest/MacroAPI.spec.ts +2 -2
  736. package/packages/sap.fe.macros/test/sap/fe/macros/jest/RetrieveTextFromValueList.spec.js +119 -0
  737. package/packages/sap.fe.macros/test/sap/fe/macros/jest/RetrieveTextFromValueList.spec.ts +113 -0
  738. package/packages/sap.fe.macros/test/sap/fe/macros/jest/Table.spec.js +166 -2
  739. package/packages/sap.fe.macros/test/sap/fe/macros/jest/Table.spec.ts +190 -3
  740. package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableAPI.spec.js +457 -389
  741. package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableAPI.spec.ts +504 -425
  742. package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableMacro.spec.js +104 -2
  743. package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableMacro.spec.ts +158 -1
  744. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/ChartDelegate.spec.ts.snap +0 -6
  745. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/DatapointMacro.spec.ts.snap +5 -5
  746. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FieldMacroDataFieldTypes.spec.ts.snap +114 -25
  747. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FieldMacroWithSemanticKey.spec.ts.snap +40 -40
  748. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FieldMacroWithValueHelp.spec.ts.snap +4 -8
  749. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FilterBarMacro.spec.ts.snap +19 -19
  750. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FilterField.spec.ts.snap +3 -5
  751. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/QuickViewForm.spec.ts.snap +12 -0
  752. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/SimpleFieldMacro.spec.ts.snap +89 -90
  753. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/Table.spec.ts.snap +1314 -58
  754. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/TableMacro.spec.ts.snap +459 -0
  755. package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/FieldMacroDataFieldTypes.cds +18 -2
  756. package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/QuickViewForm.cds +6 -1
  757. package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/Table.cds +107 -106
  758. package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/TableAPI.cds +197 -0
  759. package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldRuntime.spec.js +33 -4
  760. package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldRuntime.spec.ts +30 -4
  761. package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldTemplating.spec.js +72 -29
  762. package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldTemplating.spec.ts +86 -18
  763. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/__snapshots__/columnWidth.spec.ts.snap +51 -27
  764. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/columnWidth.spec.js +55 -9
  765. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/columnWidth.spec.ts +46 -6
  766. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/data/columnWidth.cds +28 -1
  767. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/delegates/TableDelegate.spec.js +170 -43
  768. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/delegates/TableDelegate.spec.ts +131 -15
  769. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/delegates/__snapshots__/TableDelegate.spec.ts.snap +90 -53
  770. package/packages/sap.fe.macros/test/sap/fe/macros/jest/tsx/TestTSX.spec.tsx +2 -1
  771. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/index.json +0 -5
  772. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FieldHelper.qunit.js +1 -99
  773. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FormElementTemplating.qunit.js +1 -1
  774. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/MacroMetadata.qunit.js +4 -4
  775. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/TableHelper.qunit.js +4 -4
  776. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/ValueHelpTemplating.qunit.js +15 -0
  777. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/ValueListHelper.qunit.js +265 -106
  778. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/metadata/simpleMetadata.js +38 -0
  779. package/packages/sap.fe.macros/test/sap/fe/macros/relnotes/changes-1.100.json +372 -0
  780. package/packages/sap.fe.macros/test/sap/fe/macros/relnotes/changes-1.99.json +0 -11
  781. package/packages/sap.fe.navigation/src/sap/fe/navigation/.library +1 -1
  782. package/packages/sap.fe.navigation/src/sap/fe/navigation/.theming +1 -1
  783. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-dbg.js +1 -1
  784. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-h2-preload.js +2 -2
  785. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-h2-preload.js.map +2 -2
  786. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-preload.js +2 -2
  787. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-preload.js.map +2 -2
  788. package/packages/sap.fe.navigation/src/sap/fe/navigation/library.js +1 -1
  789. package/packages/sap.fe.navigation/src/sap/fe/navigation/manifest.json +3 -3
  790. package/packages/sap.fe.navigation/src/sap/fe/navigation/resources.json +8 -8
  791. package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/api.json +1 -1
  792. package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/apiref/api.json +1 -1
  793. package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/codeassistance/Library.xmlmeta.json +1 -1
  794. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/.library +1 -1
  795. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/.theming +1 -1
  796. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-dbg.js +1 -1
  797. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-h2-preload.js +2 -2
  798. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-h2-preload.js.map +2 -2
  799. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-preload.js +2 -2
  800. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-preload.js.map +2 -2
  801. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library.js +1 -1
  802. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/manifest.json +3 -3
  803. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/resources.json +27 -27
  804. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/css_variables.source.less +316 -15
  805. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/resources.json +1 -1
  806. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/css_variables.less +315 -14
  807. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/css_variables.source.less +315 -14
  808. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/resources.json +2 -2
  809. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/css_variables.less +316 -15
  810. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/css_variables.source.less +316 -15
  811. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/resources.json +2 -2
  812. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/css_variables.less +316 -15
  813. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/css_variables.source.less +316 -15
  814. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/resources.json +2 -2
  815. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/css_variables.less +315 -14
  816. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/css_variables.source.less +315 -14
  817. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/resources.json +2 -2
  818. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/css_variables.less +317 -16
  819. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/css_variables.source.less +317 -16
  820. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/resources.json +2 -2
  821. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/css_variables.less +317 -16
  822. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/css_variables.source.less +317 -16
  823. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/resources.json +2 -2
  824. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/css_variables.less +316 -15
  825. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/css_variables.source.less +316 -15
  826. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/resources.json +2 -2
  827. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/css_variables.less +316 -15
  828. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/css_variables.source.less +316 -15
  829. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/resources.json +2 -2
  830. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_horizon/css_variables.less +400 -99
  831. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_horizon/css_variables.source.less +400 -99
  832. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_horizon/resources.json +2 -2
  833. package/packages/sap.fe.placeholder/test/sap/fe/placeholder/designtime/api.json +1 -1
  834. package/packages/sap.fe.placeholder/test/sap/fe/placeholder/designtime/apiref/api.json +1 -1
  835. package/packages/sap.fe.templates/src/sap/fe/templates/.library +1 -1
  836. package/packages/sap.fe.templates/src/sap/fe/templates/.theming +1 -1
  837. package/packages/sap.fe.templates/src/sap/fe/templates/AnalyticalListPage/manifest.json +2 -2
  838. package/packages/sap.fe.templates/src/sap/fe/templates/AnalyticalListPage/resources.json +1 -1
  839. package/packages/sap.fe.templates/src/sap/fe/templates/ListComponent-dbg.js +1 -1
  840. package/packages/sap.fe.templates/src/sap/fe/templates/ListComponent.js +1 -1
  841. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/Component-dbg.js +7 -1
  842. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/Component.js +1 -1
  843. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ListReport.view.xml +22 -21
  844. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ListReportController-dbg.controller.js +13 -18
  845. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ListReportController.controller.js +1 -1
  846. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/manifest.json +2 -2
  847. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/resources.json +7 -7
  848. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.xml +3 -3
  849. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/AnnotationHelper-dbg.js +50 -9
  850. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/AnnotationHelper.js +1 -1
  851. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/Component-dbg.js +1 -12
  852. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/Component.js +1 -1
  853. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +5 -1
  854. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ObjectPageController-dbg.controller.js +50 -17
  855. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +1 -1
  856. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/controls/StashableHBox-dbg.js +7 -1
  857. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +1 -1
  858. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/designtime/FlexBox-dbg.designtime.js +3 -0
  859. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.js +1 -1
  860. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/manifest.json +2 -2
  861. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/resources.json +19 -15
  862. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/CollaborationDraft.fragment.xml +36 -0
  863. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/EditableHeaderFacet.fragment.xml +1 -1
  864. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacet.fragment.xml +1 -0
  865. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacetCustomContainer.fragment.xml +1 -0
  866. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/Fcl-dbg.controller.js +3 -1
  867. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/Fcl.controller.js +1 -1
  868. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/NavContainer-dbg.controller.js +3 -1
  869. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.js +1 -1
  870. package/packages/sap.fe.templates/src/sap/fe/templates/designtime/library-preload.designtime.js +1 -1
  871. package/packages/sap.fe.templates/src/sap/fe/templates/designtime/library-preload.designtime.js.map +2 -2
  872. package/packages/sap.fe.templates/src/sap/fe/templates/library-dbg.js +1 -1
  873. package/packages/sap.fe.templates/src/sap/fe/templates/library-h2-preload.js +4 -3
  874. package/packages/sap.fe.templates/src/sap/fe/templates/library-h2-preload.js.map +2 -2
  875. package/packages/sap.fe.templates/src/sap/fe/templates/library-preload.js +22 -21
  876. package/packages/sap.fe.templates/src/sap/fe/templates/library-preload.js.map +4 -4
  877. package/packages/sap.fe.templates/src/sap/fe/templates/library.js +1 -1
  878. package/packages/sap.fe.templates/src/sap/fe/templates/manifest.json +14 -14
  879. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ar.properties +0 -15
  880. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_bg.properties +0 -15
  881. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ca.properties +0 -15
  882. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_cs.properties +0 -15
  883. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_cy.properties +0 -15
  884. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_da.properties +0 -15
  885. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_de.properties +0 -15
  886. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_el.properties +0 -15
  887. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en.properties +0 -15
  888. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_GB.properties +0 -15
  889. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_US_sappsd.properties +0 -15
  890. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +0 -15
  891. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_US_saptrc.properties +0 -15
  892. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_es.properties +0 -15
  893. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_es_MX.properties +0 -15
  894. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_et.properties +0 -15
  895. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_fi.properties +0 -15
  896. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_fr.properties +0 -15
  897. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_fr_CA.properties +0 -15
  898. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_hi.properties +0 -15
  899. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_hr.properties +0 -15
  900. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_hu.properties +0 -15
  901. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_id.properties +0 -15
  902. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_it.properties +0 -15
  903. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_iw.properties +0 -15
  904. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ja.properties +0 -15
  905. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_kk.properties +0 -15
  906. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ko.properties +0 -15
  907. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_lt.properties +0 -15
  908. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_lv.properties +0 -15
  909. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ms.properties +0 -15
  910. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_nl.properties +0 -15
  911. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_no.properties +0 -15
  912. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_pl.properties +0 -15
  913. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_pt.properties +0 -15
  914. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_pt_PT.properties +0 -15
  915. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ro.properties +0 -15
  916. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ru.properties +0 -15
  917. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sh.properties +0 -15
  918. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sk.properties +0 -15
  919. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sl.properties +0 -15
  920. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sv.properties +0 -15
  921. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_th.properties +0 -15
  922. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_tr.properties +0 -15
  923. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_uk.properties +0 -15
  924. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_vi.properties +0 -15
  925. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_zh_CN.properties +0 -15
  926. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_zh_TW.properties +0 -15
  927. package/packages/sap.fe.templates/src/sap/fe/templates/resources.json +115 -89
  928. package/packages/sap.fe.templates/test/sap/fe/templates/demokit/apps/itelo/webapp/manifest.json +1 -1
  929. package/packages/sap.fe.templates/test/sap/fe/templates/designtime/api.json +353 -1
  930. package/packages/sap.fe.templates/test/sap/fe/templates/designtime/apiref/api.json +1 -1
  931. package/packages/sap.fe.templates/test/sap/fe/templates/designtime/codeassistance/Library.jsmeta.json +1 -1
  932. package/packages/sap.fe.templates/test/sap/fe/templates/designtime/codeassistance/Library.xmlmeta.json +1 -1
  933. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/IntentBasedNavigation.spec.js +1 -1
  934. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/IntentBasedNavigation.spec.ts +3 -3
  935. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/Share.spec.js +1 -1
  936. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/Share.spec.ts +4 -4
  937. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/ViewState.spec.js +1 -1
  938. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/ViewState.spec.ts +2 -2
  939. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ObjectPage/view/fragments/ObjectPageHeaderForm.spec.js +2 -1
  940. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ObjectPage/view/fragments/ObjectPageHeaderForm.spec.ts +2 -1
  941. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ObjectPage/view/fragments/__snapshots__/HeaderFacet.spec.ts.snap +7 -7
  942. package/packages/sap.fe.templates/test/sap/fe/templates/jest/RootContainer/RootContainerBaseController.spec.js +30 -61
  943. package/packages/sap.fe.templates/test/sap/fe/templates/jest/RootContainer/RootContainerBaseController.spec.ts +1 -1
  944. package/packages/sap.fe.templates/test/sap/fe/templates/relnotes/changes-1.100.json +192 -0
  945. package/packages/sap.fe.templates/test/sap/fe/templates/relnotes/changes-1.99.json +0 -11
  946. package/packages/sap.fe.test/src/sap/fe/test/.library +1 -1
  947. package/packages/sap.fe.test/src/sap/fe/test/.theming +1 -1
  948. package/packages/sap.fe.test/src/sap/fe/test/FeMocks-dbg.js +1 -1
  949. package/packages/sap.fe.test/src/sap/fe/test/FeMocks.ts +8 -8
  950. package/packages/sap.fe.test/src/sap/fe/test/JestTemplatingHelper-dbg.js +6 -4
  951. package/packages/sap.fe.test/src/sap/fe/test/JestTemplatingHelper.js +1 -1
  952. package/packages/sap.fe.test/src/sap/fe/test/JestTemplatingHelper.ts +10 -6
  953. package/packages/sap.fe.test/src/sap/fe/test/UI5MockHelper-dbg.js +126 -203
  954. package/packages/sap.fe.test/src/sap/fe/test/UI5MockHelper.js +1 -1
  955. package/packages/sap.fe.test/src/sap/fe/test/UI5MockHelper.ts +17 -2
  956. package/packages/sap.fe.test/src/sap/fe/test/api/FilterBarAPI-dbg.js +9 -1
  957. package/packages/sap.fe.test/src/sap/fe/test/api/FilterBarAPI.js +1 -1
  958. package/packages/sap.fe.test/src/sap/fe/test/library-dbg.js +1 -1
  959. package/packages/sap.fe.test/src/sap/fe/test/library-h2-preload.js +2 -2
  960. package/packages/sap.fe.test/src/sap/fe/test/library-h2-preload.js.map +2 -2
  961. package/packages/sap.fe.test/src/sap/fe/test/library-preload.js +9 -18
  962. package/packages/sap.fe.test/src/sap/fe/test/library-preload.js.map +3 -3
  963. package/packages/sap.fe.test/src/sap/fe/test/library.js +1 -1
  964. package/packages/sap.fe.test/src/sap/fe/test/manifest.json +3 -3
  965. package/packages/sap.fe.test/src/sap/fe/test/resources.json +18 -18
  966. package/packages/sap.fe.test/test/sap/fe/test/designtime/api.json +1 -1
  967. package/packages/sap.fe.test/test/sap/fe/test/designtime/apiref/api.json +1 -1
  968. package/packages/sap.fe.test/test/sap/fe/test/designtime/codeassistance/Library.xmlmeta.json +1 -1
  969. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FormTemplatingTs.qunit.js +0 -271
@@ -1,809 +1,791 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- (c) Copyright 2009-2021 SAP SE. All rights reserved
4
-
3
+ * (c) Copyright 2009-2021 SAP SE. All rights reserved
5
4
  */
6
- sap.ui.define(
7
- [
8
- "sap/ui/core/mvc/ControllerExtension",
9
- "sap/ui/core/mvc/OverrideExecution",
10
- "sap/base/Log",
11
- "sap/base/util/merge",
12
- "sap/ui/fl/apply/api/ControlVariantApplyAPI",
13
- "sap/ui/mdc/p13n/StateUtil",
14
- "sap/fe/navigation/library",
15
- "sap/fe/core/CommonUtils",
16
- "sap/fe/core/helpers/KeepAliveHelper",
17
- "sap/fe/core/helpers/ModelHelper"
18
- ],
19
- function(
20
- ControllerExtension,
21
- OverrideExecution,
22
- Log,
23
- mergeObjects,
24
- ControlVariantApplyAPI,
25
- StateUtil,
26
- NavLibrary,
27
- CommonUtils,
28
- KeepAliveHelper,
29
- ModelHelper
30
- ) {
31
- "use strict";
32
-
33
- // additionalStates are stored next to control IDs, so name clash avoidance needed. Fortunately IDs have restrictions:
34
- // "Allowed is a sequence of characters (capital/lowercase), digits, underscores, dashes, points and/or colons."
35
- // Therefore adding a symbol like # or @
36
- var ADDITIONAL_STATES_KEY = "#additionalStates",
37
- NavType = NavLibrary.NavType;
38
-
39
- ///////////////////////////////////////////////////////////////////
40
- // methods to retrieve & apply states for the different controls //
41
- ///////////////////////////////////////////////////////////////////
42
-
43
- var _mControlStateHandlerMap = {
44
- "sap.ui.fl.variants.VariantManagement": {
45
- retrieve: function(oVM) {
46
- return {
47
- "variantId": oVM.getCurrentVariantKey()
48
- };
49
- },
50
- apply: function(oVM, oControlState) {
51
- if (oControlState && oControlState.variantId !== undefined && oControlState.variantId !== oVM.getCurrentVariantKey()) {
52
- var sVariantReference = this._checkIfVariantIdIsAvailable(oVM, oControlState.variantId)
53
- ? oControlState.variantId
54
- : oVM.getStandardVariantKey();
55
- return ControlVariantApplyAPI.activateVariant({
56
- element: oVM,
57
- variantReference: sVariantReference
58
- });
59
- }
60
- }
61
- },
62
- "sap.m.IconTabBar": {
63
- retrieve: function(oTabBar) {
64
- return {
65
- selectedKey: oTabBar.getSelectedKey()
66
- };
67
- },
68
- apply: function(oTabBar, oControlState) {
69
- if (oControlState && oControlState.selectedKey) {
70
- var oSelectedItem = oTabBar.getItems().find(function(oItem) {
71
- return oItem.getKey() === oControlState.selectedKey;
72
- });
73
- if (oSelectedItem) {
74
- oTabBar.setSelectedItem(oSelectedItem);
75
- }
76
- }
77
- }
78
- },
79
- "sap.ui.mdc.FilterBar": {
80
- retrieve: function(oFilterBar) {
81
- return StateUtil.retrieveExternalState(oFilterBar).then(function(mFilterBarState) {
82
- // remove sensitive or view state irrelevant fields
83
- var aPropertiesInfo = oFilterBar.getPropertyInfoSet(),
84
- mFilter = mFilterBarState.filter || {};
85
- aPropertiesInfo
86
- .filter(function(oPropertyInfo) {
87
- return (
88
- mFilter[oPropertyInfo.path] &&
89
- (oPropertyInfo.removeFromAppState || mFilter[oPropertyInfo.path].length === 0)
90
- );
91
- })
92
- .forEach(function(oPropertyInfo) {
93
- delete mFilter[oPropertyInfo.path];
94
- });
95
- return mFilterBarState;
96
- });
97
- },
98
- apply: function(oFilterBar, oControlState) {
99
- if (oControlState) {
100
- return StateUtil.applyExternalState(oFilterBar, oControlState);
101
- }
102
- }
103
- },
104
- "sap.ui.mdc.Table": {
105
- retrieve: function(oTable) {
106
- return StateUtil.retrieveExternalState(oTable);
107
- },
108
- apply: function(oTable, oControlState) {
109
- if (oControlState) {
110
- return StateUtil.applyExternalState(oTable, oControlState);
111
- }
112
- },
113
- refreshBinding: function(oTable) {
114
- var oTableBinding = oTable.getRowBinding();
115
- if (oTableBinding) {
116
- var oRootBinding = oTableBinding.getRootBinding();
117
- if (oRootBinding === oTableBinding) {
118
- // absolute binding
119
- oTableBinding.refresh();
120
- } else {
121
- // relative binding
122
- var oHeaderContext = oTableBinding.getHeaderContext();
123
- var sGroupId = oTableBinding.getGroupId();
124
-
125
- if (oHeaderContext) {
126
- oHeaderContext.requestSideEffects([{ $NavigationPropertyPath: "" }], sGroupId);
127
- }
128
- }
129
- } else {
130
- Log.info("Table: " + oTable.getId() + " was not refreshed. No binding found!");
131
- }
132
- }
133
- },
134
- "sap.uxap.ObjectPageLayout": {
135
- retrieve: function(oOPLayout) {
136
- return {
137
- selectedSection: oOPLayout.getSelectedSection()
138
- };
139
- },
140
- apply: function(oOPLayout, oControlState) {
141
- oControlState && oOPLayout.setSelectedSection(oControlState.selectedSection);
142
- },
143
- refreshBinding: function(oOPLayout) {
144
- var oBindingContext = oOPLayout.getBindingContext();
145
- var oBinding = oBindingContext && oBindingContext.getBinding();
146
- if (oBinding) {
147
- var sMetaPath = ModelHelper.getMetaPathForContext(oBindingContext);
148
- var sStrategy = KeepAliveHelper.getControlRefreshStrategyForContextPath(oOPLayout, sMetaPath);
149
- if (sStrategy === "self") {
150
- // Refresh main context and 1-1 navigation properties or OP
151
- var oModel = oBindingContext.getModel(),
152
- oMetaModel = oModel.getMetaModel(),
153
- oNavigationProperties =
154
- CommonUtils.getContextPathProperties(oMetaModel, sMetaPath, {
155
- $kind: "NavigationProperty"
156
- }) || {},
157
- aNavPropertiesToRequest = Object.keys(oNavigationProperties).reduce(function(aPrev, sNavProp) {
158
- if (oNavigationProperties[sNavProp].$isCollection !== true) {
159
- aPrev.push({ $NavigationPropertyPath: sNavProp });
160
- }
161
- return aPrev;
162
- }, []),
163
- aProperties = [{ $PropertyPath: "*" }],
164
- sGroupId = oBinding.getGroupId();
165
-
166
- oBindingContext.requestSideEffects(aProperties.concat(aNavPropertiesToRequest), sGroupId);
167
- } else if (sStrategy === "includingDependents") {
168
- // Complete refresh
169
- oBinding.refresh();
170
- }
171
- } else {
172
- Log.info("ObjectPage: " + oOPLayout.getId() + " was not refreshed. No binding found!");
173
- }
174
- }
175
- },
176
- "sap.fe.macros.table.QuickFilterContainer": {
177
- retrieve: function(oQuickFilter) {
178
- return {
179
- selectedKey: oQuickFilter.getSelectorKey()
180
- };
181
- },
182
- apply: function(oQuickFilter, oControlState) {
183
- oControlState && oQuickFilter.setSelectorKey(oControlState.selectedKey);
184
- }
185
- },
186
- "sap.m.SegmentedButton": {
187
- retrieve: function(oSegmentedButton) {
188
- return {
189
- selectedKey: oSegmentedButton.getSelectedKey()
190
- };
191
- },
192
- apply: function(oSegmentedButton, oControlState) {
193
- oControlState && oSegmentedButton.setSelectedKey(oControlState.selectedKey);
194
- }
195
- },
196
- "sap.m.Select": {
197
- retrieve: function(oSelect) {
198
- return {
199
- selectedKey: oSelect.getSelectedKey()
200
- };
201
- },
202
- apply: function(oSelect, oControlState) {
203
- oControlState && oSelect.setSelectedKey(oControlState.selectedKey);
204
- }
205
- },
206
- "sap.f.DynamicPage": {
207
- retrieve: function(oDynamicPage) {
208
- return {
209
- headerExpanded: oDynamicPage.getHeaderExpanded()
210
- };
211
- },
212
- apply: function(oDynamicPage, oControlState) {
213
- oControlState && oDynamicPage.setHeaderExpanded(oControlState.headerExpanded);
214
- }
215
- },
216
- "sap.ui.core.mvc.View": {
217
- retrieve: function(oView) {
218
- var oController = oView.getController();
219
- if (oController && oController.viewState) {
220
- return oController.viewState.retrieveViewState(oController.viewState);
221
- }
222
- return {};
223
- },
224
- apply: function(oView, oControlState, oNavParameters) {
225
- var oController = oView.getController();
226
- if (oController && oController.viewState) {
227
- return oController.viewState.applyViewState(oControlState, oNavParameters);
228
- }
229
- },
230
- refreshBinding: function(oView) {
231
- var oController = oView.getController();
232
- if (oController && oController.viewState) {
233
- return oController.viewState.refreshViewBindings();
234
- }
235
- }
236
- },
237
- "sap.ui.core.ComponentContainer": {
238
- retrieve: function(oComponentContainer) {
239
- var oComponent = oComponentContainer.getComponentInstance();
240
- if (oComponent) {
241
- return this.retrieveControlState(oComponent.getRootControl());
242
- }
243
- return {};
244
- },
245
- apply: function(oComponentContainer, oControlState, oNavParameters) {
246
- var oComponent = oComponentContainer.getComponentInstance();
247
- if (oComponent) {
248
- return this.applyControlState(oComponent.getRootControl(), oControlState, oNavParameters);
249
- }
250
- }
251
- }
252
- };
253
-
254
- /**
255
- * @class A controller extension offering hooks for state handling
256
- *
257
- * If you need to maintain a specific state for your application, you can use the controller extension.
258
- *
259
- * @name sap.fe.core.controllerextensions.ViewState
260
- * @hideconstructor
261
- * @public
262
- * @since 1.85.0
263
- */
264
- var ViewState = ControllerExtension.extend("sap.fe.core.controllerextensions.ViewState", {
265
- metadata: {
266
- methods: {
267
- refreshViewBindings: { "public": true, "final": true },
268
- adaptBindingRefreshControls: {
269
- "public": true,
270
- "final": false,
271
- overrideExecution: OverrideExecution.After
272
- },
273
- getControlRefreshBindingHandler: {
274
- "public": false,
275
- "final": true
276
- },
277
- refreshControlBinding: {
278
- "public": false,
279
- "final": true
280
- },
281
- adaptBindingRefreshHandler: {
282
- "public": true,
283
- "final": false,
284
- overrideExecution: OverrideExecution.After
285
- },
286
- collectResults: { "public": false, "final": true },
287
- adaptControlStateHandler: {
288
- "public": true,
289
- "final": false,
290
- overrideExecution: OverrideExecution.After
291
- },
292
- getControlStateHandler: { "public": false, "final": true },
293
- adaptStateControls: {
294
- "public": true,
295
- "final": false,
296
- overrideExecution: OverrideExecution.After
297
- },
298
- retrieveAdditionalStates: {
299
- "public": true,
300
- "final": false,
301
- overrideExecution: OverrideExecution.After
302
- },
303
- retrieveViewState: { "public": true, "final": true },
304
- retrieveControlState: { "public": false, "final": true },
305
- applyInitialStateOnly: {
306
- "public": true,
307
- "final": false,
308
- overrideExecution: OverrideExecution.Instead
309
- },
310
- applyViewState: { "public": true, "final": true },
311
- applyControlState: { "public": false, "final": true },
312
- applyAdditionalStates: {
313
- "public": true,
314
- "final": false,
315
- overrideExecution: OverrideExecution.After
316
- },
317
- applyNavigationParameters: { "public": true, "final": false, overrideExecution: OverrideExecution.After },
318
- onBeforeStateApplied: { "public": true, "final": false, overrideExecution: OverrideExecution.After },
319
- onAfterStateApplied: { "public": true, "final": false, overrideExecution: OverrideExecution.After },
320
- onSuspend: { "public": true, "final": false, overrideExecution: OverrideExecution.After },
321
- onRestore: { "public": true, "final": false, overrideExecution: OverrideExecution.After }
322
- }
323
- },
324
-
325
- /**
326
- * Constructor.
327
- */
328
- constructor: function() {
329
- ControllerExtension.apply(this);
330
- var that = this;
331
- that._iRetrievingStateCounter = 0;
332
- this._pInitialStateApplied = new Promise(function(resolve) {
333
- that._pInitialStateAppliedResolve = resolve;
334
- });
335
- },
336
-
337
- /**
338
- * @private
339
- * @name sap.fe.core.controllerextensions.ViewState.getMetadata
340
- * @function
341
- */
342
- /**
343
- * @private
344
- * @name sap.fe.core.controllerextensions.ViewState.extend
345
- * @function
346
- */
347
-
348
- refreshViewBindings: function() {
349
- var that = this;
350
- return that.collectResults(that.base.viewState.adaptBindingRefreshControls).then(function(aControls) {
351
- var oPromiseChain = Promise.resolve();
352
- aControls
353
- .filter(function(oControl) {
354
- return oControl && oControl.isA && oControl.isA("sap.ui.base.ManagedObject");
355
- })
356
- .forEach(function(oControl) {
357
- oPromiseChain = oPromiseChain.then(that.refreshControlBinding.bind(that, oControl));
358
- });
359
- return oPromiseChain;
360
- });
361
- },
362
- /**
363
- * This function should add all controls relevant for refreshing to the provided control array.
364
- *
365
- * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
366
- * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
367
- * @param {Array<sap.ui.base.ManagedObject>} aCollectedControls The collected controls
368
- * @alias sap.fe.core.controllerextensions.ViewState#adaptBindingRefreshControls
369
- * @protected
370
- */
371
- adaptBindingRefreshControls: function(aCollectedControls) {},
372
-
373
- refreshControlBinding: function(oControl) {
374
- var oControlRefreshBindingHandler = this.getControlRefreshBindingHandler(oControl),
375
- oPromiseChain = Promise.resolve(),
376
- that = this;
377
- if (typeof oControlRefreshBindingHandler.refreshBinding !== "function") {
378
- Log.info("refreshBinding handler for control: " + oControl.getMetadata().getName() + " is not provided");
379
- } else {
380
- oPromiseChain = oPromiseChain.then(oControlRefreshBindingHandler.refreshBinding.bind(that, oControl));
381
- }
382
- return oPromiseChain;
383
- },
384
-
385
- /**
386
- * Returns a map of <code>refreshBinding</code> function for a certain control.
387
- *
388
- * @param {sap.ui.base.ManagedObject} oControl The control to get state handler for
389
- * @returns {object} A plain object with one function: <code>refreshBinding</code>
390
- */
391
-
392
- getControlRefreshBindingHandler: function(oControl) {
393
- var oRefreshBindingHandler = {};
394
- if (oControl) {
395
- for (var sType in _mControlStateHandlerMap) {
396
- if (oControl.isA(sType)) {
397
- // pass only the refreshBinding handler in an object so that :
398
- // 1. Application has access only to refreshBinding and not apply and reterive at this stage
399
- // 2. Application modifications to the object will be reflected here (as we pass by reference)
400
- oRefreshBindingHandler["refreshBinding"] = _mControlStateHandlerMap[sType].refreshBinding || {};
401
- break;
402
- }
403
- }
404
- }
405
- this.base.viewState.adaptBindingRefreshHandler(oControl, oRefreshBindingHandler);
406
- return oRefreshBindingHandler;
407
- },
408
- /**
409
- * Customize the <code>refreshBinding</code> function for a certain control.
410
- *
411
- * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
412
- * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
413
- *
414
- * @param {sap.ui.base.ManagedObject} oControl The control for which the refresh handler is adapted.
415
- * @param {Array<object>} oControlHandler A plain object which can have one function: <code>refreshBinding</code>
416
- *
417
- * @alias sap.fe.core.controllerextensions.ViewState#adaptBindingRefreshHandler
418
- * @protected
419
- */
420
- adaptBindingRefreshHandler: function(oControl, oControlHandler) {},
421
-
422
- /**
423
- * Called when the application is suspended due to keep-alive mode.
424
- *
425
- * @alias sap.fe.core.controllerextensions.ViewState#onSuspend
426
- * @public
427
- */
428
- onSuspend: function() {},
429
-
430
- /**
431
- * Called when the application is restored due to keep-alive mode.
432
- *
433
- * @alias sap.fe.core.controllerextensions.ViewState#onRestore
434
- * @public
435
- */
436
- onRestore: function() {},
437
-
438
- /**
439
- * Destructor method for objects.
440
- */
441
- destroy: function() {
442
- delete this._pInitialStateApplied;
443
- delete this._pInitialStateAppliedResolve;
444
- delete this._iRetrievingStateCounter;
445
- ControllerExtension.prototype.destroy.apply(this);
446
- },
447
-
448
- /**
449
- * Helper function to enable multi override. It is adding an additional parameter (array) to the provided
450
- * function (and its parameters), that will be evaluated via <code>Promise.all</code>.
451
- *
452
- * @param {Function} fnCall The function to be called
453
- * @returns {Promise} A promise to be resolved with the result of all overrides
454
- */
455
- collectResults: function(fnCall) {
456
- var aResults = [],
457
- aArguments = Array.prototype.slice.call(arguments, 1);
458
- aArguments.push(aResults);
459
- fnCall.apply(this, aArguments);
460
- return Promise.all(aResults);
461
- },
462
-
463
- /**
464
- * Customize the <code>retrieve</code> and <code>apply</code> functions for a certain control.
465
- *
466
- * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
467
- * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
468
- *
469
- * @param {sap.ui.base.ManagedObject} oControl The control to get state handler for
470
- * @param {Array<object>} aControlHandler A list of plain objects with two functions: <code>retrieve</code> and <code>apply</code>
471
- *
472
- * @alias sap.fe.core.controllerextensions.ViewState#adaptControlStateHandler
473
- * @protected
474
- */
475
- adaptControlStateHandler: function(oControl, aControlHandler) {
476
- // to be overridden if needed
477
- },
478
-
479
- /**
480
- * Returns a map of <code>retrieve</code> and <code>apply</code> functions for a certain control.
481
- *
482
- * @param {sap.ui.base.ManagedObject} oControl The control to get state handler for
483
- * @returns {object} A plain object with two functions: <code>retrieve</code> and <code>apply</code>
484
- */
485
- getControlStateHandler: function(oControl) {
486
- var aInternalControlStateHandler = [],
487
- aCustomControlStateHandler = [];
488
- if (oControl) {
489
- for (var sType in _mControlStateHandlerMap) {
490
- if (oControl.isA(sType)) {
491
- // avoid direct manipulation of internal _mControlStateHandlerMap
492
- aInternalControlStateHandler.push(Object.assign({}, _mControlStateHandlerMap[sType]));
493
- break;
494
- }
495
- }
496
- }
497
- this.base.viewState.adaptControlStateHandler(oControl, aCustomControlStateHandler);
498
- return aInternalControlStateHandler.concat(aCustomControlStateHandler);
499
- },
500
-
501
- /**
502
- * This function should add all controls for given view that should be considered for the state handling to the provided control array.
503
- *
504
- * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
505
- * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
506
- * @param {Array<sap.ui.base.ManagedObject>} aCollectedControls The collected controls
507
- * @alias sap.fe.core.controllerextensions.ViewState#adaptStateControls
508
- * @protected
509
- */
510
- adaptStateControls: function(aCollectedControls) {
511
- // to be overridden if needed
512
- },
513
-
514
- /**
515
- * Returns the key to be used for given control.
516
- *
517
- * @param {sap.ui.base.ManagedObject} oControl The control to get state key for
518
- * @returns {string} The key to be used for storing the controls state
519
- */
520
- getStateKey: function(oControl) {
521
- return this.getView().getLocalId(oControl.getId()) || oControl.getId();
522
- },
523
-
524
- /**
525
- * Retrieve the view state of this extensions view.
526
- * When this function is called more than once before finishing, all but the final response will resolve to <code>undefined</code>.
527
- *
528
- * @returns {Promise} A promise resolving the view state
529
- *
530
- * @alias sap.fe.core.controllerextensions.ViewState#retrieveViewState
531
- * @public
532
- */
533
- retrieveViewState: function() {
534
- var that = this;
535
- ++that._iRetrievingStateCounter;
536
- return that._pInitialStateApplied
537
- .then(function() {
538
- return that.collectResults(that.base.viewState.adaptStateControls);
539
- })
540
- .then(function(aControls) {
541
- return Promise.all(
542
- aControls
543
- .filter(function(oControl) {
544
- return oControl && oControl.isA && oControl.isA("sap.ui.base.ManagedObject");
545
- })
546
- .map(function(oControl) {
547
- return that.retrieveControlState(oControl).then(function(vResult) {
548
- return {
549
- key: that.getStateKey(oControl),
550
- value: vResult
551
- };
552
- });
553
- })
554
- );
555
- })
556
- .then(function(aResolvedStates) {
557
- return aResolvedStates.reduce(function(oStates, mState) {
558
- var oCurrentState = {};
559
- oCurrentState[mState.key] = mState.value;
560
- return mergeObjects(oStates, oCurrentState);
561
- }, {});
562
- })
563
- .then(function(oViewState) {
564
- return Promise.resolve(that._retrieveAdditionalStates()).then(function(mAdditionalStates) {
565
- if (mAdditionalStates && Object.keys(mAdditionalStates).length) {
566
- oViewState[ADDITIONAL_STATES_KEY] = mAdditionalStates;
567
- }
568
- return oViewState;
569
- });
570
- })
571
- .finally(function() {
572
- --that._iRetrievingStateCounter;
573
- })
574
- .then(function(oViewState) {
575
- return that._iRetrievingStateCounter === 0 ? oViewState : undefined;
576
- });
577
- },
578
-
579
- /**
580
- * Extend the map of additional states (not control bound) to be added to the current view state of the given view.
581
- *
582
- * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
583
- * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
584
- *
585
- * @param {object} mAdditionalStates The additional state
586
- *
587
- * @alias sap.fe.core.controllerextensions.ViewState#retrieveAdditionalStates
588
- * @protected
589
- */
590
- retrieveAdditionalStates: function(mAdditionalStates) {
591
- // to be overridden if needed
592
- },
593
-
594
- /**
595
- * Returns a map of additional states (not control bound) to be added to the current view state of the given view.
596
- *
597
- * @returns {object | Promise<object>} Additional view states
598
- */
599
- _retrieveAdditionalStates: function() {
600
- var mAdditionalStates = {};
601
- this.base.viewState.retrieveAdditionalStates(mAdditionalStates);
602
- return mAdditionalStates;
603
- },
604
-
605
- /**
606
- * Returns the current state for the given control.
607
- *
608
- * @param {sap.ui.base.ManagedObject} oControl The object to get the state for
609
- * @returns {Promise<object>} The state for the given control
610
- */
611
- retrieveControlState: function(oControl) {
612
- var aControlStateHandlers = this.getControlStateHandler(oControl);
613
- return Promise.all(
614
- aControlStateHandlers.map(function(mControlStateHandler) {
615
- if (typeof mControlStateHandler.retrieve !== "function") {
616
- throw new Error(
617
- "controlStateHandler.retrieve is not a function for control: " + oControl.getMetadata().getName()
618
- );
619
- }
620
- return mControlStateHandler.retrieve.call(this, oControl);
621
- })
622
- ).then(function(aStates) {
623
- return aStates.reduce(function(oFinalState, oCurrentState) {
624
- return mergeObjects(oFinalState, oCurrentState);
625
- }, {});
626
- });
627
- },
628
-
629
- /**
630
- * Defines whether the view state should only be applied once initially.
631
- *
632
- * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
633
- * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.Instead}.
634
- *
635
- * Important:
636
- * You should only override this method for custom pages and not for the standard ListReportPage and ObjectPage!
637
- *
638
- * @returns {boolean} If <code>true</code>, only the initial view state is applied once,
639
- * else any new view state is also applied on follow-up calls (default)
640
- *
641
- * @alias sap.fe.core.controllerextensions.ViewState#applyInitialStateOnly
642
- * @protected
643
- */
644
- applyInitialStateOnly: function() {
645
- return true;
646
- },
647
- /**
648
- * Applies the given view state to this extensions view.
649
- *
650
- * @param {object} oViewState The view state to apply (can be undefined)
651
- * @param {object} oNavParameter The current navigation parameter
652
- * @param {sap.fe.navigation.NavType} oNavParameter.navigationType The actual navigation type
653
- * @param {object} [oNavParameter.selectionVariant] The selectionVariant from the navigation
654
- * @param {object} [oNavParameter.selectionVariantDefaults] The selectionVariant defaults from the navigation
655
- * @param {boolean} [oNavParameter.requiresStandardVariant] Defines whether standard variant must be used in VM
656
- *
657
- * @returns {Promise} Promise for async state handling
658
- *
659
- * @alias sap.fe.core.controllerextensions.ViewState#applyViewState
660
- * @public
661
- */
662
- applyViewState: function(oViewState, oNavParameter) {
663
- var that = this;
664
- if (this.base.viewState.applyInitialStateOnly() && this._getInitialStateApplied()) {
665
- return Promise.resolve();
666
- }
667
- return this.collectResults(this.base.viewState.onBeforeStateApplied)
668
- .then(function() {
669
- return that.collectResults(that.base.viewState.adaptStateControls);
670
- })
671
- .then(function(aControls) {
672
- var oPromiseChain = Promise.resolve();
673
- aControls
674
- .filter(function(oControl) {
675
- return oControl && oControl.isA && oControl.isA("sap.ui.base.ManagedObject");
676
- })
677
- .forEach(function(oControl) {
678
- var sKey = that.getStateKey(oControl);
679
- oPromiseChain = oPromiseChain.then(
680
- that.applyControlState.bind(that, oControl, oViewState ? oViewState[sKey] : undefined, oNavParameter)
681
- );
682
- });
683
- return oPromiseChain;
684
- })
685
- .then(function() {
686
- if (oNavParameter.navigationType === NavType.iAppState) {
687
- return that.collectResults(
688
- that.base.viewState.applyAdditionalStates,
689
- oViewState ? oViewState[ADDITIONAL_STATES_KEY] : undefined
690
- );
691
- } else {
692
- return that.collectResults(that.base.viewState.applyNavigationParameters, oNavParameter);
693
- }
694
- })
695
- .finally(function() {
696
- return that.collectResults(that.base.viewState.onAfterStateApplied).then(that._setInitialStateApplied.bind(that));
697
- });
698
- },
699
-
700
- _checkIfVariantIdIsAvailable: function(oVM, sVariantId) {
701
- var aVariants = oVM.getVariants(),
702
- bIsControlStateVariantAvailable = false;
703
- aVariants.forEach(function(oVariant) {
704
- if (oVariant.key === sVariantId) {
705
- bIsControlStateVariantAvailable = true;
706
- }
707
- });
708
- return bIsControlStateVariantAvailable;
709
- },
710
-
711
- _setInitialStateApplied: function() {
712
- if (this._pInitialStateAppliedResolve) {
713
- var pInitialStateAppliedResolve = this._pInitialStateAppliedResolve;
714
- delete this._pInitialStateAppliedResolve;
715
- pInitialStateAppliedResolve();
716
- }
717
- },
718
-
719
- _getInitialStateApplied: function() {
720
- return !this._pInitialStateAppliedResolve;
721
- },
722
-
723
- /**
724
- * Hook to react before a state for given view is applied.
725
- *
726
- * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
727
- * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
728
- *
729
- * @param {Promise} aPromises Extensible array of promises to be resolved before continuing
730
- *
731
- * @alias sap.fe.core.controllerextensions.ViewState#onBeforeStateApplied
732
- * @protected
733
- */
734
- onBeforeStateApplied: function(aPromises) {},
735
-
736
- /**
737
- * Hook to react when state for given view was applied.
738
- *
739
- * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
740
- * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
741
- *
742
- * @param {Promise} aPromises Extensible array of promises to be resolved before continuing
743
- *
744
- * @alias sap.fe.core.controllerextensions.ViewState#onAfterStateApplied
745
- * @protected
746
- */
747
- onAfterStateApplied: function(aPromises) {},
748
-
749
- /**
750
- * Applying additional, not control related, states - is called only if navigation type is iAppState.
751
- *
752
- * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
753
- * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
754
- *
755
- * @param {object} oViewState The current view state
756
- * @param {Promise} aPromises Extensible array of promises to be resolved before continuing
757
- *
758
- * @alias sap.fe.core.controllerextensions.ViewState#applyAdditionalStates
759
- * @protected
760
- */
761
- applyAdditionalStates: function(oViewState, aPromises) {
762
- // to be overridden if needed
763
- },
764
-
765
- /**
766
- * Apply navigation parameters - is called only if navigation type is not iAppState.
767
- *
768
- * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
769
- * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
770
- *
771
- * @param {object} oNavParameter The current navigation parameter
772
- * @param {sap.fe.navigation.NavType} oNavParameter.navigationType The actual navigation type
773
- * @param {object} [oNavParameter.selectionVariant] The selectionVariant from the navigation
774
- * @param {object} [oNavParameter.selectionVariantDefaults] The selectionVariant defaults from the navigation
775
- * @param {boolean} [oNavParameter.requiresStandardVariant] Defines whether standard variant must be used in VM
776
- * @param {Promise} aPromises Extensible array of promises to be resolved before continuing
777
- *
778
- * @alias sap.fe.core.controllerextensions.ViewState#applyNavigationParameters
779
- * @protected
780
- */
781
- applyNavigationParameters: function(oNavParameter, aPromises) {
782
- // to be overridden if needed
783
- },
784
-
785
- /**
786
- * Applying the given state to the given control.
787
- *
788
- * @param {sap.ui.base.ManagedObject} oControl The object to apply the given state
789
- * @param {object} oControlState The state for the given control
790
- * @param {object} oNavParameters The current navigation parameters
791
- * @returns {any} Return a promise for async state handling
792
- */
793
- applyControlState: function(oControl, oControlState, oNavParameters) {
794
- var aControlStateHandlers = this.getControlStateHandler(oControl),
795
- oPromiseChain = Promise.resolve(),
796
- that = this;
797
- aControlStateHandlers.forEach(function(mControlStateHandler) {
798
- if (typeof mControlStateHandler.apply !== "function") {
799
- throw new Error("controlStateHandler.apply is not a function for control: " + oControl.getMetadata().getName());
800
- }
801
- oPromiseChain = oPromiseChain.then(mControlStateHandler.apply.bind(that, oControl, oControlState, oNavParameters));
802
- });
803
- return oPromiseChain;
804
- }
805
- });
806
-
807
- return ViewState;
808
- }
809
- );
5
+ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideExecution", "sap/base/Log", "sap/base/util/merge", "sap/ui/fl/apply/api/ControlVariantApplyAPI", "sap/ui/mdc/p13n/StateUtil", "sap/fe/navigation/library", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/KeepAliveHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/controllerextensions/ControllerExtensionMetadata"], function (ControllerExtension, OverrideExecution, Log, mergeObjects, ControlVariantApplyAPI, StateUtil, NavLibrary, CommonUtils, KeepAliveHelper, ModelHelper, ClassSupport, ControllerExtensionMetadata) {
6
+ "use strict";
7
+
8
+ var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _class, _class2;
9
+
10
+ var UI5Class = ClassSupport.UI5Class;
11
+ var Public = ClassSupport.Public;
12
+ var Private = ClassSupport.Private;
13
+ var Final = ClassSupport.Final;
14
+ var Extensible = ClassSupport.Extensible;
15
+
16
+ function _get() { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }
17
+
18
+ function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
19
+
20
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
21
+
22
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
23
+
24
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
25
+
26
+ function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
27
+
28
+ // additionalStates are stored next to control IDs, so name clash avoidance needed. Fortunately IDs have restrictions:
29
+ // "Allowed is a sequence of characters (capital/lowercase), digits, underscores, dashes, points and/or colons."
30
+ // Therefore adding a symbol like # or @
31
+ var ADDITIONAL_STATES_KEY = "#additionalStates",
32
+ NavType = NavLibrary.NavType; ///////////////////////////////////////////////////////////////////
33
+ // methods to retrieve & apply states for the different controls //
34
+ ///////////////////////////////////////////////////////////////////
35
+
36
+ var _mControlStateHandlerMap = {
37
+ "sap.ui.fl.variants.VariantManagement": {
38
+ retrieve: function (oVM) {
39
+ return {
40
+ "variantId": oVM.getCurrentVariantKey()
41
+ };
42
+ },
43
+ apply: function (oVM, oControlState) {
44
+ if (oControlState && oControlState.variantId !== undefined && oControlState.variantId !== oVM.getCurrentVariantKey()) {
45
+ var sVariantReference = this._checkIfVariantIdIsAvailable(oVM, oControlState.variantId) ? oControlState.variantId : oVM.getStandardVariantKey();
46
+ return ControlVariantApplyAPI.activateVariant({
47
+ element: oVM,
48
+ variantReference: sVariantReference
49
+ });
50
+ }
51
+ }
52
+ },
53
+ "sap.m.IconTabBar": {
54
+ retrieve: function (oTabBar) {
55
+ return {
56
+ selectedKey: oTabBar.getSelectedKey()
57
+ };
58
+ },
59
+ apply: function (oTabBar, oControlState) {
60
+ if (oControlState && oControlState.selectedKey) {
61
+ var oSelectedItem = oTabBar.getItems().find(function (oItem) {
62
+ return oItem.getKey() === oControlState.selectedKey;
63
+ });
64
+
65
+ if (oSelectedItem) {
66
+ oTabBar.setSelectedItem(oSelectedItem);
67
+ }
68
+ }
69
+ }
70
+ },
71
+ "sap.ui.mdc.FilterBar": {
72
+ retrieve: function (oFilterBar) {
73
+ return StateUtil.retrieveExternalState(oFilterBar).then(function (mFilterBarState) {
74
+ // remove sensitive or view state irrelevant fields
75
+ var aPropertiesInfo = oFilterBar.getPropertyInfoSet(),
76
+ mFilter = mFilterBarState.filter || {};
77
+ aPropertiesInfo.filter(function (oPropertyInfo) {
78
+ return mFilter[oPropertyInfo.path] && (oPropertyInfo.removeFromAppState || mFilter[oPropertyInfo.path].length === 0);
79
+ }).forEach(function (oPropertyInfo) {
80
+ delete mFilter[oPropertyInfo.path];
81
+ });
82
+ return mFilterBarState;
83
+ });
84
+ },
85
+ apply: function (oFilterBar, oControlState) {
86
+ if (oControlState) {
87
+ return StateUtil.applyExternalState(oFilterBar, oControlState);
88
+ }
89
+ }
90
+ },
91
+ "sap.ui.mdc.Table": {
92
+ retrieve: function (oTable) {
93
+ return StateUtil.retrieveExternalState(oTable);
94
+ },
95
+ apply: function (oTable, oControlState) {
96
+ if (oControlState) {
97
+ return StateUtil.applyExternalState(oTable, oControlState);
98
+ }
99
+ },
100
+ refreshBinding: function (oTable) {
101
+ var oTableBinding = oTable.getRowBinding();
102
+
103
+ if (oTableBinding) {
104
+ var oRootBinding = oTableBinding.getRootBinding();
105
+
106
+ if (oRootBinding === oTableBinding) {
107
+ // absolute binding
108
+ oTableBinding.refresh();
109
+ } else {
110
+ // relative binding
111
+ var oHeaderContext = oTableBinding.getHeaderContext();
112
+ var sGroupId = oTableBinding.getGroupId();
113
+
114
+ if (oHeaderContext) {
115
+ oHeaderContext.requestSideEffects([{
116
+ $NavigationPropertyPath: ""
117
+ }], sGroupId);
118
+ }
119
+ }
120
+ } else {
121
+ Log.info("Table: " + oTable.getId() + " was not refreshed. No binding found!");
122
+ }
123
+ }
124
+ },
125
+ "sap.uxap.ObjectPageLayout": {
126
+ retrieve: function (oOPLayout) {
127
+ return {
128
+ selectedSection: oOPLayout.getSelectedSection()
129
+ };
130
+ },
131
+ apply: function (oOPLayout, oControlState) {
132
+ oControlState && oOPLayout.setSelectedSection(oControlState.selectedSection);
133
+ },
134
+ refreshBinding: function (oOPLayout) {
135
+ var oBindingContext = oOPLayout.getBindingContext();
136
+ var oBinding = oBindingContext && oBindingContext.getBinding();
137
+
138
+ if (oBinding) {
139
+ var sMetaPath = ModelHelper.getMetaPathForContext(oBindingContext);
140
+ var sStrategy = KeepAliveHelper.getControlRefreshStrategyForContextPath(oOPLayout, sMetaPath);
141
+
142
+ if (sStrategy === "self") {
143
+ // Refresh main context and 1-1 navigation properties or OP
144
+ var oModel = oBindingContext.getModel(),
145
+ oMetaModel = oModel.getMetaModel(),
146
+ oNavigationProperties = CommonUtils.getContextPathProperties(oMetaModel, sMetaPath, {
147
+ $kind: "NavigationProperty"
148
+ }) || {},
149
+ aNavPropertiesToRequest = Object.keys(oNavigationProperties).reduce(function (aPrev, sNavProp) {
150
+ if (oNavigationProperties[sNavProp].$isCollection !== true) {
151
+ aPrev.push({
152
+ $NavigationPropertyPath: sNavProp
153
+ });
154
+ }
155
+
156
+ return aPrev;
157
+ }, []),
158
+ aProperties = [{
159
+ $PropertyPath: "*"
160
+ }],
161
+ sGroupId = oBinding.getGroupId();
162
+ oBindingContext.requestSideEffects(aProperties.concat(aNavPropertiesToRequest), sGroupId);
163
+ } else if (sStrategy === "includingDependents") {
164
+ // Complete refresh
165
+ oBinding.refresh();
166
+ }
167
+ } else {
168
+ Log.info("ObjectPage: " + oOPLayout.getId() + " was not refreshed. No binding found!");
169
+ }
170
+ }
171
+ },
172
+ "sap.fe.macros.table.QuickFilterContainer": {
173
+ retrieve: function (oQuickFilter) {
174
+ return {
175
+ selectedKey: oQuickFilter.getSelectorKey()
176
+ };
177
+ },
178
+ apply: function (oQuickFilter, oControlState) {
179
+ oControlState && oQuickFilter.setSelectorKey(oControlState.selectedKey);
180
+ }
181
+ },
182
+ "sap.m.SegmentedButton": {
183
+ retrieve: function (oSegmentedButton) {
184
+ return {
185
+ selectedKey: oSegmentedButton.getSelectedKey()
186
+ };
187
+ },
188
+ apply: function (oSegmentedButton, oControlState) {
189
+ oControlState && oSegmentedButton.setSelectedKey(oControlState.selectedKey);
190
+ }
191
+ },
192
+ "sap.m.Select": {
193
+ retrieve: function (oSelect) {
194
+ return {
195
+ selectedKey: oSelect.getSelectedKey()
196
+ };
197
+ },
198
+ apply: function (oSelect, oControlState) {
199
+ oControlState && oSelect.setSelectedKey(oControlState.selectedKey);
200
+ }
201
+ },
202
+ "sap.f.DynamicPage": {
203
+ retrieve: function (oDynamicPage) {
204
+ return {
205
+ headerExpanded: oDynamicPage.getHeaderExpanded()
206
+ };
207
+ },
208
+ apply: function (oDynamicPage, oControlState) {
209
+ oControlState && oDynamicPage.setHeaderExpanded(oControlState.headerExpanded);
210
+ }
211
+ },
212
+ "sap.ui.core.mvc.View": {
213
+ retrieve: function (oView) {
214
+ var oController = oView.getController();
215
+
216
+ if (oController && oController.viewState) {
217
+ return oController.viewState.retrieveViewState(oController.viewState);
218
+ }
219
+
220
+ return {};
221
+ },
222
+ apply: function (oView, oControlState, oNavParameters) {
223
+ var oController = oView.getController();
224
+
225
+ if (oController && oController.viewState) {
226
+ return oController.viewState.applyViewState(oControlState, oNavParameters);
227
+ }
228
+ },
229
+ refreshBinding: function (oView) {
230
+ var oController = oView.getController();
231
+
232
+ if (oController && oController.viewState) {
233
+ return oController.viewState.refreshViewBindings();
234
+ }
235
+ }
236
+ },
237
+ "sap.ui.core.ComponentContainer": {
238
+ retrieve: function (oComponentContainer) {
239
+ var oComponent = oComponentContainer.getComponentInstance();
240
+
241
+ if (oComponent) {
242
+ return this.retrieveControlState(oComponent.getRootControl());
243
+ }
244
+
245
+ return {};
246
+ },
247
+ apply: function (oComponentContainer, oControlState, oNavParameters) {
248
+ var oComponent = oComponentContainer.getComponentInstance();
249
+
250
+ if (oComponent) {
251
+ return this.applyControlState(oComponent.getRootControl(), oControlState, oNavParameters);
252
+ }
253
+ }
254
+ }
255
+ };
256
+ /**
257
+ * A controller extension offering hooks for state handling
258
+ *
259
+ * If you need to maintain a specific state for your application, you can use the controller extension.
260
+ *
261
+ * @hideconstructor
262
+ * @public
263
+ * @since 1.85.0
264
+ */
265
+
266
+ var ViewState = (_dec = UI5Class("sap.fe.core.controllerextensions.ViewState", ControllerExtensionMetadata), _dec2 = Extensible(OverrideExecution.After), _dec3 = Extensible(OverrideExecution.After), _dec4 = Extensible(OverrideExecution.After), _dec5 = Extensible(OverrideExecution.After), _dec6 = Extensible(OverrideExecution.After), _dec7 = Extensible(OverrideExecution.After), _dec8 = Extensible(OverrideExecution.After), _dec9 = Extensible(OverrideExecution.Instead), _dec10 = Extensible(OverrideExecution.After), _dec11 = Extensible(OverrideExecution.After), _dec12 = Extensible(OverrideExecution.After), _dec13 = Extensible(OverrideExecution.After), _dec(_class = (_class2 = /*#__PURE__*/function (_ControllerExtension) {
267
+ _inherits(ViewState, _ControllerExtension);
268
+
269
+ /**
270
+ * Constructor.
271
+ */
272
+ function ViewState() {
273
+ var _this;
274
+
275
+ _this = _ControllerExtension.call(this) || this;
276
+ _this._iRetrievingStateCounter = 0;
277
+ _this._pInitialStateApplied = new Promise(function (resolve) {
278
+ _this._pInitialStateAppliedResolve = resolve;
279
+ });
280
+ return _this;
281
+ }
282
+ /**
283
+ * @private
284
+ * @name sap.fe.core.controllerextensions.ViewState.getMetadata
285
+ * @function
286
+ */
287
+
288
+ /**
289
+ * @private
290
+ * @name sap.fe.core.controllerextensions.ViewState.extend
291
+ * @function
292
+ */
293
+
294
+
295
+ var _proto = ViewState.prototype;
296
+
297
+ _proto.refreshViewBindings = function refreshViewBindings() {
298
+ var _this2 = this;
299
+
300
+ return this.collectResults(this.base.viewState.adaptBindingRefreshControls).then(function (aControls) {
301
+ var oPromiseChain = Promise.resolve();
302
+ aControls.filter(function (oControl) {
303
+ return oControl && oControl.isA && oControl.isA("sap.ui.base.ManagedObject");
304
+ }).forEach(function (oControl) {
305
+ oPromiseChain = oPromiseChain.then(_this2.refreshControlBinding.bind(_this2, oControl));
306
+ });
307
+ return oPromiseChain;
308
+ });
309
+ }
310
+ /**
311
+ * This function should add all controls relevant for refreshing to the provided control array.
312
+ *
313
+ * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
314
+ * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
315
+ * @param {Array<sap.ui.base.ManagedObject>} aCollectedControls The collected controls
316
+ * @alias sap.fe.core.controllerextensions.ViewState#adaptBindingRefreshControls
317
+ * @protected
318
+ */
319
+ ;
320
+
321
+ _proto. // eslint-disable-next-line @typescript-eslint/no-unused-vars
322
+ adaptBindingRefreshControls = function adaptBindingRefreshControls(aCollectedControls) {// to be overriden
323
+ };
324
+
325
+ _proto.refreshControlBinding = function refreshControlBinding(oControl) {
326
+ var oControlRefreshBindingHandler = this.getControlRefreshBindingHandler(oControl);
327
+ var oPromiseChain = Promise.resolve();
328
+
329
+ if (typeof oControlRefreshBindingHandler.refreshBinding !== "function") {
330
+ Log.info("refreshBinding handler for control: " + oControl.getMetadata().getName() + " is not provided");
331
+ } else {
332
+ oPromiseChain = oPromiseChain.then(oControlRefreshBindingHandler.refreshBinding.bind(this, oControl));
333
+ }
334
+
335
+ return oPromiseChain;
336
+ }
337
+ /**
338
+ * Returns a map of <code>refreshBinding</code> function for a certain control.
339
+ *
340
+ * @param {sap.ui.base.ManagedObject} oControl The control to get state handler for
341
+ * @returns {object} A plain object with one function: <code>refreshBinding</code>
342
+ */
343
+ ;
344
+
345
+ _proto.getControlRefreshBindingHandler = function getControlRefreshBindingHandler(oControl) {
346
+ var oRefreshBindingHandler = {};
347
+
348
+ if (oControl) {
349
+ for (var sType in _mControlStateHandlerMap) {
350
+ if (oControl.isA(sType)) {
351
+ // pass only the refreshBinding handler in an object so that :
352
+ // 1. Application has access only to refreshBinding and not apply and reterive at this stage
353
+ // 2. Application modifications to the object will be reflected here (as we pass by reference)
354
+ oRefreshBindingHandler["refreshBinding"] = _mControlStateHandlerMap[sType].refreshBinding || {};
355
+ break;
356
+ }
357
+ }
358
+ }
359
+
360
+ this.base.viewState.adaptBindingRefreshHandler(oControl, oRefreshBindingHandler);
361
+ return oRefreshBindingHandler;
362
+ }
363
+ /**
364
+ * Customize the <code>refreshBinding</code> function for a certain control.
365
+ *
366
+ * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
367
+ * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
368
+ *
369
+ * @param {sap.ui.base.ManagedObject} oControl The control for which the refresh handler is adapted.
370
+ * @param {Array<object>} oControlHandler A plain object which can have one function: <code>refreshBinding</code>
371
+ *
372
+ * @alias sap.fe.core.controllerextensions.ViewState#adaptBindingRefreshHandler
373
+ * @protected
374
+ */
375
+ ;
376
+
377
+ _proto. // eslint-disable-next-line @typescript-eslint/no-unused-vars
378
+ adaptBindingRefreshHandler = function adaptBindingRefreshHandler(oControl, oControlHandler) {// to be overriden
379
+ }
380
+ /**
381
+ * Called when the application is suspended due to keep-alive mode.
382
+ *
383
+ * @alias sap.fe.core.controllerextensions.ViewState#onSuspend
384
+ * @public
385
+ */
386
+ ;
387
+
388
+ _proto.onSuspend = function onSuspend() {// to be overriden
389
+ }
390
+ /**
391
+ * Called when the application is restored due to keep-alive mode.
392
+ *
393
+ * @alias sap.fe.core.controllerextensions.ViewState#onRestore
394
+ * @public
395
+ */
396
+ ;
397
+
398
+ _proto.onRestore = function onRestore() {// to be overriden
399
+ }
400
+ /**
401
+ * Destructor method for objects.
402
+ */
403
+ ;
404
+
405
+ _proto.destroy = function destroy() {
406
+ delete this._pInitialStateAppliedResolve;
407
+
408
+ _get(_getPrototypeOf(ViewState.prototype), "destroy", this).call(this);
409
+ }
410
+ /**
411
+ * Helper function to enable multi override. It is adding an additional parameter (array) to the provided
412
+ * function (and its parameters), that will be evaluated via <code>Promise.all</code>.
413
+ *
414
+ * @param {Function} fnCall The function to be called
415
+ * @param args
416
+ * @returns {Promise} A promise to be resolved with the result of all overrides
417
+ */
418
+ ;
419
+
420
+ _proto.collectResults = function collectResults(fnCall) {
421
+ var aResults = [];
422
+
423
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
424
+ args[_key - 1] = arguments[_key];
425
+ }
426
+
427
+ args.push(aResults);
428
+ fnCall.apply(this, args);
429
+ return Promise.all(aResults);
430
+ }
431
+ /**
432
+ * Customize the <code>retrieve</code> and <code>apply</code> functions for a certain control.
433
+ *
434
+ * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
435
+ * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
436
+ *
437
+ * @param {sap.ui.base.ManagedObject} oControl The control to get state handler for
438
+ * @param {Array<object>} aControlHandler A list of plain objects with two functions: <code>retrieve</code> and <code>apply</code>
439
+ *
440
+ * @alias sap.fe.core.controllerextensions.ViewState#adaptControlStateHandler
441
+ * @protected
442
+ */
443
+ ;
444
+
445
+ _proto. // eslint-disable-next-line @typescript-eslint/no-unused-vars
446
+ adaptControlStateHandler = function adaptControlStateHandler(oControl, aControlHandler) {// to be overridden if needed
447
+ }
448
+ /**
449
+ * Returns a map of <code>retrieve</code> and <code>apply</code> functions for a certain control.
450
+ *
451
+ * @param {sap.ui.base.ManagedObject} oControl The control to get state handler for
452
+ * @returns {object} A plain object with two functions: <code>retrieve</code> and <code>apply</code>
453
+ */
454
+ ;
455
+
456
+ _proto.getControlStateHandler = function getControlStateHandler(oControl) {
457
+ var aInternalControlStateHandler = [],
458
+ aCustomControlStateHandler = [];
459
+
460
+ if (oControl) {
461
+ for (var sType in _mControlStateHandlerMap) {
462
+ if (oControl.isA(sType)) {
463
+ // avoid direct manipulation of internal _mControlStateHandlerMap
464
+ aInternalControlStateHandler.push(Object.assign({}, _mControlStateHandlerMap[sType]));
465
+ break;
466
+ }
467
+ }
468
+ }
469
+
470
+ this.base.viewState.adaptControlStateHandler(oControl, aCustomControlStateHandler);
471
+ return aInternalControlStateHandler.concat(aCustomControlStateHandler);
472
+ }
473
+ /**
474
+ * This function should add all controls for given view that should be considered for the state handling to the provided control array.
475
+ *
476
+ * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
477
+ * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
478
+ * @param {Array<sap.ui.base.ManagedObject>} aCollectedControls The collected controls
479
+ * @alias sap.fe.core.controllerextensions.ViewState#adaptStateControls
480
+ * @protected
481
+ */
482
+ ;
483
+
484
+ _proto. // eslint-disable-next-line @typescript-eslint/no-unused-vars
485
+ adaptStateControls = function adaptStateControls(aCollectedControls) {// to be overridden if needed
486
+ }
487
+ /**
488
+ * Returns the key to be used for given control.
489
+ *
490
+ * @param {sap.ui.base.ManagedObject} oControl The control to get state key for
491
+ * @returns {string} The key to be used for storing the controls state
492
+ */
493
+ ;
494
+
495
+ _proto.getStateKey = function getStateKey(oControl) {
496
+ return this.getView().getLocalId(oControl.getId()) || oControl.getId();
497
+ }
498
+ /**
499
+ * Retrieve the view state of this extensions view.
500
+ * When this function is called more than once before finishing, all but the final response will resolve to <code>undefined</code>.
501
+ *
502
+ * @returns {Promise} A promise resolving the view state
503
+ *
504
+ * @alias sap.fe.core.controllerextensions.ViewState#retrieveViewState
505
+ * @public
506
+ */
507
+ ;
508
+
509
+ _proto.retrieveViewState = function retrieveViewState() {
510
+ var _this3 = this;
511
+
512
+ ++this._iRetrievingStateCounter;
513
+ return this._pInitialStateApplied.then(function () {
514
+ return _this3.collectResults(_this3.base.viewState.adaptStateControls);
515
+ }).then(function (aControls) {
516
+ return Promise.all(aControls.filter(function (oControl) {
517
+ return oControl && oControl.isA && oControl.isA("sap.ui.base.ManagedObject");
518
+ }).map(function (oControl) {
519
+ return _this3.retrieveControlState(oControl).then(function (vResult) {
520
+ return {
521
+ key: _this3.getStateKey(oControl),
522
+ value: vResult
523
+ };
524
+ });
525
+ }));
526
+ }).then(function (aResolvedStates) {
527
+ return aResolvedStates.reduce(function (oStates, mState) {
528
+ var oCurrentState = {};
529
+ oCurrentState[mState.key] = mState.value;
530
+ return mergeObjects(oStates, oCurrentState);
531
+ }, {});
532
+ }).then(function (oViewState) {
533
+ return Promise.resolve(_this3._retrieveAdditionalStates()).then(function (mAdditionalStates) {
534
+ if (mAdditionalStates && Object.keys(mAdditionalStates).length) {
535
+ oViewState[ADDITIONAL_STATES_KEY] = mAdditionalStates;
536
+ }
537
+
538
+ return oViewState;
539
+ });
540
+ }).finally(function () {
541
+ --_this3._iRetrievingStateCounter;
542
+ }).then(function (oViewState) {
543
+ return _this3._iRetrievingStateCounter === 0 ? oViewState : undefined;
544
+ });
545
+ }
546
+ /**
547
+ * Extend the map of additional states (not control bound) to be added to the current view state of the given view.
548
+ *
549
+ * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
550
+ * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
551
+ *
552
+ * @param {object} mAdditionalStates The additional state
553
+ *
554
+ * @alias sap.fe.core.controllerextensions.ViewState#retrieveAdditionalStates
555
+ * @protected
556
+ */
557
+ ;
558
+
559
+ _proto. // eslint-disable-next-line @typescript-eslint/no-unused-vars
560
+ retrieveAdditionalStates = function retrieveAdditionalStates(mAdditionalStates) {// to be overridden if needed
561
+ }
562
+ /**
563
+ * Returns a map of additional states (not control bound) to be added to the current view state of the given view.
564
+ *
565
+ * @returns {object | Promise<object>} Additional view states
566
+ */
567
+ ;
568
+
569
+ _proto._retrieveAdditionalStates = function _retrieveAdditionalStates() {
570
+ var mAdditionalStates = {};
571
+ this.base.viewState.retrieveAdditionalStates(mAdditionalStates);
572
+ return mAdditionalStates;
573
+ }
574
+ /**
575
+ * Returns the current state for the given control.
576
+ *
577
+ * @param {sap.ui.base.ManagedObject} oControl The object to get the state for
578
+ * @returns {Promise<object>} The state for the given control
579
+ */
580
+ ;
581
+
582
+ _proto.retrieveControlState = function retrieveControlState(oControl) {
583
+ var _this4 = this;
584
+
585
+ var aControlStateHandlers = this.getControlStateHandler(oControl);
586
+ return Promise.all(aControlStateHandlers.map(function (mControlStateHandler) {
587
+ if (typeof mControlStateHandler.retrieve !== "function") {
588
+ throw new Error("controlStateHandler.retrieve is not a function for control: " + oControl.getMetadata().getName());
589
+ }
590
+
591
+ return mControlStateHandler.retrieve.call(_this4, oControl);
592
+ })).then(function (aStates) {
593
+ return aStates.reduce(function (oFinalState, oCurrentState) {
594
+ return mergeObjects(oFinalState, oCurrentState);
595
+ }, {});
596
+ });
597
+ }
598
+ /**
599
+ * Defines whether the view state should only be applied once initially.
600
+ *
601
+ * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
602
+ * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.Instead}.
603
+ *
604
+ * Important:
605
+ * You should only override this method for custom pages and not for the standard ListReportPage and ObjectPage!
606
+ *
607
+ * @returns {boolean} If <code>true</code>, only the initial view state is applied once,
608
+ * else any new view state is also applied on follow-up calls (default)
609
+ *
610
+ * @alias sap.fe.core.controllerextensions.ViewState#applyInitialStateOnly
611
+ * @protected
612
+ */
613
+ ;
614
+
615
+ _proto.applyInitialStateOnly = function applyInitialStateOnly() {
616
+ return true;
617
+ }
618
+ /**
619
+ * Applies the given view state to this extensions view.
620
+ *
621
+ * @param {object} oViewState The view state to apply (can be undefined)
622
+ * @param {object} oNavParameter The current navigation parameter
623
+ * @param {sap.fe.navigation.NavType} oNavParameter.navigationType The actual navigation type
624
+ * @param {object} oNavParameter.selectionVariant The selectionVariant from the navigation
625
+ * @param {object} oNavParameter.selectionVariantDefaults The selectionVariant defaults from the navigation
626
+ * @param {boolean} oNavParameter.requiresStandardVariant Defines whether standard variant must be used in VM
627
+ *
628
+ * @returns {Promise} Promise for async state handling
629
+ *
630
+ * @alias sap.fe.core.controllerextensions.ViewState#applyViewState
631
+ * @public
632
+ */
633
+ ;
634
+
635
+ _proto.applyViewState = function applyViewState(oViewState, oNavParameter) {
636
+ var _this5 = this;
637
+
638
+ if (this.base.viewState.applyInitialStateOnly() && this._getInitialStateApplied()) {
639
+ return Promise.resolve();
640
+ }
641
+
642
+ return this.collectResults(this.base.viewState.onBeforeStateApplied).then(function () {
643
+ return _this5.collectResults(_this5.base.viewState.adaptStateControls);
644
+ }).then(function (aControls) {
645
+ var oPromiseChain = Promise.resolve();
646
+ aControls.filter(function (oControl) {
647
+ return oControl && oControl.isA && oControl.isA("sap.ui.base.ManagedObject");
648
+ }).forEach(function (oControl) {
649
+ var sKey = _this5.getStateKey(oControl);
650
+
651
+ oPromiseChain = oPromiseChain.then(_this5.applyControlState.bind(_this5, oControl, oViewState ? oViewState[sKey] : undefined, oNavParameter));
652
+ });
653
+ return oPromiseChain;
654
+ }).then(function () {
655
+ if (oNavParameter.navigationType === NavType.iAppState) {
656
+ return _this5.collectResults(_this5.base.viewState.applyAdditionalStates, oViewState ? oViewState[ADDITIONAL_STATES_KEY] : undefined);
657
+ } else {
658
+ return _this5.collectResults(_this5.base.viewState.applyNavigationParameters, oNavParameter);
659
+ }
660
+ }).finally(function () {
661
+ return _this5.collectResults(_this5.base.viewState.onAfterStateApplied).then(_this5._setInitialStateApplied.bind(_this5));
662
+ });
663
+ };
664
+
665
+ _proto._checkIfVariantIdIsAvailable = function _checkIfVariantIdIsAvailable(oVM, sVariantId) {
666
+ var aVariants = oVM.getVariants();
667
+ var bIsControlStateVariantAvailable = false;
668
+ aVariants.forEach(function (oVariant) {
669
+ if (oVariant.key === sVariantId) {
670
+ bIsControlStateVariantAvailable = true;
671
+ }
672
+ });
673
+ return bIsControlStateVariantAvailable;
674
+ };
675
+
676
+ _proto._setInitialStateApplied = function _setInitialStateApplied() {
677
+ if (this._pInitialStateAppliedResolve) {
678
+ var pInitialStateAppliedResolve = this._pInitialStateAppliedResolve;
679
+ delete this._pInitialStateAppliedResolve;
680
+ pInitialStateAppliedResolve();
681
+ }
682
+ };
683
+
684
+ _proto._getInitialStateApplied = function _getInitialStateApplied() {
685
+ return !this._pInitialStateAppliedResolve;
686
+ }
687
+ /**
688
+ * Hook to react before a state for given view is applied.
689
+ *
690
+ * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
691
+ * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
692
+ *
693
+ * @param {Promise} aPromises Extensible array of promises to be resolved before continuing
694
+ *
695
+ * @alias sap.fe.core.controllerextensions.ViewState#onBeforeStateApplied
696
+ * @protected
697
+ */
698
+ ;
699
+
700
+ _proto. // eslint-disable-next-line @typescript-eslint/no-unused-vars
701
+ onBeforeStateApplied = function onBeforeStateApplied(aPromises) {// to be overriden
702
+ }
703
+ /**
704
+ * Hook to react when state for given view was applied.
705
+ *
706
+ * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
707
+ * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
708
+ *
709
+ * @param {Promise} aPromises Extensible array of promises to be resolved before continuing
710
+ *
711
+ * @alias sap.fe.core.controllerextensions.ViewState#onAfterStateApplied
712
+ * @protected
713
+ */
714
+ ;
715
+
716
+ _proto. // eslint-disable-next-line @typescript-eslint/no-unused-vars
717
+ onAfterStateApplied = function onAfterStateApplied(aPromises) {// to be overriden
718
+ }
719
+ /**
720
+ * Applying additional, not control related, states - is called only if navigation type is iAppState.
721
+ *
722
+ * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
723
+ * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
724
+ *
725
+ * @param {object} oViewState The current view state
726
+ * @param {Promise} aPromises Extensible array of promises to be resolved before continuing
727
+ *
728
+ * @alias sap.fe.core.controllerextensions.ViewState#applyAdditionalStates
729
+ * @protected
730
+ */
731
+ ;
732
+
733
+ _proto. // eslint-disable-next-line @typescript-eslint/no-unused-vars
734
+ applyAdditionalStates = function applyAdditionalStates(oViewState, aPromises) {// to be overridden if needed
735
+ }
736
+ /**
737
+ * Apply navigation parameters - is called only if navigation type is not iAppState.
738
+ *
739
+ * This function is meant to be individually overridden by consuming controllers, but not to be called directly.
740
+ * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
741
+ *
742
+ * @param {object} oNavParameter The current navigation parameter
743
+ * @param {sap.fe.navigation.NavType} oNavParameter.navigationType The actual navigation type
744
+ * @param {object} [oNavParameter.selectionVariant] The selectionVariant from the navigation
745
+ * @param {object} [oNavParameter.selectionVariantDefaults] The selectionVariant defaults from the navigation
746
+ * @param {boolean} [oNavParameter.requiresStandardVariant] Defines whether standard variant must be used in VM
747
+ * @param {Promise} aPromises Extensible array of promises to be resolved before continuing
748
+ *
749
+ * @alias sap.fe.core.controllerextensions.ViewState#applyNavigationParameters
750
+ * @protected
751
+ */
752
+ ;
753
+
754
+ _proto.applyNavigationParameters = function applyNavigationParameters( // eslint-disable-next-line @typescript-eslint/no-unused-vars
755
+ oNavParameter, // eslint-disable-next-line @typescript-eslint/no-unused-vars
756
+ aPromises) {// to be overridden if needed
757
+ }
758
+ /**
759
+ * Applying the given state to the given control.
760
+ *
761
+ * @param {sap.ui.base.ManagedObject} oControl The object to apply the given state
762
+ * @param {object} oControlState The state for the given control
763
+ * @param {object} [oNavParameters] The current navigation parameters
764
+ * @returns {any} Return a promise for async state handling
765
+ */
766
+ ;
767
+
768
+ _proto.applyControlState = function applyControlState(oControl, oControlState, oNavParameters) {
769
+ var _this6 = this;
770
+
771
+ var aControlStateHandlers = this.getControlStateHandler(oControl);
772
+ var oPromiseChain = Promise.resolve();
773
+ aControlStateHandlers.forEach(function (mControlStateHandler) {
774
+ if (typeof mControlStateHandler.apply !== "function") {
775
+ throw new Error("controlStateHandler.apply is not a function for control: " + oControl.getMetadata().getName());
776
+ }
777
+
778
+ oPromiseChain = oPromiseChain.then(mControlStateHandler.apply.bind(_this6, oControl, oControlState, oNavParameters));
779
+ });
780
+ return oPromiseChain;
781
+ };
782
+
783
+ _proto.getInterface = function getInterface() {
784
+ return this;
785
+ };
786
+
787
+ return ViewState;
788
+ }(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "refreshViewBindings", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "refreshViewBindings"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptBindingRefreshControls", [Public, _dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptBindingRefreshControls"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "refreshControlBinding", [Private, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "refreshControlBinding"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getControlRefreshBindingHandler", [Private, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "getControlRefreshBindingHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptBindingRefreshHandler", [Public, _dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptBindingRefreshHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onSuspend", [Public, _dec4], Object.getOwnPropertyDescriptor(_class2.prototype, "onSuspend"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onRestore", [Public, _dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "onRestore"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "collectResults", [Private, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "collectResults"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptControlStateHandler", [Public, _dec6], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptControlStateHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getControlStateHandler", [Private, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "getControlStateHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptStateControls", [Public, _dec7], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptStateControls"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getStateKey", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "getStateKey"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "retrieveViewState", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "retrieveViewState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "retrieveAdditionalStates", [Public, _dec8], Object.getOwnPropertyDescriptor(_class2.prototype, "retrieveAdditionalStates"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "retrieveControlState", [Private, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "retrieveControlState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyInitialStateOnly", [Public, _dec9], Object.getOwnPropertyDescriptor(_class2.prototype, "applyInitialStateOnly"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyViewState", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "applyViewState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "_checkIfVariantIdIsAvailable", [Private], Object.getOwnPropertyDescriptor(_class2.prototype, "_checkIfVariantIdIsAvailable"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeStateApplied", [Public, _dec10], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeStateApplied"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterStateApplied", [Public, _dec11], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterStateApplied"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyAdditionalStates", [Public, _dec12], Object.getOwnPropertyDescriptor(_class2.prototype, "applyAdditionalStates"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyNavigationParameters", [Public, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "applyNavigationParameters"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyControlState", [Private, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "applyControlState"), _class2.prototype)), _class2)) || _class);
789
+ return ViewState;
790
+ }, false);
791
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlZpZXdTdGF0ZS50cyJdLCJuYW1lcyI6WyJBRERJVElPTkFMX1NUQVRFU19LRVkiLCJOYXZUeXBlIiwiTmF2TGlicmFyeSIsIl9tQ29udHJvbFN0YXRlSGFuZGxlck1hcCIsInJldHJpZXZlIiwib1ZNIiwiZ2V0Q3VycmVudFZhcmlhbnRLZXkiLCJhcHBseSIsIm9Db250cm9sU3RhdGUiLCJ2YXJpYW50SWQiLCJ1bmRlZmluZWQiLCJzVmFyaWFudFJlZmVyZW5jZSIsIl9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUiLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJDb250cm9sVmFyaWFudEFwcGx5QVBJIiwiYWN0aXZhdGVWYXJpYW50IiwiZWxlbWVudCIsInZhcmlhbnRSZWZlcmVuY2UiLCJvVGFiQmFyIiwic2VsZWN0ZWRLZXkiLCJnZXRTZWxlY3RlZEtleSIsIm9TZWxlY3RlZEl0ZW0iLCJnZXRJdGVtcyIsImZpbmQiLCJvSXRlbSIsImdldEtleSIsInNldFNlbGVjdGVkSXRlbSIsIm9GaWx0ZXJCYXIiLCJTdGF0ZVV0aWwiLCJyZXRyaWV2ZUV4dGVybmFsU3RhdGUiLCJ0aGVuIiwibUZpbHRlckJhclN0YXRlIiwiYVByb3BlcnRpZXNJbmZvIiwiZ2V0UHJvcGVydHlJbmZvU2V0IiwibUZpbHRlciIsImZpbHRlciIsIm9Qcm9wZXJ0eUluZm8iLCJwYXRoIiwicmVtb3ZlRnJvbUFwcFN0YXRlIiwibGVuZ3RoIiwiZm9yRWFjaCIsImFwcGx5RXh0ZXJuYWxTdGF0ZSIsIm9UYWJsZSIsInJlZnJlc2hCaW5kaW5nIiwib1RhYmxlQmluZGluZyIsImdldFJvd0JpbmRpbmciLCJvUm9vdEJpbmRpbmciLCJnZXRSb290QmluZGluZyIsInJlZnJlc2giLCJvSGVhZGVyQ29udGV4dCIsImdldEhlYWRlckNvbnRleHQiLCJzR3JvdXBJZCIsImdldEdyb3VwSWQiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIkxvZyIsImluZm8iLCJnZXRJZCIsIm9PUExheW91dCIsInNlbGVjdGVkU2VjdGlvbiIsImdldFNlbGVjdGVkU2VjdGlvbiIsInNldFNlbGVjdGVkU2VjdGlvbiIsIm9CaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwib0JpbmRpbmciLCJnZXRCaW5kaW5nIiwic01ldGFQYXRoIiwiTW9kZWxIZWxwZXIiLCJnZXRNZXRhUGF0aEZvckNvbnRleHQiLCJzU3RyYXRlZ3kiLCJLZWVwQWxpdmVIZWxwZXIiLCJnZXRDb250cm9sUmVmcmVzaFN0cmF0ZWd5Rm9yQ29udGV4dFBhdGgiLCJvTW9kZWwiLCJnZXRNb2RlbCIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJvTmF2aWdhdGlvblByb3BlcnRpZXMiLCJDb21tb25VdGlscyIsImdldENvbnRleHRQYXRoUHJvcGVydGllcyIsIiRraW5kIiwiYU5hdlByb3BlcnRpZXNUb1JlcXVlc3QiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwiYVByZXYiLCJzTmF2UHJvcCIsIiRpc0NvbGxlY3Rpb24iLCJwdXNoIiwiYVByb3BlcnRpZXMiLCIkUHJvcGVydHlQYXRoIiwiY29uY2F0Iiwib1F1aWNrRmlsdGVyIiwiZ2V0U2VsZWN0b3JLZXkiLCJzZXRTZWxlY3RvcktleSIsIm9TZWdtZW50ZWRCdXR0b24iLCJzZXRTZWxlY3RlZEtleSIsIm9TZWxlY3QiLCJvRHluYW1pY1BhZ2UiLCJoZWFkZXJFeHBhbmRlZCIsImdldEhlYWRlckV4cGFuZGVkIiwic2V0SGVhZGVyRXhwYW5kZWQiLCJvVmlldyIsIm9Db250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsInZpZXdTdGF0ZSIsInJldHJpZXZlVmlld1N0YXRlIiwib05hdlBhcmFtZXRlcnMiLCJhcHBseVZpZXdTdGF0ZSIsInJlZnJlc2hWaWV3QmluZGluZ3MiLCJvQ29tcG9uZW50Q29udGFpbmVyIiwib0NvbXBvbmVudCIsImdldENvbXBvbmVudEluc3RhbmNlIiwicmV0cmlldmVDb250cm9sU3RhdGUiLCJnZXRSb290Q29udHJvbCIsImFwcGx5Q29udHJvbFN0YXRlIiwiVmlld1N0YXRlIiwiVUk1Q2xhc3MiLCJDb250cm9sbGVyRXh0ZW5zaW9uTWV0YWRhdGEiLCJFeHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsIkluc3RlYWQiLCJfaVJldHJpZXZpbmdTdGF0ZUNvdW50ZXIiLCJfcEluaXRpYWxTdGF0ZUFwcGxpZWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmUiLCJjb2xsZWN0UmVzdWx0cyIsImJhc2UiLCJhZGFwdEJpbmRpbmdSZWZyZXNoQ29udHJvbHMiLCJhQ29udHJvbHMiLCJvUHJvbWlzZUNoYWluIiwib0NvbnRyb2wiLCJpc0EiLCJyZWZyZXNoQ29udHJvbEJpbmRpbmciLCJiaW5kIiwiYUNvbGxlY3RlZENvbnRyb2xzIiwib0NvbnRyb2xSZWZyZXNoQmluZGluZ0hhbmRsZXIiLCJnZXRDb250cm9sUmVmcmVzaEJpbmRpbmdIYW5kbGVyIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwib1JlZnJlc2hCaW5kaW5nSGFuZGxlciIsInNUeXBlIiwiYWRhcHRCaW5kaW5nUmVmcmVzaEhhbmRsZXIiLCJvQ29udHJvbEhhbmRsZXIiLCJvblN1c3BlbmQiLCJvblJlc3RvcmUiLCJkZXN0cm95IiwiZm5DYWxsIiwiYVJlc3VsdHMiLCJhcmdzIiwiYWxsIiwiYWRhcHRDb250cm9sU3RhdGVIYW5kbGVyIiwiYUNvbnRyb2xIYW5kbGVyIiwiZ2V0Q29udHJvbFN0YXRlSGFuZGxlciIsImFJbnRlcm5hbENvbnRyb2xTdGF0ZUhhbmRsZXIiLCJhQ3VzdG9tQ29udHJvbFN0YXRlSGFuZGxlciIsImFzc2lnbiIsImFkYXB0U3RhdGVDb250cm9scyIsImdldFN0YXRlS2V5IiwiZ2V0VmlldyIsImdldExvY2FsSWQiLCJtYXAiLCJ2UmVzdWx0Iiwia2V5IiwidmFsdWUiLCJhUmVzb2x2ZWRTdGF0ZXMiLCJvU3RhdGVzIiwibVN0YXRlIiwib0N1cnJlbnRTdGF0ZSIsIm1lcmdlT2JqZWN0cyIsIm9WaWV3U3RhdGUiLCJfcmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzIiwibUFkZGl0aW9uYWxTdGF0ZXMiLCJmaW5hbGx5IiwicmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzIiwiYUNvbnRyb2xTdGF0ZUhhbmRsZXJzIiwibUNvbnRyb2xTdGF0ZUhhbmRsZXIiLCJFcnJvciIsImNhbGwiLCJhU3RhdGVzIiwib0ZpbmFsU3RhdGUiLCJhcHBseUluaXRpYWxTdGF0ZU9ubHkiLCJvTmF2UGFyYW1ldGVyIiwiX2dldEluaXRpYWxTdGF0ZUFwcGxpZWQiLCJvbkJlZm9yZVN0YXRlQXBwbGllZCIsInNLZXkiLCJuYXZpZ2F0aW9uVHlwZSIsImlBcHBTdGF0ZSIsImFwcGx5QWRkaXRpb25hbFN0YXRlcyIsImFwcGx5TmF2aWdhdGlvblBhcmFtZXRlcnMiLCJvbkFmdGVyU3RhdGVBcHBsaWVkIiwiX3NldEluaXRpYWxTdGF0ZUFwcGxpZWQiLCJzVmFyaWFudElkIiwiYVZhcmlhbnRzIiwiZ2V0VmFyaWFudHMiLCJiSXNDb250cm9sU3RhdGVWYXJpYW50QXZhaWxhYmxlIiwib1ZhcmlhbnQiLCJwSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmUiLCJhUHJvbWlzZXMiLCJnZXRJbnRlcmZhY2UiLCJDb250cm9sbGVyRXh0ZW5zaW9uIiwiUHVibGljIiwiRmluYWwiLCJQcml2YXRlIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZQTtBQUNBO0FBQ0E7QUFDQSxNQUFNQSxxQkFBcUIsR0FBRyxtQkFBOUI7QUFBQSxNQUNDQyxPQUFPLEdBQUdDLFVBQVUsQ0FBQ0QsT0FEdEIsQyxDQUVBO0FBQ0E7QUFDQTs7QUFDQSxNQUFNRSx3QkFBNkMsR0FBRztBQUNyRCw0Q0FBd0M7QUFDdkNDLE1BQUFBLFFBQVEsRUFBRSxVQUFTQyxHQUFULEVBQW1CO0FBQzVCLGVBQU87QUFDTix1QkFBYUEsR0FBRyxDQUFDQyxvQkFBSjtBQURQLFNBQVA7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QUlELGFBQWEsR0FBR1AsT0FBTyxDQUFDQyxPQUFSLEVBQXBCO0FBQ0FtRCxNQUFBQSxxQkFBcUIsQ0FBQ3hJLE9BQXRCLENBQThCLFVBQUN5SSxvQkFBRCxFQUErQjtBQUM1RCxZQUFJLE9BQU9BLG9CQUFvQixDQUFDMUssS0FBNUIsS0FBc0MsVUFBMUMsRUFBc0Q7QUFDckQsZ0JBQU0sSUFBSTJLLEtBQUosQ0FBVSw4REFBOEQ5QyxRQUFRLENBQUNPLFdBQVQsR0FBdUJDLE9BQXZCLEVBQXhFLENBQU47QUFDQTs7QUFDRFQsUUFBQUEsYUFBYSxHQUFHQSxhQUFhLENBQUNyRyxJQUFkLENBQW1CbUosb0JBQW9CLENBQUMxSyxLQUFyQixDQUEyQmdJLElBQTNCLENBQWdDLE1BQWhDLEVBQXNDSCxRQUF0QyxFQUFnRDVILGFBQWhELEVBQStEa0csY0FBL0QsQ0FBbkIsQ0FBaEI7QUFDQSxPQUxEO0FBTUEsYUFBT3lCLGFBQVA7QUFDQSxLOztXQUNEcUUsWSxHQUFBLHdCQUFlO0FBQ2QsYUFBTyxJQUFQO0FBQ0EsSzs7O0lBaGpCc0JDLG1CLHlFQTRCdEJDLE0sRUFDQUMsSywrS0F1QkFELE0sd0xBT0FFLE8sRUFDQUQsSyxxTEFtQkFDLE8sRUFDQUQsSywwTEE2QkFELE0sMktBYUFBLE0sMEpBWUFBLE0sK0pBc0JBRSxPLEVBQ0FELEssdUtBb0JBRCxNLHNMQWFBRSxPLEVBQ0FELEsseUtBMEJBRCxNLHFLQWFBQSxNLEVBQ0FDLEssNkpBY0FELE0sRUFDQUMsSywwS0F5REFELE0sb0xBd0JBRSxPLEVBQ0FELEssMEtBZ0NBRCxNLDJLQW9CQUEsTSxFQUNBQyxLLDJLQThDQUMsTyxpTEFrQ0FGLE0sZ0xBa0JBQSxNLGlMQW1CQUEsTSx1TEF1QkFBLE0sbUxBd0JBRSxPLEVBQ0FELEs7U0FpQmF4RixTIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZU9iamVjdHMgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCBDb250cm9sVmFyaWFudEFwcGx5QVBJIGZyb20gXCJzYXAvdWkvZmwvYXBwbHkvYXBpL0NvbnRyb2xWYXJpYW50QXBwbHlBUElcIjtcbmltcG9ydCBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcbmltcG9ydCBOYXZMaWJyYXJ5IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9saWJyYXJ5XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgS2VlcEFsaXZlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0tlZXBBbGl2ZUhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBFeHRlbnNpYmxlLCBGaW5hbCwgUHJpdmF0ZSwgUHVibGljLCBVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IENvbnRyb2xsZXJFeHRlbnNpb25NZXRhZGF0YSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQ29udHJvbGxlckV4dGVuc2lvbk1ldGFkYXRhXCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuLy8gYWRkaXRpb25hbFN0YXRlcyBhcmUgc3RvcmVkIG5leHQgdG8gY29udHJvbCBJRHMsIHNvIG5hbWUgY2xhc2ggYXZvaWRhbmNlIG5lZWRlZC4gRm9ydHVuYXRlbHkgSURzIGhhdmUgcmVzdHJpY3Rpb25zOlxuLy8gXCJBbGxvd2VkIGlzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyAoY2FwaXRhbC9sb3dlcmNhc2UpLCBkaWdpdHMsIHVuZGVyc2NvcmVzLCBkYXNoZXMsIHBvaW50cyBhbmQvb3IgY29sb25zLlwiXG4vLyBUaGVyZWZvcmUgYWRkaW5nIGEgc3ltYm9sIGxpa2UgIyBvciBAXG5jb25zdCBBRERJVElPTkFMX1NUQVRFU19LRVkgPSBcIiNhZGRpdGlvbmFsU3RhdGVzXCIsXG5cdE5hdlR5cGUgPSBOYXZMaWJyYXJ5Lk5hdlR5cGU7XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBtZXRob2RzIHRvIHJldHJpZXZlICYgYXBwbHkgc3RhdGVzIGZvciB0aGUgZGlmZmVyZW50IGNvbnRyb2xzIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5jb25zdCBfbUNvbnRyb2xTdGF0ZUhhbmRsZXJNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG5cdFwic2FwLnVpLmZsLnZhcmlhbnRzLlZhcmlhbnRNYW5hZ2VtZW50XCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24ob1ZNOiBhbnkpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFwidmFyaWFudElkXCI6IG9WTS5nZXRDdXJyZW50VmFyaWFudEtleSgpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uKG9WTTogYW55LCBvQ29udHJvbFN0YXRlOiBhbnkpIHtcblx0XHRcdGlmIChvQ29udHJvbFN0YXRlICYmIG9Db250cm9sU3RhdGUudmFyaWFudElkICE9PSB1bmRlZmluZWQgJiYgb0NvbnRyb2xTdGF0ZS52YXJpYW50SWQgIT09IG9WTS5nZXRDdXJyZW50VmFyaWFudEtleSgpKSB7XG5cdFx0XHRcdGNvbnN0IHNWYXJpYW50UmVmZXJlbmNlID0gdGhpcy5fY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlKG9WTSwgb0NvbnRyb2xTdGF0ZS52YXJpYW50SWQpXG5cdFx0XHRcdFx0PyBvQ29udHJvbFN0YXRlLnZhcmlhbnRJZFxuXHRcdFx0XHRcdDogb1ZNLmdldFN0YW5kYXJkVmFyaWFudEtleSgpO1xuXHRcdFx0XHRyZXR1cm4gQ29udHJvbFZhcmlhbnRBcHBseUFQSS5hY3RpdmF0ZVZhcmlhbnQoe1xuXHRcdFx0XHRcdGVsZW1lbnQ6IG9WTSxcblx0XHRcdFx0XHR2YXJpYW50UmVmZXJlbmNlOiBzVmFyaWFudFJlZmVyZW5jZVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLm0uSWNvblRhYkJhclwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uKG9UYWJCYXI6IGFueSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VsZWN0ZWRLZXk6IG9UYWJCYXIuZ2V0U2VsZWN0ZWRLZXkoKVxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbihvVGFiQmFyOiBhbnksIG9Db250cm9sU3RhdGU6IGFueSkge1xuXHRcdFx0aWYgKG9Db250cm9sU3RhdGUgJiYgb0NvbnRyb2xTdGF0ZS5zZWxlY3RlZEtleSkge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRJdGVtID0gb1RhYkJhci5nZXRJdGVtcygpLmZpbmQoZnVuY3Rpb24ob0l0ZW06IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBvSXRlbS5nZXRLZXkoKSA9PT0gb0NvbnRyb2xTdGF0ZS5zZWxlY3RlZEtleTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChvU2VsZWN0ZWRJdGVtKSB7XG5cdFx0XHRcdFx0b1RhYkJhci5zZXRTZWxlY3RlZEl0ZW0ob1NlbGVjdGVkSXRlbSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLnVpLm1kYy5GaWx0ZXJCYXJcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbihvRmlsdGVyQmFyOiBhbnkpIHtcblx0XHRcdHJldHVybiBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKG9GaWx0ZXJCYXIpLnRoZW4oZnVuY3Rpb24obUZpbHRlckJhclN0YXRlOiBhbnkpIHtcblx0XHRcdFx0Ly8gcmVtb3ZlIHNlbnNpdGl2ZSBvciB2aWV3IHN0YXRlIGlycmVsZXZhbnQgZmllbGRzXG5cdFx0XHRcdGNvbnN0IGFQcm9wZXJ0aWVzSW5mbyA9IG9GaWx0ZXJCYXIuZ2V0UHJvcGVydHlJbmZvU2V0KCksXG5cdFx0XHRcdFx0bUZpbHRlciA9IG1GaWx0ZXJCYXJTdGF0ZS5maWx0ZXIgfHwge307XG5cdFx0XHRcdGFQcm9wZXJ0aWVzSW5mb1xuXHRcdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24ob1Byb3BlcnR5SW5mbzogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRtRmlsdGVyW29Qcm9wZXJ0eUluZm8ucGF0aF0gJiYgKG9Qcm9wZXJ0eUluZm8ucmVtb3ZlRnJvbUFwcFN0YXRlIHx8IG1GaWx0ZXJbb1Byb3BlcnR5SW5mby5wYXRoXS5sZW5ndGggPT09IDApXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmZvckVhY2goZnVuY3Rpb24ob1Byb3BlcnR5SW5mbzogYW55KSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgbUZpbHRlcltvUHJvcGVydHlJbmZvLnBhdGhdO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gbUZpbHRlckJhclN0YXRlO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24ob0ZpbHRlckJhcjogYW55LCBvQ29udHJvbFN0YXRlOiBhbnkpIHtcblx0XHRcdGlmIChvQ29udHJvbFN0YXRlKSB7XG5cdFx0XHRcdHJldHVybiBTdGF0ZVV0aWwuYXBwbHlFeHRlcm5hbFN0YXRlKG9GaWx0ZXJCYXIsIG9Db250cm9sU3RhdGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAudWkubWRjLlRhYmxlXCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24ob1RhYmxlOiBhbnkpIHtcblx0XHRcdHJldHVybiBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKG9UYWJsZSk7XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24ob1RhYmxlOiBhbnksIG9Db250cm9sU3RhdGU6IGFueSkge1xuXHRcdFx0aWYgKG9Db250cm9sU3RhdGUpIHtcblx0XHRcdFx0cmV0dXJuIFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUob1RhYmxlLCBvQ29udHJvbFN0YXRlKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHJlZnJlc2hCaW5kaW5nOiBmdW5jdGlvbihvVGFibGU6IGFueSkge1xuXHRcdFx0Y29uc3Qgb1RhYmxlQmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRpZiAob1RhYmxlQmluZGluZykge1xuXHRcdFx0XHRjb25zdCBvUm9vdEJpbmRpbmcgPSBvVGFibGVCaW5kaW5nLmdldFJvb3RCaW5kaW5nKCk7XG5cdFx0XHRcdGlmIChvUm9vdEJpbmRpbmcgPT09IG9UYWJsZUJpbmRpbmcpIHtcblx0XHRcdFx0XHQvLyBhYnNvbHV0ZSBiaW5kaW5nXG5cdFx0XHRcdFx0b1RhYmxlQmluZGluZy5yZWZyZXNoKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gcmVsYXRpdmUgYmluZGluZ1xuXHRcdFx0XHRcdGNvbnN0IG9IZWFkZXJDb250ZXh0ID0gb1RhYmxlQmluZGluZy5nZXRIZWFkZXJDb250ZXh0KCk7XG5cdFx0XHRcdFx0Y29uc3Qgc0dyb3VwSWQgPSBvVGFibGVCaW5kaW5nLmdldEdyb3VwSWQoKTtcblxuXHRcdFx0XHRcdGlmIChvSGVhZGVyQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0b0hlYWRlckNvbnRleHQucmVxdWVzdFNpZGVFZmZlY3RzKFt7ICROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBcIlwiIH1dLCBzR3JvdXBJZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRMb2cuaW5mbyhcIlRhYmxlOiBcIiArIG9UYWJsZS5nZXRJZCgpICsgXCIgd2FzIG5vdCByZWZyZXNoZWQuIE5vIGJpbmRpbmcgZm91bmQhXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAudXhhcC5PYmplY3RQYWdlTGF5b3V0XCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24ob09QTGF5b3V0OiBhbnkpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbGVjdGVkU2VjdGlvbjogb09QTGF5b3V0LmdldFNlbGVjdGVkU2VjdGlvbigpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uKG9PUExheW91dDogYW55LCBvQ29udHJvbFN0YXRlOiBhbnkpIHtcblx0XHRcdG9Db250cm9sU3RhdGUgJiYgb09QTGF5b3V0LnNldFNlbGVjdGVkU2VjdGlvbihvQ29udHJvbFN0YXRlLnNlbGVjdGVkU2VjdGlvbik7XG5cdFx0fSxcblx0XHRyZWZyZXNoQmluZGluZzogZnVuY3Rpb24ob09QTGF5b3V0OiBhbnkpIHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9PUExheW91dC5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSBvQmluZGluZ0NvbnRleHQgJiYgb0JpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRcdGlmIChvQmluZGluZykge1xuXHRcdFx0XHRjb25zdCBzTWV0YVBhdGggPSBNb2RlbEhlbHBlci5nZXRNZXRhUGF0aEZvckNvbnRleHQob0JpbmRpbmdDb250ZXh0KTtcblx0XHRcdFx0Y29uc3Qgc1N0cmF0ZWd5ID0gS2VlcEFsaXZlSGVscGVyLmdldENvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JDb250ZXh0UGF0aChvT1BMYXlvdXQsIHNNZXRhUGF0aCk7XG5cdFx0XHRcdGlmIChzU3RyYXRlZ3kgPT09IFwic2VsZlwiKSB7XG5cdFx0XHRcdFx0Ly8gUmVmcmVzaCBtYWluIGNvbnRleHQgYW5kIDEtMSBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgb3IgT1Bcblx0XHRcdFx0XHRjb25zdCBvTW9kZWwgPSBvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRcdG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRcdFx0XHRvTmF2aWdhdGlvblByb3BlcnRpZXMgPVxuXHRcdFx0XHRcdFx0XHRDb21tb25VdGlscy5nZXRDb250ZXh0UGF0aFByb3BlcnRpZXMob01ldGFNb2RlbCwgc01ldGFQYXRoLCB7XG5cdFx0XHRcdFx0XHRcdFx0JGtpbmQ6IFwiTmF2aWdhdGlvblByb3BlcnR5XCJcblx0XHRcdFx0XHRcdFx0fSkgfHwge30sXG5cdFx0XHRcdFx0XHRhTmF2UHJvcGVydGllc1RvUmVxdWVzdCA9IE9iamVjdC5rZXlzKG9OYXZpZ2F0aW9uUHJvcGVydGllcykucmVkdWNlKGZ1bmN0aW9uKGFQcmV2OiBhbnlbXSwgc05hdlByb3A6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRpZiAob05hdmlnYXRpb25Qcm9wZXJ0aWVzW3NOYXZQcm9wXS4kaXNDb2xsZWN0aW9uICE9PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0YVByZXYucHVzaCh7ICROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBzTmF2UHJvcCB9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYVByZXY7XG5cdFx0XHRcdFx0XHR9LCBbXSksXG5cdFx0XHRcdFx0XHRhUHJvcGVydGllcyA9IFt7ICRQcm9wZXJ0eVBhdGg6IFwiKlwiIH1dLFxuXHRcdFx0XHRcdFx0c0dyb3VwSWQgPSBvQmluZGluZy5nZXRHcm91cElkKCk7XG5cblx0XHRcdFx0XHRvQmluZGluZ0NvbnRleHQucmVxdWVzdFNpZGVFZmZlY3RzKGFQcm9wZXJ0aWVzLmNvbmNhdChhTmF2UHJvcGVydGllc1RvUmVxdWVzdCksIHNHcm91cElkKTtcblx0XHRcdFx0fSBlbHNlIGlmIChzU3RyYXRlZ3kgPT09IFwiaW5jbHVkaW5nRGVwZW5kZW50c1wiKSB7XG5cdFx0XHRcdFx0Ly8gQ29tcGxldGUgcmVmcmVzaFxuXHRcdFx0XHRcdG9CaW5kaW5nLnJlZnJlc2goKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TG9nLmluZm8oXCJPYmplY3RQYWdlOiBcIiArIG9PUExheW91dC5nZXRJZCgpICsgXCIgd2FzIG5vdCByZWZyZXNoZWQuIE5vIGJpbmRpbmcgZm91bmQhXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAuZmUubWFjcm9zLnRhYmxlLlF1aWNrRmlsdGVyQ29udGFpbmVyXCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24ob1F1aWNrRmlsdGVyOiBhbnkpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbGVjdGVkS2V5OiBvUXVpY2tGaWx0ZXIuZ2V0U2VsZWN0b3JLZXkoKVxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbihvUXVpY2tGaWx0ZXI6IGFueSwgb0NvbnRyb2xTdGF0ZTogYW55KSB7XG5cdFx0XHRvQ29udHJvbFN0YXRlICYmIG9RdWlja0ZpbHRlci5zZXRTZWxlY3RvcktleShvQ29udHJvbFN0YXRlLnNlbGVjdGVkS2V5KTtcblx0XHR9XG5cdH0sXG5cdFwic2FwLm0uU2VnbWVudGVkQnV0dG9uXCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24ob1NlZ21lbnRlZEJ1dHRvbjogYW55KSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZWxlY3RlZEtleTogb1NlZ21lbnRlZEJ1dHRvbi5nZXRTZWxlY3RlZEtleSgpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uKG9TZWdtZW50ZWRCdXR0b246IGFueSwgb0NvbnRyb2xTdGF0ZTogYW55KSB7XG5cdFx0XHRvQ29udHJvbFN0YXRlICYmIG9TZWdtZW50ZWRCdXR0b24uc2V0U2VsZWN0ZWRLZXkob0NvbnRyb2xTdGF0ZS5zZWxlY3RlZEtleSk7XG5cdFx0fVxuXHR9LFxuXHRcInNhcC5tLlNlbGVjdFwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uKG9TZWxlY3Q6IGFueSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VsZWN0ZWRLZXk6IG9TZWxlY3QuZ2V0U2VsZWN0ZWRLZXkoKVxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbihvU2VsZWN0OiBhbnksIG9Db250cm9sU3RhdGU6IGFueSkge1xuXHRcdFx0b0NvbnRyb2xTdGF0ZSAmJiBvU2VsZWN0LnNldFNlbGVjdGVkS2V5KG9Db250cm9sU3RhdGUuc2VsZWN0ZWRLZXkpO1xuXHRcdH1cblx0fSxcblx0XCJzYXAuZi5EeW5hbWljUGFnZVwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uKG9EeW5hbWljUGFnZTogYW55KSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRoZWFkZXJFeHBhbmRlZDogb0R5bmFtaWNQYWdlLmdldEhlYWRlckV4cGFuZGVkKClcblx0XHRcdH07XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24ob0R5bmFtaWNQYWdlOiBhbnksIG9Db250cm9sU3RhdGU6IGFueSkge1xuXHRcdFx0b0NvbnRyb2xTdGF0ZSAmJiBvRHluYW1pY1BhZ2Uuc2V0SGVhZGVyRXhwYW5kZWQob0NvbnRyb2xTdGF0ZS5oZWFkZXJFeHBhbmRlZCk7XG5cdFx0fVxuXHR9LFxuXHRcInNhcC51aS5jb3JlLm12Yy5WaWV3XCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24ob1ZpZXc6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRpZiAob0NvbnRyb2xsZXIgJiYgb0NvbnRyb2xsZXIudmlld1N0YXRlKSB7XG5cdFx0XHRcdHJldHVybiBvQ29udHJvbGxlci52aWV3U3RhdGUucmV0cmlldmVWaWV3U3RhdGUob0NvbnRyb2xsZXIudmlld1N0YXRlKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbihvVmlldzogYW55LCBvQ29udHJvbFN0YXRlOiBhbnksIG9OYXZQYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0aWYgKG9Db250cm9sbGVyICYmIG9Db250cm9sbGVyLnZpZXdTdGF0ZSkge1xuXHRcdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIudmlld1N0YXRlLmFwcGx5Vmlld1N0YXRlKG9Db250cm9sU3RhdGUsIG9OYXZQYXJhbWV0ZXJzKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHJlZnJlc2hCaW5kaW5nOiBmdW5jdGlvbihvVmlldzogYW55KSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRcdGlmIChvQ29udHJvbGxlciAmJiBvQ29udHJvbGxlci52aWV3U3RhdGUpIHtcblx0XHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLnZpZXdTdGF0ZS5yZWZyZXNoVmlld0JpbmRpbmdzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC51aS5jb3JlLkNvbXBvbmVudENvbnRhaW5lclwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uKG9Db21wb25lbnRDb250YWluZXI6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db21wb25lbnRDb250YWluZXIuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKTtcblx0XHRcdGlmIChvQ29tcG9uZW50KSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJldHJpZXZlQ29udHJvbFN0YXRlKG9Db21wb25lbnQuZ2V0Um9vdENvbnRyb2woKSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24ob0NvbXBvbmVudENvbnRhaW5lcjogYW55LCBvQ29udHJvbFN0YXRlOiBhbnksIG9OYXZQYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29tcG9uZW50Q29udGFpbmVyLmdldENvbXBvbmVudEluc3RhbmNlKCk7XG5cdFx0XHRpZiAob0NvbXBvbmVudCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5hcHBseUNvbnRyb2xTdGF0ZShvQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCksIG9Db250cm9sU3RhdGUsIG9OYXZQYXJhbWV0ZXJzKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG4vKipcbiAqIEEgY29udHJvbGxlciBleHRlbnNpb24gb2ZmZXJpbmcgaG9va3MgZm9yIHN0YXRlIGhhbmRsaW5nXG4gKlxuICogSWYgeW91IG5lZWQgdG8gbWFpbnRhaW4gYSBzcGVjaWZpYyBzdGF0ZSBmb3IgeW91ciBhcHBsaWNhdGlvbiwgeW91IGNhbiB1c2UgdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uLlxuICpcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqIEBzaW5jZSAxLjg1LjBcbiAqL1xuQFVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlXCIsIENvbnRyb2xsZXJFeHRlbnNpb25NZXRhZGF0YSlcbmNsYXNzIFZpZXdTdGF0ZSBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcml2YXRlIF9pUmV0cmlldmluZ1N0YXRlQ291bnRlcjogbnVtYmVyO1xuXHRwcml2YXRlIF9wSW5pdGlhbFN0YXRlQXBwbGllZDogUHJvbWlzZTx1bmtub3duPjtcblx0cHJpdmF0ZSBfcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlPzogRnVuY3Rpb247XG5cdHByaXZhdGUgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3Rvci5cblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5faVJldHJpZXZpbmdTdGF0ZUNvdW50ZXIgPSAwO1xuXHRcdHRoaXMuX3BJbml0aWFsU3RhdGVBcHBsaWVkID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG5cdFx0XHR0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmUgPSByZXNvbHZlO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBuYW1lIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZS5nZXRNZXRhZGF0YVxuXHQgKiBAZnVuY3Rpb25cblx0ICovXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUuZXh0ZW5kXG5cdCAqIEBmdW5jdGlvblxuXHQgKi9cblxuXHRAUHVibGljXG5cdEBGaW5hbFxuXHRyZWZyZXNoVmlld0JpbmRpbmdzKCkge1xuXHRcdHJldHVybiB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUuYWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzKS50aGVuKChhQ29udHJvbHM6IGFueSkgPT4ge1xuXHRcdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdGFDb250cm9sc1xuXHRcdFx0XHQuZmlsdGVyKChvQ29udHJvbDogYW55KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db250cm9sICYmIG9Db250cm9sLmlzQSAmJiBvQ29udHJvbC5pc0EoXCJzYXAudWkuYmFzZS5NYW5hZ2VkT2JqZWN0XCIpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZm9yRWFjaCgob0NvbnRyb2w6IGFueSkgPT4ge1xuXHRcdFx0XHRcdG9Qcm9taXNlQ2hhaW4gPSBvUHJvbWlzZUNoYWluLnRoZW4odGhpcy5yZWZyZXNoQ29udHJvbEJpbmRpbmcuYmluZCh0aGlzLCBvQ29udHJvbCkpO1xuXHRcdFx0XHR9KTtcblx0XHRcdHJldHVybiBvUHJvbWlzZUNoYWluO1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBhZGQgYWxsIGNvbnRyb2xzIHJlbGV2YW50IGZvciByZWZyZXNoaW5nIHRvIHRoZSBwcm92aWRlZCBjb250cm9sIGFycmF5LlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKiBAcGFyYW0ge0FycmF5PHNhcC51aS5iYXNlLk1hbmFnZWRPYmplY3Q+fSBhQ29sbGVjdGVkQ29udHJvbHMgVGhlIGNvbGxlY3RlZCBjb250cm9sc1xuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlI2FkYXB0QmluZGluZ1JlZnJlc2hDb250cm9sc1xuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAUHVibGljXG5cdEBFeHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGFkYXB0QmluZGluZ1JlZnJlc2hDb250cm9scyhhQ29sbGVjdGVkQ29udHJvbHM6IE1hbmFnZWRPYmplY3RbXSkge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0QFByaXZhdGVcblx0QEZpbmFsXG5cdHJlZnJlc2hDb250cm9sQmluZGluZyhvQ29udHJvbDogYW55KSB7XG5cdFx0Y29uc3Qgb0NvbnRyb2xSZWZyZXNoQmluZGluZ0hhbmRsZXIgPSB0aGlzLmdldENvbnRyb2xSZWZyZXNoQmluZGluZ0hhbmRsZXIob0NvbnRyb2wpO1xuXHRcdGxldCBvUHJvbWlzZUNoYWluID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0aWYgKHR5cGVvZiBvQ29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlci5yZWZyZXNoQmluZGluZyAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRMb2cuaW5mbyhcInJlZnJlc2hCaW5kaW5nIGhhbmRsZXIgZm9yIGNvbnRyb2w6IFwiICsgb0NvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgKyBcIiBpcyBub3QgcHJvdmlkZWRcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9Qcm9taXNlQ2hhaW4gPSBvUHJvbWlzZUNoYWluLnRoZW4ob0NvbnRyb2xSZWZyZXNoQmluZGluZ0hhbmRsZXIucmVmcmVzaEJpbmRpbmcuYmluZCh0aGlzLCBvQ29udHJvbCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gb1Byb21pc2VDaGFpbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbWFwIG9mIDxjb2RlPnJlZnJlc2hCaW5kaW5nPC9jb2RlPiBmdW5jdGlvbiBmb3IgYSBjZXJ0YWluIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c2FwLnVpLmJhc2UuTWFuYWdlZE9iamVjdH0gb0NvbnRyb2wgVGhlIGNvbnRyb2wgdG8gZ2V0IHN0YXRlIGhhbmRsZXIgZm9yXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IEEgcGxhaW4gb2JqZWN0IHdpdGggb25lIGZ1bmN0aW9uOiA8Y29kZT5yZWZyZXNoQmluZGluZzwvY29kZT5cblx0ICovXG5cblx0QFByaXZhdGVcblx0QEZpbmFsXG5cdGdldENvbnRyb2xSZWZyZXNoQmluZGluZ0hhbmRsZXIob0NvbnRyb2w6IGFueSk6IGFueSB7XG5cdFx0Y29uc3Qgb1JlZnJlc2hCaW5kaW5nSGFuZGxlcjogYW55ID0ge307XG5cdFx0aWYgKG9Db250cm9sKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNUeXBlIGluIF9tQ29udHJvbFN0YXRlSGFuZGxlck1hcCkge1xuXHRcdFx0XHRpZiAob0NvbnRyb2wuaXNBKHNUeXBlKSkge1xuXHRcdFx0XHRcdC8vIHBhc3Mgb25seSB0aGUgcmVmcmVzaEJpbmRpbmcgaGFuZGxlciBpbiBhbiBvYmplY3Qgc28gdGhhdCA6XG5cdFx0XHRcdFx0Ly8gMS4gQXBwbGljYXRpb24gaGFzIGFjY2VzcyBvbmx5IHRvIHJlZnJlc2hCaW5kaW5nIGFuZCBub3QgYXBwbHkgYW5kIHJldGVyaXZlIGF0IHRoaXMgc3RhZ2Vcblx0XHRcdFx0XHQvLyAyLiBBcHBsaWNhdGlvbiBtb2RpZmljYXRpb25zIHRvIHRoZSBvYmplY3Qgd2lsbCBiZSByZWZsZWN0ZWQgaGVyZSAoYXMgd2UgcGFzcyBieSByZWZlcmVuY2UpXG5cdFx0XHRcdFx0b1JlZnJlc2hCaW5kaW5nSGFuZGxlcltcInJlZnJlc2hCaW5kaW5nXCJdID0gX21Db250cm9sU3RhdGVIYW5kbGVyTWFwW3NUeXBlXS5yZWZyZXNoQmluZGluZyB8fCB7fTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmJhc2Uudmlld1N0YXRlLmFkYXB0QmluZGluZ1JlZnJlc2hIYW5kbGVyKG9Db250cm9sLCBvUmVmcmVzaEJpbmRpbmdIYW5kbGVyKTtcblx0XHRyZXR1cm4gb1JlZnJlc2hCaW5kaW5nSGFuZGxlcjtcblx0fVxuXHQvKipcblx0ICogQ3VzdG9taXplIHRoZSA8Y29kZT5yZWZyZXNoQmluZGluZzwvY29kZT4gZnVuY3Rpb24gZm9yIGEgY2VydGFpbiBjb250cm9sLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0ge3NhcC51aS5iYXNlLk1hbmFnZWRPYmplY3R9IG9Db250cm9sIFRoZSBjb250cm9sIGZvciB3aGljaCB0aGUgcmVmcmVzaCBoYW5kbGVyIGlzIGFkYXB0ZWQuXG5cdCAqIEBwYXJhbSB7QXJyYXk8b2JqZWN0Pn0gb0NvbnRyb2xIYW5kbGVyIEEgcGxhaW4gb2JqZWN0IHdoaWNoIGNhbiBoYXZlIG9uZSBmdW5jdGlvbjogPGNvZGU+cmVmcmVzaEJpbmRpbmc8L2NvZGU+XG5cdCAqXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUjYWRhcHRCaW5kaW5nUmVmcmVzaEhhbmRsZXJcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QFB1YmxpY1xuXHRARXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRhZGFwdEJpbmRpbmdSZWZyZXNoSGFuZGxlcihvQ29udHJvbDogTWFuYWdlZE9iamVjdCwgb0NvbnRyb2xIYW5kbGVyOiBhbnlbXSkge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyBzdXNwZW5kZWQgZHVlIHRvIGtlZXAtYWxpdmUgbW9kZS5cblx0ICpcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZSNvblN1c3BlbmRcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QFB1YmxpY1xuXHRARXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25TdXNwZW5kKCkge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyByZXN0b3JlZCBkdWUgdG8ga2VlcC1hbGl2ZSBtb2RlLlxuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlI29uUmVzdG9yZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAUHVibGljXG5cdEBFeHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblJlc3RvcmUoKSB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHQvKipcblx0ICogRGVzdHJ1Y3RvciBtZXRob2QgZm9yIG9iamVjdHMuXG5cdCAqL1xuXHRkZXN0cm95KCkge1xuXHRcdGRlbGV0ZSB0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmU7XG5cdFx0c3VwZXIuZGVzdHJveSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhlbHBlciBmdW5jdGlvbiB0byBlbmFibGUgbXVsdGkgb3ZlcnJpZGUuIEl0IGlzIGFkZGluZyBhbiBhZGRpdGlvbmFsIHBhcmFtZXRlciAoYXJyYXkpIHRvIHRoZSBwcm92aWRlZFxuXHQgKiBmdW5jdGlvbiAoYW5kIGl0cyBwYXJhbWV0ZXJzKSwgdGhhdCB3aWxsIGJlIGV2YWx1YXRlZCB2aWEgPGNvZGU+UHJvbWlzZS5hbGw8L2NvZGU+LlxuXHQgKlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbkNhbGwgVGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZFxuXHQgKiBAcGFyYW0gYXJnc1xuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gQSBwcm9taXNlIHRvIGJlIHJlc29sdmVkIHdpdGggdGhlIHJlc3VsdCBvZiBhbGwgb3ZlcnJpZGVzXG5cdCAqL1xuXHRAUHJpdmF0ZVxuXHRARmluYWxcblx0Y29sbGVjdFJlc3VsdHMoZm5DYWxsOiBGdW5jdGlvbiwgLi4uYXJnczogYW55W10pIHtcblx0XHRjb25zdCBhUmVzdWx0czogYW55W10gPSBbXTtcblx0XHRhcmdzLnB1c2goYVJlc3VsdHMpO1xuXHRcdGZuQ2FsbC5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYVJlc3VsdHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEN1c3RvbWl6ZSB0aGUgPGNvZGU+cmV0cmlldmU8L2NvZGU+IGFuZCA8Y29kZT5hcHBseTwvY29kZT4gZnVuY3Rpb25zIGZvciBhIGNlcnRhaW4gY29udHJvbC5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIHtzYXAudWkuYmFzZS5NYW5hZ2VkT2JqZWN0fSBvQ29udHJvbCBUaGUgY29udHJvbCB0byBnZXQgc3RhdGUgaGFuZGxlciBmb3Jcblx0ICogQHBhcmFtIHtBcnJheTxvYmplY3Q+fSBhQ29udHJvbEhhbmRsZXIgQSBsaXN0IG9mIHBsYWluIG9iamVjdHMgd2l0aCB0d28gZnVuY3Rpb25zOiA8Y29kZT5yZXRyaWV2ZTwvY29kZT4gYW5kIDxjb2RlPmFwcGx5PC9jb2RlPlxuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlI2FkYXB0Q29udHJvbFN0YXRlSGFuZGxlclxuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAUHVibGljXG5cdEBFeHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGFkYXB0Q29udHJvbFN0YXRlSGFuZGxlcihvQ29udHJvbDogTWFuYWdlZE9iamVjdCwgYUNvbnRyb2xIYW5kbGVyOiBvYmplY3RbXSkge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVlZGVkXG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIG1hcCBvZiA8Y29kZT5yZXRyaWV2ZTwvY29kZT4gYW5kIDxjb2RlPmFwcGx5PC9jb2RlPiBmdW5jdGlvbnMgZm9yIGEgY2VydGFpbiBjb250cm9sLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3NhcC51aS5iYXNlLk1hbmFnZWRPYmplY3R9IG9Db250cm9sIFRoZSBjb250cm9sIHRvIGdldCBzdGF0ZSBoYW5kbGVyIGZvclxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBBIHBsYWluIG9iamVjdCB3aXRoIHR3byBmdW5jdGlvbnM6IDxjb2RlPnJldHJpZXZlPC9jb2RlPiBhbmQgPGNvZGU+YXBwbHk8L2NvZGU+XG5cdCAqL1xuXHRAUHJpdmF0ZVxuXHRARmluYWxcblx0Z2V0Q29udHJvbFN0YXRlSGFuZGxlcihvQ29udHJvbDogYW55KSB7XG5cdFx0Y29uc3QgYUludGVybmFsQ29udHJvbFN0YXRlSGFuZGxlciA9IFtdLFxuXHRcdFx0YUN1c3RvbUNvbnRyb2xTdGF0ZUhhbmRsZXI6IGFueVtdID0gW107XG5cdFx0aWYgKG9Db250cm9sKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNUeXBlIGluIF9tQ29udHJvbFN0YXRlSGFuZGxlck1hcCkge1xuXHRcdFx0XHRpZiAob0NvbnRyb2wuaXNBKHNUeXBlKSkge1xuXHRcdFx0XHRcdC8vIGF2b2lkIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgaW50ZXJuYWwgX21Db250cm9sU3RhdGVIYW5kbGVyTWFwXG5cdFx0XHRcdFx0YUludGVybmFsQ29udHJvbFN0YXRlSGFuZGxlci5wdXNoKE9iamVjdC5hc3NpZ24oe30sIF9tQ29udHJvbFN0YXRlSGFuZGxlck1hcFtzVHlwZV0pKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmJhc2Uudmlld1N0YXRlLmFkYXB0Q29udHJvbFN0YXRlSGFuZGxlcihvQ29udHJvbCwgYUN1c3RvbUNvbnRyb2xTdGF0ZUhhbmRsZXIpO1xuXHRcdHJldHVybiBhSW50ZXJuYWxDb250cm9sU3RhdGVIYW5kbGVyLmNvbmNhdChhQ3VzdG9tQ29udHJvbFN0YXRlSGFuZGxlcik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYWRkIGFsbCBjb250cm9scyBmb3IgZ2l2ZW4gdmlldyB0aGF0IHNob3VsZCBiZSBjb25zaWRlcmVkIGZvciB0aGUgc3RhdGUgaGFuZGxpbmcgdG8gdGhlIHByb3ZpZGVkIGNvbnRyb2wgYXJyYXkuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqIEBwYXJhbSB7QXJyYXk8c2FwLnVpLmJhc2UuTWFuYWdlZE9iamVjdD59IGFDb2xsZWN0ZWRDb250cm9scyBUaGUgY29sbGVjdGVkIGNvbnRyb2xzXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUjYWRhcHRTdGF0ZUNvbnRyb2xzXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBQdWJsaWNcblx0QEV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0YWRhcHRTdGF0ZUNvbnRyb2xzKGFDb2xsZWN0ZWRDb250cm9sczogTWFuYWdlZE9iamVjdFtdKSB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWRcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBrZXkgdG8gYmUgdXNlZCBmb3IgZ2l2ZW4gY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIHtzYXAudWkuYmFzZS5NYW5hZ2VkT2JqZWN0fSBvQ29udHJvbCBUaGUgY29udHJvbCB0byBnZXQgc3RhdGUga2V5IGZvclxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUga2V5IHRvIGJlIHVzZWQgZm9yIHN0b3JpbmcgdGhlIGNvbnRyb2xzIHN0YXRlXG5cdCAqL1xuXHRAUHVibGljXG5cdEBGaW5hbFxuXHRnZXRTdGF0ZUtleShvQ29udHJvbDogYW55KSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldExvY2FsSWQob0NvbnRyb2wuZ2V0SWQoKSkgfHwgb0NvbnRyb2wuZ2V0SWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgdmlldyBzdGF0ZSBvZiB0aGlzIGV4dGVuc2lvbnMgdmlldy5cblx0ICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBiZWZvcmUgZmluaXNoaW5nLCBhbGwgYnV0IHRoZSBmaW5hbCByZXNwb25zZSB3aWxsIHJlc29sdmUgdG8gPGNvZGU+dW5kZWZpbmVkPC9jb2RlPi5cblx0ICpcblx0ICogQHJldHVybnMge1Byb21pc2V9IEEgcHJvbWlzZSByZXNvbHZpbmcgdGhlIHZpZXcgc3RhdGVcblx0ICpcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZSNyZXRyaWV2ZVZpZXdTdGF0ZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAUHVibGljXG5cdEBGaW5hbFxuXHRyZXRyaWV2ZVZpZXdTdGF0ZSgpIHtcblx0XHQrK3RoaXMuX2lSZXRyaWV2aW5nU3RhdGVDb3VudGVyO1xuXHRcdHJldHVybiB0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0UmVzdWx0cyh0aGlzLmJhc2Uudmlld1N0YXRlLmFkYXB0U3RhdGVDb250cm9scyk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKGFDb250cm9sczogYW55KSA9PiB7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChcblx0XHRcdFx0XHRhQ29udHJvbHNcblx0XHRcdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24ob0NvbnRyb2w6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb0NvbnRyb2wgJiYgb0NvbnRyb2wuaXNBICYmIG9Db250cm9sLmlzQShcInNhcC51aS5iYXNlLk1hbmFnZWRPYmplY3RcIik7XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0Lm1hcCgob0NvbnRyb2w6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXRyaWV2ZUNvbnRyb2xTdGF0ZShvQ29udHJvbCkudGhlbigodlJlc3VsdDogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRcdGtleTogdGhpcy5nZXRTdGF0ZUtleShvQ29udHJvbCksXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogdlJlc3VsdFxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbihhUmVzb2x2ZWRTdGF0ZXM6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gYVJlc29sdmVkU3RhdGVzLnJlZHVjZShmdW5jdGlvbihvU3RhdGVzOiBhbnksIG1TdGF0ZTogYW55KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0N1cnJlbnRTdGF0ZTogYW55ID0ge307XG5cdFx0XHRcdFx0b0N1cnJlbnRTdGF0ZVttU3RhdGUua2V5XSA9IG1TdGF0ZS52YWx1ZTtcblx0XHRcdFx0XHRyZXR1cm4gbWVyZ2VPYmplY3RzKG9TdGF0ZXMsIG9DdXJyZW50U3RhdGUpO1xuXHRcdFx0XHR9LCB7fSk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKG9WaWV3U3RhdGU6IGFueSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3JldHJpZXZlQWRkaXRpb25hbFN0YXRlcygpKS50aGVuKGZ1bmN0aW9uKG1BZGRpdGlvbmFsU3RhdGVzOiBhbnkpIHtcblx0XHRcdFx0XHRpZiAobUFkZGl0aW9uYWxTdGF0ZXMgJiYgT2JqZWN0LmtleXMobUFkZGl0aW9uYWxTdGF0ZXMpLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0b1ZpZXdTdGF0ZVtBRERJVElPTkFMX1NUQVRFU19LRVldID0gbUFkZGl0aW9uYWxTdGF0ZXM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBvVmlld1N0YXRlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdC0tdGhpcy5faVJldHJpZXZpbmdTdGF0ZUNvdW50ZXI7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKG9WaWV3U3RhdGU6IGFueSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5faVJldHJpZXZpbmdTdGF0ZUNvdW50ZXIgPT09IDAgPyBvVmlld1N0YXRlIDogdW5kZWZpbmVkO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogRXh0ZW5kIHRoZSBtYXAgb2YgYWRkaXRpb25hbCBzdGF0ZXMgKG5vdCBjb250cm9sIGJvdW5kKSB0byBiZSBhZGRlZCB0byB0aGUgY3VycmVudCB2aWV3IHN0YXRlIG9mIHRoZSBnaXZlbiB2aWV3LlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gbUFkZGl0aW9uYWxTdGF0ZXMgVGhlIGFkZGl0aW9uYWwgc3RhdGVcblx0ICpcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZSNyZXRyaWV2ZUFkZGl0aW9uYWxTdGF0ZXNcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QFB1YmxpY1xuXHRARXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRyZXRyaWV2ZUFkZGl0aW9uYWxTdGF0ZXMobUFkZGl0aW9uYWxTdGF0ZXM6IG9iamVjdCkge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVlZGVkXG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIG1hcCBvZiBhZGRpdGlvbmFsIHN0YXRlcyAobm90IGNvbnRyb2wgYm91bmQpIHRvIGJlIGFkZGVkIHRvIHRoZSBjdXJyZW50IHZpZXcgc3RhdGUgb2YgdGhlIGdpdmVuIHZpZXcuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtvYmplY3QgfCBQcm9taXNlPG9iamVjdD59IEFkZGl0aW9uYWwgdmlldyBzdGF0ZXNcblx0ICovXG5cdF9yZXRyaWV2ZUFkZGl0aW9uYWxTdGF0ZXMoKSB7XG5cdFx0Y29uc3QgbUFkZGl0aW9uYWxTdGF0ZXMgPSB7fTtcblx0XHR0aGlzLmJhc2Uudmlld1N0YXRlLnJldHJpZXZlQWRkaXRpb25hbFN0YXRlcyhtQWRkaXRpb25hbFN0YXRlcyk7XG5cdFx0cmV0dXJuIG1BZGRpdGlvbmFsU3RhdGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgZm9yIHRoZSBnaXZlbiBjb250cm9sLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3NhcC51aS5iYXNlLk1hbmFnZWRPYmplY3R9IG9Db250cm9sIFRoZSBvYmplY3QgdG8gZ2V0IHRoZSBzdGF0ZSBmb3Jcblx0ICogQHJldHVybnMge1Byb21pc2U8b2JqZWN0Pn0gVGhlIHN0YXRlIGZvciB0aGUgZ2l2ZW4gY29udHJvbFxuXHQgKi9cblx0QFByaXZhdGVcblx0QEZpbmFsXG5cdHJldHJpZXZlQ29udHJvbFN0YXRlKG9Db250cm9sOiBhbnkpIHtcblx0XHRjb25zdCBhQ29udHJvbFN0YXRlSGFuZGxlcnMgPSB0aGlzLmdldENvbnRyb2xTdGF0ZUhhbmRsZXIob0NvbnRyb2wpO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChcblx0XHRcdGFDb250cm9sU3RhdGVIYW5kbGVycy5tYXAoKG1Db250cm9sU3RhdGVIYW5kbGVyOiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKHR5cGVvZiBtQ29udHJvbFN0YXRlSGFuZGxlci5yZXRyaWV2ZSAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiY29udHJvbFN0YXRlSGFuZGxlci5yZXRyaWV2ZSBpcyBub3QgYSBmdW5jdGlvbiBmb3IgY29udHJvbDogXCIgKyBvQ29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG1Db250cm9sU3RhdGVIYW5kbGVyLnJldHJpZXZlLmNhbGwodGhpcywgb0NvbnRyb2wpO1xuXHRcdFx0fSlcblx0XHQpLnRoZW4oKGFTdGF0ZXM6IGFueVtdKSA9PiB7XG5cdFx0XHRyZXR1cm4gYVN0YXRlcy5yZWR1Y2UoZnVuY3Rpb24ob0ZpbmFsU3RhdGU6IGFueSwgb0N1cnJlbnRTdGF0ZTogYW55KSB7XG5cdFx0XHRcdHJldHVybiBtZXJnZU9iamVjdHMob0ZpbmFsU3RhdGUsIG9DdXJyZW50U3RhdGUpO1xuXHRcdFx0fSwge30pO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmluZXMgd2hldGhlciB0aGUgdmlldyBzdGF0ZSBzaG91bGQgb25seSBiZSBhcHBsaWVkIG9uY2UgaW5pdGlhbGx5LlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uSW5zdGVhZH0uXG5cdCAqXG5cdCAqIEltcG9ydGFudDpcblx0ICogWW91IHNob3VsZCBvbmx5IG92ZXJyaWRlIHRoaXMgbWV0aG9kIGZvciBjdXN0b20gcGFnZXMgYW5kIG5vdCBmb3IgdGhlIHN0YW5kYXJkIExpc3RSZXBvcnRQYWdlIGFuZCBPYmplY3RQYWdlIVxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gSWYgPGNvZGU+dHJ1ZTwvY29kZT4sIG9ubHkgdGhlIGluaXRpYWwgdmlldyBzdGF0ZSBpcyBhcHBsaWVkIG9uY2UsXG5cdCAqIGVsc2UgYW55IG5ldyB2aWV3IHN0YXRlIGlzIGFsc28gYXBwbGllZCBvbiBmb2xsb3ctdXAgY2FsbHMgKGRlZmF1bHQpXG5cdCAqXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUjYXBwbHlJbml0aWFsU3RhdGVPbmx5XG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBQdWJsaWNcblx0QEV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uSW5zdGVhZClcblx0YXBwbHlJbml0aWFsU3RhdGVPbmx5KCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdC8qKlxuXHQgKiBBcHBsaWVzIHRoZSBnaXZlbiB2aWV3IHN0YXRlIHRvIHRoaXMgZXh0ZW5zaW9ucyB2aWV3LlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb1ZpZXdTdGF0ZSBUaGUgdmlldyBzdGF0ZSB0byBhcHBseSAoY2FuIGJlIHVuZGVmaW5lZClcblx0ICogQHBhcmFtIHtvYmplY3R9IG9OYXZQYXJhbWV0ZXIgVGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIHtzYXAuZmUubmF2aWdhdGlvbi5OYXZUeXBlfSBvTmF2UGFyYW1ldGVyLm5hdmlnYXRpb25UeXBlIFRoZSBhY3R1YWwgbmF2aWdhdGlvbiB0eXBlXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvTmF2UGFyYW1ldGVyLnNlbGVjdGlvblZhcmlhbnQgVGhlIHNlbGVjdGlvblZhcmlhbnQgZnJvbSB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0ge29iamVjdH0gb05hdlBhcmFtZXRlci5zZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMgVGhlIHNlbGVjdGlvblZhcmlhbnQgZGVmYXVsdHMgZnJvbSB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IG9OYXZQYXJhbWV0ZXIucmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQgRGVmaW5lcyB3aGV0aGVyIHN0YW5kYXJkIHZhcmlhbnQgbXVzdCBiZSB1c2VkIGluIFZNXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIGZvciBhc3luYyBzdGF0ZSBoYW5kbGluZ1xuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlI2FwcGx5Vmlld1N0YXRlXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBQdWJsaWNcblx0QEZpbmFsXG5cdGFwcGx5Vmlld1N0YXRlKFxuXHRcdG9WaWV3U3RhdGU6IGFueSxcblx0XHRvTmF2UGFyYW1ldGVyOiB7XG5cdFx0XHRuYXZpZ2F0aW9uVHlwZTogYW55O1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudD86IG9iamVjdDtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnREZWZhdWx0cz86IG9iamVjdDtcblx0XHRcdHJlcXVpcmVzU3RhbmRhcmRWYXJpYW50PzogYm9vbGVhbjtcblx0XHR9XG5cdCk6IFByb21pc2U8YW55PiB7XG5cdFx0aWYgKHRoaXMuYmFzZS52aWV3U3RhdGUuYXBwbHlJbml0aWFsU3RhdGVPbmx5KCkgJiYgdGhpcy5fZ2V0SW5pdGlhbFN0YXRlQXBwbGllZCgpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUub25CZWZvcmVTdGF0ZUFwcGxpZWQpXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUuYWRhcHRTdGF0ZUNvbnRyb2xzKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoYUNvbnRyb2xzOiBhbnkpID0+IHtcblx0XHRcdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdFx0YUNvbnRyb2xzXG5cdFx0XHRcdFx0LmZpbHRlcihmdW5jdGlvbihvQ29udHJvbDogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0NvbnRyb2wgJiYgb0NvbnRyb2wuaXNBICYmIG9Db250cm9sLmlzQShcInNhcC51aS5iYXNlLk1hbmFnZWRPYmplY3RcIik7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuZm9yRWFjaCgob0NvbnRyb2w6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc0tleSA9IHRoaXMuZ2V0U3RhdGVLZXkob0NvbnRyb2wpO1xuXHRcdFx0XHRcdFx0b1Byb21pc2VDaGFpbiA9IG9Qcm9taXNlQ2hhaW4udGhlbihcblx0XHRcdFx0XHRcdFx0dGhpcy5hcHBseUNvbnRyb2xTdGF0ZS5iaW5kKHRoaXMsIG9Db250cm9sLCBvVmlld1N0YXRlID8gb1ZpZXdTdGF0ZVtzS2V5XSA6IHVuZGVmaW5lZCwgb05hdlBhcmFtZXRlcilcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBvUHJvbWlzZUNoYWluO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0aWYgKG9OYXZQYXJhbWV0ZXIubmF2aWdhdGlvblR5cGUgPT09IE5hdlR5cGUuaUFwcFN0YXRlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuY29sbGVjdFJlc3VsdHMoXG5cdFx0XHRcdFx0XHR0aGlzLmJhc2Uudmlld1N0YXRlLmFwcGx5QWRkaXRpb25hbFN0YXRlcyxcblx0XHRcdFx0XHRcdG9WaWV3U3RhdGUgPyBvVmlld1N0YXRlW0FERElUSU9OQUxfU1RBVEVTX0tFWV0gOiB1bmRlZmluZWRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUuYXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVycywgb05hdlBhcmFtZXRlcik7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUub25BZnRlclN0YXRlQXBwbGllZCkudGhlbih0aGlzLl9zZXRJbml0aWFsU3RhdGVBcHBsaWVkLmJpbmQodGhpcykpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRAUHJpdmF0ZVxuXHRfY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlKG9WTTogYW55LCBzVmFyaWFudElkOiBhbnkpIHtcblx0XHRjb25zdCBhVmFyaWFudHMgPSBvVk0uZ2V0VmFyaWFudHMoKTtcblx0XHRsZXQgYklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSA9IGZhbHNlO1xuXHRcdGFWYXJpYW50cy5mb3JFYWNoKGZ1bmN0aW9uKG9WYXJpYW50OiBhbnkpIHtcblx0XHRcdGlmIChvVmFyaWFudC5rZXkgPT09IHNWYXJpYW50SWQpIHtcblx0XHRcdFx0YklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGU7XG5cdH1cblxuXHRfc2V0SW5pdGlhbFN0YXRlQXBwbGllZCgpIHtcblx0XHRpZiAodGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlKSB7XG5cdFx0XHRjb25zdCBwSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmUgPSB0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmU7XG5cdFx0XHRkZWxldGUgdGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlO1xuXHRcdFx0cEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlKCk7XG5cdFx0fVxuXHR9XG5cdF9nZXRJbml0aWFsU3RhdGVBcHBsaWVkKCkge1xuXHRcdHJldHVybiAhdGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhvb2sgdG8gcmVhY3QgYmVmb3JlIGEgc3RhdGUgZm9yIGdpdmVuIHZpZXcgaXMgYXBwbGllZC5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIHtQcm9taXNlfSBhUHJvbWlzZXMgRXh0ZW5zaWJsZSBhcnJheSBvZiBwcm9taXNlcyB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZ1xuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlI29uQmVmb3JlU3RhdGVBcHBsaWVkXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBQdWJsaWNcblx0QEV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25CZWZvcmVTdGF0ZUFwcGxpZWQoYVByb21pc2VzOiBQcm9taXNlPGFueT4pIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW5cblx0fVxuXG5cdC8qKlxuXHQgKiBIb29rIHRvIHJlYWN0IHdoZW4gc3RhdGUgZm9yIGdpdmVuIHZpZXcgd2FzIGFwcGxpZWQuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSB7UHJvbWlzZX0gYVByb21pc2VzIEV4dGVuc2libGUgYXJyYXkgb2YgcHJvbWlzZXMgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIGNvbnRpbnVpbmdcblx0ICpcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZSNvbkFmdGVyU3RhdGVBcHBsaWVkXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBQdWJsaWNcblx0QEV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25BZnRlclN0YXRlQXBwbGllZChhUHJvbWlzZXM6IFByb21pc2U8YW55Pikge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGx5aW5nIGFkZGl0aW9uYWwsIG5vdCBjb250cm9sIHJlbGF0ZWQsIHN0YXRlcyAtIGlzIGNhbGxlZCBvbmx5IGlmIG5hdmlnYXRpb24gdHlwZSBpcyBpQXBwU3RhdGUuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvVmlld1N0YXRlIFRoZSBjdXJyZW50IHZpZXcgc3RhdGVcblx0ICogQHBhcmFtIHtQcm9taXNlfSBhUHJvbWlzZXMgRXh0ZW5zaWJsZSBhcnJheSBvZiBwcm9taXNlcyB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZ1xuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlI2FwcGx5QWRkaXRpb25hbFN0YXRlc1xuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAUHVibGljXG5cdEBFeHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGFwcGx5QWRkaXRpb25hbFN0YXRlcyhvVmlld1N0YXRlOiBvYmplY3QsIGFQcm9taXNlczogUHJvbWlzZTxhbnk+KSB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWRcblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBseSBuYXZpZ2F0aW9uIHBhcmFtZXRlcnMgLSBpcyBjYWxsZWQgb25seSBpZiBuYXZpZ2F0aW9uIHR5cGUgaXMgbm90IGlBcHBTdGF0ZS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IG9OYXZQYXJhbWV0ZXIgVGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIHtzYXAuZmUubmF2aWdhdGlvbi5OYXZUeXBlfSBvTmF2UGFyYW1ldGVyLm5hdmlnYXRpb25UeXBlIFRoZSBhY3R1YWwgbmF2aWdhdGlvbiB0eXBlXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBbb05hdlBhcmFtZXRlci5zZWxlY3Rpb25WYXJpYW50XSBUaGUgc2VsZWN0aW9uVmFyaWFudCBmcm9tIHRoZSBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBbb05hdlBhcmFtZXRlci5zZWxlY3Rpb25WYXJpYW50RGVmYXVsdHNdIFRoZSBzZWxlY3Rpb25WYXJpYW50IGRlZmF1bHRzIGZyb20gdGhlIG5hdmlnYXRpb25cblx0ICogQHBhcmFtIHtib29sZWFufSBbb05hdlBhcmFtZXRlci5yZXF1aXJlc1N0YW5kYXJkVmFyaWFudF0gRGVmaW5lcyB3aGV0aGVyIHN0YW5kYXJkIHZhcmlhbnQgbXVzdCBiZSB1c2VkIGluIFZNXG5cdCAqIEBwYXJhbSB7UHJvbWlzZX0gYVByb21pc2VzIEV4dGVuc2libGUgYXJyYXkgb2YgcHJvbWlzZXMgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIGNvbnRpbnVpbmdcblx0ICpcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZSNhcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBQdWJsaWNcblx0QEV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdGFwcGx5TmF2aWdhdGlvblBhcmFtZXRlcnMoXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRcdG9OYXZQYXJhbWV0ZXI6IHtcblx0XHRcdG5hdmlnYXRpb25UeXBlOiBhbnk7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50Pzogb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudERlZmF1bHRzPzogb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRcdFx0cmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRcdH0sXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRcdGFQcm9taXNlczogUHJvbWlzZTxhbnk+XG5cdCkge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVlZGVkXG5cdH1cblxuXHQvKipcblx0ICogQXBwbHlpbmcgdGhlIGdpdmVuIHN0YXRlIHRvIHRoZSBnaXZlbiBjb250cm9sLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3NhcC51aS5iYXNlLk1hbmFnZWRPYmplY3R9IG9Db250cm9sIFRoZSBvYmplY3QgdG8gYXBwbHkgdGhlIGdpdmVuIHN0YXRlXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvQ29udHJvbFN0YXRlIFRoZSBzdGF0ZSBmb3IgdGhlIGdpdmVuIGNvbnRyb2xcblx0ICogQHBhcmFtIHtvYmplY3R9IFtvTmF2UGFyYW1ldGVyc10gVGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzXG5cdCAqIEByZXR1cm5zIHthbnl9IFJldHVybiBhIHByb21pc2UgZm9yIGFzeW5jIHN0YXRlIGhhbmRsaW5nXG5cdCAqL1xuXHRAUHJpdmF0ZVxuXHRARmluYWxcblx0YXBwbHlDb250cm9sU3RhdGUob0NvbnRyb2w6IGFueSwgb0NvbnRyb2xTdGF0ZTogb2JqZWN0LCBvTmF2UGFyYW1ldGVycz86IG9iamVjdCkge1xuXHRcdGNvbnN0IGFDb250cm9sU3RhdGVIYW5kbGVycyA9IHRoaXMuZ2V0Q29udHJvbFN0YXRlSGFuZGxlcihvQ29udHJvbCk7XG5cdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRhQ29udHJvbFN0YXRlSGFuZGxlcnMuZm9yRWFjaCgobUNvbnRyb2xTdGF0ZUhhbmRsZXI6IGFueSkgPT4ge1xuXHRcdFx0aWYgKHR5cGVvZiBtQ29udHJvbFN0YXRlSGFuZGxlci5hcHBseSAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImNvbnRyb2xTdGF0ZUhhbmRsZXIuYXBwbHkgaXMgbm90IGEgZnVuY3Rpb24gZm9yIGNvbnRyb2w6IFwiICsgb0NvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkpO1xuXHRcdFx0fVxuXHRcdFx0b1Byb21pc2VDaGFpbiA9IG9Qcm9taXNlQ2hhaW4udGhlbihtQ29udHJvbFN0YXRlSGFuZGxlci5hcHBseS5iaW5kKHRoaXMsIG9Db250cm9sLCBvQ29udHJvbFN0YXRlLCBvTmF2UGFyYW1ldGVycykpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBvUHJvbWlzZUNoYWluO1xuXHR9XG5cdGdldEludGVyZmFjZSgpIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBWaWV3U3RhdGU7XG4iXX0=