@sapui5/sap.ushell 1.134.0 → 1.135.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 (729) hide show
  1. package/package.json +1 -1
  2. package/src/main/js/sap/ushell/.library +2 -1
  3. package/src/main/js/sap/ushell/AppInfoParameters.js +29 -6
  4. package/src/main/js/sap/ushell/ApplicationType/UrlPostProcessing.js +3 -3
  5. package/src/main/js/sap/ushell/ApplicationType/guiResolution.js +185 -174
  6. package/src/main/js/sap/ushell/ApplicationType/urlTemplateResolution.js +1 -1
  7. package/src/main/js/sap/ushell/ApplicationType/wdaResolution.js +69 -61
  8. package/src/main/js/sap/ushell/EventHub.js +1 -3
  9. package/src/main/js/sap/ushell/Fiori20Adapter.js +1 -1
  10. package/src/main/js/sap/ushell/Fiori20AdapterTest.js +1 -1
  11. package/src/main/js/sap/ushell/NWBCInterface.js +2 -2
  12. package/src/main/js/sap/ushell/SessionHandler.js +3 -3
  13. package/src/main/js/sap/ushell/TechnicalParameters.js +1 -1
  14. package/src/main/js/sap/ushell/URLTemplateProcessor/DefinitionParameterSetBuilder.js +1 -1
  15. package/src/main/js/sap/ushell/URLTemplateProcessor/DependencyGraph.js +1 -1
  16. package/src/main/js/sap/ushell/URLTemplateProcessor/Functions.js +1 -1
  17. package/src/main/js/sap/ushell/URLTemplateProcessor/Resolvers.js +1 -1
  18. package/src/main/js/sap/ushell/URLTemplateProcessor/TemplateParameterParser.js +1 -1
  19. package/src/main/js/sap/ushell/URLTemplateProcessor/utils.js +1 -1
  20. package/src/main/js/sap/ushell/URLTemplateProcessor.js +1 -1
  21. package/src/main/js/sap/ushell/Ui5NativeServiceFactory.js +1 -1
  22. package/src/main/js/sap/ushell/Ui5ServiceFactory.js +1 -1
  23. package/src/main/js/sap/ushell/User.js +1 -1
  24. package/src/main/js/sap/ushell/adapters/cdm/ClientSideTargetResolutionAdapter.js +1 -1
  25. package/src/main/js/sap/ushell/adapters/cdm/CommonDataModelAdapter.js +1 -1
  26. package/src/main/js/sap/ushell/adapters/cdm/ConfigurationDefaultsAdapter.js +1 -1
  27. package/src/main/js/sap/ushell/adapters/cdm/ContainerAdapter.js +3 -11
  28. package/src/main/js/sap/ushell/adapters/cdm/LaunchPageAdapter.js +13 -4
  29. package/src/main/js/sap/ushell/adapters/cdm/PagesCommonDataModelAdapter.js +1 -1
  30. package/src/main/js/sap/ushell/adapters/cdm/PersonalizationAdapter.js +1 -1
  31. package/src/main/js/sap/ushell/adapters/cdm/PersonalizationV2Adapter.js +1 -1
  32. package/src/main/js/sap/ushell/adapters/cdm/Settings/UserLanguageAndRegion/UserLanguageAndRegion.view.xml +4 -2
  33. package/src/main/js/sap/ushell/adapters/cdm/Ui5ComponentLoaderAdapter.js +1 -1
  34. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/modifyHome.js +1 -1
  35. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/readCatalogs.js +1 -1
  36. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/readHome.js +1 -1
  37. package/src/main/js/sap/ushell/adapters/cdm/_LaunchPage/uri.transform.js +1 -1
  38. package/src/main/js/sap/ushell/adapters/cdm/util/AppForInbound.js +1 -1
  39. package/src/main/js/sap/ushell/adapters/cdm/util/cdmSiteUtils.js +1 -1
  40. package/src/main/js/sap/ushell/adapters/cdm/v3/AdapterBase.js +12 -3
  41. package/src/main/js/sap/ushell/adapters/cdm/v3/FlpLaunchPageAdapter.js +1 -1
  42. package/src/main/js/sap/ushell/adapters/cdm/v3/LaunchPageAdapter.js +1 -1
  43. package/src/main/js/sap/ushell/adapters/cdm/v3/StaticGroupsAdapter.js +1 -1
  44. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readApplications.js +1 -1
  45. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readCatalogs.js +1 -1
  46. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readHome.js +1 -1
  47. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readPages.js +1 -1
  48. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readUtils.js +1 -1
  49. package/src/main/js/sap/ushell/adapters/cdm/v3/_LaunchPage/readVisualizations.js +1 -1
  50. package/src/main/js/sap/ushell/adapters/cep/MenuAdapter.js +11 -5
  51. package/src/main/js/sap/ushell/adapters/cep/NavTargetResolutionAdapter.js +1 -1
  52. package/src/main/js/sap/ushell/adapters/cep/NavTargetResolutionInternalAdapter.js +1 -1
  53. package/src/main/js/sap/ushell/adapters/cep/SearchCEPAdapter.js +1 -1
  54. package/src/main/js/sap/ushell/adapters/cflp/UserDefaultParameterPersistenceAdapter.js +1 -1
  55. package/src/main/js/sap/ushell/adapters/local/AdapterContainer.js +1 -1
  56. package/src/main/js/sap/ushell/adapters/local/AppStateAdapter.js +1 -1
  57. package/src/main/js/sap/ushell/adapters/local/ClientSideTargetResolutionAdapter.js +1 -1
  58. package/src/main/js/sap/ushell/adapters/local/ContainerAdapter.js +1 -1
  59. package/src/main/js/sap/ushell/adapters/local/FlpLaunchPageAdapter.js +1 -1
  60. package/src/main/js/sap/ushell/adapters/local/LaunchPageAdapter.js +1 -1
  61. package/src/main/js/sap/ushell/adapters/local/NavTargetResolutionAdapter.js +1 -1
  62. package/src/main/js/sap/ushell/adapters/local/NavTargetResolutionInternalAdapter.js +1 -1
  63. package/src/main/js/sap/ushell/adapters/local/PageBuildingAdapter.js +1 -1
  64. package/src/main/js/sap/ushell/adapters/local/PagePersistenceAdapter.js +1 -1
  65. package/src/main/js/sap/ushell/adapters/local/PersonalizationAdapter.js +1 -1
  66. package/src/main/js/sap/ushell/adapters/local/PersonalizationV2Adapter.js +1 -1
  67. package/src/main/js/sap/ushell/adapters/local/SearchAdapter.js +1 -1
  68. package/src/main/js/sap/ushell/adapters/local/SearchCEPAdapter.js +1 -1
  69. package/src/main/js/sap/ushell/adapters/local/SupportTicketAdapter.js +1 -1
  70. package/src/main/js/sap/ushell/adapters/local/Ui5ComponentLoaderAdapter.js +1 -1
  71. package/src/main/js/sap/ushell/adapters/local/UserDefaultParameterPersistenceAdapter.js +1 -1
  72. package/src/main/js/sap/ushell/adapters/local/UserInfoAdapter.js +1 -1
  73. package/src/main/js/sap/ushell/api/DWS.js +87 -0
  74. package/src/main/js/sap/ushell/api/Inbox.js +20 -4
  75. package/src/main/js/sap/ushell/api/common/ComponentInstantiation.js +36 -36
  76. package/src/main/js/sap/ushell/appIntegration/AppLifeCycle/KeepAliveMode.js +43 -0
  77. package/src/main/js/sap/ushell/appIntegration/AppLifeCycle.js +1667 -0
  78. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/ApplicationContainer.js +136 -11
  79. package/src/main/js/sap/ushell/appIntegration/ApplicationContainerRenderer.js +54 -0
  80. package/src/main/js/sap/ushell/appIntegration/ApplicationHandle.js +57 -0
  81. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/IframeApplicationContainer.js +102 -15
  82. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/IframeApplicationContainerRenderer.js +26 -20
  83. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/KeepAliveApps.js +1 -1
  84. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/PostMessageManager/AppruntimeHandler.js +7 -5
  85. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/PostMessageManager/LifecycleHandler.js +25 -25
  86. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/PostMessageManager/MessageBrokerHandler.js +1 -1
  87. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/PostMessageManager/NWBCHandler.js +4 -4
  88. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/PostMessageManager/ServiceHandler.js +4 -3
  89. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/PostMessageManager.js +38 -21
  90. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/PostMessagePluginInterface.js +1 -1
  91. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/UI5ApplicationContainer.js +31 -8
  92. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/UI5ApplicationContainerRenderer.js +14 -1
  93. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/contracts/EmbeddedUI5Handler.js +10 -9
  94. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/contracts/StatefulContainerV1Handler.js +6 -19
  95. package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/contracts/StatefulContainerV2Handler.js +20 -55
  96. package/src/main/js/sap/ushell/appRuntime/ui5/AppCommunicationMgr.js +1 -1
  97. package/src/main/js/sap/ushell/appRuntime/ui5/AppRuntime.js +15 -0
  98. package/src/main/js/sap/ushell/appRuntime/ui5/renderers/fiori2/RendererExtensions.js +1 -1
  99. package/src/main/js/sap/ushell/appRuntime/ui5/services/AppConfiguration.js +1 -1
  100. package/src/main/js/sap/ushell/appRuntime/ui5/services/AppLifeCycle.js +1 -1
  101. package/src/main/js/sap/ushell/appRuntime/ui5/services/AppState.js +1 -1
  102. package/src/main/js/sap/ushell/appRuntime/ui5/services/Bookmark.js +1 -1
  103. package/src/main/js/sap/ushell/appRuntime/ui5/services/BookmarkV2.js +1 -1
  104. package/src/main/js/sap/ushell/appRuntime/ui5/services/CommonDataModel.js +1 -1
  105. package/src/main/js/sap/ushell/appRuntime/ui5/services/Container.js +1 -1
  106. package/src/main/js/sap/ushell/appRuntime/ui5/services/CrossApplicationNavigation.js +1 -1
  107. package/src/main/js/sap/ushell/appRuntime/ui5/services/Extension/Item.js +1 -1
  108. package/src/main/js/sap/ushell/appRuntime/ui5/services/Extension.js +1 -1
  109. package/src/main/js/sap/ushell/appRuntime/ui5/services/FlpLaunchPage.js +30 -0
  110. package/src/main/js/sap/ushell/appRuntime/ui5/services/FrameBoundExtension.js +1 -1
  111. package/src/main/js/sap/ushell/appRuntime/ui5/services/LaunchPage.js +1 -1
  112. package/src/main/js/sap/ushell/appRuntime/ui5/services/MessageBroker.js +1 -1
  113. package/src/main/js/sap/ushell/appRuntime/ui5/services/NavTargetResolution.js +1 -1
  114. package/src/main/js/sap/ushell/appRuntime/ui5/services/NavTargetResolutionInternal.js +1 -1
  115. package/src/main/js/sap/ushell/appRuntime/ui5/services/Navigation.js +1 -1
  116. package/src/main/js/sap/ushell/appRuntime/ui5/services/ReferenceResolver.js +1 -1
  117. package/src/main/js/sap/ushell/appRuntime/ui5/services/ShellNavigation.js +1 -1
  118. package/src/main/js/sap/ushell/appRuntime/ui5/services/ShellNavigationInternal.js +1 -1
  119. package/src/main/js/sap/ushell/appRuntime/ui5/services/ShellUIService.js +1 -1
  120. package/src/main/js/sap/ushell/appRuntime/ui5/services/UserInfo.js +1 -1
  121. package/src/main/js/sap/ushell/appRuntime/ui5/services/adapters/Ui5ComponentLoaderAdapter.js +1 -1
  122. package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/logger.js +1 -1
  123. package/src/main/js/sap/ushell/bootstrap/SchedulingAgent/state.js +1 -1
  124. package/src/main/js/sap/ushell/bootstrap/common/common.configure.ui5datetimeformat.js +1 -1
  125. package/src/main/js/sap/ushell/bootstrap/common/common.create.configcontract.core.js +62 -35
  126. package/src/main/js/sap/ushell/bootstrap/sandbox2.js +1 -1
  127. package/src/main/js/sap/ushell/components/HomepageManager.js +1 -0
  128. package/src/main/js/sap/ushell/components/appfinder/manifest.json +1 -1
  129. package/src/main/js/sap/ushell/components/applicationIntegration/AppLifeCycle.js +6 -1684
  130. package/src/main/js/sap/ushell/components/applicationIntegration/Storage.js +1 -7
  131. package/src/main/js/sap/ushell/components/applicationIntegration/application/Application.js +2 -35
  132. package/src/main/js/sap/ushell/components/applicationIntegration/application/BlueBoxHandler.js +1 -1
  133. package/src/main/js/sap/ushell/components/applicationIntegration/application/PostMessageAPI.js +1 -1
  134. package/src/main/js/sap/ushell/components/applicationIntegration/configuration/AppMeta.js +2 -176
  135. package/src/main/js/sap/ushell/components/applicationIntegration/relatedServices/RelatedServices.js +1 -1
  136. package/src/main/js/sap/ushell/components/applicationIntegrationOld/AppLifeCycle.js +1 -1
  137. package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/Application.js +3 -3
  138. package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/BlueBoxHandler.js +1 -1
  139. package/src/main/js/sap/ushell/components/applicationIntegrationOld/application/PostMessageAPI.js +1 -1
  140. package/src/main/js/sap/ushell/components/applicationIntegrationOld/configuration/AppMeta.js +1 -1
  141. package/src/main/js/sap/ushell/components/applicationIntegrationOld/relatedServices/RelatedServices.js +1 -1
  142. package/src/main/js/sap/ushell/components/container/ApplicationContainer.js +1 -1
  143. package/src/main/js/sap/ushell/components/contentFinder/CatalogService.js +12 -6
  144. package/src/main/js/sap/ushell/components/contentFinder/Component.js +41 -3
  145. package/src/main/js/sap/ushell/components/contentFinder/controller/AppSearch.controller.js +103 -38
  146. package/src/main/js/sap/ushell/components/contentFinder/controller/ContentFinderDialog.controller.js +1 -1
  147. package/src/main/js/sap/ushell/components/contentFinder/dialog/Component.js +1 -1
  148. package/src/main/js/sap/ushell/components/contentFinder/dialog/manifest.json +1 -1
  149. package/src/main/js/sap/ushell/components/contentFinder/manifest.json +1 -1
  150. package/src/main/js/sap/ushell/components/contentFinder/resources/resources.properties +1 -1
  151. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ar.properties +3 -1
  152. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_bg.properties +3 -1
  153. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ca.properties +3 -1
  154. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_cnr.properties +3 -1
  155. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_cs.properties +3 -1
  156. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_cy.properties +3 -1
  157. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_da.properties +3 -1
  158. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_de.properties +3 -1
  159. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_el.properties +3 -1
  160. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_en.properties +3 -1
  161. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_en_GB.properties +3 -1
  162. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_en_US_saprigi.properties +4 -2
  163. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_es.properties +3 -1
  164. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_es_MX.properties +3 -1
  165. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_et.properties +3 -1
  166. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_fi.properties +4 -2
  167. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_fr.properties +4 -2
  168. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_fr_CA.properties +3 -1
  169. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_hi.properties +3 -1
  170. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_hr.properties +3 -1
  171. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_hu.properties +3 -1
  172. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_id.properties +4 -2
  173. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_it.properties +3 -1
  174. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_iw.properties +3 -1
  175. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ja.properties +3 -1
  176. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_kk.properties +3 -1
  177. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ko.properties +3 -1
  178. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_lt.properties +3 -1
  179. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_lv.properties +3 -1
  180. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_mk.properties +3 -1
  181. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ms.properties +3 -1
  182. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_nl.properties +3 -1
  183. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_no.properties +3 -1
  184. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_pl.properties +3 -1
  185. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_pt.properties +3 -1
  186. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_pt_PT.properties +3 -1
  187. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ro.properties +3 -1
  188. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_ru.properties +3 -1
  189. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sh.properties +3 -1
  190. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sk.properties +3 -1
  191. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sl.properties +3 -1
  192. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sr.properties +3 -1
  193. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_sv.properties +3 -1
  194. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_th.properties +3 -1
  195. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_tr.properties +3 -1
  196. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_uk.properties +3 -1
  197. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_vi.properties +3 -1
  198. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_zh_CN.properties +3 -1
  199. package/src/main/js/sap/ushell/components/contentFinder/resources/resources_zh_TW.properties +3 -1
  200. package/src/main/js/sap/ushell/components/contentFinder/view/AppSearch.view.xml +6 -0
  201. package/src/main/js/sap/ushell/components/contentFinder/view/AppSearchCategoryTree.fragment.xml +2 -2
  202. package/src/main/js/sap/ushell/components/contentFinder/view/AppSearchCategoryTreeTable.fragment.xml +70 -0
  203. package/src/main/js/sap/ushell/components/contentFinderStandalone/Component.js +1 -1
  204. package/src/main/js/sap/ushell/components/contentFinderStandalone/controller/ContentFinderStandalone.controller.js +8 -3
  205. package/src/main/js/sap/ushell/components/contentFinderStandalone/manifest.json +1 -1
  206. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_ar.properties +3 -0
  207. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_bg.properties +3 -0
  208. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_ca.properties +3 -0
  209. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_cnr.properties +3 -0
  210. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_cs.properties +3 -0
  211. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_cy.properties +3 -0
  212. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_da.properties +3 -0
  213. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_de.properties +3 -0
  214. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_el.properties +3 -0
  215. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_en.properties +3 -0
  216. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_en_GB.properties +3 -0
  217. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_en_US_saprigi.properties +3 -0
  218. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_es.properties +3 -0
  219. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_es_MX.properties +3 -0
  220. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_et.properties +3 -0
  221. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_fi.properties +3 -0
  222. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_fr.properties +3 -0
  223. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_fr_CA.properties +3 -0
  224. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_hi.properties +3 -0
  225. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_hr.properties +3 -0
  226. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_hu.properties +3 -0
  227. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_id.properties +3 -0
  228. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_it.properties +3 -0
  229. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_iw.properties +3 -0
  230. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_ja.properties +3 -0
  231. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_kk.properties +3 -0
  232. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_ko.properties +3 -0
  233. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_lt.properties +3 -0
  234. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_lv.properties +3 -0
  235. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_mk.properties +3 -0
  236. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_ms.properties +3 -0
  237. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_nl.properties +3 -0
  238. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_no.properties +3 -0
  239. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_pl.properties +3 -0
  240. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_pt.properties +3 -0
  241. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_pt_PT.properties +3 -0
  242. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_ro.properties +3 -0
  243. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_ru.properties +3 -0
  244. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_sh.properties +3 -0
  245. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_sk.properties +3 -0
  246. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_sl.properties +3 -0
  247. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_sr.properties +3 -0
  248. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_sv.properties +3 -0
  249. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_th.properties +3 -0
  250. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_tr.properties +3 -0
  251. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_uk.properties +3 -0
  252. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_vi.properties +3 -0
  253. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_zh_CN.properties +3 -0
  254. package/src/main/js/sap/ushell/components/contentFinderStandalone/resources/resources_zh_TW.properties +3 -0
  255. package/src/main/js/sap/ushell/components/factsheet/Component.js +1 -1
  256. package/src/main/js/sap/ushell/components/homepage/ActionMode.js +1 -1
  257. package/src/main/js/sap/ushell/components/homepage/DashboardContent.view.js +1 -1
  258. package/src/main/js/sap/ushell/components/homepage/DashboardGroupsBox.js +4 -4
  259. package/src/main/js/sap/ushell/components/homepage/DashboardUIActions.js +1 -1
  260. package/src/main/js/sap/ushell/components/homepage/manifest.json +1 -1
  261. package/src/main/js/sap/ushell/components/pages/ActionMode.js +1 -1
  262. package/src/main/js/sap/ushell/components/pages/Component.js +1 -1
  263. package/src/main/js/sap/ushell/components/pages/MyHomeImport.js +1 -1
  264. package/src/main/js/sap/ushell/components/pages/controller/PageRuntime.controller.js +3 -3
  265. package/src/main/js/sap/ushell/components/pages/manifest.json +1 -1
  266. package/src/main/js/sap/ushell/components/runtimeSwitcher/controller/RuntimeSwitcher.controller.js +1 -1
  267. package/src/main/js/sap/ushell/components/runtimeSwitcher/manifest.json +1 -1
  268. package/src/main/js/sap/ushell/components/shell/FloatingContainer/manifest.json +1 -1
  269. package/src/main/js/sap/ushell/components/shell/MenuBar/Component.js +9 -8
  270. package/src/main/js/sap/ushell/components/shell/MenuBar/controller/MenuBar.controller.js +0 -1
  271. package/src/main/js/sap/ushell/components/shell/MenuBar/manifest.json +1 -1
  272. package/src/main/js/sap/ushell/components/shell/MenuBar/view/MenuBarPersonalized.view.xml +25 -0
  273. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/Component.js +10 -21
  274. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/controller/NavigationBarMenu.controller.js +12 -5
  275. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/controller/NavigationBarMenuButton.controller.js +1 -1
  276. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/manifest.json +1 -7
  277. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/view/ContextMenu.fragment.xml +6 -4
  278. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/view/NavigationBarMenu.fragment.xml +76 -0
  279. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/view/NavigationBarMenu.view.xml +6 -65
  280. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/view/NavigationBarMenuButton.view.xml +2 -2
  281. package/src/main/js/sap/ushell/components/shell/NavigationBarMenu/view/NavigationBarMenuPopover.fragment.xml +6 -65
  282. package/src/main/js/sap/ushell/components/shell/Notifications/Component.js +1 -1
  283. package/src/main/js/sap/ushell/components/shell/ProductSwitch/Component.js +1 -1
  284. package/src/main/js/sap/ushell/components/shell/Search/ESearch.js +15 -2
  285. package/src/main/js/sap/ushell/components/shell/Search/manifest.json +1 -1
  286. package/src/main/js/sap/ushell/components/shell/SearchCEP/Component.js +1 -1
  287. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/FrequentActivityProvider.js +1 -1
  288. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/RecentSearchProvider.js +1 -1
  289. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/SearchProvider.js +1 -1
  290. package/src/main/js/sap/ushell/components/shell/SearchCEP/SearchProviders/SearchServiceProvider.js +1 -1
  291. package/src/main/js/sap/ushell/components/shell/Settings/Component.js +23 -11
  292. package/src/main/js/sap/ushell/components/shell/Settings/userLanguageRegion/LanguageRegionSelector.controller.js +1 -1
  293. package/src/main/js/sap/ushell/components/shell/ShellBar/Component.js +114 -0
  294. package/src/main/js/sap/ushell/components/shell/ShellBar/controller/ShellBar.controller.js +248 -0
  295. package/src/main/js/sap/ushell/components/shell/ShellBar/manifest.json +48 -0
  296. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources.properties +11 -0
  297. package/src/main/js/sap/ushell/components/shell/ShellBar/resources/resources_en_US_saprigi.properties +5 -0
  298. package/src/main/js/sap/ushell/components/shell/ShellBar/view/ShellBar.view.xml +48 -0
  299. package/src/main/js/sap/ushell/components/shell/SideNavigation/Component.js +74 -51
  300. package/src/main/js/sap/ushell/components/shell/SideNavigation/controller/SideNavigation.controller.js +27 -30
  301. package/src/main/js/sap/ushell/components/shell/SideNavigation/fragment/AllSpaces.fragment.xml +21 -0
  302. package/src/main/js/sap/ushell/components/shell/SideNavigation/fragment/Popover.fragment.xml +6 -1
  303. package/src/main/js/sap/ushell/components/shell/SideNavigation/manifest.json +5 -1
  304. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/AllSpaces.js +56 -5
  305. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/Favorites.js +24 -9
  306. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/GenericNavigationListProvider.js +46 -67
  307. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/MyHome.js +22 -4
  308. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/NavigationHelper.js +3 -2
  309. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/Spaces.js +187 -160
  310. package/src/main/js/sap/ushell/components/shell/SideNavigation/modules/SpacesNavigationListProvider.js +27 -11
  311. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources.properties +3 -1
  312. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ar.properties +3 -1
  313. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_bg.properties +3 -1
  314. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ca.properties +3 -1
  315. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_cnr.properties +3 -1
  316. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_cs.properties +3 -1
  317. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_cy.properties +3 -1
  318. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_da.properties +3 -1
  319. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_de.properties +3 -1
  320. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_el.properties +3 -1
  321. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_en.properties +3 -1
  322. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_en_GB.properties +3 -1
  323. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_en_US_saprigi.properties +3 -1
  324. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_es.properties +3 -1
  325. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_es_MX.properties +3 -1
  326. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_et.properties +3 -1
  327. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_fi.properties +4 -2
  328. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_fr.properties +3 -1
  329. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_fr_CA.properties +3 -1
  330. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_hi.properties +3 -1
  331. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_hr.properties +3 -1
  332. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_hu.properties +3 -1
  333. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_id.properties +3 -1
  334. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_it.properties +3 -1
  335. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_iw.properties +3 -1
  336. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ja.properties +3 -1
  337. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_kk.properties +3 -1
  338. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ko.properties +3 -1
  339. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_lt.properties +3 -1
  340. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_lv.properties +3 -1
  341. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_mk.properties +3 -1
  342. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ms.properties +3 -1
  343. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_nl.properties +3 -1
  344. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_no.properties +3 -1
  345. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_pl.properties +3 -1
  346. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_pt.properties +3 -1
  347. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_pt_PT.properties +3 -1
  348. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ro.properties +3 -1
  349. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_ru.properties +3 -1
  350. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sh.properties +3 -1
  351. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sk.properties +3 -1
  352. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sl.properties +3 -1
  353. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sr.properties +3 -1
  354. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_sv.properties +3 -1
  355. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_th.properties +3 -1
  356. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_tr.properties +3 -1
  357. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_uk.properties +3 -1
  358. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_vi.properties +3 -1
  359. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_zh_CN.properties +3 -1
  360. package/src/main/js/sap/ushell/components/shell/SideNavigation/resources/resources_zh_TW.properties +3 -1
  361. package/src/main/js/sap/ushell/components/shell/SideNavigation/view/Main.view.xml +21 -6
  362. package/src/main/js/sap/ushell/components/shell/UserActionsMenu/Component.js +1 -1
  363. package/src/main/js/sap/ushell/components/shell/UserImage/Component.js +1 -1
  364. package/src/main/js/sap/ushell/components/visualizationOrganizer/Component.js +1 -1
  365. package/src/main/js/sap/ushell/components/workPageBuilder/Component.js +1 -1
  366. package/src/main/js/sap/ushell/components/workPageBuilder/controller/WorkPageBuilder.accessibility.js +1 -1
  367. package/src/main/js/sap/ushell/components/workPageBuilder/controller/WorkPageBuilder.controller.js +1 -1
  368. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPage.js +1 -1
  369. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageButton.js +1 -1
  370. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageCell.js +1 -1
  371. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageColumn.js +1 -1
  372. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageColumnResizer.js +1 -1
  373. package/src/main/js/sap/ushell/components/workPageBuilder/controls/WorkPageRow.js +1 -1
  374. package/src/main/js/sap/ushell/components/workPageBuilder/manifest.json +1 -1
  375. package/src/main/js/sap/ushell/components/workPageBuilder/resources/resources_fr.properties +1 -1
  376. package/src/main/js/sap/ushell/components/workPageRuntime/Component.js +1 -1
  377. package/src/main/js/sap/ushell/components/workPageRuntime/controller/WorkPageRuntime.controller.js +1 -1
  378. package/src/main/js/sap/ushell/components/workPageRuntime/manifest.json +1 -1
  379. package/src/main/js/sap/ushell/designtime/ApplicationContainer.designtime.js +1 -1
  380. package/src/main/js/sap/ushell/library.js +30 -10
  381. package/src/main/js/sap/ushell/navigationMode.js +1 -1
  382. package/src/main/js/sap/ushell/performance/ShellAnalytics.js +1 -1
  383. package/src/main/js/sap/ushell/performance/StatisticalRecord.js +1 -1
  384. package/src/main/js/sap/ushell/plugins/appwarmup/Component.js +1 -1
  385. package/src/main/js/sap/ushell/renderer/NavContainer.js +266 -0
  386. package/src/main/js/sap/ushell/renderer/NavContainerRenderer.js +42 -0
  387. package/src/main/js/sap/ushell/renderer/Renderer.js +129 -112
  388. package/src/main/js/sap/ushell/renderer/RendererRootView.fragment.xml +2 -2
  389. package/src/main/js/sap/ushell/renderer/RendererRootViewFallback.fragment.xml +8 -0
  390. package/src/main/js/sap/ushell/renderer/Shell.controller.js +119 -60
  391. package/src/main/js/sap/ushell/renderer/Shell.view.js +78 -26
  392. package/src/main/js/sap/ushell/renderer/resources/resources.properties +3 -1
  393. package/src/main/js/sap/ushell/renderer/resources/resources_ar.properties +9 -0
  394. package/src/main/js/sap/ushell/renderer/resources/resources_bg.properties +9 -0
  395. package/src/main/js/sap/ushell/renderer/resources/resources_ca.properties +9 -0
  396. package/src/main/js/sap/ushell/renderer/resources/resources_cnr.properties +9 -0
  397. package/src/main/js/sap/ushell/renderer/resources/resources_cs.properties +10 -1
  398. package/src/main/js/sap/ushell/renderer/resources/resources_cy.properties +9 -0
  399. package/src/main/js/sap/ushell/renderer/resources/resources_da.properties +9 -0
  400. package/src/main/js/sap/ushell/renderer/resources/resources_de.properties +9 -0
  401. package/src/main/js/sap/ushell/renderer/resources/resources_el.properties +9 -0
  402. package/src/main/js/sap/ushell/renderer/resources/resources_en.properties +9 -0
  403. package/src/main/js/sap/ushell/renderer/resources/resources_en_GB.properties +9 -0
  404. package/src/main/js/sap/ushell/renderer/resources/resources_en_US_saprigi.properties +9 -0
  405. package/src/main/js/sap/ushell/renderer/resources/resources_es.properties +9 -0
  406. package/src/main/js/sap/ushell/renderer/resources/resources_es_MX.properties +10 -1
  407. package/src/main/js/sap/ushell/renderer/resources/resources_et.properties +9 -0
  408. package/src/main/js/sap/ushell/renderer/resources/resources_fi.properties +9 -0
  409. package/src/main/js/sap/ushell/renderer/resources/resources_fr.properties +11 -2
  410. package/src/main/js/sap/ushell/renderer/resources/resources_fr_CA.properties +14 -5
  411. package/src/main/js/sap/ushell/renderer/resources/resources_hi.properties +9 -0
  412. package/src/main/js/sap/ushell/renderer/resources/resources_hr.properties +42 -33
  413. package/src/main/js/sap/ushell/renderer/resources/resources_hu.properties +9 -0
  414. package/src/main/js/sap/ushell/renderer/resources/resources_id.properties +9 -0
  415. package/src/main/js/sap/ushell/renderer/resources/resources_it.properties +12 -3
  416. package/src/main/js/sap/ushell/renderer/resources/resources_iw.properties +9 -0
  417. package/src/main/js/sap/ushell/renderer/resources/resources_ja.properties +9 -0
  418. package/src/main/js/sap/ushell/renderer/resources/resources_kk.properties +11 -2
  419. package/src/main/js/sap/ushell/renderer/resources/resources_ko.properties +9 -0
  420. package/src/main/js/sap/ushell/renderer/resources/resources_lt.properties +9 -0
  421. package/src/main/js/sap/ushell/renderer/resources/resources_lv.properties +9 -0
  422. package/src/main/js/sap/ushell/renderer/resources/resources_mk.properties +9 -0
  423. package/src/main/js/sap/ushell/renderer/resources/resources_ms.properties +11 -2
  424. package/src/main/js/sap/ushell/renderer/resources/resources_nl.properties +9 -0
  425. package/src/main/js/sap/ushell/renderer/resources/resources_no.properties +9 -0
  426. package/src/main/js/sap/ushell/renderer/resources/resources_pl.properties +9 -0
  427. package/src/main/js/sap/ushell/renderer/resources/resources_pt.properties +9 -0
  428. package/src/main/js/sap/ushell/renderer/resources/resources_pt_PT.properties +9 -0
  429. package/src/main/js/sap/ushell/renderer/resources/resources_ro.properties +9 -0
  430. package/src/main/js/sap/ushell/renderer/resources/resources_ru.properties +11 -2
  431. package/src/main/js/sap/ushell/renderer/resources/resources_sh.properties +9 -0
  432. package/src/main/js/sap/ushell/renderer/resources/resources_sk.properties +9 -0
  433. package/src/main/js/sap/ushell/renderer/resources/resources_sl.properties +9 -0
  434. package/src/main/js/sap/ushell/renderer/resources/resources_sr.properties +9 -0
  435. package/src/main/js/sap/ushell/renderer/resources/resources_sv.properties +9 -0
  436. package/src/main/js/sap/ushell/renderer/resources/resources_th.properties +11 -2
  437. package/src/main/js/sap/ushell/renderer/resources/resources_tr.properties +11 -2
  438. package/src/main/js/sap/ushell/renderer/resources/resources_uk.properties +11 -2
  439. package/src/main/js/sap/ushell/renderer/resources/resources_vi.properties +9 -0
  440. package/src/main/js/sap/ushell/renderer/resources/resources_zh_CN.properties +9 -0
  441. package/src/main/js/sap/ushell/renderer/resources/resources_zh_TW.properties +9 -0
  442. package/src/main/js/sap/ushell/renderer/search/searchComponent/manifest.json +1 -1
  443. package/src/main/js/sap/ushell/renderers/fiori2/Shell.view.js +18 -2
  444. package/src/main/js/sap/ushell/services/AppConfiguration.js +4 -4
  445. package/src/main/js/sap/ushell/services/AppLifeCycle.js +374 -377
  446. package/src/main/js/sap/ushell/services/AppState.js +1 -1
  447. package/src/main/js/sap/ushell/services/Bookmark.js +2 -2
  448. package/src/main/js/sap/ushell/services/BookmarkV2.js +2 -2
  449. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/Formatter.js +1 -1
  450. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/InboundIndex.js +1 -1
  451. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/InboundProvider.js +1 -1
  452. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/PrelaunchOperations.js +1 -1
  453. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/Search.js +1 -1
  454. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/StagedLogger.js +1 -1
  455. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/SystemContext.js +1 -1
  456. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/Utils.js +1 -1
  457. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/VirtualInbounds.js +1 -1
  458. package/src/main/js/sap/ushell/services/ClientSideTargetResolution/XAppStateProcessing.js +1 -1
  459. package/src/main/js/sap/ushell/services/ClientSideTargetResolution.js +298 -198
  460. package/src/main/js/sap/ushell/services/CommonDataModel/SiteConverter.js +1 -1
  461. package/src/main/js/sap/ushell/services/CommonDataModel/vizTypeDefaults/VizTypeDefaults.js +1 -1
  462. package/src/main/js/sap/ushell/services/CommonDataModel.js +1 -1
  463. package/src/main/js/sap/ushell/services/Configuration.js +1 -1
  464. package/src/main/js/sap/ushell/services/ConfigurationDefaults.js +1 -1
  465. package/src/main/js/sap/ushell/services/ContentExtensionAdapterFactory.js +1 -1
  466. package/src/main/js/sap/ushell/services/CrossApplicationNavigation.js +2 -2
  467. package/src/main/js/sap/ushell/services/DarkModeSupport.js +1 -1
  468. package/src/main/js/sap/ushell/services/Extension/Item.js +1 -1
  469. package/src/main/js/sap/ushell/services/Extension.js +1 -1
  470. package/src/main/js/sap/ushell/services/FlpLaunchPage.js +2 -1
  471. package/src/main/js/sap/ushell/services/FrameBoundExtension/FloatingContainer.js +1 -1
  472. package/src/main/js/sap/ushell/services/FrameBoundExtension/Footer.js +1 -1
  473. package/src/main/js/sap/ushell/services/FrameBoundExtension/Item.js +1 -1
  474. package/src/main/js/sap/ushell/services/FrameBoundExtension/SidePane.js +1 -1
  475. package/src/main/js/sap/ushell/services/FrameBoundExtension/ToolArea.js +1 -1
  476. package/src/main/js/sap/ushell/services/FrameBoundExtension/UserSettingsEntry.js +1 -1
  477. package/src/main/js/sap/ushell/services/FrameBoundExtension.js +1 -1
  478. package/src/main/js/sap/ushell/services/LaunchPage.js +98 -7
  479. package/src/main/js/sap/ushell/services/Menu.js +1 -1
  480. package/src/main/js/sap/ushell/services/Message.js +1 -1
  481. package/src/main/js/sap/ushell/services/MessageBroker/MessageBrokerEngine.js +5 -5
  482. package/src/main/js/sap/ushell/services/MessageBroker.js +1 -1
  483. package/src/main/js/sap/ushell/services/MessageInternal.js +1 -1
  484. package/src/main/js/sap/ushell/services/Navigation/compatibility.js +2 -2
  485. package/src/main/js/sap/ushell/services/Navigation/utils.js +1 -1
  486. package/src/main/js/sap/ushell/services/Navigation.js +3 -3
  487. package/src/main/js/sap/ushell/services/NavigationDataProvider.js +12 -11
  488. package/src/main/js/sap/ushell/services/PageBuilding.js +1 -1
  489. package/src/main/js/sap/ushell/services/PagePersistence.js +1 -1
  490. package/src/main/js/sap/ushell/services/PageReferencing.js +1 -1
  491. package/src/main/js/sap/ushell/services/Pages.js +1 -1
  492. package/src/main/js/sap/ushell/services/Personalization.js +1 -1
  493. package/src/main/js/sap/ushell/services/PersonalizationV2.js +1 -1
  494. package/src/main/js/sap/ushell/services/PluginManager/Extensions.js +1 -1
  495. package/src/main/js/sap/ushell/services/PluginManager/HeaderExtensions.js +1 -1
  496. package/src/main/js/sap/ushell/services/PluginManager/MenuExtensions.js +1 -1
  497. package/src/main/js/sap/ushell/services/PluginManager/SimpleExpression.js +1 -1
  498. package/src/main/js/sap/ushell/services/PluginManager.js +81 -63
  499. package/src/main/js/sap/ushell/services/ReferenceResolver.js +1 -1
  500. package/src/main/js/sap/ushell/services/Search.js +1 -1
  501. package/src/main/js/sap/ushell/services/SearchCEP.js +1 -1
  502. package/src/main/js/sap/ushell/services/SearchableContent.js +1 -1
  503. package/src/main/js/sap/ushell/services/ShellNavigation.js +1 -1
  504. package/src/main/js/sap/ushell/services/SmartNavigation.js +1 -1
  505. package/src/main/js/sap/ushell/services/SpaceContent.js +1 -1
  506. package/src/main/js/sap/ushell/services/UITracer.js +1 -1
  507. package/src/main/js/sap/ushell/services/URLShortening.js +1 -1
  508. package/src/main/js/sap/ushell/services/URLTemplate.js +1 -1
  509. package/src/main/js/sap/ushell/services/Ui5ComponentLoader.js +687 -272
  510. package/src/main/js/sap/ushell/services/UserDefaultParameterPersistence.js +1 -1
  511. package/src/main/js/sap/ushell/services/UserDefaultParameters.js +1 -1
  512. package/src/main/js/sap/ushell/services/UserInfo.js +1 -1
  513. package/src/main/js/sap/ushell/services/UserRecents.js +1 -1
  514. package/src/main/js/sap/ushell/services/VisualizationDataProvider.js +1 -1
  515. package/src/main/js/sap/ushell/services/VisualizationInstantiation.js +1 -1
  516. package/src/main/js/sap/ushell/services/_ContentExtensionAdapterFactory/ContentExtensionAdapterConfig.js +1 -1
  517. package/src/main/js/sap/ushell/services/_ContentExtensionAdapterFactory/FeaturedGroupConfig.js +1 -1
  518. package/src/main/js/sap/ushell/services/_CrossApplicationNavigation/utils.js +1 -1
  519. package/src/main/js/sap/ushell/services/_PageReferencing/PageReferencer.js +1 -1
  520. package/src/main/js/sap/ushell/state/BackNavigation.js +1 -1
  521. package/src/main/js/sap/ushell/state/ContentDensity.js +213 -0
  522. package/src/main/js/sap/ushell/state/Favicon.js +119 -0
  523. package/src/main/js/sap/ushell/state/StateManager.js +1 -0
  524. package/src/main/js/sap/ushell/state/StrategyFactory/UserActionsStrategy.js +3 -2
  525. package/src/main/js/sap/ushell/support/plugins/flpConfig/FlpConfigurationPlugin.js +1 -1
  526. package/src/main/js/sap/ushell/themes/base/ApplicationContainer.less +3 -2
  527. package/src/main/js/sap/ushell/themes/base/FlexibleColumnLayout.less +10 -0
  528. package/src/main/js/sap/ushell/themes/base/NavContainer.less +6 -0
  529. package/src/main/js/sap/ushell/themes/base/ShellHeader.less +8 -8
  530. package/src/main/js/sap/ushell/themes/base/library.source.less +2 -0
  531. package/src/main/js/sap/ushell/themes/sap_belize_base/ApplicationContainer.less +9 -1
  532. package/src/main/js/sap/ushell/themes/sap_belize_base/NavContainer.less +6 -0
  533. package/src/main/js/sap/ushell/themes/sap_belize_base/library.source.less +1 -0
  534. package/src/main/js/sap/ushell/themes/sap_bluecrystal_base/ApplicationContainer.less +9 -1
  535. package/src/main/js/sap/ushell/themes/sap_bluecrystal_base/NavContainer.less +6 -0
  536. package/src/main/js/sap/ushell/themes/sap_bluecrystal_base/library.source.less +1 -0
  537. package/src/main/js/sap/ushell/themes/sap_hcb/base_ApplicationContainer.less +9 -1
  538. package/src/main/js/sap/ushell/themes/sap_hcb/base_NavContainer.less +6 -0
  539. package/src/main/js/sap/ushell/themes/sap_hcb/base_ShellHeader.less +1 -1
  540. package/src/main/js/sap/ushell/themes/sap_hcb/library.source.less +1 -0
  541. package/src/main/js/sap/ushell/thirdparty/Icons.js +180 -8
  542. package/src/main/js/sap/ushell/thirdparty/MenuItem.js +355 -0
  543. package/src/main/js/sap/ushell/thirdparty/ShellBar.js +1892 -0
  544. package/src/main/js/sap/ushell/thirdparty/ShellBarItem.js +89 -0
  545. package/src/main/js/sap/ushell/thirdparty/ShellBarSpacer.js +40 -0
  546. package/src/main/js/sap/ushell/thirdparty/UserMenu.js +220 -314
  547. package/src/main/js/sap/ushell/thirdparty/UserMenuAccount.js +19 -9
  548. package/src/main/js/sap/ushell/thirdparty/UserMenuItem.js +55 -414
  549. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ar2.js +15 -0
  550. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ar3.js +41 -5
  551. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_bg2.js +16 -1
  552. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_bg3.js +41 -5
  553. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ca2.js +15 -0
  554. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ca3.js +41 -5
  555. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cnr2.js +15 -0
  556. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cnr3.js +41 -5
  557. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cs2.js +15 -0
  558. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cs3.js +44 -8
  559. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cy2.js +15 -0
  560. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_cy3.js +41 -5
  561. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_da2.js +15 -0
  562. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_da3.js +43 -7
  563. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_de2.js +16 -1
  564. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_de3.js +41 -5
  565. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_el2.js +15 -0
  566. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_el3.js +41 -5
  567. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en2.js +15 -0
  568. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en3.js +41 -5
  569. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_GB2.js +15 -0
  570. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_GB3.js +41 -5
  571. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_sappsd2.js +15 -0
  572. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_sappsd3.js +41 -5
  573. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_saprigi2.js +9 -0
  574. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_saprigi3.js +16 -4
  575. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_saptrc2.js +15 -0
  576. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_en_US_saptrc3.js +41 -5
  577. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_es2.js +16 -1
  578. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_es3.js +41 -5
  579. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_es_MX2.js +15 -0
  580. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_es_MX3.js +41 -5
  581. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_et2.js +15 -0
  582. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_et3.js +41 -5
  583. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fi2.js +15 -0
  584. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fi3.js +41 -5
  585. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fr2.js +20 -5
  586. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fr3.js +43 -7
  587. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fr_CA2.js +15 -0
  588. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_fr_CA3.js +41 -5
  589. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hi2.js +15 -0
  590. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hi3.js +41 -5
  591. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hr2.js +21 -6
  592. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hr3.js +42 -6
  593. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hu2.js +15 -0
  594. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_hu3.js +41 -5
  595. package/src/main/js/sap/ushell/thirdparty/_dynamics/{messagebundle_in.js → messagebundle_id.js} +2 -2
  596. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_id2.js +665 -0
  597. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_id3.js +551 -0
  598. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_it2.js +33 -18
  599. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_it3.js +76 -40
  600. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_iw2.js +15 -0
  601. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_iw3.js +41 -5
  602. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ja2.js +15 -0
  603. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ja3.js +41 -5
  604. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_kk2.js +15 -0
  605. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_kk3.js +41 -5
  606. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ko2.js +15 -0
  607. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ko3.js +43 -7
  608. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_lt2.js +15 -0
  609. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_lt3.js +41 -5
  610. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_lv2.js +26 -11
  611. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_lv3.js +41 -5
  612. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_mk2.js +15 -0
  613. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_mk3.js +43 -7
  614. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ms2.js +17 -2
  615. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ms3.js +42 -6
  616. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_nl2.js +15 -0
  617. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_nl3.js +41 -5
  618. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_no2.js +15 -0
  619. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_no3.js +41 -5
  620. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pl2.js +20 -5
  621. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pl3.js +41 -5
  622. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pt2.js +16 -1
  623. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pt3.js +41 -5
  624. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pt_PT2.js +15 -0
  625. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_pt_PT3.js +41 -5
  626. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ro2.js +16 -1
  627. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ro3.js +41 -5
  628. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ru2.js +18 -3
  629. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_ru3.js +41 -5
  630. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sh2.js +15 -0
  631. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sh3.js +41 -5
  632. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sk2.js +16 -1
  633. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sk3.js +41 -5
  634. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sl2.js +16 -1
  635. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sl3.js +42 -6
  636. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sr2.js +15 -0
  637. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sr3.js +41 -5
  638. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sv2.js +16 -1
  639. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_sv3.js +43 -7
  640. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_th2.js +15 -0
  641. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_th3.js +41 -5
  642. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_tr2.js +15 -0
  643. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_tr3.js +41 -5
  644. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_uk2.js +15 -0
  645. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_uk3.js +42 -6
  646. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_vi2.js +15 -0
  647. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_vi3.js +41 -5
  648. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_zh_CN2.js +15 -0
  649. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_zh_CN3.js +41 -5
  650. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_zh_TW2.js +15 -0
  651. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_zh_TW3.js +41 -5
  652. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css.js +1 -1
  653. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css10.js +1 -1
  654. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css11.js +1 -1
  655. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css12.js +1 -1
  656. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css13.js +1 -1
  657. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css14.js +1 -1
  658. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css15.js +1 -1
  659. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css16.js +1 -1
  660. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css17.js +1 -1
  661. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css18.js +1 -1
  662. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css19.js +1 -1
  663. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css2.js +1 -1
  664. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css20.js +1 -1
  665. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css21.js +1 -1
  666. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css22.js +1 -1
  667. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css23.js +1 -1
  668. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css24.js +1 -1
  669. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css3.js +1 -1
  670. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css4.js +1 -1
  671. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css5.js +1 -1
  672. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css6.js +1 -1
  673. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css7.js +1 -1
  674. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css8.js +1 -1
  675. package/src/main/js/sap/ushell/thirdparty/_dynamics/parameters-bundle.css9.js +1 -1
  676. package/src/main/js/sap/ushell/thirdparty/event-strict.js +7 -0
  677. package/src/main/js/sap/ushell/thirdparty/i18n-defaults.js +146 -0
  678. package/src/main/js/sap/ushell/thirdparty/parameters-bundle.css25.js +497 -506
  679. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents/dist/MenuItem.js +5 -0
  680. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-base.js +16 -2
  681. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/ShellBar.js +4 -0
  682. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/ShellBarItem.js +4 -0
  683. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/ShellBarSpacer.js +4 -0
  684. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/dist/ShellBar.js +138 -0
  685. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/dist/ShellBarItem.js +61 -0
  686. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/dist/ShellBarSpacer.js +46 -0
  687. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori/dist/UserMenuAccount.js +5 -0
  688. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-fiori.js +21 -3
  689. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents-icons/AllIcons.js +1 -1
  690. package/src/main/js/sap/ushell/thirdparty/ui5/webcomponents.js +17 -2
  691. package/src/main/js/sap/ushell/thirdparty/webcomponents-base.js +4270 -17
  692. package/src/main/js/sap/ushell/thirdparty/webcomponents-base2.js +7 -0
  693. package/src/main/js/sap/ushell/thirdparty/webcomponents-fiori.js +5 -5
  694. package/src/main/js/sap/ushell/thirdparty/webcomponents.js +10 -14
  695. package/src/main/js/sap/ushell/ui/AppContainer.js +6 -0
  696. package/src/main/js/sap/ushell/ui/ShellHeader.js +4 -40
  697. package/src/main/js/sap/ushell/ui/cards/RecentActivitiesExtension.js +1 -1
  698. package/src/main/js/sap/ushell/ui/footerbar/AboutDialog.controller.js +28 -27
  699. package/src/main/js/sap/ushell/ui/footerbar/SaveAsTile.controller.js +1 -1
  700. package/src/main/js/sap/ushell/ui/launchpad/ExtendedChangeDetection.js +1 -1
  701. package/src/main/js/sap/ushell/ui/launchpad/Section.js +1 -1
  702. package/src/main/js/sap/ushell/ui/launchpad/VizInstanceCdm.js +1 -7
  703. package/src/main/js/sap/ushell/ui/launchpad/section/CompactArea.js +1 -1
  704. package/src/main/js/sap/ushell/ui/shell/RightFloatingContainer.js +249 -249
  705. package/src/main/js/sap/ushell/ui/shell/ShellAppTitle.js +35 -3
  706. package/src/main/js/sap/ushell/ui/shell/ToolAreaItem.js +1 -1
  707. package/src/main/js/sap/ushell/ui/utils.js +1 -1
  708. package/src/main/js/sap/ushell/ui5service/ShellUIServiceFactory.js +1 -1
  709. package/src/main/js/sap/ushell/ui5service/UserStatus.js +1 -1
  710. package/src/main/js/sap/ushell/utils/RestrictedJSONModel.js +16 -0
  711. package/src/main/js/sap/ushell/utils/UrlParsing.js +96 -94
  712. package/src/main/js/sap/ushell/utils/UrlShortening.js +1 -1
  713. package/src/main/js/sap/ushell/utils/workpage/WorkPageHost.js +2 -2
  714. package/src/main/js/sap/ushell/utils/workpage/WorkPageService.js +12 -6
  715. package/src/main/js/sap/ushell/utils/workpage/WorkPageVizInstantiation.js +1 -1
  716. package/src/test/js/sap/ushell/bootstrap/sandbox.js +1 -1
  717. package/ui5.yaml +1 -1
  718. package/src/main/js/sap/ushell/components/applicationIntegration/ApplicationContainerRenderer.js +0 -35
  719. package/src/main/js/sap/ushell/components/shell/SideNavigation/view/SideNavigation.view.xml +0 -52
  720. package/src/main/js/sap/ushell/services/Ui5ComponentLoader/utils.js +0 -375
  721. package/src/main/js/sap/ushell/thirdparty/Theme.js +0 -130
  722. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_in2.js +0 -266
  723. package/src/main/js/sap/ushell/thirdparty/_dynamics/messagebundle_in3.js +0 -143
  724. package/src/main/js/sap/ushell/thirdparty/i18n.js +0 -25
  725. package/src/main/js/sap/ushell/thirdparty/i18nBundle.js +0 -9
  726. package/src/main/js/sap/ushell/thirdparty/property.js +0 -50
  727. /package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/ApplicationContainerCache.js +0 -0
  728. /package/src/main/js/sap/ushell/{components/applicationIntegration → appIntegration}/PostMessageManager/ExtensionItems.js +0 -0
  729. /package/src/main/js/sap/ushell/components/shell/MenuBar/view/{MenuBarPersonalization.view.xml → MenuBarWithPersonalizationButton.view.xml} +0 -0
@@ -1,26 +1,4279 @@
1
- sap.ui.define(['sap/ushell/thirdparty/Theme'], (function (Theme) { 'use strict';
1
+ sap.ui.define(['exports', 'sap/ushell/thirdparty/Icons'], (function (exports, Icons) { 'use strict';
2
2
 
3
- const p$1=t=>{const e=t.prototype.openEnd;t.prototype.openEnd=function(){return this._mAttributes.popover&&delete this._mAttributes.popover,e.apply(this)};};
3
+ const p$4=t=>{const e=t.prototype.openEnd;t.prototype.openEnd=function(){return this._mAttributes.popover&&delete this._mAttributes.popover,e.apply(this)};};
4
4
 
5
- const a$3=e=>{e.setAttribute("popover","manual"),e.showPopover();},l$2=e=>{e.hasAttribute("popover")&&(e.hidePopover(),e.removeAttribute("popover"));},i$1=(e=document)=>e.querySelector(":popover-open")?true:Array.from(e.querySelectorAll("*")).some(o=>{const p=o.shadowRoot;return p&&i$1(p)}),u$2=e=>{const o=e.prototype.open;e.prototype.open=function(...t){o.apply(this,t);const n=i$1();if(["OPENING","OPEN"].includes(this.getOpenState())&&n){const c=this.getContent();if(c){const r=c instanceof HTMLElement?c:c?.getDomRef();r&&a$3(r);}}};},y$1=e=>{const o=e.prototype._closed;e.prototype._closed=function(...t){const n=this.getContent(),s=n instanceof HTMLElement?n:n?.getDomRef();o.apply(this,t),s&&l$2(s);};},v$1=e=>{const o=e.prototype.onFocusEvent;e.prototype.onFocusEvent=function(t){const n=t.type==="focus"||t.type==="activate",s=t.target;(!n||!s.closest("[ui5-popover],[ui5-responsive-popover],[ui5-dialog]"))&&o.call(this,t);};},d$1=()=>{const e=new CSSStyleSheet;e.replaceSync(".sapMPopup-CTX:popover-open { inset: unset; }"),document.adoptedStyleSheets=[...document.adoptedStyleSheets,e];},h$1=e=>{u$2(e),y$1(e),d$1(),v$1(e);};
5
+ const a$a=e=>{e.setAttribute("popover","manual"),e.showPopover();},l$9=e=>{e.hasAttribute("popover")&&(e.hidePopover(),e.removeAttribute("popover"));},i$9=(e=document)=>e.querySelector(":popover-open")?true:Array.from(e.querySelectorAll("*")).some(o=>{const p=o.shadowRoot;return p&&i$9(p)}),u$6=e=>{const o=e.prototype.open;e.prototype.open=function(...t){o.apply(this,t);const n=i$9();if(["OPENING","OPEN"].includes(this.getOpenState())&&n){const c=this.getContent();if(c){const r=c instanceof HTMLElement?c:c?.getDomRef();r&&a$a(r);}}};},y$4=e=>{const o=e.prototype._closed;e.prototype._closed=function(...t){const n=this.getContent(),s=n instanceof HTMLElement?n:n?.getDomRef();o.apply(this,t),s&&l$9(s);};},v$4=e=>{const o=e.prototype.onFocusEvent;e.prototype.onFocusEvent=function(t){const n=t.type==="focus"||t.type==="activate",s=t.target;(!n||!s.closest("[ui5-popover],[ui5-responsive-popover],[ui5-dialog]"))&&o.call(this,t);};},d$4=()=>{const e=new CSSStyleSheet;e.replaceSync(".sapMPopup-CTX:popover-open { inset: unset; }"),document.adoptedStyleSheets=[...document.adoptedStyleSheets,e];},h$1=e=>{u$6(e),y$4(e),d$4(),v$4(e);};
6
6
 
7
- let a$2 = class a{static isAtLeastVersion116(){if(!window.sap.ui.version)return true;const e=window.sap.ui.version.split(".");return !e||e.length<2?false:parseInt(e[0])>1||parseInt(e[1])>=116}static isOpenUI5Detected(){return typeof window.sap?.ui?.require=="function"}static init(){return a.isOpenUI5Detected()?new Promise(t=>{window.sap.ui.require(["sap/ui/core/Core"],async e=>{const i=()=>{let n=["sap/ui/core/Popup","sap/ui/core/Patcher","sap/ui/core/LocaleData"];a.isAtLeastVersion116()&&(n=[...n,"sap/base/i18n/Formatting","sap/base/i18n/Localization","sap/ui/core/ControlBehavior","sap/ui/core/Theming","sap/ui/core/date/CalendarUtils"]),window.sap.ui.require(n,(o,r)=>{p$1(r),h$1(o),t();});};a.isAtLeastVersion116()?(await e.ready(),i()):e.attachInit(i);});}):Promise.resolve()}static getConfigurationSettingsObject(){if(!a.isOpenUI5Detected())return {};if(a.isAtLeastVersion116()){const n=window.sap.ui.require("sap/ui/core/ControlBehavior"),o=window.sap.ui.require("sap/base/i18n/Localization"),r=window.sap.ui.require("sap/ui/core/Theming"),s=window.sap.ui.require("sap/base/i18n/Formatting"),c=window.sap.ui.require("sap/ui/core/date/CalendarUtils");return {animationMode:n.getAnimationMode(),language:o.getLanguage(),theme:r.getTheme(),themeRoot:r.getThemeRoot(),rtl:o.getRTL(),timezone:o.getTimezone(),calendarType:s.getCalendarType(),formatSettings:{firstDayOfWeek:c.getWeekConfigurationValues().firstDayOfWeek,legacyDateCalendarCustomizing:s.getCustomIslamicCalendarData?.()??s.getLegacyDateCalendarCustomizing?.()}}}const e=window.sap.ui.require("sap/ui/core/Core").getConfiguration(),i=window.sap.ui.require("sap/ui/core/LocaleData");return {animationMode:e.getAnimationMode(),language:e.getLanguage(),theme:e.getTheme(),themeRoot:e.getThemeRoot(),rtl:e.getRTL(),timezone:e.getTimezone(),calendarType:e.getCalendarType(),formatSettings:{firstDayOfWeek:i?i.getInstance(e.getLocale()).getFirstDayOfWeek():void 0,legacyDateCalendarCustomizing:e.getFormatSettings().getLegacyDateCalendarCustomizing()}}}static getLocaleDataObject(){if(!a.isOpenUI5Detected())return;const t=window.sap.ui.require("sap/ui/core/LocaleData");if(a.isAtLeastVersion116()){const n=window.sap.ui.require("sap/base/i18n/Localization");return t.getInstance(n.getLanguageTag())._get()}const i=window.sap.ui.require("sap/ui/core/Core").getConfiguration();return t.getInstance(i.getLocale())._get()}static _listenForThemeChange(){if(a.isAtLeastVersion116()){const t=window.sap.ui.require("sap/ui/core/Theming");t.attachApplied(()=>{Theme.u(t.getTheme());});}else {const t=window.sap.ui.require("sap/ui/core/Core"),e=t.getConfiguration();t.attachThemeChanged(()=>{Theme.u(e.getTheme());});}}static attachListeners(){a.isOpenUI5Detected()&&a._listenForThemeChange();}static cssVariablesLoaded(){if(!a.isOpenUI5Detected())return;const t=[...document.head.children].find(e=>e.id==="sap-ui-theme-sap.ui.core");return t?!!t.href.match(/\/css(-|_)variables\.css/):false}};Theme.s("OpenUI5Support",a$2);
7
+ let a$9 = class a{static isAtLeastVersion116(){if(!window.sap.ui.version)return true;const e=window.sap.ui.version.split(".");return !e||e.length<2?false:parseInt(e[0])>1||parseInt(e[1])>=116}static isOpenUI5Detected(){return typeof window.sap?.ui?.require=="function"}static init(){return a.isOpenUI5Detected()?new Promise(t=>{window.sap.ui.require(["sap/ui/core/Core"],async e=>{const i=()=>{let n=["sap/ui/core/Popup","sap/ui/core/Patcher","sap/ui/core/LocaleData"];a.isAtLeastVersion116()&&(n=[...n,"sap/base/i18n/Formatting","sap/base/i18n/Localization","sap/ui/core/ControlBehavior","sap/ui/core/Theming","sap/ui/core/date/CalendarUtils"]),window.sap.ui.require(n,(o,r)=>{p$4(r),h$1(o),t();});};a.isAtLeastVersion116()?(await e.ready(),i()):e.attachInit(i);});}):Promise.resolve()}static getConfigurationSettingsObject(){if(!a.isOpenUI5Detected())return {};if(a.isAtLeastVersion116()){const n=window.sap.ui.require("sap/ui/core/ControlBehavior"),o=window.sap.ui.require("sap/base/i18n/Localization"),r=window.sap.ui.require("sap/ui/core/Theming"),s=window.sap.ui.require("sap/base/i18n/Formatting"),c=window.sap.ui.require("sap/ui/core/date/CalendarUtils");return {animationMode:n.getAnimationMode(),language:o.getLanguage(),theme:r.getTheme(),themeRoot:r.getThemeRoot(),rtl:o.getRTL(),timezone:o.getTimezone(),calendarType:s.getCalendarType(),formatSettings:{firstDayOfWeek:c.getWeekConfigurationValues().firstDayOfWeek,legacyDateCalendarCustomizing:s.getCustomIslamicCalendarData?.()??s.getLegacyDateCalendarCustomizing?.()}}}const e=window.sap.ui.require("sap/ui/core/Core").getConfiguration(),i=window.sap.ui.require("sap/ui/core/LocaleData");return {animationMode:e.getAnimationMode(),language:e.getLanguage(),theme:e.getTheme(),themeRoot:e.getThemeRoot(),rtl:e.getRTL(),timezone:e.getTimezone(),calendarType:e.getCalendarType(),formatSettings:{firstDayOfWeek:i?i.getInstance(e.getLocale()).getFirstDayOfWeek():void 0,legacyDateCalendarCustomizing:e.getFormatSettings().getLegacyDateCalendarCustomizing()}}}static getLocaleDataObject(){if(!a.isOpenUI5Detected())return;const t=window.sap.ui.require("sap/ui/core/LocaleData");if(a.isAtLeastVersion116()){const n=window.sap.ui.require("sap/base/i18n/Localization");return t.getInstance(n.getLanguageTag())._get()}const i=window.sap.ui.require("sap/ui/core/Core").getConfiguration();return t.getInstance(i.getLocale())._get()}static _listenForThemeChange(){if(a.isAtLeastVersion116()){const t=window.sap.ui.require("sap/ui/core/Theming");t.attachApplied(()=>{Icons.u$1(t.getTheme());});}else {const t=window.sap.ui.require("sap/ui/core/Core"),e=t.getConfiguration();t.attachThemeChanged(()=>{Icons.u$1(e.getTheme());});}}static attachListeners(){a.isOpenUI5Detected()&&a._listenForThemeChange();}static cssVariablesLoaded(){if(!a.isOpenUI5Detected())return;const t=[...document.head.children].find(e=>e.id==="sap-ui-theme-sap.ui.core");return t?!!t.href.match(/\/css(-|_)variables\.css/):false}};Icons.s("OpenUI5Support",a$9);
8
8
 
9
- /**
10
- * @license
11
- * Copyright 2017 Google LLC
12
- * SPDX-License-Identifier: BSD-3-Clause
13
- */
14
- var t$1;const i=window,s$1=i.trustedTypes,e$1=s$1?s$1.createPolicy("lit-html",{createHTML:t=>t}):void 0,o$1="$lit$",n$1=`lit$${(Math.random()+"").slice(9)}$`,l$1="?"+n$1,h=`<${l$1}>`,r=document,u$1=()=>r.createComment(""),d=t=>null===t||"object"!=typeof t&&"function"!=typeof t,c=Array.isArray,v=t=>c(t)||"function"==typeof(null==t?void 0:t[Symbol.iterator]),a$1="[ \t\n\f\r]",f=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${a$1}(?:([^\\s"'>=/]+)(${a$1}*=${a$1}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),g=/'/g,$=/"/g,y=/^(?:script|style|textarea|title)$/i,w=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),x=w(1),b=w(2),T=Symbol.for("lit-noChange"),A=Symbol.for("lit-nothing"),E=new WeakMap,C=r.createTreeWalker(r,129,null,false);function P(t,i){if(!Array.isArray(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==e$1?e$1.createHTML(i):i}const V=(t,i)=>{const s=t.length-1,e=[];let l,r=2===i?"<svg>":"",u=f;for(let i=0;i<s;i++){const s=t[i];let d,c,v=-1,a=0;for(;a<s.length&&(u.lastIndex=a,c=u.exec(s),null!==c);)a=u.lastIndex,u===f?"!--"===c[1]?u=_:void 0!==c[1]?u=m:void 0!==c[2]?(y.test(c[2])&&(l=RegExp("</"+c[2],"g")),u=p):void 0!==c[3]&&(u=p):u===p?">"===c[0]?(u=null!=l?l:f,v=-1):void 0===c[1]?v=-2:(v=u.lastIndex-c[2].length,d=c[1],u=void 0===c[3]?p:'"'===c[3]?$:g):u===$||u===g?u=p:u===_||u===m?u=f:(u=p,l=void 0);const w=u===p&&t[i+1].startsWith("/>")?" ":"";r+=u===f?s+h:v>=0?(e.push(d),s.slice(0,v)+o$1+s.slice(v)+n$1+w):s+n$1+(-2===v?(e.push(void 0),i):w);}return [P(t,r+(t[s]||"<?>")+(2===i?"</svg>":"")),e]};class N{constructor({strings:t,_$litType$:i},e){let h;this.parts=[];let r=0,d=0;const c=t.length-1,v=this.parts,[a,f]=V(t,i);if(this.el=N.createElement(a,e),C.currentNode=this.el.content,2===i){const t=this.el.content,i=t.firstChild;i.remove(),t.append(...i.childNodes);}for(;null!==(h=C.nextNode())&&v.length<c;){if(1===h.nodeType){if(h.hasAttributes()){const t=[];for(const i of h.getAttributeNames())if(i.endsWith(o$1)||i.startsWith(n$1)){const s=f[d++];if(t.push(i),void 0!==s){const t=h.getAttribute(s.toLowerCase()+o$1).split(n$1),i=/([.?@])?(.*)/.exec(s);v.push({type:1,index:r,name:i[2],strings:t,ctor:"."===i[1]?H:"?"===i[1]?L:"@"===i[1]?z:k});}else v.push({type:6,index:r});}for(const i of t)h.removeAttribute(i);}if(y.test(h.tagName)){const t=h.textContent.split(n$1),i=t.length-1;if(i>0){h.textContent=s$1?s$1.emptyScript:"";for(let s=0;s<i;s++)h.append(t[s],u$1()),C.nextNode(),v.push({type:2,index:++r});h.append(t[i],u$1());}}}else if(8===h.nodeType)if(h.data===l$1)v.push({type:2,index:r});else {let t=-1;for(;-1!==(t=h.data.indexOf(n$1,t+1));)v.push({type:7,index:r}),t+=n$1.length-1;}r++;}}static createElement(t,i){const s=r.createElement("template");return s.innerHTML=t,s}}function S(t,i,s=t,e){var o,n,l,h;if(i===T)return i;let r=void 0!==e?null===(o=s._$Co)||void 0===o?void 0:o[e]:s._$Cl;const u=d(i)?void 0:i._$litDirective$;return (null==r?void 0:r.constructor)!==u&&(null===(n=null==r?void 0:r._$AO)||void 0===n||n.call(r,false),void 0===u?r=void 0:(r=new u(t),r._$AT(t,s,e)),void 0!==e?(null!==(l=(h=s)._$Co)&&void 0!==l?l:h._$Co=[])[e]=r:s._$Cl=r),void 0!==r&&(i=S(t,r._$AS(t,i.values),r,e)),i}class M{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i;}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){var i;const{el:{content:s},parts:e}=this._$AD,o=(null!==(i=null==t?void 0:t.creationScope)&&void 0!==i?i:r).importNode(s,true);C.currentNode=o;let n=C.nextNode(),l=0,h=0,u=e[0];for(;void 0!==u;){if(l===u.index){let i;2===u.type?i=new R(n,n.nextSibling,this,t):1===u.type?i=new u.ctor(n,u.name,u.strings,this,t):6===u.type&&(i=new Z(n,this,t)),this._$AV.push(i),u=e[++h];}l!==(null==u?void 0:u.index)&&(n=C.nextNode(),l++);}return C.currentNode=r,o}v(t){let i=0;for(const s of this._$AV) void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++;}}class R{constructor(t,i,s,e){var o;this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cp=null===(o=null==e?void 0:e.isConnected)||void 0===o||o;}get _$AU(){var t,i;return null!==(i=null===(t=this._$AM)||void 0===t?void 0:t._$AU)&&void 0!==i?i:this._$Cp}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===(null==t?void 0:t.nodeType)&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=S(this,t,i),d(t)?t===A||null==t||""===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==T&&this._(t):void 0!==t._$litType$?this.g(t):void 0!==t.nodeType?this.$(t):v(t)?this.T(t):this._(t);}k(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}$(t){this._$AH!==t&&(this._$AR(),this._$AH=this.k(t));}_(t){this._$AH!==A&&d(this._$AH)?this._$AA.nextSibling.data=t:this.$(r.createTextNode(t)),this._$AH=t;}g(t){var i;const{values:s,_$litType$:e}=t,o="number"==typeof e?this._$AC(t):(void 0===e.el&&(e.el=N.createElement(P(e.h,e.h[0]),this.options)),e);if((null===(i=this._$AH)||void 0===i?void 0:i._$AD)===o)this._$AH.v(s);else {const t=new M(o,this),i=t.u(this.options);t.v(s),this.$(i),this._$AH=t;}}_$AC(t){let i=E.get(t.strings);return void 0===i&&E.set(t.strings,i=new N(t)),i}T(t){c(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const o of t)e===i.length?i.push(s=new R(this.k(u$1()),this.k(u$1()),this,this.options)):s=i[e],s._$AI(o),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e);}_$AR(t=this._$AA.nextSibling,i){var s;for(null===(s=this._$AP)||void 0===s||s.call(this,false,true,i);t&&t!==this._$AB;){const i=t.nextSibling;t.remove(),t=i;}}setConnected(t){var i;void 0===this._$AM&&(this._$Cp=t,null===(i=this._$AP)||void 0===i||i.call(this,t));}}class k{constructor(t,i,s,e,o){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=o,s.length>2||""!==s[0]||""!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A;}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,i=this,s,e){const o=this.strings;let n=false;if(void 0===o)t=S(this,t,i,0),n=!d(t)||t!==this._$AH&&t!==T,n&&(this._$AH=t);else {const e=t;let l,h;for(t=o[0],l=0;l<o.length-1;l++)h=S(this,e[s+l],i,l),h===T&&(h=this._$AH[l]),n||(n=!d(h)||h!==this._$AH[l]),h===A?t=A:t!==A&&(t+=(null!=h?h:"")+o[l+1]),this._$AH[l]=h;}n&&!e&&this.j(t);}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,null!=t?t:"");}}class H extends k{constructor(){super(...arguments),this.type=3;}j(t){this.element[this.name]=t===A?void 0:t;}}const I=s$1?s$1.emptyScript:"";class L extends k{constructor(){super(...arguments),this.type=4;}j(t){t&&t!==A?this.element.setAttribute(this.name,I):this.element.removeAttribute(this.name);}}class z extends k{constructor(t,i,s,e,o){super(t,i,s,e,o),this.type=5;}_$AI(t,i=this){var s;if((t=null!==(s=S(this,t,i,0))&&void 0!==s?s:A)===T)return;const e=this._$AH,o=t===A&&e!==A||t.capture!==e.capture||t.once!==e.once||t.passive!==e.passive,n=t!==A&&(e===A||o);o&&this.element.removeEventListener(this.name,this,e),n&&this.element.addEventListener(this.name,this,t),this._$AH=t;}handleEvent(t){var i,s;"function"==typeof this._$AH?this._$AH.call(null!==(s=null===(i=this.options)||void 0===i?void 0:i.host)&&void 0!==s?s:this.element,t):this._$AH.handleEvent(t);}}class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s;}get _$AU(){return this._$AM._$AU}_$AI(t){S(this,t);}}const B=i.litHtmlPolyfillSupport;null==B||B(N,R),(null!==(t$1=i.litHtmlVersions)&&void 0!==t$1?t$1:i.litHtmlVersions=[]).push("2.8.0");
9
+ /**
10
+ * @license
11
+ * Copyright 2017 Google LLC
12
+ * SPDX-License-Identifier: BSD-3-Clause
13
+ */
14
+ var t$7;const i$8=window,s$c=i$8.trustedTypes,e$8=s$c?s$c.createPolicy("lit-html",{createHTML:t=>t}):void 0,o$8="$lit$",n$e=`lit$${(Math.random()+"").slice(9)}$`,l$8="?"+n$e,h=`<${l$8}>`,r$5=document,u$5=()=>r$5.createComment(""),d$3=t=>null===t||"object"!=typeof t&&"function"!=typeof t,c$7=Array.isArray,v$3=t=>c$7(t)||"function"==typeof(null==t?void 0:t[Symbol.iterator]),a$8="[ \t\n\f\r]",f$6=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,_$1=/-->/g,m$6=/>/g,p$3=RegExp(`>|${a$8}(?:([^\\s"'>=/]+)(${a$8}*=${a$8}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),g$2=/'/g,$=/"/g,y$3=/^(?:script|style|textarea|title)$/i,w$1=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),x=w$1(1),b$7=w$1(2),T$1=Symbol.for("lit-noChange"),A=Symbol.for("lit-nothing"),E=new WeakMap,C$2=r$5.createTreeWalker(r$5,129,null,false);function P$1(t,i){if(!Array.isArray(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==e$8?e$8.createHTML(i):i}const V$1=(t,i)=>{const s=t.length-1,e=[];let l,r=2===i?"<svg>":"",u=f$6;for(let i=0;i<s;i++){const s=t[i];let d,c,v=-1,a=0;for(;a<s.length&&(u.lastIndex=a,c=u.exec(s),null!==c);)a=u.lastIndex,u===f$6?"!--"===c[1]?u=_$1:void 0!==c[1]?u=m$6:void 0!==c[2]?(y$3.test(c[2])&&(l=RegExp("</"+c[2],"g")),u=p$3):void 0!==c[3]&&(u=p$3):u===p$3?">"===c[0]?(u=null!=l?l:f$6,v=-1):void 0===c[1]?v=-2:(v=u.lastIndex-c[2].length,d=c[1],u=void 0===c[3]?p$3:'"'===c[3]?$:g$2):u===$||u===g$2?u=p$3:u===_$1||u===m$6?u=f$6:(u=p$3,l=void 0);const w=u===p$3&&t[i+1].startsWith("/>")?" ":"";r+=u===f$6?s+h:v>=0?(e.push(d),s.slice(0,v)+o$8+s.slice(v)+n$e+w):s+n$e+(-2===v?(e.push(void 0),i):w);}return [P$1(t,r+(t[s]||"<?>")+(2===i?"</svg>":"")),e]};class N{constructor({strings:t,_$litType$:i},e){let h;this.parts=[];let r=0,d=0;const c=t.length-1,v=this.parts,[a,f]=V$1(t,i);if(this.el=N.createElement(a,e),C$2.currentNode=this.el.content,2===i){const t=this.el.content,i=t.firstChild;i.remove(),t.append(...i.childNodes);}for(;null!==(h=C$2.nextNode())&&v.length<c;){if(1===h.nodeType){if(h.hasAttributes()){const t=[];for(const i of h.getAttributeNames())if(i.endsWith(o$8)||i.startsWith(n$e)){const s=f[d++];if(t.push(i),void 0!==s){const t=h.getAttribute(s.toLowerCase()+o$8).split(n$e),i=/([.?@])?(.*)/.exec(s);v.push({type:1,index:r,name:i[2],strings:t,ctor:"."===i[1]?H$1:"?"===i[1]?L:"@"===i[1]?z:k$1});}else v.push({type:6,index:r});}for(const i of t)h.removeAttribute(i);}if(y$3.test(h.tagName)){const t=h.textContent.split(n$e),i=t.length-1;if(i>0){h.textContent=s$c?s$c.emptyScript:"";for(let s=0;s<i;s++)h.append(t[s],u$5()),C$2.nextNode(),v.push({type:2,index:++r});h.append(t[i],u$5());}}}else if(8===h.nodeType)if(h.data===l$8)v.push({type:2,index:r});else {let t=-1;for(;-1!==(t=h.data.indexOf(n$e,t+1));)v.push({type:7,index:r}),t+=n$e.length-1;}r++;}}static createElement(t,i){const s=r$5.createElement("template");return s.innerHTML=t,s}}function S$1(t,i,s=t,e){var o,n,l,h;if(i===T$1)return i;let r=void 0!==e?null===(o=s._$Co)||void 0===o?void 0:o[e]:s._$Cl;const u=d$3(i)?void 0:i._$litDirective$;return (null==r?void 0:r.constructor)!==u&&(null===(n=null==r?void 0:r._$AO)||void 0===n||n.call(r,false),void 0===u?r=void 0:(r=new u(t),r._$AT(t,s,e)),void 0!==e?(null!==(l=(h=s)._$Co)&&void 0!==l?l:h._$Co=[])[e]=r:s._$Cl=r),void 0!==r&&(i=S$1(t,r._$AS(t,i.values),r,e)),i}class M{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i;}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){var i;const{el:{content:s},parts:e}=this._$AD,o=(null!==(i=null==t?void 0:t.creationScope)&&void 0!==i?i:r$5).importNode(s,true);C$2.currentNode=o;let n=C$2.nextNode(),l=0,h=0,u=e[0];for(;void 0!==u;){if(l===u.index){let i;2===u.type?i=new R$2(n,n.nextSibling,this,t):1===u.type?i=new u.ctor(n,u.name,u.strings,this,t):6===u.type&&(i=new Z$1(n,this,t)),this._$AV.push(i),u=e[++h];}l!==(null==u?void 0:u.index)&&(n=C$2.nextNode(),l++);}return C$2.currentNode=r$5,o}v(t){let i=0;for(const s of this._$AV) void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++;}}let R$2 = class R{constructor(t,i,s,e){var o;this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cp=null===(o=null==e?void 0:e.isConnected)||void 0===o||o;}get _$AU(){var t,i;return null!==(i=null===(t=this._$AM)||void 0===t?void 0:t._$AU)&&void 0!==i?i:this._$Cp}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===(null==t?void 0:t.nodeType)&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=S$1(this,t,i),d$3(t)?t===A||null==t||""===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==T$1&&this._(t):void 0!==t._$litType$?this.g(t):void 0!==t.nodeType?this.$(t):v$3(t)?this.T(t):this._(t);}k(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}$(t){this._$AH!==t&&(this._$AR(),this._$AH=this.k(t));}_(t){this._$AH!==A&&d$3(this._$AH)?this._$AA.nextSibling.data=t:this.$(r$5.createTextNode(t)),this._$AH=t;}g(t){var i;const{values:s,_$litType$:e}=t,o="number"==typeof e?this._$AC(t):(void 0===e.el&&(e.el=N.createElement(P$1(e.h,e.h[0]),this.options)),e);if((null===(i=this._$AH)||void 0===i?void 0:i._$AD)===o)this._$AH.v(s);else {const t=new M(o,this),i=t.u(this.options);t.v(s),this.$(i),this._$AH=t;}}_$AC(t){let i=E.get(t.strings);return void 0===i&&E.set(t.strings,i=new N(t)),i}T(t){c$7(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const o of t)e===i.length?i.push(s=new R(this.k(u$5()),this.k(u$5()),this,this.options)):s=i[e],s._$AI(o),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e);}_$AR(t=this._$AA.nextSibling,i){var s;for(null===(s=this._$AP)||void 0===s||s.call(this,false,true,i);t&&t!==this._$AB;){const i=t.nextSibling;t.remove(),t=i;}}setConnected(t){var i;void 0===this._$AM&&(this._$Cp=t,null===(i=this._$AP)||void 0===i||i.call(this,t));}};let k$1 = class k{constructor(t,i,s,e,o){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=o,s.length>2||""!==s[0]||""!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A;}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,i=this,s,e){const o=this.strings;let n=false;if(void 0===o)t=S$1(this,t,i,0),n=!d$3(t)||t!==this._$AH&&t!==T$1,n&&(this._$AH=t);else {const e=t;let l,h;for(t=o[0],l=0;l<o.length-1;l++)h=S$1(this,e[s+l],i,l),h===T$1&&(h=this._$AH[l]),n||(n=!d$3(h)||h!==this._$AH[l]),h===A?t=A:t!==A&&(t+=(null!=h?h:"")+o[l+1]),this._$AH[l]=h;}n&&!e&&this.j(t);}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,null!=t?t:"");}};let H$1 = class H extends k$1{constructor(){super(...arguments),this.type=3;}j(t){this.element[this.name]=t===A?void 0:t;}};const I$1=s$c?s$c.emptyScript:"";class L extends k$1{constructor(){super(...arguments),this.type=4;}j(t){t&&t!==A?this.element.setAttribute(this.name,I$1):this.element.removeAttribute(this.name);}}class z extends k$1{constructor(t,i,s,e,o){super(t,i,s,e,o),this.type=5;}_$AI(t,i=this){var s;if((t=null!==(s=S$1(this,t,i,0))&&void 0!==s?s:A)===T$1)return;const e=this._$AH,o=t===A&&e!==A||t.capture!==e.capture||t.once!==e.once||t.passive!==e.passive,n=t!==A&&(e===A||o);o&&this.element.removeEventListener(this.name,this,e),n&&this.element.addEventListener(this.name,this,t),this._$AH=t;}handleEvent(t){var i,s;"function"==typeof this._$AH?this._$AH.call(null!==(s=null===(i=this.options)||void 0===i?void 0:i.host)&&void 0!==s?s:this.element,t):this._$AH.handleEvent(t);}}let Z$1 = class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s;}get _$AU(){return this._$AM._$AU}_$AI(t){S$1(this,t);}};const B$1=i$8.litHtmlPolyfillSupport;null==B$1||B$1(N,R$2),(null!==(t$7=i$8.litHtmlVersions)&&void 0!==t$7?t$7:i$8.litHtmlVersions=[]).push("2.8.0");
15
15
 
16
- /**
17
- * @license
18
- * Copyright 2020 Google LLC
19
- * SPDX-License-Identifier: BSD-3-Clause
20
- */const e=Symbol.for(""),l=t=>{if((null==t?void 0:t.r)===e)return null==t?void 0:t._$litStatic$},o=t=>({_$litStatic$:t,r:e}),s=new Map,a=t=>(r,...e)=>{const o=e.length;let i,a;const n=[],u=[];let c,$=0,f=false;for(;$<o;){for(c=r[$];$<o&&void 0!==(a=e[$],i=l(a));)c+=i+r[++$],f=true;$!==o&&u.push(a),n.push(c),$++;}if($===o&&n.push(r[o]),f){const t=n.join("$$lit$$");void 0===(r=s.get(t))&&(n.raw=n,s.set(t,r=n)),e=u;}return t(r,...e)},n=a(x),u=a(b);
16
+ /**
17
+ * @license
18
+ * Copyright 2020 Google LLC
19
+ * SPDX-License-Identifier: BSD-3-Clause
20
+ */const e$7=Symbol.for(""),l$7=t=>{if((null==t?void 0:t.r)===e$7)return null==t?void 0:t._$litStatic$},o$7=t=>({_$litStatic$:t,r:e$7}),s$b=new Map,a$7=t=>(r,...e)=>{const o=e.length;let i,a;const n=[],u=[];let c,$=0,f=false;for(;$<o;){for(c=r[$];$<o&&void 0!==(a=e[$],i=l$7(a));)c+=i+r[++$],f=true;$!==o&&u.push(a),n.push(c),$++;}if($===o&&n.push(r[o]),f){const t=n.join("$$lit$$");void 0===(r=s$b.get(t))&&(n.raw=n,s$b.set(t,r=n)),e=u;}return t(r,...e)},n$d=a$7(x),u$4=a$7(b$7);
21
21
 
22
- class t{static{this.html=n;}static{this.svg=u;}static{this.unsafeStatic=o;}}Theme.s("LitStatic",t);
22
+ let t$6 = class t{static{this.html=n$d;}static{this.svg=u$4;}static{this.unsafeStatic=o$7;}};Icons.s("LitStatic",t$6);
23
23
 
24
- Theme.l("16d3c820");
24
+ const t$5=new WeakMap;let a$6 = class a{static get tasks(){return t$5}static enqueue(s,e){t$5.has(s)||t$5.set(s,[]),t$5.get(s).push(e);}static run(s,e){return t$5.has(s)||t$5.set(s,[]),e().then(()=>{const T=t$5.get(s);if(T.length>0)return a.run(s,T.shift());t$5.delete(s);})}static push(s,e){t$5.get(s)?a.enqueue(s,e):a.run(s,e);}};
25
+
26
+ const f$5=e=>{let n=null,a=false,i,o,r;const m=new Promise((t,c)=>{r=u=>{n=n||u;const d=u-n,l=e.duration-d;if(d<=e.duration){const s=1-l/e.duration;e.advance(s),a||(i=requestAnimationFrame(r));}else e.advance(1),t();},o=()=>{a=true,cancelAnimationFrame(i),c(new Error("animation stopped"));};}).catch(t=>t);return a$6.push(e.element,()=>(typeof e.beforeStart=="function"&&e.beforeStart(),requestAnimationFrame(r),new Promise(t=>{m.then(()=>t());}))),{promise:()=>m,stop:()=>o}},v$2=400;
27
+
28
+ const n$c=(r,c,a)=>{let o,l;return f$5({beforeStart:()=>{o=r.scrollLeft,l=r.scrollTop;},duration:v$2,element:r,advance:t=>{r.scrollLeft=o+t*c,r.scrollTop=l+t*a;}})};
29
+
30
+ const b$6=t=>{let o,a,d,r,s,p,g,y,n,l,h,T;const B=f$5({beforeStart:()=>{t.style.display="block",o=getComputedStyle(t),a=parseFloat(o.paddingTop),d=parseFloat(o.paddingBottom),r=parseFloat(o.marginTop),s=parseFloat(o.marginBottom),p=parseFloat(o.height),g=t.style.overflow,y=t.style.paddingTop,n=t.style.paddingBottom,l=t.style.marginTop,h=t.style.marginBottom,T=t.style.height,t.style.overflow="hidden",t.style.paddingTop="0",t.style.paddingBottom="0",t.style.marginTop="0",t.style.marginBottom="0",t.style.height="0";},duration:v$2,element:t,advance:i=>{t.style.display="block",t.style.paddingTop=`${a*i}px`,t.style.paddingBottom=`${d*i}px`,t.style.marginTop=`${r*i}px`,t.style.marginBottom=`${s*i}px`,t.style.height=`${p*i}px`;}});return B.promise().then(()=>{t.style.overflow=g,t.style.paddingTop=y,t.style.paddingBottom=n,t.style.marginTop=l,t.style.marginBottom=h,t.style.height=T;}),B};
31
+
32
+ const u$3=o=>{let i,a,r,d,n,s,p,g,e,l,y,m;const h=f$5({beforeStart:()=>{const t=o;i=getComputedStyle(t),a=parseFloat(i.paddingTop),r=parseFloat(i.paddingBottom),d=parseFloat(i.marginTop),n=parseFloat(i.marginBottom),s=parseFloat(i.height),p=t.style.overflow,g=t.style.paddingTop,e=t.style.paddingBottom,l=t.style.marginTop,y=t.style.marginBottom,m=t.style.height,t.style.overflow="hidden";},duration:v$2,element:o,advance:t=>{o.style.paddingTop=`${a-a*t}px`,o.style.paddingBottom=`${r-r*t}px`,o.style.marginTop=`${d-d*t}px`,o.style.marginBottom=`${n-n*t}px`,o.style.height=`${s-s*t}px`;}});return h.promise().then(t=>{t instanceof Error||(o.style.overflow=p,o.style.paddingTop=g,o.style.paddingBottom=e,o.style.marginTop=l,o.style.marginBottom=y,o.style.height=m,o.style.display="none");}),h};
33
+
34
+ let n$b;Icons.i(()=>{n$b=void 0;});const d$2=()=>(n$b===void 0&&(n$b=Icons.C()),n$b),m$5=o=>{Object.values(Icons.u).includes(o)&&(n$b=o);};
35
+
36
+ var s$a=(i=>(i.Gregorian="Gregorian",i.Islamic="Islamic",i.Japanese="Japanese",i.Buddhist="Buddhist",i.Persian="Persian",i))(s$a||{});
37
+
38
+ let n$a;Icons.i(()=>{n$a=void 0;});const i$7=()=>(n$a===void 0&&(n$a=Icons.I()),n$a&&n$a in s$a?n$a:s$a.Gregorian);
39
+
40
+ let t$4;let a$5 = class a{static getLegacyDateCalendarCustomizing(){return t$4===void 0&&(t$4=Icons.M()),t$4.legacyDateCalendarCustomizing||[]}};Icons.s("LegacyDateFormats",a$5);
41
+
42
+ let e$6;Icons.i(()=>{e$6=void 0;});const n$9=()=>(e$6===void 0&&(e$6=Icons.M()),e$6.firstDayOfWeek),i$6=Icons.n("LegacyDateFormats"),m$4=i$6?a$5.getLegacyDateCalendarCustomizing:()=>[];
43
+
44
+ const c$6=["value-changed","click"];let e$5;Icons.i(()=>{e$5=void 0;});const s$9=t=>c$6.includes(t),l$6=t=>{const n=o$6();return !(typeof n!="boolean"&&n.events&&n.events.includes&&n.events.includes(t))},o$6=()=>(e$5===void 0&&(e$5=Icons.U()),e$5),f$4=t=>{e$5=t;},a$4=t=>{const n=o$6();return s$9(t)?false:n===true?true:!l$6(t)};
45
+
46
+ const m$3=(a={})=>e=>{if(Object.prototype.hasOwnProperty.call(e,"metadata")||(e.metadata={}),typeof a=="string"){e.metadata.tag=a;return}const{tag:i,languageAware:o,themeAware:r,cldr:s,fastNavigation:l,formAssociated:n,shadowRootOptions:d}=a;e.metadata.tag=i,o&&(e.metadata.languageAware=o),s&&(e.metadata.cldr=s),r&&(e.metadata.themeAware=r),l&&(e.metadata.fastNavigation=l),n&&(e.metadata.formAssociated=n),d&&(e.metadata.shadowRootOptions=d),["renderer","template","styles","dependencies"].forEach(t=>{a[t]&&Object.defineProperty(e,t,{get:()=>a[t]});});};
47
+
48
+ const b$5=(n,e={})=>t=>{Object.prototype.hasOwnProperty.call(t,"metadata")||(t.metadata={});const a=t.metadata;a.events||(a.events={});const l=a.events;l[n]||(e.bubbles=!!e.bubbles,e.cancelable=!!e.cancelable,l[n]=e);};
49
+
50
+ const s$8=o=>(p,r)=>{const t=p.constructor;Object.prototype.hasOwnProperty.call(t,"metadata")||(t.metadata={});const e=t.metadata;e.properties||(e.properties={});const a=e.properties;a[r]||(a[r]=o??{});};
51
+
52
+ const d$1=e=>(l,a)=>{const r=l.constructor;Object.prototype.hasOwnProperty.call(r,"metadata")||(r.metadata={});const o=r.metadata;o.slots||(o.slots={});const t=o.slots;if(e&&e.default&&t.default)throw new Error("Only one slot can be the default slot.");const n=e&&e.default?"default":a;e=e||{type:HTMLElement},e.type||(e.type=HTMLElement),t[n]||(t[n]=e),e.default&&(delete t.default.default,t.default.propertyName=a),r.metadata.managedSlots=true;};
53
+
54
+ const y$2={TAB:9,ENTER:13,SHIFT:16,ESCAPE:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,ARROW_LEFT:37,ARROW_UP:38,ARROW_RIGHT:39,ARROW_DOWN:40,DELETE:46},b$4=o=>(o.key?o.key==="Enter":o.keyCode===y$2.ENTER)&&!a$3(o),f$3=o=>e$4(o,true,false,false),i$5=o=>(o.key?o.key==="Spacebar"||o.key===" ":o.keyCode===y$2.SPACE)&&!a$3(o),K=o=>(o.key?o.key==="ArrowLeft"||o.key==="Left":o.keyCode===y$2.ARROW_LEFT)&&!a$3(o),c$5=o=>(o.key?o.key==="ArrowRight"||o.key==="Right":o.keyCode===y$2.ARROW_RIGHT)&&!a$3(o),D$1=o=>(o.key?o.key==="ArrowUp"||o.key==="Up":o.keyCode===y$2.ARROW_UP)&&!a$3(o),P=o=>(o.key?o.key==="ArrowDown"||o.key==="Down":o.keyCode===y$2.ARROW_DOWN)&&!a$3(o),O$2=o=>(o.key?o.key==="ArrowUp"||o.key==="Up":o.keyCode===y$2.ARROW_UP)&&e$4(o,false,false,true),u$2=o=>(o.key?o.key==="ArrowDown"||o.key==="Down":o.keyCode===y$2.ARROW_DOWN)&&e$4(o,false,false,true),w=o=>(o.key?o.key==="ArrowLeft"||o.key==="Left":o.keyCode===y$2.ARROW_LEFT)&&e$4(o,false,false,true),T=o=>(o.key?o.key==="ArrowRight"||o.key==="Right":o.keyCode===y$2.ARROW_RIGHT)&&e$4(o,false,false,true),F=o=>(o.key?o.key==="Home":o.keyCode===y$2.HOME)&&!a$3(o),W=o=>(o.key?o.key==="End":o.keyCode===y$2.END)&&!a$3(o),H=o=>(o.key?o.key==="Escape"||o.key==="Esc":o.keyCode===y$2.ESCAPE)&&!a$3(o),B=o=>(o.key?o.key==="Tab":o.keyCode===y$2.TAB)&&!a$3(o),m$2=o=>(o.key?o.key==="Tab":o.keyCode===y$2.TAB)&&e$4(o,false,false,true),V=o=>(o.key?o.key==="Delete":o.keyCode===y$2.DELETE)&&!a$3(o),Y=o=>(o.key?o.key==="PageUp":o.keyCode===y$2.PAGE_UP)&&!a$3(o),Z=o=>(o.key?o.key==="PageDown":o.keyCode===y$2.PAGE_DOWN)&&!a$3(o),so=o=>o.key==="F2"&&!a$3(o),io=o=>o.key==="Shift"||o.keyCode===y$2.SHIFT,a$3=o=>o.shiftKey||o.altKey||k(o),k=o=>!!(o.metaKey||o.ctrlKey),e$4=(o,r,l,E)=>o.shiftKey===E&&o.altKey===l&&k(o)===r;
55
+
56
+ const t$3=()=>{let e=document.activeElement;for(;e&&e.shadowRoot&&e.shadowRoot.activeElement;)e=e.shadowRoot.activeElement;return e};
57
+
58
+ var r$4=(l=>(l.Auto="Auto",l.Vertical="Vertical",l.Horizontal="Horizontal",l.Paging="Paging",l))(r$4||{});
59
+
60
+ var l$5=(c=>(c.Static="Static",c.Cyclic="Cyclic",c))(l$5||{});
61
+
62
+ const s$7=new Map,o$5=new Map,n$8=new Map,c$4=e=>{if(!s$7.has(e)){const a=b$3(e.split("-"));s$7.set(e,a);}return s$7.get(e)},l$4=e=>{if(!o$5.has(e)){const a=e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase();o$5.set(e,a);}return o$5.get(e)},p$2=e=>l$4(e),b$3=e=>e.map((a,t)=>t===0?a.toLowerCase():a.charAt(0).toUpperCase()+a.slice(1).toLowerCase()).join(""),C$1=e=>{const a=n$8.get(e);if(a)return a;const t=c$4(e),r=t.charAt(0).toUpperCase()+t.slice(1);return n$8.set(e,r),r};
63
+
64
+ const o$4=t=>{if(!(t instanceof HTMLElement))return "default";const e=t.getAttribute("slot");if(e){const r=e.match(/^(.+?)-\d+$/);return r?r[1]:e}return "default"},n$7=t=>t instanceof HTMLSlotElement?t.assignedNodes({flatten:true}).filter(e=>e instanceof HTMLElement):[t],s$6=t=>t.reduce((e,r)=>e.concat(n$7(r)),[]);
65
+
66
+ let p$1 = class p{constructor(t){this.metadata=t;}getInitialState(){if(Object.prototype.hasOwnProperty.call(this,"_initialState"))return this._initialState;const t={};if(this.slotsAreManaged()){const o=this.getSlots();for(const[e,s]of Object.entries(o)){const n=s.propertyName||e;t[n]=[],t[c$4(n)]=t[n];}}return this._initialState=t,t}static validateSlotValue(t,a){return g$1(t,a)}getPureTag(){return this.metadata.tag||""}getTag(){const t=this.metadata.tag;if(!t)return "";const a=Icons.g(t);return a?`${t}-${a}`:t}hasAttribute(t){const a=this.getProperties()[t];return a.type!==Object&&a.type!==Array&&!a.noAttribute}getPropertiesList(){return Object.keys(this.getProperties())}getAttributesList(){return this.getPropertiesList().filter(this.hasAttribute.bind(this)).map(l$4)}canSlotText(){return this.getSlots().default?.type===Node}hasSlots(){return !!Object.entries(this.getSlots()).length}hasIndividualSlots(){return this.slotsAreManaged()&&Object.values(this.getSlots()).some(t=>t.individualSlots)}slotsAreManaged(){return !!this.metadata.managedSlots}supportsF6FastNavigation(){return !!this.metadata.fastNavigation}getProperties(){return this.metadata.properties||(this.metadata.properties={}),this.metadata.properties}getEvents(){return this.metadata.events||(this.metadata.events={}),this.metadata.events}getSlots(){return this.metadata.slots||(this.metadata.slots={}),this.metadata.slots}isLanguageAware(){return !!this.metadata.languageAware}isThemeAware(){return !!this.metadata.themeAware}needsCLDR(){return !!this.metadata.cldr}getShadowRootOptions(){return this.metadata.shadowRootOptions||{}}isFormAssociated(){return !!this.metadata.formAssociated}shouldInvalidateOnChildChange(t,a,o){const e=this.getSlots()[t].invalidateOnChildChange;if(e===void 0)return false;if(typeof e=="boolean")return e;if(typeof e=="object"){if(a==="property"){if(e.properties===void 0)return false;if(typeof e.properties=="boolean")return e.properties;if(Array.isArray(e.properties))return e.properties.includes(o);throw new Error("Wrong format for invalidateOnChildChange.properties: boolean or array is expected")}if(a==="slot"){if(e.slots===void 0)return false;if(typeof e.slots=="boolean")return e.slots;if(Array.isArray(e.slots))return e.slots.includes(o);throw new Error("Wrong format for invalidateOnChildChange.slots: boolean or array is expected")}}throw new Error("Wrong format for invalidateOnChildChange: boolean or object is expected")}getI18n(){return this.metadata.i18n||(this.metadata.i18n={}),this.metadata.i18n}};const g$1=(r,t)=>(r&&n$7(r).forEach(a=>{if(!(a instanceof t.type))throw new Error(`The element is not of type ${t.type.toString()}`)}),r);
67
+
68
+ const r$3=()=>Icons.m("CustomStyle.eventProvider",new Icons.i$1),n$6="CustomCSSChange",i$4=t=>{r$3().attachEvent(n$6,t);},u$1=t=>r$3().fireEvent(n$6,t),c$3=()=>Icons.m("CustomStyle.customCSSFor",{});let s$5;i$4(t=>{s$5||Icons.C$1({tag:t});});const g=(t,e)=>{const o=c$3();o[t]||(o[t]=[]),o[t].push(e),s$5=true;try{u$1(t);}finally{s$5=false;}return Icons.C$1({tag:t})},l$3=t=>{const e=c$3();return e[t]?e[t].join(""):""};
69
+
70
+ const e$3=t=>Array.isArray(t)?t.filter(r=>!!r).flat(10).join(" "):t;
71
+
72
+ const e$2=new Map;i$4(t=>{e$2.delete(`${t}_normal`);});const y$1=t=>{const o=t.getMetadata().getTag(),n=`${o}_normal`,s=Icons.n("OpenUI5Enablement");if(!e$2.has(n)){let l="";s&&(l=e$3(s.getBusyIndicatorStyles()));const a=l$3(o)||"",m=`${e$3(t.styles)} ${a} ${l}`;e$2.set(n,m);}return e$2.get(n)};
73
+
74
+ const e$1=new Map;i$4(t=>{e$1.delete(`${t}_normal`);});const s$4=t=>{const n=`${t.getMetadata().getTag()}_normal`;if(!e$1.has(n)){const a=y$1(t),o=new CSSStyleSheet;o.replaceSync(a),e$1.set(n,[o]);}return e$1.get(n)};
75
+
76
+ const s$3=o=>{const e=o.constructor,t=o.shadowRoot;if(!t){console.warn("There is no shadow root to update");return}t.adoptedStyleSheets=s$4(e),e.renderer(o,t);};
77
+
78
+ const r$2=[],o$3=t=>r$2.some(s=>t.startsWith(s));
79
+
80
+ const t$2=new WeakMap,n$5=(e,o,r)=>{const s=new MutationObserver(o);t$2.set(e,s),s.observe(e,r);},b$2=e=>{const o=t$2.get(e);o&&(o.disconnect(),t$2.delete(e));};
81
+
82
+ const r$1=t=>t.matches(":dir(rtl)")?"rtl":"ltr";
83
+
84
+ const s$2=["disabled","title","hidden","role","draggable"],r=e=>s$2.includes(e)||e.startsWith("aria")?true:![HTMLElement,Element,Node].some(t=>t.prototype.hasOwnProperty(e));
85
+
86
+ const n$4=(t,r)=>{if(t.length!==r.length)return false;for(let e=0;e<t.length;e++)if(t[e]!==r[e])return false;return true};
87
+
88
+ const n$3=(e,t)=>e.call(t);
89
+
90
+ const o$2=t=>{s$1(t)&&e(t);},e=t=>{if(t._internals?.form){if(n$2(t),!t.name){t._internals?.setFormValue(null);return}t._internals.setFormValue(t.formFormattedValue);}},n$2=async t=>{if(t._internals?.form)if(t.formValidity&&Object.keys(t.formValidity).some(r=>r)){const r=await t.formElementAnchor?.();t._internals.setValidity(t.formValidity,t.formValidityMessage,r);}else t._internals.setValidity({});},i$3=t=>{t._internals?.form?.requestSubmit();},m$1=t=>{t._internals?.form?.reset();},s$1=t=>"formFormattedValue"in t&&"name"in t;
91
+
92
+ const f$2=new Map,s=new Map,i$2=new Map,D=new Set;let d=false;const O$1={iw:"he",ji:"yi",in:"id"},l$2=t=>{d||(console.warn(`[LocaleData] Supported locale "${t}" not configured, import the "Assets.js" module from the webcomponents package you are using.`),d=true);},R$1=(t,e,n)=>{t=t&&O$1[t]||t,t==="no"&&(t="nb"),t==="zh"&&!e&&(n==="Hans"?e="CN":n==="Hant"&&(e="TW")),(t==="sh"||t==="sr"&&n==="Latn")&&(t="sr",e="Latn");let r=`${t}_${e}`;return Icons.l.includes(r)?s.has(r)?r:(l$2(r),Icons.r):(r=t,Icons.l.includes(r)?s.has(r)?r:(l$2(r),Icons.r):Icons.r)},m=(t,e)=>{f$2.set(t,e);},_=t=>{if(!i$2.get(t)){const e=s.get(t);if(!e)throw new Error(`CLDR data for locale ${t} is not loaded!`);i$2.set(t,e(t));}return i$2.get(t)},u=async(t,e,n)=>{const r=R$1(t,e,n),p=Icons.n("OpenUI5Support");if(p){const o=p.getLocaleDataObject();if(o){m(r,o);return}}try{const o=await _(r);m(r,o);}catch(o){const c=o;D.has(c.message)||(D.add(c.message),console.error(c.message));}},C=(t,e)=>{s.set(t,e);};C("en",async()=>(await fetch("https://sdk.openui5.org/1.120.17/resources/sap/ui/core/cldr/en.json")).json()),Icons.t(()=>{const t=Icons.s$1();return u(t.getLanguage(),t.getRegion(),t.getScript())});
93
+
94
+ let ot=0;const R=new Map,I=new Map,O={fromAttribute(c,f){return f===Boolean?c!==null:f===Number?c===null?void 0:parseFloat(c):c},toAttribute(c,f){return f===Boolean?c?"":null:f===Object||f===Array||c==null?null:String(c)}};function y(c){this._suppressInvalidation||(this.onInvalidation(c),this._changedState.push(c),Icons.l$2(this),this._invalidationEventProvider.fireEvent("invalidate",{...c,target:this}));}function it(c,f){do{const t=Object.getOwnPropertyDescriptor(c,f);if(t)return t;c=Object.getPrototypeOf(c);}while(c&&c!==HTMLElement.prototype)}let b$1 = class b extends HTMLElement{constructor(){super();this._rendered=false;const t=this.constructor;this._changedState=[],this._suppressInvalidation=true,this._inDOM=false,this._fullyConnected=false,this._childChangeListeners=new Map,this._slotChangeListeners=new Map,this._invalidationEventProvider=new Icons.i$1,this._componentStateFinalizedEventProvider=new Icons.i$1;let e;this._domRefReadyPromise=new Promise(n=>{e=n;}),this._domRefReadyPromise._deferredResolve=e,this._doNotSyncAttributes=new Set,this._slotsAssignedNodes=new WeakMap,this._state={...t.getMetadata().getInitialState()},this.initializedProperties=new Map,this.constructor.getMetadata().getPropertiesList().forEach(n=>{if(this.hasOwnProperty(n)){const o=this[n];this.initializedProperties.set(n,o);}}),this._internals=this.attachInternals(),this._initShadowRoot();}_initShadowRoot(){const t=this.constructor;if(t._needsShadowDOM()){const e={mode:"open"};this.attachShadow({...e,...t.getMetadata().getShadowRootOptions()}),t.getMetadata().slotsAreManaged()&&this.shadowRoot.addEventListener("slotchange",this._onShadowRootSlotChange.bind(this));}}_onShadowRootSlotChange(t){t.target?.getRootNode()===this.shadowRoot&&this._processChildren();}get _id(){return this.__id||(this.__id=`ui5wc_${++ot}`),this.__id}render(){const t=this.constructor.template;return n$3(t,this)}async connectedCallback(){const t=this.constructor;this.setAttribute(t.getMetadata().getPureTag(),""),t.getMetadata().supportsF6FastNavigation()&&this.setAttribute("data-sap-ui-fastnavgroup","true");const e=t.getMetadata().slotsAreManaged();this._inDOM=true,e&&(this._startObservingDOMChildren(),await this._processChildren()),this._inDOM&&(t.asyncFinished||await t.definePromise,Icons.c(this),this._domRefReadyPromise._deferredResolve(),this._fullyConnected=true,this.onEnterDOM());}disconnectedCallback(){const e=this.constructor.getMetadata().slotsAreManaged();this._inDOM=false,e&&this._stopObservingDOMChildren(),this._fullyConnected&&(this.onExitDOM(),this._fullyConnected=false),this._domRefReadyPromise._deferredResolve(),Icons.h(this);}onBeforeRendering(){}onAfterRendering(){}onEnterDOM(){}onExitDOM(){}_startObservingDOMChildren(){const e=this.constructor.getMetadata();if(!e.hasSlots())return;const n=e.canSlotText(),o={childList:true,subtree:n,characterData:n};n$5(this,this._processChildren.bind(this),o);}_stopObservingDOMChildren(){b$2(this);}async _processChildren(){this.constructor.getMetadata().hasSlots()&&await this._updateSlots();}async _updateSlots(){const t=this.constructor,e$1=t.getMetadata().getSlots(),s=t.getMetadata().canSlotText(),n=Array.from(s?this.childNodes:this.children),o=new Map,a=new Map;for(const[l,u]of Object.entries(e$1)){const d=u.propertyName||l;a.set(d,l),o.set(d,[...this._state[d]]),this._clearSlot(l,u);}const r=new Map,i=new Map,h=n.map(async(l,u)=>{const d=o$4(l),m=e$1[d];if(m===void 0){if(d!=="default"){const p=Object.keys(e$1).join(", ");console.warn(`Unknown slotName: ${d}, ignoring`,l,`Valid values are: ${p}`);}return}if(m.individualSlots){const p=(r.get(d)||0)+1;r.set(d,p),l._individualSlot=`${d}-${p}`;}if(l instanceof HTMLElement){const p=l.localName;if(p.includes("-")&&!o$3(p)){if(!customElements.get(p)){const L=customElements.whenDefined(p);let E=R.get(p);E||(E=new Promise(U=>setTimeout(U,1e3)),R.set(p,E)),await Promise.race([L,E]);}customElements.upgrade(l);}}if(l=t.getMetadata().constructor.validateSlotValue(l,m),v$1(l)&&m.invalidateOnChildChange){const p=this._getChildChangeListener(d);l.attachInvalidate.call(l,p);}l instanceof HTMLSlotElement&&this._attachSlotChange(l,d,!!m.invalidateOnChildChange);const C=m.propertyName||d;i.has(C)?i.get(C).push({child:l,idx:u}):i.set(C,[{child:l,idx:u}]);});await Promise.all(h),i.forEach((l,u)=>{this._state[u]=l.sort((d,m)=>d.idx-m.idx).map(d=>d.child),this._state[c$4(u)]=this._state[u];});let _=false;for(const[l,u]of Object.entries(e$1)){const d=u.propertyName||l;n$4(o.get(d),this._state[d])||(y.call(this,{type:"slot",name:a.get(d),reason:"children"}),_=true,t.getMetadata().isFormAssociated()&&e(this));}_||y.call(this,{type:"slot",name:"default",reason:"textcontent"});}_clearSlot(t,e){const s=e.propertyName||t;this._state[s].forEach(o=>{if(v$1(o)){const a=this._getChildChangeListener(t);o.detachInvalidate.call(o,a);}o instanceof HTMLSlotElement&&this._detachSlotChange(o,t);}),this._state[s]=[],this._state[c$4(s)]=this._state[s];}attachInvalidate(t){this._invalidationEventProvider.attachEvent("invalidate",t);}detachInvalidate(t){this._invalidationEventProvider.detachEvent("invalidate",t);}_onChildChange(t,e){this.constructor.getMetadata().shouldInvalidateOnChildChange(t,e.type,e.name)&&y.call(this,{type:"slot",name:t,reason:"childchange",child:e.target});}attributeChangedCallback(t,e,s){let n;if(this._doNotSyncAttributes.has(t))return;const o=this.constructor.getMetadata().getProperties(),a=t.replace(/^ui5-/,""),r=c$4(a);if(o.hasOwnProperty(r)){const i=o[r];n=(i.converter??O).fromAttribute(s,i.type),this[r]=n;}}formAssociatedCallback(){this.constructor.getMetadata().isFormAssociated()&&o$2(this);}static get formAssociated(){return this.getMetadata().isFormAssociated()}_updateAttribute(t,e){const s=this.constructor;if(!s.getMetadata().hasAttribute(t))return;const o=s.getMetadata().getProperties()[t],a=l$4(t),i=(o.converter||O).toAttribute(e,o.type);this._doNotSyncAttributes.add(a),i==null?this.removeAttribute(a):this.setAttribute(a,i),this._doNotSyncAttributes.delete(a);}_getChildChangeListener(t){return this._childChangeListeners.has(t)||this._childChangeListeners.set(t,this._onChildChange.bind(this,t)),this._childChangeListeners.get(t)}_getSlotChangeListener(t){return this._slotChangeListeners.has(t)||this._slotChangeListeners.set(t,this._onSlotChange.bind(this,t)),this._slotChangeListeners.get(t)}_attachSlotChange(t,e,s){const n=this._getSlotChangeListener(e);t.addEventListener("slotchange",o=>{if(n.call(t,o),s){const a=this._slotsAssignedNodes.get(t);a&&a.forEach(i=>{if(v$1(i)){const h=this._getChildChangeListener(e);i.detachInvalidate.call(i,h);}});const r=s$6([t]);this._slotsAssignedNodes.set(t,r),r.forEach(i=>{if(v$1(i)){const h=this._getChildChangeListener(e);i.attachInvalidate.call(i,h);}});}});}_detachSlotChange(t,e){t.removeEventListener("slotchange",this._getSlotChangeListener(e));}_onSlotChange(t){y.call(this,{type:"slot",name:t,reason:"slotchange"});}onInvalidation(t){}updateAttributes(){const e=this.constructor.getMetadata().getProperties();for(const[s,n]of Object.entries(e))this._updateAttribute(s,this[s]);}_render(){const t=this.constructor,e=t.getMetadata().hasIndividualSlots();this.initializedProperties.size>0&&(Array.from(this.initializedProperties.entries()).forEach(([s,n])=>{delete this[s],this[s]=n;}),this.initializedProperties.clear()),this._suppressInvalidation=true;try{this.onBeforeRendering(),this._rendered||this.updateAttributes(),this._componentStateFinalizedEventProvider.fireEvent("componentStateFinalized");}finally{this._suppressInvalidation=false;}this._changedState=[],t._needsShadowDOM()&&s$3(this),this._rendered=true,e&&this._assignIndividualSlotsToChildren(),this.onAfterRendering();}_assignIndividualSlotsToChildren(){Array.from(this.children).forEach(e=>{e._individualSlot&&e.setAttribute("slot",e._individualSlot);});}_waitForDomRef(){return this._domRefReadyPromise}getDomRef(){if(typeof this._getRealDomRef=="function")return this._getRealDomRef();if(!(!this.shadowRoot||this.shadowRoot.children.length===0))return this.shadowRoot.children[0]}getFocusDomRef(){const t=this.getDomRef();if(t)return t.querySelector("[data-sap-focus-ref]")||t}async getFocusDomRefAsync(){return await this._waitForDomRef(),this.getFocusDomRef()}async focus(t){await this._waitForDomRef();const e=this.getFocusDomRef();e===this?HTMLElement.prototype.focus.call(this,t):e&&typeof e.focus=="function"&&e.focus(t);}fireEvent(t,e,s=false,n=true){const o=this._fireEvent(t,e,s,n),a=C$1(t);return a!==t?o&&this._fireEvent(a,e,s,n):o}fireDecoratorEvent(t,e){const s=this.getEventData(t),n=s?s.cancelable:false,o=s?s.bubbles:false,a=this._fireEvent(t,e,n,o),r=C$1(t);return r!==t?a&&this._fireEvent(r,e,n,o):a}_fireEvent(t,e,s=false,n=true){const o=new CustomEvent(`ui5-${t}`,{detail:e,composed:false,bubbles:n,cancelable:s}),a=this.dispatchEvent(o);if(a$4(t))return a;const r=new CustomEvent(t,{detail:e,composed:false,bubbles:n,cancelable:s});return this.dispatchEvent(r)&&a}getEventData(t){return this.constructor.getMetadata().getEvents()[t]}getSlottedNodes(t){return s$6(this[t])}attachComponentStateFinalized(t){this._componentStateFinalizedEventProvider.attachEvent("componentStateFinalized",t);}detachComponentStateFinalized(t){this._componentStateFinalizedEventProvider.detachEvent("componentStateFinalized",t);}get effectiveDir(){return Icons.n$1(this.constructor),r$1(this)}get isUI5Element(){return true}get isUI5AbstractElement(){return !this.constructor._needsShadowDOM()}get classes(){return {}}get accessibilityInfo(){return {}}static get observedAttributes(){return this.getMetadata().getAttributesList()}static get tagsToScope(){const t=this.getMetadata().getPureTag(),e=this.getUniqueDependencies().map(s=>s.getMetadata().getPureTag()).filter(Icons.i$2);return Icons.i$2(t)&&e.push(t),e}static _needsShadowDOM(){return !!this.template||Object.prototype.hasOwnProperty.call(this.prototype,"render")}static _generateAccessors(){const t=this.prototype,e$1=this.getMetadata().slotsAreManaged(),s=this.getMetadata().getProperties();for(const[n,o]of Object.entries(s)){r(n)||console.warn(`"${n}" is not a valid property name. Use a name that does not collide with DOM APIs`);const a=it(t,n);let r$1;a?.set&&(r$1=a.set);let i;a?.get&&(i=a.get),Object.defineProperty(t,n,{get(){return i?i.call(this):this._state[n]},set(h){const _=this.constructor,l=i?i.call(this):this._state[n];if(l!==h){if(r$1?r$1.call(this,h):this._state[n]=h,y.call(this,{type:"property",name:n,newValue:h,oldValue:l}),this._rendered){const d=i?i.call(this):this._state[n];this._updateAttribute(n,d);}_.getMetadata().isFormAssociated()&&e(this);}}});}if(e$1){const n=this.getMetadata().getSlots();for(const[o,a]of Object.entries(n)){r(o)||console.warn(`"${o}" is not a valid property name. Use a name that does not collide with DOM APIs`);const r$1=a.propertyName||o,i={get(){return this._state[r$1]!==void 0?this._state[r$1]:[]},set(){throw new Error("Cannot set slot content directly, use the DOM APIs (appendChild, removeChild, etc...)")}};Object.defineProperty(t,r$1,i),r$1!==c$4(r$1)&&Object.defineProperty(t,c$4(r$1),i);}}}static{this.metadata={};}static{this.styles="";}static get dependencies(){return []}static cacheUniqueDependencies(){const t=this.dependencies.filter((e,s,n)=>n.indexOf(e)===s);I.set(this,t);}static getUniqueDependencies(){return I.has(this)||this.cacheUniqueDependencies(),I.get(this)||[]}static async onDefine(){return Promise.resolve()}static fetchI18nBundles(){return Promise.all(Object.entries(this.getMetadata().getI18n()).map(t=>{const{bundleName:e}=t[1];return Icons.f$3(e)}))}static fetchCLDR(){return this.getMetadata().needsCLDR()?u(Icons.s$1().getLanguage(),Icons.s$1().getRegion(),Icons.s$1().getScript()):Promise.resolve()}static{this.i18nBundleStorage={};}static get i18nBundles(){return this.i18nBundleStorage}static define(){const t=async()=>{await Icons.l$1();const o=await Promise.all([this.fetchI18nBundles(),this.fetchCLDR(),this.onDefine()]),[a]=o;Object.entries(this.getMetadata().getI18n()).forEach((r,i)=>{const h=r[1].bundleName;this.i18nBundleStorage[h]=a[i];}),this.asyncFinished=true;};this.definePromise=t();const e=this.getMetadata().getTag(),s=Icons.w(e),n=customElements.get(e);return n&&!s?Icons.$(e):n||(this._generateAccessors(),Icons.h$1(e),customElements.define(e,this)),this}static getMetadata(){if(this.hasOwnProperty("_metadata"))return this._metadata;const t=[this.metadata];let e=this;for(;e!==b;)e=Object.getPrototypeOf(e),t.unshift(e.metadata);const s=Icons.e({},...t);return this._metadata=new p$1(s),this._metadata}get validity(){return this._internals.validity}get validationMessage(){return this._internals.validationMessage}checkValidity(){return this._internals.checkValidity()}reportValidity(){return this._internals.reportValidity()}};const v$1=c=>"isUI5Element"in c;
95
+
96
+ let f$1 = class f{constructor(e,t){if(!e.isUI5Element)throw new Error("The root web component must be a UI5 Element instance");if(this.rootWebComponent=e,this.rootWebComponent.addEventListener("keydown",this._onkeydown.bind(this)),this._initBound=this._init.bind(this),this.rootWebComponent.attachComponentStateFinalized(this._initBound),typeof t.getItemsCallback!="function")throw new Error("getItemsCallback is required");this._getItems=t.getItemsCallback,this._currentIndex=t.currentIndex||0,this._rowSize=t.rowSize||1,this._behavior=t.behavior||l$5.Static,this._navigationMode=t.navigationMode||r$4.Auto,this._affectedPropertiesNames=t.affectedPropertiesNames||[],this._skipItemsSize=t.skipItemsSize||null;}setCurrentItem(e){const t=this._getItems().indexOf(e);if(t===-1){console.warn("The provided item is not managed by ItemNavigation",e);return}this._currentIndex=t,this._applyTabIndex();}setRowSize(e){this._rowSize=e;}_init(){this._getItems().forEach((e,t)=>{e.forcedTabIndex=t===this._currentIndex?"0":"-1";});}_onkeydown(e){if(!this._canNavigate())return;const t=this._navigationMode===r$4.Horizontal||this._navigationMode===r$4.Auto,i=this._navigationMode===r$4.Vertical||this._navigationMode===r$4.Auto,s=this.rootWebComponent.effectiveDir==="rtl";if(s&&K(e)&&t)this._handleRight();else if(s&&c$5(e)&&t)this._handleLeft();else if(K(e)&&t)this._handleLeft();else if(c$5(e)&&t)this._handleRight();else if(D$1(e)&&i)this._handleUp();else if(P(e)&&i)this._handleDown();else if(F(e))this._handleHome();else if(W(e))this._handleEnd();else if(Y(e))this._handlePageUp();else if(Z(e))this._handlePageDown();else return;e.preventDefault(),this._applyTabIndex(),this._focusCurrentItem();}_handleUp(){const e=this._getItems().length;if(this._currentIndex-this._rowSize>=0){this._currentIndex-=this._rowSize;return}if(this._behavior===l$5.Cyclic){const t=this._currentIndex%this._rowSize,i=t===0?this._rowSize-1:t-1,s=Math.ceil(e/this._rowSize);let o=i+(s-1)*this._rowSize;o>e-1&&(o-=this._rowSize),this._currentIndex=o;}else this._currentIndex=0;}_handleDown(){const e=this._getItems().length;if(this._currentIndex+this._rowSize<e){this._currentIndex+=this._rowSize;return}if(this._behavior===l$5.Cyclic){const i=(this._currentIndex%this._rowSize+1)%this._rowSize;this._currentIndex=i;}else this._currentIndex=e-1;}_handleLeft(){const e=this._getItems().length;if(this._currentIndex>0){this._currentIndex-=1;return}this._behavior===l$5.Cyclic&&(this._currentIndex=e-1);}_handleRight(){const e=this._getItems().length;if(this._currentIndex<e-1){this._currentIndex+=1;return}this._behavior===l$5.Cyclic&&(this._currentIndex=0);}_handleHome(){const e=this._rowSize>1?this._rowSize:this._getItems().length;this._currentIndex-=this._currentIndex%e;}_handleEnd(){const e=this._rowSize>1?this._rowSize:this._getItems().length;this._currentIndex+=e-1-this._currentIndex%e;}_handlePageUp(){this._rowSize>1||this._handlePageUpFlat();}_handlePageDown(){this._rowSize>1||this._handlePageDownFlat();}_handlePageUpFlat(){if(this._skipItemsSize===null){this._currentIndex-=this._currentIndex;return}this._currentIndex+1>this._skipItemsSize?this._currentIndex-=this._skipItemsSize:this._currentIndex-=this._currentIndex;}_handlePageDownFlat(){if(this._skipItemsSize===null){this._currentIndex=this._getItems().length-1;return}this._getItems().length-this._currentIndex-1>this._skipItemsSize?this._currentIndex+=this._skipItemsSize:this._currentIndex=this._getItems().length-1;}_applyTabIndex(){const e=this._getItems();for(let t=0;t<e.length;t++)e[t].forcedTabIndex=t===this._currentIndex?"0":"-1";this._affectedPropertiesNames.forEach(t=>{const i=this.rootWebComponent[t];this.rootWebComponent[t]=Array.isArray(i)?[...i]:{...i};});}_focusCurrentItem(){const e=this._getCurrentItem();e&&e.focus();}_canNavigate(){const e=this._getCurrentItem(),t=t$3();return e&&e===t}_getCurrentItem(){const e=this._getItems();if(!e.length)return;for(;this._currentIndex>=e.length;)this._currentIndex-=this._rowSize;this._currentIndex<0&&(this._currentIndex=0);const t=e[this._currentIndex];if(!t)return;if(v$1(t))return t.getFocusDomRef();const i=this.rootWebComponent.getDomRef();if(i&&t.id)return i.querySelector(`[id="${t.id}"]`)}};
97
+
98
+ let n$1;const l$1=new Map,a$2=()=>(n$1||(n$1=new window.ResizeObserver(r=>{window.requestAnimationFrame(()=>{r.forEach(t=>{const s=l$1.get(t.target);s&&Promise.all(s.map(e=>e()));});});})),n$1),c$2=(r,t)=>{const s=l$1.get(r)||[];s.length||a$2().observe(r),l$1.set(r,[...s,t]);},b=(r,t)=>{const s=l$1.get(r)||[];if(s.length===0)return;const e=s.filter(o=>o!==t);e.length===0?(a$2().unobserve(r),l$1.delete(r)):l$1.set(r,e);};class f{static register(t,s){let e=t;v$1(e)&&(e=e.getDomRef()),e instanceof HTMLElement?c$2(e,s):console.warn("Cannot register ResizeHandler for element",t);}static deregister(t,s){let e=t;v$1(e)&&(e=e.getDomRef()),e instanceof HTMLElement?b(e,s):console.warn("Cannot deregister ResizeHandler for element",t);}}
99
+
100
+ const l="scroll",p=Icons.l$3()?"touchend":"mouseup";class v extends Icons.i$1{constructor(t){super();this.supportsTouch=Icons.l$3();this.containerComponent=t,this.mouseMove=this.ontouchmove.bind(this),this.mouseUp=this.ontouchend.bind(this),this.touchStart=this.ontouchstart.bind(this),this.supportsTouch=Icons.l$3(),this.cachedValue={dragX:0,dragY:0},this.startX=0,this.startY=0,this.supportsTouch?(t.addEventListener("touchstart",this.touchStart,{passive:true}),t.addEventListener("touchmove",this.mouseMove,{passive:true}),t.addEventListener("touchend",this.mouseUp,{passive:true})):t.addEventListener("mousedown",this.touchStart,{passive:true});}set scrollContainer(t){this._container=t;}get scrollContainer(){return this._container}async scrollTo(t,e,s=0,o=0){let r=this.scrollContainer.clientHeight>0&&this.scrollContainer.clientWidth>0;for(;!r&&s>0;)await new Promise(n=>{setTimeout(()=>{r=this.scrollContainer.clientHeight>0&&this.scrollContainer.clientWidth>0,s--,n();},o);});this._container.scrollLeft=t,this._container.scrollTop=e;}move(t,e,s){if(s){this._container.scrollLeft+=t,this._container.scrollTop+=e;return}if(this._container)return n$c(this._container,t,e)}getScrollLeft(){return this._container.scrollLeft}getScrollTop(){return this._container.scrollTop}_isTouchInside(t){let e=null;this.supportsTouch&&t instanceof TouchEvent&&(e=t.touches[0]);const s=this._container.getBoundingClientRect(),o=this.supportsTouch?e.clientX:t.x,r=this.supportsTouch?e.clientY:t.y;return o>=s.left&&o<=s.right&&r>=s.top&&r<=s.bottom}ontouchstart(t){let e=null;this.supportsTouch&&t instanceof TouchEvent&&(e=t.touches[0]),e?(this.startX=e.pageX,this.startY=e.pageY):(document.addEventListener("mouseup",this.mouseUp,{passive:true}),document.addEventListener("mousemove",this.mouseMove,{passive:true})),e&&(this._prevDragX=e.pageX,this._prevDragY=e.pageY),t instanceof MouseEvent&&(this._prevDragX=t.x,this._prevDragY=t.y),this._canScroll=this._isTouchInside(t);}ontouchmove(t){if(!this._canScroll)return;const e=this._container,s=this.supportsTouch?t.touches[0]:null,o=this.supportsTouch?s.pageX:t.x,r=this.supportsTouch?s.pageY:t.y;e.scrollLeft+=this._prevDragX-o,e.scrollTop+=this._prevDragY-r,this.fireEvent(l,{isLeft:o>this._prevDragX,isRight:o<this._prevDragX}),this.cachedValue.dragX=this._prevDragX,this.cachedValue.dragY=this._prevDragY,this._prevDragX=o,this._prevDragY=r;}ontouchend(t){if(this.supportsTouch){const h=Math.abs(t.changedTouches[0].pageX-this.startX),c=Math.abs(t.changedTouches[0].pageY-this.startY);if(h<10&&c<10)return}if(!this._canScroll)return;const e=this._container,s=this.supportsTouch?t.changedTouches[0].pageX:t.x,o=this.supportsTouch?t.changedTouches[0].pageY:t.y;e.scrollLeft+=this._prevDragX-s,e.scrollTop+=this._prevDragY-o;const n=s===this._prevDragX?this.cachedValue.dragX:s;this.fireEvent(p,{isLeft:n<this._prevDragX,isRight:n>this._prevDragX}),this._prevDragX=s,this._prevDragY=o,this.supportsTouch||(document.removeEventListener("mousemove",this.mouseMove),document.removeEventListener("mouseup",this.mouseUp));}}
101
+
102
+ const n=new Icons.i$1,t$1="directionChange",a$1=e=>{n.attachEvent(t$1,e);},c$1=e=>{n.detachEvent(t$1,e);},o$1=()=>n.fireEvent(t$1,void 0);
103
+
104
+ const i$1=async()=>{const e=o$1();await Promise.all(e),await Icons.C$1({rtlAware:true});};
105
+
106
+ // TODO-evo:assert on node throws an error if the assertion is violated
107
+
108
+ /**
109
+ * A simple assertion mechanism that logs a message when a given condition is not met.
110
+ *
111
+ * <b>Note:</b> Calls to this method might be removed when the JavaScript code
112
+ * is optimized during build. Therefore, callers should not rely on any side effects
113
+ * of this method.
114
+ *
115
+ * @function
116
+ * @since 1.58
117
+ * @alias module:sap/base/assert
118
+ * @param {boolean} bResult Result of the checked assertion
119
+ * @param {string|function():any} vMessage Message that will be logged when the result is <code>false</code>.
120
+ * In case this is a function, the return value of the function will be displayed. This can be used to execute
121
+ * complex code only if the assertion fails.
122
+ * @public
123
+ * @SecSink {1|SECRET} Could expose secret data in logs
124
+ *
125
+ */ /*!
126
+ * OpenUI5
127
+ * (c) Copyright 2009-2024 SAP SE or an SAP affiliate company.
128
+ * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
129
+ */
130
+
131
+ var fnAssert = function (bResult, vMessage) {
132
+ if (!bResult) {
133
+ var sMessage = vMessage;
134
+ /*eslint-disable no-console */
135
+ console.assert(bResult, sMessage);
136
+ /*eslint-enable no-console */
137
+ }
138
+ };
139
+
140
+ // validation regexes
141
+ /*!
142
+ * OpenUI5
143
+ * (c) Copyright 2009-2024 SAP SE or an SAP affiliate company.
144
+ * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
145
+ */
146
+
147
+ var rBasicUrl = /^(?:([^:\/?#]+):)?((?:[\/\\]{2,}((?:\[[^\]]+\]|[^\/?#:]+))(?::([0-9]+))?)?([^?#]*))(?:\?([^#]*))?(?:#(.*))?$/;
148
+ var rCheckPath = /^([a-z0-9-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*$/i;
149
+ var rCheckQuery = /^([a-z0-9-._~!$&'()*+,;=:@\/?]|%[0-9a-f]{2})*$/i;
150
+ var rCheckFragment = rCheckQuery;
151
+ var rCheckMail = /^([a-z0-9!$'*+:^_`{|}~-]|%[0-9a-f]{2})+(?:\.([a-z0-9!$'*+:^_`{|}~-]|%[0-9a-f]{2})+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;
152
+ var rCheckIPv4 = /^([0-9]{1,3}\.){3}[0-9]{1,3}$/;
153
+ var rCheckValidIPv4 = /^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$/;
154
+ var rCheckIPv6 = /^\[[^\]]+\]$/;
155
+ var rCheckValidIPv6 = /^\[(((([0-9a-f]{1,4}:){6}|(::([0-9a-f]{1,4}:){5})|(([0-9a-f]{1,4})?::([0-9a-f]{1,4}:){4})|((([0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::([0-9a-f]{1,4}:){3})|((([0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::([0-9a-f]{1,4}:){2})|((([0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:)|((([0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::))(([0-9a-f]{1,4}:[0-9a-f]{1,4})|(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])))|((([0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4})|((([0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::))\]$/i;
156
+ var rCheckHostName = /^([a-z0-9]([a-z0-9\-]*[a-z0-9])?\.)*[a-z0-9]([a-z0-9\-]*[a-z0-9])?$/i;
157
+ var rSpecialSchemeURLs = /^((?:ftp|https?|wss?):)([\s\S]+)$/;
158
+
159
+ /* eslint-disable no-control-regex */
160
+ var rCheckWhitespaces = /[\u0009\u000A\u000D]/;
161
+
162
+ /**
163
+ * Registry to manage allowed URLs and validate against them.
164
+ *
165
+ * @namespace
166
+ * @since 1.85
167
+ * @alias module:sap/base/security/URLListValidator
168
+ * @public
169
+ */
170
+ var oURLListValidator = {};
171
+
172
+ /**
173
+ * Creates a new URLListValidator.Entry object
174
+ *
175
+ * @param {string} [protocol] The protocol of the URL, can be falsy to allow all protocols for an entry e.g. "", "http", "mailto"
176
+ * @param {string} [host] The host of the URL, can be falsy to allow all hosts. A wildcard asterisk can be set at the beginning, e.g. "examples.com", "*.example.com"
177
+ * @param {string} [port] The port of the URL, can be falsy to allow all ports, e.g. "", "8080"
178
+ * @param {string} [path] the path of the URL, path of the url, can be falsy to allow all paths. A wildcard asterisk can be set at the end, e.g. "/my-example*", "/my-news"
179
+ * @returns {module:sap/base/security/URLListValidator.Entry|object}
180
+ * @private
181
+ */
182
+ oURLListValidator._createEntry = function (protocol, host, port, path) {
183
+ return new URLListValidatorEntry(protocol, host, port, path);
184
+ };
185
+
186
+ /**
187
+ * Entry object of the URLListValidator.
188
+ *
189
+ * @public
190
+ * @typedef {object} module:sap/base/security/URLListValidator.Entry
191
+ * @property {string} [protocol] The protocol of the URL, can be falsy to allow all protocols for an entry e.g. "", "http", "mailto"
192
+ * @property {string} [host] The host of the URL, can be falsy to allow all hosts. A wildcard asterisk can be set at the beginning, e.g. "examples.com", "*.example.com"
193
+ * @property {string} [port] The port of the URL, can be falsy to allow all ports, e.g. "", "8080"
194
+ * @property {string} [path] the path of the URL, path of the url, can be falsy to allow all paths. A wildcard asterisk can be set at the end, e.g. "/my-example*", "/my-news"
195
+ */
196
+ function URLListValidatorEntry(protocol, host, port, path) {
197
+ Object.defineProperties(this, {
198
+ protocol: {
199
+ value: protocol && protocol.toUpperCase(),
200
+ enumerable: true
201
+ },
202
+ host: {
203
+ value: host && host.toUpperCase(),
204
+ enumerable: true
205
+ },
206
+ port: {
207
+ value: port,
208
+ enumerable: true
209
+ },
210
+ path: {
211
+ value: path,
212
+ enumerable: true
213
+ }
214
+ });
215
+ }
216
+
217
+ /**
218
+ * The internally managed allowed entries.
219
+ * @private
220
+ */
221
+ var aAllowedEntries = [];
222
+
223
+ /**
224
+ * Clears the allowed entries for URL validation.
225
+ * This makes all URLs allowed.
226
+ *
227
+ * @public
228
+ */
229
+ oURLListValidator.clear = function () {
230
+ aAllowedEntries = [];
231
+ };
232
+
233
+ /**
234
+ * Adds an allowed entry.
235
+ *
236
+ * Note:
237
+ * Adding the first entry to the list of allowed entries will disallow all URLs but the ones matching the newly added entry.
238
+ *
239
+ * <b>Note</b>:
240
+ * It is strongly recommended to set a path only in combination with an origin (never set a path alone).
241
+ * There's almost no case where checking only the path of a URL would allow to ensure its validity.
242
+ *
243
+ * @param {string} [protocol] The protocol of the URL, can be falsy to allow all protocols for an entry e.g. "", "http", "mailto"
244
+ * @param {string} [host] The host of the URL, can be falsy to allow all hosts. A wildcard asterisk can be set at the beginning, e.g. "examples.com", "*.example.com"
245
+ * @param {string} [port] The port of the URL, can be falsy to allow all ports, e.g. "", "8080"
246
+ * @param {string} [path] the path of the URL, path of the url, can be falsy to allow all paths. A wildcard asterisk can be set at the end, e.g. "/my-example*", "/my-news"
247
+ * @public
248
+ */
249
+ oURLListValidator.add = function (protocol, host, port, path) {
250
+ var oEntry = this._createEntry(protocol, host, port, path);
251
+ aAllowedEntries.push(oEntry);
252
+ };
253
+
254
+ /**
255
+ * Deletes an entry from the allowed entries.
256
+ *
257
+ * Note:
258
+ * Deleting the last entry from the list of allowed entries will allow all URLs.
259
+ *
260
+ * @param {module:sap/base/security/URLListValidator.Entry} oEntry The entry to be deleted
261
+ * @private
262
+ */
263
+ oURLListValidator._delete = function (oEntry) {
264
+ aAllowedEntries.splice(aAllowedEntries.indexOf(oEntry), 1);
265
+ };
266
+
267
+ /**
268
+ * Gets the list of allowed entries.
269
+ *
270
+ * @returns {module:sap/base/security/URLListValidator.Entry[]} The allowed entries
271
+ * @public
272
+ */
273
+ oURLListValidator.entries = function () {
274
+ return aAllowedEntries.slice();
275
+ };
276
+
277
+ /**
278
+ * Validates a URL. Check if it's not a script or other security issue.
279
+ *
280
+ * <b>Note</b>:
281
+ * It is strongly recommended to validate only absolute URLs. There's almost no case
282
+ * where checking only the path of a URL would allow to ensure its validity.
283
+ * For compatibility reasons, this API cannot automatically resolve URLs relative to
284
+ * <code>document.baseURI</code>, but callers should do so. In that case, and when the
285
+ * allow list is not empty, an entry for the origin of <code>document.baseURI</code>
286
+ * must be added to the allow list.
287
+ *
288
+ * <h3>Details</h3>
289
+ * Splits the given URL into components and checks for allowed characters according to RFC 3986:
290
+ *
291
+ * <pre>
292
+ * authority = [ userinfo "@" ] host [ ":" port ]
293
+ * userinfo = *( unreserved / pct-encoded / sub-delims / ":" )
294
+ * host = IP-literal / IPv4address / reg-name
295
+ *
296
+ * IP-literal = "[" ( IPv6address / IPvFuture ) "]"
297
+ * IPvFuture = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )
298
+ * IPv6address = 6( h16 ":" ) ls32
299
+ * / "::" 5( h16 ":" ) ls32
300
+ * / [ h16 ] "::" 4( h16 ":" ) ls32
301
+ * / [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32
302
+ * / [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32
303
+ * / [ *3( h16 ":" ) h16 ] "::" h16 ":" ls32
304
+ * / [ *4( h16 ":" ) h16 ] "::" ls32
305
+ * / [ *5( h16 ":" ) h16 ] "::" h16
306
+ * / [ *6( h16 ":" ) h16 ] "::"
307
+ * ls32 = ( h16 ":" h16 ) / IPv4address
308
+ * ; least-significant 32 bits of address
309
+ * h16 = 1*4HEXDIG
310
+ * ; 16 bits of address represented in hexadecimal
311
+ *
312
+ * IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet
313
+ * dec-octet = DIGIT ; 0-9
314
+ * / %x31-39 DIGIT ; 10-99
315
+ * / "1" 2DIGIT ; 100-199
316
+ * / "2" %x30-34 DIGIT ; 200-249
317
+ * / "25" %x30-35 ; 250-255
318
+ *
319
+ * reg-name = *( unreserved / pct-encoded / sub-delims )
320
+ *
321
+ * pct-encoded = "%" HEXDIG HEXDIG
322
+ * reserved = gen-delims / sub-delims
323
+ * gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
324
+ * sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
325
+ * / "*" / "+" / "," / ";" / "="
326
+ * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
327
+ * pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
328
+ *
329
+ * path = path-abempty ; begins with "/" or is empty
330
+ * / path-absolute ; begins with "/" but not "//"
331
+ * / path-noscheme ; begins with a non-colon segment
332
+ * / path-rootless ; begins with a segment
333
+ * / path-empty ; zero characters
334
+ *
335
+ * path-abempty = *( "/" segment )
336
+ * path-absolute = "/" [ segment-nz *( "/" segment ) ]
337
+ * path-noscheme = segment-nz-nc *( "/" segment )
338
+ * path-rootless = segment-nz *( "/" segment )
339
+ * path-empty = 0<pchar>
340
+ * segment = *pchar
341
+ * segment-nz = 1*pchar
342
+ * segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
343
+ * ; non-zero-length segment without any colon ":"
344
+ *
345
+ * query = *( pchar / "/" / "?" )
346
+ *
347
+ * fragment = *( pchar / "/" / "?" )
348
+ * </pre>
349
+ *
350
+ * For the hostname component, we are checking for valid DNS hostnames according to RFC 952 / RFC 1123:
351
+ *
352
+ * <pre>
353
+ * hname = name *("." name)
354
+ * name = let-or-digit ( *( let-or-digit-or-hyphen ) let-or-digit )
355
+ * </pre>
356
+ *
357
+ *
358
+ * When the URI uses the protocol 'mailto:', the address part is additionally checked
359
+ * against the most commonly used parts of RFC 6068:
360
+ *
361
+ * <pre>
362
+ * mailtoURI = "mailto:" [ to ] [ hfields ]
363
+ * to = addr-spec *("," addr-spec )
364
+ * hfields = "?" hfield *( "&" hfield )
365
+ * hfield = hfname "=" hfvalue
366
+ * hfname = *qchar
367
+ * hfvalue = *qchar
368
+ * addr-spec = local-part "@" domain
369
+ * local-part = dot-atom-text // not accepted: quoted-string
370
+ * domain = dot-atom-text // not accepted: "[" *dtext-no-obs "]"
371
+ * dtext-no-obs = %d33-90 / ; Printable US-ASCII
372
+ * %d94-126 ; characters not including
373
+ * ; "[", "]", or "\"
374
+ * qchar = unreserved / pct-encoded / some-delims
375
+ * some-delims = "!" / "$" / "'" / "(" / ")" / "*"
376
+ * / "+" / "," / ";" / ":" / "@"
377
+ *
378
+ * Note:
379
+ * A number of characters that can appear in &lt;addr-spec> MUST be
380
+ * percent-encoded. These are the characters that cannot appear in
381
+ * a URI according to [STD66] as well as "%" (because it is used for
382
+ * percent-encoding) and all the characters in gen-delims except "@"
383
+ * and ":" (i.e., "/", "?", "#", "[", and "]"). Of the characters
384
+ * in sub-delims, at least the following also have to be percent-
385
+ * encoded: "&", ";", and "=". Care has to be taken both when
386
+ * encoding as well as when decoding to make sure these operations
387
+ * are applied only once.
388
+ *
389
+ * </pre>
390
+ *
391
+ * When a list of allowed entries has been configured using {@link #add},
392
+ * any URL that passes the syntactic checks above, additionally will be tested against
393
+ * the content of this list.
394
+ *
395
+ * @param {string} sUrl URL to be validated
396
+ * @return {boolean} true if valid, false if not valid
397
+ * @public
398
+ */
399
+ oURLListValidator.validate = function (sUrl) {
400
+ // Test for not allowed whitespaces
401
+ if (typeof sUrl === "string") {
402
+ if (rCheckWhitespaces.test(sUrl)) {
403
+ return false;
404
+ }
405
+ }
406
+
407
+ // for 'special' URLs without a given base URL, the whatwg spec allows any number of slashes.
408
+ // As the rBasicUrl regular expression cannot handle 'special' URLs, the URL is modified upfront,
409
+ // if it wouldn't be recognized by the regex.
410
+ // See https://url.spec.whatwg.org/#scheme-state (case 2.6.)
411
+ var result = rSpecialSchemeURLs.exec(sUrl);
412
+ if (result && !/^[\/\\]{2}/.test(result[2])) {
413
+ sUrl = result[1] + "//" + result[2];
414
+ }
415
+ result = rBasicUrl.exec(sUrl);
416
+ if (!result) {
417
+ return false;
418
+ }
419
+ var sProtocol = result[1],
420
+ sBody = result[2],
421
+ sHost = result[3],
422
+ sPort = result[4],
423
+ sPath = result[5],
424
+ sQuery = result[6],
425
+ sHash = result[7];
426
+
427
+ // protocol
428
+ if (sProtocol) {
429
+ sProtocol = sProtocol.toUpperCase();
430
+ if (aAllowedEntries.length <= 0) {
431
+ // no allowed entries -> check for default protocols
432
+ if (!/^(https?|ftp)/i.test(sProtocol)) {
433
+ return false;
434
+ }
435
+ }
436
+ }
437
+
438
+ // Host -> validity check for IP address or hostname
439
+ if (sHost) {
440
+ if (rCheckIPv4.test(sHost)) {
441
+ if (!rCheckValidIPv4.test(sHost)) {
442
+ //invalid ipv4 address
443
+ return false;
444
+ }
445
+ } else if (rCheckIPv6.test(sHost)) {
446
+ if (!rCheckValidIPv6.test(sHost)) {
447
+ //invalid ipv6 address
448
+ return false;
449
+ }
450
+ } else if (!rCheckHostName.test(sHost)) {
451
+ // invalid host name
452
+ return false;
453
+ }
454
+ sHost = sHost.toUpperCase();
455
+ }
456
+
457
+ // Path -> split for "/" and check if forbidden characters exist
458
+ if (sPath) {
459
+ if (sProtocol === "MAILTO") {
460
+ var aAddresses = sBody.split(",");
461
+ for (var i = 0; i < aAddresses.length; i++) {
462
+ if (!rCheckMail.test(aAddresses[i])) {
463
+ // forbidden character found
464
+ return false;
465
+ }
466
+ }
467
+ } else {
468
+ var aComponents = sPath.split("/");
469
+ for (var i = 0; i < aComponents.length; i++) {
470
+ if (!rCheckPath.test(aComponents[i])) {
471
+ // forbidden character found
472
+ return false;
473
+ }
474
+ }
475
+ }
476
+ }
477
+
478
+ // query
479
+ if (sQuery) {
480
+ if (!rCheckQuery.test(sQuery)) {
481
+ // forbidden character found
482
+ return false;
483
+ }
484
+ }
485
+
486
+ // hash
487
+ if (sHash) {
488
+ if (!rCheckFragment.test(sHash)) {
489
+ // forbidden character found
490
+ return false;
491
+ }
492
+ }
493
+
494
+ //filter allowed entries
495
+ if (aAllowedEntries.length > 0) {
496
+ var bFound = false;
497
+ for (var i = 0; i < aAllowedEntries.length; i++) {
498
+ if (!sProtocol || !aAllowedEntries[i].protocol || sProtocol == aAllowedEntries[i].protocol) {
499
+ // protocol OK
500
+ var bOk = false;
501
+ if (sHost && aAllowedEntries[i].host && /^\*/.test(aAllowedEntries[i].host)) {
502
+ // check for wildcard search at begin
503
+ if (!aAllowedEntries[i]._hostRegexp) {
504
+ var sHostEscaped = aAllowedEntries[i].host.slice(1).replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
505
+ aAllowedEntries[i]._hostRegexp = RegExp(sHostEscaped + "$");
506
+ }
507
+ var rFilter = aAllowedEntries[i]._hostRegexp;
508
+ if (rFilter.test(sHost)) {
509
+ bOk = true;
510
+ }
511
+ } else if (!sHost || !aAllowedEntries[i].host || sHost == aAllowedEntries[i].host) {
512
+ bOk = true;
513
+ }
514
+ if (bOk) {
515
+ // host OK
516
+ if (!sHost && !sPort || !aAllowedEntries[i].port || sPort == aAllowedEntries[i].port) {
517
+ // port OK
518
+ if (aAllowedEntries[i].path && /\*$/.test(aAllowedEntries[i].path)) {
519
+ // check for wildcard search at end
520
+ if (!aAllowedEntries[i]._pathRegexp) {
521
+ var sPathEscaped = aAllowedEntries[i].path.slice(0, -1).replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
522
+ aAllowedEntries[i]._pathRegexp = RegExp("^" + sPathEscaped);
523
+ }
524
+ var rFilter = aAllowedEntries[i]._pathRegexp;
525
+ if (rFilter.test(sPath)) {
526
+ bFound = true;
527
+ }
528
+ } else if (!aAllowedEntries[i].path || sPath == aAllowedEntries[i].path) {
529
+ // path OK
530
+ bFound = true;
531
+ }
532
+ }
533
+ }
534
+ }
535
+ if (bFound) {
536
+ break;
537
+ }
538
+ }
539
+ if (!bFound) {
540
+ return false;
541
+ }
542
+ }
543
+ return true;
544
+ };
545
+
546
+ var cajaHtmlSanitizer = {};
547
+
548
+ var hasRequiredCajaHtmlSanitizer;
549
+
550
+ function requireCajaHtmlSanitizer () {
551
+ if (hasRequiredCajaHtmlSanitizer) return cajaHtmlSanitizer;
552
+ hasRequiredCajaHtmlSanitizer = 1;
553
+ (function() {
554
+ /* Copyright Google Inc.
555
+ * Licensed under the Apache Licence Version 2.0
556
+ * Autogenerated at Tue May 22 10:18:21 PDT 2012
557
+ * \@overrides window
558
+ * \@provides cssSchema, CSS_PROP_BIT_QUANTITY, CSS_PROP_BIT_HASH_VALUE, CSS_PROP_BIT_NEGATIVE_QUANTITY, CSS_PROP_BIT_QSTRING_CONTENT, CSS_PROP_BIT_QSTRING_URL, CSS_PROP_BIT_HISTORY_INSENSITIVE, CSS_PROP_BIT_Z_INDEX, CSS_PROP_BIT_ALLOWED_IN_LINK */
559
+ /**
560
+ * @const
561
+ * @type {number}
562
+ */
563
+ var CSS_PROP_BIT_QUANTITY = 1;
564
+ /**
565
+ * @const
566
+ * @type {number}
567
+ */
568
+ var CSS_PROP_BIT_HASH_VALUE = 2;
569
+ /**
570
+ * @const
571
+ * @type {number}
572
+ */
573
+ var CSS_PROP_BIT_NEGATIVE_QUANTITY = 4;
574
+ /**
575
+ * @const
576
+ * @type {number}
577
+ */
578
+ var CSS_PROP_BIT_QSTRING_CONTENT = 8;
579
+ /**
580
+ * @const
581
+ * @type {number}
582
+ */
583
+ var CSS_PROP_BIT_QSTRING_URL = 16;
584
+ /**
585
+ * @const
586
+ * @type {number}
587
+ */
588
+ var CSS_PROP_BIT_Z_INDEX = 64;
589
+ /**
590
+ * @const
591
+ * @type {number}
592
+ */
593
+ var CSS_PROP_BIT_ALLOWED_IN_LINK = 128;
594
+ var cssSchema = (function () {
595
+ var s = [
596
+ 'rgb(?:\\(\\s*(?:\\d+|0|\\d+(?:\\.\\d+)?%)\\s*,\\s*(?:\\d+|0|\\d+(?:\\.\\d+)?%)\\s*,\\s*(?:\\d+|0|\\d+(?:\\.\\d+)?%)|a\\(\\s*(?:\\d+|0|\\d+(?:\\.\\d+)?%)\\s*,\\s*(?:\\d+|0|\\d+(?:\\.\\d+)?%)\\s*,\\s*(?:\\d+|0|\\d+(?:\\.\\d+)?%)\\s*,\\s*(?:\\d+|0(?:\\.\\d+)?|\\.\\d+|1(?:\\.0+)?|0|\\d+(?:\\.\\d+)?%)) *\\)'
597
+ ], c = [ /^ *$/i, RegExp('^ *(?:\\s*' + s[ 0 ] + '|(?:\\s*' + s[ 0 ] +
598
+ ')?)+ *$', 'i'), RegExp('^ *\\s*' + s[ 0 ] + ' *$', 'i'),
599
+ RegExp('^ *\\s*' + s[ 0 ] + '\\s*' + s[ 0 ] + ' *$', 'i') ], L = [ [
600
+ 'aliceblue', 'antiquewhite', 'aqua', 'aquamarine', 'azure', 'beige',
601
+ 'bisque', 'black', 'blanchedalmond', 'blue', 'blueviolet', 'brown',
602
+ 'burlywood', 'cadetblue', 'chartreuse', 'chocolate', 'coral',
603
+ 'cornflowerblue', 'cornsilk', 'crimson', 'cyan', 'darkblue',
604
+ 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkkhaki',
605
+ 'darkmagenta', 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred',
606
+ 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray',
607
+ 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray',
608
+ 'dodgerblue', 'firebrick', 'floralwhite', 'forestgreen', 'fuchsia',
609
+ 'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 'gray', 'green',
610
+ 'greenyellow', 'honeydew', 'hotpink', 'indianred', 'indigo', 'ivory',
611
+ 'khaki', 'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon',
612
+ 'lightblue', 'lightcoral', 'lightcyan', 'lightgoldenrodyellow',
613
+ 'lightgreen', 'lightgrey', 'lightpink', 'lightsalmon', 'lightseagreen',
614
+ 'lightskyblue', 'lightslategray', 'lightsteelblue', 'lightyellow',
615
+ 'lime', 'limegreen', 'linen', 'magenta', 'maroon', 'mediumaquamarine',
616
+ 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen',
617
+ 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise',
618
+ 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose',
619
+ 'moccasin', 'navajowhite', 'navy', 'oldlace', 'olive', 'olivedrab',
620
+ 'orange', 'orangered', 'orchid', 'palegoldenrod', 'palegreen',
621
+ 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru',
622
+ 'pink', 'plum', 'powderblue', 'purple', 'red', 'rosybrown',
623
+ 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen',
624
+ 'seashell', 'sienna', 'silver', 'skyblue', 'slateblue', 'slategray',
625
+ 'snow', 'springgreen', 'steelblue', 'tan', 'teal', 'thistle', 'tomato',
626
+ 'turquoise', 'violet', 'wheat', 'white', 'whitesmoke', 'yellow',
627
+ 'yellowgreen' ], [ 'all-scroll', 'col-resize', 'crosshair', 'default',
628
+ 'e-resize', 'hand', 'help', 'move', 'n-resize', 'ne-resize', 'no-drop',
629
+ 'not-allowed', 'nw-resize', 'pointer', 'progress', 'row-resize',
630
+ 's-resize', 'se-resize', 'sw-resize', 'text', 'vertical-text',
631
+ 'w-resize', 'wait' ], [ '-moz-inline-box', '-moz-inline-stack',
632
+ 'block', 'inline', 'inline-block', 'inline-table', 'list-item',
633
+ 'run-in', 'table', 'table-caption', 'table-cell', 'table-column',
634
+ 'table-column-group', 'table-footer-group', 'table-header-group',
635
+ 'table-row', 'table-row-group' ], [ 'armenian', 'circle', 'decimal',
636
+ 'decimal-leading-zero', 'disc', 'georgian', 'lower-alpha',
637
+ 'lower-greek', 'lower-latin', 'lower-roman', 'square', 'upper-alpha',
638
+ 'upper-latin', 'upper-roman' ], [ '100', '200', '300', '400', '500',
639
+ '600', '700', '800', '900', 'bold', 'bolder', 'lighter' ], [
640
+ 'condensed', 'expanded', 'extra-condensed', 'extra-expanded',
641
+ 'narrower', 'semi-condensed', 'semi-expanded', 'ultra-condensed',
642
+ 'ultra-expanded', 'wider' ], [ 'behind', 'center-left', 'center-right',
643
+ 'far-left', 'far-right', 'left-side', 'leftwards', 'right-side',
644
+ 'rightwards' ], [ 'large', 'larger', 'small', 'smaller', 'x-large',
645
+ 'x-small', 'xx-large', 'xx-small' ], [ '-moz-pre-wrap', '-o-pre-wrap',
646
+ '-pre-wrap', 'nowrap', 'pre', 'pre-line', 'pre-wrap' ], [ 'dashed',
647
+ 'dotted', 'double', 'groove', 'outset', 'ridge', 'solid' ], [
648
+ 'baseline', 'middle', 'sub', 'super', 'text-bottom', 'text-top' ], [
649
+ 'caption', 'icon', 'menu', 'message-box', 'small-caption', 'status-bar'
650
+ ], [ 'fast', 'faster', 'slow', 'slower', 'x-fast', 'x-slow' ], [ 'above',
651
+ 'below', 'higher', 'level', 'lower' ], [ 'border-box', 'contain',
652
+ 'content-box', 'cover', 'padding-box' ], [ 'cursive', 'fantasy',
653
+ 'monospace', 'sans-serif', 'serif' ], [ 'loud', 'silent', 'soft',
654
+ 'x-loud', 'x-soft' ], [ 'no-repeat', 'repeat-x', 'repeat-y', 'round',
655
+ 'space' ], [ 'blink', 'line-through', 'overline', 'underline' ], [
656
+ 'high', 'low', 'x-high', 'x-low' ], [ 'absolute', 'relative', 'static'
657
+ ], [ 'capitalize', 'lowercase', 'uppercase' ], [ 'child', 'female',
658
+ 'male' ], [ 'bidi-override', 'embed' ], [ 'bottom', 'top' ], [ 'clip',
659
+ 'ellipsis' ], [ 'continuous', 'digits' ], [ 'hide', 'show' ], [
660
+ 'inside', 'outside' ], [ 'italic', 'oblique' ], [ 'left', 'right' ], [
661
+ 'ltr', 'rtl' ], [ 'no-content', 'no-display' ], [ 'suppress',
662
+ 'unrestricted' ], [ 'thick', 'thin' ], [ ',' ], [ '/' ], [ 'always' ],
663
+ [ 'auto' ], [ 'avoid' ], [ 'both' ], [ 'break-word' ], [ 'center' ], [
664
+ 'code' ], [ 'collapse' ], [ 'fixed' ], [ 'hidden' ], [ 'inherit' ], [
665
+ 'inset' ], [ 'invert' ], [ 'justify' ], [ 'local' ], [ 'medium' ], [
666
+ 'mix' ], [ 'none' ], [ 'normal' ], [ 'once' ], [ 'repeat' ], [ 'scroll'
667
+ ], [ 'separate' ], [ 'small-caps' ], [ 'spell-out' ], [ 'transparent' ],
668
+ [ 'visible' ] ];
669
+ return {
670
+ '-moz-border-radius': {
671
+ 'cssExtra': c[ 0 ],
672
+ 'cssPropBits': 5,
673
+ 'cssLitGroup': [ L[ 36 ] ]
674
+ },
675
+ '-moz-border-radius-bottomleft': {
676
+ 'cssExtra': c[ 0 ],
677
+ 'cssPropBits': 5
678
+ },
679
+ '-moz-border-radius-bottomright': {
680
+ 'cssExtra': c[ 0 ],
681
+ 'cssPropBits': 5
682
+ },
683
+ '-moz-border-radius-topleft': {
684
+ 'cssExtra': c[ 0 ],
685
+ 'cssPropBits': 5
686
+ },
687
+ '-moz-border-radius-topright': {
688
+ 'cssExtra': c[ 0 ],
689
+ 'cssPropBits': 5
690
+ },
691
+ '-moz-box-shadow': {
692
+ 'cssExtra': c[ 1 ],
693
+ 'cssAlternates': [ 'boxShadow' ],
694
+ 'cssPropBits': 7,
695
+ 'cssLitGroup': [ L[ 0 ], L[ 35 ], L[ 48 ], L[ 54 ] ]
696
+ },
697
+ '-moz-opacity': {
698
+ 'cssPropBits': 1,
699
+ 'cssLitGroup': [ L[ 47 ] ]
700
+ },
701
+ '-moz-outline': {
702
+ 'cssExtra': c[ 3 ],
703
+ 'cssPropBits': 7,
704
+ 'cssLitGroup': [ L[ 0 ], L[ 9 ], L[ 34 ], L[ 46 ], L[ 47 ], L[ 48 ], L[
705
+ 49 ], L[ 52 ], L[ 54 ] ]
706
+ },
707
+ '-moz-outline-color': {
708
+ 'cssExtra': c[ 2 ],
709
+ 'cssPropBits': 2,
710
+ 'cssLitGroup': [ L[ 0 ], L[ 47 ], L[ 49 ] ]
711
+ },
712
+ '-moz-outline-style': {
713
+ 'cssPropBits': 0,
714
+ 'cssLitGroup': [ L[ 9 ], L[ 46 ], L[ 47 ], L[ 48 ], L[ 54 ] ]
715
+ },
716
+ '-moz-outline-width': {
717
+ 'cssPropBits': 5,
718
+ 'cssLitGroup': [ L[ 34 ], L[ 47 ], L[ 52 ] ]
719
+ },
720
+ '-o-text-overflow': {
721
+ 'cssPropBits': 0,
722
+ 'cssLitGroup': [ L[ 25 ] ]
723
+ },
724
+ '-webkit-border-bottom-left-radius': {
725
+ 'cssExtra': c[ 0 ],
726
+ 'cssPropBits': 5
727
+ },
728
+ '-webkit-border-bottom-right-radius': {
729
+ 'cssExtra': c[ 0 ],
730
+ 'cssPropBits': 5
731
+ },
732
+ '-webkit-border-radius': {
733
+ 'cssExtra': c[ 0 ],
734
+ 'cssPropBits': 5,
735
+ 'cssLitGroup': [ L[ 36 ] ]
736
+ },
737
+ '-webkit-border-radius-bottom-left': {
738
+ 'cssExtra': c[ 0 ],
739
+ 'cssPropBits': 5
740
+ },
741
+ '-webkit-border-radius-bottom-right': {
742
+ 'cssExtra': c[ 0 ],
743
+ 'cssPropBits': 5
744
+ },
745
+ '-webkit-border-radius-top-left': {
746
+ 'cssExtra': c[ 0 ],
747
+ 'cssPropBits': 5
748
+ },
749
+ '-webkit-border-radius-top-right': {
750
+ 'cssExtra': c[ 0 ],
751
+ 'cssPropBits': 5
752
+ },
753
+ '-webkit-border-top-left-radius': {
754
+ 'cssExtra': c[ 0 ],
755
+ 'cssPropBits': 5
756
+ },
757
+ '-webkit-border-top-right-radius': {
758
+ 'cssExtra': c[ 0 ],
759
+ 'cssPropBits': 5
760
+ },
761
+ '-webkit-box-shadow': {
762
+ 'cssExtra': c[ 1 ],
763
+ 'cssAlternates': [ 'boxShadow' ],
764
+ 'cssPropBits': 7,
765
+ 'cssLitGroup': [ L[ 0 ], L[ 35 ], L[ 48 ], L[ 54 ] ]
766
+ },
767
+ 'azimuth': {
768
+ 'cssPropBits': 5,
769
+ 'cssLitGroup': [ L[ 6 ], L[ 30 ], L[ 42 ], L[ 47 ] ]
770
+ },
771
+ 'background': {
772
+ 'cssExtra': RegExp('^ *(?:\\s*' + s[ 0 ] + '){0,2} *$', 'i'),
773
+ 'cssPropBits': 23,
774
+ 'cssLitGroup': [ L[ 0 ], L[ 14 ], L[ 17 ], L[ 24 ], L[ 30 ], L[ 35 ],
775
+ L[ 36 ], L[ 38 ], L[ 42 ], L[ 45 ], L[ 47 ], L[ 51 ], L[ 54 ], L[ 57
776
+ ], L[ 58 ], L[ 62 ] ]
777
+ },
778
+ 'background-attachment': {
779
+ 'cssExtra': c[ 0 ],
780
+ 'cssPropBits': 0,
781
+ 'cssLitGroup': [ L[ 35 ], L[ 45 ], L[ 51 ], L[ 58 ] ]
782
+ },
783
+ 'background-color': {
784
+ 'cssExtra': c[ 2 ],
785
+ 'cssPropBits': 130,
786
+ 'cssLitGroup': [ L[ 0 ], L[ 47 ], L[ 62 ] ]
787
+ },
788
+ 'background-image': {
789
+ 'cssExtra': c[ 0 ],
790
+ 'cssPropBits': 16,
791
+ 'cssLitGroup': [ L[ 35 ], L[ 54 ] ]
792
+ },
793
+ 'background-position': {
794
+ 'cssExtra': c[ 0 ],
795
+ 'cssPropBits': 5,
796
+ 'cssLitGroup': [ L[ 24 ], L[ 30 ], L[ 35 ], L[ 42 ] ]
797
+ },
798
+ 'background-repeat': {
799
+ 'cssExtra': c[ 0 ],
800
+ 'cssPropBits': 0,
801
+ 'cssLitGroup': [ L[ 17 ], L[ 35 ], L[ 57 ] ]
802
+ },
803
+ 'border': {
804
+ 'cssExtra': c[ 3 ],
805
+ 'cssPropBits': 7,
806
+ 'cssLitGroup': [ L[ 0 ], L[ 9 ], L[ 34 ], L[ 46 ], L[ 47 ], L[ 48 ], L[
807
+ 52 ], L[ 54 ], L[ 62 ] ]
808
+ },
809
+ 'border-bottom': {
810
+ 'cssExtra': c[ 3 ],
811
+ 'cssPropBits': 7,
812
+ 'cssLitGroup': [ L[ 0 ], L[ 9 ], L[ 34 ], L[ 46 ], L[ 47 ], L[ 48 ], L[
813
+ 52 ], L[ 54 ], L[ 62 ] ]
814
+ },
815
+ 'border-bottom-color': {
816
+ 'cssExtra': c[ 2 ],
817
+ 'cssPropBits': 2,
818
+ 'cssLitGroup': [ L[ 0 ], L[ 47 ], L[ 62 ] ]
819
+ },
820
+ 'border-bottom-left-radius': {
821
+ 'cssExtra': c[ 0 ],
822
+ 'cssPropBits': 5
823
+ },
824
+ 'border-bottom-right-radius': {
825
+ 'cssExtra': c[ 0 ],
826
+ 'cssPropBits': 5
827
+ },
828
+ 'border-bottom-style': {
829
+ 'cssPropBits': 0,
830
+ 'cssLitGroup': [ L[ 9 ], L[ 46 ], L[ 47 ], L[ 48 ], L[ 54 ] ]
831
+ },
832
+ 'border-bottom-width': {
833
+ 'cssPropBits': 5,
834
+ 'cssLitGroup': [ L[ 34 ], L[ 47 ], L[ 52 ] ]
835
+ },
836
+ 'border-collapse': {
837
+ 'cssPropBits': 0,
838
+ 'cssLitGroup': [ L[ 44 ], L[ 47 ], L[ 59 ] ]
839
+ },
840
+ 'border-color': {
841
+ 'cssExtra': RegExp('^ *(?:\\s*' + s[ 0 ] + '){1,4} *$', 'i'),
842
+ 'cssPropBits': 2,
843
+ 'cssLitGroup': [ L[ 0 ], L[ 47 ], L[ 62 ] ]
844
+ },
845
+ 'border-left': {
846
+ 'cssExtra': c[ 3 ],
847
+ 'cssPropBits': 7,
848
+ 'cssLitGroup': [ L[ 0 ], L[ 9 ], L[ 34 ], L[ 46 ], L[ 47 ], L[ 48 ], L[
849
+ 52 ], L[ 54 ], L[ 62 ] ]
850
+ },
851
+ 'border-left-color': {
852
+ 'cssExtra': c[ 2 ],
853
+ 'cssPropBits': 2,
854
+ 'cssLitGroup': [ L[ 0 ], L[ 47 ], L[ 62 ] ]
855
+ },
856
+ 'border-left-style': {
857
+ 'cssPropBits': 0,
858
+ 'cssLitGroup': [ L[ 9 ], L[ 46 ], L[ 47 ], L[ 48 ], L[ 54 ] ]
859
+ },
860
+ 'border-left-width': {
861
+ 'cssPropBits': 5,
862
+ 'cssLitGroup': [ L[ 34 ], L[ 47 ], L[ 52 ] ]
863
+ },
864
+ 'border-radius': {
865
+ 'cssExtra': c[ 0 ],
866
+ 'cssPropBits': 5,
867
+ 'cssLitGroup': [ L[ 36 ] ]
868
+ },
869
+ 'border-right': {
870
+ 'cssExtra': c[ 3 ],
871
+ 'cssPropBits': 7,
872
+ 'cssLitGroup': [ L[ 0 ], L[ 9 ], L[ 34 ], L[ 46 ], L[ 47 ], L[ 48 ], L[
873
+ 52 ], L[ 54 ], L[ 62 ] ]
874
+ },
875
+ 'border-right-color': {
876
+ 'cssExtra': c[ 2 ],
877
+ 'cssPropBits': 2,
878
+ 'cssLitGroup': [ L[ 0 ], L[ 47 ], L[ 62 ] ]
879
+ },
880
+ 'border-right-style': {
881
+ 'cssPropBits': 0,
882
+ 'cssLitGroup': [ L[ 9 ], L[ 46 ], L[ 47 ], L[ 48 ], L[ 54 ] ]
883
+ },
884
+ 'border-right-width': {
885
+ 'cssPropBits': 5,
886
+ 'cssLitGroup': [ L[ 34 ], L[ 47 ], L[ 52 ] ]
887
+ },
888
+ 'border-spacing': {
889
+ 'cssExtra': c[ 0 ],
890
+ 'cssPropBits': 5,
891
+ 'cssLitGroup': [ L[ 47 ] ]
892
+ },
893
+ 'border-style': {
894
+ 'cssPropBits': 0,
895
+ 'cssLitGroup': [ L[ 9 ], L[ 46 ], L[ 47 ], L[ 48 ], L[ 54 ] ]
896
+ },
897
+ 'border-top': {
898
+ 'cssExtra': c[ 3 ],
899
+ 'cssPropBits': 7,
900
+ 'cssLitGroup': [ L[ 0 ], L[ 9 ], L[ 34 ], L[ 46 ], L[ 47 ], L[ 48 ], L[
901
+ 52 ], L[ 54 ], L[ 62 ] ]
902
+ },
903
+ 'border-top-color': {
904
+ 'cssExtra': c[ 2 ],
905
+ 'cssPropBits': 2,
906
+ 'cssLitGroup': [ L[ 0 ], L[ 47 ], L[ 62 ] ]
907
+ },
908
+ 'border-top-left-radius': {
909
+ 'cssExtra': c[ 0 ],
910
+ 'cssPropBits': 5
911
+ },
912
+ 'border-top-right-radius': {
913
+ 'cssExtra': c[ 0 ],
914
+ 'cssPropBits': 5
915
+ },
916
+ 'border-top-style': {
917
+ 'cssPropBits': 0,
918
+ 'cssLitGroup': [ L[ 9 ], L[ 46 ], L[ 47 ], L[ 48 ], L[ 54 ] ]
919
+ },
920
+ 'border-top-width': {
921
+ 'cssPropBits': 5,
922
+ 'cssLitGroup': [ L[ 34 ], L[ 47 ], L[ 52 ] ]
923
+ },
924
+ 'border-width': {
925
+ 'cssPropBits': 5,
926
+ 'cssLitGroup': [ L[ 34 ], L[ 47 ], L[ 52 ] ]
927
+ },
928
+ 'bottom': {
929
+ 'cssPropBits': 5,
930
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
931
+ },
932
+ 'box-shadow': {
933
+ 'cssExtra': c[ 1 ],
934
+ 'cssPropBits': 7,
935
+ 'cssLitGroup': [ L[ 0 ], L[ 35 ], L[ 48 ], L[ 54 ] ]
936
+ },
937
+ 'caption-side': {
938
+ 'cssPropBits': 0,
939
+ 'cssLitGroup': [ L[ 24 ], L[ 47 ] ]
940
+ },
941
+ 'clear': {
942
+ 'cssPropBits': 0,
943
+ 'cssLitGroup': [ L[ 30 ], L[ 40 ], L[ 47 ], L[ 54 ] ]
944
+ },
945
+ 'clip': {
946
+ 'cssExtra':
947
+ /^ *\s*rect\(\s*(?:0|[+\-]?\d+(?:\.\d+)?(?:[cem]m|ex|in|p[ctx])|auto)\s*,\s*(?:0|[+\-]?\d+(?:\.\d+)?(?:[cem]m|ex|in|p[ctx])|auto)\s*,\s*(?:0|[+\-]?\d+(?:\.\d+)?(?:[cem]m|ex|in|p[ctx])|auto)\s*,\s*(?:0|[+\-]?\d+(?:\.\d+)?(?:[cem]m|ex|in|p[ctx])|auto) *\) *$/i,
948
+ 'cssPropBits': 0,
949
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
950
+ },
951
+ 'color': {
952
+ 'cssExtra': c[ 2 ],
953
+ 'cssPropBits': 130,
954
+ 'cssLitGroup': [ L[ 0 ], L[ 47 ] ]
955
+ },
956
+ 'content': { 'cssPropBits': 0 },
957
+ 'counter-increment': {
958
+ 'cssExtra': c[ 0 ],
959
+ 'cssPropBits': 5,
960
+ 'cssLitGroup': [ L[ 47 ], L[ 54 ] ]
961
+ },
962
+ 'counter-reset': {
963
+ 'cssExtra': c[ 0 ],
964
+ 'cssPropBits': 5,
965
+ 'cssLitGroup': [ L[ 47 ], L[ 54 ] ]
966
+ },
967
+ 'cue': {
968
+ 'cssPropBits': 16,
969
+ 'cssLitGroup': [ L[ 47 ], L[ 54 ] ]
970
+ },
971
+ 'cue-after': {
972
+ 'cssPropBits': 16,
973
+ 'cssLitGroup': [ L[ 47 ], L[ 54 ] ]
974
+ },
975
+ 'cue-before': {
976
+ 'cssPropBits': 16,
977
+ 'cssLitGroup': [ L[ 47 ], L[ 54 ] ]
978
+ },
979
+ 'cursor': {
980
+ 'cssExtra': c[ 0 ],
981
+ 'cssPropBits': 144,
982
+ 'cssLitGroup': [ L[ 1 ], L[ 35 ], L[ 38 ], L[ 47 ] ]
983
+ },
984
+ 'direction': {
985
+ 'cssPropBits': 0,
986
+ 'cssLitGroup': [ L[ 31 ], L[ 47 ] ]
987
+ },
988
+ 'display': {
989
+ 'cssPropBits': 32,
990
+ 'cssLitGroup': [ L[ 2 ], L[ 47 ], L[ 54 ] ]
991
+ },
992
+ 'elevation': {
993
+ 'cssPropBits': 5,
994
+ 'cssLitGroup': [ L[ 13 ], L[ 47 ] ]
995
+ },
996
+ 'empty-cells': {
997
+ 'cssPropBits': 0,
998
+ 'cssLitGroup': [ L[ 27 ], L[ 47 ] ]
999
+ },
1000
+ 'filter': {
1001
+ 'cssExtra':
1002
+ /^ *(?:\s*alpha\(\s*opacity\s*=\s*(?:0|\d+(?:\.\d+)?%|[+\-]?\d+(?:\.\d+)?) *\))+ *$/i,
1003
+ 'cssPropBits': 32
1004
+ },
1005
+ 'float': {
1006
+ 'cssAlternates': [ 'cssFloat', 'styleFloat' ],
1007
+ 'cssPropBits': 32,
1008
+ 'cssLitGroup': [ L[ 30 ], L[ 47 ], L[ 54 ] ]
1009
+ },
1010
+ 'font': {
1011
+ 'cssExtra': c[ 0 ],
1012
+ 'cssPropBits': 9,
1013
+ 'cssLitGroup': [ L[ 4 ], L[ 7 ], L[ 11 ], L[ 15 ], L[ 29 ], L[ 35 ], L[
1014
+ 36 ], L[ 47 ], L[ 52 ], L[ 55 ], L[ 60 ] ]
1015
+ },
1016
+ 'font-family': {
1017
+ 'cssExtra': c[ 0 ],
1018
+ 'cssPropBits': 8,
1019
+ 'cssLitGroup': [ L[ 15 ], L[ 35 ], L[ 47 ] ]
1020
+ },
1021
+ 'font-size': {
1022
+ 'cssPropBits': 1,
1023
+ 'cssLitGroup': [ L[ 7 ], L[ 47 ], L[ 52 ] ]
1024
+ },
1025
+ 'font-stretch': {
1026
+ 'cssPropBits': 0,
1027
+ 'cssLitGroup': [ L[ 5 ], L[ 55 ] ]
1028
+ },
1029
+ 'font-style': {
1030
+ 'cssPropBits': 0,
1031
+ 'cssLitGroup': [ L[ 29 ], L[ 47 ], L[ 55 ] ]
1032
+ },
1033
+ 'font-variant': {
1034
+ 'cssPropBits': 0,
1035
+ 'cssLitGroup': [ L[ 47 ], L[ 55 ], L[ 60 ] ]
1036
+ },
1037
+ 'font-weight': {
1038
+ 'cssPropBits': 0,
1039
+ 'cssLitGroup': [ L[ 4 ], L[ 47 ], L[ 55 ] ],
1040
+ // ##### BEGIN: MODIFIED BY SAP
1041
+ 'cssLitNumeric': true
1042
+ // ##### END: MODIFIED BY SAP
1043
+ },
1044
+ 'height': {
1045
+ 'cssPropBits': 37,
1046
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
1047
+ },
1048
+ 'left': {
1049
+ 'cssPropBits': 37,
1050
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
1051
+ },
1052
+ 'letter-spacing': {
1053
+ 'cssPropBits': 5,
1054
+ 'cssLitGroup': [ L[ 47 ], L[ 55 ] ]
1055
+ },
1056
+ 'line-height': {
1057
+ 'cssPropBits': 1,
1058
+ 'cssLitGroup': [ L[ 47 ], L[ 55 ] ]
1059
+ },
1060
+ 'list-style': {
1061
+ 'cssPropBits': 16,
1062
+ 'cssLitGroup': [ L[ 3 ], L[ 28 ], L[ 47 ], L[ 54 ] ]
1063
+ },
1064
+ 'list-style-image': {
1065
+ 'cssPropBits': 16,
1066
+ 'cssLitGroup': [ L[ 47 ], L[ 54 ] ]
1067
+ },
1068
+ 'list-style-position': {
1069
+ 'cssPropBits': 0,
1070
+ 'cssLitGroup': [ L[ 28 ], L[ 47 ] ]
1071
+ },
1072
+ 'list-style-type': {
1073
+ 'cssPropBits': 0,
1074
+ 'cssLitGroup': [ L[ 3 ], L[ 47 ], L[ 54 ] ]
1075
+ },
1076
+ 'margin': {
1077
+ 'cssPropBits': 5,
1078
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
1079
+ },
1080
+ 'margin-bottom': {
1081
+ 'cssPropBits': 5,
1082
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
1083
+ },
1084
+ 'margin-left': {
1085
+ 'cssPropBits': 5,
1086
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
1087
+ },
1088
+ 'margin-right': {
1089
+ 'cssPropBits': 5,
1090
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
1091
+ },
1092
+ 'margin-top': {
1093
+ 'cssPropBits': 5,
1094
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
1095
+ },
1096
+ 'max-height': {
1097
+ 'cssPropBits': 1,
1098
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ], L[ 54 ] ]
1099
+ },
1100
+ 'max-width': {
1101
+ 'cssPropBits': 1,
1102
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ], L[ 54 ] ]
1103
+ },
1104
+ 'min-height': {
1105
+ 'cssPropBits': 1,
1106
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
1107
+ },
1108
+ 'min-width': {
1109
+ 'cssPropBits': 1,
1110
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
1111
+ },
1112
+ 'opacity': {
1113
+ 'cssPropBits': 33,
1114
+ 'cssLitGroup': [ L[ 47 ] ]
1115
+ },
1116
+ 'outline': {
1117
+ 'cssExtra': c[ 3 ],
1118
+ 'cssPropBits': 7,
1119
+ 'cssLitGroup': [ L[ 0 ], L[ 9 ], L[ 34 ], L[ 46 ], L[ 47 ], L[ 48 ], L[
1120
+ 49 ], L[ 52 ], L[ 54 ] ]
1121
+ },
1122
+ 'outline-color': {
1123
+ 'cssExtra': c[ 2 ],
1124
+ 'cssPropBits': 2,
1125
+ 'cssLitGroup': [ L[ 0 ], L[ 47 ], L[ 49 ] ]
1126
+ },
1127
+ 'outline-style': {
1128
+ 'cssPropBits': 0,
1129
+ 'cssLitGroup': [ L[ 9 ], L[ 46 ], L[ 47 ], L[ 48 ], L[ 54 ] ]
1130
+ },
1131
+ 'outline-width': {
1132
+ 'cssPropBits': 5,
1133
+ 'cssLitGroup': [ L[ 34 ], L[ 47 ], L[ 52 ] ]
1134
+ },
1135
+ 'overflow': {
1136
+ 'cssPropBits': 32,
1137
+ 'cssLitGroup': [ L[ 38 ], L[ 46 ], L[ 47 ], L[ 58 ], L[ 63 ] ]
1138
+ },
1139
+ 'overflow-x': {
1140
+ 'cssPropBits': 0,
1141
+ 'cssLitGroup': [ L[ 32 ], L[ 38 ], L[ 46 ], L[ 58 ], L[ 63 ] ]
1142
+ },
1143
+ 'overflow-y': {
1144
+ 'cssPropBits': 0,
1145
+ 'cssLitGroup': [ L[ 32 ], L[ 38 ], L[ 46 ], L[ 58 ], L[ 63 ] ]
1146
+ },
1147
+ 'padding': {
1148
+ 'cssPropBits': 1,
1149
+ 'cssLitGroup': [ L[ 47 ] ]
1150
+ },
1151
+ 'padding-bottom': {
1152
+ 'cssPropBits': 33,
1153
+ 'cssLitGroup': [ L[ 47 ] ]
1154
+ },
1155
+ 'padding-left': {
1156
+ 'cssPropBits': 33,
1157
+ 'cssLitGroup': [ L[ 47 ] ]
1158
+ },
1159
+ 'padding-right': {
1160
+ 'cssPropBits': 33,
1161
+ 'cssLitGroup': [ L[ 47 ] ]
1162
+ },
1163
+ 'padding-top': {
1164
+ 'cssPropBits': 33,
1165
+ 'cssLitGroup': [ L[ 47 ] ]
1166
+ },
1167
+ 'page-break-after': {
1168
+ 'cssPropBits': 0,
1169
+ 'cssLitGroup': [ L[ 30 ], L[ 37 ], L[ 38 ], L[ 39 ], L[ 47 ] ]
1170
+ },
1171
+ 'page-break-before': {
1172
+ 'cssPropBits': 0,
1173
+ 'cssLitGroup': [ L[ 30 ], L[ 37 ], L[ 38 ], L[ 39 ], L[ 47 ] ]
1174
+ },
1175
+ 'page-break-inside': {
1176
+ 'cssPropBits': 0,
1177
+ 'cssLitGroup': [ L[ 38 ], L[ 39 ], L[ 47 ] ]
1178
+ },
1179
+ 'pause': {
1180
+ 'cssPropBits': 5,
1181
+ 'cssLitGroup': [ L[ 47 ] ]
1182
+ },
1183
+ 'pause-after': {
1184
+ 'cssPropBits': 5,
1185
+ 'cssLitGroup': [ L[ 47 ] ]
1186
+ },
1187
+ 'pause-before': {
1188
+ 'cssPropBits': 5,
1189
+ 'cssLitGroup': [ L[ 47 ] ]
1190
+ },
1191
+ 'pitch': {
1192
+ 'cssPropBits': 5,
1193
+ 'cssLitGroup': [ L[ 19 ], L[ 47 ], L[ 52 ] ]
1194
+ },
1195
+ 'pitch-range': {
1196
+ 'cssPropBits': 5,
1197
+ 'cssLitGroup': [ L[ 47 ] ]
1198
+ },
1199
+ 'play-during': {
1200
+ 'cssExtra': c[ 0 ],
1201
+ 'cssPropBits': 16,
1202
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ], L[ 53 ], L[ 54 ], L[ 57 ] ]
1203
+ },
1204
+ 'position': {
1205
+ 'cssPropBits': 32,
1206
+ 'cssLitGroup': [ L[ 20 ], L[ 47 ] ]
1207
+ },
1208
+ 'quotes': {
1209
+ 'cssExtra': c[ 0 ],
1210
+ 'cssPropBits': 0,
1211
+ 'cssLitGroup': [ L[ 47 ], L[ 54 ] ]
1212
+ },
1213
+ 'richness': {
1214
+ 'cssPropBits': 5,
1215
+ 'cssLitGroup': [ L[ 47 ] ]
1216
+ },
1217
+ 'right': {
1218
+ 'cssPropBits': 37,
1219
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
1220
+ },
1221
+ 'speak': {
1222
+ 'cssPropBits': 0,
1223
+ 'cssLitGroup': [ L[ 47 ], L[ 54 ], L[ 55 ], L[ 61 ] ]
1224
+ },
1225
+ 'speak-header': {
1226
+ 'cssPropBits': 0,
1227
+ 'cssLitGroup': [ L[ 37 ], L[ 47 ], L[ 56 ] ]
1228
+ },
1229
+ 'speak-numeral': {
1230
+ 'cssPropBits': 0,
1231
+ 'cssLitGroup': [ L[ 26 ], L[ 47 ] ]
1232
+ },
1233
+ 'speak-punctuation': {
1234
+ 'cssPropBits': 0,
1235
+ 'cssLitGroup': [ L[ 43 ], L[ 47 ], L[ 54 ] ]
1236
+ },
1237
+ 'speech-rate': {
1238
+ 'cssPropBits': 5,
1239
+ 'cssLitGroup': [ L[ 12 ], L[ 47 ], L[ 52 ] ]
1240
+ },
1241
+ 'stress': {
1242
+ 'cssPropBits': 5,
1243
+ 'cssLitGroup': [ L[ 47 ] ]
1244
+ },
1245
+ 'table-layout': {
1246
+ 'cssPropBits': 0,
1247
+ 'cssLitGroup': [ L[ 38 ], L[ 45 ], L[ 47 ] ]
1248
+ },
1249
+ 'text-align': {
1250
+ 'cssPropBits': 0,
1251
+ 'cssLitGroup': [ L[ 30 ], L[ 42 ], L[ 47 ], L[ 50 ] ]
1252
+ },
1253
+ 'text-decoration': {
1254
+ 'cssPropBits': 0,
1255
+ 'cssLitGroup': [ L[ 18 ], L[ 47 ], L[ 54 ] ]
1256
+ },
1257
+ 'text-indent': {
1258
+ 'cssPropBits': 5,
1259
+ 'cssLitGroup': [ L[ 47 ] ]
1260
+ },
1261
+ 'text-overflow': {
1262
+ 'cssPropBits': 0,
1263
+ 'cssLitGroup': [ L[ 25 ] ]
1264
+ },
1265
+ 'text-shadow': {
1266
+ 'cssExtra': c[ 1 ],
1267
+ 'cssPropBits': 7,
1268
+ 'cssLitGroup': [ L[ 0 ], L[ 35 ], L[ 48 ], L[ 54 ] ]
1269
+ },
1270
+ 'text-transform': {
1271
+ 'cssPropBits': 0,
1272
+ 'cssLitGroup': [ L[ 21 ], L[ 47 ], L[ 54 ] ]
1273
+ },
1274
+ 'text-wrap': {
1275
+ 'cssPropBits': 0,
1276
+ 'cssLitGroup': [ L[ 33 ], L[ 54 ], L[ 55 ] ]
1277
+ },
1278
+ 'top': {
1279
+ 'cssPropBits': 37,
1280
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
1281
+ },
1282
+ 'unicode-bidi': {
1283
+ 'cssPropBits': 0,
1284
+ 'cssLitGroup': [ L[ 23 ], L[ 47 ], L[ 55 ] ]
1285
+ },
1286
+ 'vertical-align': {
1287
+ 'cssPropBits': 5,
1288
+ 'cssLitGroup': [ L[ 10 ], L[ 24 ], L[ 47 ] ]
1289
+ },
1290
+ 'visibility': {
1291
+ 'cssPropBits': 32,
1292
+ 'cssLitGroup': [ L[ 44 ], L[ 46 ], L[ 47 ], L[ 63 ] ]
1293
+ },
1294
+ 'voice-family': {
1295
+ 'cssExtra': c[ 0 ],
1296
+ 'cssPropBits': 8,
1297
+ 'cssLitGroup': [ L[ 22 ], L[ 35 ], L[ 47 ] ]
1298
+ },
1299
+ 'volume': {
1300
+ 'cssPropBits': 1,
1301
+ 'cssLitGroup': [ L[ 16 ], L[ 47 ], L[ 52 ] ]
1302
+ },
1303
+ 'white-space': {
1304
+ 'cssPropBits': 0,
1305
+ 'cssLitGroup': [ L[ 8 ], L[ 47 ], L[ 55 ] ]
1306
+ },
1307
+ 'width': {
1308
+ 'cssPropBits': 33,
1309
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
1310
+ },
1311
+ 'word-spacing': {
1312
+ 'cssPropBits': 5,
1313
+ 'cssLitGroup': [ L[ 47 ], L[ 55 ] ]
1314
+ },
1315
+ 'word-wrap': {
1316
+ 'cssPropBits': 0,
1317
+ 'cssLitGroup': [ L[ 41 ], L[ 55 ] ]
1318
+ },
1319
+ 'z-index': {
1320
+ 'cssPropBits': 69,
1321
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
1322
+ },
1323
+ 'zoom': {
1324
+ 'cssPropBits': 1,
1325
+ 'cssLitGroup': [ L[ 55 ] ]
1326
+ }
1327
+ };
1328
+ })();
1329
+ if (typeof window !== 'undefined') {
1330
+ window['cssSchema'] = cssSchema;
1331
+ }
1332
+ // Copyright (C) 2011 Google Inc.
1333
+ //
1334
+ // Licensed under the Apache License, Version 2.0 (the "License");
1335
+ // you may not use this file except in compliance with the License.
1336
+ // You may obtain a copy of the License at
1337
+ //
1338
+ // http://www.apache.org/licenses/LICENSE-2.0
1339
+ //
1340
+ // Unless required by applicable law or agreed to in writing, software
1341
+ // distributed under the License is distributed on an "AS IS" BASIS,
1342
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1343
+ // See the License for the specific language governing permissions and
1344
+ // limitations under the License.
1345
+
1346
+ /**
1347
+ * A lexical scannar for CSS3 as defined at http://www.w3.org/TR/css3-syntax .
1348
+ *
1349
+ * @author Mike Samuel <mikesamuel@gmail.com>
1350
+ * \@provides lexCss, decodeCss
1351
+ * \@overrides window
1352
+ */
1353
+
1354
+ var lexCss;
1355
+ var decodeCss;
1356
+
1357
+ (function () {
1358
+
1359
+ /**
1360
+ * Decodes an escape sequence as specified in CSS3 section 4.1.
1361
+ * http://www.w3.org/TR/css3-syntax/#characters
1362
+ * @private
1363
+ */
1364
+ function decodeCssEscape(s) {
1365
+ var i = parseInt(s.substring(1), 16);
1366
+ // If parseInt didn't find a hex diigt, it returns NaN so return the
1367
+ // escaped character.
1368
+ // Otherwise, parseInt will stop at the first non-hex digit so there's no
1369
+ // need to worry about trailing whitespace.
1370
+ if (i > 0xffff) {
1371
+ // A supplemental codepoint.
1372
+ return i -= 0x10000,
1373
+ String.fromCharCode(
1374
+ 0xd800 + (i >> 10),
1375
+ 0xdc00 + (i & 0x3FF));
1376
+ } else if (i == i) {
1377
+ return String.fromCharCode(i);
1378
+ } else if (s[1] < ' ') {
1379
+ // "a backslash followed by a newline is ignored".
1380
+ return '';
1381
+ } else {
1382
+ return s[1];
1383
+ }
1384
+ }
1385
+
1386
+ /**
1387
+ * Returns an equivalent CSS string literal given plain text: foo -> "foo".
1388
+ * @private
1389
+ */
1390
+ function escapeCssString(s, replacer) {
1391
+ return '"' + s.replace(/[\u0000-\u001f\\\"<>]/g, replacer) + '"';
1392
+ }
1393
+
1394
+ /**
1395
+ * Maps chars to CSS escaped equivalents: "\n" -> "\\a ".
1396
+ * @private
1397
+ */
1398
+ function escapeCssStrChar(ch) {
1399
+ return cssStrChars[ch]
1400
+ || (cssStrChars[ch] = '\\' + ch.charCodeAt(0).toString(16) + ' ');
1401
+ }
1402
+
1403
+ /**
1404
+ * Maps chars to URI escaped equivalents: "\n" -> "%0a".
1405
+ * @private
1406
+ */
1407
+ function escapeCssUrlChar(ch) {
1408
+ return cssUrlChars[ch]
1409
+ || (cssUrlChars[ch] = (ch < '\x10' ? '%0' : '%')
1410
+ + ch.charCodeAt(0).toString(16));
1411
+ }
1412
+
1413
+ /**
1414
+ * Mapping of CSS special characters to escaped equivalents.
1415
+ * @private
1416
+ */
1417
+ var cssStrChars = {
1418
+ '\\': '\\\\'
1419
+ };
1420
+
1421
+ /**
1422
+ * Mapping of CSS special characters to URL-escaped equivalents.
1423
+ * @private
1424
+ */
1425
+ var cssUrlChars = {
1426
+ '\\': '%5c'
1427
+ };
1428
+
1429
+ // The comments below are copied from the CSS3 module syntax at
1430
+ // http://www.w3.org/TR/css3-syntax .
1431
+ // These string constants minify out when this is run-through closure
1432
+ // compiler.
1433
+ // Rules that have been adapted have comments prefixed with "Diff:", and
1434
+ // where rules have been combined to avoid back-tracking in the regex engine
1435
+ // or to work around limitations, there is a comment prefixed with
1436
+ // "NewRule:".
1437
+
1438
+ // In the below, we assume CRLF and CR have been normalize to CR.
1439
+
1440
+ // wc ::= #x9 | #xA | #xC | #xD | #x20
1441
+ var WC = '[\\t\\n\\f ]';
1442
+ // w ::= wc*
1443
+ var W = WC + '*';
1444
+ // nl ::= #xA | #xD #xA | #xD | #xC
1445
+ var NL = '[\\n\\f]';
1446
+ // nonascii ::= [#x80-#xD7FF#xE000-#xFFFD#x10000-#x10FFFF]
1447
+ // NewRule: Supplemental codepoints are represented as surrogate pairs in JS.
1448
+ var SURROGATE_PAIR = '[\\ud800-\\udbff][\\udc00-\\udfff]';
1449
+ var NONASCII = '[\\u0080-\\ud7ff\\ue000-\\ufffd]|' + SURROGATE_PAIR;
1450
+ // unicode ::= '\' [0-9a-fA-F]{1,6} wc?
1451
+ // NewRule: No point in having ESCAPE do (\\x|\\y)
1452
+ var UNICODE_TAIL = '[0-9a-fA-F]{1,6}' + WC + '?';
1453
+ // escape ::= unicode
1454
+ // | '\' [#x20-#x7E#x80-#xD7FF#xE000-#xFFFD#x10000-#x10FFFF]
1455
+ // NewRule: Below we use escape tail to efficiently match an escape or a
1456
+ // line continuation so we can decode string content.
1457
+ var ESCAPE_TAIL = '(?:' + UNICODE_TAIL
1458
+ + '|[\\u0020-\\u007e\\u0080-\\ud7ff\\ue000\\ufffd]|'
1459
+ + SURROGATE_PAIR + ')';
1460
+ var ESCAPE = '\\\\' + ESCAPE_TAIL;
1461
+ // urlchar ::= [#x9#x21#x23-#x26#x28-#x7E] | nonascii | escape
1462
+ var URLCHAR = '(?:[\\t\\x21\\x23-\\x26\\x28-\\x5b\\x5d-\\x7e]|'
1463
+ + NONASCII + '|' + ESCAPE + ')';
1464
+ // stringchar ::= urlchar | #x20 | '\' nl
1465
+ // We ignore mismatched surrogate pairs inside strings, so stringchar
1466
+ // simplifies to a non-(quote|newline|backslash) or backslash any.
1467
+ // Since we normalize CRLF to a single code-unit, there is no special
1468
+ // handling needed for '\\' + CRLF.
1469
+ var STRINGCHAR = '[^\'"\\n\\f\\\\]|\\\\[\\s\\S]';
1470
+ // string ::= '"' (stringchar | "'")* '"' | "'" (stringchar | '"')* "'"
1471
+ var STRING = '"(?:\'|' + STRINGCHAR + ')*"'
1472
+ + '|\'(?:\"|' + STRINGCHAR + ')*\'';
1473
+ // num ::= [0-9]+ | [0-9]* '.' [0-9]+
1474
+ // Diff: We attach signs to num tokens.
1475
+ var NUM = '[-+]?(?:[0-9]+(?:[.][0-9]+)?|[.][0-9]+)';
1476
+ // nmstart ::= [a-zA-Z] | '_' | nonascii | escape
1477
+ var NMSTART = '(?:[a-zA-Z_]|' + NONASCII + '|' + ESCAPE + ')';
1478
+ // nmchar ::= [a-zA-Z0-9] | '-' | '_' | nonascii | escape
1479
+ var NMCHAR = '(?:[a-zA-Z0-9_-]|' + NONASCII + '|' + ESCAPE + ')';
1480
+ // ident ::= '-'? nmstart nmchar*
1481
+ var IDENT = '-?' + NMSTART + NMCHAR + '*';
1482
+
1483
+ // NewRule: union of IDENT, ATKEYWORD, HASH, but excluding #[0-9].
1484
+ var WORD_TERM = '(?:@?-?' + NMSTART + '|#)' + NMCHAR + '*';
1485
+ var NUMERIC_VALUE = NUM + '(?:%|' + IDENT + ')?';
1486
+ // URI ::= "url(" w (string | urlchar* ) w ")"
1487
+ var URI = 'url[(]' + W + '(?:' + STRING + '|' + URLCHAR + '*)' + W + '[)]';
1488
+ // UNICODE-RANGE ::= "U+" [0-9A-F?]{1,6} ('-' [0-9A-F]{1,6})?
1489
+ var UNICODE_RANGE = 'U[+][0-9A-F?]{1,6}(?:-[0-9A-F]{1,6})?';
1490
+ // CDO ::= "<\!--"
1491
+ var CDO = '<\!--';
1492
+ // CDC ::= "-->"
1493
+ var CDC = '-->';
1494
+ // S ::= wc+
1495
+ var S = WC + '+';
1496
+ // COMMENT ::= "/*" [^*]* '*'+ ([^/] [^*]* '*'+)* "/"
1497
+ // Diff: recognizes // comments.
1498
+ var COMMENT = '/(?:[*][^*]*[*]+(?:[^/][^*]*[*]+)*/|/[^\\n\\f]*)';
1499
+ // FUNCTION ::= ident '('
1500
+ // Diff: We exclude url explicitly.
1501
+ // TODO: should we be tolerant of "fn ("?
1502
+ // ##### BEGIN: MODIFIED BY SAP
1503
+ // Avoid risk of 'catastrophic backtracking' when unicode escapes are used
1504
+ // var FUNCTION = '(?!url[(])' + IDENT + '[(]';
1505
+ var FUNCTION = '(?!url[(])(?=(' + IDENT + '))\\1[(]';
1506
+ // NewRule: one rule for all the comparison operators.
1507
+ var CMP_OPS = '[~|^$*]=';
1508
+ // CHAR ::= any character not matched by the above rules, except for " or '
1509
+ // Diff: We exclude / and \ since they are handled above to prevent
1510
+ // /* without a following */ from combining when comments are concatenated.
1511
+ var CHAR = '[^"\'\\\\/]|/(?![/*])';
1512
+ // BOM ::= #xFEFF
1513
+ var BOM = '\\uFEFF';
1514
+
1515
+ var CSS_TOKEN = new RegExp([
1516
+ BOM, UNICODE_RANGE, URI, FUNCTION, WORD_TERM, STRING, NUMERIC_VALUE,
1517
+ CDO, CDC, S, COMMENT, CMP_OPS, CHAR].join("|"), 'gi');
1518
+
1519
+ /**
1520
+ * Decodes CSS escape sequences in a CSS string body.
1521
+ */
1522
+ decodeCss = function (css) {
1523
+ return css.replace(
1524
+ new RegExp('\\\\(?:' + ESCAPE_TAIL + '|' + NL + ')', 'g'),
1525
+ decodeCssEscape);
1526
+ };
1527
+
1528
+ /**
1529
+ * Given CSS Text, returns an array of normalized tokens.
1530
+ * @param {string} cssText
1531
+ * @return {Array.<string>} tokens where all ignorable token sequences have
1532
+ * been reduced to a single {@code " "} and all strings and
1533
+ * {@code url(...)} tokens have been normalized to use double quotes as
1534
+ * delimiters and to not otherwise contain double quotes.
1535
+ */
1536
+ lexCss = function (cssText) {
1537
+ cssText = '' + cssText;
1538
+ var tokens = cssText.replace(/\r\n?/g, '\n') // Normalize CRLF & CR to LF.
1539
+ .match(CSS_TOKEN) || [];
1540
+ var j = 0;
1541
+ var last = ' ';
1542
+ for (var i = 0, n = tokens.length; i < n; ++i) {
1543
+ // Normalize all escape sequences. We will have to re-escape some
1544
+ // codepoints in string and url(...) bodies but we already know the
1545
+ // boundaries.
1546
+ // We might mistakenly treat a malformed identifier like \22\20\22 as a
1547
+ // string, but that will not break any valid stylesheets since we requote
1548
+ // and re-escape in string below.
1549
+ var tok = decodeCss(tokens[i]);
1550
+ var len = tok.length;
1551
+ var cc = tok.charCodeAt(0);
1552
+ tok =
1553
+ // All strings should be double quoted, and the body should never
1554
+ // contain a double quote.
1555
+ (cc == '"'.charCodeAt(0) || cc == '\''.charCodeAt(0))
1556
+ ? escapeCssString(tok.substring(1, len - 1), escapeCssStrChar)
1557
+ // A breaking ignorable token should is replaced with a single space.
1558
+ : (cc == '/'.charCodeAt(0) && len > 1 // Comment.
1559
+ || tok == '\\' || tok == CDC || tok == CDO || tok == '\ufeff'
1560
+ // Characters in W.
1561
+ || cc <= ' '.charCodeAt(0))
1562
+ ? ' '
1563
+ // Make sure that all url(...)s are double quoted.
1564
+ : /url\(/i.test(tok)
1565
+ ? 'url(' + escapeCssString(
1566
+ tok.replace(
1567
+ new RegExp('^url\\(' + W + '["\']?|["\']?' + W + '\\)$', 'gi'),
1568
+ ''),
1569
+ escapeCssUrlChar)
1570
+ + ')'
1571
+ // Escapes in identifier like tokens will have been normalized above.
1572
+ : tok;
1573
+ // Merge adjacent space tokens.
1574
+ if (last != tok || tok != ' ') {
1575
+ tokens[j++] = last = tok;
1576
+ }
1577
+ }
1578
+ tokens.length = j;
1579
+ return tokens;
1580
+ };
1581
+ })();
1582
+
1583
+ // Exports for closure compiler.
1584
+ if (typeof window !== 'undefined') {
1585
+ window['lexCss'] = lexCss;
1586
+ window['decodeCss'] = decodeCss;
1587
+ }
1588
+ // Copyright (C) 2011 Google Inc.
1589
+ //
1590
+ // Licensed under the Apache License, Version 2.0 (the "License");
1591
+ // you may not use this file except in compliance with the License.
1592
+ // You may obtain a copy of the License at
1593
+ //
1594
+ // http://www.apache.org/licenses/LICENSE-2.0
1595
+ //
1596
+ // Unless required by applicable law or agreed to in writing, software
1597
+ // distributed under the License is distributed on an "AS IS" BASIS,
1598
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1599
+ // See the License for the specific language governing permissions and
1600
+ // limitations under the License.
1601
+
1602
+ /**
1603
+ * @fileoverview
1604
+ * JavaScript support for client-side CSS sanitization.
1605
+ * The CSS property schema API is defined in CssPropertyPatterns.java which
1606
+ * is used to generate css-defs.js.
1607
+ *
1608
+ * @author mikesamuel@gmail.com
1609
+ * \@requires CSS_PROP_BIT_ALLOWED_IN_LINK
1610
+ * \@requires CSS_PROP_BIT_HASH_VALUE
1611
+ * \@requires CSS_PROP_BIT_NEGATIVE_QUANTITY
1612
+ * \@requires CSS_PROP_BIT_QSTRING_CONTENT
1613
+ * \@requires CSS_PROP_BIT_QSTRING_URL
1614
+ * \@requires CSS_PROP_BIT_QUANTITY
1615
+ * \@requires CSS_PROP_BIT_Z_INDEX
1616
+ * \@requires cssSchema
1617
+ * \@requires decodeCss
1618
+ * \@requires html4
1619
+ * \@overrides window
1620
+ * \@requires parseCssStylesheet
1621
+ * \@provides sanitizeCssProperty
1622
+ * \@provides sanitizeCssSelectors
1623
+ * \@provides sanitizeStylesheet
1624
+ */
1625
+
1626
+ /**
1627
+ * Given a series of normalized CSS tokens, applies a property schema, as
1628
+ * defined in CssPropertyPatterns.java, and sanitizes the tokens in place.
1629
+ * @param property a property name.
1630
+ * @param propertySchema a property of cssSchema as defined by
1631
+ * CssPropertyPatterns.java
1632
+ * @param tokens as parsed by lexCss. Modified in place.
1633
+ * @param opt_naiveUriRewriter a URI rewriter; an object with a "rewrite"
1634
+ * function that takes a URL and returns a safe URL.
1635
+ */
1636
+ var sanitizeCssProperty = (function () {
1637
+ var NOEFFECT_URL = 'url("about:blank")';
1638
+ /**
1639
+ * The set of characters that need to be normalized inside url("...").
1640
+ * We normalize newlines because they are not allowed inside quoted strings,
1641
+ * normalize quote characters, angle-brackets, and asterisks because they
1642
+ * could be used to break out of the URL or introduce targets for CSS
1643
+ * error recovery. We normalize parentheses since they delimit unquoted
1644
+ * URLs and calls and could be a target for error recovery.
1645
+ */
1646
+ var NORM_URL_REGEXP = /[\n\f\r\"\'()*<>]/g;
1647
+ /** The replacements for NORM_URL_REGEXP. */
1648
+ var NORM_URL_REPLACEMENTS = {
1649
+ '\n': '%0a',
1650
+ '\f': '%0c',
1651
+ '\r': '%0d',
1652
+ '"': '%22',
1653
+ '\'': '%27',
1654
+ '(': '%28',
1655
+ ')': '%29',
1656
+ '*': '%2a',
1657
+ '<': '%3c',
1658
+ '>': '%3e'
1659
+ };
1660
+
1661
+
1662
+ function normalizeUrl(s) {
1663
+ if ('string' === typeof s) {
1664
+ return 'url("' + s.replace(NORM_URL_REGEXP, normalizeUrlChar) + '")';
1665
+ } else {
1666
+ return NOEFFECT_URL;
1667
+ }
1668
+ }
1669
+ function normalizeUrlChar(ch) {
1670
+ return NORM_URL_REPLACEMENTS[ch];
1671
+ }
1672
+
1673
+ // From RFC3986
1674
+ var URI_SCHEME_RE = new RegExp(
1675
+ '^' +
1676
+ '(?:' +
1677
+ '([^:\/?# ]+)' + // scheme
1678
+ ':)?'
1679
+ );
1680
+
1681
+ var ALLOWED_URI_SCHEMES = /^(?:https?|mailto)$/i;
1682
+
1683
+ function safeUri(uri, prop, naiveUriRewriter) {
1684
+ if (!naiveUriRewriter) { return null; }
1685
+ var parsed = ('' + uri).match(URI_SCHEME_RE);
1686
+ if (parsed && (!parsed[1] || ALLOWED_URI_SCHEMES.test(parsed[1]))) {
1687
+ return naiveUriRewriter(uri, prop);
1688
+ } else {
1689
+ return null;
1690
+ }
1691
+ }
1692
+
1693
+ function unionArrays(arrs) {
1694
+ var map = {};
1695
+ for (var i = arrs.length; --i >= 0;) {
1696
+ var arr = arrs[i];
1697
+ for (var j = arr.length; --j >= 0;) {
1698
+ map[arr[j]] = ALLOWED_LITERAL;
1699
+ }
1700
+ }
1701
+ return map;
1702
+ }
1703
+
1704
+ /**
1705
+ * Normalize tokens within a function call they can match against
1706
+ * cssSchema[propName].cssExtra.
1707
+ * @return the exclusive end in tokens of the function call.
1708
+ */
1709
+ function normalizeFunctionCall(tokens, start) {
1710
+ var parenDepth = 1, end = start + 1, n = tokens.length;
1711
+ while (end < n && parenDepth) {
1712
+ // TODO: Can URLs appear in functions?
1713
+ var token = tokens[end++];
1714
+ parenDepth += (token === '(' ? 1 : token === ')' ? -1 : 0);
1715
+ }
1716
+ return end;
1717
+ }
1718
+
1719
+ // Used as map value to avoid hasOwnProperty checks.
1720
+ var ALLOWED_LITERAL = {};
1721
+
1722
+ return function (property, propertySchema, tokens, opt_naiveUriRewriter) {
1723
+ var propBits = propertySchema.cssPropBits;
1724
+ // Used to determine whether to treat quoted strings as URLs or
1725
+ // plain text content, and whether unrecognized keywords can be quoted
1726
+ // to treate ['Arial', 'Black'] equivalently to ['"Arial Black"'].
1727
+ var qstringBits = propBits & (
1728
+ CSS_PROP_BIT_QSTRING_CONTENT | CSS_PROP_BIT_QSTRING_URL);
1729
+ // TODO(mikesamuel): Figure out what to do with props like
1730
+ // content that admit both URLs and strings.
1731
+
1732
+ // Used to join unquoted keywords into a single quoted string.
1733
+ var lastQuoted = NaN;
1734
+ var i = 0, k = 0;
1735
+ for (;i < tokens.length; ++i) {
1736
+ // Has the effect of normalizing hex digits, keywords,
1737
+ // and function names.
1738
+ var token = tokens[i].toLowerCase();
1739
+ var cc = token.charCodeAt(0), cc1, cc2, isnum1, isnum2, end;
1740
+ var litGroup, litMap;
1741
+ token = (
1742
+ // Strip out spaces. Normally cssparser.js dumps these, but we
1743
+ // strip them out in case the content doesn't come via cssparser.js.
1744
+ (cc === ' '.charCodeAt(0))
1745
+ ? ''
1746
+ : (cc === '"'.charCodeAt(0))
1747
+ ? ( // Quoted string.
1748
+ (qstringBits === CSS_PROP_BIT_QSTRING_URL && opt_naiveUriRewriter)
1749
+ // Sanitize and convert to url("...") syntax.
1750
+ // Treat url content as case-sensitive.
1751
+ ? (normalizeUrl(
1752
+ safeUri(
1753
+ decodeCss(tokens[i].substring(1, token.length - 1)),
1754
+ property,
1755
+ opt_naiveUriRewriter
1756
+ )
1757
+ ))
1758
+ // Drop if plain text content strings not allowed.
1759
+ : (qstringBits === CSS_PROP_BIT_QSTRING_CONTENT) ? token : '')
1760
+ // Preserve hash color literals if allowed.
1761
+ : (cc === '#'.charCodeAt(0) && /^#(?:[0-9a-f]{3}){1,2}$/.test(token))
1762
+ ? (propBits & CSS_PROP_BIT_HASH_VALUE ? token : '')
1763
+ // ##### BEGIN: MODIFIED BY SAP
1764
+ // : ('0'.charCodeAt(0) <= cc && cc <= '9'.charCodeAt(0))
1765
+ : ('0'.charCodeAt(0) <= cc && cc <= '9'.charCodeAt(0) && !propertySchema.cssLitNumeric)
1766
+ // ##### END: MODIFIED BY SAP
1767
+ // A number starting with a digit.
1768
+ ? ((propBits & CSS_PROP_BIT_QUANTITY)
1769
+ ? ((propBits & CSS_PROP_BIT_Z_INDEX)
1770
+ ? (token.match(/^\d{1,7}$/) ? token : '')
1771
+ : token)
1772
+ : '')
1773
+ // Normalize quantities so they don't start with a '.' or '+' sign and
1774
+ // make sure they all have an integer component so can't be confused
1775
+ // with a dotted identifier.
1776
+ // This can't be done in the lexer since ".4" is a valid rule part.
1777
+ : (cc1 = token.charCodeAt(1),
1778
+ cc2 = token.charCodeAt(2),
1779
+ isnum1 = '0'.charCodeAt(0) <= cc1 && cc1 <= '9'.charCodeAt(0),
1780
+ isnum2 = '0'.charCodeAt(0) <= cc2 && cc2 <= '9'.charCodeAt(0),
1781
+ // +.5 -> 0.5 if allowed.
1782
+ (cc === '+'.charCodeAt(0)
1783
+ && (isnum1 || (cc1 === '.'.charCodeAt(0) && isnum2))))
1784
+ ? ((propBits & CSS_PROP_BIT_QUANTITY)
1785
+ ? ((propBits & CSS_PROP_BIT_Z_INDEX)
1786
+ ? (token.match(/^\+\d{1,7}$/) ? token : '')
1787
+ : ((isnum1 ? '' : '0') + token.substring(1)))
1788
+ : '')
1789
+ // -.5 -> -0.5 if allowed otherwise -> 0 if quantities allowed.
1790
+ : (cc === '-'.charCodeAt(0)
1791
+ && (isnum1 || (cc1 === '.'.charCodeAt(0) && isnum2)))
1792
+ ? ((propBits & CSS_PROP_BIT_NEGATIVE_QUANTITY)
1793
+ ? ((propBits & CSS_PROP_BIT_Z_INDEX)
1794
+ ? (token.match(/^\-\d{1,7}$/) ? token : '')
1795
+ : ((isnum1 ? '-' : '-0') + token.substring(1)))
1796
+ : ((propBits & CSS_PROP_BIT_QUANTITY) ? '0' : ''))
1797
+ // .5 -> 0.5 if allowed.
1798
+ : (cc === '.'.charCodeAt(0) && isnum1)
1799
+ ? ((propBits & CSS_PROP_BIT_QUANTITY) ? '0' + token : '')
1800
+ // Handle url("...") by rewriting the body.
1801
+ : ('url(' === token.substring(0, 4))
1802
+ ? ((opt_naiveUriRewriter && (qstringBits & CSS_PROP_BIT_QSTRING_URL))
1803
+ ? normalizeUrl(
1804
+ safeUri(
1805
+ tokens[i].substring(5, token.length - 2),
1806
+ property,
1807
+ opt_naiveUriRewriter
1808
+ )
1809
+ )
1810
+ : '')
1811
+ // Handle func(...) and literal tokens
1812
+ // such as keywords and punctuation.
1813
+ : (
1814
+ // Step 1. Combine func(...) into something that can be compared
1815
+ // against propertySchema.cssExtra.
1816
+ (token.charAt(token.length-1) === '(')
1817
+ && (end = normalizeFunctionCall(tokens, i),
1818
+ // When tokens is
1819
+ // ['x', ' ', 'rgb(', '255', ',', '0', ',', '0', ')', ' ', 'y']
1820
+ // and i is the index of 'rgb(' and end is the index of ')'
1821
+ // splices tokens to where i now is the index of the whole call:
1822
+ // ['x', ' ', 'rgb( 255 , 0 , 0 )', ' ', 'y']
1823
+ tokens.splice(i, end - i,
1824
+ token = tokens.slice(i, end).join(' '))),
1825
+ litGroup = propertySchema.cssLitGroup,
1826
+ litMap = (
1827
+ litGroup
1828
+ ? (propertySchema.cssLitMap
1829
+ // Lazily compute the union from litGroup.
1830
+ || (propertySchema.cssLitMap = unionArrays(litGroup)))
1831
+ : ALLOWED_LITERAL), // A convenient empty object.
1832
+ (litMap[token] === ALLOWED_LITERAL
1833
+ || propertySchema.cssExtra && propertySchema.cssExtra.test(token)))
1834
+ // Token is in the literal map or matches extra.
1835
+ ? token
1836
+ : (/^\w+$/.test(token)
1837
+ && (qstringBits === CSS_PROP_BIT_QSTRING_CONTENT))
1838
+ // Quote unrecognized keywords so font names like
1839
+ // Arial Bold
1840
+ // ->
1841
+ // "Arial Bold"
1842
+ ? (lastQuoted+1 === k
1843
+ // If the last token was also a keyword that was quoted, then
1844
+ // combine this token into that.
1845
+ ? (tokens[lastQuoted] = tokens[lastQuoted]
1846
+ .substring(0, tokens[lastQuoted].length-1) + ' ' + token + '"',
1847
+ token = '')
1848
+ : (lastQuoted = k, '"' + token + '"'))
1849
+ // Disallowed.
1850
+ : '');
1851
+ if (token) {
1852
+ tokens[k++] = token;
1853
+ }
1854
+ }
1855
+ // For single URL properties, if the URL failed to pass the sanitizer,
1856
+ // then just drop it.
1857
+ if (k === 1 && tokens[0] === NOEFFECT_URL) { k = 0; }
1858
+ tokens.length = k;
1859
+ };
1860
+ })();
1861
+
1862
+ /**
1863
+ * Given a series of tokens, returns two lists of sanitized selectors.
1864
+ * @param {Array.<string>} selectors In the form produces by csslexer.js.
1865
+ * @param {string} suffix a suffix that is added to all IDs and which is
1866
+ * used as a CLASS names so that the returned selectors will only match
1867
+ * nodes under one with suffix as a class name.
1868
+ * If suffix is {@code "sfx"}, the selector
1869
+ * {@code ["a", "#foo", " ", "b", ".bar"]} will be namespaced to
1870
+ * {@code [".sfx", " ", "a", "#foo-sfx", " ", "b", ".bar"]}.
1871
+ * @return {Array.<Array.<string>>} an array of length 2 where the zeroeth
1872
+ * element contains history-insensitive selectors and the first element
1873
+ * contains history-sensitive selectors.
1874
+ */
1875
+ function sanitizeCssSelectors(selectors, suffix) {
1876
+ // Produce two distinct lists of selectors to sequester selectors that are
1877
+ // history sensitive (:visited), so that we can disallow properties in the
1878
+ // property groups for the history sensitive ones.
1879
+ var historySensitiveSelectors = [];
1880
+ var historyInsensitiveSelectors = [];
1881
+
1882
+ // Remove any spaces that are not operators.
1883
+ var k = 0, i;
1884
+ for (i = 0; i < selectors.length; ++i) {
1885
+ if (!(selectors[i] == ' '
1886
+ && (selectors[i-1] == '>' || selectors[i+1] == '>'))) {
1887
+ selectors[k++] = selectors[i];
1888
+ }
1889
+ }
1890
+ selectors.length = k;
1891
+
1892
+ // Split around commas. If there is an error in one of the comma separated
1893
+ // bits, we throw the whole away, but the failure of one selector does not
1894
+ // affect others.
1895
+ var n = selectors.length, start = 0;
1896
+ for (i = 0; i < n; ++i) {
1897
+ if (selectors[i] == ',') {
1898
+ processSelector(start, i);
1899
+ start = i+1;
1900
+ }
1901
+ }
1902
+ processSelector(start, n);
1903
+
1904
+
1905
+ function processSelector(start, end) {
1906
+ var historySensitive = false;
1907
+
1908
+ // Space around commas is not an operator.
1909
+ if (selectors[start] === ' ') { ++start; }
1910
+ if (end-1 !== start && selectors[end] === ' ') { --end; }
1911
+
1912
+ // Split the selector into element selectors, content around
1913
+ // space (ancestor operator) and '>' (descendant operator).
1914
+ var out = [];
1915
+ var lastOperator = start;
1916
+ var elSelector = '';
1917
+ for (var i = start; i < end; ++i) {
1918
+ var tok = selectors[i];
1919
+ var isChild = (tok === '>');
1920
+ if (isChild || tok === ' ') {
1921
+ // We've found the end of a single link in the selector chain.
1922
+ // We disallow absolute positions relative to html.
1923
+ elSelector = processElementSelector(lastOperator, i, false);
1924
+ if (!elSelector || (isChild && /^html/i.test(elSelector))) {
1925
+ return;
1926
+ }
1927
+ lastOperator = i+1;
1928
+ out.push(elSelector, isChild ? ' > ' : ' ');
1929
+ }
1930
+ }
1931
+ elSelector = processElementSelector(lastOperator, end, true);
1932
+ if (!elSelector) { return; }
1933
+ out.push(elSelector);
1934
+
1935
+ function processElementSelector(start, end, last) {
1936
+
1937
+ // Split the element selector into three parts.
1938
+ // DIV.foo#bar:hover
1939
+ // ^ ^
1940
+ // el classes pseudo
1941
+ var element, classId, pseudoSelector, tok, elType;
1942
+ element = '';
1943
+ if (start < end) {
1944
+ tok = selectors[start].toLowerCase();
1945
+ if (tok === '*'
1946
+ || (tok === 'body' && start+1 !== end && !last)
1947
+ || ('number' === typeof (elType = html4.ELEMENTS[tok])
1948
+ && !(elType & html4.eflags.UNSAFE))) {
1949
+ ++start;
1950
+ element = tok;
1951
+ }
1952
+ }
1953
+ classId = '';
1954
+ while (start < end) {
1955
+ tok = selectors[start];
1956
+ if (tok.charAt(0) === '#') {
1957
+ if (/^#_|__$|[^#0-9A-Za-z:_\-]/.test(tok)) { return null; }
1958
+ // Rewrite ID elements to include the suffix.
1959
+ classId += tok + '-' + suffix;
1960
+ } else if (tok === '.') {
1961
+ if (++start < end
1962
+ && /^[0-9A-Za-z:_\-]+$/.test(tok = selectors[start])
1963
+ && !/^_|__$/.test(tok)) {
1964
+ classId += '.' + tok;
1965
+ } else {
1966
+ return null;
1967
+ }
1968
+ } else {
1969
+ break;
1970
+ }
1971
+ ++start;
1972
+ }
1973
+ pseudoSelector = '';
1974
+ if (start < end && selectors[start] === ':') {
1975
+ tok = selectors[++start];
1976
+ if (tok === 'visited' || tok === 'link') {
1977
+ if (!/^[a*]?$/.test(element)) {
1978
+ return null;
1979
+ }
1980
+ historySensitive = true;
1981
+ pseudoSelector = ':' + tok;
1982
+ element = 'a';
1983
+ ++start;
1984
+ }
1985
+ }
1986
+ if (start === end) {
1987
+ return element + classId + pseudoSelector;
1988
+ }
1989
+ return null;
1990
+ }
1991
+
1992
+
1993
+ var safeSelector = out.join('');
1994
+ if (/^body\b/.test(safeSelector)) {
1995
+ // Substitute the class that is attached to pseudo body elements for
1996
+ // the body element.
1997
+ safeSelector = '.vdoc-body___.' + suffix + safeSelector.substring(4);
1998
+ } else {
1999
+ // Namespace the selector so that it only matches under
2000
+ // a node with suffix in its CLASS attribute.
2001
+ safeSelector = '.' + suffix + ' ' + safeSelector;
2002
+ }
2003
+
2004
+ (historySensitive
2005
+ ? historySensitiveSelectors
2006
+ : historyInsensitiveSelectors).push(safeSelector);
2007
+ }
2008
+
2009
+ return [historyInsensitiveSelectors, historySensitiveSelectors];
2010
+ }
2011
+
2012
+ var sanitizeStylesheet = (function () {
2013
+ var allowed = {};
2014
+ var cssMediaTypeWhitelist = {
2015
+ 'braille': allowed,
2016
+ 'embossed': allowed,
2017
+ 'handheld': allowed,
2018
+ 'print': allowed,
2019
+ 'projection': allowed,
2020
+ 'screen': allowed,
2021
+ 'speech': allowed,
2022
+ 'tty': allowed,
2023
+ 'tv': allowed
2024
+ };
2025
+
2026
+ /**
2027
+ * Given a series of sanitized tokens, removes any properties that would
2028
+ * leak user history if allowed to style links differently depending on
2029
+ * whether the linked URL is in the user's browser history.
2030
+ * @param {Array.<string>} blockOfProperties
2031
+ */
2032
+ function sanitizeHistorySensitive(blockOfProperties) {
2033
+ var elide = false;
2034
+ for (var i = 0, n = blockOfProperties.length; i < n-1; ++i) {
2035
+ var token = blockOfProperties[i];
2036
+ if (':' === blockOfProperties[i+1]) {
2037
+ elide = !(cssSchema[token].cssPropBits & CSS_PROP_BIT_ALLOWED_IN_LINK);
2038
+ }
2039
+ if (elide) { blockOfProperties[i] = ''; }
2040
+ if (';' === token) { elide = false; }
2041
+ }
2042
+ return blockOfProperties.join('');
2043
+ }
2044
+
2045
+ /**
2046
+ * @param {string} cssText a string containing a CSS stylesheet.
2047
+ * @param {string} suffix a suffix that is added to all IDs and which is
2048
+ * used as a CLASS names so that the returned selectors will only match
2049
+ * nodes under one with suffix as a class name.
2050
+ * If suffix is {@code "sfx"}, the selector
2051
+ * {@code ["a", "#foo", " ", "b", ".bar"]} will be namespaced to
2052
+ * {@code [".sfx", " ", "a", "#foo-sfx", " ", "b", ".bar"]}.
2053
+ * @param {function(string, string)} opt_naiveUriRewriter maps URLs of media
2054
+ * (images, sounds) that appear as CSS property values to sanitized
2055
+ * URLs or null if the URL should not be allowed as an external media
2056
+ * file in sanitized CSS.
2057
+ */
2058
+ return function /*sanitizeStylesheet*/(
2059
+ cssText, suffix, opt_naiveUriRewriter) {
2060
+ var safeCss = void 0;
2061
+ // A stack describing the { ... } regions.
2062
+ // Null elements indicate blocks that should not be emitted.
2063
+ var blockStack = [];
2064
+ // True when the content of the current block should be left off safeCss.
2065
+ var elide = false;
2066
+ parseCssStylesheet(
2067
+ cssText,
2068
+ {
2069
+ startStylesheet: function () {
2070
+ safeCss = [];
2071
+ },
2072
+ endStylesheet: function () {
2073
+ },
2074
+ startAtrule: function (atIdent, headerArray) {
2075
+ if (elide) {
2076
+ atIdent = null;
2077
+ } else if (atIdent === '@media') {
2078
+ headerArray = headerArray.filter(
2079
+ function (mediaType) {
2080
+ return cssMediaTypeWhitelist[mediaType] == allowed;
2081
+ });
2082
+ if (headerArray.length) {
2083
+ safeCss.push(atIdent, headerArray.join(','), '{');
2084
+ } else {
2085
+ atIdent = null;
2086
+ }
2087
+ } else {
2088
+ if (atIdent === '@import') {
2089
+ // TODO: Use a logger instead.
2090
+ if (window.console) {
2091
+ window.console.log(
2092
+ '@import ' + headerArray.join(' ') + ' elided');
2093
+ }
2094
+ }
2095
+ atIdent = null; // Elide the block.
2096
+ }
2097
+ elide = !atIdent;
2098
+ blockStack.push(atIdent);
2099
+ },
2100
+ endAtrule: function () {
2101
+ blockStack.pop();
2102
+ if (!elide) {
2103
+ safeCss.push(';');
2104
+ }
2105
+ checkElide();
2106
+ },
2107
+ startBlock: function () {
2108
+ // There are no bare blocks in CSS, so we do not change the
2109
+ // block stack here, but instead in the events that bracket
2110
+ // blocks.
2111
+ if (!elide) {
2112
+ safeCss.push('{');
2113
+ }
2114
+ },
2115
+ endBlock: function () {
2116
+ if (!elide) {
2117
+ safeCss.push('}');
2118
+ elide = true; // skip any semicolon from endAtRule.
2119
+ }
2120
+ },
2121
+ startRuleset: function (selectorArray) {
2122
+ var historySensitiveSelectors = void 0;
2123
+ var removeHistoryInsensitiveSelectors = false;
2124
+ if (!elide) {
2125
+ var selectors = sanitizeCssSelectors(selectorArray, suffix);
2126
+ var historyInsensitiveSelectors = selectors[0];
2127
+ historySensitiveSelectors = selectors[1];
2128
+ if (!historyInsensitiveSelectors.length
2129
+ && !historySensitiveSelectors.length) {
2130
+ elide = true;
2131
+ } else {
2132
+ var selector = historyInsensitiveSelectors.join(', ');
2133
+ if (!selector) {
2134
+ // If we have only history sensitive selectors,
2135
+ // use an impossible rule so that we can capture the content
2136
+ // for later processing by
2137
+ // history insenstive content for use below.
2138
+ selector = 'head > html';
2139
+ removeHistoryInsensitiveSelectors = true;
2140
+ }
2141
+ safeCss.push(selector, '{');
2142
+ }
2143
+ }
2144
+ blockStack.push(
2145
+ elide
2146
+ ? null
2147
+ // Sometimes a single list of selectors is split in two,
2148
+ // div, a:visited
2149
+ // because we want to allow some properties for DIV that
2150
+ // we don't want to allow for A:VISITED to avoid leaking
2151
+ // user history.
2152
+ // Store the history sensitive selectors and the position
2153
+ // where the block starts so we can later create a copy
2154
+ // of the permissive tokens, and filter it to handle the
2155
+ // history sensitive case.
2156
+ : {
2157
+ historySensitiveSelectors: historySensitiveSelectors,
2158
+ endOfSelectors: safeCss.length - 1, // 1 is open curly
2159
+ removeHistoryInsensitiveSelectors:
2160
+ removeHistoryInsensitiveSelectors
2161
+ });
2162
+ },
2163
+ endRuleset: function () {
2164
+ var rules = blockStack.pop();
2165
+ var propertiesEnd = safeCss.length;
2166
+ if (!elide) {
2167
+ safeCss.push('}');
2168
+ if (rules) {
2169
+ var extraSelectors = rules.historySensitiveSelectors;
2170
+ if (extraSelectors.length) {
2171
+ var propertyGroupTokens = safeCss.slice(rules.endOfSelectors);
2172
+ safeCss.push(extraSelectors.join(', '),
2173
+ sanitizeHistorySensitive(propertyGroupTokens));
2174
+ }
2175
+ }
2176
+ }
2177
+ if (rules && rules.removeHistoryInsensitiveSelectors) {
2178
+ safeCss.splice(
2179
+ // -1 and +1 account for curly braces.
2180
+ rules.endOfSelectors - 1, propertiesEnd + 1);
2181
+ }
2182
+ checkElide();
2183
+ },
2184
+ declaration: function (property, valueArray) {
2185
+ if (!elide) {
2186
+ var schema = cssSchema[property];
2187
+ if (schema) {
2188
+ sanitizeCssProperty(property, schema, valueArray, opt_naiveUriRewriter);
2189
+ if (valueArray.length) {
2190
+ safeCss.push(property, ':', valueArray.join(' '), ';');
2191
+ }
2192
+ }
2193
+ }
2194
+ }
2195
+ });
2196
+ function checkElide() {
2197
+ elide = blockStack.length !== 0
2198
+ && blockStack[blockStack.length-1] !== null;
2199
+ }
2200
+ return safeCss.join('');
2201
+ };
2202
+ })();
2203
+
2204
+ // Exports for closure compiler.
2205
+ if (typeof window !== 'undefined') {
2206
+ window['sanitizeCssProperty'] = sanitizeCssProperty;
2207
+ window['sanitizeCssSelectors'] = sanitizeCssSelectors;
2208
+ window['sanitizeStylesheet'] = sanitizeStylesheet;
2209
+ }
2210
+ // Copyright (C) 2010 Google Inc.
2211
+ //
2212
+ // Licensed under the Apache License, Version 2.0 (the "License");
2213
+ // you may not use this file except in compliance with the License.
2214
+ // You may obtain a copy of the License at
2215
+ //
2216
+ // http://www.apache.org/licenses/LICENSE-2.0
2217
+ //
2218
+ // Unless required by applicable law or agreed to in writing, software
2219
+ // distributed under the License is distributed on an "AS IS" BASIS,
2220
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2221
+ // See the License for the specific language governing permissions and
2222
+ // limitations under the License.
2223
+
2224
+ /**
2225
+ * @fileoverview
2226
+ * Utilities for dealing with CSS source code.
2227
+ *
2228
+ * @author mikesamuel@gmail.com
2229
+ * \@requires lexCss
2230
+ * \@overrides window
2231
+ * \@provides parseCssStylesheet, parseCssDeclarations
2232
+ */
2233
+
2234
+ /**
2235
+ * parseCssStylesheet takes a chunk of CSS text and a handler object with
2236
+ * methods that it calls as below:
2237
+ * <pre>
2238
+ * // At the beginning of a stylesheet.
2239
+ * handler.startStylesheet();
2240
+ *
2241
+ * // For an @foo rule ended by a semicolon: @import "foo.css";
2242
+ * handler.startAtrule('@import', ['"foo.css"']);
2243
+ * handler.endAtrule();
2244
+ *
2245
+ * // For an @foo rule ended with a block. @media print { ... }
2246
+ * handler.startAtrule('@media', ['print']);
2247
+ * handler.startBlock();
2248
+ * // Calls to contents elided. Probably selectors and declarations as below.
2249
+ * handler.endBlock();
2250
+ * handler.endAtrule();
2251
+ *
2252
+ * // For a ruleset: p.clazz q, s { color: blue; }
2253
+ * handler.startRuleset(['p', '.', 'clazz', ' ', 'q', ',', ' ', 's']);
2254
+ * handler.declaration('color', ['blue']);
2255
+ * handler.endRuleset();
2256
+ *
2257
+ * // At the end of a stylesheet.
2258
+ * handler.endStylesheet();
2259
+ * </pre>
2260
+ * When errors are encountered, the parser drops the useless tokens and
2261
+ * attempts to resume parsing.
2262
+ *
2263
+ * @param {string} cssText CSS3 content to parse as a stylesheet.
2264
+ * @param {Object} handler An object like <pre>{
2265
+ * startStylesheet: function () { ... },
2266
+ * endStylesheet: function () { ... },
2267
+ * startAtrule: function (atIdent, headerArray) { ... },
2268
+ * endAtrule: function () { ... },
2269
+ * startBlock: function () { ... },
2270
+ * endBlock: function () { ... },
2271
+ * startRuleset: function (selectorArray) { ... },
2272
+ * endRuleset: function () { ... },
2273
+ * declaration: function (property, valueArray) { ... },
2274
+ * }</pre>
2275
+ */
2276
+ var parseCssStylesheet;
2277
+
2278
+ /**
2279
+ * parseCssDeclarations parses a run of declaration productions as seen in the
2280
+ * body of the HTML5 {@code style} attribute.
2281
+ *
2282
+ * @param {string} cssText CSS3 content to parse as a run of declarations.
2283
+ * @param {Object} handler An object like <pre>{
2284
+ * declaration: function (property, valueArray) { ... },
2285
+ * }</pre>
2286
+ */
2287
+ var parseCssDeclarations;
2288
+
2289
+ (function () {
2290
+ // stylesheet : [ CDO | CDC | S | statement ]*;
2291
+ parseCssStylesheet = function(cssText, handler) {
2292
+ var toks = lexCss(cssText);
2293
+ if (handler.startStylesheet) { handler.startStylesheet(); }
2294
+ for (var i = 0, n = toks.length; i < n;) {
2295
+ // CDO and CDC ("<!--" and "-->") are converted to space by the lexer.
2296
+ i = toks[i] === ' ' ? i+1 : statement(toks, i, n, handler);
2297
+ }
2298
+ if (handler.endStylesheet) { handler.endStylesheet(); }
2299
+ };
2300
+
2301
+ // statement : ruleset | at-rule;
2302
+ function statement(toks, i, n, handler) {
2303
+ if (i < n) {
2304
+ var tok = toks[i];
2305
+ if (tok.charAt(0) === '@') {
2306
+ return atrule(toks, i, n, handler, true);
2307
+ } else {
2308
+ return ruleset(toks, i, n, handler);
2309
+ }
2310
+ } else {
2311
+ return i;
2312
+ }
2313
+ }
2314
+
2315
+ // at-rule : ATKEYWORD S* any* [ block | ';' S* ];
2316
+ function atrule(toks, i, n, handler, blockok) {
2317
+ var start = i++;
2318
+ while (i < n && toks[i] !== '{' && toks[i] !== ';') {
2319
+ ++i;
2320
+ }
2321
+ if (i < n && (blockok || toks[i] === ';')) {
2322
+ var s = start+1, e = i;
2323
+ if (s < n && toks[s] === ' ') { ++s; }
2324
+ if (e > s && toks[e-1] === ' ') { --e; }
2325
+ if (handler.startAtrule) {
2326
+ handler.startAtrule(toks[start].toLowerCase(), toks.slice(s, e));
2327
+ }
2328
+ i = (toks[i] === '{')
2329
+ ? block(toks, i, n, handler)
2330
+ : i+1; // Skip over ';'
2331
+ if (handler.endAtrule) {
2332
+ handler.endAtrule();
2333
+ }
2334
+ }
2335
+ // Else we reached end of input or are missing a semicolon.
2336
+ // Drop the rule on the floor.
2337
+ return i;
2338
+ }
2339
+
2340
+ // block : '{' S* [ any | block | ATKEYWORD S* | ';' S* ]* '}' S*;
2341
+ // Assumes the leading '{' has been verified by callers.
2342
+ function block(toks, i, n, handler) {
2343
+ ++i; // skip over '{'
2344
+ if (handler.startBlock) { handler.startBlock(); }
2345
+ while (i < n) {
2346
+ var ch = toks[i].charAt(0);
2347
+ if (ch == '}') {
2348
+ ++i;
2349
+ break;
2350
+ }
2351
+ if (ch === ' ' || ch === ';') {
2352
+ i = i+1;
2353
+ } else if (ch === '@') {
2354
+ i = atrule(toks, i, n, handler, false);
2355
+ } else if (ch === '{') {
2356
+ i = block(toks, i, n, handler);
2357
+ } else {
2358
+ // Instead of using (any* block) to subsume ruleset we allow either
2359
+ // blocks or rulesets with a non-blank selector.
2360
+ // This is more restrictive but does not require atrule specific
2361
+ // parse tree fixup to realize that the contents of the block in
2362
+ // @media print { ... }
2363
+ // is a ruleset. We just don't care about any block carrying at-rules
2364
+ // whose body content is not ruleset content.
2365
+ i = ruleset(toks, i, n, handler);
2366
+ }
2367
+ }
2368
+ if (handler.endBlock) { handler.endBlock(); }
2369
+ return i;
2370
+ }
2371
+
2372
+ // ruleset : selector? '{' S* declaration? [ ';' S* declaration? ]* '}' S*;
2373
+ function ruleset(toks, i, n, handler) {
2374
+ // toks[s:e] are the selector tokens including internal whitespace.
2375
+ var s = i, e = selector(toks, i, n, true);
2376
+ if (e < 0) {
2377
+ // Skip malformed content per selector calling convention.
2378
+ e = ~e;
2379
+ // Make sure we skip at least one token.
2380
+ return i === e ? e+1 : e;
2381
+ }
2382
+ i = e;
2383
+ // Don't include any trailing space in the selector slice.
2384
+ if (e > s && toks[e-1] === ' ') { --e; }
2385
+ var tok = toks[i];
2386
+ ++i; // Skip over '{'
2387
+ if (tok !== '{') {
2388
+ // Skips past the '{' when there is a malformed input.
2389
+ return i;
2390
+ }
2391
+ if (handler.startRuleset) {
2392
+ handler.startRuleset(toks.slice(s, e));
2393
+ }
2394
+ while (i < n) {
2395
+ tok = toks[i];
2396
+ if (tok === '}') {
2397
+ ++i;
2398
+ break;
2399
+ }
2400
+ if (tok === ' ') {
2401
+ i = i+1;
2402
+ } else {
2403
+ i = declaration(toks, i, n, handler);
2404
+ }
2405
+ }
2406
+ if (handler.endRuleset) {
2407
+ handler.endRuleset();
2408
+ }
2409
+ return i < n ? i+1 : i;
2410
+ }
2411
+
2412
+ // selector : any+;
2413
+ // any : [ IDENT | NUMBER | PERCENTAGE | DIMENSION | STRING
2414
+ // | DELIM | URI | HASH | UNICODE-RANGE | INCLUDES
2415
+ // | FUNCTION S* any* ')' | DASHMATCH | '(' S* any* ')'
2416
+ // | '[' S* any* ']' ] S*;
2417
+ // A negative return value, rv, indicates the selector was malformed and
2418
+ // the index at which we stopped is ~rv.
2419
+ function selector(toks, i, n, allowSemi) {
2420
+ // The definition of any above can be summed up as
2421
+ // "any run of token except ('[', ']', '(', ')', ':', ';', '{', '}')
2422
+ // or nested runs of parenthesized tokens or square bracketed tokens".
2423
+ // Spaces are significant in the selector.
2424
+ // Selector is used as (selector?) so the below looks for (any*) for
2425
+ // simplicity.
2426
+ var tok;
2427
+ // Keeping a stack pointer actually causes this to minify better since
2428
+ // ".length" and ".push" are a lo of chars.
2429
+ var brackets = [], stackLast = -1;
2430
+ for (;i < n; ++i) {
2431
+ tok = toks[i].charAt(0);
2432
+ if (tok === '[' || tok === '(') {
2433
+ brackets[++stackLast] = tok;
2434
+ } else if ((tok === ']' && brackets[stackLast] === '[') ||
2435
+ (tok === ')' && brackets[stackLast] === '(')) {
2436
+ --stackLast;
2437
+ } else if (tok === '{' || tok === '}' || tok === ';' || tok === '@'
2438
+ || (tok === ':' && !allowSemi)) {
2439
+ break;
2440
+ }
2441
+ }
2442
+ if (stackLast >= 0) {
2443
+ // Returns the bitwise inverse of i+1 to indicate an error in the
2444
+ // token stream so that clients can ignore it.
2445
+ i = ~(i+1);
2446
+ }
2447
+ return i;
2448
+ }
2449
+
2450
+ var ident = /^-?[a-z]/i;
2451
+
2452
+ // declaration : property ':' S* value;
2453
+ // property : IDENT S*;
2454
+ // value : [ any | block | ATKEYWORD S* ]+;
2455
+ function declaration(toks, i, n, handler) {
2456
+ var property = toks[i++];
2457
+ if (!ident.test(property)) {
2458
+ return i+1; // skip one token.
2459
+ }
2460
+ var tok;
2461
+ if (i < n && toks[i] === ' ') { ++i; }
2462
+ if (i == n || toks[i] !== ':') {
2463
+ // skip tokens to next semi or close bracket.
2464
+ while (i < n && (tok = toks[i]) !== ';' && tok !== '}') { ++i; }
2465
+ return i;
2466
+ }
2467
+ ++i;
2468
+ if (i < n && toks[i] === ' ') { ++i; }
2469
+
2470
+ // None of the rules we care about want atrules or blocks in value, so
2471
+ // we look for any+ but that is the same as selector but not zero-length.
2472
+ // This gets us the benefit of not emitting any value with mismatched
2473
+ // brackets.
2474
+ var s = i, e = selector(toks, i, n, false);
2475
+ if (e < 0) {
2476
+ // Skip malformed content per selector calling convention.
2477
+ e = ~e;
2478
+ } else {
2479
+ var value = [], valuelen = 0;
2480
+ for (var j = s; j < e; ++j) {
2481
+ tok = toks[j];
2482
+ if (tok !== ' ') {
2483
+ value[valuelen++] = tok;
2484
+ }
2485
+ }
2486
+ // One of the following is now true:
2487
+ // (1) e is flush with the end of the tokens as in <... style="x:y">.
2488
+ // (2) tok[e] points to a ';' in which case we need to consume the semi.
2489
+ // (3) tok[e] points to a '}' in which case we don't consume it.
2490
+ // (4) else there is bogus unparsed value content at toks[e:].
2491
+ // Allow declaration flush with end for style attr body.
2492
+ if (e < n) { // 2, 3, or 4
2493
+ do {
2494
+ tok = toks[e];
2495
+ if (tok === ';' || tok === '}') { break; }
2496
+ // Don't emit the property if there is questionable trailing content.
2497
+ valuelen = 0;
2498
+ } while (++e < n);
2499
+ if (tok === ';') {
2500
+ ++e;
2501
+ }
2502
+ }
2503
+ if (valuelen && handler.declaration) {
2504
+ // TODO: coerce non-keyword ident tokens to quoted strings.
2505
+ handler.declaration(property.toLowerCase(), value);
2506
+ }
2507
+ }
2508
+ return e;
2509
+ }
2510
+
2511
+ parseCssDeclarations = function(cssText, handler) {
2512
+ var toks = lexCss(cssText);
2513
+ for (var i = 0, n = toks.length; i < n;) {
2514
+ i = toks[i] !== ' ' ? declaration(toks, i, n, handler) : i+1;
2515
+ }
2516
+ };
2517
+ })();
2518
+
2519
+ // Exports for closure compiler.
2520
+ if (typeof window !== 'undefined') {
2521
+ window['parseCssStylesheet'] = parseCssStylesheet;
2522
+ window['parseCssDeclarations'] = parseCssDeclarations;
2523
+ }
2524
+ /*!
2525
+ * OpenUI5
2526
+ * (c) Copyright 2009-2024 SAP SE or an SAP affiliate company.
2527
+ * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
2528
+ */
2529
+ // Based on coding from the HTML4 Sanitizer by Google Inc.
2530
+ // The HTML Attributes and ELements were reorganized according to the actual HTML5 specification
2531
+ // from the W3C. All types and flags were reviewed again as accurately as possible with HTML4 only
2532
+ // elements removed, you can still see them as comments. All rules which are new or changed from the
2533
+ // old HTML4 file are also marked "new" within the comment. The comments also state which attributes
2534
+ // and elements are assigned to respective types and flags. All rules which were not 100% clear were
2535
+ // analyzed in a way of similarity, so for example "audio" and "video" content behaves like images etc.
2536
+ // URIEFFECTS state if a URL is loaded inplace within a tag where the actual document is in control
2537
+ // of what type of content is loaded like "image" or if a new document is loaded like with "a href".
2538
+ // LOADERTYPES state if content is loaded as sandboxed which means it is loaded within a specific
2539
+ // surroundig player like with video content for example or if it is loaded freely without restrictions.
2540
+ // @overrides window
2541
+ // @provides html4
2542
+
2543
+ var html4 = {};
2544
+ html4.atype = {
2545
+ NONE: 0,
2546
+ URI: 1, //action, cite, data, href, icon, manifest, poster, src
2547
+ URI_FRAGMENT: 11, //usemap
2548
+ SCRIPT: 2, //all event handlers
2549
+ STYLE: 3, //style
2550
+ ID: 4, //id
2551
+ IDREF: 5, //for
2552
+ IDREFS: 6, //headers
2553
+ GLOBAL_NAME: 7, //name of form, iframe, img, map, meta
2554
+ LOCAL_NAME: 8, //name of button, fieldset, input, keygen, object, output, param, select, textarea
2555
+ CLASSES: 9, //class
2556
+ FRAME_TARGET: 10 //formtarget, srcdoc, target
2557
+ };
2558
+
2559
+ html4.ATTRIBS = {
2560
+ '*::accesskey': 0, //NONE
2561
+ '*::class': 9, //CLASSES
2562
+ '*::contenteditable': 0, //NONE new
2563
+ '*::contextmenu': 0, //NONE new
2564
+ '*::dir': 0, //NONE
2565
+ '*::draggable': 0, //NONE new
2566
+ '*::dropzone': 0, //NONE new
2567
+ '*::hidden': 0, //NONE new
2568
+ '*::id': 4, //ID
2569
+ '*::lang': 0, //NONE
2570
+ '*::onabort': 2, //SCRIPT new
2571
+ '*::onblur': 2, //SCRIPT new
2572
+ '*::oncanplay': 2, //SCRIPT new
2573
+ '*::oncanplaythrough': 2, //SCRIPT new
2574
+ '*::onchange': 2, //SCRIPT new
2575
+ '*::onclick': 2, //SCRIPT
2576
+ '*::oncontextmenu': 2, //SCRIPT new
2577
+ '*::oncuechange': 2, //SCRIPT new
2578
+ '*::ondblclick': 2, //SCRIPT
2579
+ '*::ondrag': 2, //SCRIPT new
2580
+ '*::ondragend': 2, //SCRIPT new
2581
+ '*::ondragenter': 2, //SCRIPT new
2582
+ '*::ondragleave': 2, //SCRIPT new
2583
+ '*::ondragover': 2, //SCRIPT new
2584
+ '*::ondragstart': 2, //SCRIPT new
2585
+ '*::ondrop': 2, //SCRIPT new
2586
+ '*::ondurationchange': 2, //SCRIPT new
2587
+ '*::onemptied': 2, //SCRIPT new
2588
+ '*::onended': 2, //SCRIPT new
2589
+ '*::onerror': 2, //SCRIPT new
2590
+ '*::onfocus': 2, //SCRIPT new
2591
+ '*::oninput': 2, //SCRIPT new
2592
+ '*::oninvalid': 2, //SCRIPT new
2593
+ '*::onkeydown': 2, //SCRIPT
2594
+ '*::onkeypress': 2, //SCRIPT
2595
+ '*::onkeyup': 2, //SCRIPT
2596
+ '*::onload': 2, //SCRIPT
2597
+ '*::onloadeddata': 2, //SCRIPT new
2598
+ '*::onloadedmetadata': 2, //SCRIPT new
2599
+ '*::onloadstart': 2, //SCRIPT new
2600
+ '*::onmousedown': 2, //SCRIPT
2601
+ '*::onmousemove': 2, //SCRIPT
2602
+ '*::onmouseout': 2, //SCRIPT
2603
+ '*::onmouseover': 2, //SCRIPT
2604
+ '*::onmouseup': 2, //SCRIPT
2605
+ '*::onmousewheel': 2, //SCRIPT new
2606
+ '*::onpause': 2, //SCRIPT new
2607
+ '*::onplay': 2, //SCRIPT new
2608
+ '*::onplaying': 2, //SCRIPT new
2609
+ '*::onprogress': 2, //SCRIPT new
2610
+ '*::onratechange': 2, //SCRIPT new
2611
+ '*::onreadystatechange': 2, //SCRIPT new
2612
+ '*::onreset': 2, //SCRIPT new
2613
+ '*::onscroll': 2, //SCRIPT new
2614
+ '*::onseeked': 2, //SCRIPT new
2615
+ '*::onseeking': 2, //SCRIPT new
2616
+ '*::onselect': 2, //SCRIPT new
2617
+ '*::onshow': 2, //SCRIPT new
2618
+ '*::onstalled': 2, //SCRIPT new
2619
+ '*::onsubmit': 2, //SCRIPT new
2620
+ '*::onsuspend': 2, //SCRIPT new
2621
+ '*::ontimeupdate': 2, //SCRIPT new
2622
+ '*::onvolumechange': 2, //SCRIPT new
2623
+ '*::onwaiting': 2, //SCRIPT new
2624
+ '*::spellcheck': 0, //NONE new
2625
+ '*::style': 3, //STYLE
2626
+ '*::tabindex': 0, //NONE
2627
+ '*::title': 0, //NONE
2628
+ //--------------------- 'a::accesskey': 0, moved to global
2629
+ //--------------------- 'a::coords': 0,
2630
+ 'a::href': 1, //URI
2631
+ 'a::hreflang': 0, //NONE
2632
+ 'a::media': 0, //NONE new
2633
+ //--------------------- 'a::name': 7,
2634
+ //--------------------- 'a::onblur': 2, moved to global
2635
+ //--------------------- 'a::onfocus': 2, moved to global
2636
+ 'a::rel': 0, //NONE
2637
+ //--------------------- 'a::rev': 0,
2638
+ //--------------------- 'a::shape': 0,
2639
+ //--------------------- 'a::tabindex': 0, moved to global
2640
+ 'a::target': 0, //changed to "0" because of CSN 1918585 2013, original value was 10 FRAME_TARGET but it seems uncritical
2641
+ 'a::type': 0, //NONE
2642
+ //--------------------- 'area::accesskey': 0, moved to global
2643
+ 'area::alt': 0, //NONE
2644
+ 'area::coords': 0, //NONE
2645
+ 'area::href': 1, //URI
2646
+ 'area::hreflang': 0, //NONE new
2647
+ 'area::media': 0, //NONE new
2648
+ //--------------------- 'area::nohref': 0,
2649
+ //--------------------- 'area::onblur': 2, moved to global
2650
+ //--------------------- 'area::onfocus': 2, moved to global
2651
+ 'area::rel': 0, //NONE new
2652
+ 'area::shape': 0, //NONE
2653
+ //--------------------- 'area::tabindex': 0, moved to global
2654
+ 'area::target': 10, //FRAME_TARGET
2655
+ 'area::type': 0, //NONE
2656
+ 'audio::autoplay': 0, //NONE new
2657
+ 'audio::controls': 0, //NONE new
2658
+ 'audio::loop': 0, //NONE new
2659
+ 'audio::mediagroup': 0, //NONE new
2660
+ 'audio::preload': 0, //NONE new
2661
+ 'audio::src': 1, //URI
2662
+ 'base::href': 1, //URI
2663
+ 'base::target': 10, //FRAME_TARGET
2664
+ //--------------------- 'bdo::dir': 0,
2665
+ 'blockquote::cite': 1, //URI
2666
+ 'body::onafterprint': 2, //SCRIPT new
2667
+ 'body::onbeforeprint': 2, //SCRIPT new
2668
+ 'body::onbeforeunload': 2, //SCRIPT new
2669
+ 'body::onblur': 2, //SCRIPT new
2670
+ 'body::onerror': 2, //SCRIPT new
2671
+ 'body::onfocus': 2, //SCRIPT new
2672
+ 'body::onhashchange': 2, //SCRIPT new
2673
+ 'body::onload': 2, //SCRIPT new
2674
+ 'body::onmessage': 2, //SCRIPT new
2675
+ 'body::onoffline': 2, //SCRIPT new
2676
+ 'body::ononline': 2, //SCRIPT new
2677
+ 'body::onpagehide': 2, //SCRIPT new
2678
+ 'body::onpageshow': 2, //SCRIPT new
2679
+ 'body::onpopstate': 2, //SCRIPT new
2680
+ 'body::onredo': 2, //SCRIPT new
2681
+ 'body::onresize': 2, //SCRIPT new
2682
+ 'body::onscroll': 2, //SCRIPT new
2683
+ 'body::onstorage': 2, //SCRIPT new
2684
+ 'body::onundo': 2, //SCRIPT new
2685
+ 'body::onunload': 2, //SCRIPT new
2686
+ //--------------------- 'br::clear': 0,
2687
+ //--------------------- 'button::accesskey': 0, moved to global
2688
+ 'button::autofocus': 0, //NONE new
2689
+ 'button::disabled': 0, //NONE
2690
+ 'button::form': 0, //NONE new
2691
+ 'button::formaction': 1, //URI new
2692
+ 'button::formenctype': 0, //NONE new
2693
+ 'button::formmethod': 0, //NONE new
2694
+ 'button::formnovalidate': 0, //NONE new
2695
+ 'button::formtarget': 10, //FRAME_TARGET new
2696
+ 'button::name': 8, //LOCAL_NAME
2697
+ //--------------------- 'button::onblur': 2,
2698
+ //--------------------- 'button::onfocus': 2,
2699
+ //--------------------- 'button::tabindex': 0, moved to global
2700
+ 'button::type': 0, //NONE
2701
+ 'button::value': 0, //NONE
2702
+ 'canvas::height': 0, //NONE
2703
+ 'canvas::width': 0, //NONE
2704
+ //--------------------- 'caption::align': 0,
2705
+ //--------------------- 'col::align': 0,
2706
+ //--------------------- 'col::char': 0,
2707
+ //--------------------- 'col::charoff': 0,
2708
+ 'col::span': 0, //NONE
2709
+ //--------------------- 'col::valign': 0,
2710
+ //--------------------- 'col::width': 0,
2711
+ //--------------------- 'colgroup::align': 0,
2712
+ //--------------------- 'colgroup::char': 0,
2713
+ //--------------------- 'colgroup::charoff': 0,
2714
+ 'colgroup::span': 0, //NONE
2715
+ //--------------------- 'colgroup::valign': 0,
2716
+ //--------------------- 'colgroup::width': 0,
2717
+ 'command::checked': 0, //NONE new
2718
+ 'command::disabled': 0, //NONE new
2719
+ 'command::icon': 1, //URI new
2720
+ 'command::label': 0, //NONE new
2721
+ 'command::radiogroup': 0, //NONE new
2722
+ 'command::type': 0, //NONE new
2723
+ 'del::cite': 1, //URI
2724
+ 'del::datetime': 0, //NONE
2725
+ 'details::open': 0, //NONE new
2726
+ //--------------------- 'dir::compact': 0,
2727
+ //--------------------- 'div::align': 0,
2728
+ //--------------------- 'dl::compact': 0,
2729
+ 'embed::height': 0, //NONE new
2730
+ 'embed::src': 1, //URI new
2731
+ 'embed::type': 0, //NONE new
2732
+ 'embed::width': 0, //NONE new
2733
+ 'fieldset::disabled': 0, //NONE new
2734
+ 'fieldset::form': 0, //NONE new
2735
+ 'fieldset::name': 8, //LOCAL_NAME new
2736
+ //--------------------- 'font::color': 0,
2737
+ //--------------------- 'font::face': 0,
2738
+ //--------------------- 'font::size': 0,
2739
+ //--------------------- 'form::accept': 0,
2740
+ 'form::accept-charset': 0, //NONE
2741
+ 'form::action': 1, //URI
2742
+ 'form::autocomplete': 0, //NONE
2743
+ 'form::enctype': 0, //NONE
2744
+ 'form::method': 0, //NONE
2745
+ 'form::name': 7, //GLOBAL_NAME
2746
+ 'form::novalidate': 0, //NONE new
2747
+ //--------------------- 'form::onreset': 2,
2748
+ //--------------------- 'form::onsubmit': 2,
2749
+ 'form::target': 10, //FRAME_TARGET
2750
+ //--------------------- 'h1::align': 0,
2751
+ //--------------------- 'h2::align': 0,
2752
+ //--------------------- 'h3::align': 0,
2753
+ //--------------------- 'h4::align': 0,
2754
+ //--------------------- 'h5::align': 0,
2755
+ //--------------------- 'h6::align': 0,
2756
+ //--------------------- 'hr::align': 0,
2757
+ //--------------------- 'hr::noshade': 0,
2758
+ //--------------------- 'hr::size': 0,
2759
+ //--------------------- 'hr::width': 0,
2760
+ 'html:: manifest': 1, //URI new
2761
+ //--------------------- 'iframe::align': 0,
2762
+ //--------------------- 'iframe::frameborder': 0,
2763
+ 'iframe::height': 0, //NONE
2764
+ //--------------------- 'iframe::marginheight': 0,
2765
+ //--------------------- 'iframe::marginwidth': 0,
2766
+ 'iframe::name': 7, //GLOBAL_NAME new
2767
+ 'iframe::sandbox': 0, //NONE new
2768
+ 'iframe::seamless': 0, //NONE new
2769
+ 'iframe::src': 1, //URI new
2770
+ 'iframe::srcdoc': 10, //FRAME_TARGET new
2771
+ 'iframe::width': 0, //NONE
2772
+ //--------------------- 'img::align': 0,
2773
+ 'img::alt': 0, //NONE
2774
+ //--------------------- 'img::border': 0,
2775
+ 'img::height': 0, //NONE
2776
+ //--------------------- 'img::hspace': 0,
2777
+ 'img::ismap': 0, //NONE
2778
+ 'img::name': 7, //GLOBAL_NAME
2779
+ 'img::src': 1, //URI
2780
+ 'img::usemap': 11, //URI_FRAGMENT
2781
+ //--------------------- 'img::vspace': 0,
2782
+ 'img::width': 0, //NONE
2783
+ 'input::accept': 0, //NONE
2784
+ //--------------------- 'input::accesskey': 0, moved to global
2785
+ //--------------------- 'input::align': 0,
2786
+ 'input::alt': 0, //NONE
2787
+ 'input::autocomplete': 0, //NONE
2788
+ 'input::autofocus': 0, //NONE new
2789
+ 'input::checked': 0, //NONE
2790
+ 'input::dirname': 0, //NONE new
2791
+ 'input::disabled': 0, //NONE
2792
+ 'input::form': 0, //NONE new
2793
+ 'input::formaction': 1, //URI new
2794
+ 'input::formenctype': 0, //NONE new
2795
+ 'input::formmethod': 0, //NONE new
2796
+ 'input::formnovalidate': 0, //NONE new
2797
+ 'input::formtarget': 10, //FRAME_TARGET new
2798
+ 'input::height': 0, //NONE new
2799
+ //--------------------- 'input::ismap': 0,
2800
+ 'input::list': 0, //NONE new
2801
+ 'input::max': 0, //NONE new
2802
+ 'input::maxlength': 0, //NONE
2803
+ 'input::min': 0, //NONE new
2804
+ 'input::multiple': 0, //NONE new
2805
+ 'input::name': 8, //LOCAL_NAME
2806
+ //--------------------- 'input::onblur': 2,
2807
+ //--------------------- 'input::onchange': 2,
2808
+ //--------------------- 'input::onfocus': 2,
2809
+ //--------------------- 'input::onselect': 2,
2810
+ 'input::pattern': 0, //NONE new
2811
+ 'input::placeholder': 0, //NONE new
2812
+ 'input::readonly': 0, //NONE
2813
+ 'input::required': 0, //NONE new
2814
+ 'input::step': 0, //NONE new
2815
+ 'input::size': 0, //NONE
2816
+ 'input::src': 1, //URI
2817
+ //--------------------- 'input::tabindex': 0, moved to global
2818
+ 'input::type': 0, //NONE
2819
+ //--------------------- 'input::usemap': 11,
2820
+ 'input::value': 0, //NONE
2821
+ 'input::width': 0, //NONE new
2822
+ 'ins::cite': 1, //URI
2823
+ 'ins::datetime': 0, //NONE
2824
+ //--------------------- 'label::accesskey': 0, moved to global
2825
+ 'keygen::autofocus': 0, //NONE new
2826
+ 'keygen::challenge': 0, //NONE new
2827
+ 'keygen::disabled': 0, //NONE new
2828
+ 'keygen::form': 0, //NONE new
2829
+ 'keygen::keytype': 0, //NONE new
2830
+ 'keygen::name': 8, //LOCAL_NAME new
2831
+ 'label::for': 5, //IDREF
2832
+ 'label::form': 0, //NONE new
2833
+ //--------------------- 'label::onblur': 2,
2834
+ //--------------------- 'label::onfocus': 2,
2835
+ //--------------------- 'legend::accesskey': 0, moved to global
2836
+ //--------------------- 'legend::align': 0,
2837
+ //--------------------- 'li::type': 0,
2838
+ 'link::href': 1, //URI new
2839
+ 'link::hreflang': 0, //NONE new
2840
+ 'link::media': 0, //NONE new
2841
+ 'link::rel': 0, //NONE new
2842
+ 'link::sizes': 0, //NONE new
2843
+ 'link::type': 0, //NONE new
2844
+ 'li::value': 0, //NONE new
2845
+ 'map::name': 7, //GLOBAL_NAME
2846
+ //--------------------- 'menu::compact': 0,
2847
+ 'menu::label': 0, //NONE new
2848
+ 'menu::type': 0, //NONE new
2849
+ 'meta::charset': 0, //NONE new
2850
+ 'meta::content': 0, //NONE new
2851
+ 'meta::http-equiv': 0, //NONE new
2852
+ 'meta::name': 7, //GLOBAL_NAME new
2853
+ 'meter::form': 0, //NONE new
2854
+ 'meter::high': 0, //NONE new
2855
+ 'meter::low': 0, //NONE new
2856
+ 'meter::max': 0, //NONE new
2857
+ 'meter::min': 0, //NONE new
2858
+ 'meter::optimum': 0, //NONE new
2859
+ 'meter::value': 0, //NONE new
2860
+ 'object::data': 1, //URI new
2861
+ 'object::form': 0, //NONE new
2862
+ 'object::height': 0, //NONE new
2863
+ 'object::name': 8, //LOCAL_NAME new
2864
+ 'object::type': 0, //NONE new
2865
+ 'object::usemap': 11, //URI_FRAGMENT new
2866
+ 'object::width': 0, //NONE new
2867
+ //--------------------- 'ol::compact': 0,
2868
+ 'ol::reversed': 0, //NONE new
2869
+ 'ol::start': 0, //NONE
2870
+ //--------------------- 'ol::type': 0,
2871
+ 'optgroup::disabled': 0, //NONE
2872
+ 'optgroup::label': 0, //NONE
2873
+ 'option::disabled': 0, //NONE
2874
+ 'option::label': 0, //NONE
2875
+ 'option::selected': 0, //NONE
2876
+ 'option::value': 0, //NONE
2877
+ 'output::for': 5, //IDREF new
2878
+ 'output::form': 0, //NONE new
2879
+ 'output::name': 8, //LOCAL_NAME new
2880
+ //--------------------- 'p::align': 0,
2881
+ 'param::name': 8, //LOCAL_NAME new
2882
+ 'param::value': 0, //NONE new
2883
+ 'progress::form': 0, //NONE new
2884
+ 'progress::max': 0, //NONE new
2885
+ 'progress::value': 0, //NONE new
2886
+ //--------------------- 'pre::width': 0,
2887
+ 'q::cite': 1, //URI
2888
+ 'script::async': 0, //NONE new
2889
+ 'script::charset': 0, //NONE new
2890
+ 'script::defer': 0, //NONE new
2891
+ 'script::src': 1, //URI new
2892
+ 'script::type': 0, //NONE new
2893
+ 'select::autofocus': 0, //NONE new
2894
+ 'select::disabled': 0, //NONE
2895
+ 'select::form': 0, //NONE new
2896
+ 'select::multiple': 0, //NONE
2897
+ 'select::name': 8, //LOCAL_NAME
2898
+ //--------------------- 'select::onblur': 2,
2899
+ //--------------------- 'select::onchange': 2,
2900
+ //--------------------- 'select::onfocus': 2,
2901
+ 'select::required': 0, //NONE new
2902
+ 'select::size': 0, //NONE
2903
+ //--------------------- 'select::tabindex': 0, moved to global
2904
+ 'source::media': 0, //NONE new
2905
+ 'source::src': 1, //URI new
2906
+ 'source::type': 0, //NONE new
2907
+ 'style::media': 0, //NONE new
2908
+ 'style::scoped': 0, //NONE new
2909
+ 'style::type': 0, //NONE new
2910
+ //--------------------- 'table::align': 0,
2911
+ //--------------------- 'table::bgcolor': 0,
2912
+ 'table::border': 0, //NONE
2913
+ //--------------------- 'table::cellpadding': 0,
2914
+ //--------------------- 'table::cellspacing': 0,
2915
+ //--------------------- 'table::frame': 0,
2916
+ //--------------------- 'table::rules': 0,
2917
+ //--------------------- 'table::summary': 0,
2918
+ //--------------------- 'table::width': 0,
2919
+ //--------------------- 'tbody::align': 0,
2920
+ //--------------------- 'tbody::char': 0,
2921
+ //--------------------- 'tbody::charoff': 0,
2922
+ //--------------------- 'tbody::valign': 0,
2923
+ //--------------------- 'td::abbr': 0,
2924
+ //--------------------- 'td::align': 0,
2925
+ //--------------------- 'td::axis': 0,
2926
+ //--------------------- 'td::bgcolor': 0,
2927
+ //--------------------- 'td::char': 0,
2928
+ //--------------------- 'td::charoff': 0,
2929
+ 'td::colspan': 0, //NONE
2930
+ 'td::headers': 6, //IDREFS
2931
+ //--------------------- 'td::height': 0,
2932
+ //--------------------- 'td::nowrap': 0,
2933
+ 'td::rowspan': 0, //NONE
2934
+ //--------------------- 'td::scope': 0,
2935
+ //--------------------- 'td::valign': 0,
2936
+ //--------------------- 'td::width': 0,
2937
+ //--------------------- 'textarea::accesskey': 0, moved to global
2938
+ 'textarea::autofocus': 0, //NONE new
2939
+ 'textarea::cols': 0, //NONE
2940
+ 'textarea::disabled': 0, //NONE
2941
+ 'textarea::form': 0, //NONE new
2942
+ 'textarea::maxlength': 0, //NONE new
2943
+ 'textarea::name': 8, //LOCAL_NAME
2944
+ //--------------------- 'textarea::onblur': 2,
2945
+ //--------------------- 'textarea::onchange': 2,
2946
+ //--------------------- 'textarea::onfocus': 2,
2947
+ //--------------------- 'textarea::onselect': 2,
2948
+ 'textarea::placeholder': 0, //NONE new
2949
+ 'textarea::readonly': 0, //NONE
2950
+ 'textarea::required': 0, //NONE new
2951
+ 'textarea::rows': 0, //NONE
2952
+ 'textarea::wrap': 0, //NONE new
2953
+ //--------------------- 'textarea::tabindex': 0, moved to global
2954
+ //--------------------- 'tfoot::align': 0,
2955
+ //--------------------- 'tfoot::char': 0,
2956
+ //--------------------- 'tfoot::charoff': 0,
2957
+ //--------------------- 'tfoot::valign': 0,
2958
+ //--------------------- 'th::abbr': 0,
2959
+ //--------------------- 'th::align': 0,
2960
+ //--------------------- 'th::axis': 0,
2961
+ //--------------------- 'th::bgcolor': 0,
2962
+ //--------------------- 'th::char': 0,
2963
+ //--------------------- 'th::charoff': 0,
2964
+ 'th::colspan': 0, //NONE
2965
+ 'th::headers': 6, //IDREFS
2966
+ //--------------------- 'th::height': 0,
2967
+ //--------------------- 'th::nowrap': 0,
2968
+ 'th::rowspan': 0, //NONE
2969
+ 'th::scope': 0, //NONE
2970
+ //--------------------- 'th::valign': 0,
2971
+ //--------------------- 'th::width': 0,
2972
+ //--------------------- 'thead::align': 0,
2973
+ //--------------------- 'thead::char': 0,
2974
+ //--------------------- 'thead::charoff': 0,
2975
+ //--------------------- 'thead::valign': 0,
2976
+ 'time::datetime': 0, //NONE new
2977
+ 'time::pubdate': 0, //NONE new
2978
+ //--------------------- 'tr::align': 0,
2979
+ //--------------------- 'tr::bgcolor': 0,
2980
+ //--------------------- 'tr::char': 0,
2981
+ //--------------------- 'tr::charoff': 0,
2982
+ //--------------------- 'tr::valign': 0,
2983
+ 'track::default': 0, //NONE new
2984
+ 'track::kind': 0, //NONE new
2985
+ 'track::label': 0, //NONE new
2986
+ 'track::src': 1, //URI new
2987
+ 'track::srclang': 0, //NONE new
2988
+ //--------------------- 'ul::compact': 0,
2989
+ //--------------------- 'ul::type': 0
2990
+ 'video::autoplay': 0, //NONE new
2991
+ 'video::controls': 0, //NONE new
2992
+ 'video::height': 0, //NONE new
2993
+ 'video::loop': 0, //NONE new
2994
+ 'video::mediagroup': 0, //NONE new
2995
+ 'video::poster': 1, //URI new
2996
+ 'video::preload': 0, //NONE new
2997
+ 'video::src': 1, //URI new
2998
+ 'video::width': 0 //NONE new
2999
+ };
3000
+ html4.eflags = {
3001
+ OPTIONAL_ENDTAG: 1,
3002
+ EMPTY: 2,
3003
+ CDATA: 4,
3004
+ RCDATA: 8,
3005
+ UNSAFE: 16,
3006
+ FOLDABLE: 32,
3007
+ SCRIPT: 64,
3008
+ STYLE: 128
3009
+ };
3010
+ html4.ELEMENTS = {
3011
+ 'a': 0,
3012
+ 'abbr': 0,
3013
+ //--------------------- 'acronym': 0,
3014
+ 'address': 0,
3015
+ //--------------------- 'applet': 16,
3016
+ 'area': 2, //EMPTY
3017
+ 'article': 0, //new
3018
+ 'aside': 0, //new
3019
+ 'audio': 0, //new
3020
+ 'b': 0,
3021
+ 'base': 18, //EMPTY, UNSAFE
3022
+ //--------------------- 'basefont': 18,
3023
+ 'bdi': 0, //new
3024
+ 'bdo': 0,
3025
+ //--------------------- 'big': 0,
3026
+ 'blockquote': 0,
3027
+ 'body': 49, //OPTIONAL_ENDTAG, UNSAFE, FOLDABLE
3028
+ 'br': 2, //EMPTY
3029
+ 'button': 0,
3030
+ 'canvas': 0,
3031
+ 'caption': 0,
3032
+ //--------------------- 'center': 0,
3033
+ 'cite': 0,
3034
+ 'code': 0,
3035
+ 'col': 2, //EMPTY
3036
+ 'colgroup': 1, //OPTIONAL_ENDTAG
3037
+ 'command': 2, //EMPTY new
3038
+ 'datalist': 0, //new
3039
+ 'dd': 1, //OPTIONAL_ENDTAG
3040
+ 'del': 0,
3041
+ 'details': 0, //new
3042
+ 'dfn': 0,
3043
+ //--------------------- 'dir': 0,
3044
+ 'div': 0,
3045
+ 'dl': 0,
3046
+ 'dt': 1, //OPTIONAL_ENDTAG
3047
+ 'em': 0,
3048
+ 'embed': 18, //EMPTY, UNSAFE new
3049
+ 'fieldset': 0,
3050
+ 'figcaption': 0, //new
3051
+ 'figure': 0, //new
3052
+ //--------------------- 'font': 0,
3053
+ 'footer': 0, //new
3054
+ 'form': 0,
3055
+ //--------------------- 'frame': 18,
3056
+ //--------------------- 'frameset': 16,
3057
+ 'h1': 0,
3058
+ 'h2': 0,
3059
+ 'h3': 0,
3060
+ 'h4': 0,
3061
+ 'h5': 0,
3062
+ 'h6': 0,
3063
+ 'head': 49, //OPTIONAL_ENDTAG, UNSAFE, FOLDABLE
3064
+ 'header': 0, //new
3065
+ 'hgroup': 0, //new
3066
+ 'hr': 2, //EMPTY
3067
+ 'html': 49, //OPTIONAL_ENDTAG, UNSAFE, FOLDABLE
3068
+ 'i': 0,
3069
+ 'iframe': 0, //new
3070
+ 'img': 2,//EMPTY
3071
+ 'input': 2, //EMPTY
3072
+ 'ins': 0,
3073
+ //--------------------- 'isindex': 18,
3074
+ 'kbd': 0,
3075
+ 'keygen': 2, //EMPTY new
3076
+ 'label': 0,
3077
+ 'legend': 0,
3078
+ 'li': 1, //OPTIONAL_ENDTAG
3079
+ 'link': 18, //EMPTY, UNSAFE
3080
+ 'map': 0,
3081
+ 'mark': 0, //new
3082
+ 'menu': 0,
3083
+ 'meta': 18, //EMPTY, UNSAFE
3084
+ 'meter': 0, //new
3085
+ 'nav': 0,
3086
+ //--------------------- 'nobr': 0,
3087
+ //--------------------- 'noembed': 4,
3088
+ //--------------------- 'noframes': 20,
3089
+ 'noscript': 20, //CDATA, UNSAFE
3090
+ 'object': 16, //UNSAFE
3091
+ 'ol': 0,
3092
+ 'optgroup': 1, //OPTIONAL_ENDTAG new !!!!vorher 0
3093
+ 'option': 1, //OPTIONAL_ENDTAG
3094
+ 'output': 0, //new
3095
+ 'p': 1, //OPTIONAL_ENDTAG
3096
+ 'param': 18, //EMPTY, UNSAFE
3097
+ 'pre': 0,
3098
+ 'progress': 0, //new
3099
+ 'q': 0,
3100
+ 'rp': 1, //OPTIONAL_ENDTAG new
3101
+ 'rt': 1, //OPTIONAL_ENDTAG new
3102
+ 'ruby': 0, //new
3103
+ 's': 0,
3104
+ 'samp': 0,
3105
+ 'script': 84, //CDATA, UNSAFE, SCRIPT
3106
+ 'section': 0, //new
3107
+ 'select': 0,
3108
+ 'small': 0,
3109
+ 'source': 2, //EMPTY new
3110
+ 'span': 0,
3111
+ //--------------------- 'strike': 0,
3112
+ 'strong': 0,
3113
+ 'style': 148, //CDATA, UNSAFE, STYLE
3114
+ 'sub': 0,
3115
+ 'summary': 0, //new
3116
+ 'sup': 0,
3117
+ 'table': 0,
3118
+ 'tbody': 1, //OPTIONAL_ENDTAG
3119
+ 'td': 1, //OPTIONAL_ENDTAG
3120
+ 'textarea': 8, //RCDATA
3121
+ 'tfoot': 1, //OPTIONAL_ENDTAG
3122
+ 'th': 1, //OPTIONAL_ENDTAG
3123
+ 'thead': 1, //OPTIONAL_ENDTAG
3124
+ 'time': 0, //new
3125
+ 'title': 24, //RCDATA, UNSAFE
3126
+ 'tr': 1, //OPTIONAL_ENDTAG
3127
+ 'track': 2, //EMPTY new
3128
+ //--------------------- 'tt': 0,
3129
+ 'u': 0,
3130
+ 'ul': 0,
3131
+ 'var': 0,
3132
+ 'video': 0, //new
3133
+ 'wbr': 2 //EMPTY new
3134
+ };
3135
+ html4.ueffects = {
3136
+ NOT_LOADED: 0,
3137
+ SAME_DOCUMENT: 1,
3138
+ NEW_DOCUMENT: 2
3139
+ };
3140
+ html4.URIEFFECTS = {
3141
+ 'a::href': 2, //NEW_DOCUMENT
3142
+ 'area::href': 2, //NEW_DOCUMENT
3143
+ 'audio::src': 1, //SAME_DOCUMENT new
3144
+ 'base::href':2, //NEW_DOCUMENT new
3145
+ 'blockquote::cite': 0, //NOT_LOADED
3146
+ //--------------------- 'body::background': 1,
3147
+ 'button::formaction': 2, //NEW_DOCUMENT new
3148
+ 'command::icon': 1, //SAME_DOCUMENT new
3149
+ 'del::cite': 0, //NOT_LOADED
3150
+ 'embed::src': 1, //SAME_DOCUMENT new
3151
+ 'form::action': 2, //NEW_DOCUMENT
3152
+ 'html:: manifest': 1, //SAME_DOCUMENT new
3153
+ 'iframe::src': 1, //SAME_DOCUMENT new
3154
+ 'img::src': 1, //SAME_DOCUMENT
3155
+ 'input::formaction': 2, //NEW_DOCUMENT new
3156
+ 'input::src': 1, //SAME_DOCUMENT
3157
+ 'ins::cite': 0, //NOT_LOADED
3158
+ 'link::href': 2, //NEW_DOCUMENT new
3159
+ 'object::data': 1, //SAME_DOCUMENT new
3160
+ 'q::cite': 0, //NOT_LOADED
3161
+ 'script::src': 1, //SAME_DOCUMENT new
3162
+ 'source::src': 1, //SAME_DOCUMENT new
3163
+ 'track::src': 1, //SAME_DOCUMENT new
3164
+ 'video::poster': 1, //SAME_DOCUMENT new
3165
+ 'video::src': 1 //SAME_DOCUMENT new
3166
+ };
3167
+ html4.ltypes = {
3168
+ UNSANDBOXED: 2,
3169
+ SANDBOXED: 1,
3170
+ DATA: 0
3171
+ };
3172
+ html4.LOADERTYPES = {
3173
+ 'a::href': 2, //UNSANDBOXED
3174
+ 'area::href': 2, //UNSANDBOXED
3175
+ 'audio::src': 1, //SANDBOXED new
3176
+ 'base::href': 2, //UNSANDBOXED new
3177
+ 'blockquote::cite': 2, //UNSANDBOXED
3178
+ //--------------------- 'body::background': 1,
3179
+ 'button::formaction': 2, //UNSANDBOXED new
3180
+ 'command::icon': 1, //SANDBOXED new
3181
+ 'del::cite': 2, //UNSANDBOXED
3182
+ 'embed::src': 1, //SANDBOXED new
3183
+ 'form::action': 2, //UNSANDBOXED
3184
+ 'html:: manifest': 1, //SANDBOXED new
3185
+ 'iframe::src': 1, //SANDBOXED new
3186
+ 'img::src': 1, //SANDBOXED
3187
+ 'input::formaction': 2, //UNSANDBOXED new
3188
+ 'input::src': 1, //SANDBOXED
3189
+ 'ins::cite': 2, //UNSANDBOXED
3190
+ 'link::href': 2, //UNSANDBOXED new
3191
+ 'object::data': 0, //DATA new
3192
+ 'q::cite': 2, //UNSANDBOXED
3193
+ 'script::src': 1, //SANDBOXED new
3194
+ 'source::src': 1, //SANDBOXED new
3195
+ 'track::src': 1, //SANDBOXED new
3196
+ 'video::poster': 1, //SANDBOXED new
3197
+ 'video::src': 1 //SANDBOXED new
3198
+ };if (typeof window !== 'undefined') {
3199
+ window['html4'] = html4;
3200
+ }// Copyright (C) 2006 Google Inc.
3201
+ //
3202
+ // Licensed under the Apache License, Version 2.0 (the "License");
3203
+ // you may not use this file except in compliance with the License.
3204
+ // You may obtain a copy of the License at
3205
+ //
3206
+ // http://www.apache.org/licenses/LICENSE-2.0
3207
+ //
3208
+ // Unless required by applicable law or agreed to in writing, software
3209
+ // distributed under the License is distributed on an "AS IS" BASIS,
3210
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3211
+ // See the License for the specific language governing permissions and
3212
+ // limitations under the License.
3213
+
3214
+ /**
3215
+ * @fileoverview
3216
+ * An HTML sanitizer that can satisfy a variety of security policies.
3217
+ *
3218
+ * <p>
3219
+ * The HTML sanitizer is built around a SAX parser and HTML element and
3220
+ * attributes schemas.
3221
+ *
3222
+ * If the cssparser is loaded, inline styles are sanitized using the
3223
+ * css property and value schemas. Else they are remove during
3224
+ * sanitization.
3225
+ *
3226
+ * If it exists, uses parseCssDeclarations, sanitizeCssProperty, cssSchema
3227
+ *
3228
+ * @author mikesamuel@gmail.com
3229
+ * @author jasvir@gmail.com
3230
+ * \@requires html4
3231
+ * \@overrides window
3232
+ * \@provides html, html_sanitize
3233
+ */
3234
+
3235
+ /**
3236
+ * \@namespace
3237
+ */
3238
+ var html = (function(html4) {
3239
+
3240
+ // For closure compiler
3241
+ var parseCssDeclarations, sanitizeCssProperty, cssSchema;
3242
+ if ('undefined' !== typeof window) {
3243
+ parseCssDeclarations = window['parseCssDeclarations'];
3244
+ sanitizeCssProperty = window['sanitizeCssProperty'];
3245
+ cssSchema = window['cssSchema'];
3246
+ }
3247
+
3248
+ var lcase;
3249
+ // The below may not be true on browsers in the Turkish locale.
3250
+ if ('script' === 'SCRIPT'.toLowerCase()) {
3251
+ lcase = function(s) { return s.toLowerCase(); };
3252
+ } else {
3253
+ /**
3254
+ * {\@updoc
3255
+ * $ lcase('SCRIPT')
3256
+ * # 'script'
3257
+ * $ lcase('script')
3258
+ * # 'script'
3259
+ * }
3260
+ */
3261
+ lcase = function(s) {
3262
+ return s.replace(
3263
+ /[A-Z]/g,
3264
+ function(ch) {
3265
+ return String.fromCharCode(ch.charCodeAt(0) | 32);
3266
+ });
3267
+ };
3268
+ }
3269
+
3270
+ // The keys of this object must be 'quoted' or JSCompiler will mangle them!
3271
+ var ENTITIES = {
3272
+ 'lt': '<',
3273
+ 'gt': '>',
3274
+ 'amp': '&',
3275
+ 'nbsp': '\xA0',
3276
+ 'quot': '"',
3277
+ 'apos': '\''
3278
+ };
3279
+
3280
+ var decimalEscapeRe = /^#(\d+)$/;
3281
+ var hexEscapeRe = /^#x([0-9A-Fa-f]+)$/;
3282
+ /**
3283
+ * Decodes an HTML entity.
3284
+ *
3285
+ * {\@updoc
3286
+ * $ lookupEntity('lt')
3287
+ * # '<'
3288
+ * $ lookupEntity('GT')
3289
+ * # '>'
3290
+ * $ lookupEntity('amp')
3291
+ * # '&'
3292
+ * $ lookupEntity('nbsp')
3293
+ * # '\xA0'
3294
+ * $ lookupEntity('apos')
3295
+ * # "'"
3296
+ * $ lookupEntity('quot')
3297
+ * # '"'
3298
+ * $ lookupEntity('#xa')
3299
+ * # '\n'
3300
+ * $ lookupEntity('#10')
3301
+ * # '\n'
3302
+ * $ lookupEntity('#x0a')
3303
+ * # '\n'
3304
+ * $ lookupEntity('#010')
3305
+ * # '\n'
3306
+ * $ lookupEntity('#x00A')
3307
+ * # '\n'
3308
+ * $ lookupEntity('Pi') // Known failure
3309
+ * # '\u03A0'
3310
+ * $ lookupEntity('pi') // Known failure
3311
+ * # '\u03C0'
3312
+ * }
3313
+ *
3314
+ * @param {string} name the content between the '&' and the ';'.
3315
+ * @return {string} a single unicode code-point as a string.
3316
+ */
3317
+ function lookupEntity(name) {
3318
+ name = lcase(name); // TODO: &pi; is different from &Pi;
3319
+ if (ENTITIES.hasOwnProperty(name)) { return ENTITIES[name]; }
3320
+ var m = name.match(decimalEscapeRe);
3321
+ if (m) {
3322
+ return String.fromCharCode(parseInt(m[1], 10));
3323
+ } else if (!!(m = name.match(hexEscapeRe))) {
3324
+ return String.fromCharCode(parseInt(m[1], 16));
3325
+ }
3326
+ return '';
3327
+ }
3328
+
3329
+ function decodeOneEntity(_, name) {
3330
+ return lookupEntity(name);
3331
+ }
3332
+
3333
+ var nulRe = /\0/g;
3334
+ function stripNULs(s) {
3335
+ return s.replace(nulRe, '');
3336
+ }
3337
+
3338
+ var entityRe = /&(#\d+|#x[0-9A-Fa-f]+|\w+);/g;
3339
+ /**
3340
+ * The plain text of a chunk of HTML CDATA which possibly containing.
3341
+ *
3342
+ * {\@updoc
3343
+ * $ unescapeEntities('')
3344
+ * # ''
3345
+ * $ unescapeEntities('hello World!')
3346
+ * # 'hello World!'
3347
+ * $ unescapeEntities('1 &lt; 2 &amp;&AMP; 4 &gt; 3&#10;')
3348
+ * # '1 < 2 && 4 > 3\n'
3349
+ * $ unescapeEntities('&lt;&lt <- unfinished entity&gt;')
3350
+ * # '<&lt <- unfinished entity>'
3351
+ * $ unescapeEntities('/foo?bar=baz&copy=true') // & often unescaped in URLS
3352
+ * # '/foo?bar=baz&copy=true'
3353
+ * $ unescapeEntities('pi=&pi;&#x3c0;, Pi=&Pi;\u03A0') // FIXME: known failure
3354
+ * # 'pi=\u03C0\u03c0, Pi=\u03A0\u03A0'
3355
+ * }
3356
+ *
3357
+ * @param {string} s a chunk of HTML CDATA. It must not start or end inside
3358
+ * an HTML entity.
3359
+ */
3360
+ function unescapeEntities(s) {
3361
+ return s.replace(entityRe, decodeOneEntity);
3362
+ }
3363
+
3364
+ var ampRe = /&/g;
3365
+ var looseAmpRe = /&([^a-z#]|#(?:[^0-9x]|x(?:[^0-9a-f]|$)|$)|$)/gi;
3366
+ var ltRe = /[<]/g;
3367
+ var gtRe = />/g;
3368
+ var quotRe = /\"/g;
3369
+
3370
+ /**
3371
+ * Escapes HTML special characters in attribute values.
3372
+ *
3373
+ * {\@updoc
3374
+ * $ escapeAttrib('')
3375
+ * # ''
3376
+ * $ escapeAttrib('"<<&==&>>"') // Do not just escape the first occurrence.
3377
+ * # '&#34;&lt;&lt;&amp;&#61;&#61;&amp;&gt;&gt;&#34;'
3378
+ * $ escapeAttrib('Hello <World>!')
3379
+ * # 'Hello &lt;World&gt;!'
3380
+ * }
3381
+ */
3382
+ function escapeAttrib(s) {
3383
+ return ('' + s).replace(ampRe, '&amp;').replace(ltRe, '&lt;')
3384
+ .replace(gtRe, '&gt;').replace(quotRe, '&#34;');
3385
+ }
3386
+
3387
+ /**
3388
+ * Escape entities in RCDATA that can be escaped without changing the meaning.
3389
+ * {\@updoc
3390
+ * $ normalizeRCData('1 < 2 &&amp; 3 > 4 &amp;& 5 &lt; 7&8')
3391
+ * # '1 &lt; 2 &amp;&amp; 3 &gt; 4 &amp;&amp; 5 &lt; 7&amp;8'
3392
+ * }
3393
+ */
3394
+ function normalizeRCData(rcdata) {
3395
+ return rcdata
3396
+ .replace(looseAmpRe, '&amp;$1')
3397
+ .replace(ltRe, '&lt;')
3398
+ .replace(gtRe, '&gt;');
3399
+ }
3400
+
3401
+ // TODO(mikesamuel): validate sanitizer regexs against the HTML5 grammar at
3402
+ // http://www.whatwg.org/specs/web-apps/current-work/multipage/syntax.html
3403
+ // http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html
3404
+ // http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html
3405
+ // http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html
3406
+
3407
+ // We initially split input so that potentially meaningful characters
3408
+ // like '<' and '>' are separate tokens, using a fast dumb process that
3409
+ // ignores quoting. Then we walk that token stream, and when we see a
3410
+ // '<' that's the start of a tag, we use ATTR_RE to extract tag
3411
+ // attributes from the next token. That token will never have a '>'
3412
+ // character. However, it might have an unbalanced quote character, and
3413
+ // when we see that, we combine additional tokens to balance the quote.
3414
+
3415
+ var ATTR_RE = new RegExp(
3416
+ '^\\s*' +
3417
+ '([a-z][a-z-]*)' + // 1 = Attribute name
3418
+ '(?:' + (
3419
+ '\\s*(=)\\s*' + // 2 = Is there a value?
3420
+ '(' + ( // 3 = Attribute value
3421
+ // TODO(felix8a): maybe use backref to match quotes
3422
+ '(\")[^\"]*(\"|$)' + // 4, 5 = Double-quoted string
3423
+ '|' +
3424
+ '(\')[^\']*(\'|$)' + // 6, 7 = Single-quoted string
3425
+ '|' +
3426
+ // Positive lookahead to prevent interpretation of
3427
+ // <foo a= b=c> as <foo a='b=c'>
3428
+ // TODO(felix8a): might be able to drop this case
3429
+ '(?=[a-z][a-z-]*\\s*=)' +
3430
+ '|' +
3431
+ // Unquoted value that isn't an attribute name
3432
+ // (since we didn't match the positive lookahead above)
3433
+ '[^\"\'\\s]*' ) +
3434
+ ')' ) +
3435
+ ')?',
3436
+ 'i');
3437
+
3438
+ var ENTITY_RE = /^(#[0-9]+|#x[0-9a-f]+|\w+);/i;
3439
+
3440
+ // false on IE<=8, true on most other browsers
3441
+ var splitWillCapture = ('a,b'.split(/(,)/).length === 3);
3442
+
3443
+ // bitmask for tags with special parsing, like <script> and <textarea>
3444
+ var EFLAGS_TEXT = html4.eflags.CDATA | html4.eflags.RCDATA;
3445
+
3446
+ /**
3447
+ * Given a SAX-like event handler, produce a function that feeds those
3448
+ * events and a parameter to the event handler.
3449
+ *
3450
+ * The event handler has the form:{@code
3451
+ * {
3452
+ * // Name is an upper-case HTML tag name. Attribs is an array of
3453
+ * // alternating upper-case attribute names, and attribute values. The
3454
+ * // attribs array is reused by the parser. Param is the value passed to
3455
+ * // the saxParser.
3456
+ * startTag: function (name, attribs, param) { ... },
3457
+ * endTag: function (name, param) { ... },
3458
+ * pcdata: function (text, param) { ... },
3459
+ * rcdata: function (text, param) { ... },
3460
+ * cdata: function (text, param) { ... },
3461
+ * startDoc: function (param) { ... },
3462
+ * endDoc: function (param) { ... }
3463
+ * }}
3464
+ *
3465
+ * @param {Object} handler a record containing event handlers.
3466
+ * @return {function(string, Object)} A function that takes a chunk of HTML
3467
+ * and a parameter. The parameter is passed on to the handler methods.
3468
+ */
3469
+ function makeSaxParser(handler) {
3470
+ return function(htmlText, param) {
3471
+ return parse(htmlText, handler, param);
3472
+ };
3473
+ }
3474
+
3475
+ // Parsing strategy is to split input into parts that might be lexically
3476
+ // meaningful (every ">" becomes a separate part), and then recombine
3477
+ // parts if we discover they're in a different context.
3478
+
3479
+ // Note, html-sanitizer filters unknown tags here, even though they also
3480
+ // get filtered out by the sanitizer's handler. This is back-compat
3481
+ // behavior; makeSaxParser is public.
3482
+
3483
+ // TODO(felix8a): Significant performance regressions from -legacy,
3484
+ // tested on
3485
+ // Chrome 18.0
3486
+ // Firefox 11.0
3487
+ // IE 6, 7, 8, 9
3488
+ // Opera 11.61
3489
+ // Safari 5.1.3
3490
+ // Many of these are unusual patterns that are linearly slower and still
3491
+ // pretty fast (eg 1ms to 5ms), so not necessarily worth fixing.
3492
+
3493
+ // TODO(felix8a): "<script> && && && ... <\/script>" is slower on all
3494
+ // browsers. The hotspot is htmlSplit.
3495
+
3496
+ // TODO(felix8a): "<p title='>>>>...'><\/p>" is slower on all browsers.
3497
+ // This is partly htmlSplit, but the hotspot is parseTagAndAttrs.
3498
+
3499
+ // TODO(felix8a): "<a><\/a><a><\/a>..." is slower on IE9.
3500
+ // "<a>1<\/a><a>1<\/a>..." is faster, "<a><\/a>2<a><\/a>2..." is faster.
3501
+
3502
+ // TODO(felix8a): "<p<p<p..." is slower on IE[6-8]
3503
+
3504
+ var continuationMarker = {};
3505
+ function parse(htmlText, handler, param) {
3506
+ var parts = htmlSplit(htmlText);
3507
+ var state = {
3508
+ noMoreGT: false,
3509
+ noMoreEndComments: false
3510
+ };
3511
+ parseCPS(handler, parts, 0, state, param);
3512
+ }
3513
+
3514
+ function continuationMaker(h, parts, initial, state, param) {
3515
+ return function () {
3516
+ parseCPS(h, parts, initial, state, param);
3517
+ };
3518
+ }
3519
+
3520
+ function parseCPS(h, parts, initial, state, param) {
3521
+ try {
3522
+ if (h.startDoc && initial == 0) { h.startDoc(param); }
3523
+ var m, p, tagName;
3524
+ for (var pos = initial, end = parts.length; pos < end;) {
3525
+ var current = parts[pos++];
3526
+ var next = parts[pos];
3527
+ switch (current) {
3528
+ case '&':
3529
+ if (ENTITY_RE.test(next)) {
3530
+ if (h.pcdata) {
3531
+ h.pcdata('&' + next, param, continuationMarker,
3532
+ continuationMaker(h, parts, pos, state, param));
3533
+ }
3534
+ pos++;
3535
+ } else {
3536
+ if (h.pcdata) { h.pcdata("&amp;", param, continuationMarker,
3537
+ continuationMaker(h, parts, pos, state, param));
3538
+ }
3539
+ }
3540
+ break;
3541
+ case '<\/':
3542
+ if (m = /^(\w+)[^\'\"]*/.exec(next)) {
3543
+ if (m[0].length === next.length && parts[pos + 1] === '>') {
3544
+ // fast case, no attribute parsing needed
3545
+ pos += 2;
3546
+ tagName = lcase(m[1]);
3547
+ if (html4.ELEMENTS.hasOwnProperty(tagName)) {
3548
+ if (h.endTag) {
3549
+ h.endTag(tagName, param, continuationMarker,
3550
+ continuationMaker(h, parts, pos, state, param));
3551
+ }
3552
+ }
3553
+ } else {
3554
+ // slow case, need to parse attributes
3555
+ // TODO(felix8a): do we really care about misparsing this?
3556
+ pos = parseEndTag(
3557
+ parts, pos, h, param, continuationMarker, state);
3558
+ }
3559
+ } else {
3560
+ if (h.pcdata) {
3561
+ h.pcdata('&lt;/', param, continuationMarker,
3562
+ continuationMaker(h, parts, pos, state, param));
3563
+ }
3564
+ }
3565
+ break;
3566
+ case '<':
3567
+ if (m = /^(\w+)\s*\/?/.exec(next)) {
3568
+ if (m[0].length === next.length && parts[pos + 1] === '>') {
3569
+ // fast case, no attribute parsing needed
3570
+ pos += 2;
3571
+ tagName = lcase(m[1]);
3572
+ if (html4.ELEMENTS.hasOwnProperty(tagName)) {
3573
+ if (h.startTag) {
3574
+ h.startTag(tagName, [], param, continuationMarker,
3575
+ continuationMaker(h, parts, pos, state, param));
3576
+ }
3577
+ // tags like <script> and <textarea> have special parsing
3578
+ var eflags = html4.ELEMENTS[tagName];
3579
+ if (eflags & EFLAGS_TEXT) {
3580
+ var tag = { name: tagName, next: pos, eflags: eflags };
3581
+ pos = parseText(
3582
+ parts, tag, h, param, continuationMarker, state);
3583
+ }
3584
+ }
3585
+ } else {
3586
+ // slow case, need to parse attributes
3587
+ pos = parseStartTag(
3588
+ parts, pos, h, param, continuationMarker, state);
3589
+ }
3590
+ } else {
3591
+ if (h.pcdata) {
3592
+ h.pcdata('&lt;', param, continuationMarker,
3593
+ continuationMaker(h, parts, pos, state, param));
3594
+ }
3595
+ }
3596
+ break;
3597
+ case '<\!--':
3598
+ // The pathological case is n copies of '<\!--' without '-->', and
3599
+ // repeated failure to find '-->' is quadratic. We avoid that by
3600
+ // remembering when search for '-->' fails.
3601
+ if (!state.noMoreEndComments) {
3602
+ // A comment <\!--x--> is split into three tokens:
3603
+ // '<\!--', 'x--', '>'
3604
+ // We want to find the next '>' token that has a preceding '--'.
3605
+ // pos is at the 'x--'.
3606
+ for (p = pos + 1; p < end; p++) {
3607
+ if (parts[p] === '>' && /--$/.test(parts[p - 1])) { break; }
3608
+ }
3609
+ if (p < end) {
3610
+ pos = p + 1;
3611
+ } else {
3612
+ state.noMoreEndComments = true;
3613
+ }
3614
+ }
3615
+ if (state.noMoreEndComments) {
3616
+ if (h.pcdata) {
3617
+ h.pcdata('&lt;!--', param, continuationMarker,
3618
+ continuationMaker(h, parts, pos, state, param));
3619
+ }
3620
+ }
3621
+ break;
3622
+ case '<\!':
3623
+ if (!/^\w/.test(next)) {
3624
+ if (h.pcdata) {
3625
+ h.pcdata('&lt;!', param, continuationMarker,
3626
+ continuationMaker(h, parts, pos, state, param));
3627
+ }
3628
+ } else {
3629
+ // similar to noMoreEndComment logic
3630
+ if (!state.noMoreGT) {
3631
+ for (p = pos + 1; p < end; p++) {
3632
+ if (parts[p] === '>') { break; }
3633
+ }
3634
+ if (p < end) {
3635
+ pos = p + 1;
3636
+ } else {
3637
+ state.noMoreGT = true;
3638
+ }
3639
+ }
3640
+ if (state.noMoreGT) {
3641
+ if (h.pcdata) {
3642
+ h.pcdata('&lt;!', param, continuationMarker,
3643
+ continuationMaker(h, parts, pos, state, param));
3644
+ }
3645
+ }
3646
+ }
3647
+ break;
3648
+ case '<?':
3649
+ // similar to noMoreEndComment logic
3650
+ if (!state.noMoreGT) {
3651
+ for (p = pos + 1; p < end; p++) {
3652
+ if (parts[p] === '>') { break; }
3653
+ }
3654
+ if (p < end) {
3655
+ pos = p + 1;
3656
+ } else {
3657
+ state.noMoreGT = true;
3658
+ }
3659
+ }
3660
+ if (state.noMoreGT) {
3661
+ if (h.pcdata) {
3662
+ h.pcdata('&lt;?', param, continuationMarker,
3663
+ continuationMaker(h, parts, pos, state, param));
3664
+ }
3665
+ }
3666
+ break;
3667
+ case '>':
3668
+ if (h.pcdata) {
3669
+ h.pcdata("&gt;", param, continuationMarker,
3670
+ continuationMaker(h, parts, pos, state, param));
3671
+ }
3672
+ break;
3673
+ case '':
3674
+ break;
3675
+ default:
3676
+ if (h.pcdata) {
3677
+ h.pcdata(current, param, continuationMarker,
3678
+ continuationMaker(h, parts, pos, state, param));
3679
+ }
3680
+ break;
3681
+ }
3682
+ }
3683
+ if (h.endDoc) { h.endDoc(param); }
3684
+ } catch (e) {
3685
+ if (e !== continuationMarker) { throw e; }
3686
+ }
3687
+ }
3688
+
3689
+ // Split str into parts for the html parser.
3690
+ function htmlSplit(str) {
3691
+ // can't hoist this out of the function because of the re.exec loop.
3692
+ var re = /(<\/|<\!--|<[!?]|[&<>])/g;
3693
+ str += '';
3694
+ if (splitWillCapture) {
3695
+ return str.split(re);
3696
+ } else {
3697
+ var parts = [];
3698
+ var lastPos = 0;
3699
+ var m;
3700
+ while ((m = re.exec(str)) !== null) {
3701
+ parts.push(str.substring(lastPos, m.index));
3702
+ parts.push(m[0]);
3703
+ lastPos = m.index + m[0].length;
3704
+ }
3705
+ parts.push(str.substring(lastPos));
3706
+ return parts;
3707
+ }
3708
+ }
3709
+
3710
+ function parseEndTag(parts, pos, h, param, continuationMarker, state) {
3711
+ var tag = parseTagAndAttrs(parts, pos);
3712
+ // drop unclosed tags
3713
+ if (!tag) { return parts.length; }
3714
+ if (tag.eflags !== void 0) {
3715
+ if (h.endTag) {
3716
+ h.endTag(tag.name, param, continuationMarker,
3717
+ continuationMaker(h, parts, pos, state, param));
3718
+ }
3719
+ }
3720
+ return tag.next;
3721
+ }
3722
+
3723
+ function parseStartTag(parts, pos, h, param, continuationMarker, state) {
3724
+ var tag = parseTagAndAttrs(parts, pos);
3725
+ // drop unclosed tags
3726
+ if (!tag) { return parts.length; }
3727
+ if (tag.eflags !== void 0) {
3728
+ if (h.startTag) {
3729
+ h.startTag(tag.name, tag.attrs, param, continuationMarker,
3730
+ continuationMaker(h, parts, tag.next, state, param));
3731
+ }
3732
+ // tags like <script> and <textarea> have special parsing
3733
+ if (tag.eflags & EFLAGS_TEXT) {
3734
+ return parseText(parts, tag, h, param, continuationMarker, state);
3735
+ }
3736
+ }
3737
+ return tag.next;
3738
+ }
3739
+
3740
+ var endTagRe = {};
3741
+
3742
+ // Tags like <script> and <textarea> are flagged as CDATA or RCDATA,
3743
+ // which means everything is text until we see the correct closing tag.
3744
+ function parseText(parts, tag, h, param, continuationMarker, state) {
3745
+ var end = parts.length;
3746
+ if (!endTagRe.hasOwnProperty(tag.name)) {
3747
+ endTagRe[tag.name] = new RegExp('^' + tag.name + '(?:[\\s\\/]|$)', 'i');
3748
+ }
3749
+ var re = endTagRe[tag.name];
3750
+ var first = tag.next;
3751
+ var p = tag.next + 1;
3752
+ for (; p < end; p++) {
3753
+ if (parts[p - 1] === '<\/' && re.test(parts[p])) { break; }
3754
+ }
3755
+ if (p < end) { p -= 1; }
3756
+ var buf = parts.slice(first, p).join('');
3757
+ if (tag.eflags & html4.eflags.CDATA) {
3758
+ if (h.cdata) {
3759
+ h.cdata(buf, param, continuationMarker,
3760
+ continuationMaker(h, parts, p, state, param));
3761
+ }
3762
+ } else if (tag.eflags & html4.eflags.RCDATA) {
3763
+ if (h.rcdata) {
3764
+ h.rcdata(normalizeRCData(buf), param, continuationMarker,
3765
+ continuationMaker(h, parts, p, state, param));
3766
+ }
3767
+ } else {
3768
+ throw new Error('bug');
3769
+ }
3770
+ return p;
3771
+ }
3772
+
3773
+ // at this point, parts[pos-1] is either "<" or "<\/".
3774
+ function parseTagAndAttrs(parts, pos) {
3775
+ var m = /^(\w+)/.exec(parts[pos]);
3776
+ var tag = { name: lcase(m[1]) };
3777
+ if (html4.ELEMENTS.hasOwnProperty(tag.name)) {
3778
+ tag.eflags = html4.ELEMENTS[tag.name];
3779
+ } else {
3780
+ tag.eflags = void 0;
3781
+ }
3782
+ var buf = parts[pos].substr(m[0].length);
3783
+ // Find the next '>'. We optimistically assume this '>' is not in a
3784
+ // quoted context, and further down we fix things up if it turns out to
3785
+ // be quoted.
3786
+ var p = pos + 1;
3787
+ var end = parts.length;
3788
+ for (; p < end; p++) {
3789
+ if (parts[p] === '>') { break; }
3790
+ buf += parts[p];
3791
+ }
3792
+ if (end <= p) { return void 0; }
3793
+ var attrs = [];
3794
+ while (buf !== '') {
3795
+ m = ATTR_RE.exec(buf);
3796
+ if (!m) {
3797
+ // No attribute found: skip garbage
3798
+ buf = buf.replace(/^[\s\S][^a-z\s]*/, '');
3799
+
3800
+ } else if ((m[4] && !m[5]) || (m[6] && !m[7])) {
3801
+ // Unterminated quote: slurp to the next unquoted '>'
3802
+ var quote = m[4] || m[6];
3803
+ var sawQuote = false;
3804
+ var abuf = [buf, parts[p++]];
3805
+ for (; p < end; p++) {
3806
+ if (sawQuote) {
3807
+ if (parts[p] === '>') { break; }
3808
+ } else if (0 <= parts[p].indexOf(quote)) {
3809
+ sawQuote = true;
3810
+ }
3811
+ abuf.push(parts[p]);
3812
+ }
3813
+ // Slurp failed: lose the garbage
3814
+ if (end <= p) { break; }
3815
+ // Otherwise retry attribute parsing
3816
+ buf = abuf.join('');
3817
+ continue;
3818
+
3819
+ } else {
3820
+ // We have an attribute
3821
+ var aName = lcase(m[1]);
3822
+ var aValue = m[2] ? decodeValue(m[3]) : aName;
3823
+ attrs.push(aName, aValue);
3824
+ buf = buf.substr(m[0].length);
3825
+ }
3826
+ }
3827
+ tag.attrs = attrs;
3828
+ tag.next = p + 1;
3829
+ return tag;
3830
+ }
3831
+
3832
+ function decodeValue(v) {
3833
+ var q = v.charCodeAt(0);
3834
+ if (q === 0x22 || q === 0x27) { // " or '
3835
+ v = v.substr(1, v.length - 2);
3836
+ }
3837
+ return unescapeEntities(stripNULs(v));
3838
+ }
3839
+
3840
+ /**
3841
+ * Returns a function that strips unsafe tags and attributes from html.
3842
+ * @param {function(string, Array.<string>): ?Array.<string>} tagPolicy
3843
+ * A function that takes (tagName, attribs[]), where tagName is a key in
3844
+ * html4.ELEMENTS and attribs is an array of alternating attribute names
3845
+ * and values. It should return a sanitized attribute array, or null to
3846
+ * delete the tag. It's okay for tagPolicy to modify the attribs array,
3847
+ * but the same array is reused, so it should not be held between calls.
3848
+ * @return {function(string, Array)} A function that sanitizes a string of
3849
+ * HTML and appends result strings to the second argument, an array.
3850
+ */
3851
+ function makeHtmlSanitizer(tagPolicy) {
3852
+ var stack;
3853
+ var ignoring;
3854
+ var emit = function (text, out) {
3855
+ if (!ignoring) { out.push(text); }
3856
+ };
3857
+ return makeSaxParser({
3858
+ startDoc: function(_) {
3859
+ stack = [];
3860
+ ignoring = false;
3861
+ },
3862
+ startTag: function(tagName, attribs, out) {
3863
+ if (ignoring) { return; }
3864
+ if (!html4.ELEMENTS.hasOwnProperty(tagName)) { return; }
3865
+ var eflags = html4.ELEMENTS[tagName];
3866
+ if (eflags & html4.eflags.FOLDABLE) {
3867
+ return;
3868
+ }
3869
+ attribs = tagPolicy(tagName, attribs);
3870
+ if (!attribs) {
3871
+ ignoring = !(eflags & html4.eflags.EMPTY);
3872
+ return;
3873
+ }
3874
+ // TODO(mikesamuel): relying on tagPolicy not to insert unsafe
3875
+ // attribute names.
3876
+ if (!(eflags & html4.eflags.EMPTY)) {
3877
+ stack.push(tagName);
3878
+ }
3879
+
3880
+ out.push('<', tagName);
3881
+ for (var i = 0, n = attribs.length; i < n; i += 2) {
3882
+ var attribName = attribs[i],
3883
+ value = attribs[i + 1];
3884
+ if (value !== null && value !== void 0) {
3885
+ out.push(' ', attribName, '="', escapeAttrib(value), '"');
3886
+ }
3887
+ }
3888
+ out.push('>');
3889
+ },
3890
+ endTag: function(tagName, out) {
3891
+ if (ignoring) {
3892
+ ignoring = false;
3893
+ return;
3894
+ }
3895
+ if (!html4.ELEMENTS.hasOwnProperty(tagName)) { return; }
3896
+ var eflags = html4.ELEMENTS[tagName];
3897
+ if (!(eflags & (html4.eflags.EMPTY | html4.eflags.FOLDABLE))) {
3898
+ var index;
3899
+ if (eflags & html4.eflags.OPTIONAL_ENDTAG) {
3900
+ for (index = stack.length; --index >= 0;) {
3901
+ var stackEl = stack[index];
3902
+ if (stackEl === tagName) { break; }
3903
+ if (!(html4.ELEMENTS[stackEl] &
3904
+ html4.eflags.OPTIONAL_ENDTAG)) {
3905
+ // Don't pop non optional end tags looking for a match.
3906
+ return;
3907
+ }
3908
+ }
3909
+ } else {
3910
+ for (index = stack.length; --index >= 0;) {
3911
+ if (stack[index] === tagName) { break; }
3912
+ }
3913
+ }
3914
+ if (index < 0) { return; } // Not opened.
3915
+ for (var i = stack.length; --i > index;) {
3916
+ var stackEl = stack[i];
3917
+ if (!(html4.ELEMENTS[stackEl] &
3918
+ html4.eflags.OPTIONAL_ENDTAG)) {
3919
+ out.push('<\/', stackEl, '>');
3920
+ }
3921
+ }
3922
+ stack.length = index;
3923
+ out.push('<\/', tagName, '>');
3924
+ }
3925
+ },
3926
+ pcdata: emit,
3927
+ rcdata: emit,
3928
+ cdata: emit,
3929
+ endDoc: function(out) {
3930
+ for (; stack.length; stack.length--) {
3931
+ out.push('<\/', stack[stack.length - 1], '>');
3932
+ }
3933
+ }
3934
+ });
3935
+ }
3936
+
3937
+ // From RFC3986
3938
+ var URI_SCHEME_RE = new RegExp(
3939
+ '^' +
3940
+ '(?:' +
3941
+ '([^:\/?# ]+)' + // scheme
3942
+ ':)?'
3943
+ );
3944
+
3945
+ var ALLOWED_URI_SCHEMES = /^(?:https?|mailto)$/i;
3946
+
3947
+ function safeUri(uri, naiveUriRewriter) {
3948
+ if (!naiveUriRewriter) { return null; }
3949
+ var parsed = ('' + uri).match(URI_SCHEME_RE);
3950
+ if (parsed && (!parsed[1] || ALLOWED_URI_SCHEMES.test(parsed[1]))) {
3951
+ return naiveUriRewriter(uri);
3952
+ } else {
3953
+ return null;
3954
+ }
3955
+ }
3956
+
3957
+ /**
3958
+ * Sanitizes attributes on an HTML tag.
3959
+ * @param {string} tagName An HTML tag name in lowercase.
3960
+ * @param {Array.<?string>} attribs An array of alternating names and values.
3961
+ * @param {?function(?string): ?string} opt_naiveUriRewriter A transform to
3962
+ * apply to URI attributes; it can return a new string value, or null to
3963
+ * delete the attribute. If unspecified, URI attributes are deleted.
3964
+ * @param {function(?string): ?string} opt_nmTokenPolicy A transform to apply
3965
+ * to attributes containing HTML names, element IDs, and space-separated
3966
+ * lists of classes; it can return a new string value, or null to delete
3967
+ * the attribute. If unspecified, these attributes are kept unchanged.
3968
+ * @return {Array.<?string>} The sanitized attributes as a list of alternating
3969
+ * names and values, where a null value means to omit the attribute.
3970
+ */
3971
+ function sanitizeAttribs(
3972
+ tagName, attribs, opt_naiveUriRewriter, opt_nmTokenPolicy) {
3973
+ for (var i = 0; i < attribs.length; i += 2) {
3974
+ var attribName = attribs[i];
3975
+ var value = attribs[i + 1];
3976
+ var atype = null, attribKey;
3977
+ if ((attribKey = tagName + '::' + attribName,
3978
+ html4.ATTRIBS.hasOwnProperty(attribKey)) ||
3979
+ (attribKey = '*::' + attribName,
3980
+ html4.ATTRIBS.hasOwnProperty(attribKey))) {
3981
+ atype = html4.ATTRIBS[attribKey];
3982
+ }
3983
+ if (atype !== null) {
3984
+ switch (atype) {
3985
+ case html4.atype.NONE: break;
3986
+ case html4.atype.SCRIPT:
3987
+ value = null;
3988
+ break;
3989
+ case html4.atype.STYLE:
3990
+ if ('undefined' === typeof parseCssDeclarations) {
3991
+ value = null;
3992
+ break;
3993
+ }
3994
+ var sanitizedDeclarations = [];
3995
+ parseCssDeclarations(
3996
+ value,
3997
+ {
3998
+ declaration: function (property, tokens) {
3999
+ var normProp = property.toLowerCase();
4000
+ var schema = cssSchema[normProp];
4001
+ if (!schema) {
4002
+ return;
4003
+ }
4004
+ sanitizeCssProperty(
4005
+ normProp, schema, tokens,
4006
+ opt_naiveUriRewriter);
4007
+ sanitizedDeclarations.push(property + ': ' + tokens.join(' '));
4008
+ }
4009
+ });
4010
+ value = sanitizedDeclarations.length > 0 ? sanitizedDeclarations.join(' ; ') : null;
4011
+ break;
4012
+ case html4.atype.ID:
4013
+ case html4.atype.IDREF:
4014
+ case html4.atype.IDREFS:
4015
+ case html4.atype.GLOBAL_NAME:
4016
+ case html4.atype.LOCAL_NAME:
4017
+ case html4.atype.CLASSES:
4018
+ value = opt_nmTokenPolicy ? opt_nmTokenPolicy(value) : value;
4019
+ break;
4020
+ case html4.atype.URI:
4021
+ value = safeUri(value, opt_naiveUriRewriter);
4022
+ break;
4023
+ case html4.atype.URI_FRAGMENT:
4024
+ if (value && '#' === value.charAt(0)) {
4025
+ value = value.substring(1); // remove the leading '#'
4026
+ value = opt_nmTokenPolicy ? opt_nmTokenPolicy(value) : value;
4027
+ if (value !== null && value !== void 0) {
4028
+ value = '#' + value; // restore the leading '#'
4029
+ }
4030
+ } else {
4031
+ value = null;
4032
+ }
4033
+ break;
4034
+ default:
4035
+ value = null;
4036
+ break;
4037
+ }
4038
+ } else {
4039
+ value = null;
4040
+ }
4041
+ attribs[i + 1] = value;
4042
+ }
4043
+ return attribs;
4044
+ }
4045
+
4046
+ /**
4047
+ * Creates a tag policy that omits all tags marked UNSAFE in html4-defs.js
4048
+ * and applies the default attribute sanitizer with the supplied policy for
4049
+ * URI attributes and NMTOKEN attributes.
4050
+ * @param {?function(?string): ?string} opt_naiveUriRewriter A transform to
4051
+ * apply to URI attributes. If not given, URI attributes are deleted.
4052
+ * @param {function(?string): ?string} opt_nmTokenPolicy A transform to apply
4053
+ * to attributes containing HTML names, element IDs, and space-separated
4054
+ * lists of classes. If not given, such attributes are left unchanged.
4055
+ * @return {function(string, Array.<?string>)} A tagPolicy suitable for
4056
+ * passing to html.sanitize.
4057
+ */
4058
+ function makeTagPolicy(opt_naiveUriRewriter, opt_nmTokenPolicy) {
4059
+ return function(tagName, attribs) {
4060
+ if (!(html4.ELEMENTS[tagName] & html4.eflags.UNSAFE)) {
4061
+ return sanitizeAttribs(
4062
+ tagName, attribs, opt_naiveUriRewriter, opt_nmTokenPolicy);
4063
+ }
4064
+ };
4065
+ }
4066
+
4067
+ /**
4068
+ * Sanitizes HTML tags and attributes according to a given policy.
4069
+ * @param {string} inputHtml The HTML to sanitize.
4070
+ * @param {function(string, Array.<?string>)} tagPolicy A function that
4071
+ * decides which tags to accept and sanitizes their attributes (see
4072
+ * makeHtmlSanitizer above for details).
4073
+ * @return {string} The sanitized HTML.
4074
+ */
4075
+ function sanitizeWithPolicy(inputHtml, tagPolicy) {
4076
+ var outputArray = [];
4077
+ makeHtmlSanitizer(tagPolicy)(inputHtml, outputArray);
4078
+ return outputArray.join('');
4079
+ }
4080
+
4081
+ /**
4082
+ * Strips unsafe tags and attributes from HTML.
4083
+ * @param {string} inputHtml The HTML to sanitize.
4084
+ * @param {?function(?string): ?string} opt_naiveUriRewriter A transform to
4085
+ * apply to URI attributes. If not given, URI attributes are deleted.
4086
+ * @param {function(?string): ?string} opt_nmTokenPolicy A transform to apply
4087
+ * to attributes containing HTML names, element IDs, and space-separated
4088
+ * lists of classes. If not given, such attributes are left unchanged.
4089
+ */
4090
+ function sanitize(inputHtml, opt_naiveUriRewriter, opt_nmTokenPolicy) {
4091
+ var tagPolicy = makeTagPolicy(opt_naiveUriRewriter, opt_nmTokenPolicy);
4092
+ return sanitizeWithPolicy(inputHtml, tagPolicy);
4093
+ }
4094
+
4095
+ return {
4096
+ escapeAttrib: escapeAttrib,
4097
+ makeHtmlSanitizer: makeHtmlSanitizer,
4098
+ makeSaxParser: makeSaxParser,
4099
+ makeTagPolicy: makeTagPolicy,
4100
+ normalizeRCData: normalizeRCData,
4101
+ sanitize: sanitize,
4102
+ sanitizeAttribs: sanitizeAttribs,
4103
+ sanitizeWithPolicy: sanitizeWithPolicy,
4104
+ unescapeEntities: unescapeEntities
4105
+ };
4106
+ })(html4);
4107
+
4108
+ var html_sanitize = html.sanitize;
4109
+
4110
+ // Exports for closure compiler. Note this file is also cajoled
4111
+ // for domado and run in an environment without 'window'
4112
+ if (typeof window !== 'undefined') {
4113
+ window['html'] = html;
4114
+ window['html_sanitize'] = html_sanitize;
4115
+ }
4116
+
4117
+ }());
4118
+ return cajaHtmlSanitizer;
4119
+ }
4120
+
4121
+ requireCajaHtmlSanitizer();
4122
+
4123
+ /*!
4124
+ * OpenUI5
4125
+ * (c) Copyright 2009-2024 SAP SE or an SAP affiliate company.
4126
+ * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
4127
+ */
4128
+ /*
4129
+ * IMPORTANT: This is a private module, its API must not be used and is subject to change.
4130
+ * Code other than the OpenUI5 libraries must not introduce dependencies to this module.
4131
+ */
4132
+ /**
4133
+ * Strips unsafe tags and attributes from HTML.
4134
+ *
4135
+ * @function
4136
+ * @since 1.58
4137
+ * @alias module:sap/base/security/sanitizeHTML
4138
+ * @param {string} sHTML the HTML to be sanitized.
4139
+ * @param {object} [mOptions={}] options for the sanitizer
4140
+ * @return {string} sanitized HTML
4141
+ * @private
4142
+ */
4143
+ var fnSanitizeHTML = function (sHTML, mOptions) {
4144
+ fnAssert(window.html && window.html.sanitize, "Sanitizer should have been loaded");
4145
+ mOptions = mOptions || {
4146
+ uriRewriter: function (sUrl) {
4147
+ // by default, we use the URLListValidator to check the URLs
4148
+
4149
+ if (oURLListValidator.validate(sUrl)) {
4150
+ return sUrl;
4151
+ }
4152
+ }
4153
+ };
4154
+ var oTagPolicy = mOptions.tagPolicy || window.html.makeTagPolicy(mOptions.uriRewriter, mOptions.tokenPolicy);
4155
+ return window.html.sanitizeWithPolicy(sHTML, oTagPolicy);
4156
+ };
4157
+
4158
+ const a=new Map,t=new Map;t.set("S",[0,599]),t.set("M",[600,1023]),t.set("L",[1024,1439]),t.set("XL",[1440,1/0]);var S=(e=>(e.RANGE_4STEPS="4Step",e))(S||{});const o=(r,e)=>{a.set(r,e);},c=(r,e=window.innerWidth)=>{let n=a.get(r);n||(n=a.get("4Step"));let g;const s=Math.floor(e);return n.forEach((R,E)=>{s>=R[0]&&s<=R[1]&&(g=E);}),g||[...n.keys()][0]},i={RANGESETS:S,initRangeSet:o,getCurrentRange:c};i.initRangeSet(i.RANGESETS.RANGE_4STEPS,t);
4159
+
4160
+ // animations/
4161
+
4162
+ var PackageModule = /*#__PURE__*/Object.freeze({
4163
+ __proto__: null,
4164
+ EventProvider: Icons.i$1,
4165
+ I18nBundle: Icons.u$2,
4166
+ ItemNavigation: f$1,
4167
+ MediaRange: i,
4168
+ RegisteredIconCollection: Icons.t$1,
4169
+ ResizeHandler: f,
4170
+ ScrollEnablement: v,
4171
+ UI5Element: b$1,
4172
+ URLListValidator: oURLListValidator,
4173
+ addCustomCSS: g,
4174
+ applyDirection: i$1,
4175
+ attachBoot: Icons.P,
4176
+ attachDirectionChange: a$1,
4177
+ attachLanguageChange: Icons.t,
4178
+ attachThemeLoaded: Icons.o,
4179
+ cancelRender: Icons.h,
4180
+ customElement: m$3,
4181
+ default: b$1,
4182
+ detachDirectionChange: c$1,
4183
+ detachLanguageChange: Icons.r$1,
4184
+ detachThemeLoaded: Icons.n$2,
4185
+ event: b$5,
4186
+ getAnimationMode: d$2,
4187
+ getCalendarType: i$7,
4188
+ getCustomElementsScopingRules: Icons.m$1,
4189
+ getCustomElementsScopingSuffix: Icons.c$1,
4190
+ getDefaultIconCollection: Icons.c$2,
4191
+ getDefaultLanguage: Icons.m$2,
4192
+ getDefaultTheme: Icons.g$1,
4193
+ getEffectiveDir: r$1,
4194
+ getEffectiveIconCollection: Icons.i$3,
4195
+ getEffectiveScopingSuffixForTag: Icons.g,
4196
+ getFetchDefaultLanguage: Icons.c$3,
4197
+ getFirstDayOfWeek: n$9,
4198
+ getI18nBundle: Icons.f$3,
4199
+ getLanguage: Icons.d$2,
4200
+ getLegacyDateCalendarCustomizing: m$4,
4201
+ getNoConflict: o$6,
4202
+ getTheme: Icons.r$2,
4203
+ isAndroid: Icons.P$1,
4204
+ isChrome: Icons.g$2,
4205
+ isCombi: Icons.m$3,
4206
+ isDesktop: Icons.f$2,
4207
+ isFirefox: Icons.b,
4208
+ isIOS: Icons.w$1,
4209
+ isPhone: Icons.d,
4210
+ isSafari: Icons.h$2,
4211
+ isTablet: Icons.a,
4212
+ property: s$8,
4213
+ registerCustomI18nBundleGetter: Icons.y,
4214
+ registerI18nLoader: Icons.$$1,
4215
+ registerIconLoader: Icons.T,
4216
+ registerLocaleDataLoader: C,
4217
+ registerThemePropertiesLoader: Icons.p,
4218
+ renderDeferred: Icons.l$2,
4219
+ renderFinished: Icons.f$1,
4220
+ renderImmediately: Icons.c,
4221
+ sanitizeHTML: fnSanitizeHTML,
4222
+ scroll: n$c,
4223
+ setAnimationMode: m$5,
4224
+ setCustomElementsScopingRules: Icons.p$1,
4225
+ setCustomElementsScopingSuffix: Icons.l$4,
4226
+ setDefaultIconCollection: Icons.e$1,
4227
+ setFetchDefaultLanguage: Icons.L,
4228
+ setLanguage: Icons.s$2,
4229
+ setNoConflict: f$4,
4230
+ setTheme: Icons.u$1,
4231
+ slideDown: b$6,
4232
+ slideUp: u$3,
4233
+ slot: d$1,
4234
+ supportsTouch: Icons.l$3
4235
+ });
4236
+
4237
+ Icons.l$4("16d3c820");
4238
+
4239
+ exports.B = B;
4240
+ exports.C = C;
4241
+ exports.D = D$1;
4242
+ exports.F = F;
4243
+ exports.H = H;
4244
+ exports.K = K;
4245
+ exports.O = O$2;
4246
+ exports.P = P;
4247
+ exports.PackageModule = PackageModule;
4248
+ exports.T = T;
4249
+ exports.V = V;
4250
+ exports.W = W;
4251
+ exports.b = b$1;
4252
+ exports.b$1 = b$4;
4253
+ exports.b$2 = b$6;
4254
+ exports.c = c$5;
4255
+ exports.d = d$1;
4256
+ exports.d$1 = d$2;
4257
+ exports.f = f$1;
4258
+ exports.f$1 = f;
4259
+ exports.f$2 = f$3;
4260
+ exports.i = i$5;
4261
+ exports.i$1 = i$3;
4262
+ exports.i$2 = i;
4263
+ exports.io = io;
4264
+ exports.l = l$5;
4265
+ exports.m = m$3;
4266
+ exports.m$1 = m$2;
4267
+ exports.m$2 = m$1;
4268
+ exports.n = n$3;
4269
+ exports.p = p$2;
4270
+ exports.r = r$4;
4271
+ exports.s = s$8;
4272
+ exports.so = so;
4273
+ exports.t = t$3;
4274
+ exports.u = u$3;
4275
+ exports.u$1 = u$2;
4276
+ exports.v = v$1;
4277
+ exports.w = w;
25
4278
 
26
4279
  }));