@alfresco/adf-content-services 8.1.0-16116688508 → 8.1.0-16117584844

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 (414) hide show
  1. package/bundles/assets/adf-content-services/i18n/en.json +1 -3
  2. package/esm2022/adf-content-services.mjs +5 -0
  3. package/esm2022/lib/agent/index.mjs +18 -0
  4. package/esm2022/lib/agent/public-api.mjs +18 -0
  5. package/esm2022/lib/agent/services/agent.service.mjs +60 -0
  6. package/esm2022/lib/alfresco-icon/alfresco-icon.component.mjs +27 -0
  7. package/esm2022/lib/api-factories/alfresco-api-no-auth.service.mjs +42 -0
  8. package/esm2022/lib/api-factories/alfresco-api-v2-loader.service.mjs +77 -0
  9. package/esm2022/lib/api-factories/index.mjs +18 -0
  10. package/esm2022/lib/api-factories/public-api.mjs +19 -0
  11. package/esm2022/lib/aspect-list/aspect-list-dialog-data.interface.mjs +18 -0
  12. package/esm2022/lib/aspect-list/aspect-list-dialog.component.mjs +77 -0
  13. package/esm2022/lib/aspect-list/aspect-list.component.mjs +139 -0
  14. package/esm2022/lib/aspect-list/aspect-list.module.mjs +35 -0
  15. package/esm2022/lib/aspect-list/index.mjs +18 -0
  16. package/esm2022/lib/aspect-list/public-api.mjs +24 -0
  17. package/esm2022/lib/aspect-list/services/aspect-list.service.mjs +83 -0
  18. package/esm2022/lib/aspect-list/services/dialog-aspect-list.service.mjs +86 -0
  19. package/esm2022/lib/aspect-list/services/node-aspect.service.mjs +52 -0
  20. package/esm2022/lib/auth-loader/content-auth-loader-factory.mjs +26 -0
  21. package/esm2022/lib/auth-loader/content-auth-loader.service.mjs +42 -0
  22. package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +166 -0
  23. package/esm2022/lib/breadcrumb/breadcrumb.module.mjs +35 -0
  24. package/esm2022/lib/breadcrumb/dropdown-breadcrumb.component.mjs +65 -0
  25. package/esm2022/lib/breadcrumb/index.mjs +18 -0
  26. package/esm2022/lib/breadcrumb/public-api.mjs +20 -0
  27. package/esm2022/lib/category/categories-management/categories-management-mode.mjs +22 -0
  28. package/esm2022/lib/category/categories-management/categories-management.component.mjs +308 -0
  29. package/esm2022/lib/category/category.module.mjs +33 -0
  30. package/esm2022/lib/category/index.mjs +18 -0
  31. package/esm2022/lib/category/models/category-node.interface.mjs +18 -0
  32. package/esm2022/lib/category/public-api.mjs +23 -0
  33. package/esm2022/lib/category/services/category-tree-datasource.service.mjs +80 -0
  34. package/esm2022/lib/category/services/category.service.mjs +159 -0
  35. package/esm2022/lib/common/events/file.event.mjs +46 -0
  36. package/esm2022/lib/common/index.mjs +18 -0
  37. package/esm2022/lib/common/interfaces/saved-search.interface.mjs +18 -0
  38. package/esm2022/lib/common/interfaces/search-configuration.interface.mjs +18 -0
  39. package/esm2022/lib/common/mocks/ecm-user.service.mock.mjs +37 -0
  40. package/esm2022/lib/common/models/allowable-operations.enum.mjs +30 -0
  41. package/esm2022/lib/common/models/ecm-company.model.mjs +19 -0
  42. package/esm2022/lib/common/models/ecm-user.model.mjs +45 -0
  43. package/esm2022/lib/common/models/file.model.mjs +53 -0
  44. package/esm2022/lib/common/models/node-metadata.model.mjs +23 -0
  45. package/esm2022/lib/common/models/permissions.enum.mjs +32 -0
  46. package/esm2022/lib/common/public-api.mjs +37 -0
  47. package/esm2022/lib/common/services/card-view-content-update.service.mjs +55 -0
  48. package/esm2022/lib/common/services/content.service.mjs +180 -0
  49. package/esm2022/lib/common/services/discovery-api.service.mjs +79 -0
  50. package/esm2022/lib/common/services/favorites-api.service.mjs +84 -0
  51. package/esm2022/lib/common/services/nodes-api.service.mjs +251 -0
  52. package/esm2022/lib/common/services/people-content.service.mjs +138 -0
  53. package/esm2022/lib/common/services/rendition.service.mjs +270 -0
  54. package/esm2022/lib/common/services/saved-searches.service.mjs +206 -0
  55. package/esm2022/lib/common/services/sites.service.mjs +243 -0
  56. package/esm2022/lib/common/services/upload.service.mjs +391 -0
  57. package/esm2022/lib/content-metadata/components/content-metadata/content-metadata-header.component.mjs +54 -0
  58. package/esm2022/lib/content-metadata/components/content-metadata/content-metadata.component.mjs +490 -0
  59. package/esm2022/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.mjs +128 -0
  60. package/esm2022/lib/content-metadata/content-metadata.module.mjs +36 -0
  61. package/esm2022/lib/content-metadata/index.mjs +18 -0
  62. package/esm2022/lib/content-metadata/interfaces/aspect-oriented-config.interface.mjs +18 -0
  63. package/esm2022/lib/content-metadata/interfaces/card-view-group.interface.mjs +18 -0
  64. package/esm2022/lib/content-metadata/interfaces/content-metadata-config.interface.mjs +18 -0
  65. package/esm2022/lib/content-metadata/interfaces/content-metadata-custom-panel.interface.mjs +18 -0
  66. package/esm2022/lib/content-metadata/interfaces/content-metadata-panel.interface.mjs +18 -0
  67. package/esm2022/lib/content-metadata/interfaces/content-metadata.interfaces.mjs +28 -0
  68. package/esm2022/lib/content-metadata/interfaces/indifferent-config.interface.mjs +18 -0
  69. package/esm2022/lib/content-metadata/interfaces/layout-oriented-config.interface.mjs +18 -0
  70. package/esm2022/lib/content-metadata/interfaces/organised-property-group.interface.mjs +18 -0
  71. package/esm2022/lib/content-metadata/interfaces/preset-config.interface.mjs +18 -0
  72. package/esm2022/lib/content-metadata/interfaces/property-group.interface.mjs +18 -0
  73. package/esm2022/lib/content-metadata/interfaces/property.interface.mjs +18 -0
  74. package/esm2022/lib/content-metadata/public-api.mjs +31 -0
  75. package/esm2022/lib/content-metadata/services/basic-properties.service.mjs +107 -0
  76. package/esm2022/lib/content-metadata/services/config/aspect-oriented-config.service.mjs +106 -0
  77. package/esm2022/lib/content-metadata/services/config/content-metadata-config.factory.mjs +76 -0
  78. package/esm2022/lib/content-metadata/services/config/indifferent-config.service.mjs +40 -0
  79. package/esm2022/lib/content-metadata/services/config/layout-oriented-config.service.mjs +108 -0
  80. package/esm2022/lib/content-metadata/services/config/property-group-reader.mjs +33 -0
  81. package/esm2022/lib/content-metadata/services/content-metadata.service.mjs +99 -0
  82. package/esm2022/lib/content-metadata/services/content-type-property.service.mjs +134 -0
  83. package/esm2022/lib/content-metadata/services/property-descriptors.service.mjs +52 -0
  84. package/esm2022/lib/content-metadata/services/property-groups-translator.service.mjs +169 -0
  85. package/esm2022/lib/content-node-selector/content-node-dialog.service.mjs +256 -0
  86. package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.component.mjs +617 -0
  87. package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.service.mjs +66 -0
  88. package/esm2022/lib/content-node-selector/content-node-selector.component-data.interface.mjs +18 -0
  89. package/esm2022/lib/content-node-selector/content-node-selector.component.mjs +205 -0
  90. package/esm2022/lib/content-node-selector/content-node-selector.module.mjs +50 -0
  91. package/esm2022/lib/content-node-selector/index.mjs +18 -0
  92. package/esm2022/lib/content-node-selector/name-location-cell/name-location-cell.component.mjs +48 -0
  93. package/esm2022/lib/content-node-selector/public-api.mjs +25 -0
  94. package/esm2022/lib/content-node-selector/site-dropdown/sites-dropdown.component.mjs +168 -0
  95. package/esm2022/lib/content-node-share/content-node-share.dialog.mjs +287 -0
  96. package/esm2022/lib/content-node-share/content-node-share.directive.mjs +102 -0
  97. package/esm2022/lib/content-node-share/content-node-share.module.mjs +35 -0
  98. package/esm2022/lib/content-node-share/content-node-share.settings.mjs +18 -0
  99. package/esm2022/lib/content-node-share/index.mjs +18 -0
  100. package/esm2022/lib/content-node-share/public-api.mjs +22 -0
  101. package/esm2022/lib/content-node-share/services/shared-links-api.service.mjs +83 -0
  102. package/esm2022/lib/content-type/content-type-dialog.component.mjs +57 -0
  103. package/esm2022/lib/content-type/content-type-metadata.interface.mjs +18 -0
  104. package/esm2022/lib/content-type/content-type.service.mjs +52 -0
  105. package/esm2022/lib/content-type/index.mjs +20 -0
  106. package/esm2022/lib/content.module.mjs +277 -0
  107. package/esm2022/lib/dialogs/category-selector/category-selector.dialog.mjs +51 -0
  108. package/esm2022/lib/dialogs/dialog.module.mjs +52 -0
  109. package/esm2022/lib/dialogs/download-zip/download-zip.dialog.mjs +111 -0
  110. package/esm2022/lib/dialogs/download-zip/download-zip.dialog.module.mjs +38 -0
  111. package/esm2022/lib/dialogs/download-zip/services/download-zip.service.mjs +66 -0
  112. package/esm2022/lib/dialogs/folder/folder-name.validators.mjs +44 -0
  113. package/esm2022/lib/dialogs/folder/folder.dialog.mjs +146 -0
  114. package/esm2022/lib/dialogs/index.mjs +18 -0
  115. package/esm2022/lib/dialogs/library/library.dialog.mjs +224 -0
  116. package/esm2022/lib/dialogs/node-lock/node-lock.dialog.mjs +115 -0
  117. package/esm2022/lib/dialogs/public-api.mjs +25 -0
  118. package/esm2022/lib/directives/auto-focus.directive.mjs +38 -0
  119. package/esm2022/lib/directives/check-allowable-operation.directive.mjs +126 -0
  120. package/esm2022/lib/directives/content-directive.module.mjs +75 -0
  121. package/esm2022/lib/directives/index.mjs +18 -0
  122. package/esm2022/lib/directives/library-favorite.directive.mjs +119 -0
  123. package/esm2022/lib/directives/library-membership.directive.mjs +202 -0
  124. package/esm2022/lib/directives/node-counter.directive.mjs +59 -0
  125. package/esm2022/lib/directives/node-delete.directive.mjs +177 -0
  126. package/esm2022/lib/directives/node-download.directive.mjs +138 -0
  127. package/esm2022/lib/directives/node-favorite.directive.mjs +193 -0
  128. package/esm2022/lib/directives/node-lock.directive.mjs +57 -0
  129. package/esm2022/lib/directives/node-restore.directive.mjs +218 -0
  130. package/esm2022/lib/directives/public-api.mjs +28 -0
  131. package/esm2022/lib/document-list/components/content-action/content-action-list.component.mjs +60 -0
  132. package/esm2022/lib/document-list/components/content-action/content-action.component.mjs +196 -0
  133. package/esm2022/lib/document-list/components/document-list.component.mjs +965 -0
  134. package/esm2022/lib/document-list/components/document-list.token.mjs +21 -0
  135. package/esm2022/lib/document-list/components/file-auto-download/file-auto-download.component.mjs +42 -0
  136. package/esm2022/lib/document-list/components/filter-header/filter-header.component.mjs +107 -0
  137. package/esm2022/lib/document-list/components/library-name-column/library-name-column.component.mjs +131 -0
  138. package/esm2022/lib/document-list/components/library-role-column/library-role-column.component.mjs +91 -0
  139. package/esm2022/lib/document-list/components/library-status-column/library-status-column.component.mjs +86 -0
  140. package/esm2022/lib/document-list/components/name-column/name-column.component.mjs +118 -0
  141. package/esm2022/lib/document-list/components/node.event.mjs +30 -0
  142. package/esm2022/lib/document-list/components/trashcan-name-column/trashcan-name-column.component.mjs +83 -0
  143. package/esm2022/lib/document-list/data/image-resolver.model.mjs +18 -0
  144. package/esm2022/lib/document-list/data/row-filter.model.mjs +18 -0
  145. package/esm2022/lib/document-list/data/share-data-row.model.mjs +102 -0
  146. package/esm2022/lib/document-list/data/share-datatable-adapter.mjs +258 -0
  147. package/esm2022/lib/document-list/document-list.module.mjs +75 -0
  148. package/esm2022/lib/document-list/index.mjs +18 -0
  149. package/esm2022/lib/document-list/interfaces/document-list-loader.interface.mjs +18 -0
  150. package/esm2022/lib/document-list/models/content-action.model.mjs +59 -0
  151. package/esm2022/lib/document-list/models/document-folder.model.mjs +23 -0
  152. package/esm2022/lib/document-list/models/node-action.enum.mjs +27 -0
  153. package/esm2022/lib/document-list/models/permissions-style.model.mjs +27 -0
  154. package/esm2022/lib/document-list/models/permissions.model.mjs +26 -0
  155. package/esm2022/lib/document-list/models/preset.model.mjs +257 -0
  156. package/esm2022/lib/document-list/public-api.mjs +47 -0
  157. package/esm2022/lib/document-list/services/custom-resources.service.mjs +378 -0
  158. package/esm2022/lib/document-list/services/document-actions.service.mjs +142 -0
  159. package/esm2022/lib/document-list/services/document-list.service.mjs +175 -0
  160. package/esm2022/lib/document-list/services/folder-actions.service.mjs +137 -0
  161. package/esm2022/lib/document-list/services/lock.service.mjs +72 -0
  162. package/esm2022/lib/document-list/services/node-actions.service.mjs +122 -0
  163. package/esm2022/lib/group/index.mjs +18 -0
  164. package/esm2022/lib/group/public-api.mjs +18 -0
  165. package/esm2022/lib/group/services/group.service.mjs +84 -0
  166. package/esm2022/lib/infinite-scroll-datasource/index.mjs +18 -0
  167. package/esm2022/lib/infinite-scroll-datasource/infinite-scroll-datasource.mjs +69 -0
  168. package/esm2022/lib/infinite-scroll-datasource/public-api.mjs +18 -0
  169. package/esm2022/lib/interfaces/base-card-view-content-update.interface.mjs +18 -0
  170. package/esm2022/lib/interfaces/index.mjs +18 -0
  171. package/esm2022/lib/interfaces/library-entity.interface.mjs +18 -0
  172. package/esm2022/lib/interfaces/library-membership-error-event.interface.mjs +18 -0
  173. package/esm2022/lib/interfaces/library-membership-toggle-event.interface.mjs +18 -0
  174. package/esm2022/lib/interfaces/node-allowable-operation-subject.interface.mjs +18 -0
  175. package/esm2022/lib/interfaces/public-api.mjs +23 -0
  176. package/esm2022/lib/interfaces/restore-message-model.interface.mjs +19 -0
  177. package/esm2022/lib/legal-hold/index.mjs +18 -0
  178. package/esm2022/lib/legal-hold/public-api.mjs +18 -0
  179. package/esm2022/lib/legal-hold/services/legal-hold.service.mjs +136 -0
  180. package/esm2022/lib/material.module.mjs +183 -0
  181. package/esm2022/lib/mock/alfresco-api.service.mock.mjs +43 -0
  182. package/esm2022/lib/mock/date-range-search-filter.mock.mjs +65 -0
  183. package/esm2022/lib/mock/document-library.model.mock.mjs +84 -0
  184. package/esm2022/lib/mock/document-list.component.mock.mjs +364 -0
  185. package/esm2022/lib/mock/index.mjs +18 -0
  186. package/esm2022/lib/mock/new-version-uploader.service.mock.mjs +161 -0
  187. package/esm2022/lib/mock/public-api.mjs +27 -0
  188. package/esm2022/lib/mock/search-filter-mock.mjs +637 -0
  189. package/esm2022/lib/mock/search-query.mock.mjs +40 -0
  190. package/esm2022/lib/mock/search.component.mock.mjs +165 -0
  191. package/esm2022/lib/mock/search.service.mock.mjs +61 -0
  192. package/esm2022/lib/mock/sites-dropdown.component.mock.mjs +281 -0
  193. package/esm2022/lib/new-version-uploader/index.mjs +18 -0
  194. package/esm2022/lib/new-version-uploader/models/index.mjs +18 -0
  195. package/esm2022/lib/new-version-uploader/models/new-version-uploader.model.mjs +24 -0
  196. package/esm2022/lib/new-version-uploader/new-version-uploader.dialog.mjs +74 -0
  197. package/esm2022/lib/new-version-uploader/new-version-uploader.module.mjs +33 -0
  198. package/esm2022/lib/new-version-uploader/new-version-uploader.service.mjs +103 -0
  199. package/esm2022/lib/new-version-uploader/public-api.mjs +21 -0
  200. package/esm2022/lib/node-comments/index.mjs +18 -0
  201. package/esm2022/lib/node-comments/node-comments.component.mjs +50 -0
  202. package/esm2022/lib/node-comments/node-comments.module.mjs +33 -0
  203. package/esm2022/lib/node-comments/public-api.mjs +20 -0
  204. package/esm2022/lib/node-comments/services/node-comments.service.mjs +85 -0
  205. package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog-data.interface.mjs +18 -0
  206. package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog.component.mjs +123 -0
  207. package/esm2022/lib/permission-manager/components/add-permission/add-permission-panel.component.mjs +102 -0
  208. package/esm2022/lib/permission-manager/components/add-permission/add-permission.component.mjs +69 -0
  209. package/esm2022/lib/permission-manager/components/add-permission/search-config-permission.service.mjs +45 -0
  210. package/esm2022/lib/permission-manager/components/inherited-button.directive.mjs +67 -0
  211. package/esm2022/lib/permission-manager/components/node-path-column/node-path-column.component.mjs +56 -0
  212. package/esm2022/lib/permission-manager/components/permission-container/permission-container.component.mjs +102 -0
  213. package/esm2022/lib/permission-manager/components/permission-list/permission-list.component.mjs +87 -0
  214. package/esm2022/lib/permission-manager/components/permission-list/permission-list.service.mjs +219 -0
  215. package/esm2022/lib/permission-manager/components/pop-over.directive.mjs +134 -0
  216. package/esm2022/lib/permission-manager/components/user-icon-column/user-icon-column.component.mjs +88 -0
  217. package/esm2022/lib/permission-manager/components/user-name-column/user-name-column.component.mjs +82 -0
  218. package/esm2022/lib/permission-manager/components/user-role-column/user-role-column.component.mjs +111 -0
  219. package/esm2022/lib/permission-manager/index.mjs +18 -0
  220. package/esm2022/lib/permission-manager/models/member.model.mjs +59 -0
  221. package/esm2022/lib/permission-manager/models/permission.model.mjs +29 -0
  222. package/esm2022/lib/permission-manager/models/role.model.mjs +18 -0
  223. package/esm2022/lib/permission-manager/permission-manager.module.mjs +84 -0
  224. package/esm2022/lib/permission-manager/public-api.mjs +36 -0
  225. package/esm2022/lib/permission-manager/services/node-permission-dialog.service.mjs +78 -0
  226. package/esm2022/lib/permission-manager/services/node-permission.service.mjs +299 -0
  227. package/esm2022/lib/pipes/content-pipe.module.mjs +37 -0
  228. package/esm2022/lib/pipes/index.mjs +18 -0
  229. package/esm2022/lib/pipes/node-name-tooltip.pipe.mjs +69 -0
  230. package/esm2022/lib/pipes/public-api.mjs +19 -0
  231. package/esm2022/lib/prediction/index.mjs +18 -0
  232. package/esm2022/lib/prediction/public-api.mjs +18 -0
  233. package/esm2022/lib/prediction/services/index.mjs +18 -0
  234. package/esm2022/lib/prediction/services/prediction.service.mjs +57 -0
  235. package/esm2022/lib/search/components/empty-search-result.component.mjs +27 -0
  236. package/esm2022/lib/search/components/index.mjs +43 -0
  237. package/esm2022/lib/search/components/reset-search.directive.mjs +41 -0
  238. package/esm2022/lib/search/components/search-check-list/index.mjs +18 -0
  239. package/esm2022/lib/search/components/search-check-list/search-check-list.component.mjs +158 -0
  240. package/esm2022/lib/search/components/search-chip-autocomplete-input/index.mjs +18 -0
  241. package/esm2022/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.mjs +169 -0
  242. package/esm2022/lib/search/components/search-chip-list/search-chip-list.component.mjs +46 -0
  243. package/esm2022/lib/search/components/search-control.component.mjs +180 -0
  244. package/esm2022/lib/search/components/search-date-range-tabbed/index.mjs +22 -0
  245. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/date-range-type.mjs +23 -0
  246. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/in-last-date-type.mjs +23 -0
  247. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.component.mjs +196 -0
  248. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.mjs +18 -0
  249. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range-tabbed.component.mjs +201 -0
  250. package/esm2022/lib/search/components/search-datetime-range/index.mjs +18 -0
  251. package/esm2022/lib/search/components/search-datetime-range/search-datetime-range.component.mjs +223 -0
  252. package/esm2022/lib/search/components/search-facet-field/index.mjs +18 -0
  253. package/esm2022/lib/search/components/search-facet-field/search-facet-field.component.mjs +132 -0
  254. package/esm2022/lib/search/components/search-filter/index.mjs +19 -0
  255. package/esm2022/lib/search/components/search-filter/search-filter-card/search-filter-card.component.mjs +45 -0
  256. package/esm2022/lib/search/components/search-filter/search-filter.component.mjs +80 -0
  257. package/esm2022/lib/search/components/search-filter-autocomplete-chips/index.mjs +18 -0
  258. package/esm2022/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.mjs +154 -0
  259. package/esm2022/lib/search/components/search-filter-chips/index.mjs +23 -0
  260. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip/search-facet-chip.component.mjs +104 -0
  261. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-chip-tabbed.component.mjs +109 -0
  262. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-tabbed-content.component.mjs +129 -0
  263. package/esm2022/lib/search/components/search-filter-chips/search-filter-chips.component.mjs +63 -0
  264. package/esm2022/lib/search/components/search-filter-chips/search-filter-menu-card/search-filter-menu-card.component.mjs +43 -0
  265. package/esm2022/lib/search/components/search-filter-chips/search-widget-chip/search-widget-chip.component.mjs +109 -0
  266. package/esm2022/lib/search/components/search-filter-container/index.mjs +18 -0
  267. package/esm2022/lib/search/components/search-filter-container/search-filter-container.component.mjs +122 -0
  268. package/esm2022/lib/search/components/search-filter-tabbed/index.mjs +19 -0
  269. package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tab.directive.mjs +36 -0
  270. package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tabbed.component.mjs +63 -0
  271. package/esm2022/lib/search/components/search-form/index.mjs +18 -0
  272. package/esm2022/lib/search/components/search-form/search-form.component.mjs +52 -0
  273. package/esm2022/lib/search/components/search-input/index.mjs +18 -0
  274. package/esm2022/lib/search/components/search-input/search-input.component.mjs +108 -0
  275. package/esm2022/lib/search/components/search-logical-filter/index.mjs +18 -0
  276. package/esm2022/lib/search/components/search-logical-filter/search-logical-filter.component.mjs +163 -0
  277. package/esm2022/lib/search/components/search-number-range/index.mjs +18 -0
  278. package/esm2022/lib/search/components/search-number-range/search-number-range.component.mjs +154 -0
  279. package/esm2022/lib/search/components/search-panel/index.mjs +18 -0
  280. package/esm2022/lib/search/components/search-panel/search-panel.component.mjs +44 -0
  281. package/esm2022/lib/search/components/search-properties/file-size-condition.mjs +18 -0
  282. package/esm2022/lib/search/components/search-properties/file-size-operator.enum.mjs +23 -0
  283. package/esm2022/lib/search/components/search-properties/file-size-unit.enum.mjs +26 -0
  284. package/esm2022/lib/search/components/search-properties/index.mjs +22 -0
  285. package/esm2022/lib/search/components/search-properties/search-properties.component.mjs +244 -0
  286. package/esm2022/lib/search/components/search-properties/search-properties.mjs +18 -0
  287. package/esm2022/lib/search/components/search-radio/index.mjs +18 -0
  288. package/esm2022/lib/search/components/search-radio/search-radio.component.mjs +145 -0
  289. package/esm2022/lib/search/components/search-slider/index.mjs +18 -0
  290. package/esm2022/lib/search/components/search-slider/search-slider.component.mjs +119 -0
  291. package/esm2022/lib/search/components/search-sorting-picker/index.mjs +18 -0
  292. package/esm2022/lib/search/components/search-sorting-picker/search-sorting-picker.component.mjs +77 -0
  293. package/esm2022/lib/search/components/search-text/index.mjs +18 -0
  294. package/esm2022/lib/search/components/search-text/search-text.component.mjs +134 -0
  295. package/esm2022/lib/search/components/search-widget-container/index.mjs +18 -0
  296. package/esm2022/lib/search/components/search-widget-container/search-widget-container.component.mjs +113 -0
  297. package/esm2022/lib/search/components/search.component.mjs +152 -0
  298. package/esm2022/lib/search/forms/index.mjs +19 -0
  299. package/esm2022/lib/search/forms/live-error-state-matcher.mjs +23 -0
  300. package/esm2022/lib/search/forms/search-term-validator.mjs +26 -0
  301. package/esm2022/lib/search/index.mjs +18 -0
  302. package/esm2022/lib/search/mocks/index.mjs +18 -0
  303. package/esm2022/lib/search/mocks/search.service.mock.mjs +56 -0
  304. package/esm2022/lib/search/models/autocomplete-option.interface.mjs +22 -0
  305. package/esm2022/lib/search/models/facet-field-bucket.interface.mjs +18 -0
  306. package/esm2022/lib/search/models/facet-field.interface.mjs +29 -0
  307. package/esm2022/lib/search/models/facet-query.interface.mjs +18 -0
  308. package/esm2022/lib/search/models/facet-widget.interface.mjs +18 -0
  309. package/esm2022/lib/search/models/filter-query.interface.mjs +18 -0
  310. package/esm2022/lib/search/models/filter-search.interface.mjs +18 -0
  311. package/esm2022/lib/search/models/index.mjs +34 -0
  312. package/esm2022/lib/search/models/response-facet-query-list.model.mjs +31 -0
  313. package/esm2022/lib/search/models/search-category.interface.mjs +18 -0
  314. package/esm2022/lib/search/models/search-configuration.interface.mjs +18 -0
  315. package/esm2022/lib/search/models/search-filter-list.model.mjs +148 -0
  316. package/esm2022/lib/search/models/search-form.interface.mjs +18 -0
  317. package/esm2022/lib/search/models/search-range.interface.mjs +18 -0
  318. package/esm2022/lib/search/models/search-sorting-definition.interface.mjs +18 -0
  319. package/esm2022/lib/search/models/search-widget-settings.interface.mjs +18 -0
  320. package/esm2022/lib/search/models/search-widget.interface.mjs +18 -0
  321. package/esm2022/lib/search/models/tabbed-facet-field.interface.mjs +18 -0
  322. package/esm2022/lib/search/public-api.mjs +24 -0
  323. package/esm2022/lib/search/search-configuration.token.mjs +19 -0
  324. package/esm2022/lib/search/search.module.mjs +192 -0
  325. package/esm2022/lib/search/services/base-query-builder.service.mjs +509 -0
  326. package/esm2022/lib/search/services/index.mjs +24 -0
  327. package/esm2022/lib/search/services/search-configuration.service.mjs +50 -0
  328. package/esm2022/lib/search/services/search-facet-filters.service.mjs +374 -0
  329. package/esm2022/lib/search/services/search-filter.service.mjs +56 -0
  330. package/esm2022/lib/search/services/search-header-query-builder.service.mjs +136 -0
  331. package/esm2022/lib/search/services/search-query-builder.service.mjs +48 -0
  332. package/esm2022/lib/search/services/search.service.mjs +89 -0
  333. package/esm2022/lib/search-ai/index.mjs +18 -0
  334. package/esm2022/lib/search-ai/models/search-ai-input-state.mjs +18 -0
  335. package/esm2022/lib/search-ai/public-api.mjs +19 -0
  336. package/esm2022/lib/search-ai/services/search-ai.service.mjs +103 -0
  337. package/esm2022/lib/security/index.mjs +18 -0
  338. package/esm2022/lib/security/public-api.mjs +18 -0
  339. package/esm2022/lib/security/services/models/security-controls-group-response.interface.mjs +18 -0
  340. package/esm2022/lib/security/services/models/security-controls-mark-response.interface.mjs +18 -0
  341. package/esm2022/lib/security/services/security-controls-groups-marks-security.service.mjs +274 -0
  342. package/esm2022/lib/security-options-loader/security-options-loader.service.mjs +43 -0
  343. package/esm2022/lib/services/alfresco-api.interface.mjs +18 -0
  344. package/esm2022/lib/services/alfresco-api.service.mjs +120 -0
  345. package/esm2022/lib/services/index.mjs +18 -0
  346. package/esm2022/lib/services/public-api.mjs +18 -0
  347. package/esm2022/lib/tag/index.mjs +18 -0
  348. package/esm2022/lib/tag/public-api.mjs +24 -0
  349. package/esm2022/lib/tag/services/tag.service.mjs +171 -0
  350. package/esm2022/lib/tag/tag-actions/tag-actions.component.mjs +114 -0
  351. package/esm2022/lib/tag/tag-list/tag-list.component.mjs +98 -0
  352. package/esm2022/lib/tag/tag-node-list/tag-node-list.component.mjs +80 -0
  353. package/esm2022/lib/tag/tag.module.mjs +37 -0
  354. package/esm2022/lib/tag/tags-creator/tags-creator-mode.mjs +27 -0
  355. package/esm2022/lib/tag/tags-creator/tags-creator.component.mjs +370 -0
  356. package/esm2022/lib/testing/content.testing.module.mjs +56 -0
  357. package/esm2022/lib/tree/components/tree.component.mjs +312 -0
  358. package/esm2022/lib/tree/index.mjs +18 -0
  359. package/esm2022/lib/tree/models/tree-context-menu-result.interface.mjs +18 -0
  360. package/esm2022/lib/tree/models/tree-node.interface.mjs +22 -0
  361. package/esm2022/lib/tree/models/tree-response.interface.mjs +18 -0
  362. package/esm2022/lib/tree/public-api.mjs +23 -0
  363. package/esm2022/lib/tree/services/tree.service.mjs +134 -0
  364. package/esm2022/lib/tree/tree.module.mjs +33 -0
  365. package/esm2022/lib/tree-view/components/tree-view.component.mjs +75 -0
  366. package/esm2022/lib/tree-view/data/tree-view-datasource.mjs +99 -0
  367. package/esm2022/lib/tree-view/index.mjs +18 -0
  368. package/esm2022/lib/tree-view/models/tree-view.model.mjs +28 -0
  369. package/esm2022/lib/tree-view/public-api.mjs +22 -0
  370. package/esm2022/lib/tree-view/services/tree-view.service.mjs +38 -0
  371. package/esm2022/lib/tree-view/tree-view.module.mjs +33 -0
  372. package/esm2022/lib/upload/components/base-upload/upload-base.mjs +176 -0
  373. package/esm2022/lib/upload/components/file-uploading-dialog.component.mjs +190 -0
  374. package/esm2022/lib/upload/components/file-uploading-list-row.component.mjs +92 -0
  375. package/esm2022/lib/upload/components/file-uploading-list.component.mjs +124 -0
  376. package/esm2022/lib/upload/components/upload-button.component.mjs +133 -0
  377. package/esm2022/lib/upload/components/upload-drag-area.component.mjs +112 -0
  378. package/esm2022/lib/upload/components/upload-files.event.mjs +41 -0
  379. package/esm2022/lib/upload/components/upload-version-button.component.mjs +54 -0
  380. package/esm2022/lib/upload/directives/file-draggable.directive.mjs +154 -0
  381. package/esm2022/lib/upload/directives/toggle-icon.directive.mjs +75 -0
  382. package/esm2022/lib/upload/index.mjs +18 -0
  383. package/esm2022/lib/upload/pipes/file-upload-error.pipe.mjs +39 -0
  384. package/esm2022/lib/upload/public-api.mjs +29 -0
  385. package/esm2022/lib/upload/upload.module.mjs +72 -0
  386. package/esm2022/lib/version-compatibility/index.mjs +18 -0
  387. package/esm2022/lib/version-compatibility/public-api.mjs +20 -0
  388. package/esm2022/lib/version-compatibility/version-compatibility-factory.mjs +26 -0
  389. package/esm2022/lib/version-compatibility/version-compatibility.directive.mjs +53 -0
  390. package/esm2022/lib/version-compatibility/version-compatibility.module.mjs +33 -0
  391. package/esm2022/lib/version-compatibility/version-compatibility.service.mjs +76 -0
  392. package/esm2022/lib/version-manager/content-version.service.mjs +53 -0
  393. package/esm2022/lib/version-manager/index.mjs +18 -0
  394. package/esm2022/lib/version-manager/public-api.mjs +23 -0
  395. package/esm2022/lib/version-manager/version-comparison.component.mjs +42 -0
  396. package/esm2022/lib/version-manager/version-list.component.mjs +215 -0
  397. package/esm2022/lib/version-manager/version-manager.component.mjs +145 -0
  398. package/esm2022/lib/version-manager/version-manager.module.mjs +48 -0
  399. package/esm2022/lib/version-manager/version-upload.component.mjs +154 -0
  400. package/esm2022/lib/viewer/alfresco-viewer.module.mjs +33 -0
  401. package/esm2022/lib/viewer/components/alfresco-viewer.component.mjs +408 -0
  402. package/esm2022/lib/viewer/index.mjs +18 -0
  403. package/esm2022/lib/viewer/public-api.mjs +19 -0
  404. package/esm2022/public-api.mjs +56 -0
  405. package/fesm2022/adf-content-services.mjs +790 -831
  406. package/fesm2022/adf-content-services.mjs.map +1 -1
  407. package/lib/aspect-list/aspect-list.component.d.ts +0 -4
  408. package/lib/aspect-list/public-api.d.ts +0 -1
  409. package/lib/aspect-list/services/aspect-list.service.d.ts +4 -6
  410. package/lib/category/categories-management/categories-management.component.d.ts +0 -4
  411. package/lib/new-version-uploader/new-version-uploader.dialog.scss +1 -1
  412. package/lib/upload/components/base-upload/upload-base.d.ts +1 -1
  413. package/package.json +5 -3
  414. package/lib/aspect-list/interfaces/custom-aspect-paging.interface.d.ts +0 -21
@@ -0,0 +1,312 @@
1
+ /*!
2
+ * @license
3
+ * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import { Component, EventEmitter, HostBinding, Input, Output, QueryList, TemplateRef, ViewChildren, ViewEncapsulation } from '@angular/core';
18
+ import { BehaviorSubject, merge, Subject } from 'rxjs';
19
+ import { TreeNodeType } from '../models/tree-node.interface';
20
+ import { TreeService } from '../services/tree.service';
21
+ import { ContextMenuDirective, IconComponent, UserPreferencesService } from '@alfresco/adf-core';
22
+ import { SelectionModel } from '@angular/cdk/collections';
23
+ import { MatCheckbox, MatCheckboxModule } from '@angular/material/checkbox';
24
+ import { takeUntil } from 'rxjs/operators';
25
+ import { CommonModule } from '@angular/common';
26
+ import { TranslatePipe } from '@ngx-translate/core';
27
+ import { MatTreeModule } from '@angular/material/tree';
28
+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
29
+ import { MatButtonModule } from '@angular/material/button';
30
+ import { MatMenuModule } from '@angular/material/menu';
31
+ import { MatIconModule } from '@angular/material/icon';
32
+ import * as i0 from "@angular/core";
33
+ import * as i1 from "../services/tree.service";
34
+ import * as i2 from "@alfresco/adf-core";
35
+ import * as i3 from "@angular/common";
36
+ import * as i4 from "@angular/material/tree";
37
+ import * as i5 from "@angular/material/progress-spinner";
38
+ import * as i6 from "@angular/material/button";
39
+ import * as i7 from "@angular/material/checkbox";
40
+ import * as i8 from "@angular/material/menu";
41
+ import * as i9 from "@angular/material/icon";
42
+ export class TreeComponent {
43
+ constructor(treeService, userPreferenceService) {
44
+ this.treeService = treeService;
45
+ this.userPreferenceService = userPreferenceService;
46
+ /** Variable defining if tree header should be sticky. By default set to false */
47
+ this.stickyHeader = false;
48
+ /** Variable defining if tree nodes should be selectable. By default set to false */
49
+ this.selectableNodes = false;
50
+ /** Icon shown when node has children and is collapsed. By default set to chevron_right */
51
+ this.expandIcon = 'chevron_right';
52
+ /** Icon shown when node is expanded. By default set to expand_more */
53
+ this.collapseIcon = 'expand_more';
54
+ /** Emitted when pagination has been changed */
55
+ this.paginationChanged = new EventEmitter();
56
+ /** Emitted when any context menu option is selected */
57
+ this.contextMenuOptionSelected = new EventEmitter();
58
+ this.loadingRootSource = new BehaviorSubject(false);
59
+ this.contextMenuOptionsChanged$ = new Subject();
60
+ this.treeNodesSelection = new SelectionModel(true, [], true, (node1, node2) => node1.id === node2.id);
61
+ }
62
+ set contextMenuSource(contextMenuSource) {
63
+ this._contextMenuSource = contextMenuSource;
64
+ }
65
+ /** Array of context menu options which should be displayed for each row. */
66
+ set contextMenuOptions(contextMenuOptions) {
67
+ this.contextMenuOptionsChanged$.next();
68
+ if (contextMenuOptions) {
69
+ this._contextMenuOptions = contextMenuOptions.map((option) => {
70
+ if (!option.subject) {
71
+ option = {
72
+ ...option,
73
+ subject: new Subject()
74
+ };
75
+ }
76
+ return option;
77
+ });
78
+ merge(...this.contextMenuOptions.map((option) => option.subject))
79
+ .pipe(takeUntil(this.contextMenuOptionsChanged$))
80
+ .subscribe((option) => {
81
+ this.contextMenuOptionSelected.emit({
82
+ row: this._contextMenuSource,
83
+ contextMenuOption: option
84
+ });
85
+ });
86
+ }
87
+ else {
88
+ this._contextMenuOptions = contextMenuOptions;
89
+ }
90
+ }
91
+ get contextMenuOptions() {
92
+ return this._contextMenuOptions;
93
+ }
94
+ ngOnInit() {
95
+ this.loadingRoot$ = this.loadingRootSource.asObservable();
96
+ this.refreshTree(0, this.userPreferenceService.paginationSize);
97
+ this.treeNodesSelection.changed.subscribe((selectionChange) => {
98
+ this.onTreeSelectionChange(selectionChange);
99
+ });
100
+ }
101
+ ngOnDestroy() {
102
+ this.contextMenuOptionsChanged$.next();
103
+ this.contextMenuOptionsChanged$.complete();
104
+ }
105
+ /**
106
+ * Checks if node is LoadMoreNode node
107
+ *
108
+ * @param _idx (unused)
109
+ * @param node node to be checked
110
+ * @returns `true` if there are more items to load, otherwise `false`
111
+ */
112
+ isLoadMoreNode(_idx, node) {
113
+ return node.nodeType === TreeNodeType.LoadMoreNode;
114
+ }
115
+ /**
116
+ * Checks if tree is empty
117
+ *
118
+ * @returns boolean
119
+ */
120
+ isEmpty() {
121
+ return this.treeService.isEmpty();
122
+ }
123
+ /**
124
+ * Returns action icon based on expanded/collapsed node state.
125
+ *
126
+ * @param node node to be checked
127
+ * @returns collapse or expand icon
128
+ */
129
+ expandCollapseIconValue(node) {
130
+ return this.treeService.treeControl.isExpanded(node) ? this.collapseIcon : this.expandIcon;
131
+ }
132
+ /**
133
+ * Refreshes the tree, root nodes are reloaded, tree selection is cleared.
134
+ *
135
+ * @param skipCount Number of root nodes to skip.
136
+ * @param maxItems Maximum number of nodes returned from Observable.
137
+ * @param searchTerm Specifies if categories should be filtered out by name or not. If not specified then returns categories without filtering.
138
+ */
139
+ refreshTree(skipCount, maxItems, searchTerm) {
140
+ this.loadingRootSource.next(true);
141
+ this.treeNodesSelection.clear();
142
+ this.treeService.getSubNodes('-root-', skipCount, maxItems, searchTerm).subscribe((response) => {
143
+ this.treeService.treeNodes = response.entries;
144
+ this.treeNodesSelection.deselect(...response.entries);
145
+ this.paginationChanged.emit(response.pagination);
146
+ this.loadingRootSource.next(false);
147
+ });
148
+ }
149
+ /**
150
+ * Collapses or expanding the node based on its current state
151
+ *
152
+ * @param node node to be collapsed/expanded
153
+ */
154
+ expandCollapseNode(node) {
155
+ if (node.hasChildren && !node.isLoading) {
156
+ if (this.treeService.treeControl.isExpanded(node)) {
157
+ this.treeService.collapseNode(node);
158
+ }
159
+ else {
160
+ node.isLoading = true;
161
+ this.treeService.getSubNodes(node.id, 0, this.userPreferenceService.paginationSize).subscribe((response) => {
162
+ this.treeService.expandNode(node, response.entries);
163
+ node.isLoading = false;
164
+ if (this.treeNodesSelection.isSelected(node)) {
165
+ //timeout used to update nodeCheckboxes query list after new nodes are added so they can be selected
166
+ setTimeout(() => {
167
+ this.treeNodesSelection.select(...response.entries);
168
+ });
169
+ }
170
+ });
171
+ }
172
+ }
173
+ }
174
+ /**
175
+ * Loads more subnode for a given parent node
176
+ *
177
+ * @param node parent node
178
+ */
179
+ loadMoreSubnodes(node) {
180
+ node.isLoading = true;
181
+ const parentNode = this.treeService.getParentNode(node.parentId);
182
+ this.treeService.removeNode(node);
183
+ const loadedChildren = this.treeService.getChildren(parentNode).length;
184
+ this.treeService
185
+ .getSubNodes(parentNode.id, loadedChildren, this.userPreferenceService.paginationSize)
186
+ .subscribe((response) => {
187
+ this.treeService.appendNodes(parentNode, response.entries);
188
+ node.isLoading = false;
189
+ if (this.treeNodesSelection.isSelected(parentNode)) {
190
+ //timeout used to update nodeCheckboxes query list after new nodes are added so they can be selected
191
+ setTimeout(() => {
192
+ this.treeNodesSelection.select(...response.entries);
193
+ });
194
+ }
195
+ });
196
+ }
197
+ /**
198
+ * When node is selected it selects all its descendants
199
+ *
200
+ * @param node selected node
201
+ */
202
+ onNodeSelected(node) {
203
+ this.treeNodesSelection.toggle(node);
204
+ const descendants = this.treeService.treeControl.getDescendants(node).filter(this.isRegularNode);
205
+ if (descendants.length > 0) {
206
+ this.treeNodesSelection.isSelected(node)
207
+ ? this.treeNodesSelection.select(...descendants)
208
+ : this.treeNodesSelection.deselect(...descendants);
209
+ }
210
+ this.checkParentsSelection(node);
211
+ }
212
+ /**
213
+ * Checks if all descendants of a node are selected
214
+ *
215
+ * @param node selected node
216
+ * @returns boolean
217
+ */
218
+ descendantsAllSelected(node) {
219
+ const descendants = this.treeService.treeControl.getDescendants(node).filter(this.isRegularNode);
220
+ return descendants.length > 0 && descendants.every((descendant) => this.treeNodesSelection.isSelected(descendant));
221
+ }
222
+ /**
223
+ * Checks if some descendants of a node are selected
224
+ *
225
+ * @param node selected node
226
+ * @returns boolean
227
+ */
228
+ descendantsPartiallySelected(node) {
229
+ const descendants = this.treeService.treeControl.getDescendants(node).filter(this.isRegularNode);
230
+ return (descendants.length > 0 &&
231
+ !this.descendantsAllSelected(node) &&
232
+ descendants.some((descendant) => this.treeNodesSelection.isSelected(descendant)));
233
+ }
234
+ checkParentsSelection(node) {
235
+ let parent = this.treeService.getParentNode(node.parentId);
236
+ while (parent) {
237
+ this.checkRootNodeSelection(parent);
238
+ parent = this.treeService.getParentNode(parent.parentId);
239
+ }
240
+ }
241
+ checkRootNodeSelection(node) {
242
+ const nodeSelected = this.treeNodesSelection.isSelected(node);
243
+ const descAllSelected = this.descendantsAllSelected(node);
244
+ if (nodeSelected && !descAllSelected) {
245
+ this.treeNodesSelection.deselect(node);
246
+ }
247
+ else if (!nodeSelected && descAllSelected) {
248
+ this.treeNodesSelection.select(node);
249
+ }
250
+ }
251
+ onTreeSelectionChange(selectionChange) {
252
+ selectionChange.removed.forEach((unselectedNode) => {
253
+ if (this.isRegularNode(unselectedNode)) {
254
+ this.nodeCheckboxes.find((checkbox) => checkbox.id === unselectedNode.id).checked = false;
255
+ }
256
+ });
257
+ selectionChange.added.forEach((selectedNode) => {
258
+ if (this.isRegularNode(selectedNode)) {
259
+ this.nodeCheckboxes.find((checkbox) => checkbox.id === selectedNode.id).checked = true;
260
+ }
261
+ });
262
+ }
263
+ isRegularNode(node) {
264
+ return node.nodeType !== TreeNodeType.LoadMoreNode;
265
+ }
266
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TreeComponent, deps: [{ token: i1.TreeService }, { token: i2.UserPreferencesService }], target: i0.ɵɵFactoryTarget.Component }); }
267
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TreeComponent, isStandalone: true, selector: "adf-tree", inputs: { emptyContentTemplate: "emptyContentTemplate", nodeActionsMenuTemplate: "nodeActionsMenuTemplate", stickyHeader: "stickyHeader", selectableNodes: "selectableNodes", displayName: "displayName", loadMoreSuffix: "loadMoreSuffix", expandIcon: "expandIcon", collapseIcon: "collapseIcon", contextMenuOptions: "contextMenuOptions" }, outputs: { paginationChanged: "paginationChanged", contextMenuOptionSelected: "contextMenuOptionSelected" }, host: { properties: { "class.adf-tree-sticky-header": "this.stickyHeader" }, classAttribute: "adf-tree" }, viewQueries: [{ propertyName: "nodeCheckboxes", predicate: MatCheckbox, descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"(loadingRoot$ | async) === false; else loadingSpinner\">\n <ng-container *ngIf=\"!this.isEmpty(); else emptyContent\">\n <div class=\"adf-tree-row adf-tree-header\" *ngIf=\"displayName\">\n <div class=\"adf-tree-cell adf-tree-cell-header\" data-automation-id=\"tree-header-display-name\">\n <span class=\"adf-tree-cell-value\">\n {{ displayName | translate }}\n </span>\n </div>\n </div>\n <mat-tree\n class=\"adf-tree-body\"\n [dataSource]=\"treeService\"\n [treeControl]=\"treeService.treeControl\">\n <mat-tree-node\n class=\"adf-tree-load-more-row\"\n [attr.data-automation-id]=\"'loadMoreSubnodes_' + node.parentId\"\n *matTreeNodeDef=\"let node when isLoadMoreNode\"\n matTreeNodePadding>\n <div class=\"adf-tree-expand-collapse-container\">\n <button class=\"adf-tree-load-more-button\" mat-icon-button (click)=\"loadMoreSubnodes(node)\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"24\"\n *ngIf=\"node.isLoading; else loadMoreIcon\" />\n <ng-template #loadMoreIcon>\n <adf-icon [value]=\"'chevron_right'\" />\n </ng-template>\n </button>\n </div>\n <div class=\"adf-tree-cell\">\n <span\n class=\"adf-tree-cell-value\"\n tabindex=\"0\"\n role=\"button\"\n (keyup.enter)=\"loadMoreSubnodes(node)\"\n (click)=\"loadMoreSubnodes(node)\">\n {{ 'ADF-TREE.LOAD-MORE-BUTTON' | translate: { name: loadMoreSuffix } }}\n </span>\n </div>\n </mat-tree-node>\n <mat-tree-node\n class=\"adf-tree-row\"\n [attr.data-automation-id]=\"'node_' + node.id\"\n *matTreeNodeDef=\"let node\"\n matTreeNodePadding\n [adf-context-menu]=\"contextMenuOptions\"\n [adf-context-menu-enabled]=\"!!contextMenuOptions\"\n (contextmenu)=\"contextMenuSource = node\">\n <div class=\"adf-tree-expand-collapse-container\">\n <button *ngIf=\"node.hasChildren\"\n class=\"adf-tree-expand-collapse-button\"\n (click)=\"expandCollapseNode(node)\"\n mat-icon-button>\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"24\"\n *ngIf=\"node.isLoading; else expandCollapseIcon\" />\n <ng-template #expandCollapseIcon>\n <adf-icon [value]=\"expandCollapseIconValue(node)\" />\n </ng-template>\n </button>\n </div>\n <ng-container *ngIf=\"selectableNodes\">\n <mat-checkbox *ngIf=\"node.hasChildren; else noChildrenNodeCheckbox\"\n color=\"primary\"\n [id]=\"node.id\"\n [checked]=\"descendantsAllSelected(node)\"\n [indeterminate]=\"descendantsPartiallySelected(node)\"\n (change)=\"onNodeSelected(node)\"\n data-automation-id=\"has-children-node-checkbox\" />\n <ng-template #noChildrenNodeCheckbox>\n <mat-checkbox\n color=\"primary\"\n [id]=\"node.id\"\n [checked]=\"treeNodesSelection.isSelected(node)\"\n (change)=\"onNodeSelected(node)\"\n data-automation-id=\"no-children-node-checkbox\" />\n </ng-template>\n </ng-container>\n <div class=\"adf-tree-cell\">\n <span\n class=\"adf-tree-cell-value\"\n [class.adf-tree-clickable-cell-value]=\"node.hasChildren\"\n tabindex=\"0\"\n role=\"button\"\n (keyup.enter)=\"expandCollapseNode(node)\"\n (click)=\"expandCollapseNode(node)\">\n {{ node.nodeName }}\n </span>\n </div>\n <div class=\"adf-tree-actions\">\n <button mat-icon-button\n [matMenuTriggerFor]=\"menu\"\n [attr.id]=\"'action_menu_right_' + node.id\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <ng-template\n [ngTemplateOutlet]=\"nodeActionsMenuTemplate\"\n [ngTemplateOutletContext]=\"{ node: node }\" />\n </mat-menu>\n </div>\n </mat-tree-node>\n </mat-tree>\n </ng-container>\n</ng-container>\n\n<ng-template #emptyContent>\n <ng-template [ngTemplateOutlet]=\"emptyContentTemplate\" />\n</ng-template>\n\n<ng-template #loadingSpinner>\n <div class=\"adf-tree-loading-spinner-container\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\" />\n </div>\n</ng-template>\n", styles: [".adf-tree-sticky-header{display:flex;flex-direction:column;height:100%}.adf-tree-sticky-header mat-tree{overflow-y:scroll}.adf-tree-load-more-row .adf-tree-cell-value,.adf-tree-clickable-cell-value{cursor:pointer}.adf-tree-row,.adf-tree-load-more-row{transition:all .3s ease;display:flex;align-items:center;padding-left:15px;padding-right:15px;transition-property:background-color;border-bottom:1px solid var(--adf-theme-foreground-text-color-007);min-height:56px;-webkit-user-select:none;user-select:none}.adf-tree-row .adf-tree-expand-collapse-container,.adf-tree-load-more-row .adf-tree-expand-collapse-container{min-width:55px}.adf-tree-row:hover,.adf-tree-load-more-row:hover{background-color:var(--adf-theme-background-hover-color)}.adf-tree-row:hover .adf-tree-actions,.adf-tree-load-more-row:hover .adf-tree-actions{display:flex}.adf-tree-row:focus,.adf-tree-load-more-row:focus{background-color:var(--adf-theme-background-hover-color);outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-tree-row .adf-tree-expand-collapse-button,.adf-tree-row .adf-tree-load-more-button,.adf-tree-load-more-row .adf-tree-expand-collapse-button,.adf-tree-load-more-row .adf-tree-load-more-button{display:flex;align-items:center;justify-content:center;margin-left:15px}.adf-tree-row .adf-tree-cell,.adf-tree-load-more-row .adf-tree-cell{color:var(--adf-theme-foreground-text-color);width:100%}.adf-tree-row .adf-tree-cell .adf-tree-cell-value,.adf-tree-load-more-row .adf-tree-cell .adf-tree-cell-value{display:inline-block;padding:10px;word-break:break-word}.adf-tree-header{display:flex;width:fit-content;min-width:100%;box-sizing:border-box}.adf-tree-header .adf-tree-cell-header:has(.adf-tree-cell-value){cursor:pointer;position:relative;vertical-align:bottom;text-overflow:ellipsis;font-weight:700;line-height:24px;letter-spacing:0;min-height:56px;font-size:12px;color:var(--adf-theme-foreground-text-color);box-sizing:border-box;padding-top:12px}.adf-tree-header .adf-tree-cell-header:has(.adf-tree-cell-value):focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-tree-loading-spinner-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i4.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i4.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "component", type: i4.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i4.MatTreeNode, selector: "mat-tree-node", inputs: ["tabIndex", "disabled"], outputs: ["activation", "expandedChange"], exportAs: ["matTreeNode"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: IconComponent, selector: "adf-icon", inputs: ["color", "fontSet", "value"] }, { kind: "directive", type: ContextMenuDirective, selector: "[adf-context-menu]", inputs: ["adf-context-menu", "adf-context-menu-enabled"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], encapsulation: i0.ViewEncapsulation.None }); }
268
+ }
269
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TreeComponent, decorators: [{
270
+ type: Component,
271
+ args: [{ selector: 'adf-tree', standalone: true, imports: [
272
+ CommonModule,
273
+ TranslatePipe,
274
+ MatTreeModule,
275
+ MatProgressSpinnerModule,
276
+ MatButtonModule,
277
+ IconComponent,
278
+ ContextMenuDirective,
279
+ MatCheckboxModule,
280
+ MatMenuModule,
281
+ MatIconModule
282
+ ], host: { class: 'adf-tree' }, encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"(loadingRoot$ | async) === false; else loadingSpinner\">\n <ng-container *ngIf=\"!this.isEmpty(); else emptyContent\">\n <div class=\"adf-tree-row adf-tree-header\" *ngIf=\"displayName\">\n <div class=\"adf-tree-cell adf-tree-cell-header\" data-automation-id=\"tree-header-display-name\">\n <span class=\"adf-tree-cell-value\">\n {{ displayName | translate }}\n </span>\n </div>\n </div>\n <mat-tree\n class=\"adf-tree-body\"\n [dataSource]=\"treeService\"\n [treeControl]=\"treeService.treeControl\">\n <mat-tree-node\n class=\"adf-tree-load-more-row\"\n [attr.data-automation-id]=\"'loadMoreSubnodes_' + node.parentId\"\n *matTreeNodeDef=\"let node when isLoadMoreNode\"\n matTreeNodePadding>\n <div class=\"adf-tree-expand-collapse-container\">\n <button class=\"adf-tree-load-more-button\" mat-icon-button (click)=\"loadMoreSubnodes(node)\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"24\"\n *ngIf=\"node.isLoading; else loadMoreIcon\" />\n <ng-template #loadMoreIcon>\n <adf-icon [value]=\"'chevron_right'\" />\n </ng-template>\n </button>\n </div>\n <div class=\"adf-tree-cell\">\n <span\n class=\"adf-tree-cell-value\"\n tabindex=\"0\"\n role=\"button\"\n (keyup.enter)=\"loadMoreSubnodes(node)\"\n (click)=\"loadMoreSubnodes(node)\">\n {{ 'ADF-TREE.LOAD-MORE-BUTTON' | translate: { name: loadMoreSuffix } }}\n </span>\n </div>\n </mat-tree-node>\n <mat-tree-node\n class=\"adf-tree-row\"\n [attr.data-automation-id]=\"'node_' + node.id\"\n *matTreeNodeDef=\"let node\"\n matTreeNodePadding\n [adf-context-menu]=\"contextMenuOptions\"\n [adf-context-menu-enabled]=\"!!contextMenuOptions\"\n (contextmenu)=\"contextMenuSource = node\">\n <div class=\"adf-tree-expand-collapse-container\">\n <button *ngIf=\"node.hasChildren\"\n class=\"adf-tree-expand-collapse-button\"\n (click)=\"expandCollapseNode(node)\"\n mat-icon-button>\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"24\"\n *ngIf=\"node.isLoading; else expandCollapseIcon\" />\n <ng-template #expandCollapseIcon>\n <adf-icon [value]=\"expandCollapseIconValue(node)\" />\n </ng-template>\n </button>\n </div>\n <ng-container *ngIf=\"selectableNodes\">\n <mat-checkbox *ngIf=\"node.hasChildren; else noChildrenNodeCheckbox\"\n color=\"primary\"\n [id]=\"node.id\"\n [checked]=\"descendantsAllSelected(node)\"\n [indeterminate]=\"descendantsPartiallySelected(node)\"\n (change)=\"onNodeSelected(node)\"\n data-automation-id=\"has-children-node-checkbox\" />\n <ng-template #noChildrenNodeCheckbox>\n <mat-checkbox\n color=\"primary\"\n [id]=\"node.id\"\n [checked]=\"treeNodesSelection.isSelected(node)\"\n (change)=\"onNodeSelected(node)\"\n data-automation-id=\"no-children-node-checkbox\" />\n </ng-template>\n </ng-container>\n <div class=\"adf-tree-cell\">\n <span\n class=\"adf-tree-cell-value\"\n [class.adf-tree-clickable-cell-value]=\"node.hasChildren\"\n tabindex=\"0\"\n role=\"button\"\n (keyup.enter)=\"expandCollapseNode(node)\"\n (click)=\"expandCollapseNode(node)\">\n {{ node.nodeName }}\n </span>\n </div>\n <div class=\"adf-tree-actions\">\n <button mat-icon-button\n [matMenuTriggerFor]=\"menu\"\n [attr.id]=\"'action_menu_right_' + node.id\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <ng-template\n [ngTemplateOutlet]=\"nodeActionsMenuTemplate\"\n [ngTemplateOutletContext]=\"{ node: node }\" />\n </mat-menu>\n </div>\n </mat-tree-node>\n </mat-tree>\n </ng-container>\n</ng-container>\n\n<ng-template #emptyContent>\n <ng-template [ngTemplateOutlet]=\"emptyContentTemplate\" />\n</ng-template>\n\n<ng-template #loadingSpinner>\n <div class=\"adf-tree-loading-spinner-container\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\" />\n </div>\n</ng-template>\n", styles: [".adf-tree-sticky-header{display:flex;flex-direction:column;height:100%}.adf-tree-sticky-header mat-tree{overflow-y:scroll}.adf-tree-load-more-row .adf-tree-cell-value,.adf-tree-clickable-cell-value{cursor:pointer}.adf-tree-row,.adf-tree-load-more-row{transition:all .3s ease;display:flex;align-items:center;padding-left:15px;padding-right:15px;transition-property:background-color;border-bottom:1px solid var(--adf-theme-foreground-text-color-007);min-height:56px;-webkit-user-select:none;user-select:none}.adf-tree-row .adf-tree-expand-collapse-container,.adf-tree-load-more-row .adf-tree-expand-collapse-container{min-width:55px}.adf-tree-row:hover,.adf-tree-load-more-row:hover{background-color:var(--adf-theme-background-hover-color)}.adf-tree-row:hover .adf-tree-actions,.adf-tree-load-more-row:hover .adf-tree-actions{display:flex}.adf-tree-row:focus,.adf-tree-load-more-row:focus{background-color:var(--adf-theme-background-hover-color);outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-tree-row .adf-tree-expand-collapse-button,.adf-tree-row .adf-tree-load-more-button,.adf-tree-load-more-row .adf-tree-expand-collapse-button,.adf-tree-load-more-row .adf-tree-load-more-button{display:flex;align-items:center;justify-content:center;margin-left:15px}.adf-tree-row .adf-tree-cell,.adf-tree-load-more-row .adf-tree-cell{color:var(--adf-theme-foreground-text-color);width:100%}.adf-tree-row .adf-tree-cell .adf-tree-cell-value,.adf-tree-load-more-row .adf-tree-cell .adf-tree-cell-value{display:inline-block;padding:10px;word-break:break-word}.adf-tree-header{display:flex;width:fit-content;min-width:100%;box-sizing:border-box}.adf-tree-header .adf-tree-cell-header:has(.adf-tree-cell-value){cursor:pointer;position:relative;vertical-align:bottom;text-overflow:ellipsis;font-weight:700;line-height:24px;letter-spacing:0;min-height:56px;font-size:12px;color:var(--adf-theme-foreground-text-color);box-sizing:border-box;padding-top:12px}.adf-tree-header .adf-tree-cell-header:has(.adf-tree-cell-value):focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-tree-loading-spinner-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center}\n"] }]
283
+ }], ctorParameters: () => [{ type: i1.TreeService }, { type: i2.UserPreferencesService }], propDecorators: { emptyContentTemplate: [{
284
+ type: Input
285
+ }], nodeActionsMenuTemplate: [{
286
+ type: Input
287
+ }], stickyHeader: [{
288
+ type: Input
289
+ }, {
290
+ type: HostBinding,
291
+ args: ['class.adf-tree-sticky-header']
292
+ }], selectableNodes: [{
293
+ type: Input
294
+ }], displayName: [{
295
+ type: Input
296
+ }], loadMoreSuffix: [{
297
+ type: Input
298
+ }], expandIcon: [{
299
+ type: Input
300
+ }], collapseIcon: [{
301
+ type: Input
302
+ }], paginationChanged: [{
303
+ type: Output
304
+ }], contextMenuOptionSelected: [{
305
+ type: Output
306
+ }], nodeCheckboxes: [{
307
+ type: ViewChildren,
308
+ args: [MatCheckbox]
309
+ }], contextMenuOptions: [{
310
+ type: Input
311
+ }] } });
312
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL3RyZWUvY29tcG9uZW50cy90cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvdHJlZS9jb21wb25lbnRzL3RyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQVksWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQW1CLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEgsT0FBTyxFQUFtQixjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FB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eEIsZUFBZTt3QkFDZixhQUFhO3dCQUNiLG9CQUFvQjt3QkFDcEIsaUJBQWlCO3dCQUNqQixhQUFhO3dCQUNiLGFBQWE7cUJBQ2hCLFFBR0ssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLGlCQUNaLGlCQUFpQixDQUFDLElBQUk7cUhBSzlCLG9CQUFvQjtzQkFEMUIsS0FBSztnQkFLQyx1QkFBdUI7c0JBRDdCLEtBQUs7Z0JBTUMsWUFBWTtzQkFGbEIsS0FBSzs7c0JBQ0wsV0FBVzt1QkFBQyw4QkFBOEI7Z0JBS3BDLGVBQWU7c0JBRHJCLEtBQUs7Z0JBS0MsV0FBVztzQkFEakIsS0FBSztnQkFLQyxjQUFjO3NCQURwQixLQUFLO2dCQUtDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBS0MsWUFBWTtzQkFEbEIsS0FBSztnQkFLQyxpQkFBaUI7c0JBRHZCLE1BQU07Z0JBS0EseUJBQXlCO3NCQUQvQixNQUFNO2dCQUlBLGNBQWM7c0JBRHBCLFlBQVk7dUJBQUMsV0FBVztnQkFrQnJCLGtCQUFrQjtzQkFEckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUcmVlTm9kZSwgVHJlZU5vZGVUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3RyZWUtbm9kZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVHJlZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90cmVlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGV4dE1lbnVEaXJlY3RpdmUsIEljb25Db21wb25lbnQsIFBhZ2luYXRpb25Nb2RlbCwgVXNlclByZWZlcmVuY2VzU2VydmljZSB9IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25DaGFuZ2UsIFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IFRyZWVSZXNwb25zZSB9IGZyb20gJy4uL21vZGVscy90cmVlLXJlc3BvbnNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNYXRDaGVja2JveCwgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBUcmVlQ29udGV4dE1lbnVSZXN1bHQgfSBmcm9tICcuLi9tb2RlbHMvdHJlZS1jb250ZXh0LW1lbnUtcmVzdWx0LmludGVyZmFjZSc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWF0VHJlZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi10cmVlJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVQaXBlLFxuICAgICAgICBNYXRUcmVlTW9kdWxlLFxuICAgICAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgSWNvbkNvbXBvbmVudCxcbiAgICAgICAgQ29udGV4dE1lbnVEaXJlY3RpdmUsXG4gICAgICAgIE1hdENoZWNrYm94TW9kdWxlLFxuICAgICAgICBNYXRNZW51TW9kdWxlLFxuICAgICAgICBNYXRJY29uTW9kdWxlXG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdHJlZS5jb21wb25lbnQuc2NzcyddLFxuICAgIGhvc3Q6IHsgY2xhc3M6ICdhZGYtdHJlZScgfSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFRyZWVDb21wb25lbnQ8VCBleHRlbmRzIFRyZWVOb2RlPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICAvKiogVGVtcGxhdGVSZWYgdG8gcHJvdmlkZSBlbXB0eSB0ZW1wbGF0ZSB3aGVuIG5vIG5vZGVzIGFyZSBsb2FkZWQgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBlbXB0eUNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBUZW1wbGF0ZVJlZiB0byBwcm92aWRlIGNvbnRleHQgbWVudSBpdGVtcyBmb3IgY29udGV4dCBtZW51IGRpc3BsYXllZCBvbiBlYWNoIHJvdyovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbm9kZUFjdGlvbnNNZW51VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogVmFyaWFibGUgZGVmaW5pbmcgaWYgdHJlZSBoZWFkZXIgc2hvdWxkIGJlIHN0aWNreS4gQnkgZGVmYXVsdCBzZXQgdG8gZmFsc2UgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuYWRmLXRyZWUtc3RpY2t5LWhlYWRlcicpXG4gICAgcHVibGljIHN0aWNreUhlYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFZhcmlhYmxlIGRlZmluaW5nIGlmIHRyZWUgbm9kZXMgc2hvdWxkIGJlIHNlbGVjdGFibGUuIEJ5IGRlZmF1bHQgc2V0IHRvIGZhbHNlICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VsZWN0YWJsZU5vZGVzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogVHJlZSBkaXNwbGF5IG5hbWUgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNwbGF5TmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIExvYWQgbW9yZSBzdWZmaXggZm9yIGxvYWQgbW9yZSBidXR0b24gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsb2FkTW9yZVN1ZmZpeDogc3RyaW5nO1xuXG4gICAgLyoqIEljb24gc2hvd24gd2hlbiBub2RlIGhhcyBjaGlsZHJlbiBhbmQgaXMgY29sbGFwc2VkLiBCeSBkZWZhdWx0IHNldCB0byBjaGV2cm9uX3JpZ2h0ICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZXhwYW5kSWNvbjogc3RyaW5nID0gJ2NoZXZyb25fcmlnaHQnO1xuXG4gICAgLyoqIEljb24gc2hvd24gd2hlbiBub2RlIGlzIGV4cGFuZGVkLiBCeSBkZWZhdWx0IHNldCB0byBleHBhbmRfbW9yZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbGxhcHNlSWNvbjogc3RyaW5nID0gJ2V4cGFuZF9tb3JlJztcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gcGFnaW5hdGlvbiBoYXMgYmVlbiBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHBhZ2luYXRpb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8UGFnaW5hdGlvbk1vZGVsPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYW55IGNvbnRleHQgbWVudSBvcHRpb24gaXMgc2VsZWN0ZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY29udGV4dE1lbnVPcHRpb25TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZUNvbnRleHRNZW51UmVzdWx0PFQ+PigpO1xuXG4gICAgQFZpZXdDaGlsZHJlbihNYXRDaGVja2JveClcbiAgICBwdWJsaWMgbm9kZUNoZWNrYm94ZXM6IFF1ZXJ5TGlzdDxNYXRDaGVja2JveD47XG5cbiAgICBwcml2YXRlIGxvYWRpbmdSb290U291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBfY29udGV4dE1lbnVTb3VyY2U6IFQ7XG4gICAgcHJpdmF0ZSBfY29udGV4dE1lbnVPcHRpb25zOiBhbnlbXTtcbiAgICBwcml2YXRlIGNvbnRleHRNZW51T3B0aW9uc0NoYW5nZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBwdWJsaWMgbG9hZGluZ1Jvb3QkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIHB1YmxpYyB0cmVlTm9kZXNTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8VD4odHJ1ZSwgW10sIHRydWUsIChub2RlMTogVCwgbm9kZTI6IFQpID0+IG5vZGUxLmlkID09PSBub2RlMi5pZCk7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdHJlZVNlcnZpY2U6IFRyZWVTZXJ2aWNlPFQ+LCBwcml2YXRlIHVzZXJQcmVmZXJlbmNlU2VydmljZTogVXNlclByZWZlcmVuY2VzU2VydmljZSkge31cblxuICAgIHNldCBjb250ZXh0TWVudVNvdXJjZShjb250ZXh0TWVudVNvdXJjZTogVCkge1xuICAgICAgICB0aGlzLl9jb250ZXh0TWVudVNvdXJjZSA9IGNvbnRleHRNZW51U291cmNlO1xuICAgIH1cblxuICAgIC8qKiBBcnJheSBvZiBjb250ZXh0IG1lbnUgb3B0aW9ucyB3aGljaCBzaG91bGQgYmUgZGlzcGxheWVkIGZvciBlYWNoIHJvdy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBjb250ZXh0TWVudU9wdGlvbnMoY29udGV4dE1lbnVPcHRpb25zOiBhbnlbXSkge1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51T3B0aW9uc0NoYW5nZWQkLm5leHQoKTtcbiAgICAgICAgaWYgKGNvbnRleHRNZW51T3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5fY29udGV4dE1lbnVPcHRpb25zID0gY29udGV4dE1lbnVPcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb24uc3ViamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5vcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0OiBuZXcgU3ViamVjdCgpXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb247XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG1lcmdlKC4uLnRoaXMuY29udGV4dE1lbnVPcHRpb25zLm1hcCgob3B0aW9uKSA9PiBvcHRpb24uc3ViamVjdCkpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuY29udGV4dE1lbnVPcHRpb25zQ2hhbmdlZCQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51T3B0aW9uU2VsZWN0ZWQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3c6IHRoaXMuX2NvbnRleHRNZW51U291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dE1lbnVPcHRpb246IG9wdGlvblxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHRNZW51T3B0aW9ucyA9IGNvbnRleHRNZW51T3B0aW9ucztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBjb250ZXh0TWVudU9wdGlvbnMoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dE1lbnVPcHRpb25zO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvYWRpbmdSb290JCA9IHRoaXMubG9hZGluZ1Jvb3RTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMucmVmcmVzaFRyZWUoMCwgdGhpcy51c2VyUHJlZmVyZW5jZVNlcnZpY2UucGFnaW5hdGlvblNpemUpO1xuICAgICAgICB0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi5jaGFuZ2VkLnN1YnNjcmliZSgoc2VsZWN0aW9uQ2hhbmdlOiBTZWxlY3Rpb25DaGFuZ2U8VD4pID0+IHtcbiAgICAgICAgICAgIHRoaXMub25UcmVlU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGlvbkNoYW5nZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51T3B0aW9uc0NoYW5nZWQkLm5leHQoKTtcbiAgICAgICAgdGhpcy5jb250ZXh0TWVudU9wdGlvbnNDaGFuZ2VkJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBub2RlIGlzIExvYWRNb3JlTm9kZSBub2RlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gX2lkeCAodW51c2VkKVxuICAgICAqIEBwYXJhbSBub2RlIG5vZGUgdG8gYmUgY2hlY2tlZFxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBhcmUgbW9yZSBpdGVtcyB0byBsb2FkLCBvdGhlcndpc2UgYGZhbHNlYFxuICAgICAqL1xuICAgIHB1YmxpYyBpc0xvYWRNb3JlTm9kZShfaWR4OiBudW1iZXIsIG5vZGU6IFQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IFRyZWVOb2RlVHlwZS5Mb2FkTW9yZU5vZGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRyZWUgaXMgZW1wdHlcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZVNlcnZpY2UuaXNFbXB0eSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYWN0aW9uIGljb24gYmFzZWQgb24gZXhwYW5kZWQvY29sbGFwc2VkIG5vZGUgc3RhdGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbm9kZSBub2RlIHRvIGJlIGNoZWNrZWRcbiAgICAgKiBAcmV0dXJucyBjb2xsYXBzZSBvciBleHBhbmQgaWNvblxuICAgICAqL1xuICAgIHB1YmxpYyBleHBhbmRDb2xsYXBzZUljb25WYWx1ZShub2RlOiBUKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZVNlcnZpY2UudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSA/IHRoaXMuY29sbGFwc2VJY29uIDogdGhpcy5leHBhbmRJY29uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZnJlc2hlcyB0aGUgdHJlZSwgcm9vdCBub2RlcyBhcmUgcmVsb2FkZWQsIHRyZWUgc2VsZWN0aW9uIGlzIGNsZWFyZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2tpcENvdW50IE51bWJlciBvZiByb290IG5vZGVzIHRvIHNraXAuXG4gICAgICogQHBhcmFtIG1heEl0ZW1zIE1heGltdW0gbnVtYmVyIG9mIG5vZGVzIHJldHVybmVkIGZyb20gT2JzZXJ2YWJsZS5cbiAgICAgKiBAcGFyYW0gc2VhcmNoVGVybSBTcGVjaWZpZXMgaWYgY2F0ZWdvcmllcyBzaG91bGQgYmUgZmlsdGVyZWQgb3V0IGJ5IG5hbWUgb3Igbm90LiBJZiBub3Qgc3BlY2lmaWVkIHRoZW4gcmV0dXJucyBjYXRlZ29yaWVzIHdpdGhvdXQgZmlsdGVyaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWZyZXNoVHJlZShza2lwQ291bnQ/OiBudW1iZXIsIG1heEl0ZW1zPzogbnVtYmVyLCBzZWFyY2hUZXJtPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9hZGluZ1Jvb3RTb3VyY2UubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgdGhpcy50cmVlU2VydmljZS5nZXRTdWJOb2RlcygnLXJvb3QtJywgc2tpcENvdW50LCBtYXhJdGVtcywgc2VhcmNoVGVybSkuc3Vic2NyaWJlKChyZXNwb25zZTogVHJlZVJlc3BvbnNlPFQ+KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVOb2RlcyA9IHJlc3BvbnNlLmVudHJpZXM7XG4gICAgICAgICAgICB0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi5kZXNlbGVjdCguLi5yZXNwb25zZS5lbnRyaWVzKTtcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbkNoYW5nZWQuZW1pdChyZXNwb25zZS5wYWdpbmF0aW9uKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1Jvb3RTb3VyY2UubmV4dChmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbGxhcHNlcyBvciBleHBhbmRpbmcgdGhlIG5vZGUgYmFzZWQgb24gaXRzIGN1cnJlbnQgc3RhdGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlIG5vZGUgdG8gYmUgY29sbGFwc2VkL2V4cGFuZGVkXG4gICAgICovXG4gICAgcHVibGljIGV4cGFuZENvbGxhcHNlTm9kZShub2RlOiBUKTogdm9pZCB7XG4gICAgICAgIGlmIChub2RlLmhhc0NoaWxkcmVuICYmICFub2RlLmlzTG9hZGluZykge1xuICAgICAgICAgICAgaWYgKHRoaXMudHJlZVNlcnZpY2UudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UuY29sbGFwc2VOb2RlKG5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBub2RlLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5nZXRTdWJOb2Rlcyhub2RlLmlkLCAwLCB0aGlzLnVzZXJQcmVmZXJlbmNlU2VydmljZS5wYWdpbmF0aW9uU2l6ZSkuc3Vic2NyaWJlKChyZXNwb25zZTogVHJlZVJlc3BvbnNlPFQ+KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UuZXhwYW5kTm9kZShub2RlLCByZXNwb25zZS5lbnRyaWVzKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGltZW91dCB1c2VkIHRvIHVwZGF0ZSBub2RlQ2hlY2tib3hlcyBxdWVyeSBsaXN0IGFmdGVyIG5ldyBub2RlcyBhcmUgYWRkZWQgc28gdGhleSBjYW4gYmUgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLnNlbGVjdCguLi5yZXNwb25zZS5lbnRyaWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkcyBtb3JlIHN1Ym5vZGUgZm9yIGEgZ2l2ZW4gcGFyZW50IG5vZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlIHBhcmVudCBub2RlXG4gICAgICovXG4gICAgcHVibGljIGxvYWRNb3JlU3Vibm9kZXMobm9kZTogVCk6IHZvaWQge1xuICAgICAgICBub2RlLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IHBhcmVudE5vZGU6IFQgPSB0aGlzLnRyZWVTZXJ2aWNlLmdldFBhcmVudE5vZGUobm9kZS5wYXJlbnRJZCk7XG4gICAgICAgIHRoaXMudHJlZVNlcnZpY2UucmVtb3ZlTm9kZShub2RlKTtcbiAgICAgICAgY29uc3QgbG9hZGVkQ2hpbGRyZW46IG51bWJlciA9IHRoaXMudHJlZVNlcnZpY2UuZ2V0Q2hpbGRyZW4ocGFyZW50Tm9kZSkubGVuZ3RoO1xuICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0U3ViTm9kZXMocGFyZW50Tm9kZS5pZCwgbG9hZGVkQ2hpbGRyZW4sIHRoaXMudXNlclByZWZlcmVuY2VTZXJ2aWNlLnBhZ2luYXRpb25TaXplKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IFRyZWVSZXNwb25zZTxUPikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UuYXBwZW5kTm9kZXMocGFyZW50Tm9kZSwgcmVzcG9uc2UuZW50cmllcyk7XG4gICAgICAgICAgICAgICAgbm9kZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChwYXJlbnROb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAvL3RpbWVvdXQgdXNlZCB0byB1cGRhdGUgbm9kZUNoZWNrYm94ZXMgcXVlcnkgbGlzdCBhZnRlciBuZXcgbm9kZXMgYXJlIGFkZGVkIHNvIHRoZXkgY2FuIGJlIHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uc2VsZWN0KC4uLnJlc3BvbnNlLmVudHJpZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIG5vZGUgaXMgc2VsZWN0ZWQgaXQgc2VsZWN0cyBhbGwgaXRzIGRlc2NlbmRhbnRzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbm9kZSBzZWxlY3RlZCBub2RlXG4gICAgICovXG4gICAgcHVibGljIG9uTm9kZVNlbGVjdGVkKG5vZGU6IFQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24udG9nZ2xlKG5vZGUpO1xuICAgICAgICBjb25zdCBkZXNjZW5kYW50czogVFtdID0gdGhpcy50cmVlU2VydmljZS50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhub2RlKS5maWx0ZXIodGhpcy5pc1JlZ3VsYXJOb2RlKTtcbiAgICAgICAgaWYgKGRlc2NlbmRhbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSlcbiAgICAgICAgICAgICAgICA/IHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLnNlbGVjdCguLi5kZXNjZW5kYW50cylcbiAgICAgICAgICAgICAgICA6IHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLmRlc2VsZWN0KC4uLmRlc2NlbmRhbnRzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrUGFyZW50c1NlbGVjdGlvbihub2RlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYWxsIGRlc2NlbmRhbnRzIG9mIGEgbm9kZSBhcmUgc2VsZWN0ZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlIHNlbGVjdGVkIG5vZGVcbiAgICAgKiBAcmV0dXJucyBib29sZWFuXG4gICAgICovXG4gICAgcHVibGljIGRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZTogVCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkZXNjZW5kYW50czogVFtdID0gdGhpcy50cmVlU2VydmljZS50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhub2RlKS5maWx0ZXIodGhpcy5pc1JlZ3VsYXJOb2RlKTtcbiAgICAgICAgcmV0dXJuIGRlc2NlbmRhbnRzLmxlbmd0aCA+IDAgJiYgZGVzY2VuZGFudHMuZXZlcnkoKGRlc2NlbmRhbnQ6IFQpID0+IHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLmlzU2VsZWN0ZWQoZGVzY2VuZGFudCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBzb21lIGRlc2NlbmRhbnRzIG9mIGEgbm9kZSBhcmUgc2VsZWN0ZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlIHNlbGVjdGVkIG5vZGVcbiAgICAgKiBAcmV0dXJucyBib29sZWFuXG4gICAgICovXG4gICAgcHVibGljIGRlc2NlbmRhbnRzUGFydGlhbGx5U2VsZWN0ZWQobm9kZTogVCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkZXNjZW5kYW50czogVFtdID0gdGhpcy50cmVlU2VydmljZS50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhub2RlKS5maWx0ZXIodGhpcy5pc1JlZ3VsYXJOb2RlKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGRlc2NlbmRhbnRzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICF0aGlzLmRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZSkgJiZcbiAgICAgICAgICAgIGRlc2NlbmRhbnRzLnNvbWUoKGRlc2NlbmRhbnQ6IFQpID0+IHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLmlzU2VsZWN0ZWQoZGVzY2VuZGFudCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja1BhcmVudHNTZWxlY3Rpb24obm9kZTogVCk6IHZvaWQge1xuICAgICAgICBsZXQgcGFyZW50OiBUID0gdGhpcy50cmVlU2VydmljZS5nZXRQYXJlbnROb2RlKG5vZGUucGFyZW50SWQpO1xuICAgICAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrUm9vdE5vZGVTZWxlY3Rpb24ocGFyZW50KTtcbiAgICAgICAgICAgIHBhcmVudCA9IHRoaXMudHJlZVNlcnZpY2UuZ2V0UGFyZW50Tm9kZShwYXJlbnQucGFyZW50SWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja1Jvb3ROb2RlU2VsZWN0aW9uKG5vZGU6IFQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgbm9kZVNlbGVjdGVkOiBib29sZWFuID0gdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKTtcbiAgICAgICAgY29uc3QgZGVzY0FsbFNlbGVjdGVkID0gdGhpcy5kZXNjZW5kYW50c0FsbFNlbGVjdGVkKG5vZGUpO1xuICAgICAgICBpZiAobm9kZVNlbGVjdGVkICYmICFkZXNjQWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLmRlc2VsZWN0KG5vZGUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFub2RlU2VsZWN0ZWQgJiYgZGVzY0FsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi5zZWxlY3Qobm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uVHJlZVNlbGVjdGlvbkNoYW5nZShzZWxlY3Rpb25DaGFuZ2U6IFNlbGVjdGlvbkNoYW5nZTxUPik6IHZvaWQge1xuICAgICAgICBzZWxlY3Rpb25DaGFuZ2UucmVtb3ZlZC5mb3JFYWNoKCh1bnNlbGVjdGVkTm9kZTogVCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNSZWd1bGFyTm9kZSh1bnNlbGVjdGVkTm9kZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVDaGVja2JveGVzLmZpbmQoKGNoZWNrYm94OiBNYXRDaGVja2JveCkgPT4gY2hlY2tib3guaWQgPT09IHVuc2VsZWN0ZWROb2RlLmlkKS5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzZWxlY3Rpb25DaGFuZ2UuYWRkZWQuZm9yRWFjaCgoc2VsZWN0ZWROb2RlOiBUKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1JlZ3VsYXJOb2RlKHNlbGVjdGVkTm9kZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVDaGVja2JveGVzLmZpbmQoKGNoZWNrYm94OiBNYXRDaGVja2JveCkgPT4gY2hlY2tib3guaWQgPT09IHNlbGVjdGVkTm9kZS5pZCkuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNSZWd1bGFyTm9kZShub2RlOiBUKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBub2RlLm5vZGVUeXBlICE9PSBUcmVlTm9kZVR5cGUuTG9hZE1vcmVOb2RlO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIobG9hZGluZ1Jvb3QkIHwgYXN5bmMpID09PSBmYWxzZTsgZWxzZSBsb2FkaW5nU3Bpbm5lclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGhpcy5pc0VtcHR5KCk7IGVsc2UgZW1wdHlDb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtdHJlZS1yb3cgYWRmLXRyZWUtaGVhZGVyXCIgKm5nSWY9XCJkaXNwbGF5TmFtZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi10cmVlLWNlbGwgYWRmLXRyZWUtY2VsbC1oZWFkZXJcIiBkYXRhLWF1dG9tYXRpb24taWQ9XCJ0cmVlLWhlYWRlci1kaXNwbGF5LW5hbWVcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZi10cmVlLWNlbGwtdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZGlzcGxheU5hbWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtdHJlZVxuICAgICAgICAgICAgY2xhc3M9XCJhZGYtdHJlZS1ib2R5XCJcbiAgICAgICAgICAgIFtkYXRhU291cmNlXT1cInRyZWVTZXJ2aWNlXCJcbiAgICAgICAgICAgIFt0cmVlQ29udHJvbF09XCJ0cmVlU2VydmljZS50cmVlQ29udHJvbFwiPlxuICAgICAgICAgICAgPG1hdC10cmVlLW5vZGVcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi10cmVlLWxvYWQtbW9yZS1yb3dcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInbG9hZE1vcmVTdWJub2Rlc18nICsgbm9kZS5wYXJlbnRJZFwiXG4gICAgICAgICAgICAgICAgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGUgd2hlbiBpc0xvYWRNb3JlTm9kZVwiXG4gICAgICAgICAgICAgICAgbWF0VHJlZU5vZGVQYWRkaW5nPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtdHJlZS1leHBhbmQtY29sbGFwc2UtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhZGYtdHJlZS1sb2FkLW1vcmUtYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJsb2FkTW9yZVN1Ym5vZGVzKG5vZGUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU9XCJpbmRldGVybWluYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlhbWV0ZXJdPVwiMjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibm9kZS5pc0xvYWRpbmc7IGVsc2UgbG9hZE1vcmVJY29uXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZE1vcmVJY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtaWNvbiBbdmFsdWVdPVwiJ2NoZXZyb25fcmlnaHQnXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtdHJlZS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi10cmVlLWNlbGwtdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImxvYWRNb3JlU3Vibm9kZXMobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImxvYWRNb3JlU3Vibm9kZXMobm9kZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdBREYtVFJFRS5MT0FELU1PUkUtQlVUVE9OJyB8IHRyYW5zbGF0ZTogeyBuYW1lOiBsb2FkTW9yZVN1ZmZpeCB9IH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbWF0LXRyZWUtbm9kZT5cbiAgICAgICAgICAgIDxtYXQtdHJlZS1ub2RlXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtdHJlZS1yb3dcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInbm9kZV8nICsgbm9kZS5pZFwiXG4gICAgICAgICAgICAgICAgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIlxuICAgICAgICAgICAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ1xuICAgICAgICAgICAgICAgIFthZGYtY29udGV4dC1tZW51XT1cImNvbnRleHRNZW51T3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgW2FkZi1jb250ZXh0LW1lbnUtZW5hYmxlZF09XCIhIWNvbnRleHRNZW51T3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImNvbnRleHRNZW51U291cmNlID0gbm9kZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtdHJlZS1leHBhbmQtY29sbGFwc2UtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJub2RlLmhhc0NoaWxkcmVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi10cmVlLWV4cGFuZC1jb2xsYXBzZS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJleHBhbmRDb2xsYXBzZU5vZGUobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaWFtZXRlcl09XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJub2RlLmlzTG9hZGluZzsgZWxzZSBleHBhbmRDb2xsYXBzZUljb25cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNleHBhbmRDb2xsYXBzZUljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1pY29uIFt2YWx1ZV09XCJleHBhbmRDb2xsYXBzZUljb25WYWx1ZShub2RlKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0YWJsZU5vZGVzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKm5nSWY9XCJub2RlLmhhc0NoaWxkcmVuOyBlbHNlIG5vQ2hpbGRyZW5Ob2RlQ2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIm5vZGUuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImRlc2NlbmRhbnRzUGFydGlhbGx5U2VsZWN0ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Ob2RlU2VsZWN0ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImhhcy1jaGlsZHJlbi1ub2RlLWNoZWNrYm94XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0NoaWxkcmVuTm9kZUNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIm5vZGUuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInRyZWVOb2Rlc1NlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uTm9kZVNlbGVjdGVkKG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJuby1jaGlsZHJlbi1ub2RlLWNoZWNrYm94XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXRyZWUtY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtdHJlZS1jZWxsLXZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hZGYtdHJlZS1jbGlja2FibGUtY2VsbC12YWx1ZV09XCJub2RlLmhhc0NoaWxkcmVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJleHBhbmRDb2xsYXBzZU5vZGUobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cGFuZENvbGxhcHNlTm9kZShub2RlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbm9kZS5ub2RlTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi10cmVlLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiJ2FjdGlvbl9tZW51X3JpZ2h0XycgKyBub2RlLmlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVBY3Rpb25zTWVudVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBub2RlOiBub2RlIH1cIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9tYXQtdHJlZS1ub2RlPlxuICAgICAgICA8L21hdC10cmVlPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlDb250ZW50PlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJlbXB0eUNvbnRlbnRUZW1wbGF0ZVwiIC8+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xvYWRpbmdTcGlubmVyPlxuICAgIDxkaXYgY2xhc3M9XCJhZGYtdHJlZS1sb2FkaW5nLXNwaW5uZXItY29udGFpbmVyXCI+XG4gICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgIG1vZGU9XCJpbmRldGVybWluYXRlXCIgLz5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -0,0 +1,18 @@
1
+ /*!
2
+ * @license
3
+ * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ export * from './public-api';
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL3RyZWUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -0,0 +1,18 @@
1
+ /*!
2
+ * @license
3
+ * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ export {};
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1jb250ZXh0LW1lbnUtcmVzdWx0LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvdHJlZS9tb2RlbHMvdHJlZS1jb250ZXh0LW1lbnUtcmVzdWx0LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUciLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJlZUNvbnRleHRNZW51UmVzdWx0PFQ+IHtcbiAgICByb3c6IFQ7XG4gICAgY29udGV4dE1lbnVPcHRpb246IGFueTtcbn1cbiJdfQ==
@@ -0,0 +1,22 @@
1
+ /*!
2
+ * @license
3
+ * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ export var TreeNodeType;
18
+ (function (TreeNodeType) {
19
+ TreeNodeType[TreeNodeType["RegularNode"] = 0] = "RegularNode";
20
+ TreeNodeType[TreeNodeType["LoadMoreNode"] = 1] = "LoadMoreNode";
21
+ })(TreeNodeType || (TreeNodeType = {}));
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvdHJlZS9tb2RlbHMvdHJlZS1ub2RlLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxNQUFNLENBQU4sSUFBWSxZQUdYO0FBSEQsV0FBWSxZQUFZO0lBQ3BCLDZEQUFXLENBQUE7SUFDWCwrREFBWSxDQUFBO0FBQ2hCLENBQUMsRUFIVyxZQUFZLEtBQVosWUFBWSxRQUd2QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuZXhwb3J0IGVudW0gVHJlZU5vZGVUeXBlIHtcbiAgICBSZWd1bGFyTm9kZSxcbiAgICBMb2FkTW9yZU5vZGVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmVlTm9kZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBub2RlTmFtZTogc3RyaW5nO1xuICAgIHBhcmVudElkOiBzdHJpbmc7XG4gICAgbGV2ZWw6IG51bWJlcjtcbiAgICBub2RlVHlwZTogVHJlZU5vZGVUeXBlO1xuICAgIGhhc0NoaWxkcmVuOiBib29sZWFuO1xuICAgIGlzTG9hZGluZzogYm9vbGVhbjtcbn1cbiJdfQ==
@@ -0,0 +1,18 @@
1
+ /*!
2
+ * @license
3
+ * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ export {};
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1yZXNwb25zZS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL3RyZWUvbW9kZWxzL3RyZWUtcmVzcG9uc2UuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tICcuL3RyZWUtbm9kZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUGFnaW5hdGlvbk1vZGVsIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBUcmVlUmVzcG9uc2U8VCBleHRlbmRzIFRyZWVOb2RlPiB7XG4gICAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbk1vZGVsO1xuICAgIGVudHJpZXM6IFRbXTtcbn1cbiJdfQ==
@@ -0,0 +1,23 @@
1
+ /*!
2
+ * @license
3
+ * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ export * from './tree.module';
18
+ export * from './models/tree-response.interface';
19
+ export * from './models/tree-node.interface';
20
+ export * from './models/tree-context-menu-result.interface';
21
+ export * from './services/tree.service';
22
+ export * from './components/tree.component';
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvdHJlZS9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw2QkFBNkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi90cmVlLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscy90cmVlLXJlc3BvbnNlLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscy90cmVlLW5vZGUuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL3RyZWUtY29udGV4dC1tZW51LXJlc3VsdC5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy90cmVlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzL3RyZWUuY29tcG9uZW50JztcbiJdfQ==