@alfresco/adf-content-services 8.1.0-15604953499 → 8.1.0-15610296675

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 (408) hide show
  1. package/esm2022/adf-content-services.mjs +5 -0
  2. package/esm2022/lib/agent/index.mjs +18 -0
  3. package/esm2022/lib/agent/public-api.mjs +18 -0
  4. package/esm2022/lib/agent/services/agent.service.mjs +60 -0
  5. package/esm2022/lib/alfresco-icon/alfresco-icon.component.mjs +27 -0
  6. package/esm2022/lib/api-factories/alfresco-api-no-auth.service.mjs +42 -0
  7. package/esm2022/lib/api-factories/alfresco-api-v2-loader.service.mjs +77 -0
  8. package/esm2022/lib/api-factories/index.mjs +18 -0
  9. package/esm2022/lib/api-factories/public-api.mjs +19 -0
  10. package/esm2022/lib/aspect-list/aspect-list-dialog-data.interface.mjs +18 -0
  11. package/esm2022/lib/aspect-list/aspect-list-dialog.component.mjs +78 -0
  12. package/esm2022/lib/aspect-list/aspect-list.component.mjs +140 -0
  13. package/esm2022/lib/aspect-list/aspect-list.module.mjs +35 -0
  14. package/esm2022/lib/aspect-list/index.mjs +18 -0
  15. package/esm2022/lib/aspect-list/public-api.mjs +24 -0
  16. package/esm2022/lib/aspect-list/services/aspect-list.service.mjs +83 -0
  17. package/esm2022/lib/aspect-list/services/dialog-aspect-list.service.mjs +86 -0
  18. package/esm2022/lib/aspect-list/services/node-aspect.service.mjs +52 -0
  19. package/esm2022/lib/auth-loader/content-auth-loader-factory.mjs +26 -0
  20. package/esm2022/lib/auth-loader/content-auth-loader.service.mjs +42 -0
  21. package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +167 -0
  22. package/esm2022/lib/breadcrumb/breadcrumb.module.mjs +35 -0
  23. package/esm2022/lib/breadcrumb/dropdown-breadcrumb.component.mjs +66 -0
  24. package/esm2022/lib/breadcrumb/index.mjs +18 -0
  25. package/esm2022/lib/breadcrumb/public-api.mjs +20 -0
  26. package/esm2022/lib/category/categories-management/categories-management-mode.mjs +22 -0
  27. package/esm2022/lib/category/categories-management/categories-management.component.mjs +309 -0
  28. package/esm2022/lib/category/category.module.mjs +33 -0
  29. package/esm2022/lib/category/index.mjs +18 -0
  30. package/esm2022/lib/category/models/category-node.interface.mjs +18 -0
  31. package/esm2022/lib/category/public-api.mjs +23 -0
  32. package/esm2022/lib/category/services/category-tree-datasource.service.mjs +80 -0
  33. package/esm2022/lib/category/services/category.service.mjs +159 -0
  34. package/esm2022/lib/common/events/file.event.mjs +46 -0
  35. package/esm2022/lib/common/index.mjs +18 -0
  36. package/esm2022/lib/common/interfaces/saved-search.interface.mjs +18 -0
  37. package/esm2022/lib/common/interfaces/search-configuration.interface.mjs +18 -0
  38. package/esm2022/lib/common/mocks/ecm-user.service.mock.mjs +37 -0
  39. package/esm2022/lib/common/models/allowable-operations.enum.mjs +30 -0
  40. package/esm2022/lib/common/models/ecm-company.model.mjs +19 -0
  41. package/esm2022/lib/common/models/ecm-user.model.mjs +45 -0
  42. package/esm2022/lib/common/models/file.model.mjs +53 -0
  43. package/esm2022/lib/common/models/node-metadata.model.mjs +23 -0
  44. package/esm2022/lib/common/models/permissions.enum.mjs +32 -0
  45. package/esm2022/lib/common/public-api.mjs +37 -0
  46. package/esm2022/lib/common/services/card-view-content-update.service.mjs +55 -0
  47. package/esm2022/lib/common/services/content.service.mjs +180 -0
  48. package/esm2022/lib/common/services/discovery-api.service.mjs +79 -0
  49. package/esm2022/lib/common/services/favorites-api.service.mjs +84 -0
  50. package/esm2022/lib/common/services/nodes-api.service.mjs +251 -0
  51. package/esm2022/lib/common/services/people-content.service.mjs +138 -0
  52. package/esm2022/lib/common/services/rendition.service.mjs +270 -0
  53. package/esm2022/lib/common/services/saved-searches.service.mjs +206 -0
  54. package/esm2022/lib/common/services/sites.service.mjs +243 -0
  55. package/esm2022/lib/common/services/upload.service.mjs +391 -0
  56. package/esm2022/lib/content-metadata/components/content-metadata/content-metadata-header.component.mjs +55 -0
  57. package/esm2022/lib/content-metadata/components/content-metadata/content-metadata.component.mjs +491 -0
  58. package/esm2022/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.mjs +129 -0
  59. package/esm2022/lib/content-metadata/content-metadata.module.mjs +36 -0
  60. package/esm2022/lib/content-metadata/index.mjs +18 -0
  61. package/esm2022/lib/content-metadata/interfaces/aspect-oriented-config.interface.mjs +18 -0
  62. package/esm2022/lib/content-metadata/interfaces/card-view-group.interface.mjs +18 -0
  63. package/esm2022/lib/content-metadata/interfaces/content-metadata-config.interface.mjs +18 -0
  64. package/esm2022/lib/content-metadata/interfaces/content-metadata-custom-panel.interface.mjs +18 -0
  65. package/esm2022/lib/content-metadata/interfaces/content-metadata-panel.interface.mjs +18 -0
  66. package/esm2022/lib/content-metadata/interfaces/content-metadata.interfaces.mjs +28 -0
  67. package/esm2022/lib/content-metadata/interfaces/indifferent-config.interface.mjs +18 -0
  68. package/esm2022/lib/content-metadata/interfaces/layout-oriented-config.interface.mjs +18 -0
  69. package/esm2022/lib/content-metadata/interfaces/organised-property-group.interface.mjs +18 -0
  70. package/esm2022/lib/content-metadata/interfaces/preset-config.interface.mjs +18 -0
  71. package/esm2022/lib/content-metadata/interfaces/property-group.interface.mjs +18 -0
  72. package/esm2022/lib/content-metadata/interfaces/property.interface.mjs +18 -0
  73. package/esm2022/lib/content-metadata/public-api.mjs +31 -0
  74. package/esm2022/lib/content-metadata/services/basic-properties.service.mjs +107 -0
  75. package/esm2022/lib/content-metadata/services/config/aspect-oriented-config.service.mjs +106 -0
  76. package/esm2022/lib/content-metadata/services/config/content-metadata-config.factory.mjs +76 -0
  77. package/esm2022/lib/content-metadata/services/config/indifferent-config.service.mjs +40 -0
  78. package/esm2022/lib/content-metadata/services/config/layout-oriented-config.service.mjs +108 -0
  79. package/esm2022/lib/content-metadata/services/config/property-group-reader.mjs +33 -0
  80. package/esm2022/lib/content-metadata/services/content-metadata.service.mjs +99 -0
  81. package/esm2022/lib/content-metadata/services/content-type-property.service.mjs +134 -0
  82. package/esm2022/lib/content-metadata/services/property-descriptors.service.mjs +52 -0
  83. package/esm2022/lib/content-metadata/services/property-groups-translator.service.mjs +169 -0
  84. package/esm2022/lib/content-node-selector/content-node-dialog.service.mjs +256 -0
  85. package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.component.mjs +618 -0
  86. package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.service.mjs +66 -0
  87. package/esm2022/lib/content-node-selector/content-node-selector.component-data.interface.mjs +18 -0
  88. package/esm2022/lib/content-node-selector/content-node-selector.component.mjs +206 -0
  89. package/esm2022/lib/content-node-selector/content-node-selector.module.mjs +50 -0
  90. package/esm2022/lib/content-node-selector/index.mjs +18 -0
  91. package/esm2022/lib/content-node-selector/name-location-cell/name-location-cell.component.mjs +48 -0
  92. package/esm2022/lib/content-node-selector/public-api.mjs +25 -0
  93. package/esm2022/lib/content-node-selector/site-dropdown/sites-dropdown.component.mjs +168 -0
  94. package/esm2022/lib/content-node-share/content-node-share.dialog.mjs +288 -0
  95. package/esm2022/lib/content-node-share/content-node-share.directive.mjs +102 -0
  96. package/esm2022/lib/content-node-share/content-node-share.module.mjs +35 -0
  97. package/esm2022/lib/content-node-share/content-node-share.settings.mjs +18 -0
  98. package/esm2022/lib/content-node-share/index.mjs +18 -0
  99. package/esm2022/lib/content-node-share/public-api.mjs +22 -0
  100. package/esm2022/lib/content-node-share/services/shared-links-api.service.mjs +83 -0
  101. package/esm2022/lib/content-type/content-type-dialog.component.mjs +58 -0
  102. package/esm2022/lib/content-type/content-type-metadata.interface.mjs +18 -0
  103. package/esm2022/lib/content-type/content-type.service.mjs +52 -0
  104. package/esm2022/lib/content-type/index.mjs +20 -0
  105. package/esm2022/lib/content.module.mjs +277 -0
  106. package/esm2022/lib/dialogs/category-selector/category-selector.dialog.mjs +52 -0
  107. package/esm2022/lib/dialogs/dialog.module.mjs +52 -0
  108. package/esm2022/lib/dialogs/download-zip/download-zip.dialog.mjs +111 -0
  109. package/esm2022/lib/dialogs/download-zip/download-zip.dialog.module.mjs +38 -0
  110. package/esm2022/lib/dialogs/download-zip/services/download-zip.service.mjs +66 -0
  111. package/esm2022/lib/dialogs/folder/folder-name.validators.mjs +44 -0
  112. package/esm2022/lib/dialogs/folder/folder.dialog.mjs +147 -0
  113. package/esm2022/lib/dialogs/index.mjs +18 -0
  114. package/esm2022/lib/dialogs/library/library.dialog.mjs +225 -0
  115. package/esm2022/lib/dialogs/node-lock/node-lock.dialog.mjs +116 -0
  116. package/esm2022/lib/dialogs/public-api.mjs +25 -0
  117. package/esm2022/lib/directives/auto-focus.directive.mjs +38 -0
  118. package/esm2022/lib/directives/check-allowable-operation.directive.mjs +126 -0
  119. package/esm2022/lib/directives/content-directive.module.mjs +75 -0
  120. package/esm2022/lib/directives/index.mjs +18 -0
  121. package/esm2022/lib/directives/library-favorite.directive.mjs +119 -0
  122. package/esm2022/lib/directives/library-membership.directive.mjs +202 -0
  123. package/esm2022/lib/directives/node-counter.directive.mjs +60 -0
  124. package/esm2022/lib/directives/node-delete.directive.mjs +177 -0
  125. package/esm2022/lib/directives/node-download.directive.mjs +138 -0
  126. package/esm2022/lib/directives/node-favorite.directive.mjs +193 -0
  127. package/esm2022/lib/directives/node-lock.directive.mjs +57 -0
  128. package/esm2022/lib/directives/node-restore.directive.mjs +218 -0
  129. package/esm2022/lib/directives/public-api.mjs +28 -0
  130. package/esm2022/lib/document-list/components/content-action/content-action-list.component.mjs +60 -0
  131. package/esm2022/lib/document-list/components/content-action/content-action.component.mjs +196 -0
  132. package/esm2022/lib/document-list/components/document-list.component.mjs +964 -0
  133. package/esm2022/lib/document-list/components/document-list.token.mjs +21 -0
  134. package/esm2022/lib/document-list/components/file-auto-download/file-auto-download.component.mjs +43 -0
  135. package/esm2022/lib/document-list/components/filter-header/filter-header.component.mjs +107 -0
  136. package/esm2022/lib/document-list/components/library-name-column/library-name-column.component.mjs +133 -0
  137. package/esm2022/lib/document-list/components/library-role-column/library-role-column.component.mjs +93 -0
  138. package/esm2022/lib/document-list/components/library-status-column/library-status-column.component.mjs +88 -0
  139. package/esm2022/lib/document-list/components/name-column/name-column.component.mjs +120 -0
  140. package/esm2022/lib/document-list/components/node.event.mjs +30 -0
  141. package/esm2022/lib/document-list/components/trashcan-name-column/trashcan-name-column.component.mjs +83 -0
  142. package/esm2022/lib/document-list/data/image-resolver.model.mjs +18 -0
  143. package/esm2022/lib/document-list/data/row-filter.model.mjs +18 -0
  144. package/esm2022/lib/document-list/data/share-data-row.model.mjs +102 -0
  145. package/esm2022/lib/document-list/data/share-datatable-adapter.mjs +258 -0
  146. package/esm2022/lib/document-list/document-list.module.mjs +79 -0
  147. package/esm2022/lib/document-list/index.mjs +18 -0
  148. package/esm2022/lib/document-list/interfaces/document-list-loader.interface.mjs +18 -0
  149. package/esm2022/lib/document-list/models/content-action.model.mjs +59 -0
  150. package/esm2022/lib/document-list/models/document-folder.model.mjs +23 -0
  151. package/esm2022/lib/document-list/models/node-action.enum.mjs +27 -0
  152. package/esm2022/lib/document-list/models/permissions-style.model.mjs +27 -0
  153. package/esm2022/lib/document-list/models/permissions.model.mjs +26 -0
  154. package/esm2022/lib/document-list/models/preset.model.mjs +257 -0
  155. package/esm2022/lib/document-list/public-api.mjs +47 -0
  156. package/esm2022/lib/document-list/services/custom-resources.service.mjs +377 -0
  157. package/esm2022/lib/document-list/services/document-actions.service.mjs +142 -0
  158. package/esm2022/lib/document-list/services/document-list.service.mjs +175 -0
  159. package/esm2022/lib/document-list/services/folder-actions.service.mjs +137 -0
  160. package/esm2022/lib/document-list/services/lock.service.mjs +72 -0
  161. package/esm2022/lib/document-list/services/node-actions.service.mjs +122 -0
  162. package/esm2022/lib/group/index.mjs +18 -0
  163. package/esm2022/lib/group/public-api.mjs +18 -0
  164. package/esm2022/lib/group/services/group.service.mjs +84 -0
  165. package/esm2022/lib/infinite-scroll-datasource/index.mjs +18 -0
  166. package/esm2022/lib/infinite-scroll-datasource/infinite-scroll-datasource.mjs +69 -0
  167. package/esm2022/lib/infinite-scroll-datasource/public-api.mjs +18 -0
  168. package/esm2022/lib/interfaces/base-card-view-content-update.interface.mjs +18 -0
  169. package/esm2022/lib/interfaces/index.mjs +18 -0
  170. package/esm2022/lib/interfaces/library-entity.interface.mjs +18 -0
  171. package/esm2022/lib/interfaces/library-membership-error-event.interface.mjs +18 -0
  172. package/esm2022/lib/interfaces/library-membership-toggle-event.interface.mjs +18 -0
  173. package/esm2022/lib/interfaces/node-allowable-operation-subject.interface.mjs +18 -0
  174. package/esm2022/lib/interfaces/public-api.mjs +23 -0
  175. package/esm2022/lib/interfaces/restore-message-model.interface.mjs +19 -0
  176. package/esm2022/lib/legal-hold/index.mjs +18 -0
  177. package/esm2022/lib/legal-hold/public-api.mjs +18 -0
  178. package/esm2022/lib/legal-hold/services/legal-hold.service.mjs +136 -0
  179. package/esm2022/lib/material.module.mjs +183 -0
  180. package/esm2022/lib/mock/alfresco-api.service.mock.mjs +43 -0
  181. package/esm2022/lib/mock/date-range-search-filter.mock.mjs +65 -0
  182. package/esm2022/lib/mock/document-library.model.mock.mjs +84 -0
  183. package/esm2022/lib/mock/document-list.component.mock.mjs +364 -0
  184. package/esm2022/lib/mock/index.mjs +18 -0
  185. package/esm2022/lib/mock/new-version-uploader.service.mock.mjs +161 -0
  186. package/esm2022/lib/mock/public-api.mjs +27 -0
  187. package/esm2022/lib/mock/search-filter-mock.mjs +637 -0
  188. package/esm2022/lib/mock/search-query.mock.mjs +40 -0
  189. package/esm2022/lib/mock/search.component.mock.mjs +165 -0
  190. package/esm2022/lib/mock/search.service.mock.mjs +61 -0
  191. package/esm2022/lib/mock/sites-dropdown.component.mock.mjs +281 -0
  192. package/esm2022/lib/new-version-uploader/index.mjs +18 -0
  193. package/esm2022/lib/new-version-uploader/models/index.mjs +18 -0
  194. package/esm2022/lib/new-version-uploader/models/new-version-uploader.model.mjs +24 -0
  195. package/esm2022/lib/new-version-uploader/new-version-uploader.dialog.mjs +75 -0
  196. package/esm2022/lib/new-version-uploader/new-version-uploader.module.mjs +33 -0
  197. package/esm2022/lib/new-version-uploader/new-version-uploader.service.mjs +103 -0
  198. package/esm2022/lib/new-version-uploader/public-api.mjs +21 -0
  199. package/esm2022/lib/node-comments/index.mjs +18 -0
  200. package/esm2022/lib/node-comments/node-comments.component.mjs +44 -0
  201. package/esm2022/lib/node-comments/node-comments.module.mjs +33 -0
  202. package/esm2022/lib/node-comments/public-api.mjs +20 -0
  203. package/esm2022/lib/node-comments/services/node-comments.service.mjs +85 -0
  204. package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog-data.interface.mjs +18 -0
  205. package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog.component.mjs +124 -0
  206. package/esm2022/lib/permission-manager/components/add-permission/add-permission-panel.component.mjs +103 -0
  207. package/esm2022/lib/permission-manager/components/add-permission/add-permission.component.mjs +70 -0
  208. package/esm2022/lib/permission-manager/components/add-permission/search-config-permission.service.mjs +45 -0
  209. package/esm2022/lib/permission-manager/components/inherited-button.directive.mjs +67 -0
  210. package/esm2022/lib/permission-manager/components/node-path-column/node-path-column.component.mjs +56 -0
  211. package/esm2022/lib/permission-manager/components/permission-container/permission-container.component.mjs +103 -0
  212. package/esm2022/lib/permission-manager/components/permission-list/permission-list.component.mjs +88 -0
  213. package/esm2022/lib/permission-manager/components/permission-list/permission-list.service.mjs +219 -0
  214. package/esm2022/lib/permission-manager/components/pop-over.directive.mjs +134 -0
  215. package/esm2022/lib/permission-manager/components/user-icon-column/user-icon-column.component.mjs +88 -0
  216. package/esm2022/lib/permission-manager/components/user-name-column/user-name-column.component.mjs +82 -0
  217. package/esm2022/lib/permission-manager/components/user-role-column/user-role-column.component.mjs +112 -0
  218. package/esm2022/lib/permission-manager/index.mjs +18 -0
  219. package/esm2022/lib/permission-manager/models/member.model.mjs +59 -0
  220. package/esm2022/lib/permission-manager/models/permission.model.mjs +29 -0
  221. package/esm2022/lib/permission-manager/models/role.model.mjs +18 -0
  222. package/esm2022/lib/permission-manager/permission-manager.module.mjs +84 -0
  223. package/esm2022/lib/permission-manager/public-api.mjs +36 -0
  224. package/esm2022/lib/permission-manager/services/node-permission-dialog.service.mjs +78 -0
  225. package/esm2022/lib/permission-manager/services/node-permission.service.mjs +299 -0
  226. package/esm2022/lib/pipes/content-pipe.module.mjs +37 -0
  227. package/esm2022/lib/pipes/index.mjs +18 -0
  228. package/esm2022/lib/pipes/node-name-tooltip.pipe.mjs +69 -0
  229. package/esm2022/lib/pipes/public-api.mjs +19 -0
  230. package/esm2022/lib/prediction/index.mjs +18 -0
  231. package/esm2022/lib/prediction/public-api.mjs +18 -0
  232. package/esm2022/lib/prediction/services/index.mjs +18 -0
  233. package/esm2022/lib/prediction/services/prediction.service.mjs +57 -0
  234. package/esm2022/lib/search/components/empty-search-result.component.mjs +27 -0
  235. package/esm2022/lib/search/components/index.mjs +43 -0
  236. package/esm2022/lib/search/components/reset-search.directive.mjs +41 -0
  237. package/esm2022/lib/search/components/search-check-list/index.mjs +18 -0
  238. package/esm2022/lib/search/components/search-check-list/search-check-list.component.mjs +159 -0
  239. package/esm2022/lib/search/components/search-chip-autocomplete-input/index.mjs +18 -0
  240. package/esm2022/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.mjs +170 -0
  241. package/esm2022/lib/search/components/search-chip-list/search-chip-list.component.mjs +47 -0
  242. package/esm2022/lib/search/components/search-control.component.mjs +181 -0
  243. package/esm2022/lib/search/components/search-date-range-tabbed/index.mjs +22 -0
  244. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/date-range-type.mjs +23 -0
  245. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/in-last-date-type.mjs +23 -0
  246. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.component.mjs +197 -0
  247. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.mjs +18 -0
  248. package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range-tabbed.component.mjs +201 -0
  249. package/esm2022/lib/search/components/search-datetime-range/index.mjs +18 -0
  250. package/esm2022/lib/search/components/search-datetime-range/search-datetime-range.component.mjs +224 -0
  251. package/esm2022/lib/search/components/search-facet-field/index.mjs +18 -0
  252. package/esm2022/lib/search/components/search-facet-field/search-facet-field.component.mjs +133 -0
  253. package/esm2022/lib/search/components/search-filter/index.mjs +19 -0
  254. package/esm2022/lib/search/components/search-filter/search-filter-card/search-filter-card.component.mjs +46 -0
  255. package/esm2022/lib/search/components/search-filter/search-filter.component.mjs +81 -0
  256. package/esm2022/lib/search/components/search-filter-autocomplete-chips/index.mjs +18 -0
  257. package/esm2022/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.mjs +155 -0
  258. package/esm2022/lib/search/components/search-filter-chips/index.mjs +23 -0
  259. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip/search-facet-chip.component.mjs +105 -0
  260. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-chip-tabbed.component.mjs +110 -0
  261. package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-tabbed-content.component.mjs +129 -0
  262. package/esm2022/lib/search/components/search-filter-chips/search-filter-chips.component.mjs +64 -0
  263. package/esm2022/lib/search/components/search-filter-chips/search-filter-menu-card/search-filter-menu-card.component.mjs +44 -0
  264. package/esm2022/lib/search/components/search-filter-chips/search-widget-chip/search-widget-chip.component.mjs +110 -0
  265. package/esm2022/lib/search/components/search-filter-container/index.mjs +18 -0
  266. package/esm2022/lib/search/components/search-filter-container/search-filter-container.component.mjs +123 -0
  267. package/esm2022/lib/search/components/search-filter-tabbed/index.mjs +19 -0
  268. package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tab.directive.mjs +36 -0
  269. package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tabbed.component.mjs +64 -0
  270. package/esm2022/lib/search/components/search-form/index.mjs +18 -0
  271. package/esm2022/lib/search/components/search-form/search-form.component.mjs +53 -0
  272. package/esm2022/lib/search/components/search-input/index.mjs +18 -0
  273. package/esm2022/lib/search/components/search-input/search-input.component.mjs +109 -0
  274. package/esm2022/lib/search/components/search-logical-filter/index.mjs +18 -0
  275. package/esm2022/lib/search/components/search-logical-filter/search-logical-filter.component.mjs +164 -0
  276. package/esm2022/lib/search/components/search-number-range/index.mjs +18 -0
  277. package/esm2022/lib/search/components/search-number-range/search-number-range.component.mjs +155 -0
  278. package/esm2022/lib/search/components/search-panel/index.mjs +18 -0
  279. package/esm2022/lib/search/components/search-panel/search-panel.component.mjs +44 -0
  280. package/esm2022/lib/search/components/search-properties/file-size-condition.mjs +18 -0
  281. package/esm2022/lib/search/components/search-properties/file-size-operator.enum.mjs +23 -0
  282. package/esm2022/lib/search/components/search-properties/file-size-unit.enum.mjs +26 -0
  283. package/esm2022/lib/search/components/search-properties/index.mjs +22 -0
  284. package/esm2022/lib/search/components/search-properties/search-properties.component.mjs +244 -0
  285. package/esm2022/lib/search/components/search-properties/search-properties.mjs +18 -0
  286. package/esm2022/lib/search/components/search-radio/index.mjs +18 -0
  287. package/esm2022/lib/search/components/search-radio/search-radio.component.mjs +146 -0
  288. package/esm2022/lib/search/components/search-slider/index.mjs +18 -0
  289. package/esm2022/lib/search/components/search-slider/search-slider.component.mjs +120 -0
  290. package/esm2022/lib/search/components/search-sorting-picker/index.mjs +18 -0
  291. package/esm2022/lib/search/components/search-sorting-picker/search-sorting-picker.component.mjs +77 -0
  292. package/esm2022/lib/search/components/search-text/index.mjs +18 -0
  293. package/esm2022/lib/search/components/search-text/search-text.component.mjs +135 -0
  294. package/esm2022/lib/search/components/search-widget-container/index.mjs +18 -0
  295. package/esm2022/lib/search/components/search-widget-container/search-widget-container.component.mjs +113 -0
  296. package/esm2022/lib/search/components/search.component.mjs +153 -0
  297. package/esm2022/lib/search/forms/index.mjs +19 -0
  298. package/esm2022/lib/search/forms/live-error-state-matcher.mjs +23 -0
  299. package/esm2022/lib/search/forms/search-term-validator.mjs +26 -0
  300. package/esm2022/lib/search/index.mjs +18 -0
  301. package/esm2022/lib/search/mocks/index.mjs +18 -0
  302. package/esm2022/lib/search/mocks/search.service.mock.mjs +56 -0
  303. package/esm2022/lib/search/models/autocomplete-option.interface.mjs +22 -0
  304. package/esm2022/lib/search/models/facet-field-bucket.interface.mjs +18 -0
  305. package/esm2022/lib/search/models/facet-field.interface.mjs +29 -0
  306. package/esm2022/lib/search/models/facet-query.interface.mjs +18 -0
  307. package/esm2022/lib/search/models/facet-widget.interface.mjs +18 -0
  308. package/esm2022/lib/search/models/filter-query.interface.mjs +18 -0
  309. package/esm2022/lib/search/models/filter-search.interface.mjs +18 -0
  310. package/esm2022/lib/search/models/index.mjs +34 -0
  311. package/esm2022/lib/search/models/response-facet-query-list.model.mjs +31 -0
  312. package/esm2022/lib/search/models/search-category.interface.mjs +18 -0
  313. package/esm2022/lib/search/models/search-configuration.interface.mjs +18 -0
  314. package/esm2022/lib/search/models/search-filter-list.model.mjs +148 -0
  315. package/esm2022/lib/search/models/search-form.interface.mjs +18 -0
  316. package/esm2022/lib/search/models/search-range.interface.mjs +18 -0
  317. package/esm2022/lib/search/models/search-sorting-definition.interface.mjs +18 -0
  318. package/esm2022/lib/search/models/search-widget-settings.interface.mjs +18 -0
  319. package/esm2022/lib/search/models/search-widget.interface.mjs +18 -0
  320. package/esm2022/lib/search/models/tabbed-facet-field.interface.mjs +18 -0
  321. package/esm2022/lib/search/public-api.mjs +24 -0
  322. package/esm2022/lib/search/search-configuration.token.mjs +19 -0
  323. package/esm2022/lib/search/search.module.mjs +192 -0
  324. package/esm2022/lib/search/services/base-query-builder.service.mjs +509 -0
  325. package/esm2022/lib/search/services/index.mjs +24 -0
  326. package/esm2022/lib/search/services/search-configuration.service.mjs +50 -0
  327. package/esm2022/lib/search/services/search-facet-filters.service.mjs +374 -0
  328. package/esm2022/lib/search/services/search-filter.service.mjs +56 -0
  329. package/esm2022/lib/search/services/search-header-query-builder.service.mjs +136 -0
  330. package/esm2022/lib/search/services/search-query-builder.service.mjs +48 -0
  331. package/esm2022/lib/search/services/search.service.mjs +89 -0
  332. package/esm2022/lib/search-ai/index.mjs +18 -0
  333. package/esm2022/lib/search-ai/models/search-ai-input-state.mjs +18 -0
  334. package/esm2022/lib/search-ai/public-api.mjs +19 -0
  335. package/esm2022/lib/search-ai/services/search-ai.service.mjs +103 -0
  336. package/esm2022/lib/security/index.mjs +18 -0
  337. package/esm2022/lib/security/public-api.mjs +18 -0
  338. package/esm2022/lib/security/services/models/security-controls-group-response.interface.mjs +18 -0
  339. package/esm2022/lib/security/services/models/security-controls-mark-response.interface.mjs +18 -0
  340. package/esm2022/lib/security/services/security-controls-groups-marks-security.service.mjs +274 -0
  341. package/esm2022/lib/security-options-loader/security-options-loader.service.mjs +43 -0
  342. package/esm2022/lib/services/alfresco-api.interface.mjs +18 -0
  343. package/esm2022/lib/services/alfresco-api.service.mjs +120 -0
  344. package/esm2022/lib/services/index.mjs +18 -0
  345. package/esm2022/lib/services/public-api.mjs +18 -0
  346. package/esm2022/lib/tag/index.mjs +18 -0
  347. package/esm2022/lib/tag/public-api.mjs +24 -0
  348. package/esm2022/lib/tag/services/tag.service.mjs +171 -0
  349. package/esm2022/lib/tag/tag-actions/tag-actions.component.mjs +115 -0
  350. package/esm2022/lib/tag/tag-list/tag-list.component.mjs +98 -0
  351. package/esm2022/lib/tag/tag-node-list/tag-node-list.component.mjs +80 -0
  352. package/esm2022/lib/tag/tag.module.mjs +37 -0
  353. package/esm2022/lib/tag/tags-creator/tags-creator-mode.mjs +27 -0
  354. package/esm2022/lib/tag/tags-creator/tags-creator.component.mjs +371 -0
  355. package/esm2022/lib/testing/content.testing.module.mjs +56 -0
  356. package/esm2022/lib/tree/components/tree.component.mjs +313 -0
  357. package/esm2022/lib/tree/index.mjs +18 -0
  358. package/esm2022/lib/tree/models/tree-context-menu-result.interface.mjs +18 -0
  359. package/esm2022/lib/tree/models/tree-node.interface.mjs +22 -0
  360. package/esm2022/lib/tree/models/tree-response.interface.mjs +18 -0
  361. package/esm2022/lib/tree/public-api.mjs +23 -0
  362. package/esm2022/lib/tree/services/tree.service.mjs +134 -0
  363. package/esm2022/lib/tree/tree.module.mjs +33 -0
  364. package/esm2022/lib/tree-view/components/tree-view.component.mjs +76 -0
  365. package/esm2022/lib/tree-view/data/tree-view-datasource.mjs +99 -0
  366. package/esm2022/lib/tree-view/index.mjs +18 -0
  367. package/esm2022/lib/tree-view/models/tree-view.model.mjs +28 -0
  368. package/esm2022/lib/tree-view/public-api.mjs +22 -0
  369. package/esm2022/lib/tree-view/services/tree-view.service.mjs +38 -0
  370. package/esm2022/lib/tree-view/tree-view.module.mjs +33 -0
  371. package/esm2022/lib/upload/components/base-upload/upload-base.mjs +176 -0
  372. package/esm2022/lib/upload/components/file-uploading-dialog.component.mjs +191 -0
  373. package/esm2022/lib/upload/components/file-uploading-list-row.component.mjs +93 -0
  374. package/esm2022/lib/upload/components/file-uploading-list.component.mjs +124 -0
  375. package/esm2022/lib/upload/components/upload-button.component.mjs +134 -0
  376. package/esm2022/lib/upload/components/upload-drag-area.component.mjs +112 -0
  377. package/esm2022/lib/upload/components/upload-files.event.mjs +41 -0
  378. package/esm2022/lib/upload/components/upload-version-button.component.mjs +55 -0
  379. package/esm2022/lib/upload/directives/file-draggable.directive.mjs +154 -0
  380. package/esm2022/lib/upload/directives/toggle-icon.directive.mjs +75 -0
  381. package/esm2022/lib/upload/index.mjs +18 -0
  382. package/esm2022/lib/upload/pipes/file-upload-error.pipe.mjs +39 -0
  383. package/esm2022/lib/upload/public-api.mjs +29 -0
  384. package/esm2022/lib/upload/upload.module.mjs +72 -0
  385. package/esm2022/lib/version-compatibility/index.mjs +18 -0
  386. package/esm2022/lib/version-compatibility/public-api.mjs +20 -0
  387. package/esm2022/lib/version-compatibility/version-compatibility-factory.mjs +26 -0
  388. package/esm2022/lib/version-compatibility/version-compatibility.directive.mjs +53 -0
  389. package/esm2022/lib/version-compatibility/version-compatibility.module.mjs +33 -0
  390. package/esm2022/lib/version-compatibility/version-compatibility.service.mjs +76 -0
  391. package/esm2022/lib/version-manager/content-version.service.mjs +53 -0
  392. package/esm2022/lib/version-manager/index.mjs +18 -0
  393. package/esm2022/lib/version-manager/public-api.mjs +23 -0
  394. package/esm2022/lib/version-manager/version-comparison.component.mjs +43 -0
  395. package/esm2022/lib/version-manager/version-list.component.mjs +216 -0
  396. package/esm2022/lib/version-manager/version-manager.component.mjs +146 -0
  397. package/esm2022/lib/version-manager/version-manager.module.mjs +48 -0
  398. package/esm2022/lib/version-manager/version-upload.component.mjs +155 -0
  399. package/esm2022/lib/viewer/alfresco-viewer.module.mjs +33 -0
  400. package/esm2022/lib/viewer/components/alfresco-viewer.component.mjs +401 -0
  401. package/esm2022/lib/viewer/index.mjs +18 -0
  402. package/esm2022/lib/viewer/public-api.mjs +19 -0
  403. package/esm2022/public-api.mjs +56 -0
  404. package/fesm2022/adf-content-services.mjs +739 -734
  405. package/fesm2022/adf-content-services.mjs.map +1 -1
  406. package/lib/new-version-uploader/new-version-uploader.dialog.scss +1 -1
  407. package/lib/upload/components/base-upload/upload-base.d.ts +1 -1
  408. package/package.json +5 -3
@@ -0,0 +1,313 @@
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 { TranslateModule } 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 "@ngx-translate/core";
37
+ import * as i5 from "@angular/material/tree";
38
+ import * as i6 from "@angular/material/progress-spinner";
39
+ import * as i7 from "@angular/material/button";
40
+ import * as i8 from "@angular/material/checkbox";
41
+ import * as i9 from "@angular/material/menu";
42
+ import * as i10 from "@angular/material/icon";
43
+ export class TreeComponent {
44
+ constructor(treeService, userPreferenceService) {
45
+ this.treeService = treeService;
46
+ this.userPreferenceService = userPreferenceService;
47
+ /** Variable defining if tree header should be sticky. By default set to false */
48
+ this.stickyHeader = false;
49
+ /** Variable defining if tree nodes should be selectable. By default set to false */
50
+ this.selectableNodes = false;
51
+ /** Icon shown when node has children and is collapsed. By default set to chevron_right */
52
+ this.expandIcon = 'chevron_right';
53
+ /** Icon shown when node is expanded. By default set to expand_more */
54
+ this.collapseIcon = 'expand_more';
55
+ /** Emitted when pagination has been changed */
56
+ this.paginationChanged = new EventEmitter();
57
+ /** Emitted when any context menu option is selected */
58
+ this.contextMenuOptionSelected = new EventEmitter();
59
+ this.loadingRootSource = new BehaviorSubject(false);
60
+ this.contextMenuOptionsChanged$ = new Subject();
61
+ this.treeNodesSelection = new SelectionModel(true, [], true, (node1, node2) => node1.id === node2.id);
62
+ }
63
+ set contextMenuSource(contextMenuSource) {
64
+ this._contextMenuSource = contextMenuSource;
65
+ }
66
+ /** Array of context menu options which should be displayed for each row. */
67
+ set contextMenuOptions(contextMenuOptions) {
68
+ this.contextMenuOptionsChanged$.next();
69
+ if (contextMenuOptions) {
70
+ this._contextMenuOptions = contextMenuOptions.map((option) => {
71
+ if (!option.subject) {
72
+ option = {
73
+ ...option,
74
+ subject: new Subject()
75
+ };
76
+ }
77
+ return option;
78
+ });
79
+ merge(...this.contextMenuOptions.map((option) => option.subject))
80
+ .pipe(takeUntil(this.contextMenuOptionsChanged$))
81
+ .subscribe((option) => {
82
+ this.contextMenuOptionSelected.emit({
83
+ row: this._contextMenuSource,
84
+ contextMenuOption: option
85
+ });
86
+ });
87
+ }
88
+ else {
89
+ this._contextMenuOptions = contextMenuOptions;
90
+ }
91
+ }
92
+ get contextMenuOptions() {
93
+ return this._contextMenuOptions;
94
+ }
95
+ ngOnInit() {
96
+ this.loadingRoot$ = this.loadingRootSource.asObservable();
97
+ this.refreshTree(0, this.userPreferenceService.paginationSize);
98
+ this.treeNodesSelection.changed.subscribe((selectionChange) => {
99
+ this.onTreeSelectionChange(selectionChange);
100
+ });
101
+ }
102
+ ngOnDestroy() {
103
+ this.contextMenuOptionsChanged$.next();
104
+ this.contextMenuOptionsChanged$.complete();
105
+ }
106
+ /**
107
+ * Checks if node is LoadMoreNode node
108
+ *
109
+ * @param _idx (unused)
110
+ * @param node node to be checked
111
+ * @returns `true` if there are more items to load, otherwise `false`
112
+ */
113
+ isLoadMoreNode(_idx, node) {
114
+ return node.nodeType === TreeNodeType.LoadMoreNode;
115
+ }
116
+ /**
117
+ * Checks if tree is empty
118
+ *
119
+ * @returns boolean
120
+ */
121
+ isEmpty() {
122
+ return this.treeService.isEmpty();
123
+ }
124
+ /**
125
+ * Returns action icon based on expanded/collapsed node state.
126
+ *
127
+ * @param node node to be checked
128
+ * @returns collapse or expand icon
129
+ */
130
+ expandCollapseIconValue(node) {
131
+ return this.treeService.treeControl.isExpanded(node) ? this.collapseIcon : this.expandIcon;
132
+ }
133
+ /**
134
+ * Refreshes the tree, root nodes are reloaded, tree selection is cleared.
135
+ *
136
+ * @param skipCount Number of root nodes to skip.
137
+ * @param maxItems Maximum number of nodes returned from Observable.
138
+ * @param searchTerm Specifies if categories should be filtered out by name or not. If not specified then returns categories without filtering.
139
+ */
140
+ refreshTree(skipCount, maxItems, searchTerm) {
141
+ this.loadingRootSource.next(true);
142
+ this.treeNodesSelection.clear();
143
+ this.treeService.getSubNodes('-root-', skipCount, maxItems, searchTerm).subscribe((response) => {
144
+ this.treeService.treeNodes = response.entries;
145
+ this.treeNodesSelection.deselect(...response.entries);
146
+ this.paginationChanged.emit(response.pagination);
147
+ this.loadingRootSource.next(false);
148
+ });
149
+ }
150
+ /**
151
+ * Collapses or expanding the node based on its current state
152
+ *
153
+ * @param node node to be collapsed/expanded
154
+ */
155
+ expandCollapseNode(node) {
156
+ if (node.hasChildren && !node.isLoading) {
157
+ if (this.treeService.treeControl.isExpanded(node)) {
158
+ this.treeService.collapseNode(node);
159
+ }
160
+ else {
161
+ node.isLoading = true;
162
+ this.treeService.getSubNodes(node.id, 0, this.userPreferenceService.paginationSize).subscribe((response) => {
163
+ this.treeService.expandNode(node, response.entries);
164
+ node.isLoading = false;
165
+ if (this.treeNodesSelection.isSelected(node)) {
166
+ //timeout used to update nodeCheckboxes query list after new nodes are added so they can be selected
167
+ setTimeout(() => {
168
+ this.treeNodesSelection.select(...response.entries);
169
+ });
170
+ }
171
+ });
172
+ }
173
+ }
174
+ }
175
+ /**
176
+ * Loads more subnode for a given parent node
177
+ *
178
+ * @param node parent node
179
+ */
180
+ loadMoreSubnodes(node) {
181
+ node.isLoading = true;
182
+ const parentNode = this.treeService.getParentNode(node.parentId);
183
+ this.treeService.removeNode(node);
184
+ const loadedChildren = this.treeService.getChildren(parentNode).length;
185
+ this.treeService
186
+ .getSubNodes(parentNode.id, loadedChildren, this.userPreferenceService.paginationSize)
187
+ .subscribe((response) => {
188
+ this.treeService.appendNodes(parentNode, response.entries);
189
+ node.isLoading = false;
190
+ if (this.treeNodesSelection.isSelected(parentNode)) {
191
+ //timeout used to update nodeCheckboxes query list after new nodes are added so they can be selected
192
+ setTimeout(() => {
193
+ this.treeNodesSelection.select(...response.entries);
194
+ });
195
+ }
196
+ });
197
+ }
198
+ /**
199
+ * When node is selected it selects all its descendants
200
+ *
201
+ * @param node selected node
202
+ */
203
+ onNodeSelected(node) {
204
+ this.treeNodesSelection.toggle(node);
205
+ const descendants = this.treeService.treeControl.getDescendants(node).filter(this.isRegularNode);
206
+ if (descendants.length > 0) {
207
+ this.treeNodesSelection.isSelected(node)
208
+ ? this.treeNodesSelection.select(...descendants)
209
+ : this.treeNodesSelection.deselect(...descendants);
210
+ }
211
+ this.checkParentsSelection(node);
212
+ }
213
+ /**
214
+ * Checks if all descendants of a node are selected
215
+ *
216
+ * @param node selected node
217
+ * @returns boolean
218
+ */
219
+ descendantsAllSelected(node) {
220
+ const descendants = this.treeService.treeControl.getDescendants(node).filter(this.isRegularNode);
221
+ return descendants.length > 0 && descendants.every((descendant) => this.treeNodesSelection.isSelected(descendant));
222
+ }
223
+ /**
224
+ * Checks if some descendants of a node are selected
225
+ *
226
+ * @param node selected node
227
+ * @returns boolean
228
+ */
229
+ descendantsPartiallySelected(node) {
230
+ const descendants = this.treeService.treeControl.getDescendants(node).filter(this.isRegularNode);
231
+ return (descendants.length > 0 &&
232
+ !this.descendantsAllSelected(node) &&
233
+ descendants.some((descendant) => this.treeNodesSelection.isSelected(descendant)));
234
+ }
235
+ checkParentsSelection(node) {
236
+ let parent = this.treeService.getParentNode(node.parentId);
237
+ while (parent) {
238
+ this.checkRootNodeSelection(parent);
239
+ parent = this.treeService.getParentNode(parent.parentId);
240
+ }
241
+ }
242
+ checkRootNodeSelection(node) {
243
+ const nodeSelected = this.treeNodesSelection.isSelected(node);
244
+ const descAllSelected = this.descendantsAllSelected(node);
245
+ if (nodeSelected && !descAllSelected) {
246
+ this.treeNodesSelection.deselect(node);
247
+ }
248
+ else if (!nodeSelected && descAllSelected) {
249
+ this.treeNodesSelection.select(node);
250
+ }
251
+ }
252
+ onTreeSelectionChange(selectionChange) {
253
+ selectionChange.removed.forEach((unselectedNode) => {
254
+ if (this.isRegularNode(unselectedNode)) {
255
+ this.nodeCheckboxes.find((checkbox) => checkbox.id === unselectedNode.id).checked = false;
256
+ }
257
+ });
258
+ selectionChange.added.forEach((selectedNode) => {
259
+ if (this.isRegularNode(selectedNode)) {
260
+ this.nodeCheckboxes.find((checkbox) => checkbox.id === selectedNode.id).checked = true;
261
+ }
262
+ });
263
+ }
264
+ isRegularNode(node) {
265
+ return node.nodeType !== TreeNodeType.LoadMoreNode;
266
+ }
267
+ 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 }); }
268
+ 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: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i5.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i5.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "component", type: i5.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i5.MatTreeNode, selector: "mat-tree-node", inputs: ["tabIndex", "disabled"], outputs: ["activation", "expandedChange"], exportAs: ["matTreeNode"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.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: i8.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: i9.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: i9.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: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], encapsulation: i0.ViewEncapsulation.None }); }
269
+ }
270
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TreeComponent, decorators: [{
271
+ type: Component,
272
+ args: [{ selector: 'adf-tree', standalone: true, imports: [
273
+ CommonModule,
274
+ TranslateModule,
275
+ MatTreeModule,
276
+ MatProgressSpinnerModule,
277
+ MatButtonModule,
278
+ IconComponent,
279
+ ContextMenuDirective,
280
+ MatCheckboxModule,
281
+ MatMenuModule,
282
+ MatIconModule
283
+ ], 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"] }]
284
+ }], ctorParameters: () => [{ type: i1.TreeService }, { type: i2.UserPreferencesService }], propDecorators: { emptyContentTemplate: [{
285
+ type: Input
286
+ }], nodeActionsMenuTemplate: [{
287
+ type: Input
288
+ }], stickyHeader: [{
289
+ type: Input
290
+ }, {
291
+ type: HostBinding,
292
+ args: ['class.adf-tree-sticky-header']
293
+ }], selectableNodes: [{
294
+ type: Input
295
+ }], displayName: [{
296
+ type: Input
297
+ }], loadMoreSuffix: [{
298
+ type: Input
299
+ }], expandIcon: [{
300
+ type: Input
301
+ }], collapseIcon: [{
302
+ type: Input
303
+ }], paginationChanged: [{
304
+ type: Output
305
+ }], contextMenuOptionSelected: [{
306
+ type: Output
307
+ }], nodeCheckboxes: [{
308
+ type: ViewChildren,
309
+ args: [MatCheckbox]
310
+ }], contextMenuOptions: [{
311
+ type: Input
312
+ }] } });
313
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL3RyZWUvY29tcG9uZW50cy90cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvdHJlZS9jb21wb25lbnRzL3RyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQVksWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQW1CLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEgsT0FBTyxFQUFtQixjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FB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Q3hCLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixvQkFBb0I7d0JBQ3BCLGlCQUFpQjt3QkFDakIsYUFBYTt3QkFDYixhQUFhO3FCQUNoQixRQUdLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxpQkFDWixpQkFBaUIsQ0FBQyxJQUFJO3FIQUs5QixvQkFBb0I7c0JBRDFCLEtBQUs7Z0JBS0MsdUJBQXVCO3NCQUQ3QixLQUFLO2dCQU1DLFlBQVk7c0JBRmxCLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsOEJBQThCO2dCQUtwQyxlQUFlO3NCQURyQixLQUFLO2dCQUtDLFdBQVc7c0JBRGpCLEtBQUs7Z0JBS0MsY0FBYztzQkFEcEIsS0FBSztnQkFLQyxVQUFVO3NCQURoQixLQUFLO2dCQUtDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBS0MsaUJBQWlCO3NCQUR2QixNQUFNO2dCQUtBLHlCQUF5QjtzQkFEL0IsTUFBTTtnQkFJQSxjQUFjO3NCQURwQixZQUFZO3VCQUFDLFdBQVc7Z0JBa0JyQixrQkFBa0I7c0JBRHJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVHJlZU5vZGUsIFRyZWVOb2RlVHlwZSB9IGZyb20gJy4uL21vZGVscy90cmVlLW5vZGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRyZWVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdHJlZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnRleHRNZW51RGlyZWN0aXZlLCBJY29uQ29tcG9uZW50LCBQYWdpbmF0aW9uTW9kZWwsIFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgU2VsZWN0aW9uQ2hhbmdlLCBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBUcmVlUmVzcG9uc2UgfSBmcm9tICcuLi9tb2RlbHMvdHJlZS1yZXNwb25zZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3gsIE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgVHJlZUNvbnRleHRNZW51UmVzdWx0IH0gZnJvbSAnLi4vbW9kZWxzL3RyZWUtY29udGV4dC1tZW51LXJlc3VsdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWF0VHJlZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi10cmVlJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIE1hdFRyZWVNb2R1bGUsXG4gICAgICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBJY29uQ29tcG9uZW50LFxuICAgICAgICBDb250ZXh0TWVudURpcmVjdGl2ZSxcbiAgICAgICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgICAgIE1hdE1lbnVNb2R1bGUsXG4gICAgICAgIE1hdEljb25Nb2R1bGVcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90cmVlLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaG9zdDogeyBjbGFzczogJ2FkZi10cmVlJyB9LFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgVHJlZUNvbXBvbmVudDxUIGV4dGVuZHMgVHJlZU5vZGU+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKiBUZW1wbGF0ZVJlZiB0byBwcm92aWRlIGVtcHR5IHRlbXBsYXRlIHdoZW4gbm8gbm9kZXMgYXJlIGxvYWRlZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGVtcHR5Q29udGVudFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIFRlbXBsYXRlUmVmIHRvIHByb3ZpZGUgY29udGV4dCBtZW51IGl0ZW1zIGZvciBjb250ZXh0IG1lbnUgZGlzcGxheWVkIG9uIGVhY2ggcm93Ki9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBub2RlQWN0aW9uc01lbnVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBWYXJpYWJsZSBkZWZpbmluZyBpZiB0cmVlIGhlYWRlciBzaG91bGQgYmUgc3RpY2t5LiBCeSBkZWZhdWx0IHNldCB0byBmYWxzZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hZGYtdHJlZS1zdGlja3ktaGVhZGVyJylcbiAgICBwdWJsaWMgc3RpY2t5SGVhZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogVmFyaWFibGUgZGVmaW5pbmcgaWYgdHJlZSBub2RlcyBzaG91bGQgYmUgc2VsZWN0YWJsZS4gQnkgZGVmYXVsdCBzZXQgdG8gZmFsc2UgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RhYmxlTm9kZXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBUcmVlIGRpc3BsYXkgbmFtZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG5cbiAgICAvKiogTG9hZCBtb3JlIHN1ZmZpeCBmb3IgbG9hZCBtb3JlIGJ1dHRvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvYWRNb3JlU3VmZml4OiBzdHJpbmc7XG5cbiAgICAvKiogSWNvbiBzaG93biB3aGVuIG5vZGUgaGFzIGNoaWxkcmVuIGFuZCBpcyBjb2xsYXBzZWQuIEJ5IGRlZmF1bHQgc2V0IHRvIGNoZXZyb25fcmlnaHQgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBleHBhbmRJY29uOiBzdHJpbmcgPSAnY2hldnJvbl9yaWdodCc7XG5cbiAgICAvKiogSWNvbiBzaG93biB3aGVuIG5vZGUgaXMgZXhwYW5kZWQuIEJ5IGRlZmF1bHQgc2V0IHRvIGV4cGFuZF9tb3JlICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY29sbGFwc2VJY29uOiBzdHJpbmcgPSAnZXhwYW5kX21vcmUnO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBwYWdpbmF0aW9uIGhhcyBiZWVuIGNoYW5nZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcGFnaW5hdGlvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxQYWdpbmF0aW9uTW9kZWw+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhbnkgY29udGV4dCBtZW51IG9wdGlvbiBpcyBzZWxlY3RlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjb250ZXh0TWVudU9wdGlvblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlQ29udGV4dE1lbnVSZXN1bHQ8VD4+KCk7XG5cbiAgICBAVmlld0NoaWxkcmVuKE1hdENoZWNrYm94KVxuICAgIHB1YmxpYyBub2RlQ2hlY2tib3hlczogUXVlcnlMaXN0PE1hdENoZWNrYm94PjtcblxuICAgIHByaXZhdGUgbG9hZGluZ1Jvb3RTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICBwcml2YXRlIF9jb250ZXh0TWVudVNvdXJjZTogVDtcbiAgICBwcml2YXRlIF9jb250ZXh0TWVudU9wdGlvbnM6IGFueVtdO1xuICAgIHByaXZhdGUgY29udGV4dE1lbnVPcHRpb25zQ2hhbmdlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHB1YmxpYyBsb2FkaW5nUm9vdCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgcHVibGljIHRyZWVOb2Rlc1NlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUPih0cnVlLCBbXSwgdHJ1ZSwgKG5vZGUxOiBULCBub2RlMjogVCkgPT4gbm9kZTEuaWQgPT09IG5vZGUyLmlkKTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0cmVlU2VydmljZTogVHJlZVNlcnZpY2U8VD4sIHByaXZhdGUgdXNlclByZWZlcmVuY2VTZXJ2aWNlOiBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlKSB7fVxuXG4gICAgc2V0IGNvbnRleHRNZW51U291cmNlKGNvbnRleHRNZW51U291cmNlOiBUKSB7XG4gICAgICAgIHRoaXMuX2NvbnRleHRNZW51U291cmNlID0gY29udGV4dE1lbnVTb3VyY2U7XG4gICAgfVxuXG4gICAgLyoqIEFycmF5IG9mIGNvbnRleHQgbWVudSBvcHRpb25zIHdoaWNoIHNob3VsZCBiZSBkaXNwbGF5ZWQgZm9yIGVhY2ggcm93LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNvbnRleHRNZW51T3B0aW9ucyhjb250ZXh0TWVudU9wdGlvbnM6IGFueVtdKSB7XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnVPcHRpb25zQ2hhbmdlZCQubmV4dCgpO1xuICAgICAgICBpZiAoY29udGV4dE1lbnVPcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0TWVudU9wdGlvbnMgPSBjb250ZXh0TWVudU9wdGlvbnMubWFwKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbi5zdWJqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3Q6IG5ldyBTdWJqZWN0KClcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbWVyZ2UoLi4udGhpcy5jb250ZXh0TWVudU9wdGlvbnMubWFwKChvcHRpb24pID0+IG9wdGlvbi5zdWJqZWN0KSlcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5jb250ZXh0TWVudU9wdGlvbnNDaGFuZ2VkJCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnVPcHRpb25TZWxlY3RlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogdGhpcy5fY29udGV4dE1lbnVTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TWVudU9wdGlvbjogb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY29udGV4dE1lbnVPcHRpb25zID0gY29udGV4dE1lbnVPcHRpb25zO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGNvbnRleHRNZW51T3B0aW9ucygpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0TWVudU9wdGlvbnM7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9hZGluZ1Jvb3QkID0gdGhpcy5sb2FkaW5nUm9vdFNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoVHJlZSgwLCB0aGlzLnVzZXJQcmVmZXJlbmNlU2VydmljZS5wYWdpbmF0aW9uU2l6ZSk7XG4gICAgICAgIHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLmNoYW5nZWQuc3Vic2NyaWJlKChzZWxlY3Rpb25DaGFuZ2U6IFNlbGVjdGlvbkNoYW5nZTxUPikgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblRyZWVTZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0aW9uQ2hhbmdlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuY29udGV4dE1lbnVPcHRpb25zQ2hhbmdlZCQubmV4dCgpO1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51T3B0aW9uc0NoYW5nZWQkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIG5vZGUgaXMgTG9hZE1vcmVOb2RlIG5vZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBfaWR4ICh1bnVzZWQpXG4gICAgICogQHBhcmFtIG5vZGUgbm9kZSB0byBiZSBjaGVja2VkXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZXJlIGFyZSBtb3JlIGl0ZW1zIHRvIGxvYWQsIG90aGVyd2lzZSBgZmFsc2VgXG4gICAgICovXG4gICAgcHVibGljIGlzTG9hZE1vcmVOb2RlKF9pZHg6IG51bWJlciwgbm9kZTogVCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLkxvYWRNb3JlTm9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdHJlZSBpcyBlbXB0eVxuICAgICAqXG4gICAgICogQHJldHVybnMgYm9vbGVhblxuICAgICAqL1xuICAgIHB1YmxpYyBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlU2VydmljZS5pc0VtcHR5KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhY3Rpb24gaWNvbiBiYXNlZCBvbiBleHBhbmRlZC9jb2xsYXBzZWQgbm9kZSBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlIG5vZGUgdG8gYmUgY2hlY2tlZFxuICAgICAqIEByZXR1cm5zIGNvbGxhcHNlIG9yIGV4cGFuZCBpY29uXG4gICAgICovXG4gICAgcHVibGljIGV4cGFuZENvbGxhcHNlSWNvblZhbHVlKG5vZGU6IFQpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlU2VydmljZS50cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpID8gdGhpcy5jb2xsYXBzZUljb24gOiB0aGlzLmV4cGFuZEljb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVmcmVzaGVzIHRoZSB0cmVlLCByb290IG5vZGVzIGFyZSByZWxvYWRlZCwgdHJlZSBzZWxlY3Rpb24gaXMgY2xlYXJlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBza2lwQ291bnQgTnVtYmVyIG9mIHJvb3Qgbm9kZXMgdG8gc2tpcC5cbiAgICAgKiBAcGFyYW0gbWF4SXRlbXMgTWF4aW11bSBudW1iZXIgb2Ygbm9kZXMgcmV0dXJuZWQgZnJvbSBPYnNlcnZhYmxlLlxuICAgICAqIEBwYXJhbSBzZWFyY2hUZXJtIFNwZWNpZmllcyBpZiBjYXRlZ29yaWVzIHNob3VsZCBiZSBmaWx0ZXJlZCBvdXQgYnkgbmFtZSBvciBub3QuIElmIG5vdCBzcGVjaWZpZWQgdGhlbiByZXR1cm5zIGNhdGVnb3JpZXMgd2l0aG91dCBmaWx0ZXJpbmcuXG4gICAgICovXG4gICAgcHVibGljIHJlZnJlc2hUcmVlKHNraXBDb3VudD86IG51bWJlciwgbWF4SXRlbXM/OiBudW1iZXIsIHNlYXJjaFRlcm0/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nUm9vdFNvdXJjZS5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmdldFN1Yk5vZGVzKCctcm9vdC0nLCBza2lwQ291bnQsIG1heEl0ZW1zLCBzZWFyY2hUZXJtKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBUcmVlUmVzcG9uc2U8VD4pID0+IHtcbiAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UudHJlZU5vZGVzID0gcmVzcG9uc2UuZW50cmllcztcbiAgICAgICAgICAgIHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLmRlc2VsZWN0KC4uLnJlc3BvbnNlLmVudHJpZXMpO1xuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uQ2hhbmdlZC5lbWl0KHJlc3BvbnNlLnBhZ2luYXRpb24pO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nUm9vdFNvdXJjZS5uZXh0KGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29sbGFwc2VzIG9yIGV4cGFuZGluZyB0aGUgbm9kZSBiYXNlZCBvbiBpdHMgY3VycmVudCBzdGF0ZVxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGUgbm9kZSB0byBiZSBjb2xsYXBzZWQvZXhwYW5kZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgZXhwYW5kQ29sbGFwc2VOb2RlKG5vZGU6IFQpOiB2b2lkIHtcbiAgICAgICAgaWYgKG5vZGUuaGFzQ2hpbGRyZW4gJiYgIW5vZGUuaXNMb2FkaW5nKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50cmVlU2VydmljZS50cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5jb2xsYXBzZU5vZGUobm9kZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5vZGUuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmdldFN1Yk5vZGVzKG5vZGUuaWQsIDAsIHRoaXMudXNlclByZWZlcmVuY2VTZXJ2aWNlLnBhZ2luYXRpb25TaXplKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBUcmVlUmVzcG9uc2U8VD4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5leHBhbmROb2RlKG5vZGUsIHJlc3BvbnNlLmVudHJpZXMpO1xuICAgICAgICAgICAgICAgICAgICBub2RlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy90aW1lb3V0IHVzZWQgdG8gdXBkYXRlIG5vZGVDaGVja2JveGVzIHF1ZXJ5IGxpc3QgYWZ0ZXIgbmV3IG5vZGVzIGFyZSBhZGRlZCBzbyB0aGV5IGNhbiBiZSBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uc2VsZWN0KC4uLnJlc3BvbnNlLmVudHJpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWRzIG1vcmUgc3Vibm9kZSBmb3IgYSBnaXZlbiBwYXJlbnQgbm9kZVxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGUgcGFyZW50IG5vZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgbG9hZE1vcmVTdWJub2Rlcyhub2RlOiBUKTogdm9pZCB7XG4gICAgICAgIG5vZGUuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcGFyZW50Tm9kZTogVCA9IHRoaXMudHJlZVNlcnZpY2UuZ2V0UGFyZW50Tm9kZShub2RlLnBhcmVudElkKTtcbiAgICAgICAgdGhpcy50cmVlU2VydmljZS5yZW1vdmVOb2RlKG5vZGUpO1xuICAgICAgICBjb25zdCBsb2FkZWRDaGlsZHJlbjogbnVtYmVyID0gdGhpcy50cmVlU2VydmljZS5nZXRDaGlsZHJlbihwYXJlbnROb2RlKS5sZW5ndGg7XG4gICAgICAgIHRoaXMudHJlZVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRTdWJOb2RlcyhwYXJlbnROb2RlLmlkLCBsb2FkZWRDaGlsZHJlbiwgdGhpcy51c2VyUHJlZmVyZW5jZVNlcnZpY2UucGFnaW5hdGlvblNpemUpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogVHJlZVJlc3BvbnNlPFQ+KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5hcHBlbmROb2RlcyhwYXJlbnROb2RlLCByZXNwb25zZS5lbnRyaWVzKTtcbiAgICAgICAgICAgICAgICBub2RlLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi5pc1NlbGVjdGVkKHBhcmVudE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGltZW91dCB1c2VkIHRvIHVwZGF0ZSBub2RlQ2hlY2tib3hlcyBxdWVyeSBsaXN0IGFmdGVyIG5ldyBub2RlcyBhcmUgYWRkZWQgc28gdGhleSBjYW4gYmUgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi5zZWxlY3QoLi4ucmVzcG9uc2UuZW50cmllcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZW4gbm9kZSBpcyBzZWxlY3RlZCBpdCBzZWxlY3RzIGFsbCBpdHMgZGVzY2VuZGFudHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlIHNlbGVjdGVkIG5vZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgb25Ob2RlU2VsZWN0ZWQobm9kZTogVCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi50b2dnbGUobm9kZSk7XG4gICAgICAgIGNvbnN0IGRlc2NlbmRhbnRzOiBUW10gPSB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpLmZpbHRlcih0aGlzLmlzUmVndWxhck5vZGUpO1xuICAgICAgICBpZiAoZGVzY2VuZGFudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKVxuICAgICAgICAgICAgICAgID8gdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uc2VsZWN0KC4uLmRlc2NlbmRhbnRzKVxuICAgICAgICAgICAgICAgIDogdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uZGVzZWxlY3QoLi4uZGVzY2VuZGFudHMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tQYXJlbnRzU2VsZWN0aW9uKG5vZGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhbGwgZGVzY2VuZGFudHMgb2YgYSBub2RlIGFyZSBzZWxlY3RlZFxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGUgc2VsZWN0ZWQgbm9kZVxuICAgICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlOiBUKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGRlc2NlbmRhbnRzOiBUW10gPSB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpLmZpbHRlcih0aGlzLmlzUmVndWxhck5vZGUpO1xuICAgICAgICByZXR1cm4gZGVzY2VuZGFudHMubGVuZ3RoID4gMCAmJiBkZXNjZW5kYW50cy5ldmVyeSgoZGVzY2VuZGFudDogVCkgPT4gdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChkZXNjZW5kYW50KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHNvbWUgZGVzY2VuZGFudHMgb2YgYSBub2RlIGFyZSBzZWxlY3RlZFxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGUgc2VsZWN0ZWQgbm9kZVxuICAgICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGVzY2VuZGFudHNQYXJ0aWFsbHlTZWxlY3RlZChub2RlOiBUKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGRlc2NlbmRhbnRzOiBUW10gPSB0aGlzLnRyZWVTZXJ2aWNlLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpLmZpbHRlcih0aGlzLmlzUmVndWxhck5vZGUpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZGVzY2VuZGFudHMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgIXRoaXMuZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlKSAmJlxuICAgICAgICAgICAgZGVzY2VuZGFudHMuc29tZSgoZGVzY2VuZGFudDogVCkgPT4gdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChkZXNjZW5kYW50KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrUGFyZW50c1NlbGVjdGlvbihub2RlOiBUKTogdm9pZCB7XG4gICAgICAgIGxldCBwYXJlbnQ6IFQgPSB0aGlzLnRyZWVTZXJ2aWNlLmdldFBhcmVudE5vZGUobm9kZS5wYXJlbnRJZCk7XG4gICAgICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tSb290Tm9kZVNlbGVjdGlvbihwYXJlbnQpO1xuICAgICAgICAgICAgcGFyZW50ID0gdGhpcy50cmVlU2VydmljZS5nZXRQYXJlbnROb2RlKHBhcmVudC5wYXJlbnRJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrUm9vdE5vZGVTZWxlY3Rpb24obm9kZTogVCk6IHZvaWQge1xuICAgICAgICBjb25zdCBub2RlU2VsZWN0ZWQ6IGJvb2xlYW4gPSB0aGlzLnRyZWVOb2Rlc1NlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpO1xuICAgICAgICBjb25zdCBkZXNjQWxsU2VsZWN0ZWQgPSB0aGlzLmRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZSk7XG4gICAgICAgIGlmIChub2RlU2VsZWN0ZWQgJiYgIWRlc2NBbGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy50cmVlTm9kZXNTZWxlY3Rpb24uZGVzZWxlY3Qobm9kZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIW5vZGVTZWxlY3RlZCAmJiBkZXNjQWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZU5vZGVzU2VsZWN0aW9uLnNlbGVjdChub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25UcmVlU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGlvbkNoYW5nZTogU2VsZWN0aW9uQ2hhbmdlPFQ+KTogdm9pZCB7XG4gICAgICAgIHNlbGVjdGlvbkNoYW5nZS5yZW1vdmVkLmZvckVhY2goKHVuc2VsZWN0ZWROb2RlOiBUKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1JlZ3VsYXJOb2RlKHVuc2VsZWN0ZWROb2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZUNoZWNrYm94ZXMuZmluZCgoY2hlY2tib3g6IE1hdENoZWNrYm94KSA9PiBjaGVja2JveC5pZCA9PT0gdW5zZWxlY3RlZE5vZGUuaWQpLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHNlbGVjdGlvbkNoYW5nZS5hZGRlZC5mb3JFYWNoKChzZWxlY3RlZE5vZGU6IFQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUmVndWxhck5vZGUoc2VsZWN0ZWROb2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZUNoZWNrYm94ZXMuZmluZCgoY2hlY2tib3g6IE1hdENoZWNrYm94KSA9PiBjaGVja2JveC5pZCA9PT0gc2VsZWN0ZWROb2RlLmlkKS5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1JlZ3VsYXJOb2RlKG5vZGU6IFQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgIT09IFRyZWVOb2RlVHlwZS5Mb2FkTW9yZU5vZGU7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIihsb2FkaW5nUm9vdCQgfCBhc3luYykgPT09IGZhbHNlOyBlbHNlIGxvYWRpbmdTcGlubmVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0aGlzLmlzRW1wdHkoKTsgZWxzZSBlbXB0eUNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFkZi10cmVlLXJvdyBhZGYtdHJlZS1oZWFkZXJcIiAqbmdJZj1cImRpc3BsYXlOYW1lXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXRyZWUtY2VsbCBhZGYtdHJlZS1jZWxsLWhlYWRlclwiIGRhdGEtYXV0b21hdGlvbi1pZD1cInRyZWUtaGVhZGVyLWRpc3BsYXktbmFtZVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWRmLXRyZWUtY2VsbC12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBkaXNwbGF5TmFtZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC10cmVlXG4gICAgICAgICAgICBjbGFzcz1cImFkZi10cmVlLWJvZHlcIlxuICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwidHJlZVNlcnZpY2VcIlxuICAgICAgICAgICAgW3RyZWVDb250cm9sXT1cInRyZWVTZXJ2aWNlLnRyZWVDb250cm9sXCI+XG4gICAgICAgICAgICA8bWF0LXRyZWUtbm9kZVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXRyZWUtbG9hZC1tb3JlLXJvd1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidsb2FkTW9yZVN1Ym5vZGVzXycgKyBub2RlLnBhcmVudElkXCJcbiAgICAgICAgICAgICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZSB3aGVuIGlzTG9hZE1vcmVOb2RlXCJcbiAgICAgICAgICAgICAgICBtYXRUcmVlTm9kZVBhZGRpbmc+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi10cmVlLWV4cGFuZC1jb2xsYXBzZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFkZi10cmVlLWxvYWQtbW9yZS1idXR0b25cIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImxvYWRNb3JlU3Vibm9kZXMobm9kZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaWFtZXRlcl09XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJub2RlLmlzTG9hZGluZzsgZWxzZSBsb2FkTW9yZUljb25cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsb2FkTW9yZUljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1pY29uIFt2YWx1ZV09XCInY2hldnJvbl9yaWdodCdcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi10cmVlLWNlbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXRyZWUtY2VsbC12YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwibG9hZE1vcmVTdWJub2Rlcyhub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibG9hZE1vcmVTdWJub2Rlcyhub2RlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0FERi1UUkVFLkxPQUQtTU9SRS1CVVRUT04nIHwgdHJhbnNsYXRlOiB7IG5hbWU6IGxvYWRNb3JlU3VmZml4IH0gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9tYXQtdHJlZS1ub2RlPlxuICAgICAgICAgICAgPG1hdC10cmVlLW5vZGVcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi10cmVlLXJvd1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidub2RlXycgKyBub2RlLmlkXCJcbiAgICAgICAgICAgICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZVwiXG4gICAgICAgICAgICAgICAgbWF0VHJlZU5vZGVQYWRkaW5nXG4gICAgICAgICAgICAgICAgW2FkZi1jb250ZXh0LW1lbnVdPVwiY29udGV4dE1lbnVPcHRpb25zXCJcbiAgICAgICAgICAgICAgICBbYWRmLWNvbnRleHQtbWVudS1lbmFibGVkXT1cIiEhY29udGV4dE1lbnVPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiY29udGV4dE1lbnVTb3VyY2UgPSBub2RlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi10cmVlLWV4cGFuZC1jb2xsYXBzZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIm5vZGUuaGFzQ2hpbGRyZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXRyZWUtZXhwYW5kLWNvbGxhcHNlLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cGFuZENvbGxhcHNlTm9kZShub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RpYW1ldGVyXT1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm5vZGUuaXNMb2FkaW5nOyBlbHNlIGV4cGFuZENvbGxhcHNlSWNvblwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2V4cGFuZENvbGxhcHNlSWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWljb24gW3ZhbHVlXT1cImV4cGFuZENvbGxhcHNlSWNvblZhbHVlKG5vZGUpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RhYmxlTm9kZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAqbmdJZj1cIm5vZGUuaGFzQ2hpbGRyZW47IGVsc2Ugbm9DaGlsZHJlbk5vZGVDaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwibm9kZS5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiZGVzY2VuZGFudHNQYXJ0aWFsbHlTZWxlY3RlZChub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbk5vZGVTZWxlY3RlZChub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiaGFzLWNoaWxkcmVuLW5vZGUtY2hlY2tib3hcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vQ2hpbGRyZW5Ob2RlQ2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwibm9kZS5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwidHJlZU5vZGVzU2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Ob2RlU2VsZWN0ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cIm5vLWNoaWxkcmVuLW5vZGUtY2hlY2tib3hcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtdHJlZS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi10cmVlLWNlbGwtdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFkZi10cmVlLWNsaWNrYWJsZS1jZWxsLXZhbHVlXT1cIm5vZGUuaGFzQ2hpbGRyZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImV4cGFuZENvbGxhcHNlTm9kZShub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhwYW5kQ29sbGFwc2VOb2RlKG5vZGUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBub2RlLm5vZGVOYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLXRyZWUtYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCInYWN0aW9uX21lbnVfcmlnaHRfJyArIG5vZGUuaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZUFjdGlvbnNNZW51VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG5vZGU6IG5vZGUgfVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L21hdC10cmVlLW5vZGU+XG4gICAgICAgIDwvbWF0LXRyZWU+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNlbXB0eUNvbnRlbnQ+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVtcHR5Q29udGVudFRlbXBsYXRlXCIgLz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZ1NwaW5uZXI+XG4gICAgPGRpdiBjbGFzcz1cImFkZi10cmVlLWxvYWRpbmctc3Bpbm5lci1jb250YWluZXJcIj5cbiAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiAvPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -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==